diff --git a/BUILD.gn b/BUILD.gn
index aa706be..1b4a952 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -793,7 +793,7 @@
     # so we need to specify the dependencies here instead.
     if (is_android) {
       deps += [
-        "//breakpad:breakpad_unittests",
+        "//breakpad:breakpad_unittests_deps",
         "//breakpad:dump_syms($host_toolchain)",
         "//breakpad:microdump_stackwalk($host_toolchain)",
         "//breakpad:minidump_dump($host_toolchain)",
diff --git a/DEPS b/DEPS
index 25b42c0..55ab2fe 100644
--- a/DEPS
+++ b/DEPS
@@ -39,11 +39,11 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Skia
   # and whatever else without interference from each other.
-  'skia_revision': '60c9b58b3214b0154c931656e91e39b230e987d8',
+  'skia_revision': '175cf0e51b9fbb075588c4d29e7e4257cea6f4ad',
   # 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': 'e60c0f1d3d0d2dc9f42c3d6a339f491ace1f6d3d',
+  'v8_revision': 'eb62d68daa2ac84873dc41bc79fb129479bf2666',
   # 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.
@@ -100,7 +100,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling catapult
   # and whatever else without interference from each other.
-  'catapult_revision': 'fb92d6bfba353bb1608486a6630e523c1de72994',
+  'catapult_revision': '9f41b8df8242a3e553009ca2500c180377555df8',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libFuzzer
   # and whatever else without interference from each other.
diff --git a/PRESUBMIT.py b/PRESUBMIT.py
index 33e704e5..51ae552e 100644
--- a/PRESUBMIT.py
+++ b/PRESUBMIT.py
@@ -306,6 +306,17 @@
 )
 
 
+_ANDROID_SPECIFIC_PYDEPS_FILES = [
+    'build/android/test_runner.pydeps',
+]
+
+_GENERIC_PYDEPS_FILES = [
+    'build/secondary/tools/swarming_client/isolate.pydeps',
+]
+
+_ALL_PYDEPS_FILES = _ANDROID_SPECIFIC_PYDEPS_FILES + _GENERIC_PYDEPS_FILES
+
+
 def _CheckNoProductionCodeUsingTestOnlyFunctions(input_api, output_api):
   """Attempts to prevent use of functions intended only for testing in
   non-testing code. For now this is just a best-effort implementation
@@ -1509,6 +1520,99 @@
   return results
 
 
+class PydepsChecker(object):
+  def __init__(self, input_api, pydeps_files):
+    self._file_cache = {}
+    self._input_api = input_api
+    self._pydeps_files = pydeps_files
+
+  def _LoadFile(self, path):
+    """Returns the list of paths within a .pydeps file relative to //."""
+    if path not in self._file_cache:
+      with open(path) as f:
+        self._file_cache[path] = f.read()
+    return self._file_cache[path]
+
+  def _ComputeNormalizedPydepsEntries(self, pydeps_path):
+    """Returns an interable of paths within the .pydep, relativized to //."""
+    os_path = self._input_api.os_path
+    pydeps_dir = os_path.dirname(pydeps_path)
+    entries = (l.rstrip() for l in self._LoadFile(pydeps_path).splitlines()
+               if not l.startswith('*'))
+    return (os_path.normpath(os_path.join(pydeps_dir, e)) for e in entries)
+
+  def _CreateFilesToPydepsMap(self):
+    """Returns a map of local_path -> list_of_pydeps."""
+    ret = {}
+    for pydep_local_path in self._pydeps_files:
+      for path in self._ComputeNormalizedPydepsEntries(pydep_local_path):
+        ret.setdefault(path, []).append(pydep_local_path)
+    return ret
+
+  def ComputeAffectedPydeps(self):
+    """Returns an iterable of .pydeps files that might need regenerating."""
+    affected_pydeps = set()
+    file_to_pydeps_map = None
+    for f in self._input_api.AffectedFiles(include_deletes=True):
+      local_path = f.LocalPath()
+      if local_path  == 'DEPS':
+        return self._pydeps_files
+      elif local_path.endswith('.pydeps'):
+        if local_path in self._pydeps_files:
+          affected_pydeps.add(local_path)
+      elif local_path.endswith('.py'):
+        if file_to_pydeps_map is None:
+          file_to_pydeps_map = self._CreateFilesToPydepsMap()
+        affected_pydeps.update(file_to_pydeps_map.get(local_path, ()))
+    return affected_pydeps
+
+  def DetermineIfStale(self, pydeps_path):
+    """Runs print_python_deps.py to see if the files is stale."""
+    old_pydeps_data = self._LoadFile(pydeps_path).splitlines()
+    cmd = old_pydeps_data[1][1:].strip()
+    new_pydeps_data = self._input_api.subprocess.check_output(
+        cmd  + ' --output ""', shell=True)
+    if old_pydeps_data[2:] != new_pydeps_data.splitlines()[2:]:
+      return cmd
+
+
+def _CheckPydepsNeedsUpdating(input_api, output_api, checker_for_tests=None):
+  """Checks if a .pydeps file needs to be regenerated."""
+  # TODO(agrieve): Update when there's a better way to detect this: crbug/570091
+  is_android = input_api.os_path.exists('third_party/android_tools')
+  pydeps_files = _ALL_PYDEPS_FILES if is_android else _GENERIC_PYDEPS_FILES
+  results = []
+  # First, check for new / deleted .pydeps.
+  for f in input_api.AffectedFiles(include_deletes=True):
+    if f.LocalPath().endswith('.pydeps'):
+      if f.Action() == 'D' and f.LocalPath() in _ALL_PYDEPS_FILES:
+        results.append(output_api.PresubmitError(
+            'Please update _ALL_PYDEPS_FILES within //PRESUBMIT.py to '
+            'remove %s' % f.LocalPath()))
+      elif f.Action() != 'D' and f.LocalPath() not in _ALL_PYDEPS_FILES:
+        results.append(output_api.PresubmitError(
+            'Please update _ALL_PYDEPS_FILES within //PRESUBMIT.py to '
+            'include %s' % f.LocalPath()))
+
+  if results:
+    return results
+
+  checker = checker_for_tests or PydepsChecker(input_api, pydeps_files)
+
+  for pydep_path in checker.ComputeAffectedPydeps():
+    try:
+      cmd = checker.DetermineIfStale(pydep_path)
+      if cmd:
+        results.append(output_api.PresubmitError(
+            'File is stale: %s\nTo regenerate, run:\n\n    %s' %
+            (pydep_path, cmd)))
+    except input_api.subprocess.CalledProcessError as error:
+      return [output_api.PresubmitError('Error running: %s' % error.cmd,
+          long_text=error.output)]
+
+  return results
+
+
 def _CheckForCopyrightedCode(input_api, output_api):
   """Verifies that newly added code doesn't contain copyrighted material
   and is properly licensed under the standard Chromium license.
@@ -1712,6 +1816,7 @@
   results.extend(_CheckForWindowsLineEndings(input_api, output_api))
   results.extend(_CheckSingletonInHeaders(input_api, output_api))
   results.extend(_CheckNoDeprecatedCompiledResourcesGYP(input_api, output_api))
+  results.extend(_CheckPydepsNeedsUpdating(input_api, output_api))
 
   if any('PRESUBMIT.py' == f.LocalPath() for f in input_api.AffectedFiles()):
     results.extend(input_api.canned_checks.RunUnitTestsInDirectory(
diff --git a/PRESUBMIT_test.py b/PRESUBMIT_test.py
index 7c528c57..d2eb524 100755
--- a/PRESUBMIT_test.py
+++ b/PRESUBMIT_test.py
@@ -3,12 +3,8 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-import glob
-import json
-import os
 import re
 import subprocess
-import sys
 import unittest
 
 import PRESUBMIT
@@ -835,6 +831,103 @@
       output[0].message)
 
 
+class PydepsNeedsUpdatingTest(unittest.TestCase):
+
+  class MockSubprocess(object):
+    CalledProcessError = subprocess.CalledProcessError
+
+  def setUp(self):
+    mock_all_pydeps = ['A.pydeps', 'B.pydeps']
+    self.old_ALL_PYDEPS_FILES = PRESUBMIT._ALL_PYDEPS_FILES
+    PRESUBMIT._ALL_PYDEPS_FILES = mock_all_pydeps
+    self.mock_input_api = MockInputApi()
+    self.mock_output_api = MockOutputApi()
+    self.mock_input_api.subprocess = PydepsNeedsUpdatingTest.MockSubprocess()
+    self.checker = PRESUBMIT.PydepsChecker(self.mock_input_api, mock_all_pydeps)
+    self.checker._file_cache = {
+        'A.pydeps': '# Generated by:\n# CMD A\nA.py\nC.py\n',
+        'B.pydeps': '# Generated by:\n# CMD B\nB.py\nC.py\n',
+    }
+
+  def tearDown(self):
+    PRESUBMIT._ALL_PYDEPS_FILES = self.old_ALL_PYDEPS_FILES
+
+  def _RunCheck(self):
+    return PRESUBMIT._CheckPydepsNeedsUpdating(self.mock_input_api,
+                                               self.mock_output_api,
+                                               checker_for_tests=self.checker)
+
+  def testAddedPydep(self):
+    self.mock_input_api.files = [
+      MockAffectedFile('new.pydeps', [], action='A'),
+    ]
+
+    results = self._RunCheck()
+    self.assertEqual(1, len(results))
+    self.assertTrue('PYDEPS_FILES' in str(results[0]))
+
+  def testRemovedPydep(self):
+    self.mock_input_api.files = [
+      MockAffectedFile(PRESUBMIT._ALL_PYDEPS_FILES[0], [], action='D'),
+    ]
+
+    results = self._RunCheck()
+    self.assertEqual(1, len(results))
+    self.assertTrue('PYDEPS_FILES' in str(results[0]))
+
+  def testRandomPyIgnored(self):
+    self.mock_input_api.files = [
+      MockAffectedFile('random.py', []),
+    ]
+
+    results = self._RunCheck()
+    self.assertEqual(0, len(results), 'Unexpected results: %r' % results)
+
+  def testRelevantPyNoChange(self):
+    self.mock_input_api.files = [
+      MockAffectedFile('A.py', []),
+    ]
+
+    def mock_check_output(cmd, shell=False):
+      self.assertEqual('CMD A --output ""', cmd)
+      return self.checker._file_cache['A.pydeps']
+
+    self.mock_input_api.subprocess.check_output = mock_check_output
+
+    results = self._RunCheck()
+    self.assertEqual(0, len(results), 'Unexpected results: %r' % results)
+
+  def testRelevantPyOneChange(self):
+    self.mock_input_api.files = [
+      MockAffectedFile('A.py', []),
+    ]
+
+    def mock_check_output(cmd, shell=False):
+      self.assertEqual('CMD A --output ""', cmd)
+      return 'changed data'
+
+    self.mock_input_api.subprocess.check_output = mock_check_output
+
+    results = self._RunCheck()
+    self.assertEqual(1, len(results))
+    self.assertTrue('File is stale' in str(results[0]))
+
+  def testRelevantPyTwoChanges(self):
+    self.mock_input_api.files = [
+      MockAffectedFile('C.py', []),
+    ]
+
+    def mock_check_output(cmd, shell=False):
+      return 'changed data'
+
+    self.mock_input_api.subprocess.check_output = mock_check_output
+
+    results = self._RunCheck()
+    self.assertEqual(2, len(results))
+    self.assertTrue('File is stale' in str(results[0]))
+    self.assertTrue('File is stale' in str(results[1]))
+
+
 class LogUsageTest(unittest.TestCase):
 
   def testCheckAndroidCrLogUsage(self):
diff --git a/PRESUBMIT_test_mocks.py b/PRESUBMIT_test_mocks.py
index 5230c87..373b52c6 100644
--- a/PRESUBMIT_test_mocks.py
+++ b/PRESUBMIT_test_mocks.py
@@ -26,7 +26,7 @@
     self.is_committing = False
     self.change = MockChange([])
 
-  def AffectedFiles(self, file_filter=None):
+  def AffectedFiles(self, file_filter=None, include_deletes=False):
     return self.files
 
   def AffectedSourceFiles(self, file_filter=None):
@@ -92,13 +92,14 @@
   MockInputApi for presubmit unittests.
   """
 
-  def __init__(self, local_path, new_contents):
+  def __init__(self, local_path, new_contents, action='A'):
     self._local_path = local_path
     self._new_contents = new_contents
     self._changed_contents = [(i + 1, l) for i, l in enumerate(new_contents)]
+    self._action = action
 
   def Action(self):
-    return 'A'  # TODO(dbeam): feel free to change if your test actually uses.
+    return self._action
 
   def ChangedContents(self):
     return self._changed_contents
diff --git a/ash/content/keyboard_overlay/keyboard_overlay_delegate_unittest.cc b/ash/content/keyboard_overlay/keyboard_overlay_delegate_unittest.cc
index 124513ae..32afe08 100644
--- a/ash/content/keyboard_overlay/keyboard_overlay_delegate_unittest.cc
+++ b/ash/content/keyboard_overlay/keyboard_overlay_delegate_unittest.cc
@@ -63,7 +63,6 @@
                         KeyboardOverlayDelegateTest,
                         testing::Values(SHELF_ALIGNMENT_BOTTOM,
                                         SHELF_ALIGNMENT_LEFT,
-                                        SHELF_ALIGNMENT_RIGHT,
-                                        SHELF_ALIGNMENT_TOP));
+                                        SHELF_ALIGNMENT_RIGHT));
 
 }  // namespace ash
diff --git a/ash/display/display_color_manager_chromeos.cc b/ash/display/display_color_manager_chromeos.cc
index eb34744..278dcb31 100644
--- a/ash/display/display_color_manager_chromeos.cc
+++ b/ash/display/display_color_manager_chromeos.cc
@@ -38,7 +38,8 @@
       qcms_profile_get_vcgt_channel_length(display_profile);
 
   if (!has_color_correction_matrix && !vcgt_channel_length) {
-    LOG(WARNING) << "No vcgt table in ICC file: " << path.value();
+    LOG(WARNING) << "No vcgt table or color correction matrix in ICC file: "
+                 << path.value();
     qcms_profile_release(display_profile);
     return nullptr;
   }
diff --git a/ash/display/display_color_manager_chromeos_unittest.cc b/ash/display/display_color_manager_chromeos_unittest.cc
index d1ed347..f5544d3 100644
--- a/ash/display/display_color_manager_chromeos_unittest.cc
+++ b/ash/display/display_color_manager_chromeos_unittest.cc
@@ -91,6 +91,9 @@
   }
 
   // Unused by these tests.
+  bool DevicePolicyEnabled() const override { return true; }
+
+  // Unused by these tests.
   void GetDaysSinceOobe(
       quirks::QuirksManager::DaysSinceOobeCallback callback) const override {}
 
diff --git a/ash/metrics/user_metrics_recorder.cc b/ash/metrics/user_metrics_recorder.cc
index df523b1c..0572fc7 100644
--- a/ash/metrics/user_metrics_recorder.cc
+++ b/ash/metrics/user_metrics_recorder.cc
@@ -630,7 +630,7 @@
                               shelf->SelectValueForShelfAlignment(
                                   SHELF_ALIGNMENT_UMA_ENUM_VALUE_BOTTOM,
                                   SHELF_ALIGNMENT_UMA_ENUM_VALUE_LEFT,
-                                  SHELF_ALIGNMENT_UMA_ENUM_VALUE_RIGHT, -1),
+                                  SHELF_ALIGNMENT_UMA_ENUM_VALUE_RIGHT),
                               SHELF_ALIGNMENT_UMA_ENUM_VALUE_COUNT);
   }
 
diff --git a/ash/shelf/overflow_bubble_view.cc b/ash/shelf/overflow_bubble_view.cc
index 6573de0..ef288eb 100644
--- a/ash/shelf/overflow_bubble_view.cc
+++ b/ash/shelf/overflow_bubble_view.cc
@@ -75,7 +75,7 @@
     return views::BubbleBorder::NONE;
   return shelf_view_->shelf()->SelectValueForShelfAlignment(
       views::BubbleBorder::BOTTOM_LEFT, views::BubbleBorder::LEFT_TOP,
-      views::BubbleBorder::RIGHT_TOP, views::BubbleBorder::TOP_LEFT);
+      views::BubbleBorder::RIGHT_TOP);
 }
 
 void OverflowBubbleView::ScrollByXOffset(int x_offset) {
diff --git a/ash/shelf/shelf.cc b/ash/shelf/shelf.cc
index 58904c42..538510e5 100644
--- a/ash/shelf/shelf.cc
+++ b/ash/shelf/shelf.cc
@@ -75,8 +75,7 @@
 }
 
 bool Shelf::IsHorizontalAlignment() const {
-  return alignment_ == SHELF_ALIGNMENT_BOTTOM ||
-         alignment_ == SHELF_ALIGNMENT_TOP;
+  return alignment_ == SHELF_ALIGNMENT_BOTTOM;
 }
 
 void Shelf::SetAutoHideBehavior(ShelfAutoHideBehavior behavior) {
diff --git a/ash/shelf/shelf.h b/ash/shelf/shelf.h
index f884458..374534c 100644
--- a/ash/shelf/shelf.h
+++ b/ash/shelf/shelf.h
@@ -66,7 +66,7 @@
 
   // A helper functions that chooses values specific to a shelf alignment.
   template <typename T>
-  T SelectValueForShelfAlignment(T bottom, T left, T right, T top) const {
+  T SelectValueForShelfAlignment(T bottom, T left, T right) const {
     switch (alignment_) {
       case SHELF_ALIGNMENT_BOTTOM:
         return bottom;
@@ -74,8 +74,6 @@
         return left;
       case SHELF_ALIGNMENT_RIGHT:
         return right;
-      case SHELF_ALIGNMENT_TOP:
-        return top;
     }
     NOTREACHED();
     return right;
diff --git a/ash/shelf/shelf_alignment_menu.cc b/ash/shelf/shelf_alignment_menu.cc
index 6d67ed47..8a9d8932 100644
--- a/ash/shelf/shelf_alignment_menu.cc
+++ b/ash/shelf/shelf_alignment_menu.cc
@@ -34,9 +34,9 @@
 ShelfAlignmentMenu::~ShelfAlignmentMenu() {}
 
 bool ShelfAlignmentMenu::IsCommandIdChecked(int command_id) const {
-  return shelf_->SelectValueForShelfAlignment(
-      MENU_ALIGN_BOTTOM == command_id, MENU_ALIGN_LEFT == command_id,
-      MENU_ALIGN_RIGHT == command_id, false);
+  return shelf_->SelectValueForShelfAlignment(MENU_ALIGN_BOTTOM == command_id,
+                                              MENU_ALIGN_LEFT == command_id,
+                                              MENU_ALIGN_RIGHT == command_id);
 }
 
 bool ShelfAlignmentMenu::IsCommandIdEnabled(int command_id) const {
diff --git a/ash/shelf/shelf_bezel_event_filter.cc b/ash/shelf/shelf_bezel_event_filter.cc
index 14ec7dc..39f8101 100644
--- a/ash/shelf/shelf_bezel_event_filter.cc
+++ b/ash/shelf/shelf_bezel_event_filter.cc
@@ -63,10 +63,6 @@
       if (point.x() <= screen.x())
         return true;
       break;
-    case SHELF_ALIGNMENT_TOP:
-      if (point.y() <= screen.y())
-        return true;
-      break;
     case SHELF_ALIGNMENT_RIGHT:
       if (point.x() >= screen.right())
         return true;
diff --git a/ash/shelf/shelf_button.cc b/ash/shelf/shelf_button.cc
index ff7b139..7a805bd 100644
--- a/ash/shelf/shelf_button.cc
+++ b/ash/shelf/shelf_button.cc
@@ -377,9 +377,6 @@
   if (SHELF_ALIGNMENT_LEFT == shelf->alignment())
     x_offset = button_bounds.width() - (kIconSize + icon_pad);
 
-  if (SHELF_ALIGNMENT_TOP == shelf->alignment())
-    y_offset = button_bounds.height() - (kIconSize + icon_pad);
-
   // Center icon with respect to the secondary axis, and ensure
   // that the icon doesn't occlude the bar highlight.
   if (shelf->IsHorizontalAlignment()) {
@@ -499,15 +496,14 @@
           *image, shelf->SelectValueForShelfAlignment(
                       SkBitmapOperations::ROTATION_90_CW,
                       SkBitmapOperations::ROTATION_90_CW,
-                      SkBitmapOperations::ROTATION_270_CW,
-                      SkBitmapOperations::ROTATION_180_CW)));
+                      SkBitmapOperations::ROTATION_270_CW)));
     }
     bar_->SetHorizontalAlignment(shelf->SelectValueForShelfAlignment(
         views::ImageView::CENTER, views::ImageView::LEADING,
-        views::ImageView::TRAILING, views::ImageView::CENTER));
+        views::ImageView::TRAILING));
     bar_->SetVerticalAlignment(shelf->SelectValueForShelfAlignment(
         views::ImageView::TRAILING, views::ImageView::CENTER,
-        views::ImageView::CENTER, views::ImageView::LEADING));
+        views::ImageView::CENTER));
     bar_->SchedulePaint();
   }
 
diff --git a/ash/shelf/shelf_layout_manager.cc b/ash/shelf/shelf_layout_manager.cc
index f27899c..d606508 100644
--- a/ash/shelf/shelf_layout_manager.cc
+++ b/ash/shelf/shelf_layout_manager.cc
@@ -276,8 +276,8 @@
   return SelectValueForShelfAlignment(
       gfx::Rect(rect.x(), rect.bottom() - kShelfSize, rect.width(), kShelfSize),
       gfx::Rect(rect.x(), rect.y(), kShelfSize, rect.height()),
-      gfx::Rect(rect.right() - kShelfSize, rect.y(), kShelfSize, rect.height()),
-      gfx::Rect(rect.x(), rect.y(), rect.width(), kShelfSize));
+      gfx::Rect(rect.right() - kShelfSize, rect.y(), kShelfSize,
+                rect.height()));
 }
 
 void ShelfLayoutManager::LayoutShelf() {
@@ -428,7 +428,6 @@
           correct_direction = gesture_drag_amount_ < 0;
           break;
         case SHELF_ALIGNMENT_LEFT:
-        case SHELF_ALIGNMENT_TOP:
           correct_direction = gesture_drag_amount_ > 0;
           break;
       }
@@ -439,11 +438,10 @@
       should_change = horizontal ? fabs(gesture.details().velocity_y()) > 0 :
                                    fabs(gesture.details().velocity_x()) > 0;
     } else {
-      should_change = SelectValueForShelfAlignment(
-          gesture.details().velocity_y() < 0,
-          gesture.details().velocity_x() > 0,
-          gesture.details().velocity_x() < 0,
-          gesture.details().velocity_y() > 0);
+      should_change =
+          SelectValueForShelfAlignment(gesture.details().velocity_y() < 0,
+                                       gesture.details().velocity_x() > 0,
+                                       gesture.details().velocity_x() < 0);
     }
   } else {
     NOTREACHED();
@@ -521,8 +519,7 @@
 }
 
 bool ShelfLayoutManager::IsHorizontalAlignment() const {
-  return GetAlignment() == SHELF_ALIGNMENT_BOTTOM ||
-         GetAlignment() == SHELF_ALIGNMENT_TOP;
+  return GetAlignment() == SHELF_ALIGNMENT_BOTTOM;
 }
 
 void ShelfLayoutManager::SetChromeVoxPanelHeight(int height) {
@@ -746,8 +743,7 @@
   gfx::Point shelf_origin = SelectValueForShelfAlignment(
       gfx::Point(available_bounds.x(), bottom_shelf_vertical_offset),
       gfx::Point(available_bounds.x(), available_bounds.y()),
-      gfx::Point(available_bounds.right() - shelf_width, available_bounds.y()),
-      gfx::Point(available_bounds.x(), available_bounds.y()));
+      gfx::Point(available_bounds.right() - shelf_width, available_bounds.y()));
   target_bounds->shelf_bounds_in_root =
       gfx::Rect(shelf_origin.x(), shelf_origin.y(), shelf_width, shelf_height);
 
@@ -762,7 +758,6 @@
       gfx::Point(0, 0),
       gfx::Point(shelf_width - status_size.width(),
                  shelf_height - status_size.height()),
-      gfx::Point(0, shelf_height - status_size.height()),
       gfx::Point(0, shelf_height - status_size.height()));
   if (IsHorizontalAlignment() && !base::i18n::IsRTL())
     status_origin.set_x(shelf_width - status_size.width());
@@ -771,8 +766,7 @@
   target_bounds->work_area_insets = SelectValueForShelfAlignment(
       gfx::Insets(0, 0, GetWorkAreaSize(state, shelf_height), 0),
       gfx::Insets(0, GetWorkAreaSize(state, shelf_width), 0, 0),
-      gfx::Insets(0, 0, 0, GetWorkAreaSize(state, shelf_width)),
-      gfx::Insets(GetWorkAreaSize(state, shelf_height), 0, 0, 0));
+      gfx::Insets(0, 0, 0, GetWorkAreaSize(state, shelf_width)));
 
   // TODO(varkha): The functionality of managing insets for display areas
   // should probably be pushed to a separate component. This would simplify or
@@ -814,16 +808,12 @@
   // This needs to happen after calling UpdateTargetBoundsForGesture(), because
   // that can change the size of the shelf.
   target_bounds->shelf_bounds_in_shelf = SelectValueForShelfAlignment(
-      gfx::Rect(0, 0,
-                shelf_width - status_size.width(),
+      gfx::Rect(0, 0, shelf_width - status_size.width(),
                 target_bounds->shelf_bounds_in_root.height()),
       gfx::Rect(0, 0, target_bounds->shelf_bounds_in_root.width(),
                 shelf_height - status_size.height()),
       gfx::Rect(0, 0, target_bounds->shelf_bounds_in_root.width(),
-                shelf_height - status_size.height()),
-      gfx::Rect(0, 0,
-                shelf_width - status_size.width(),
-                target_bounds->shelf_bounds_in_root.height()));
+                shelf_height - status_size.height()));
 
   available_bounds.Subtract(target_bounds->shelf_bounds_in_root);
   available_bounds.Subtract(keyboard_bounds_);
@@ -852,8 +842,7 @@
   bool resist = SelectValueForShelfAlignment(
       gesture_drag_amount_ < -resistance_free_region,
       gesture_drag_amount_ > resistance_free_region,
-      gesture_drag_amount_ < -resistance_free_region,
-      gesture_drag_amount_ > resistance_free_region);
+      gesture_drag_amount_ < -resistance_free_region);
 
   float translate = 0.f;
   if (resist) {
@@ -943,8 +932,7 @@
   gfx::Vector2d offset = SelectValueForShelfAlignment(
       gfx::Vector2d(0, shelf_bounds_in_screen.height()),
       gfx::Vector2d(-kMaxAutoHideShowShelfRegionSize, 0),
-      gfx::Vector2d(shelf_bounds_in_screen.width(), 0),
-      gfx::Vector2d(0, -kMaxAutoHideShowShelfRegionSize));
+      gfx::Vector2d(shelf_bounds_in_screen.width(), 0));
 
   gfx::Rect show_shelf_region_in_screen = shelf_bounds_in_screen;
   show_shelf_region_in_screen += offset;
@@ -1027,14 +1015,11 @@
     // Increase the the hit test area to prevent the shelf from disappearing
     // when the mouse is over the bubble gap.
     ShelfAlignment alignment = GetAlignment();
-    shelf_region.Inset(alignment == SHELF_ALIGNMENT_RIGHT ?
-                           -kNotificationBubbleGapHeight : 0,
-                       alignment == SHELF_ALIGNMENT_BOTTOM ?
-                           -kNotificationBubbleGapHeight : 0,
-                       alignment == SHELF_ALIGNMENT_LEFT ?
-                           -kNotificationBubbleGapHeight : 0,
-                       alignment == SHELF_ALIGNMENT_TOP ?
-                           -kNotificationBubbleGapHeight : 0);
+    shelf_region.Inset(
+        alignment == SHELF_ALIGNMENT_RIGHT ? -kNotificationBubbleGapHeight : 0,
+        alignment == SHELF_ALIGNMENT_BOTTOM ? -kNotificationBubbleGapHeight : 0,
+        alignment == SHELF_ALIGNMENT_LEFT ? -kNotificationBubbleGapHeight : 0,
+        0);
   }
 
   gfx::Point cursor_position_in_screen =
diff --git a/ash/shelf/shelf_layout_manager.h b/ash/shelf/shelf_layout_manager.h
index 6c9bff9..7628b134 100644
--- a/ash/shelf/shelf_layout_manager.h
+++ b/ash/shelf/shelf_layout_manager.h
@@ -185,8 +185,8 @@
   // new Shelf class.
   // A helper function that provides a shortcut for choosing
   // values specific to a shelf alignment.
-  template<typename T>
-  T SelectValueForShelfAlignment(T bottom, T left, T right, T top) const {
+  template <typename T>
+  T SelectValueForShelfAlignment(T bottom, T left, T right) const {
     switch (GetAlignment()) {
       case SHELF_ALIGNMENT_BOTTOM:
         return bottom;
@@ -194,8 +194,6 @@
         return left;
       case SHELF_ALIGNMENT_RIGHT:
         return right;
-      case SHELF_ALIGNMENT_TOP:
-        return top;
     }
     NOTREACHED();
     return right;
diff --git a/ash/shelf/shelf_layout_manager_unittest.cc b/ash/shelf/shelf_layout_manager_unittest.cc
index 8803c24..91d34cb 100644
--- a/ash/shelf/shelf_layout_manager_unittest.cc
+++ b/ash/shelf/shelf_layout_manager_unittest.cc
@@ -181,8 +181,7 @@
         scroll_.x());
     bool increasing_drag =
         GetShelfWidget()->shelf()->SelectValueForShelfAlignment(
-            scroll_delta < 0, scroll_delta > 0,
-            scroll_delta < 0, scroll_delta > 0);
+            scroll_delta < 0, scroll_delta > 0, scroll_delta < 0);
     int shelf_size = GetShelfLayoutManager()->PrimaryAxisValue(
         shelf_bounds.height(),
         shelf_bounds.width());
@@ -1707,7 +1706,7 @@
 #define MAYBE_SetAlignment SetAlignment
 #endif
 
-// Tests SHELF_ALIGNMENT_(LEFT, RIGHT, TOP).
+// Tests SHELF_ALIGNMENT_(LEFT, RIGHT).
 TEST_F(ShelfLayoutManagerTest, MAYBE_SetAlignment) {
   ShelfLayoutManager* shelf = GetShelfLayoutManager();
   // Force an initial layout.
@@ -1774,35 +1773,6 @@
       display.GetWorkAreaInsets().right());
   EXPECT_EQ(ShelfLayoutManager::kAutoHideSize,
       display.bounds().right() - display.work_area().right());
-
-  shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_NEVER);
-  shelf->SetAlignment(SHELF_ALIGNMENT_TOP);
-  display = screen->GetDisplayNearestWindow(Shell::GetPrimaryRootWindow());
-  shelf_bounds = GetShelfWidget()->GetWindowBoundsInScreen();
-  display = screen->GetDisplayNearestWindow(Shell::GetPrimaryRootWindow());
-  ASSERT_NE(-1, display.id());
-  EXPECT_EQ(shelf->GetIdealBounds().height(),
-            display.GetWorkAreaInsets().top());
-  EXPECT_GE(shelf_bounds.height(),
-            GetShelfWidget()->GetContentsView()->GetPreferredSize().height());
-  EXPECT_EQ(SHELF_ALIGNMENT_TOP, GetSystemTray()->shelf_alignment());
-  status_bounds = gfx::Rect(status_area_widget->GetWindowBoundsInScreen());
-  EXPECT_GE(status_bounds.height(),
-            status_area_widget->GetContentsView()->GetPreferredSize().height());
-  EXPECT_EQ(shelf->GetIdealBounds().height(),
-            display.GetWorkAreaInsets().top());
-  EXPECT_EQ(0, display.GetWorkAreaInsets().right());
-  EXPECT_EQ(0, display.GetWorkAreaInsets().bottom());
-  EXPECT_EQ(0, display.GetWorkAreaInsets().left());
-  EXPECT_EQ(display.work_area().y(), shelf_bounds.bottom());
-  EXPECT_EQ(display.bounds().x(), shelf_bounds.x());
-  EXPECT_EQ(display.bounds().width(), shelf_bounds.width());
-  shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS);
-  display = screen->GetDisplayNearestWindow(Shell::GetPrimaryRootWindow());
-  EXPECT_EQ(ShelfLayoutManager::kAutoHideSize,
-      display.GetWorkAreaInsets().top());
-  EXPECT_EQ(ShelfLayoutManager::kAutoHideSize,
-            display.work_area().y() - display.bounds().y());
 }
 
 TEST_F(ShelfLayoutManagerTest, GestureEdgeSwipe) {
diff --git a/ash/shelf/shelf_tooltip_manager.cc b/ash/shelf/shelf_tooltip_manager.cc
index 92621da..0476fd6 100644
--- a/ash/shelf/shelf_tooltip_manager.cc
+++ b/ash/shelf/shelf_tooltip_manager.cc
@@ -147,7 +147,7 @@
   Shelf* shelf = shelf_view_->shelf();
   views::BubbleBorder::Arrow arrow = shelf->SelectValueForShelfAlignment(
       views::BubbleBorder::BOTTOM_CENTER, views::BubbleBorder::LEFT_CENTER,
-      views::BubbleBorder::RIGHT_CENTER, views::BubbleBorder::TOP_CENTER);
+      views::BubbleBorder::RIGHT_CENTER);
 
   base::string16 text = shelf_view_->GetTitleForView(view);
   bubble_ = new ShelfTooltipBubble(view, arrow, text);
diff --git a/ash/shelf/shelf_types.h b/ash/shelf/shelf_types.h
index 4ee3b94..6540f11 100644
--- a/ash/shelf/shelf_types.h
+++ b/ash/shelf/shelf_types.h
@@ -11,7 +11,7 @@
   SHELF_ALIGNMENT_BOTTOM,
   SHELF_ALIGNMENT_LEFT,
   SHELF_ALIGNMENT_RIGHT,
-  SHELF_ALIGNMENT_TOP,
+  // Top has never been supported.
 };
 
 enum ShelfAutoHideBehavior {
diff --git a/ash/shelf/shelf_view.cc b/ash/shelf/shelf_view.cc
index 5c9e60a3..dcdbfb8 100644
--- a/ash/shelf/shelf_view.cc
+++ b/ash/shelf/shelf_view.cc
@@ -730,7 +730,7 @@
                             shelf_->SelectValueForShelfAlignment(
                                 SHELF_ALIGNMENT_UMA_ENUM_VALUE_BOTTOM,
                                 SHELF_ALIGNMENT_UMA_ENUM_VALUE_LEFT,
-                                SHELF_ALIGNMENT_UMA_ENUM_VALUE_RIGHT, -1),
+                                SHELF_ALIGNMENT_UMA_ENUM_VALUE_RIGHT),
                             SHELF_ALIGNMENT_UMA_ENUM_VALUE_COUNT);
 }
 
@@ -1799,7 +1799,7 @@
     // Determine the menu alignment dependent on the shelf.
     menu_alignment = shelf_->SelectValueForShelfAlignment(
         views::MENU_ANCHOR_BUBBLE_ABOVE, views::MENU_ANCHOR_BUBBLE_RIGHT,
-        views::MENU_ANCHOR_BUBBLE_LEFT, views::MENU_ANCHOR_BUBBLE_BELOW);
+        views::MENU_ANCHOR_BUBBLE_LEFT);
   }
   // If this is deleted while the menu is running, the shelf will also be gone.
   bool got_deleted = false;
@@ -1880,7 +1880,7 @@
   const gfx::Rect bounds = GetBoundsInScreen();
   int distance = shelf_->SelectValueForShelfAlignment(
       bounds.y() - coordinate.y(), coordinate.x() - bounds.right(),
-      bounds.x() - coordinate.x(), coordinate.y() - bounds.bottom());
+      bounds.x() - coordinate.x());
   return distance > 0 ? distance : 0;
 }
 
diff --git a/ash/shelf/shelf_view_unittest.cc b/ash/shelf/shelf_view_unittest.cc
index 68ebf31..76655c3b 100644
--- a/ash/shelf/shelf_view_unittest.cc
+++ b/ash/shelf/shelf_view_unittest.cc
@@ -959,7 +959,6 @@
   const ShelfAlignment kAlignments[] = {
       SHELF_ALIGNMENT_LEFT,
       SHELF_ALIGNMENT_RIGHT,
-      SHELF_ALIGNMENT_TOP,
       SHELF_ALIGNMENT_BOTTOM
   };
 
@@ -983,15 +982,14 @@
 // Making sure the overflow bubble arrow correctly tracks with shelf position.
 TEST_F(ShelfViewTest, OverflowArrowForShelfPosition) {
   const ShelfAlignment kAlignments[] = {
-      SHELF_ALIGNMENT_BOTTOM, SHELF_ALIGNMENT_LEFT, SHELF_ALIGNMENT_RIGHT,
-      SHELF_ALIGNMENT_TOP};
+      SHELF_ALIGNMENT_BOTTOM, SHELF_ALIGNMENT_LEFT, SHELF_ALIGNMENT_RIGHT};
 
   // These must match what is expected for each alignment above.
   const views::BubbleBorder::Arrow kArrows[] = {
       views::BubbleBorder::BOTTOM_LEFT, views::BubbleBorder::LEFT_TOP,
-      views::BubbleBorder::RIGHT_TOP, views::BubbleBorder::TOP_LEFT};
+      views::BubbleBorder::RIGHT_TOP};
 
-  for (int i = 0; i < 4; i++) {
+  for (size_t i = 0; i < arraysize(kAlignments); i++) {
     shelf_view_->shelf()->SetAlignment(kAlignments[i]);
 
     // Make sure there are enough icons to trigger the overflow in new
diff --git a/ash/shelf/shelf_widget.cc b/ash/shelf/shelf_widget.cc
index 6458119..685a434 100644
--- a/ash/shelf/shelf_widget.cc
+++ b/ash/shelf/shelf_widget.cc
@@ -183,8 +183,7 @@
         shelf_->shelf_layout_manager()->SelectValueForShelfAlignment(
             SkBitmapOperations::ROTATION_90_CW,
             SkBitmapOperations::ROTATION_90_CW,
-            SkBitmapOperations::ROTATION_270_CW,
-            SkBitmapOperations::ROTATION_180_CW));
+            SkBitmapOperations::ROTATION_270_CW));
   }
   paint.setAlpha(alpha_);
   canvas->DrawImageInt(shelf_background,
@@ -272,8 +271,6 @@
         return gfx::Insets(0, 0, 0, distance);
       case ash::SHELF_ALIGNMENT_RIGHT:
         return gfx::Insets(0, distance, 0, 0);
-      case ash::SHELF_ALIGNMENT_TOP:
-        return gfx::Insets(0, 0, distance, 0);
     }
     NOTREACHED();
     return gfx::Insets();
@@ -476,8 +473,7 @@
         shelf_->shelf_layout_manager()->SelectValueForShelfAlignment(
             SkBitmapOperations::ROTATION_90_CW,
             SkBitmapOperations::ROTATION_90_CW,
-            SkBitmapOperations::ROTATION_270_CW,
-            SkBitmapOperations::ROTATION_180_CW));
+            SkBitmapOperations::ROTATION_270_CW));
   const gfx::Rect dock_bounds(shelf_->shelf_layout_manager()->dock_bounds());
   SkPaint paint;
   paint.setAlpha(alpha_);
@@ -538,8 +534,7 @@
       shelf_->shelf_layout_manager()->SelectValueForShelfAlignment(
           gfx::Rect(0, height() - kNumBlackPixels, width(), kNumBlackPixels),
           gfx::Rect(0, 0, kNumBlackPixels, height()),
-          gfx::Rect(width() - kNumBlackPixels, 0, kNumBlackPixels, height()),
-          gfx::Rect(0, 0, width(), kNumBlackPixels));
+          gfx::Rect(width() - kNumBlackPixels, 0, kNumBlackPixels, height()));
   canvas->FillRect(black_rect, SK_ColorBLACK);
 }
 
diff --git a/ash/system/cast/tray_cast.cc b/ash/system/cast/tray_cast.cc
index 0905d2c..2767e86 100644
--- a/ash/system/cast/tray_cast.cc
+++ b/ash/system/cast/tray_cast.cc
@@ -360,7 +360,6 @@
   views::BoxLayout::Orientation layout = views::BoxLayout::kHorizontal;
   switch (alignment) {
     case ash::SHELF_ALIGNMENT_BOTTOM:
-    case ash::SHELF_ALIGNMENT_TOP:
       layout = views::BoxLayout::kHorizontal;
       break;
     case ash::SHELF_ALIGNMENT_LEFT:
diff --git a/ash/system/chromeos/screen_security/screen_tray_item.cc b/ash/system/chromeos/screen_security/screen_tray_item.cc
index 2b3667d..ab8b003 100644
--- a/ash/system/chromeos/screen_security/screen_tray_item.cc
+++ b/ash/system/chromeos/screen_security/screen_tray_item.cc
@@ -188,10 +188,8 @@
 
   // Center the item dependent on the orientation of the shelf.
   views::BoxLayout::Orientation layout =
-      (alignment == ash::SHELF_ALIGNMENT_BOTTOM ||
-       alignment == ash::SHELF_ALIGNMENT_TOP)
-          ? views::BoxLayout::kHorizontal
-          : views::BoxLayout::kVertical;
+      alignment == ash::SHELF_ALIGNMENT_BOTTOM ? views::BoxLayout::kHorizontal
+                                               : views::BoxLayout::kVertical;
   tray_view_->SetLayoutManager(new views::BoxLayout(layout, 0, 0, 0));
   tray_view_->Layout();
 }
diff --git a/ash/system/chromeos/virtual_keyboard/virtual_keyboard_tray.cc b/ash/system/chromeos/virtual_keyboard/virtual_keyboard_tray.cc
index 7d29777..956442a 100644
--- a/ash/system/chromeos/virtual_keyboard/virtual_keyboard_tray.cc
+++ b/ash/system/chromeos/virtual_keyboard/virtual_keyboard_tray.cc
@@ -60,7 +60,7 @@
   // Square up the padding if horizontally aligned. Avoid extra padding when
   // vertically aligned as the button would violate the width constraint on the
   // shelf.
-  if (alignment == SHELF_ALIGNMENT_BOTTOM || alignment == SHELF_ALIGNMENT_TOP) {
+  if (alignment == SHELF_ALIGNMENT_BOTTOM) {
     gfx::Insets insets = button_->GetInsets();
     int additional_padding = std::max(0, top_padding - left_padding);
     left_padding += additional_padding;
diff --git a/ash/system/date/tray_date.cc b/ash/system/date/tray_date.cc
index 8a574fe..7d9e4c39 100644
--- a/ash/system/date/tray_date.cc
+++ b/ash/system/date/tray_date.cc
@@ -53,9 +53,9 @@
 views::View* TrayDate::CreateTrayView(user::LoginStatus status) {
   CHECK(time_tray_ == NULL);
   ClockLayout clock_layout =
-      (system_tray()->shelf_alignment() == SHELF_ALIGNMENT_BOTTOM ||
-       system_tray()->shelf_alignment() == SHELF_ALIGNMENT_TOP) ?
-          HORIZONTAL_CLOCK : VERTICAL_CLOCK;
+      system_tray()->shelf_alignment() == SHELF_ALIGNMENT_BOTTOM
+          ? HORIZONTAL_CLOCK
+          : VERTICAL_CLOCK;
   time_tray_ = new tray::TimeView(clock_layout);
   views::View* view = new TrayItemView(this);
   view->AddChildView(time_tray_);
@@ -94,9 +94,8 @@
 
 void TrayDate::UpdateAfterShelfAlignmentChange(ShelfAlignment alignment) {
   if (time_tray_) {
-    ClockLayout clock_layout = (alignment == SHELF_ALIGNMENT_BOTTOM ||
-        alignment == SHELF_ALIGNMENT_TOP) ?
-            HORIZONTAL_CLOCK : VERTICAL_CLOCK;
+    ClockLayout clock_layout =
+        alignment == SHELF_ALIGNMENT_BOTTOM ? HORIZONTAL_CLOCK : VERTICAL_CLOCK;
     time_tray_->UpdateClockLayout(clock_layout);
   }
 }
diff --git a/ash/system/overview/overview_button_tray.cc b/ash/system/overview/overview_button_tray.cc
index f5295b5..e68a193 100644
--- a/ash/system/overview/overview_button_tray.cc
+++ b/ash/system/overview/overview_button_tray.cc
@@ -107,8 +107,7 @@
 }
 
 void OverviewButtonTray::SetIconBorderForShelfAlignment() {
-  if (shelf_alignment() == SHELF_ALIGNMENT_BOTTOM ||
-      shelf_alignment() == SHELF_ALIGNMENT_TOP) {
+  if (shelf_alignment() == SHELF_ALIGNMENT_BOTTOM) {
     icon_->SetBorder(views::Border::CreateEmptyBorder(
         kHorizontalShelfVerticalPadding,
         kHorizontalShelfHorizontalPadding,
diff --git a/ash/system/status_area_widget_delegate.cc b/ash/system/status_area_widget_delegate.cc
index c58649b5..eec743a 100644
--- a/ash/system/status_area_widget_delegate.cc
+++ b/ash/system/status_area_widget_delegate.cc
@@ -113,8 +113,7 @@
   SetLayoutManager(layout);
 
   views::ColumnSet* columns = layout->AddColumnSet(0);
-  if (alignment_ == SHELF_ALIGNMENT_BOTTOM ||
-      alignment_ == SHELF_ALIGNMENT_TOP) {
+  if (alignment_ == SHELF_ALIGNMENT_BOTTOM) {
     bool is_first_visible_child = true;
     for (int c = 0; c < child_count(); ++c) {
       views::View* child = child_at(c);
diff --git a/ash/system/tray/system_tray.cc b/ash/system/tray/system_tray.cc
index 09d9fc3..9fc1b8a 100644
--- a/ash/system/tray/system_tray.cc
+++ b/ash/system/tray/system_tray.cc
@@ -422,8 +422,7 @@
 
 int SystemTray::GetTrayXOffset(SystemTrayItem* item) const {
   // Don't attempt to align the arrow if the shelf is on the left or right.
-  if (shelf_alignment() != SHELF_ALIGNMENT_BOTTOM &&
-      shelf_alignment() != SHELF_ALIGNMENT_TOP)
+  if (shelf_alignment() != SHELF_ALIGNMENT_BOTTOM)
     return TrayBubbleView::InitParams::kArrowDefaultOffset;
 
   std::map<SystemTrayItem*, views::View*>::const_iterator it =
@@ -603,13 +602,8 @@
         gfx::Screen::GetScreen()
             ->GetDisplayNearestWindow(bubble_view->GetWidget()->GetNativeView())
             .work_area();
-    if (GetShelfLayoutManager()->GetAlignment() != SHELF_ALIGNMENT_TOP) {
-      height = std::max(
-          0, work_area.height() - bubble_view->GetBoundsInScreen().y());
-    } else {
-      height = std::max(
-          0, bubble_view->GetBoundsInScreen().bottom() - work_area.y());
-    }
+    height =
+        std::max(0, work_area.height() - bubble_view->GetBoundsInScreen().y());
   }
   status_area_widget()->web_notification_tray()->SetSystemTrayHeight(height);
 }
@@ -723,8 +717,7 @@
     if (event.IsMouseEvent() || event.type() == ui::ET_GESTURE_TAP) {
       const ui::LocatedEvent& located_event =
           static_cast<const ui::LocatedEvent&>(event);
-      if (shelf_alignment() == SHELF_ALIGNMENT_BOTTOM ||
-          shelf_alignment() == SHELF_ALIGNMENT_TOP) {
+      if (shelf_alignment() == SHELF_ALIGNMENT_BOTTOM) {
         gfx::Point point(located_event.x(), 0);
         ConvertPointToWidget(this, &point);
         arrow_offset = point.x();
diff --git a/ash/system/tray/tray_background_view.cc b/ash/system/tray/tray_background_view.cc
index 0c125bf..82078edd 100644
--- a/ash/system/tray/tray_background_view.cc
+++ b/ash/system/tray/tray_background_view.cc
@@ -191,8 +191,7 @@
 void TrayBackgroundView::TrayContainer::UpdateLayout() {
   // Adjust the size of status tray dark background by adding additional
   // empty border.
-  if (alignment_ == SHELF_ALIGNMENT_BOTTOM ||
-      alignment_ == SHELF_ALIGNMENT_TOP) {
+  if (alignment_ == SHELF_ALIGNMENT_BOTTOM) {
     SetBorder(views::Border::CreateEmptyBorder(
         kPaddingFromEdgeOfShelf,
         kPaddingFromEdgeOfShelf,
@@ -450,8 +449,7 @@
 
 void TrayBackgroundView::HideTransformation() {
   gfx::Transform transform;
-  if (shelf_alignment_ == SHELF_ALIGNMENT_BOTTOM ||
-      shelf_alignment_ == SHELF_ALIGNMENT_TOP)
+  if (shelf_alignment_ == SHELF_ALIGNMENT_BOTTOM)
     transform.Translate(width(), 0.0f);
   else
     transform.Translate(0.0f, height());
@@ -567,8 +565,6 @@
       return TrayBubbleView::ANCHOR_ALIGNMENT_LEFT;
     case SHELF_ALIGNMENT_RIGHT:
       return TrayBubbleView::ANCHOR_ALIGNMENT_RIGHT;
-    case SHELF_ALIGNMENT_TOP:
-      return TrayBubbleView::ANCHOR_ALIGNMENT_TOP;
   }
   NOTREACHED();
   return TrayBubbleView::ANCHOR_ALIGNMENT_BOTTOM;
diff --git a/ash/system/tray/tray_image_item.cc b/ash/system/tray/tray_image_item.cc
index 386897c4..b7891c3f 100644
--- a/ash/system/tray/tray_image_item.cc
+++ b/ash/system/tray/tray_image_item.cc
@@ -76,7 +76,6 @@
   views::BoxLayout::Orientation layout = views::BoxLayout::kHorizontal;
   switch (alignment) {
     case ash::SHELF_ALIGNMENT_BOTTOM:
-    case ash::SHELF_ALIGNMENT_TOP:
       layout = views::BoxLayout::kHorizontal;
       break;
     case ash::SHELF_ALIGNMENT_LEFT:
diff --git a/ash/system/tray/tray_item_view.cc b/ash/system/tray/tray_item_view.cc
index b338358..a1a749a 100644
--- a/ash/system/tray/tray_item_view.cc
+++ b/ash/system/tray/tray_item_view.cc
@@ -85,15 +85,13 @@
 
 gfx::Size TrayItemView::GetPreferredSize() const {
   gfx::Size size = DesiredSize();
-  if (owner()->system_tray()->shelf_alignment() == SHELF_ALIGNMENT_BOTTOM ||
-      owner()->system_tray()->shelf_alignment() == SHELF_ALIGNMENT_TOP)
+  if (owner()->system_tray()->shelf_alignment() == SHELF_ALIGNMENT_BOTTOM)
     size.set_height(kTrayIconHeight);
   else
     size.set_width(kTrayIconWidth);
   if (!animation_.get() || !animation_->is_animating())
     return size;
-  if (owner()->system_tray()->shelf_alignment() == SHELF_ALIGNMENT_BOTTOM ||
-      owner()->system_tray()->shelf_alignment() == SHELF_ALIGNMENT_TOP) {
+  if (owner()->system_tray()->shelf_alignment() == SHELF_ALIGNMENT_BOTTOM) {
     size.set_width(std::max(1,
         static_cast<int>(size.width() * animation_->GetCurrentValue())));
   } else {
@@ -113,8 +111,7 @@
 
 void TrayItemView::AnimationProgressed(const gfx::Animation* animation) {
   gfx::Transform transform;
-  if (owner()->system_tray()->shelf_alignment() == SHELF_ALIGNMENT_BOTTOM ||
-      owner()->system_tray()->shelf_alignment() == SHELF_ALIGNMENT_TOP) {
+  if (owner()->system_tray()->shelf_alignment() == SHELF_ALIGNMENT_BOTTOM) {
     transform.Translate(0, animation->CurrentValueBetween(
         static_cast<double>(height()) / 2, 0.));
   } else {
diff --git a/ash/system/tray/tray_utils.cc b/ash/system/tray/tray_utils.cc
index 893697c1..fd2c81c 100644
--- a/ash/system/tray/tray_utils.cc
+++ b/ash/system/tray/tray_utils.cc
@@ -26,8 +26,7 @@
 
 void SetTrayImageItemBorder(views::View* tray_view,
                             ShelfAlignment alignment) {
-  if (alignment == SHELF_ALIGNMENT_BOTTOM ||
-      alignment == SHELF_ALIGNMENT_TOP) {
+  if (alignment == SHELF_ALIGNMENT_BOTTOM) {
     tray_view->SetBorder(views::Border::CreateEmptyBorder(
         0,
         kTrayImageItemHorizontalPaddingBottomAlignment,
@@ -44,8 +43,7 @@
 
 void SetTrayLabelItemBorder(TrayItemView* tray_view,
                             ShelfAlignment alignment) {
-  if (alignment == SHELF_ALIGNMENT_BOTTOM ||
-      alignment == SHELF_ALIGNMENT_TOP) {
+  if (alignment == SHELF_ALIGNMENT_BOTTOM) {
     tray_view->SetBorder(views::Border::CreateEmptyBorder(
         0,
         kTrayLabelItemHorizontalPaddingBottomAlignment,
diff --git a/ash/system/user/tray_user.cc b/ash/system/user/tray_user.cc
index 06fe448..a92bad5 100644
--- a/ash/system/user/tray_user.cc
+++ b/ash/system/user/tray_user.cc
@@ -191,8 +191,7 @@
   // Inactive users won't have a layout.
   if (!layout_view_)
     return;
-  if (alignment == SHELF_ALIGNMENT_BOTTOM ||
-      alignment == SHELF_ALIGNMENT_TOP) {
+  if (alignment == SHELF_ALIGNMENT_BOTTOM) {
     if (avatar_) {
       avatar_->SetBorder(views::Border::NullBorder());
       avatar_->SetCornerRadii(
diff --git a/ash/system/web_notification/ash_popup_alignment_delegate.cc b/ash/system/web_notification/ash_popup_alignment_delegate.cc
index 98fffe9..a49a78c 100644
--- a/ash/system/web_notification/ash_popup_alignment_delegate.cc
+++ b/ash/system/web_notification/ash_popup_alignment_delegate.cc
@@ -85,11 +85,8 @@
 }
 
 int AshPopupAlignmentDelegate::GetBaseLine() const {
-  return IsTopDown()
-      ? work_area_.y() + kNoToastMarginBorderAndShadowOffset +
-        system_tray_height_
-      : work_area_.bottom() - kNoToastMarginBorderAndShadowOffset -
-        system_tray_height_;
+  return work_area_.bottom() - kNoToastMarginBorderAndShadowOffset -
+         system_tray_height_;
 }
 
 int AshPopupAlignmentDelegate::GetWorkAreaBottom() const {
@@ -97,7 +94,7 @@
 }
 
 bool AshPopupAlignmentDelegate::IsTopDown() const {
-  return GetAlignment() == SHELF_ALIGNMENT_TOP;
+  return false;
 }
 
 bool AshPopupAlignmentDelegate::IsFromLeft() const {
diff --git a/ash/system/web_notification/ash_popup_alignment_delegate_unittest.cc b/ash/system/web_notification/ash_popup_alignment_delegate_unittest.cc
index c432d28..35ced58c 100644
--- a/ash/system/web_notification/ash_popup_alignment_delegate_unittest.cc
+++ b/ash/system/web_notification/ash_popup_alignment_delegate_unittest.cc
@@ -135,15 +135,6 @@
   EXPECT_EQ(BOTTOM_LEFT, GetPositionInDisplay(toast_point));
   EXPECT_FALSE(alignment_delegate()->IsTopDown());
   EXPECT_TRUE(alignment_delegate()->IsFromLeft());
-
-  Shell::GetInstance()->SetShelfAlignment(
-      SHELF_ALIGNMENT_TOP,
-      Shell::GetPrimaryRootWindow());
-  toast_point.set_x(alignment_delegate()->GetToastOriginX(toast_size));
-  toast_point.set_y(alignment_delegate()->GetBaseLine());
-  EXPECT_EQ(TOP_RIGHT, GetPositionInDisplay(toast_point));
-  EXPECT_TRUE(alignment_delegate()->IsTopDown());
-  EXPECT_FALSE(alignment_delegate()->IsFromLeft());
 }
 
 TEST_F(AshPopupAlignmentDelegateTest, LockScreen) {
diff --git a/ash/system/web_notification/web_notification_tray.cc b/ash/system/web_notification/web_notification_tray.cc
index db2814f..a8b1139d 100644
--- a/ash/system/web_notification/web_notification_tray.cc
+++ b/ash/system/web_notification/web_notification_tray.cc
@@ -226,12 +226,6 @@
       max_height = shelf_bounds.y();
       break;
     }
-    case SHELF_ALIGNMENT_TOP: {
-      aura::Window* root = status_area_window->GetRootWindow();
-      max_height =
-          root->bounds().height() - status_area_window->bounds().height();
-      break;
-    }
     case SHELF_ALIGNMENT_LEFT:
     case SHELF_ALIGNMENT_RIGHT: {
       // Assume that the bottom line of the status area widget and the bubble
@@ -239,8 +233,6 @@
       max_height = status_area_window->GetBoundsInRootWindow().bottom();
       break;
     }
-    default:
-      NOTREACHED();
   }
 
   message_center_bubble->SetMaxHeight(std::max(0,
diff --git a/ash/wm/app_list_controller.cc b/ash/wm/app_list_controller.cc
index d6465d26..823c3273 100644
--- a/ash/wm/app_list_controller.cc
+++ b/ash/wm/app_list_controller.cc
@@ -57,7 +57,7 @@
   DCHECK(Shell::HasInstance());
   return Shelf::ForWindow(window)->SelectValueForShelfAlignment(
       views::BubbleBorder::BOTTOM_CENTER, views::BubbleBorder::LEFT_CENTER,
-      views::BubbleBorder::RIGHT_CENTER, views::BubbleBorder::TOP_CENTER);
+      views::BubbleBorder::RIGHT_CENTER);
 }
 
 // Offset given |rect| towards shelf.
@@ -76,9 +76,6 @@
     case SHELF_ALIGNMENT_RIGHT:
       offseted.Offset(kAnimationOffset, 0);
       break;
-    case SHELF_ALIGNMENT_TOP:
-      offseted.Offset(0, -kAnimationOffset);
-      break;
   }
 
   return offseted;
@@ -93,7 +90,6 @@
       widget->GetNativeView()->GetRootWindow());
   gfx::Point anchor(button_bounds.CenterPoint());
   switch (shelf_alignment) {
-    case SHELF_ALIGNMENT_TOP:
     case SHELF_ALIGNMENT_BOTTOM:
       if (base::i18n::IsRTL()) {
         int screen_width = widget->GetWorkAreaBoundsInScreen().width();
@@ -109,10 +105,9 @@
     case SHELF_ALIGNMENT_RIGHT:
       return gfx::Vector2d(
           0, std::max(kMinimalAnchorPositionOffset - anchor.y(), 0));
-    default:
-      NOTREACHED();
-      return gfx::Vector2d();
   }
+  NOTREACHED();
+  return gfx::Vector2d();
 }
 
 // Gets the point at the center of the display that a particular view is on.
diff --git a/ash/wm/panels/attached_panel_window_targeter.cc b/ash/wm/panels/attached_panel_window_targeter.cc
index 4e8b8f7..23b0141f 100644
--- a/ash/wm/panels/attached_panel_window_targeter.cc
+++ b/ash/wm/panels/attached_panel_window_targeter.cc
@@ -61,12 +61,6 @@
     case SHELF_ALIGNMENT_RIGHT:
       touch = gfx::Insets(touch.top(), touch.left(), touch.bottom(), 0);
       break;
-    case SHELF_ALIGNMENT_TOP:
-      touch = gfx::Insets(0, touch.left(), touch.bottom(), touch.right());
-      break;
-    default:
-      NOTREACHED();
-      return;
   }
 
   set_touch_extend(touch);
diff --git a/ash/wm/panels/panel_layout_manager.cc b/ash/wm/panels/panel_layout_manager.cc
index e1bd6a70..24da733 100644
--- a/ash/wm/panels/panel_layout_manager.cc
+++ b/ash/wm/panels/panel_layout_manager.cc
@@ -79,11 +79,6 @@
         path.lineTo(SkIntToScalar(0), SkIntToScalar(kArrowWidth / 2));
         path.lineTo(SkIntToScalar(kArrowHeight), SkIntToScalar(0));
         break;
-      case SHELF_ALIGNMENT_TOP:
-        path.moveTo(SkIntToScalar(0), SkIntToScalar(kArrowHeight));
-        path.lineTo(SkIntToScalar(kArrowWidth / 2), SkIntToScalar(0));
-        path.lineTo(SkIntToScalar(kArrowWidth), SkIntToScalar(kArrowHeight));
-        break;
       case SHELF_ALIGNMENT_RIGHT:
         path.moveTo(SkIntToScalar(0), SkIntToScalar(0));
         path.lineTo(SkIntToScalar(kArrowHeight),
@@ -193,9 +188,6 @@
     case SHELF_ALIGNMENT_RIGHT:
       offset.set_x(kPanelSlideInOffset);
       break;
-    case SHELF_ALIGNMENT_TOP:
-      offset.set_y(-kPanelSlideInOffset);
-      break;
   }
   return offset;
 }
@@ -211,8 +203,7 @@
 
   void SetAlignment(ShelfAlignment alignment) {
     gfx::Rect callout_bounds = GetWindowBoundsInScreen();
-    if (alignment == SHELF_ALIGNMENT_BOTTOM ||
-        alignment == SHELF_ALIGNMENT_TOP) {
+    if (alignment == SHELF_ALIGNMENT_BOTTOM) {
       callout_bounds.set_width(kArrowWidth);
       callout_bounds.set_height(kArrowHeight);
     } else {
@@ -721,9 +712,6 @@
       case SHELF_ALIGNMENT_RIGHT:
         bounds.set_x(shelf_bounds.x() - bounds.width());
         break;
-      case SHELF_ALIGNMENT_TOP:
-        bounds.set_y(shelf_bounds.bottom());
-        break;
     }
     bool on_shelf = visible_panels[i].window->GetTargetBounds() == bounds;
 
@@ -867,9 +855,6 @@
       case SHELF_ALIGNMENT_RIGHT:
         callout_bounds.set_x(bounds.right());
         break;
-      case SHELF_ALIGNMENT_TOP:
-        callout_bounds.set_y(bounds.y() - callout_bounds.height());
-        break;
     }
     callout_bounds = ScreenUtil::ConvertRectFromScreen(
         callout_widget->GetNativeWindow()->parent(),
diff --git a/ash/wm/panels/panel_layout_manager_unittest.cc b/ash/wm/panels/panel_layout_manager_unittest.cc
index a8f23cd..f8e2040 100644
--- a/ash/wm/panels/panel_layout_manager_unittest.cc
+++ b/ash/wm/panels/panel_layout_manager_unittest.cc
@@ -150,9 +150,6 @@
       case SHELF_ALIGNMENT_RIGHT:
         EXPECT_EQ(shelf_bounds.x(), window_bounds.right());
         break;
-      case SHELF_ALIGNMENT_TOP:
-        EXPECT_EQ(shelf_bounds.bottom(), window_bounds.y());
-        break;
     }
   }
 
@@ -182,9 +179,6 @@
       case SHELF_ALIGNMENT_RIGHT:
         EXPECT_EQ(panel_bounds.right(), callout_bounds.x());
         break;
-      case SHELF_ALIGNMENT_TOP:
-        EXPECT_EQ(panel_bounds.y(), callout_bounds.bottom());
-        break;
     }
 
     if (IsHorizontal(alignment)) {
@@ -256,8 +250,7 @@
   scoped_ptr<test::ShelfViewTestAPI> shelf_view_test_;
 
   bool IsHorizontal(ShelfAlignment alignment) {
-    return alignment == SHELF_ALIGNMENT_BOTTOM ||
-           alignment == SHELF_ALIGNMENT_TOP;
+    return alignment == SHELF_ALIGNMENT_BOTTOM;
   }
 
   DISALLOW_COPY_AND_ASSIGN(PanelLayoutManagerTest);
@@ -699,9 +692,6 @@
   SetAlignment(root_windows[1], SHELF_ALIGNMENT_LEFT);
   IsPanelAboveLauncherIcon(p1_d2.get());
   IsCalloutAboveLauncherIcon(p1_d2.get());
-  SetAlignment(root_windows[1], SHELF_ALIGNMENT_TOP);
-  IsPanelAboveLauncherIcon(p1_d2.get());
-  IsCalloutAboveLauncherIcon(p1_d2.get());
 }
 
 TEST_F(PanelLayoutManagerTest, AlignmentLeft) {
@@ -720,14 +710,6 @@
   IsCalloutAboveLauncherIcon(w.get());
 }
 
-TEST_F(PanelLayoutManagerTest, AlignmentTop) {
-  gfx::Rect bounds(0, 0, 201, 201);
-  scoped_ptr<aura::Window> w(CreatePanelWindow(bounds));
-  SetAlignment(Shell::GetPrimaryRootWindow(), SHELF_ALIGNMENT_TOP);
-  IsPanelAboveLauncherIcon(w.get());
-  IsCalloutAboveLauncherIcon(w.get());
-}
-
 // Tests that panels will hide and restore their state with the shelf visibility
 // state. This ensures that entering full-screen mode will hide your panels
 // until you leave it.
@@ -831,18 +813,6 @@
   touch.set_location(gfx::Point(bounds.x() - 1, bounds.y() + 5));
   target = targeter->FindTargetForEvent(root, &touch);
   EXPECT_NE(w.get(), target);
-
-  // Hit test outside the left edge with a top-aligned shelf.
-  SetAlignment(Shell::GetPrimaryRootWindow(), SHELF_ALIGNMENT_TOP);
-  bounds = w->bounds();
-  touch.set_location(gfx::Point(bounds.x() - 1, bounds.y() + 5));
-  target = targeter->FindTargetForEvent(root, &touch);
-  EXPECT_EQ(w.get(), target);
-
-  // Hit test outside the top edge with a top-aligned shelf.
-  touch.set_location(gfx::Point(bounds.x() + 4, bounds.y() - 6));
-  target = targeter->FindTargetForEvent(root, &touch);
-  EXPECT_NE(w.get(), target);
 }
 
 INSTANTIATE_TEST_CASE_P(LtrRtl, PanelLayoutManagerTextDirectionTest,
diff --git a/ash/wm/panels/panel_window_resizer.cc b/ash/wm/panels/panel_window_resizer.cc
index 7d94aa54..501503a 100644
--- a/ash/wm/panels/panel_window_resizer.cc
+++ b/ash/wm/panels/panel_window_resizer.cc
@@ -160,13 +160,6 @@
           offset->set_x(launcher_bounds.x() - bounds.width() - bounds.x());
         }
         break;
-      case SHELF_ALIGNMENT_TOP:
-        if (bounds.y() <= (launcher_bounds.bottom() +
-                           kPanelSnapToLauncherDistance)) {
-          should_attach = true;
-          offset->set_y(launcher_bounds.bottom() - bounds.y());
-        }
-        break;
     }
   }
   return should_attach;
diff --git a/ash/wm/panels/panel_window_resizer_unittest.cc b/ash/wm/panels/panel_window_resizer_unittest.cc
index fccf61af..e14cd6252 100644
--- a/ash/wm/panels/panel_window_resizer_unittest.cc
+++ b/ash/wm/panels/panel_window_resizer_unittest.cc
@@ -258,17 +258,6 @@
   DetachReattachTest(window.get(), -1, 0);
 }
 
-TEST_F(PanelWindowResizerTest, PanelDetachReattachTop) {
- if (!SupportsHostWindowResize())
-    return;
-
-  ash::Shell* shell = ash::Shell::GetInstance();
-  shell->SetShelfAlignment(SHELF_ALIGNMENT_TOP, shell->GetPrimaryRootWindow());
-  scoped_ptr<aura::Window> window(
-      CreatePanelWindow(gfx::Point(0, 0)));
-  DetachReattachTest(window.get(), 0, 1);
-}
-
 // Tests that a drag continues when the shelf is hidden. This occurs as part of
 // the animation when switching profiles. http://crbug.com/393047.
 TEST_F(PanelWindowResizerTest, DetachThenHideShelf) {
diff --git a/ash/wm/window_animations.cc b/ash/wm/window_animations.cc
index 3689f3f..1ea5952 100644
--- a/ash/wm/window_animations.cc
+++ b/ash/wm/window_animations.cc
@@ -479,9 +479,6 @@
         case SHELF_ALIGNMENT_RIGHT:
           item_rect.set_x(shelf_bounds.x());
           break;
-        case SHELF_ALIGNMENT_TOP:
-          item_rect.set_y(shelf_bounds.bottom());
-          break;
       }
       return item_rect;
     }
@@ -496,8 +493,7 @@
   return shelf->SelectValueForShelfAlignment(
       gfx::Rect(ltr_adjusted_x, work_area.bottom(), 0, 0),
       gfx::Rect(work_area.x(), work_area.y(), 0, 0),
-      gfx::Rect(work_area.right(), work_area.y(), 0, 0),
-      gfx::Rect(ltr_adjusted_x, work_area.y(), 0, 0));
+      gfx::Rect(work_area.right(), work_area.y(), 0, 0));
 }
 
 }  // namespace ash
diff --git a/base/mac/mac_util.h b/base/mac/mac_util.h
index c0d1b2fb..7fd0cded 100644
--- a/base/mac/mac_util.h
+++ b/base/mac/mac_util.h
@@ -119,9 +119,6 @@
 // "OrLater" variants to those that check for a specific version, unless you
 // know for sure that you need to check for a specific version.
 
-// Snow Leopard is Mac OS X 10.6, Darwin 10.
-BASE_EXPORT bool IsOSSnowLeopard();
-
 // Lion is Mac OS X 10.7, Darwin 11.
 BASE_EXPORT bool IsOSLion();
 BASE_EXPORT bool IsOSLionOrEarlier();
@@ -166,7 +163,6 @@
 #if defined(MAC_OS_X_VERSION_10_7) && \
     MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_7
 #define BASE_MAC_MAC_UTIL_H_INLINED_GE_10_7
-inline bool IsOSSnowLeopard() { return false; }
 inline bool IsOSLionOrLater() { return true; }
 #endif
 
diff --git a/base/mac/mac_util.mm b/base/mac/mac_util.mm
index 75d53c9..75ebb84 100644
--- a/base/mac/mac_util.mm
+++ b/base/mac/mac_util.mm
@@ -358,7 +358,7 @@
 bool WasLaunchedAsLoginItemRestoreState() {
   // "Reopen windows..." option was added for Lion.  Prior OS versions should
   // not have this behavior.
-  if (IsOSSnowLeopard() || !WasLaunchedAsLoginOrResumeItem())
+  if (!WasLaunchedAsLoginOrResumeItem())
     return false;
 
   CFStringRef app = CFSTR("com.apple.loginwindow");
@@ -385,12 +385,7 @@
 
   ScopedCFTypeRef<LSSharedFileListItemRef> item(GetLoginItemForApp());
   if (!item.get()) {
-    // Lion can launch items for the resume feature.  So log an error only for
-    // Snow Leopard or earlier.
-    if (IsOSSnowLeopard())
-      DLOG(ERROR) <<
-          "Process launched at Login but can't access Login Item List.";
-
+    // OS X can launch items for the resume feature.
     return false;
   }
   return IsHiddenLoginItem(item);
@@ -488,12 +483,6 @@
 
 }  // namespace
 
-#if !defined(BASE_MAC_MAC_UTIL_H_INLINED_GE_10_7)
-bool IsOSSnowLeopard() {
-  return MacOSXMinorVersion() == SNOW_LEOPARD_MINOR_VERSION;
-}
-#endif
-
 #if !defined(BASE_MAC_MAC_UTIL_H_INLINED_GT_10_7)
 bool IsOSLion() {
   return MacOSXMinorVersion() == LION_MINOR_VERSION;
diff --git a/base/mac/mac_util_unittest.mm b/base/mac/mac_util_unittest.mm
index c5042a05..eac627ed 100644
--- a/base/mac/mac_util_unittest.mm
+++ b/base/mac/mac_util_unittest.mm
@@ -145,25 +145,7 @@
   base::SysInfo::OperatingSystemVersionNumbers(&major, &minor, &bugfix);
 
   if (major == 10) {
-    if (minor == 6) {
-      EXPECT_TRUE(IsOSSnowLeopard());
-      EXPECT_FALSE(IsOSLion());
-      EXPECT_TRUE(IsOSLionOrEarlier());
-      EXPECT_FALSE(IsOSLionOrLater());
-      EXPECT_FALSE(IsOSMountainLion());
-      EXPECT_TRUE(IsOSMountainLionOrEarlier());
-      EXPECT_FALSE(IsOSMountainLionOrLater());
-      EXPECT_FALSE(IsOSMavericks());
-      EXPECT_TRUE(IsOSMavericksOrEarlier());
-      EXPECT_FALSE(IsOSMavericksOrLater());
-      EXPECT_FALSE(IsOSYosemite());
-      EXPECT_TRUE(IsOSYosemiteOrEarlier());
-      EXPECT_FALSE(IsOSYosemiteOrLater());
-      EXPECT_FALSE(IsOSElCapitan());
-      EXPECT_FALSE(IsOSElCapitanOrLater());
-      EXPECT_FALSE(IsOSLaterThanElCapitan_DontCallThis());
-    } else if (minor == 7) {
-      EXPECT_FALSE(IsOSSnowLeopard());
+    if (minor == 7) {
       EXPECT_TRUE(IsOSLion());
       EXPECT_TRUE(IsOSLionOrEarlier());
       EXPECT_TRUE(IsOSLionOrLater());
@@ -180,7 +162,6 @@
       EXPECT_FALSE(IsOSElCapitanOrLater());
       EXPECT_FALSE(IsOSLaterThanElCapitan_DontCallThis());
     } else if (minor == 8) {
-      EXPECT_FALSE(IsOSSnowLeopard());
       EXPECT_FALSE(IsOSLion());
       EXPECT_FALSE(IsOSLionOrEarlier());
       EXPECT_TRUE(IsOSLionOrLater());
@@ -197,7 +178,6 @@
       EXPECT_FALSE(IsOSElCapitanOrLater());
       EXPECT_FALSE(IsOSLaterThanElCapitan_DontCallThis());
     } else if (minor == 9) {
-      EXPECT_FALSE(IsOSSnowLeopard());
       EXPECT_FALSE(IsOSLion());
       EXPECT_FALSE(IsOSLionOrEarlier());
       EXPECT_TRUE(IsOSLionOrLater());
@@ -214,7 +194,6 @@
       EXPECT_FALSE(IsOSElCapitanOrLater());
       EXPECT_FALSE(IsOSLaterThanElCapitan_DontCallThis());
     } else if (minor == 10) {
-      EXPECT_FALSE(IsOSSnowLeopard());
       EXPECT_FALSE(IsOSLion());
       EXPECT_FALSE(IsOSLionOrEarlier());
       EXPECT_TRUE(IsOSLionOrLater());
@@ -231,7 +210,6 @@
       EXPECT_FALSE(IsOSElCapitanOrLater());
       EXPECT_FALSE(IsOSLaterThanElCapitan_DontCallThis());
     } else if (minor == 11) {
-      EXPECT_FALSE(IsOSSnowLeopard());
       EXPECT_FALSE(IsOSLion());
       EXPECT_FALSE(IsOSLionOrEarlier());
       EXPECT_TRUE(IsOSLionOrLater());
diff --git a/base/memory/shared_memory_mac_unittest.cc b/base/memory/shared_memory_mac_unittest.cc
index bcb1f2b..af120bf 100644
--- a/base/memory/shared_memory_mac_unittest.cc
+++ b/base/memory/shared_memory_mac_unittest.cc
@@ -228,10 +228,6 @@
 // Tests that content written to shared memory in the server process can be read
 // by the child process.
 TEST_F(SharedMemoryMacMultiProcessTest, MachBasedSharedMemory) {
-  // Mach-based SharedMemory isn't support on OSX 10.6.
-  if (mac::IsOSSnowLeopard())
-    return;
-
   SetUpChild("MachBasedSharedMemoryClient");
 
   scoped_ptr<SharedMemory> shared_memory(CreateSharedMemory(s_memory_size));
@@ -263,10 +259,6 @@
 
 // Tests that mapping shared memory with an offset works correctly.
 TEST_F(SharedMemoryMacMultiProcessTest, MachBasedSharedMemoryWithOffset) {
-  // Mach-based SharedMemory isn't support on OSX 10.6.
-  if (mac::IsOSSnowLeopard())
-    return;
-
   SetUpChild("MachBasedSharedMemoryWithOffsetClient");
 
   SharedMemoryHandle shm(s_memory_size);
@@ -312,10 +304,6 @@
 // Tests that duplication and closing has the right effect on Mach reference
 // counts.
 TEST_F(SharedMemoryMacMultiProcessTest, MachDuplicateAndClose) {
-  // Mach-based SharedMemory isn't support on OSX 10.6.
-  if (mac::IsOSSnowLeopard())
-    return;
-
   mach_msg_type_number_t active_name_count = GetActiveNameCount();
 
   // Making a new SharedMemoryHandle increments the name count.
@@ -341,10 +329,6 @@
 
 // Tests that Mach shared memory can be mapped and unmapped.
 TEST_F(SharedMemoryMacMultiProcessTest, MachUnmapMap) {
-  // Mach-based SharedMemory isn't support on OSX 10.6.
-  if (mac::IsOSSnowLeopard())
-    return;
-
   mach_msg_type_number_t active_name_count = GetActiveNameCount();
 
   scoped_ptr<SharedMemory> shared_memory = CreateSharedMemory(s_memory_size);
@@ -358,10 +342,6 @@
 // ownership, and that destroying the SharedMemory closes the SharedMemoryHandle
 // as well.
 TEST_F(SharedMemoryMacMultiProcessTest, MachSharedMemoryTakesOwnership) {
-  // Mach-based SharedMemory isn't support on OSX 10.6.
-  if (mac::IsOSSnowLeopard())
-    return;
-
   mach_msg_type_number_t active_name_count = GetActiveNameCount();
 
   // Making a new SharedMemoryHandle increments the name count.
@@ -381,10 +361,6 @@
 
 // Tests that the read-only flag works.
 TEST_F(SharedMemoryMacMultiProcessTest, MachReadOnly) {
-  // Mach-based SharedMemory isn't support on OSX 10.6.
-  if (mac::IsOSSnowLeopard())
-    return;
-
   scoped_ptr<SharedMemory> shared_memory(CreateSharedMemory(s_memory_size));
 
   SharedMemoryHandle shm2 = shared_memory->handle().Duplicate();
@@ -396,10 +372,6 @@
 
 // Tests that the method ShareToProcess() works.
 TEST_F(SharedMemoryMacMultiProcessTest, MachShareToProcess) {
-  // Mach-based SharedMemory isn't support on OSX 10.6.
-  if (mac::IsOSSnowLeopard())
-    return;
-
   mach_msg_type_number_t active_name_count = GetActiveNameCount();
 
   {
@@ -421,10 +393,6 @@
 // Tests that the method ShareReadOnlyToProcess() creates a memory object that
 // is read only.
 TEST_F(SharedMemoryMacMultiProcessTest, MachShareToProcessReadonly) {
-  // Mach-based SharedMemory isn't support on OSX 10.6.
-  if (mac::IsOSSnowLeopard())
-    return;
-
   scoped_ptr<SharedMemory> shared_memory(CreateSharedMemory(s_memory_size));
 
   // Check the protection levels.
@@ -464,10 +432,6 @@
 
 // Tests that the method ShareReadOnlyToProcess() doesn't leak.
 TEST_F(SharedMemoryMacMultiProcessTest, MachShareToProcessReadonlyLeak) {
-  // Mach-based SharedMemory isn't support on OSX 10.6.
-  if (mac::IsOSSnowLeopard())
-    return;
-
   mach_msg_type_number_t active_name_count = GetActiveNameCount();
 
   {
diff --git a/base/process/memory_mac.mm b/base/process/memory_mac.mm
index 1e1a1ba..b70e370 100644
--- a/base/process/memory_mac.mm
+++ b/base/process/memory_mac.mm
@@ -252,16 +252,9 @@
 }
 
 CFAllocatorContext* ContextForCFAllocator(CFAllocatorRef allocator) {
-  if (base::mac::IsOSSnowLeopard()) {
-    ChromeCFAllocatorLeopards* our_allocator =
-        const_cast<ChromeCFAllocatorLeopards*>(
-            reinterpret_cast<const ChromeCFAllocatorLeopards*>(allocator));
-    return &our_allocator->_context;
-  } else if (base::mac::IsOSLion() ||
-             base::mac::IsOSMountainLion() ||
-             base::mac::IsOSMavericks() ||
-             base::mac::IsOSYosemite() ||
-             base::mac::IsOSElCapitan()) {
+  if (base::mac::IsOSLion() || base::mac::IsOSMountainLion() ||
+      base::mac::IsOSMavericks() || base::mac::IsOSYosemite() ||
+      base::mac::IsOSElCapitan()) {
     ChromeCFAllocatorLions* our_allocator =
         const_cast<ChromeCFAllocatorLions*>(
             reinterpret_cast<const ChromeCFAllocatorLions*>(allocator));
diff --git a/base/win/current_module.h b/base/win/current_module.h
index 7650fee..bbc4134 100644
--- a/base/win/current_module.h
+++ b/base/win/current_module.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2016 The Chromium Authors. All rights reserved.
+// Copyright 2016 The Chromium Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
@@ -8,7 +8,7 @@
 // http://blogs.msdn.com/oldnewthing/archive/2004/10/25/247180.aspx
 extern "C" IMAGE_DOS_HEADER __ImageBase;
 
-// Returs the HMODULE of the dll the macro was expanded in.
+// Returns the HMODULE of the dll the macro was expanded in.
 // Only use in cc files, not in h files.
 #define CURRENT_MODULE() reinterpret_cast<HMODULE>(&__ImageBase)
 
diff --git a/breakpad/BUILD.gn b/breakpad/BUILD.gn
index a3b6d1d4..0fd15ceb 100644
--- a/breakpad/BUILD.gn
+++ b/breakpad/BUILD.gn
@@ -623,7 +623,10 @@
     configs += [ "//build/config/compiler:no_chromium_code" ]
   }
 
-  test("breakpad_unittests") {
+  # "breakpad_unittests" cannot use the test() template because the test is run
+  # as an executable not as an APK on Android.
+  executable("breakpad_unittests") {
+    testonly = true
     set_sources_assignment_filter([])
     sources = [
       "linux/breakpad_googletest_includes.h",
@@ -679,7 +682,6 @@
     }
 
     if (is_android) {
-      use_raw_android_executable = true
       sources += [ "src/common/android/breakpad_getcontext_unittest.cc" ]
       libs = [ "log" ]
       include_dirs += [ "src/common/android/include" ]
@@ -882,8 +884,29 @@
 }
 
 if (is_android) {
+  create_native_executable_dist("breakpad_unittests_deps") {
+    testonly = true
+    dist_dir = "$root_out_dir/breakpad_unittests_deps"
+    binary = "$root_out_dir/breakpad_unittests"
+    deps = [
+      ":breakpad_unittests",
+    ]
+
+    if (is_component_build) {
+      deps += [ "//build/android:cpplib_stripped" ]
+    }
+  }
+
+  test_runner_script("breakpad_unittests__test_runner_script") {
+    test_name = "breakpad_unittests"
+    test_type = "gtest"
+    test_suite = "breakpad_unittests"
+    isolate_file = "breakpad_unittests.isolate"
+  }
+
   # TODO(GYP) Delete this after we've converted everything to GN.
-  group("breakpad_unittests_deps") {
+  # The _run targets exist only for compatibility w/ GYP.
+  group("breakpad_unittests_apk_run") {
     testonly = true
     deps = [
       ":breakpad_unittests",
diff --git a/build/android/BUILD.gn b/build/android/BUILD.gn
index 73b25cd..af819ed 100644
--- a/build/android/BUILD.gn
+++ b/build/android/BUILD.gn
@@ -84,30 +84,25 @@
   ]
 }
 
-group("devil_py") {
-  data = [
-    "devil_chromium.json",
-    "devil_chromium.py",
-    "//third_party/android_tools/sdk/build-tools/23.0.1/aapt",
-    "//third_party/android_tools/sdk/build-tools/23.0.1/dexdump",
-    "//third_party/android_tools/sdk/build-tools/23.0.1/lib/libc++.so",
-    "//third_party/android_tools/sdk/build-tools/23.0.1/split-select",
-    "//third_party/android_tools/sdk/platform-tools/adb",
-    "//third_party/catapult/catapult_base/catapult_base/",
-    "//third_party/catapult/dependency_manager/dependency_manager/",
-    "//third_party/catapult/third_party/gsutil/",
-    "//third_party/catapult/devil/devil/",
-  ]
-}
-
 group("test_runner_py") {
-  data = [
-    "test_runner.py",
-    "pylib/",
-    "//build/util/lib/common/",
-  ]
+  _py_files = read_file("test_runner.pydeps", "list lines")
+
+  # Filter out comments.
+  set_sources_assignment_filter([ "#*" ])
+  sources = _py_files
+
+  data = sources + [
+           "devil_chromium.json",
+           "//third_party/android_tools/sdk/build-tools/23.0.1/aapt",
+           "//third_party/android_tools/sdk/build-tools/23.0.1/dexdump",
+           "//third_party/android_tools/sdk/build-tools/23.0.1/lib/libc++.so",
+           "//third_party/android_tools/sdk/build-tools/23.0.1/split-select",
+           "//third_party/android_tools/sdk/platform-tools/adb",
+           "//third_party/catapult/third_party/gsutil/",
+           "//third_party/catapult/devil/devil/devil_dependencies.json",
+         ]
   data_deps = [
-    ":devil_py",
+    "//tools/swarming_client:isolate_py",
   ]
 }
 
diff --git a/build/android/pylib/gtest/gtest_test_instance.py b/build/android/pylib/gtest/gtest_test_instance.py
index 91516453..f5b2c69 100644
--- a/build/android/pylib/gtest/gtest_test_instance.py
+++ b/build/android/pylib/gtest/gtest_test_instance.py
@@ -144,30 +144,9 @@
     self._shard_timeout = args.shard_timeout
     self._skip_clear_data = args.skip_clear_data
     self._suite = args.suite_name[0]
-    self._exe_path = None
 
-    # GYP:
-    if args.executable_path:
-      self._exe_path = os.path.abspath(args.executable_path)
-    else:
-      # TODO(agrieve): Remove hardcoding after recipes are updated.
-      if self._suite == 'sandbox_linux_unittests':
-        exe_path = os.path.join(constants.GetOutDirectory(), 'obj', 'sandbox',
-                                'linux', 'sandbox_linux_unittests',
-                                'sandbox_linux_unittests')
-      elif self._suite == 'breakpad_unittests':
-        exe_path = os.path.join(constants.GetOutDirectory(), 'obj', 'breakpad',
-                                'breakpad_unittests', 'breakpad_unittests')
-      else:
-        exe_path = None
-
-      if exe_path and os.path.exists(exe_path):
-        self._exe_path = exe_path
-      else:
-        # GYP location:
-        exe_path = os.path.join(constants.GetOutDirectory(), self._suite)
-        if os.path.exists(exe_path):
-          self._exe_path = exe_path
+    self._exe_path = os.path.join(constants.GetOutDirectory(),
+                                  self._suite)
 
     incremental_part = ''
     if args.test_apk_incremental_install_script:
@@ -192,6 +171,8 @@
         self._extras[EXTRA_SHARD_NANO_TIMEOUT] = int(1e9 * self._shard_timeout)
         self._shard_timeout = 900
 
+    if not os.path.exists(self._exe_path):
+      self._exe_path = None
     if not self._apk_helper and not self._exe_path:
       error_func('Could not find apk or executable for %s' % self._suite)
 
diff --git a/build/android/test_runner.py b/build/android/test_runner.py
index 6423ad6..e55f8c0 100755
--- a/build/android/test_runner.py
+++ b/build/android/test_runner.py
@@ -249,8 +249,6 @@
   group.add_argument('-s', '--suite', dest='suite_name',
                      nargs='+', metavar='SUITE_NAME', required=True,
                      help='Executable name of the test suite to run.')
-  group.add_argument('--executable-path',
-                     help='Path to executable for native (non-apk) tests.')
   group.add_argument('--test-apk-incremental-install-script',
                      help='Path to install script for the test apk.')
   group.add_argument('--gtest_also_run_disabled_tests',
diff --git a/build/android/test_runner.pydeps b/build/android/test_runner.pydeps
new file mode 100644
index 0000000..17e37eea
--- /dev/null
+++ b/build/android/test_runner.pydeps
@@ -0,0 +1,152 @@
+# Generated by running:
+#   build/print_python_deps.py --root build/android --output build/android/test_runner.pydeps build/android/test_runner.py
+../../third_party/appurify-python/src/appurify/__init__.py
+../../third_party/appurify-python/src/appurify/api.py
+../../third_party/appurify-python/src/appurify/constants.py
+../../third_party/appurify-python/src/appurify/utils.py
+../../third_party/catapult/catapult_base/catapult_base/__init__.py
+../../third_party/catapult/catapult_base/catapult_base/cloud_storage.py
+../../third_party/catapult/catapult_base/catapult_base/util.py
+../../third_party/catapult/dependency_manager/dependency_manager/__init__.py
+../../third_party/catapult/dependency_manager/dependency_manager/archive_info.py
+../../third_party/catapult/dependency_manager/dependency_manager/base_config.py
+../../third_party/catapult/dependency_manager/dependency_manager/cloud_storage_info.py
+../../third_party/catapult/dependency_manager/dependency_manager/dependency_info.py
+../../third_party/catapult/dependency_manager/dependency_manager/dependency_manager_util.py
+../../third_party/catapult/dependency_manager/dependency_manager/exceptions.py
+../../third_party/catapult/dependency_manager/dependency_manager/local_path_info.py
+../../third_party/catapult/dependency_manager/dependency_manager/manager.py
+../../third_party/catapult/dependency_manager/dependency_manager/uploader.py
+../../third_party/catapult/devil/devil/__init__.py
+../../third_party/catapult/devil/devil/android/__init__.py
+../../third_party/catapult/devil/devil/android/apk_helper.py
+../../third_party/catapult/devil/devil/android/battery_utils.py
+../../third_party/catapult/devil/devil/android/constants/__init__.py
+../../third_party/catapult/devil/devil/android/constants/file_system.py
+../../third_party/catapult/devil/devil/android/decorators.py
+../../third_party/catapult/devil/devil/android/device_blacklist.py
+../../third_party/catapult/devil/devil/android/device_errors.py
+../../third_party/catapult/devil/devil/android/device_list.py
+../../third_party/catapult/devil/devil/android/device_signal.py
+../../third_party/catapult/devil/devil/android/device_temp_file.py
+../../third_party/catapult/devil/devil/android/device_utils.py
+../../third_party/catapult/devil/devil/android/flag_changer.py
+../../third_party/catapult/devil/devil/android/forwarder.py
+../../third_party/catapult/devil/devil/android/install_commands.py
+../../third_party/catapult/devil/devil/android/logcat_monitor.py
+../../third_party/catapult/devil/devil/android/md5sum.py
+../../third_party/catapult/devil/devil/android/ports.py
+../../third_party/catapult/devil/devil/android/sdk/__init__.py
+../../third_party/catapult/devil/devil/android/sdk/aapt.py
+../../third_party/catapult/devil/devil/android/sdk/adb_wrapper.py
+../../third_party/catapult/devil/devil/android/sdk/build_tools.py
+../../third_party/catapult/devil/devil/android/sdk/gce_adb_wrapper.py
+../../third_party/catapult/devil/devil/android/sdk/intent.py
+../../third_party/catapult/devil/devil/android/sdk/keyevent.py
+../../third_party/catapult/devil/devil/android/sdk/split_select.py
+../../third_party/catapult/devil/devil/android/sdk/version_codes.py
+../../third_party/catapult/devil/devil/android/valgrind_tools/__init__.py
+../../third_party/catapult/devil/devil/android/valgrind_tools/base_tool.py
+../../third_party/catapult/devil/devil/base_error.py
+../../third_party/catapult/devil/devil/constants/__init__.py
+../../third_party/catapult/devil/devil/constants/exit_codes.py
+../../third_party/catapult/devil/devil/devil_env.py
+../../third_party/catapult/devil/devil/utils/__init__.py
+../../third_party/catapult/devil/devil/utils/cmd_helper.py
+../../third_party/catapult/devil/devil/utils/file_utils.py
+../../third_party/catapult/devil/devil/utils/host_utils.py
+../../third_party/catapult/devil/devil/utils/lazy/__init__.py
+../../third_party/catapult/devil/devil/utils/lazy/weak_constant.py
+../../third_party/catapult/devil/devil/utils/parallelizer.py
+../../third_party/catapult/devil/devil/utils/reraiser_thread.py
+../../third_party/catapult/devil/devil/utils/run_tests_helper.py
+../../third_party/catapult/devil/devil/utils/timeout_retry.py
+../../third_party/catapult/devil/devil/utils/watchdog_timer.py
+../../third_party/catapult/devil/devil/utils/zip_utils.py
+../util/lib/common/perf_result_data_type.py
+../util/lib/common/perf_tests_results_helper.py
+../util/lib/common/unittest_util.py
+devil_chromium.py
+pylib/__init__.py
+pylib/base/__init__.py
+pylib/base/base_setup.py
+pylib/base/base_test_result.py
+pylib/base/base_test_runner.py
+pylib/base/environment.py
+pylib/base/environment_factory.py
+pylib/base/test_collection.py
+pylib/base/test_dispatcher.py
+pylib/base/test_instance.py
+pylib/base/test_instance_factory.py
+pylib/base/test_run.py
+pylib/base/test_run_factory.py
+pylib/base/test_server.py
+pylib/chrome_test_server_spawner.py
+pylib/constants/__init__.py
+pylib/constants/host_paths.py
+pylib/gtest/__init__.py
+pylib/gtest/gtest_test_instance.py
+pylib/host_driven/__init__.py
+pylib/host_driven/setup.py
+pylib/host_driven/test_case.py
+pylib/host_driven/test_info_collection.py
+pylib/host_driven/test_runner.py
+pylib/host_driven/tests_annotations.py
+pylib/instrumentation/__init__.py
+pylib/instrumentation/instrumentation_parser.py
+pylib/instrumentation/instrumentation_test_instance.py
+pylib/instrumentation/json_perf_parser.py
+pylib/instrumentation/setup.py
+pylib/instrumentation/test_jar.py
+pylib/instrumentation/test_options.py
+pylib/instrumentation/test_package.py
+pylib/instrumentation/test_result.py
+pylib/instrumentation/test_runner.py
+pylib/junit/__init__.py
+pylib/junit/setup.py
+pylib/junit/test_dispatcher.py
+pylib/junit/test_runner.py
+pylib/linker/__init__.py
+pylib/linker/setup.py
+pylib/linker/test_case.py
+pylib/linker/test_runner.py
+pylib/local/__init__.py
+pylib/local/device/__init__.py
+pylib/local/device/local_device_environment.py
+pylib/local/device/local_device_gtest_run.py
+pylib/local/device/local_device_instrumentation_test_run.py
+pylib/local/device/local_device_test_run.py
+pylib/local/local_test_server_spawner.py
+pylib/monkey/__init__.py
+pylib/monkey/setup.py
+pylib/monkey/test_options.py
+pylib/monkey/test_runner.py
+pylib/perf/__init__.py
+pylib/perf/setup.py
+pylib/perf/test_options.py
+pylib/perf/test_runner.py
+pylib/remote/__init__.py
+pylib/remote/device/__init__.py
+pylib/remote/device/appurify_constants.py
+pylib/remote/device/appurify_sanitized.py
+pylib/remote/device/remote_device_environment.py
+pylib/remote/device/remote_device_gtest_run.py
+pylib/remote/device/remote_device_helper.py
+pylib/remote/device/remote_device_instrumentation_test_run.py
+pylib/remote/device/remote_device_test_run.py
+pylib/remote/device/remote_device_uirobot_test_run.py
+pylib/results/__init__.py
+pylib/results/flakiness_dashboard/__init__.py
+pylib/results/flakiness_dashboard/json_results_generator.py
+pylib/results/flakiness_dashboard/results_uploader.py
+pylib/results/json_results.py
+pylib/results/report_results.py
+pylib/uirobot/__init__.py
+pylib/uirobot/uirobot_test_instance.py
+pylib/utils/__init__.py
+pylib/utils/isolator.py
+pylib/utils/proguard.py
+pylib/utils/repo_utils.py
+pylib/utils/test_environment.py
+pylib/valgrind_tools.py
+test_runner.py
diff --git a/build/config/android/internal_rules.gni b/build/config/android/internal_rules.gni
index e4e5b25..06dbfb7 100644
--- a/build/config/android/internal_rules.gni
+++ b/build/config/android/internal_rules.gni
@@ -2070,32 +2070,22 @@
       "//build/android:test_runner_py",
     ]
 
-    test_runner_args = [
-      _test_type,
-      "--output-directory",
-      rebase_path(root_build_dir, root_build_dir),
-    ]
-
     # apk_target is not used for native executable tests
     # (e.g. breakpad_unittests).
     if (defined(invoker.apk_target)) {
-      assert(!defined(invoker.executable))
       deps += [ "${invoker.apk_target}__build_config" ]
       _apk_build_config =
           get_label_info(invoker.apk_target, "target_gen_dir") + "/" +
           get_label_info(invoker.apk_target, "name") + ".build_config"
       _rebased_apk_build_config = rebase_path(_apk_build_config, root_build_dir)
       assert(_rebased_apk_build_config != "")  # Mark as used.
-    } else if (_test_type == "gtest") {
-      assert(
-          defined(invoker.executable),
-          "Must define either apk_target or executable for test_runner_script()")
-      test_runner_args += [
-        "--executable-path",
-        rebase_path(invoker.executable, root_build_dir),
-      ]
     }
 
+    test_runner_args = [
+      _test_type,
+      "--output-directory",
+      rebase_path(root_build_dir, root_build_dir),
+    ]
     if (_test_type == "gtest") {
       assert(defined(invoker.test_suite))
       test_runner_args += [
diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni
index a3d338f1..14896fc 100644
--- a/build/config/android/rules.gni
+++ b/build/config/android/rules.gni
@@ -2243,27 +2243,34 @@
 #     deps = [ ":the_thing_that_makes_foo" ]
 #   }
 template("create_native_executable_dist") {
+  set_sources_assignment_filter([])
   forward_variables_from(invoker, [ "testonly" ])
 
-  _libraries_list = "${target_gen_dir}/${target_name}_library_dependencies.list"
+  dist_dir = invoker.dist_dir
+  binary = invoker.binary
+  template_name = target_name
 
-  _find_deps_target_name = "${target_name}__find_library_dependencies"
+  libraries_list =
+      "${target_gen_dir}/${template_name}_library_dependencies.list"
 
-  # TODO(agrieve): Extract dependent libs from GN rather than readelf.
-  action(_find_deps_target_name) {
+  find_deps_target_name = "${template_name}__find_library_dependencies"
+  copy_target_name = "${template_name}__copy_libraries_and_exe"
+
+  action(find_deps_target_name) {
     forward_variables_from(invoker, [ "deps" ])
+    visibility = [ ":$copy_target_name" ]
 
     script = "//build/android/gyp/write_ordered_libraries.py"
     depfile = "$target_gen_dir/$target_name.d"
     inputs = [
-      invoker.binary,
+      binary,
       android_readelf,
     ]
     outputs = [
       depfile,
-      _libraries_list,
+      libraries_list,
     ]
-    rebased_binaries = rebase_path([ invoker.binary ], root_build_dir)
+    rebased_binaries = rebase_path([ binary ], root_build_dir)
     args = [
       "--depfile",
       rebase_path(depfile, root_build_dir),
@@ -2271,38 +2278,47 @@
       "--libraries-dir",
       rebase_path(root_shlib_dir, root_build_dir),
       "--output",
-      rebase_path(_libraries_list, root_build_dir),
+      rebase_path(libraries_list, root_build_dir),
       "--readelf",
       rebase_path(android_readelf, root_build_dir),
     ]
   }
 
-  copy_ex(target_name) {
+  copy_ex(copy_target_name) {
+    visibility = [ ":$template_name" ]
+
     clear_dir = true
 
     inputs = [
-      _libraries_list,
+      libraries_list,
     ]
     if (defined(invoker.include_main_binary) && invoker.include_main_binary) {
-      inputs += [ invoker.binary ]
+      inputs += [ binary ]
     }
 
-    dest = invoker.dist_dir
+    dest = dist_dir
 
-    rebased_libraries_list = rebase_path(_libraries_list, root_build_dir)
+    rebased_libraries_list = rebase_path(libraries_list, root_build_dir)
     args = [ "--files=@FileArg($rebased_libraries_list:lib_paths)" ]
     if (defined(invoker.include_main_binary) && invoker.include_main_binary) {
-      rebased_binaries_list = rebase_path([ invoker.binary ], root_build_dir)
+      rebased_binaries_list = rebase_path([ binary ], root_build_dir)
       args += [ "--files=$rebased_binaries_list" ]
     }
 
     deps = [
-      ":$_find_deps_target_name",
+      ":$find_deps_target_name",
     ]
     if (defined(invoker.deps)) {
       deps += invoker.deps
     }
   }
+
+  group(template_name) {
+    forward_variables_from(invoker, [ "visibility" ])
+    public_deps = [
+      ":$copy_target_name",
+    ]
+  }
 }
 
 # Compile a protocol buffer to java.
diff --git a/build/print_python_deps.py b/build/print_python_deps.py
new file mode 100755
index 0000000..3d0c9a8e
--- /dev/null
+++ b/build/print_python_deps.py
@@ -0,0 +1,104 @@
+#!/usr/bin/env python
+# Copyright 2016 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Prints all non-system dependencies for the given module.
+
+The primary use-case for this script is to genererate the list of python modules
+required for .isolate files.
+"""
+
+import argparse
+import imp
+import os
+import pipes
+import sys
+
+# Don't use any helper modules, or else they will end up in the results.
+
+
+_SRC_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir))
+
+
+def _ComputePythonDependencies():
+  """Gets the paths of imported non-system python modules.
+
+  A path is assumed to be a "system" import if it is outside of chromium's
+  src/. The paths will be relative to the current directory.
+  """
+  module_paths = (m.__file__ for m in sys.modules.values()
+                  if m and hasattr(m, '__file__'))
+
+  src_paths = set()
+  for path in module_paths:
+    if path == __file__:
+      continue
+    path = os.path.abspath(path)
+    if not path.startswith(_SRC_ROOT):
+      continue
+
+    if path.endswith('.pyc'):
+      path = path[:-1]
+    src_paths.add(path)
+
+  return src_paths
+
+
+def _NormalizeCommandLine(options):
+  """Returns a string that when run from SRC_ROOT replicates the command."""
+  args = ['build/print_python_deps.py']
+  root = os.path.relpath(options.root, _SRC_ROOT)
+  if root != '.':
+    args.extend(('--root', root))
+  if options.output:
+    args.extend(('--output', os.path.relpath(options.output, _SRC_ROOT)))
+  for whitelist in sorted(options.whitelists):
+    args.extend(('--whitelist', os.path.relpath(whitelist, _SRC_ROOT)))
+  args.append(os.path.relpath(options.module, _SRC_ROOT))
+  return ' '.join(pipes.quote(x) for x in args)
+
+
+def _FindPythonInDirectory(directory):
+  """Returns an iterable of all non-test python files in the given directory."""
+  files = []
+  for root, _dirnames, filenames in os.walk(directory):
+    for filename in filenames:
+      if filename.endswith('.py') and not filename.endswith('_test.py'):
+        yield os.path.join(root, filename)
+
+
+def main():
+  parser = argparse.ArgumentParser(
+      description='Prints all non-system dependencies for the given module.')
+  parser.add_argument('module',
+                      help='The python module to analyze.')
+  parser.add_argument('--root', default='.',
+                      help='Directory to make paths relative to.')
+  parser.add_argument('--output',
+                      help='Write output to a file rather than stdout.')
+  parser.add_argument('--whitelist', default=[], action='append',
+                      dest='whitelists',
+                      help='Recursively include all non-test python files '
+                      'within this directory. May be specified multiple times.')
+  options = parser.parse_args()
+  sys.path.append(os.path.dirname(options.module))
+  imp.load_source('NAME', options.module)
+
+  paths_set = _ComputePythonDependencies()
+  for path in options.whitelists:
+    paths_set.update(os.path.abspath(p) for p in _FindPythonInDirectory(path))
+
+  paths = [os.path.relpath(p, options.root) for p in paths_set]
+
+  normalized_cmdline = _NormalizeCommandLine(options)
+  out = open(options.output, 'w') if options.output else sys.stdout
+  with out:
+    out.write('# Generated by running:\n')
+    out.write('#   %s\n' % normalized_cmdline)
+    for path in sorted(paths):
+      out.write(path + '\n')
+
+
+if __name__ == '__main__':
+  sys.exit(main())
diff --git a/build/secondary/tools/swarming_client/BUILD.gn b/build/secondary/tools/swarming_client/BUILD.gn
new file mode 100644
index 0000000..f486052
--- /dev/null
+++ b/build/secondary/tools/swarming_client/BUILD.gn
@@ -0,0 +1,14 @@
+# Copyright 2016 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+group("isolate_py") {
+  _py_files =
+      read_file("//build/secondary/tools/swarming_client/isolate.pydeps",
+                "list lines")
+
+  # Filter out comments.
+  set_sources_assignment_filter([ "#*" ])
+  sources = _py_files
+  data = sources
+}
diff --git a/build/secondary/tools/swarming_client/isolate.pydeps b/build/secondary/tools/swarming_client/isolate.pydeps
new file mode 100644
index 0000000..d7a9189
--- /dev/null
+++ b/build/secondary/tools/swarming_client/isolate.pydeps
@@ -0,0 +1,224 @@
+# Generated by running:
+#   build/print_python_deps.py --root tools/swarming_client --output build/secondary/tools/swarming_client/isolate.pydeps --whitelist tools/swarming_client/third_party tools/swarming_client/isolate.py
+auth.py
+isolate.py
+isolate_format.py
+isolated_format.py
+isolateserver.py
+run_isolated.py
+third_party/__init__.py
+third_party/chromium/__init__.py
+third_party/chromium/natsort.py
+third_party/colorama/__init__.py
+third_party/colorama/ansi.py
+third_party/colorama/ansitowin32.py
+third_party/colorama/initialise.py
+third_party/colorama/win32.py
+third_party/colorama/winterm.py
+third_party/depot_tools/__init__.py
+third_party/depot_tools/auto_stub.py
+third_party/depot_tools/fix_encoding.py
+third_party/depot_tools/subcommand.py
+third_party/google/__init__.py
+third_party/google/protobuf/__init__.py
+third_party/google/protobuf/compiler/__init__.py
+third_party/google/protobuf/compiler/plugin_pb2.py
+third_party/google/protobuf/descriptor.py
+third_party/google/protobuf/descriptor_database.py
+third_party/google/protobuf/descriptor_pb2.py
+third_party/google/protobuf/descriptor_pool.py
+third_party/google/protobuf/internal/__init__.py
+third_party/google/protobuf/internal/api_implementation.py
+third_party/google/protobuf/internal/containers.py
+third_party/google/protobuf/internal/cpp_message.py
+third_party/google/protobuf/internal/decoder.py
+third_party/google/protobuf/internal/encoder.py
+third_party/google/protobuf/internal/enum_type_wrapper.py
+third_party/google/protobuf/internal/message_listener.py
+third_party/google/protobuf/internal/python_message.py
+third_party/google/protobuf/internal/type_checkers.py
+third_party/google/protobuf/internal/wire_format.py
+third_party/google/protobuf/message.py
+third_party/google/protobuf/message_factory.py
+third_party/google/protobuf/reflection.py
+third_party/google/protobuf/service.py
+third_party/google/protobuf/service_reflection.py
+third_party/google/protobuf/symbol_database.py
+third_party/google/protobuf/text_encoding.py
+third_party/google/protobuf/text_format.py
+third_party/googleapiclient/__init__.py
+third_party/googleapiclient/channel.py
+third_party/googleapiclient/discovery.py
+third_party/googleapiclient/discovery_cache/__init__.py
+third_party/googleapiclient/discovery_cache/appengine_memcache.py
+third_party/googleapiclient/discovery_cache/base.py
+third_party/googleapiclient/discovery_cache/file_cache.py
+third_party/googleapiclient/errors.py
+third_party/googleapiclient/http.py
+third_party/googleapiclient/mimeparse.py
+third_party/googleapiclient/model.py
+third_party/googleapiclient/sample_tools.py
+third_party/googleapiclient/schema.py
+third_party/httplib2/__init__.py
+third_party/httplib2/iri2uri.py
+third_party/httplib2/socks.py
+third_party/infra_libs/__init__.py
+third_party/infra_libs/app.py
+third_party/infra_libs/authentication.py
+third_party/infra_libs/event_mon/__init__.py
+third_party/infra_libs/event_mon/checkouts.py
+third_party/infra_libs/event_mon/config.py
+third_party/infra_libs/event_mon/monitoring.py
+third_party/infra_libs/event_mon/protos/__init__.py
+third_party/infra_libs/event_mon/protos/chrome_infra_log_pb2.py
+third_party/infra_libs/event_mon/protos/goma_stats_pb2.py
+third_party/infra_libs/event_mon/protos/log_request_lite_pb2.py
+third_party/infra_libs/event_mon/router.py
+third_party/infra_libs/experiments.py
+third_party/infra_libs/httplib2_utils.py
+third_party/infra_libs/infra_types/__init__.py
+third_party/infra_libs/infra_types/infra_types.py
+third_party/infra_libs/instrumented_requests.py
+third_party/infra_libs/logs/__init__.py
+third_party/infra_libs/logs/logs.py
+third_party/infra_libs/memoize.py
+third_party/infra_libs/time_functions/__init__.py
+third_party/infra_libs/time_functions/testing.py
+third_party/infra_libs/time_functions/timestamp.py
+third_party/infra_libs/time_functions/zulu.py
+third_party/infra_libs/ts_mon/__init__.py
+third_party/infra_libs/ts_mon/common/__init__.py
+third_party/infra_libs/ts_mon/common/distribution.py
+third_party/infra_libs/ts_mon/common/errors.py
+third_party/infra_libs/ts_mon/common/helpers.py
+third_party/infra_libs/ts_mon/common/http_metrics.py
+third_party/infra_libs/ts_mon/common/interface.py
+third_party/infra_libs/ts_mon/common/metric_store.py
+third_party/infra_libs/ts_mon/common/metrics.py
+third_party/infra_libs/ts_mon/common/monitors.py
+third_party/infra_libs/ts_mon/common/standard_metrics.py
+third_party/infra_libs/ts_mon/common/targets.py
+third_party/infra_libs/ts_mon/config.py
+third_party/infra_libs/ts_mon/protos/__init__.py
+third_party/infra_libs/ts_mon/protos/acquisition_network_device_pb2.py
+third_party/infra_libs/ts_mon/protos/acquisition_task_pb2.py
+third_party/infra_libs/ts_mon/protos/metrics_pb2.py
+third_party/infra_libs/utils.py
+third_party/oauth2client/__init__.py
+third_party/oauth2client/_helpers.py
+third_party/oauth2client/_openssl_crypt.py
+third_party/oauth2client/_pycrypto_crypt.py
+third_party/oauth2client/client.py
+third_party/oauth2client/clientsecrets.py
+third_party/oauth2client/crypt.py
+third_party/oauth2client/file.py
+third_party/oauth2client/gce.py
+third_party/oauth2client/keyring_storage.py
+third_party/oauth2client/locked_file.py
+third_party/oauth2client/multistore_file.py
+third_party/oauth2client/service_account.py
+third_party/oauth2client/tools.py
+third_party/oauth2client/util.py
+third_party/oauth2client/xsrfutil.py
+third_party/pyasn1/pyasn1/__init__.py
+third_party/pyasn1/pyasn1/codec/__init__.py
+third_party/pyasn1/pyasn1/codec/ber/__init__.py
+third_party/pyasn1/pyasn1/codec/ber/decoder.py
+third_party/pyasn1/pyasn1/codec/ber/encoder.py
+third_party/pyasn1/pyasn1/codec/ber/eoo.py
+third_party/pyasn1/pyasn1/codec/cer/__init__.py
+third_party/pyasn1/pyasn1/codec/cer/decoder.py
+third_party/pyasn1/pyasn1/codec/cer/encoder.py
+third_party/pyasn1/pyasn1/codec/der/__init__.py
+third_party/pyasn1/pyasn1/codec/der/decoder.py
+third_party/pyasn1/pyasn1/codec/der/encoder.py
+third_party/pyasn1/pyasn1/compat/__init__.py
+third_party/pyasn1/pyasn1/compat/binary.py
+third_party/pyasn1/pyasn1/compat/octets.py
+third_party/pyasn1/pyasn1/debug.py
+third_party/pyasn1/pyasn1/error.py
+third_party/pyasn1/pyasn1/type/__init__.py
+third_party/pyasn1/pyasn1/type/base.py
+third_party/pyasn1/pyasn1/type/char.py
+third_party/pyasn1/pyasn1/type/constraint.py
+third_party/pyasn1/pyasn1/type/error.py
+third_party/pyasn1/pyasn1/type/namedtype.py
+third_party/pyasn1/pyasn1/type/namedval.py
+third_party/pyasn1/pyasn1/type/tag.py
+third_party/pyasn1/pyasn1/type/tagmap.py
+third_party/pyasn1/pyasn1/type/univ.py
+third_party/pyasn1/pyasn1/type/useful.py
+third_party/requests/__init__.py
+third_party/requests/adapters.py
+third_party/requests/api.py
+third_party/requests/auth.py
+third_party/requests/certs.py
+third_party/requests/compat.py
+third_party/requests/cookies.py
+third_party/requests/exceptions.py
+third_party/requests/hooks.py
+third_party/requests/models.py
+third_party/requests/packages/__init__.py
+third_party/requests/packages/urllib3/__init__.py
+third_party/requests/packages/urllib3/_collections.py
+third_party/requests/packages/urllib3/connection.py
+third_party/requests/packages/urllib3/connectionpool.py
+third_party/requests/packages/urllib3/contrib/__init__.py
+third_party/requests/packages/urllib3/contrib/appengine.py
+third_party/requests/packages/urllib3/contrib/ntlmpool.py
+third_party/requests/packages/urllib3/contrib/pyopenssl.py
+third_party/requests/packages/urllib3/exceptions.py
+third_party/requests/packages/urllib3/fields.py
+third_party/requests/packages/urllib3/filepost.py
+third_party/requests/packages/urllib3/packages/__init__.py
+third_party/requests/packages/urllib3/packages/ordered_dict.py
+third_party/requests/packages/urllib3/packages/six.py
+third_party/requests/packages/urllib3/packages/ssl_match_hostname/__init__.py
+third_party/requests/packages/urllib3/packages/ssl_match_hostname/_implementation.py
+third_party/requests/packages/urllib3/poolmanager.py
+third_party/requests/packages/urllib3/request.py
+third_party/requests/packages/urllib3/response.py
+third_party/requests/packages/urllib3/util/__init__.py
+third_party/requests/packages/urllib3/util/connection.py
+third_party/requests/packages/urllib3/util/request.py
+third_party/requests/packages/urllib3/util/response.py
+third_party/requests/packages/urllib3/util/retry.py
+third_party/requests/packages/urllib3/util/ssl_.py
+third_party/requests/packages/urllib3/util/timeout.py
+third_party/requests/packages/urllib3/util/url.py
+third_party/requests/sessions.py
+third_party/requests/status_codes.py
+third_party/requests/structures.py
+third_party/requests/utils.py
+third_party/rsa/rsa/__init__.py
+third_party/rsa/rsa/_compat.py
+third_party/rsa/rsa/_version133.py
+third_party/rsa/rsa/_version200.py
+third_party/rsa/rsa/asn1.py
+third_party/rsa/rsa/bigfile.py
+third_party/rsa/rsa/cli.py
+third_party/rsa/rsa/common.py
+third_party/rsa/rsa/core.py
+third_party/rsa/rsa/key.py
+third_party/rsa/rsa/parallel.py
+third_party/rsa/rsa/pem.py
+third_party/rsa/rsa/pkcs1.py
+third_party/rsa/rsa/prime.py
+third_party/rsa/rsa/randnum.py
+third_party/rsa/rsa/transform.py
+third_party/rsa/rsa/util.py
+third_party/rsa/rsa/varblock.py
+third_party/six/__init__.py
+third_party/uritemplate/__init__.py
+utils/__init__.py
+utils/file_path.py
+utils/fs.py
+utils/logging_utils.py
+utils/lru.py
+utils/net.py
+utils/oauth.py
+utils/on_error.py
+utils/subprocess42.py
+utils/threading_utils.py
+utils/tools.py
+utils/zip_package.py
diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/AndroidManifest.xml
index 60d562c7..41304fa 100644
--- a/chrome/android/java/AndroidManifest.xml
+++ b/chrome/android/java/AndroidManifest.xml
@@ -203,7 +203,7 @@
         </activity-alias>
 
         <!-- Upgrade related -->
-        <activity android:name="org.chromium.chrome.browser.UpgradeActivity"
+        <activity android:name="org.chromium.chrome.browser.upgrade.UpgradeActivity"
             android:excludeFromRecents="true"
             android:theme="@style/MainTheme"
             android:windowSoftInputMode="adjustResize"
@@ -214,6 +214,14 @@
             android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize"
             android:hardwareAccelerated="false">
         </activity>
+        <service android:name="org.chromium.chrome.browser.upgrade.UpgradeIntentService"
+            android:exported="false"/>
+        <receiver android:name="org.chromium.chrome.browser.upgrade.PackageReplacedBroadcastReceiver"
+            android:exported="false">
+            <intent-filter>
+                <action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
+            </intent-filter>
+        </receiver>
 
         <!-- Document mode Activities. -->
         <activity android:name="org.chromium.chrome.browser.document.DocumentActivity"
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/crash/MinidumpUploadCallable.java b/chrome/android/java/src/org/chromium/chrome/browser/crash/MinidumpUploadCallable.java
index 76510e95..99c413b 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/crash/MinidumpUploadCallable.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/crash/MinidumpUploadCallable.java
@@ -92,17 +92,21 @@
             return UPLOAD_COMMANDLINE_DISABLED;
         }
 
-        if (!mPermManager.isUploadUserPermitted()) {
-            Log.i(TAG, "Minidump upload is not permitted by user. Marking file as uploaded for "
-                    + "cleanup to prevent future uploads.");
-            cleanupMinidumpFile();
-            return UPLOAD_USER_DISABLED;
-        }
+        if (mPermManager.isUploadEnabledForTests()) {
+            Log.i(TAG, "Minidump upload enabled for tests, skipping other checks.");
+        } else {
+            if (!mPermManager.isUploadUserPermitted()) {
+                Log.i(TAG, "Minidump upload is not permitted by user. Marking file as uploaded for "
+                        + "cleanup to prevent future uploads.");
+                cleanupMinidumpFile();
+                return UPLOAD_USER_DISABLED;
+            }
 
-        boolean isLimited = mPermManager.isUploadLimited();
-        if (isLimited || !mPermManager.isUploadPermitted()) {
-            Log.i(TAG, "Minidump cannot currently be uploaded due to constraints.");
-            return UPLOAD_FAILURE;
+            boolean isLimited = mPermManager.isUploadLimited();
+            if (isLimited || !mPermManager.isUploadPermitted()) {
+                Log.i(TAG, "Minidump cannot currently be uploaded due to constraints.");
+                return UPLOAD_FAILURE;
+            }
         }
 
         HttpURLConnection connection =
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/document/ChromeLauncherActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/document/ChromeLauncherActivity.java
index c283f5ae..367f884 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/document/ChromeLauncherActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/document/ChromeLauncherActivity.java
@@ -42,7 +42,6 @@
 import org.chromium.chrome.browser.IntentHandler.TabOpenType;
 import org.chromium.chrome.browser.ShortcutHelper;
 import org.chromium.chrome.browser.ShortcutSource;
-import org.chromium.chrome.browser.UpgradeActivity;
 import org.chromium.chrome.browser.UrlConstants;
 import org.chromium.chrome.browser.WarmupManager;
 import org.chromium.chrome.browser.customtabs.CustomTabActivity;
@@ -66,6 +65,7 @@
 import org.chromium.chrome.browser.tabmodel.document.AsyncTabCreationParams;
 import org.chromium.chrome.browser.tabmodel.document.DocumentTabModel;
 import org.chromium.chrome.browser.tabmodel.document.DocumentTabModelSelector;
+import org.chromium.chrome.browser.upgrade.UpgradeActivity;
 import org.chromium.chrome.browser.util.FeatureUtilities;
 import org.chromium.chrome.browser.util.IntentUtils;
 import org.chromium.chrome.browser.util.UrlUtilities;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/AsyncInitializationActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/init/AsyncInitializationActivity.java
index 0b0dbe9..ee1cd52 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/init/AsyncInitializationActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/init/AsyncInitializationActivity.java
@@ -27,12 +27,12 @@
 import org.chromium.base.library_loader.LoaderErrors;
 import org.chromium.base.library_loader.ProcessInitException;
 import org.chromium.chrome.browser.ChromeApplication;
-import org.chromium.chrome.browser.UpgradeActivity;
 import org.chromium.chrome.browser.WarmupManager;
 import org.chromium.chrome.browser.metrics.LaunchMetrics;
 import org.chromium.chrome.browser.metrics.MemoryUma;
 import org.chromium.chrome.browser.profiles.Profile;
 import org.chromium.chrome.browser.tabmodel.DocumentModeAssassin;
+import org.chromium.chrome.browser.upgrade.UpgradeActivity;
 import org.chromium.ui.base.DeviceFormFactor;
 
 import java.lang.reflect.Field;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/CrashReportingPermissionManager.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/CrashReportingPermissionManager.java
index b10b283..106dad3 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/CrashReportingPermissionManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/CrashReportingPermissionManager.java
@@ -38,4 +38,11 @@
      * @return whether uploading logic should be constrained.
      */
     public boolean isUploadLimited();
+
+    /**
+     * Check whether to ignore all consent and upload, used by test devices to avoid UI dependency.
+     *
+     * @return whether crash dumps should be uploaded if at all possible.
+     */
+    public boolean isUploadEnabledForTests();
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferencesManager.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferencesManager.java
index ed1a2e2..f640e2ed 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferencesManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferencesManager.java
@@ -365,8 +365,7 @@
     @Override
     public boolean isUploadPermitted() {
         return !mCrashUploadingCommandLineDisabled && isNetworkAvailable()
-                && (allowUploadCrashDump() || CommandLine.getInstance().hasSwitch(
-                        ChromeSwitches.FORCE_CRASH_DUMP_UPLOAD));
+                && (allowUploadCrashDump() || isUploadEnabledForTests());
     }
 
     /**
@@ -452,4 +451,15 @@
         int state = mSharedPreferences.getInt(PREF_PHYSICAL_WEB, PHYSICAL_WEB_ONBOARDING);
         return (state == PHYSICAL_WEB_ON);
     }
+
+    /**
+     * Check whether the command line switch is used to force uploading if at all possible. Used by
+     * test devices to avoid UI manipulation.
+     *
+     * @return whether uploading should be enabled if at all possible.
+     */
+    @Override
+    public boolean isUploadEnabledForTests() {
+        return CommandLine.getInstance().hasSwitch(ChromeSwitches.FORCE_CRASH_DUMP_UPLOAD);
+    }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/services/gcm/ChromeGcmListenerService.java b/chrome/android/java/src/org/chromium/chrome/browser/services/gcm/ChromeGcmListenerService.java
index 2104cf3..64ab0f5 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/services/gcm/ChromeGcmListenerService.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/services/gcm/ChromeGcmListenerService.java
@@ -28,7 +28,7 @@
             AndroidGcmController.get(this).onMessageReceived(data);
             return;
         }
-        pushMessageReceived(data);
+        pushMessageReceived(from, data);
     }
 
     @Override
@@ -50,7 +50,7 @@
                 + "know what subtype (app ID) it occurred for.");
     }
 
-    private void pushMessageReceived(final Bundle data) {
+    private void pushMessageReceived(final String from, final Bundle data) {
         final String bundleSubtype = "subtype";
         if (!data.containsKey(bundleSubtype)) {
             Log.w(TAG, "Received push message with no subtype");
@@ -62,7 +62,7 @@
             public void run() {
                 PathUtils.setPrivateDataDirectorySuffix(PRIVATE_DATA_DIRECTORY_SUFFIX,
                         getApplicationContext());
-                GCMDriver.onMessageReceived(getApplicationContext(), appId, data);
+                GCMDriver.onMessageReceived(getApplicationContext(), appId, from, data);
             }
         });
     }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/snackbar/SnackbarView.java b/chrome/android/java/src/org/chromium/chrome/browser/snackbar/SnackbarView.java
index 4719482..3671d5c 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/snackbar/SnackbarView.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/snackbar/SnackbarView.java
@@ -186,9 +186,10 @@
         }
         Bitmap profileImage = snackbar.getProfileImage();
         if (profileImage != null) {
+            mProfileImageView.setVisibility(View.VISIBLE);
             mProfileImageView.setImageBitmap(profileImage);
         } else {
-            mView.removeView(mProfileImageView);
+            mProfileImageView.setVisibility(View.GONE);
         }
         return true;
     }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/upgrade/PackageReplacedBroadcastReceiver.java b/chrome/android/java/src/org/chromium/chrome/browser/upgrade/PackageReplacedBroadcastReceiver.java
new file mode 100644
index 0000000..93927b7d
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/upgrade/PackageReplacedBroadcastReceiver.java
@@ -0,0 +1,30 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.upgrade;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+
+/**
+ * Triggered when Chrome's package is replaced (e.g. when it is upgraded).
+ *
+ * Before changing this class, you must understand both the Receiver and Process Lifecycles:
+ * http://developer.android.com/reference/android/content/BroadcastReceiver.html#ReceiverLifecycle
+ *
+ * - This process runs in the foreground as long as {@link #onReceive} is running.  If there are no
+ *   other application components running, Android will aggressively kill it.
+ *
+ * - Because this runs in the foreground, don't add any code that could cause jank or ANRs.
+ *
+ * - This class immediately cullable by Android as soon as {@link #onReceive} returns. To kick off
+ *   longer tasks, you must start a Service.
+ */
+public final class PackageReplacedBroadcastReceiver extends BroadcastReceiver {
+    @Override
+    public void onReceive(Context context, Intent intent) {
+        UpgradeIntentService.startMigrationIfNecessary(context);
+    }
+}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/UpgradeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/upgrade/UpgradeActivity.java
similarity index 95%
rename from chrome/android/java/src/org/chromium/chrome/browser/UpgradeActivity.java
rename to chrome/android/java/src/org/chromium/chrome/browser/upgrade/UpgradeActivity.java
index 6c0ddfe..d487236 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/UpgradeActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/upgrade/UpgradeActivity.java
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-package org.chromium.chrome.browser;
+package org.chromium.chrome.browser.upgrade;
 
 import android.app.Activity;
 import android.content.Intent;
@@ -26,7 +26,7 @@
  */
 public class UpgradeActivity extends AppCompatActivity {
     public static final String EXTRA_INTENT_TO_REFIRE =
-            "org.chromium.chrome.browser.INTENT_TO_REFIRE";
+            "org.chromium.chrome.browser.upgrade.INTENT_TO_REFIRE";
 
     private static final long MIN_MS_TO_DISPLAY_ACTIVITY = 1000;
     private static final long INVALID_TIMESTAMP = -1;
@@ -77,14 +77,13 @@
         setContentView(R.layout.upgrade_activity);
 
         DocumentModeAssassin assassin = DocumentModeAssassin.getInstance();
-        if (!DocumentModeAssassin.getInstance().isMigrationNecessary()
-                || assassin.getStage() == DocumentModeAssassin.STAGE_DONE) {
-            // Migration finished in the background.
-            continueApplicationLaunch();
-        } else {
+        if (assassin.isMigrationNecessary()) {
             // Kick off migration if it hasn't already started.
             assassin.addObserver(mObserver);
             assassin.migrateFromDocumentToTabbedMode();
+        } else {
+            // Migration finished in the background.
+            continueApplicationLaunch();
         }
     }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/upgrade/UpgradeIntentService.java b/chrome/android/java/src/org/chromium/chrome/browser/upgrade/UpgradeIntentService.java
new file mode 100644
index 0000000..a661eb6
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/upgrade/UpgradeIntentService.java
@@ -0,0 +1,75 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.upgrade;
+
+import android.app.IntentService;
+import android.content.Context;
+import android.content.Intent;
+
+import org.chromium.base.Log;
+import org.chromium.base.ThreadUtils;
+import org.chromium.chrome.browser.tabmodel.DocumentModeAssassin;
+import org.chromium.chrome.browser.tabmodel.DocumentModeAssassin.DocumentModeAssassinObserver;
+
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Migrates users back from document mode into tabbed mode without using the native library on an
+ * upgrade.  The timeout length is arbitrary but exists to avoid keeping the service alive forever.
+ */
+public class UpgradeIntentService extends IntentService {
+
+    private static final String TAG = "UpgradeIntentService";
+    private static final long TIMEOUT_MS = 15000;
+
+    public static void startMigrationIfNecessary(Context context) {
+        if (!DocumentModeAssassin.getInstance().isMigrationNecessary()) return;
+
+        Intent migrationIntent = new Intent();
+        migrationIntent.setClass(context, UpgradeIntentService.class);
+        context.startService(migrationIntent);
+    }
+
+    public UpgradeIntentService() {
+        super(TAG);
+    }
+
+    @Override
+    protected void onHandleIntent(Intent intent) {
+        final DocumentModeAssassin assassin = DocumentModeAssassin.getInstance();
+        if (!assassin.isMigrationNecessary()) return;
+
+        final CountDownLatch finishSignal = new CountDownLatch(1);
+        ThreadUtils.runOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                if (assassin.isMigrationNecessary()) {
+                    // Kick off migration if it hasn't already started.
+                    DocumentModeAssassinObserver observer = new DocumentModeAssassinObserver() {
+                        @Override
+                        public void onStageChange(int newStage) {
+                            if (newStage != DocumentModeAssassin.STAGE_DONE) return;
+                            assassin.removeObserver(this);
+                            finishSignal.countDown();
+                        }
+                    };
+                    assassin.addObserver(observer);
+                    assassin.migrateFromDocumentToTabbedMode();
+                } else {
+                    // Migration finished in the background.
+                    finishSignal.countDown();
+                }
+            }
+        });
+
+        try {
+            boolean success = finishSignal.await(TIMEOUT_MS, TimeUnit.MILLISECONDS);
+            Log.d(TAG, "Migration completed.  Status: " + success);
+        } catch (InterruptedException e) {
+            Log.e(TAG, "Failed to migrate user on time.");
+        }
+    }
+}
diff --git a/chrome/android/java_sources.gni b/chrome/android/java_sources.gni
index 1aabf0b..69277ff1 100644
--- a/chrome/android/java_sources.gni
+++ b/chrome/android/java_sources.gni
@@ -51,7 +51,6 @@
   "java/src/org/chromium/chrome/browser/SwipeRefreshHandler.java",
   "java/src/org/chromium/chrome/browser/TabState.java",
   "java/src/org/chromium/chrome/browser/TtsPlatformImpl.java",
-  "java/src/org/chromium/chrome/browser/UpgradeActivity.java",
   "java/src/org/chromium/chrome/browser/UrlConstants.java",
   "java/src/org/chromium/chrome/browser/UsbChooserDialog.java",
   "java/src/org/chromium/chrome/browser/WarmupManager.java",
@@ -819,6 +818,9 @@
   "java/src/org/chromium/chrome/browser/toolbar/ToolbarPhone.java",
   "java/src/org/chromium/chrome/browser/toolbar/ToolbarTabController.java",
   "java/src/org/chromium/chrome/browser/toolbar/ToolbarTablet.java",
+  "java/src/org/chromium/chrome/browser/upgrade/PackageReplacedBroadcastReceiver.java",
+  "java/src/org/chromium/chrome/browser/upgrade/UpgradeActivity.java",
+  "java/src/org/chromium/chrome/browser/upgrade/UpgradeIntentService.java",
   "java/src/org/chromium/chrome/browser/util/AccessibilityUtil.java",
   "java/src/org/chromium/chrome/browser/util/ColorUtils.java",
   "java/src/org/chromium/chrome/browser/util/CompatibilityFileProvider.java",
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/crash/MinidumpUploadCallableTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/crash/MinidumpUploadCallableTest.java
index f7cf712..71fa60a 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/crash/MinidumpUploadCallableTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/crash/MinidumpUploadCallableTest.java
@@ -117,13 +117,15 @@
         private final boolean mIsUserPermitted;
         private final boolean mIsCommandLineDisabled;
         private final boolean mIsLimited;
+        private final boolean mIsEnabledForTests;
 
-        MockCrashReportingPermissionManager(boolean isPermitted,
-                boolean isUserPermitted, boolean isCommandLineDisabled, boolean isLimited) {
+        MockCrashReportingPermissionManager(boolean isPermitted, boolean isUserPermitted,
+                boolean isCommandLineDisabled, boolean isLimited, boolean isEnabledForTests) {
             mIsPermitted = isPermitted;
             mIsUserPermitted = isUserPermitted;
             mIsCommandLineDisabled = isCommandLineDisabled;
             mIsLimited = isLimited;
+            mIsEnabledForTests = isEnabledForTests;
         }
 
         @Override
@@ -145,6 +147,11 @@
         public boolean isUploadLimited() {
             return mIsLimited;
         }
+
+        @Override
+        public boolean isUploadEnabledForTests() {
+            return mIsEnabledForTests;
+        }
     }
 
     /**
@@ -188,7 +195,7 @@
     @Feature({"Android-AppBase"})
     public void testCallWhenCurrentlyPermitted() throws Exception {
         CrashReportingPermissionManager testPermManager =
-                new MockCrashReportingPermissionManager(true, true, false, false);
+                new MockCrashReportingPermissionManager(true, true, false, false, false);
 
         HttpURLConnectionFactory httpURLConnectionFactory = new TestHttpURLConnectionFactory();
 
@@ -204,7 +211,7 @@
     @Feature({"Android-AppBase"})
     public void testCallNotPermittedByUser() throws Exception {
         CrashReportingPermissionManager testPermManager =
-                new MockCrashReportingPermissionManager(false, false, false, false);
+                new MockCrashReportingPermissionManager(false, false, false, false, false);
 
         HttpURLConnectionFactory httpURLConnectionFactory = new FailHttpURLConnectionFactory();
 
@@ -219,7 +226,7 @@
     @Feature({"Android-AppBase"})
     public void testCallNotPermittedByCommandLine() throws Exception {
         CrashReportingPermissionManager testPermManager =
-                new MockCrashReportingPermissionManager(true, true, true, false);
+                new MockCrashReportingPermissionManager(true, true, true, false, false);
 
         HttpURLConnectionFactory httpURLConnectionFactory = new FailHttpURLConnectionFactory();
 
@@ -234,7 +241,7 @@
     @Feature({"Android-AppBase"})
     public void testCallPermittedButNotUnderCurrentCircumstances() throws Exception {
         CrashReportingPermissionManager testPermManager =
-                new MockCrashReportingPermissionManager(false, true, false, false);
+                new MockCrashReportingPermissionManager(false, true, false, false, false);
 
         HttpURLConnectionFactory httpURLConnectionFactory = new FailHttpURLConnectionFactory();
 
@@ -249,7 +256,7 @@
     @Feature({"Android-AppBase"})
     public void testCrashUploadConstrainted() throws Exception {
         CrashReportingPermissionManager testPermManager =
-                new MockCrashReportingPermissionManager(true, true, false, true);
+                new MockCrashReportingPermissionManager(true, true, false, true, false);
 
         HttpURLConnectionFactory httpURLConnectionFactory = new TestHttpURLConnectionFactory();
 
@@ -260,6 +267,22 @@
         assertFalse(mExpectedFileAfterUpload.exists());
     }
 
+    @SmallTest
+    @Feature({"Android-AppBase"})
+    public void testCrashUploadEnabledForTestsDespiteConstraints() throws Exception {
+        CrashReportingPermissionManager testPermManager =
+                new MockCrashReportingPermissionManager(false, false, false, true, true);
+
+        HttpURLConnectionFactory httpURLConnectionFactory = new TestHttpURLConnectionFactory();
+
+        MinidumpUploadCallable minidumpUploadCallable =
+                new MockMinidumpUploadCallable(httpURLConnectionFactory, testPermManager);
+        assertEquals(MinidumpUploadCallable.UPLOAD_SUCCESS,
+                minidumpUploadCallable.call().intValue());
+        assertTrue(mExpectedFileAfterUpload.exists());
+        assertValidUploadLogEntry();
+    }
+
     private void extendUploadFile(int numBytes) throws FileNotFoundException, IOException {
         FileOutputStream stream = null;
         try {
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/push_messaging/PushMessagingTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/push_messaging/PushMessagingTest.java
index fd50d18c..d7af8a3 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/push_messaging/PushMessagingTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/push_messaging/PushMessagingTest.java
@@ -39,7 +39,6 @@
     private static final String PUSH_TEST_PAGE =
             "/chrome/test/data/push_messaging/push_messaging_test_android.html";
     private static final String ABOUT_BLANK = "about:blank";
-    private static final String SENDER_ID_BUNDLE_KEY = "from";
     private static final int TITLE_UPDATE_TIMEOUT_SECONDS = (int) scaleTimeout(5);
     private static final String PRIVATE_DATA_DIRECTORY_SUFFIX = "chrome";
 
@@ -174,9 +173,8 @@
             public void run() {
                 Context context = getInstrumentation().getTargetContext().getApplicationContext();
                 Bundle extras = new Bundle();
-                extras.putString(SENDER_ID_BUNDLE_KEY, senderId);
                 PathUtils.setPrivateDataDirectorySuffix(PRIVATE_DATA_DIRECTORY_SUFFIX, context);
-                GCMDriver.onMessageReceived(context, appId, extras);
+                GCMDriver.onMessageReceived(context, appId, senderId, extras);
             }
         });
         mMessageHandledHelper.waitForCallback(mMessageHandledHelper.getCallCount());
diff --git a/chrome/app/chromeos_strings.grdp b/chrome/app/chromeos_strings.grdp
index 7a13162..270520a 100644
--- a/chrome/app/chromeos_strings.grdp
+++ b/chrome/app/chromeos_strings.grdp
@@ -6532,6 +6532,9 @@
   <message name="IDS_ARC_OPT_IN_DIALOG_PROGRESS_ANDROID" desc="Name of Android loading progress of the opt-in dialog for Android apps.">
     This may take up to a minute or so
   </message>
+  <message name="IDS_ARC_OPT_IN_DIALOG_AUTHORIZATION_FAILED" desc="Error message shown in case when auth code is not returned by server.">
+    Athorization failed
+  </message>
   <message name="IDS_ARC_SIGN_IN_NETWORK_ERROR" desc="Android sign-in error because of network error">
     Network error
   </message>
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index 6321734..f526849b 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -7567,6 +7567,15 @@
       <message name="IDS_CLEAR_BROWSING_DATA_SOME_STUFF_REMAINS_SIMPLE" desc="A text shown at the bottom of the Clear Browsing Data dialog, informing the user that some data types will not be cleared.">
         Some settings that may reflect browsing habits will not be cleared.
       </message>
+      <message name="IDS_CLEAR_BROWSING_DATA_HISTORY_FOOTER" desc="A text shown at the bottom of the Clear Browsing Data dialog, informing the user that deleting Chrome browsing history will not delete other forms of history stored at Google My Activity.">
+        Your Google Account may have other forms of browsing history at <ph name="BEGIN_LINK">&lt;a target="_blank" href="$1"&gt;</ph>history.google.com<ph name="END_LINK">&lt;/a&gt;</ph>.
+      </message>
+      <message name="IDS_CLEAR_BROWSING_DATA_HISTORY_NOTICE" desc="A dialog informing the user that their Chrome browsing history was deleted, but other forms of history can still be found on Google My Activity.">
+        The selected data has been removed from Chrome and synced devices. Your Google Account may have other forms of browsing history like searches and activity from other Google services at <ph name="BEGIN_LINK">&lt;a target="_blank" href="$1"&gt;</ph>history.google.com<ph name="END_LINK">&lt;/a&gt;</ph>.
+      </message>
+      <message name="IDS_CLEAR_BROWSING_DATA_HISTORY_NOTICE_TITLE" desc="Title of a dialog that informs the user that the deletion of Chrome's browsing data has been completed.">
+        Cleared Chrome data
+      </message>
       <message name="IDS_CLEAR_BROWSING_DATA_SYNCED_DELETION" desc="Information that data which is synced across user's devices will be deleted from all those devices.">
         This clears synced data from all devices.
       </message>
diff --git a/chrome/browser/apps/app_window_interactive_uitest.cc b/chrome/browser/apps/app_window_interactive_uitest.cc
index 743760a..faa674d 100644
--- a/chrome/browser/apps/app_window_interactive_uitest.cc
+++ b/chrome/browser/apps/app_window_interactive_uitest.cc
@@ -94,11 +94,7 @@
 };
 
 IN_PROC_BROWSER_TEST_F(AppWindowInteractiveTest, ESCLeavesFullscreenWindow) {
-// This test is flaky on MacOS 10.6.
 #if defined(OS_MACOSX)
-  if (base::mac::IsOSSnowLeopard())
-    return;
-
   ui::test::ScopedFakeNSWindowFullscreen fake_fullscreen;
 #endif
 
@@ -139,11 +135,7 @@
 }
 
 IN_PROC_BROWSER_TEST_F(AppWindowInteractiveTest, ESCLeavesFullscreenDOM) {
-// This test is flaky on MacOS 10.6.
 #if defined(OS_MACOSX)
-  if (base::mac::IsOSSnowLeopard())
-    return;
-
   ui::test::ScopedFakeNSWindowFullscreen fake_fullscreen;
 #endif
 
@@ -192,11 +184,7 @@
 
 IN_PROC_BROWSER_TEST_F(AppWindowInteractiveTest,
                        ESCDoesNotLeaveFullscreenWindow) {
-// This test is flaky on MacOS 10.6.
 #if defined(OS_MACOSX)
-  if (base::mac::IsOSSnowLeopard())
-    return;
-
   ui::test::ScopedFakeNSWindowFullscreen fake_fullscreen;
 #endif
 
@@ -242,11 +230,7 @@
 
 IN_PROC_BROWSER_TEST_F(AppWindowInteractiveTest,
                        ESCDoesNotLeaveFullscreenDOM) {
-// This test is flaky on MacOS 10.6.
 #if defined(OS_MACOSX)
-  if (base::mac::IsOSSnowLeopard())
-    return;
-
   ui::test::ScopedFakeNSWindowFullscreen fake_fullscreen;
 #endif
 
@@ -302,11 +286,7 @@
 // and 'overrideEscFullscreen'.
 IN_PROC_BROWSER_TEST_F(AppWindowInteractiveTest,
                        ESCDoesNotLeaveFullscreenOldPermission) {
-// This test is flaky on MacOS 10.6.
 #if defined(OS_MACOSX)
-  if (base::mac::IsOSSnowLeopard())
-    return;
-
   ui::test::ScopedFakeNSWindowFullscreen fake_fullscreen;
 #endif
 
diff --git a/chrome/browser/autofill/autofill_browsertest.cc b/chrome/browser/autofill/autofill_browsertest.cc
index 526b72c..6b5c4f8a 100644
--- a/chrome/browser/autofill/autofill_browsertest.cc
+++ b/chrome/browser/autofill/autofill_browsertest.cc
@@ -4,12 +4,12 @@
 
 #include <stddef.h>
 
+#include <memory>
 #include <string>
 
 #include "base/command_line.h"
 #include "base/files/file_util.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/rand_util.h"
 #include "base/run_loop.h"
 #include "base/strings/string16.h"
@@ -180,7 +180,7 @@
     params.disposition = NEW_FOREGROUND_TAB;
     ui_test_utils::NavigateToURL(&params);
 
-    scoped_ptr<WindowedPersonalDataManagerObserver> observer;
+    std::unique_ptr<WindowedPersonalDataManagerObserver> observer;
     if (expect_personal_data_change)
       observer.reset(new WindowedPersonalDataManagerObserver(browser()));
 
diff --git a/chrome/browser/autofill/autofill_interactive_uitest.cc b/chrome/browser/autofill/autofill_interactive_uitest.cc
index 23dcb11..5ec23cd 100644
--- a/chrome/browser/autofill/autofill_interactive_uitest.cc
+++ b/chrome/browser/autofill/autofill_interactive_uitest.cc
@@ -8,7 +8,6 @@
 #include "base/files/file_util.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/rand_util.h"
 #include "base/strings/string16.h"
 #include "base/strings/string_number_conversions.h"
diff --git a/chrome/browser/autofill/autofill_save_card_infobar_delegate_mobile_unittest.cc b/chrome/browser/autofill/autofill_save_card_infobar_delegate_mobile_unittest.cc
index dc8d076..b97789e2 100644
--- a/chrome/browser/autofill/autofill_save_card_infobar_delegate_mobile_unittest.cc
+++ b/chrome/browser/autofill/autofill_save_card_infobar_delegate_mobile_unittest.cc
@@ -4,8 +4,9 @@
 
 #include "components/autofill/core/browser/autofill_save_card_infobar_delegate_mobile.h"
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/test/histogram_tester.h"
 #include "chrome/browser/autofill/personal_data_manager_factory.h"
 #include "chrome/browser/ui/autofill/chrome_autofill_client.h"
@@ -53,9 +54,9 @@
   void TearDown() override;
 
  protected:
-  scoped_ptr<ConfirmInfoBarDelegate> CreateDelegate();
+  std::unique_ptr<ConfirmInfoBarDelegate> CreateDelegate();
 
-  scoped_ptr<TestPersonalDataManager> personal_data_;
+  std::unique_ptr<TestPersonalDataManager> personal_data_;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(AutofillSaveCardInfoBarDelegateMobileTest);
@@ -86,12 +87,12 @@
   ChromeRenderViewHostTestHarness::TearDown();
 }
 
-scoped_ptr<ConfirmInfoBarDelegate>
+std::unique_ptr<ConfirmInfoBarDelegate>
 AutofillSaveCardInfoBarDelegateMobileTest::CreateDelegate() {
   base::HistogramTester histogram_tester;
   CreditCard credit_card;
-  scoped_ptr<base::DictionaryValue> legal_message;
-  scoped_ptr<ConfirmInfoBarDelegate> delegate(
+  std::unique_ptr<base::DictionaryValue> legal_message;
+  std::unique_ptr<ConfirmInfoBarDelegate> delegate(
       new AutofillSaveCardInfoBarDelegateMobile(
           false, credit_card, std::move(legal_message),
           base::Bind(base::IgnoreResult(
@@ -108,7 +109,7 @@
 
   // Accept the infobar.
   {
-    scoped_ptr<ConfirmInfoBarDelegate> infobar(CreateDelegate());
+    std::unique_ptr<ConfirmInfoBarDelegate> infobar(CreateDelegate());
     EXPECT_CALL(*personal_data_, SaveImportedCreditCard(_));
 
     base::HistogramTester histogram_tester;
@@ -119,7 +120,7 @@
 
   // Cancel the infobar.
   {
-    scoped_ptr<ConfirmInfoBarDelegate> infobar(CreateDelegate());
+    std::unique_ptr<ConfirmInfoBarDelegate> infobar(CreateDelegate());
 
     base::HistogramTester histogram_tester;
     EXPECT_TRUE(infobar->Cancel());
@@ -129,7 +130,7 @@
 
   // Dismiss the infobar.
   {
-    scoped_ptr<ConfirmInfoBarDelegate> infobar(CreateDelegate());
+    std::unique_ptr<ConfirmInfoBarDelegate> infobar(CreateDelegate());
 
     base::HistogramTester histogram_tester;
     infobar->InfoBarDismissed();
@@ -139,7 +140,7 @@
 
   // Ignore the infobar.
   {
-    scoped_ptr<ConfirmInfoBarDelegate> infobar(CreateDelegate());
+    std::unique_ptr<ConfirmInfoBarDelegate> infobar(CreateDelegate());
 
     base::HistogramTester histogram_tester;
     infobar.reset();
diff --git a/chrome/browser/autofill/autofill_server_browsertest.cc b/chrome/browser/autofill/autofill_server_browsertest.cc
index a0d9696..abec775 100644
--- a/chrome/browser/autofill/autofill_server_browsertest.cc
+++ b/chrome/browser/autofill/autofill_server_browsertest.cc
@@ -81,7 +81,7 @@
 
  private:
   // Mocks out network requests.
-  scoped_ptr<net::TestURLFetcherFactory> factory_;
+  std::unique_ptr<net::TestURLFetcherFactory> factory_;
 
   const std::string expected_upload_data_;
   scoped_refptr<content::MessageLoopRunner> message_loop_runner_;
diff --git a/chrome/browser/autofill/content_autofill_driver_browsertest.cc b/chrome/browser/autofill/content_autofill_driver_browsertest.cc
index e60f12c..3174bcb 100644
--- a/chrome/browser/autofill/content_autofill_driver_browsertest.cc
+++ b/chrome/browser/autofill/content_autofill_driver_browsertest.cc
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
+#include "base/memory/ref_counted.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_tabstrip.h"
diff --git a/chrome/browser/autofill/personal_data_manager_factory.cc b/chrome/browser/autofill/personal_data_manager_factory.cc
index 6b770fa..8f0b226 100644
--- a/chrome/browser/autofill/personal_data_manager_factory.cc
+++ b/chrome/browser/autofill/personal_data_manager_factory.cc
@@ -4,7 +4,6 @@
 
 #include "chrome/browser/autofill/personal_data_manager_factory.h"
 
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/singleton.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/profiles/incognito_helpers.h"
diff --git a/chrome/browser/autofill/risk_util.cc b/chrome/browser/autofill/risk_util.cc
index 149b11a..1b775261 100644
--- a/chrome/browser/autofill/risk_util.cc
+++ b/chrome/browser/autofill/risk_util.cc
@@ -4,6 +4,8 @@
 
 #include "chrome/browser/autofill/risk_util.h"
 
+#include <memory>
+
 #include "base/base64.h"
 #include "base/callback.h"
 #include "base/time/time.h"
@@ -34,7 +36,7 @@
 namespace {
 
 void PassRiskData(const base::Callback<void(const std::string&)>& callback,
-                  scoped_ptr<risk::Fingerprint> fingerprint) {
+                  std::unique_ptr<risk::Fingerprint> fingerprint) {
   std::string proto_data, risk_data;
   fingerprint->SerializeToString(&proto_data);
   base::Base64Encode(proto_data, &risk_data);
diff --git a/chrome/browser/autofill/risk_util.h b/chrome/browser/autofill/risk_util.h
index b14a7433..35eb869 100644
--- a/chrome/browser/autofill/risk_util.h
+++ b/chrome/browser/autofill/risk_util.h
@@ -6,10 +6,10 @@
 #define CHROME_BROWSER_AUTOFILL_RISK_UTIL_H_
 
 #include <stdint.h>
+
 #include <string>
 
 #include "base/callback_forward.h"
-#include "base/memory/scoped_ptr.h"
 
 namespace content {
 class WebContents;
diff --git a/chrome/browser/autofill/validation_rules_storage_factory.cc b/chrome/browser/autofill/validation_rules_storage_factory.cc
index 9e1f4db..21d68512 100644
--- a/chrome/browser/autofill/validation_rules_storage_factory.cc
+++ b/chrome/browser/autofill/validation_rules_storage_factory.cc
@@ -18,10 +18,10 @@
 using ::i18n::addressinput::Storage;
 
 // static
-scoped_ptr<Storage> ValidationRulesStorageFactory::CreateStorage() {
+std::unique_ptr<Storage> ValidationRulesStorageFactory::CreateStorage() {
   static base::LazyInstance<ValidationRulesStorageFactory> instance =
       LAZY_INSTANCE_INITIALIZER;
-  return scoped_ptr<Storage>(
+  return std::unique_ptr<Storage>(
       new ChromeStorageImpl(instance.Get().json_pref_store_.get()));
 }
 
@@ -37,8 +37,8 @@
       JsonPrefStore::GetTaskRunnerForFile(
           cache, content::BrowserThread::GetBlockingPool());
 
-  json_pref_store_ =
-      new JsonPrefStore(cache, task_runner.get(), scoped_ptr<PrefFilter>());
+  json_pref_store_ = new JsonPrefStore(cache, task_runner.get(),
+                                       std::unique_ptr<PrefFilter>());
   json_pref_store_->ReadPrefsAsync(NULL);
 }
 
diff --git a/chrome/browser/autofill/validation_rules_storage_factory.h b/chrome/browser/autofill/validation_rules_storage_factory.h
index 0c2e503..f5f077e 100644
--- a/chrome/browser/autofill/validation_rules_storage_factory.h
+++ b/chrome/browser/autofill/validation_rules_storage_factory.h
@@ -5,10 +5,11 @@
 #ifndef CHROME_BROWSER_AUTOFILL_VALIDATION_RULES_STORAGE_FACTORY_H_
 #define CHROME_BROWSER_AUTOFILL_VALIDATION_RULES_STORAGE_FACTORY_H_
 
+#include <memory>
+
 #include "base/lazy_instance.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 
 namespace i18n {
 namespace addressinput {
@@ -24,7 +25,7 @@
 // Creates Storage objects, all of which are backed by a common pref store.
 class ValidationRulesStorageFactory {
  public:
-  static scoped_ptr< ::i18n::addressinput::Storage> CreateStorage();
+  static std::unique_ptr<::i18n::addressinput::Storage> CreateStorage();
 
  private:
   friend struct base::DefaultLazyInstanceTraits<ValidationRulesStorageFactory>;
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn
index ef6c181..1db9b7af 100644
--- a/chrome/browser/chromeos/BUILD.gn
+++ b/chrome/browser/chromeos/BUILD.gn
@@ -174,7 +174,8 @@
   testonly = true
 
   sources = rebase_path(
-          chrome_tests_unit_gypi_values.chrome_unit_tests_chromeos_sources,
+          chrome_tests_unit_gypi_values.chrome_unit_tests_chromeos_sources +
+              chrome_tests_unit_gypi_values.chrome_unit_tests_arc_sources,
           ".",
           "//chrome")
 
@@ -197,6 +198,7 @@
     "//sync",
     "//testing/gmock",
     "//testing/gtest",
+    "//third_party/icu",
     "//third_party/leveldatabase",
     "//ui/chromeos/resources",
   ]
diff --git a/chrome/browser/chromeos/arc/arc_auth_service.cc b/chrome/browser/chromeos/arc/arc_auth_service.cc
index fc20825..224242c9 100644
--- a/chrome/browser/chromeos/arc/arc_auth_service.cc
+++ b/chrome/browser/chromeos/arc/arc_auth_service.cc
@@ -6,6 +6,8 @@
 
 #include <utility>
 
+#include "base/bind.h"
+#include "base/bind_helpers.h"
 #include "base/command_line.h"
 #include "base/strings/stringprintf.h"
 #include "chrome/browser/chromeos/arc/arc_auth_notification.h"
@@ -130,8 +132,7 @@
 
   initial_opt_in_ = false;
   auth_callback_ = callback;
-  SetState(State::FETCHING_CODE);
-  FetchAuthCode();
+  StartUI();
 }
 
 void ArcAuthService::OnSignInComplete() {
@@ -224,6 +225,11 @@
 
   // In case UI is disabled we assume that ARC is opted-in.
   if (!IsOptInVerificationDisabled()) {
+    pref_change_registrar_.Init(profile_->GetPrefs());
+    pref_change_registrar_.Add(
+        prefs::kArcEnabled,
+        base::Bind(&ArcAuthService::OnOptInPreferenceChanged,
+                   base::Unretained(this)));
     if (profile_->GetPrefs()->GetBoolean(prefs::kArcEnabled)) {
       OnOptInPreferenceChanged();
     } else {
@@ -262,6 +268,7 @@
     pref_service_syncable->RemoveObserver(this);
     pref_service_syncable->RemoveSyncedPrefObserver(prefs::kArcEnabled, this);
   }
+  pref_change_registrar_.RemoveAll();
   profile_ = nullptr;
 }
 
@@ -298,7 +305,7 @@
     const GoogleServiceAuthError& error) {
   DCHECK(thread_checker_.CalledOnValidThread());
   VLOG(2) << "Failed to merge gaia session " << error.ToString() << ".";
-  OnAuthCodeFailed();
+  OnPrepareContextFailed();
 }
 
 void ArcAuthService::OnUbertokenSuccess(const std::string& token) {
@@ -312,7 +319,7 @@
 void ArcAuthService::OnUbertokenFailure(const GoogleServiceAuthError& error) {
   DCHECK(thread_checker_.CalledOnValidThread());
   VLOG(2) << "Failed to get ubertoken " << error.ToString() << ".";
-  OnAuthCodeFailed();
+  OnPrepareContextFailed();
 }
 
 void ArcAuthService::OnSyncedPrefChanged(const std::string& path,
@@ -325,8 +332,6 @@
                              ? OptInActionType::OPTED_IN
                              : OptInActionType::OPTED_OUT);
   }
-
-  OnOptInPreferenceChanged();
 }
 
 void ArcAuthService::OnOptInPreferenceChanged() {
@@ -341,8 +346,7 @@
       if (!profile_->GetPrefs()->GetBoolean(prefs::kArcSignedIn)) {
         // Need pre-fetch auth code and show OptIn UI if needed.
         initial_opt_in_ = true;
-        SetState(State::FETCHING_CODE);
-        FetchAuthCode();
+        StartUI();
       } else {
         // Ready to start Arc.
         StartArc();
@@ -359,7 +363,6 @@
 
 void ArcAuthService::ShutdownBridge() {
   auth_callback_.reset();
-  auth_fetcher_.reset();
   ubertoken_fethcher_.reset();
   merger_fetcher_.reset();
   ArcBridgeService::Get()->Shutdown();
@@ -428,7 +431,7 @@
   StartArc();
 }
 
-void ArcAuthService::CheckAuthCode() {
+void ArcAuthService::StartLso() {
   DCHECK(thread_checker_.CalledOnValidThread());
 
   // Update UMA only if error is currently shown.
@@ -436,18 +439,7 @@
     UpdateOptInActionUMA(OptInActionType::RETRY);
 
   initial_opt_in_ = false;
-  SetState(State::FETCHING_CODE);
-  FetchAuthCode();
-}
-
-void ArcAuthService::FetchAuthCode() {
-  DCHECK(thread_checker_.CalledOnValidThread());
-
-  if (state_ != State::FETCHING_CODE)
-    return;
-
-  auth_fetcher_.reset(
-      new ArcAuthFetcher(storage_partition_->GetURLRequestContext(), this));
+  StartUI();
 }
 
 void ArcAuthService::CancelAuthCode() {
@@ -473,11 +465,6 @@
   profile_->GetPrefs()->SetBoolean(prefs::kArcEnabled, false);
 }
 
-void ArcAuthService::OnAuthCodeFetched(const std::string& auth_code) {
-  DCHECK_EQ(state_, State::FETCHING_CODE);
-  SetAuthCodeAndStartArc(auth_code);
-}
-
 void ArcAuthService::PrepareContext() {
   DCHECK(thread_checker_.CalledOnValidThread());
 
@@ -494,9 +481,11 @@
   ubertoken_fethcher_->StartFetchingToken(account_id);
 }
 
-void ArcAuthService::OnAuthCodeNeedUI() {
+void ArcAuthService::StartUI() {
   DCHECK(thread_checker_.CalledOnValidThread());
 
+  SetState(State::FETCHING_CODE);
+
   if (initial_opt_in_) {
     initial_opt_in_ = false;
     ShowUI(UIPage::START, base::string16());
@@ -507,19 +496,13 @@
   }
 }
 
-void ArcAuthService::OnAuthCodeFailed() {
+void ArcAuthService::OnPrepareContextFailed() {
   DCHECK_EQ(state_, State::FETCHING_CODE);
 
-  if (initial_opt_in_) {
-    // Don't show error as first page.
-    initial_opt_in_ = false;
-    ShutdownBridgeAndShowUI(UIPage::START, base::string16());
-  } else {
-    ShutdownBridgeAndShowUI(
-        UIPage::ERROR,
-        l10n_util::GetStringUTF16(IDS_ARC_SERVER_COMMUNICATION_ERROR));
-    UpdateOptInCancelUMA(OptInCancelReason::NETWORK_ERROR);
-  }
+  ShutdownBridgeAndShowUI(
+      UIPage::ERROR,
+      l10n_util::GetStringUTF16(IDS_ARC_SERVER_COMMUNICATION_ERROR));
+  UpdateOptInCancelUMA(OptInCancelReason::NETWORK_ERROR);
 }
 
 std::ostream& operator<<(std::ostream& os, const ArcAuthService::State& state) {
diff --git a/chrome/browser/chromeos/arc/arc_auth_service.h b/chrome/browser/chromeos/arc/arc_auth_service.h
index f05fd18..21a198e1 100644
--- a/chrome/browser/chromeos/arc/arc_auth_service.h
+++ b/chrome/browser/chromeos/arc/arc_auth_service.h
@@ -12,8 +12,8 @@
 #include "base/threading/thread_checker.h"
 #include "components/arc/arc_bridge_service.h"
 #include "components/arc/arc_service.h"
-#include "components/arc/auth/arc_auth_fetcher.h"
 #include "components/arc/common/auth.mojom.h"
+#include "components/prefs/pref_change_registrar.h"
 #include "components/syncable_prefs/pref_service_syncable_observer.h"
 #include "components/syncable_prefs/synced_pref_observer.h"
 #include "google_apis/gaia/gaia_auth_consumer.h"
@@ -42,7 +42,6 @@
 class ArcAuthService : public ArcService,
                        public AuthHost,
                        public ArcBridgeService::Observer,
-                       public ArcAuthFetcher::Delegate,
                        public UbertokenConsumer,
                        public GaiaAuthConsumer,
                        public syncable_prefs::PrefServiceSyncableObserver,
@@ -117,8 +116,11 @@
   void GetIsAccountManaged(
       const GetIsAccountManagedCallback& callback) override;
 
-  // Called from Arc support platform app to check auth code.
-  void CheckAuthCode();
+  // Called from Arc support platform app to start LSO.
+  void StartLso();
+
+  // Called from Arc support platform app to set auth code and start arc.
+  void SetAuthCodeAndStartArc(const std::string& auth_code);
 
   // Called from Arc support platform app when user cancels signing.
   void CancelAuthCode();
@@ -126,11 +128,6 @@
   void EnableArc();
   void DisableArc();
 
-  // ArcAuthFetcher::Delegate:
-  void OnAuthCodeFetched(const std::string& auth_code) override;
-  void OnAuthCodeNeedUI() override;
-  void OnAuthCodeFailed() override;
-
   // UbertokenConsumer:
   void OnUbertokenSuccess(const std::string& token) override;
   void OnUbertokenFailure(const GoogleServiceAuthError& error) override;
@@ -152,7 +149,6 @@
 
  private:
   void StartArc();
-  void SetAuthCodeAndStartArc(const std::string& auth_code);
   void PrepareContext();
   void ShowUI(UIPage page, const base::string16& status);
   void CloseUI();
@@ -162,7 +158,8 @@
   void ShutdownBridgeAndCloseUI();
   void ShutdownBridgeAndShowUI(UIPage page, const base::string16& status);
   void OnOptInPreferenceChanged();
-  void FetchAuthCode();
+  void StartUI();
+  void OnPrepareContextFailed();
 
   // Unowned pointer. Keeps current profile.
   Profile* profile_ = nullptr;
@@ -170,11 +167,13 @@
   // communication and shared with Arc OptIn UI platform app.
   content::StoragePartition* storage_partition_ = nullptr;
 
+  // Registrar used to monitor ARC enabled state.
+  PrefChangeRegistrar pref_change_registrar_;
+
   mojo::Binding<AuthHost> binding_;
   base::ThreadChecker thread_checker_;
   State state_ = State::STOPPED;
   base::ObserverList<Observer> observer_list_;
-  scoped_ptr<ArcAuthFetcher> auth_fetcher_;
   scoped_ptr<GaiaAuthFetcher> merger_fetcher_;
   scoped_ptr<UbertokenFetcher> ubertoken_fethcher_;
   std::string auth_code_;
diff --git a/chrome/browser/chromeos/arc/arc_auth_service_unittest.cc b/chrome/browser/chromeos/arc/arc_auth_service_unittest.cc
index f3546b86..96984acc 100644
--- a/chrome/browser/chromeos/arc/arc_auth_service_unittest.cc
+++ b/chrome/browser/chromeos/arc/arc_auth_service_unittest.cc
@@ -17,7 +17,6 @@
 #include "chrome/common/pref_names.h"
 #include "chrome/test/base/testing_profile.h"
 #include "components/arc/arc_bridge_service.h"
-#include "components/arc/auth/arc_auth_fetcher.h"
 #include "components/arc/test/fake_arc_bridge_service.h"
 #include "components/prefs/pref_service.h"
 #include "components/syncable_prefs/testing_pref_service_syncable.h"
@@ -26,8 +25,6 @@
 #include "google_apis/gaia/gaia_constants.h"
 #include "google_apis/gaia/gaia_urls.h"
 #include "net/http/http_status_code.h"
-#include "net/url_request/test_url_fetcher_factory.h"
-#include "net/url_request/url_fetcher.h"
 #include "sync/api/fake_sync_change_processor.h"
 #include "sync/api/sync_error_factory_mock.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -44,11 +41,7 @@
 class ArcAuthServiceTest : public testing::Test {
  public:
   ArcAuthServiceTest()
-      : thread_bundle_(new content::TestBrowserThreadBundle(kThreadOptions)),
-        url_fetcher_factory_(
-            nullptr,
-            base::Bind(&ArcAuthServiceTest::FakeURLFetcherCreator,
-                       base::Unretained(this))) {}
+      : thread_bundle_(new content::TestBrowserThreadBundle(kThreadOptions)) {}
   ~ArcAuthServiceTest() override = default;
 
   void SetUp() override {
@@ -78,37 +71,7 @@
   FakeArcBridgeService* bridge_service() { return bridge_service_.get(); }
   ArcAuthService* auth_service() { return auth_service_.get(); }
 
-  void PrepareURLResponse(net::HttpStatusCode code, bool enable_auth_code) {
-    const GURL gaia_gurl = ArcAuthFetcher::CreateURL();
-    url_fetcher_factory_.SetFakeResponse(gaia_gurl, std::string(), code,
-                                         net::URLRequestStatus::SUCCESS);
-    if (enable_auth_code) {
-      std::string cookie = "oauth_code=";
-      cookie += kTestAuthCode;
-      cookie += "; Path=/o/oauth2/programmatic_auth; Secure; HttpOnly";
-      rt_cookie_ = cookie;
-    }
-  }
-
  private:
-  scoped_ptr<net::FakeURLFetcher> FakeURLFetcherCreator(
-      const GURL& url,
-      net::URLFetcherDelegate* delegate,
-      const std::string& response_data,
-      net::HttpStatusCode response_code,
-      net::URLRequestStatus::Status status) {
-    scoped_ptr<net::FakeURLFetcher> fetcher(new net::FakeURLFetcher(
-        url, delegate, response_data, response_code, status));
-    // Use cookie only once.
-    if (!rt_cookie_.empty()) {
-      net::ResponseCookies cookies;
-      cookies.push_back(rt_cookie_);
-      fetcher->set_cookies(cookies);
-      rt_cookie_.clear();
-    }
-    return fetcher;
-  }
-
   void StartPreferenceSyncing() const {
     PrefServiceSyncableFromProfile(profile_.get())
         ->GetSyncableService(syncer::PREFERENCES)
@@ -120,12 +83,10 @@
   }
 
   scoped_ptr<content::TestBrowserThreadBundle> thread_bundle_;
-  net::FakeURLFetcherFactory url_fetcher_factory_;
   scoped_ptr<arc::FakeArcBridgeService> bridge_service_;
   scoped_ptr<arc::ArcAuthService> auth_service_;
   scoped_ptr<TestingProfile> profile_;
   base::ScopedTempDir temp_dir_;
-  std::string rt_cookie_;
 
   DISALLOW_COPY_AND_ASSIGN(ArcAuthServiceTest);
 };
@@ -139,7 +100,6 @@
   auth_service()->OnPrimaryUserProfilePrepared(profile());
   ASSERT_EQ(ArcAuthService::State::STOPPED, auth_service()->state());
 
-  PrepareURLResponse(net::HTTP_OK, false);
   pref->SetBoolean(prefs::kArcEnabled, true);
   ASSERT_EQ(ArcAuthService::State::FETCHING_CODE, auth_service()->state());
 
@@ -155,7 +115,6 @@
   ASSERT_EQ(ArcAuthService::State::STOPPED, auth_service()->state());
   ASSERT_EQ(std::string(), auth_service()->GetAndResetAuthCode());
 
-  PrepareURLResponse(net::HTTP_OK, true);
   auth_service()->OnPrimaryUserProfilePrepared(profile());
 
   // By default ARC is not enabled.
@@ -166,8 +125,7 @@
   // Setting profile and pref initiates a code fetching process.
   ASSERT_EQ(ArcAuthService::State::FETCHING_CODE, auth_service()->state());
 
-  content::BrowserThread::GetBlockingPool()->FlushForTesting();
-  base::RunLoop().RunUntilIdle();
+  auth_service()->SetAuthCodeAndStartArc(kTestAuthCode);
 
   ASSERT_EQ(ArcAuthService::State::ACTIVE, auth_service()->state());
   ASSERT_EQ(ArcBridgeService::State::READY, bridge_service()->state());
@@ -192,24 +150,11 @@
   // UI is disabled in unit tests and this code is unchanged.
   ASSERT_EQ(ArcAuthService::State::FETCHING_CODE, auth_service()->state());
 
-  // Send error response.
-  PrepareURLResponse(net::HTTP_BAD_REQUEST, false);
-  auth_service()->Shutdown();
-  ASSERT_EQ(ArcAuthService::State::STOPPED, auth_service()->state());
-  auth_service()->OnPrimaryUserProfilePrepared(profile());
-
-  ASSERT_EQ(ArcAuthService::State::FETCHING_CODE, auth_service()->state());
-  content::BrowserThread::GetBlockingPool()->FlushForTesting();
-  base::RunLoop().RunUntilIdle();
-
-  ASSERT_EQ(ArcAuthService::State::STOPPED, auth_service()->state());
-
   // Correctly stop service.
   auth_service()->Shutdown();
 }
 
 TEST_F(ArcAuthServiceTest, CancelFetchingDisablesArc) {
-  PrepareURLResponse(net::HTTP_OK, false);
   PrefService* pref = profile()->GetPrefs();
 
   auth_service()->OnPrimaryUserProfilePrepared(profile());
@@ -225,14 +170,12 @@
 }
 
 TEST_F(ArcAuthServiceTest, CloseUIKeepsArcEnabled) {
-  PrepareURLResponse(net::HTTP_OK, true);
   PrefService* pref = profile()->GetPrefs();
 
   auth_service()->OnPrimaryUserProfilePrepared(profile());
   pref->SetBoolean(prefs::kArcEnabled, true);
 
-  content::BrowserThread::GetBlockingPool()->FlushForTesting();
-  base::RunLoop().RunUntilIdle();
+  auth_service()->SetAuthCodeAndStartArc(kTestAuthCode);
 
   ASSERT_EQ(ArcAuthService::State::ACTIVE, auth_service()->state());
 
@@ -245,7 +188,6 @@
 }
 
 TEST_F(ArcAuthServiceTest, EnableDisablesArc) {
-  PrepareURLResponse(net::HTTP_OK, false);
   PrefService* pref = profile()->GetPrefs();
   auth_service()->OnPrimaryUserProfilePrepared(profile());
 
@@ -262,14 +204,12 @@
 TEST_F(ArcAuthServiceTest, SignInStatus) {
   PrefService* prefs = profile()->GetPrefs();
 
-  PrepareURLResponse(net::HTTP_OK, true);
   EXPECT_FALSE(prefs->GetBoolean(prefs::kArcSignedIn));
   prefs->SetBoolean(prefs::kArcEnabled, true);
 
   auth_service()->OnPrimaryUserProfilePrepared(profile());
   EXPECT_EQ(ArcAuthService::State::FETCHING_CODE, auth_service()->state());
-  content::BrowserThread::GetBlockingPool()->FlushForTesting();
-  base::RunLoop().RunUntilIdle();
+  auth_service()->SetAuthCodeAndStartArc(kTestAuthCode);
   EXPECT_EQ(ArcAuthService::State::ACTIVE, auth_service()->state());
   EXPECT_EQ(ArcBridgeService::State::READY, bridge_service()->state());
   EXPECT_FALSE(prefs->GetBoolean(prefs::kArcSignedIn));
diff --git a/chrome/browser/chromeos/arc/arc_policy_bridge.cc b/chrome/browser/chromeos/arc/arc_policy_bridge.cc
index 6be7e05..e472d9ad 100644
--- a/chrome/browser/chromeos/arc/arc_policy_bridge.cc
+++ b/chrome/browser/chromeos/arc/arc_policy_bridge.cc
@@ -4,7 +4,9 @@
 
 #include "chrome/browser/chromeos/arc/arc_policy_bridge.h"
 
+#include "base/json/json_string_value_serializer.h"
 #include "base/logging.h"
+#include "base/values.h"
 #include "chrome/browser/chromeos/profiles/profile_helper.h"
 #include "chrome/browser/policy/profile_policy_connector.h"
 #include "chrome/browser/policy/profile_policy_connector_factory.h"
@@ -12,6 +14,7 @@
 #include "components/policy/core/common/policy_namespace.h"
 #include "components/user_manager/user.h"
 #include "mojo/public/cpp/bindings/string.h"
+#include "policy/policy_constants.h"
 
 namespace arc {
 
@@ -21,6 +24,15 @@
   arc_bridge_service()->AddObserver(this);
 }
 
+ArcPolicyBridge::ArcPolicyBridge(ArcBridgeService* bridge_service,
+                                 policy::PolicyService* policy_service)
+    : ArcService(bridge_service),
+      binding_(this),
+      policy_service_(policy_service) {
+  VLOG(1) << "ArcPolicyBridge::ArcPolicyBridge(bridge_service, policy_service)";
+  arc_bridge_service()->AddObserver(this);
+}
+
 ArcPolicyBridge::~ArcPolicyBridge() {
   VLOG(1) << "ArcPolicyBridge::~ArcPolicyBridge";
   arc_bridge_service()->RemoveObserver(this);
@@ -28,13 +40,9 @@
 
 void ArcPolicyBridge::OnPolicyInstanceReady() {
   VLOG(1) << "ArcPolicyBridge::OnPolicyInstanceReady";
-  const user_manager::User* const primary_user =
-      user_manager::UserManager::Get()->GetPrimaryUser();
-  Profile* const profile =
-      chromeos::ProfileHelper::Get()->GetProfileByUser(primary_user);
-  policy_service_ =
-      policy::ProfilePolicyConnectorFactory::GetForBrowserContext(profile)
-          ->policy_service();
+  if (policy_service_ == nullptr) {
+    InitializePolicyService();
+  }
   policy_service_->AddObserver(policy::POLICY_DOMAIN_CHROME, this);
 
   PolicyInstance* const policy_instance =
@@ -55,12 +63,12 @@
 
 void ArcPolicyBridge::GetPolicies(const GetPoliciesCallback& callback) {
   VLOG(1) << "ArcPolicyBridge::GetPolicies";
-  // TODO(phweiss): Get actual policies
-  const std::string stub_policies =
-      "{\"applications\":[{\"packageName\":"
-      "\"com.android.chrome\",\"installType\":\"REQUIRED\",\"lockTaskAllowed\":"
-      "false,\"permissionGrants\":[]}]}";
-  callback.Run(mojo::String(stub_policies));
+  const policy::PolicyNamespace policy_namespace(policy::POLICY_DOMAIN_CHROME,
+                                                 std::string());
+  const policy::PolicyMap& policy_map =
+      policy_service_->GetPolicies(policy_namespace);
+  const std::string json_policies = GetFilteredJSONPolicies(policy_map);
+  callback.Run(mojo::String(json_policies));
 }
 
 void ArcPolicyBridge::OnPolicyUpdated(const policy::PolicyNamespace& ns,
@@ -71,4 +79,33 @@
   arc_bridge_service()->policy_instance()->OnPolicyUpdated();
 }
 
+void ArcPolicyBridge::InitializePolicyService() {
+  const user_manager::User* const primary_user =
+      user_manager::UserManager::Get()->GetPrimaryUser();
+  Profile* const profile =
+      chromeos::ProfileHelper::Get()->GetProfileByUser(primary_user);
+  policy_service_ =
+      policy::ProfilePolicyConnectorFactory::GetForBrowserContext(profile)
+          ->policy_service();
+}
+
+std::string ArcPolicyBridge::GetFilteredJSONPolicies(
+    const policy::PolicyMap& policy_map) {
+  // TODO(phweiss): Implement general filtering mechanism when more policies
+  // need to be passed on.
+  // Create dictionary with the desired policies.
+  base::DictionaryValue filtered_policies;
+  const std::string policy_name = policy::key::kArcApplicationPolicy;
+  const base::Value* const policy_value = policy_map.GetValue(policy_name);
+  if (policy_value) {
+    filtered_policies.Set(policy_name,
+                          policy_value->CreateDeepCopy().release());
+  }
+  // Convert dictionary to JSON.
+  std::string policy_json;
+  JSONStringValueSerializer serializer(&policy_json);
+  serializer.Serialize(filtered_policies);
+  return policy_json;
+}
+
 }  // namespace arc
diff --git a/chrome/browser/chromeos/arc/arc_policy_bridge.h b/chrome/browser/chromeos/arc/arc_policy_bridge.h
index f6afaec..2177f1b 100644
--- a/chrome/browser/chromeos/arc/arc_policy_bridge.h
+++ b/chrome/browser/chromeos/arc/arc_policy_bridge.h
@@ -5,11 +5,18 @@
 #ifndef CHROME_BROWSER_CHROMEOS_ARC_ARC_POLICY_BRIDGE_H_
 #define CHROME_BROWSER_CHROMEOS_ARC_ARC_POLICY_BRIDGE_H_
 
+#include <string>
+
+#include "base/macros.h"
 #include "components/arc/arc_bridge_service.h"
 #include "components/arc/arc_service.h"
 #include "components/policy/core/common/policy_service.h"
 #include "mojo/public/cpp/bindings/binding.h"
 
+namespace policy {
+class PolicyMap;
+}  // namespace policy
+
 namespace arc {
 
 class ArcPolicyBridge : public ArcService,
@@ -18,6 +25,8 @@
                         public policy::PolicyService::Observer {
  public:
   explicit ArcPolicyBridge(ArcBridgeService* bridge_service);
+  ArcPolicyBridge(ArcBridgeService* bridge_service,
+                  policy::PolicyService* policy_service);
   ~ArcPolicyBridge() override;
 
   // ArcBridgeService::Observer overrides.
@@ -33,6 +42,9 @@
                        const policy::PolicyMap& current) override;
 
  private:
+  void InitializePolicyService();
+  std::string GetFilteredJSONPolicies(const policy::PolicyMap& policy_map);
+
   mojo::Binding<PolicyHost> binding_;
   policy::PolicyService* policy_service_ = nullptr;
 
diff --git a/chrome/browser/chromeos/arc/arc_policy_bridge_unittest.cc b/chrome/browser/chromeos/arc/arc_policy_bridge_unittest.cc
new file mode 100644
index 0000000..ae0ead1d
--- /dev/null
+++ b/chrome/browser/chromeos/arc/arc_policy_bridge_unittest.cc
@@ -0,0 +1,89 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <memory>
+
+#include "base/macros.h"
+#include "base/values.h"
+#include "chrome/browser/chromeos/arc/arc_policy_bridge.h"
+#include "components/arc/test/fake_arc_bridge_service.h"
+#include "components/policy/core/common/mock_policy_service.h"
+#include "components/policy/core/common/policy_map.h"
+#include "components/policy/core/common/policy_namespace.h"
+#include "components/policy/core/common/policy_types.h"
+#include "mojo/public/cpp/bindings/string.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace arc {
+
+using testing::ReturnRef;
+
+class ArcPolicyBridgeTest : public testing::Test {
+ public:
+  ArcPolicyBridgeTest() {}
+
+  void SetUp() override {
+    bridge_service_.reset(new FakeArcBridgeService());
+    policy_bridge_.reset(
+        new ArcPolicyBridge(bridge_service_.get(), &policy_service_));
+
+    EXPECT_CALL(policy_service_,
+                GetPolicies(policy::PolicyNamespace(
+                    policy::POLICY_DOMAIN_CHROME, std::string())))
+        .WillRepeatedly(ReturnRef(policy_map_));
+  }
+
+ protected:
+  class PolicyStringRunnable
+      : public ArcPolicyBridge::GetPoliciesCallback::Runnable {
+   public:
+    explicit PolicyStringRunnable(mojo::String expected)
+        : expected_(expected) {}
+    void Run(const mojo::String& policies) const override {
+      EXPECT_EQ(expected_, policies);
+    }
+
+   private:
+    mojo::String expected_;
+  };
+
+  class PolicyStringCallback : public ArcPolicyBridge::GetPoliciesCallback {
+   public:
+    explicit PolicyStringCallback(mojo::String expected)
+        : ArcPolicyBridge::GetPoliciesCallback(
+              new PolicyStringRunnable(expected)) {}
+  };
+
+  ArcPolicyBridge* policy_bridge() { return policy_bridge_.get(); }
+  policy::PolicyMap& policy_map() { return policy_map_; }
+
+ private:
+  std::unique_ptr<arc::FakeArcBridgeService> bridge_service_;
+  std::unique_ptr<arc::ArcPolicyBridge> policy_bridge_;
+  policy::PolicyMap policy_map_;
+  policy::MockPolicyService policy_service_;
+
+  DISALLOW_COPY_AND_ASSIGN(ArcPolicyBridgeTest);
+};
+
+TEST_F(ArcPolicyBridgeTest, GetPoliciesTest) {
+  PolicyStringCallback empty_callback("{}");
+  policy_bridge()->GetPolicies(empty_callback);
+  policy_map().Set("HomepageLocation", policy::POLICY_LEVEL_MANDATORY,
+                   policy::POLICY_SCOPE_USER, policy::POLICY_SOURCE_CLOUD,
+                   new base::StringValue("http://chromium.org"), nullptr);
+  policy_bridge()->GetPolicies(empty_callback);
+  policy_map().Set(
+      "ArcApplicationPolicy", policy::POLICY_LEVEL_MANDATORY,
+      policy::POLICY_SCOPE_USER, policy::POLICY_SOURCE_CLOUD,
+      new base::StringValue("{\"application\": \"com.android.chrome\"}"),
+      nullptr);
+  PolicyStringCallback chrome_callback(
+      "{\"ArcApplicationPolicy\":"
+      "\"{\\\"application\\\": \\\"com.android.chrome\\\"}\"}");
+  policy_bridge()->GetPolicies(chrome_callback);
+}
+
+}  // namespace arc
diff --git a/chrome/browser/extensions/api/messaging/arc_support_host.cc b/chrome/browser/chromeos/arc/arc_support_host.cc
similarity index 84%
rename from chrome/browser/extensions/api/messaging/arc_support_host.cc
rename to chrome/browser/chromeos/arc/arc_support_host.cc
index e78cede..44563ad 100644
--- a/chrome/browser/extensions/api/messaging/arc_support_host.cc
+++ b/chrome/browser/chromeos/arc/arc_support_host.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/extensions/api/messaging/arc_support_host.h"
+#include "chrome/browser/chromeos/arc/arc_support_host.h"
 
 #include "ash/system/chromeos/devicetype_utils.h"
 #include "base/json/json_reader.h"
@@ -16,12 +16,14 @@
 
 namespace {
 const char kAction[] = "action";
+const char kCode[] = "code";
 const char kStatus[] = "status";
 const char kData[] = "data";
 const char kPage[] = "page";
 const char kActionSetLocalization[] = "setLocalization";
-const char kActionCheckAuthCode[] = "checkAuthCode";
+const char kActionStartLso[] = "startLso";
 const char kActionCancelAuthCode[] = "cancelAuthCode";
+const char kActionSetAuthCode[] = "setAuthCode";
 const char kActionCloseUI[] = "closeUI";
 const char kActionShowPage[] = "showPage";
 }  // namespace
@@ -31,8 +33,7 @@
 
 // static
 const char* const ArcSupportHost::kHostOrigin[] = {
-    "chrome-extension://cnbgggchhmkkdmeppjobngjoejnihlei/"
-};
+    "chrome-extension://cnbgggchhmkkdmeppjobngjoejnihlei/"};
 
 // static
 scoped_ptr<extensions::NativeMessageHost> ArcSupportHost::Create() {
@@ -80,11 +81,14 @@
       "buttonRetry",
       l10n_util::GetStringUTF16(IDS_ARC_OPT_IN_DIALOG_BUTTON_RETRY));
   localized_strings->SetString(
-      "progressLSOLoading",
+      "progressLsoLoading",
       l10n_util::GetStringUTF16(IDS_ARC_OPT_IN_DIALOG_PROGRESS_LSO));
   localized_strings->SetString(
       "progressAndroidLoading",
       l10n_util::GetStringUTF16(IDS_ARC_OPT_IN_DIALOG_PROGRESS_ANDROID));
+  localized_strings->SetString(
+      "authorizationFailed",
+      l10n_util::GetStringUTF16(IDS_ARC_OPT_IN_DIALOG_AUTHORIZATION_FAILED));
 
   const std::string& app_locale = g_browser_process->GetApplicationLocale();
   webui::SetLoadTimeDataDefaults(app_locale, localized_strings.get());
@@ -125,9 +129,8 @@
 void ArcSupportHost::OnMessage(const std::string& request_string) {
   scoped_ptr<base::Value> request_value =
       base::JSONReader::Read(request_string);
-  scoped_ptr<base::DictionaryValue> request(
-      static_cast<base::DictionaryValue*>(request_value.release()));
-  if (!request.get()) {
+  base::DictionaryValue* request;
+  if (!request_value || !request_value->GetAsDictionary(&request)) {
     NOTREACHED();
     return;
   }
@@ -138,8 +141,15 @@
     return;
   }
 
-  if (action == kActionCheckAuthCode) {
-    arc::ArcAuthService::Get()->CheckAuthCode();
+  if (action == kActionStartLso) {
+    arc::ArcAuthService::Get()->StartLso();
+  } else if (action == kActionSetAuthCode) {
+    std::string code;
+    if (!request->GetString(kCode, &code)) {
+      NOTREACHED();
+      return;
+    }
+    arc::ArcAuthService::Get()->SetAuthCodeAndStartArc(code);
   } else if (action == kActionCancelAuthCode) {
     arc::ArcAuthService::Get()->CancelAuthCode();
   } else {
diff --git a/chrome/browser/extensions/api/messaging/arc_support_host.h b/chrome/browser/chromeos/arc/arc_support_host.h
similarity index 85%
rename from chrome/browser/extensions/api/messaging/arc_support_host.h
rename to chrome/browser/chromeos/arc/arc_support_host.h
index efb69e4..1e1417a 100644
--- a/chrome/browser/extensions/api/messaging/arc_support_host.h
+++ b/chrome/browser/chromeos/arc/arc_support_host.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 CHROME_BROWSER_EXTENSIONS_API_MESSAGING_ARC_SUPPORT_HOST_H_
-#define CHROME_BROWSER_EXTENSIONS_API_MESSAGING_ARC_SUPPORT_HOST_H_
+#ifndef CHROME_BROWSER_CHROMEOS_ARC_ARC_SUPPORT_HOST_H_
+#define CHROME_BROWSER_CHROMEOS_ARC_ARC_SUPPORT_HOST_H_
 
 #include "base/macros.h"
 #include "chrome/browser/chromeos/arc/arc_auth_service.h"
@@ -41,4 +41,4 @@
   DISALLOW_COPY_AND_ASSIGN(ArcSupportHost);
 };
 
-#endif  // CHROME_BROWSER_EXTENSIONS_API_MESSAGING_ARC_SUPPORT_HOST_H_
+#endif  // CHROME_BROWSER_CHROMEOS_ARC_ARC_SUPPORT_HOST_H_
diff --git a/chrome/browser/chromeos/display/quirks_browsertest.cc b/chrome/browser/chromeos/display/quirks_browsertest.cc
index 93f86b8..60ea7af 100644
--- a/chrome/browser/chromeos/display/quirks_browsertest.cc
+++ b/chrome/browser/chromeos/display/quirks_browsertest.cc
@@ -56,21 +56,6 @@
  protected:
   ~QuirksBrowserTest() override = default;
 
-  void Initialize() {
-    // NOTE: QuirksManager::Initialize() isn't necessary here, since it'll be
-    // called in ChromeBrowserMainPartsChromeos::PreMainMessageLoopRun().
-
-    // Create display_profiles subdirectory under temp profile directory.
-    const base::FilePath path =
-        QuirksManager::Get()->delegate()->GetDownloadDisplayProfileDirectory();
-    base::File::Error error = base::File::FILE_OK;
-    bool created = base::CreateDirectoryAndGetError(path, &error);
-    ASSERT_TRUE(created);
-
-    // Quirks clients can't run until after login.
-    quirks::QuirksManager::Get()->OnLoginCompleted();
-  }
-
   // Query QuirksManager for icc file, then run msg loop to wait for callback.
   // |find_fake_file| indicates that URLFetcher should respond with success.
   void TestQuirksClient(int64_t product_id, bool find_fake_file) {
@@ -102,7 +87,20 @@
     command_line->AppendSwitch(switches::kEnableQuirksClient);
   }
 
-  void SetUpOnMainThread() override { Initialize(); }
+  void SetUpOnMainThread() override {
+    // NOTE: QuirksManager::Initialize() isn't necessary here, since it'll be
+    // called in ChromeBrowserMainPartsChromeos::PreMainMessageLoopRun().
+
+    // Create display_profiles subdirectory under temp profile directory.
+    const base::FilePath path =
+        QuirksManager::Get()->delegate()->GetDownloadDisplayProfileDirectory();
+    base::File::Error error = base::File::FILE_OK;
+    bool created = base::CreateDirectoryAndGetError(path, &error);
+    ASSERT_TRUE(created);
+
+    // Quirks clients can't run until after login.
+    quirks::QuirksManager::Get()->OnLoginCompleted();
+  }
 
   base::Closure end_message_loop_;  // Callback to terminate message loop.
   base::FilePath icc_path_;         // Path to icc file if found or downloaded.
diff --git a/chrome/browser/chromeos/display/quirks_manager_delegate_impl.cc b/chrome/browser/chromeos/display/quirks_manager_delegate_impl.cc
index f4d51e4..a755ceb 100644
--- a/chrome/browser/chromeos/display/quirks_manager_delegate_impl.cc
+++ b/chrome/browser/chromeos/display/quirks_manager_delegate_impl.cc
@@ -9,6 +9,7 @@
 #include "base/task_runner_util.h"
 #include "base/threading/thread_restrictions.h"
 #include "chrome/browser/chromeos/login/startup_utils.h"
+#include "chrome/browser/chromeos/settings/cros_settings.h"
 #include "chrome/common/chrome_paths.h"
 #include "chromeos/chromeos_paths.h"
 #include "content/public/browser/browser_thread.h"
@@ -52,6 +53,13 @@
   return directory;
 }
 
+bool QuirksManagerDelegateImpl::DevicePolicyEnabled() const {
+  bool quirks_enabled = true;
+  chromeos::CrosSettings::Get()->GetBoolean(
+      chromeos::kDeviceQuirksDownloadEnabled, &quirks_enabled);
+  return quirks_enabled;
+}
+
 void QuirksManagerDelegateImpl::GetDaysSinceOobe(
     QuirksManager::DaysSinceOobeCallback callback) const {
   base::PostTaskAndReplyWithResult(
diff --git a/chrome/browser/chromeos/display/quirks_manager_delegate_impl.h b/chrome/browser/chromeos/display/quirks_manager_delegate_impl.h
index a6b1394a..8f89b1d 100644
--- a/chrome/browser/chromeos/display/quirks_manager_delegate_impl.h
+++ b/chrome/browser/chromeos/display/quirks_manager_delegate_impl.h
@@ -20,6 +20,7 @@
   std::string GetApiKey() const override;
   base::FilePath GetBuiltInDisplayProfileDirectory() const override;
   base::FilePath GetDownloadDisplayProfileDirectory() const override;
+  bool DevicePolicyEnabled() const override;
   void GetDaysSinceOobe(
       QuirksManager::DaysSinceOobeCallback callback) const override;
 
diff --git a/chrome/browser/chromeos/policy/device_policy_decoder_chromeos.cc b/chrome/browser/chromeos/policy/device_policy_decoder_chromeos.cc
index 3bc77ada..62d8f6a 100644
--- a/chrome/browser/chromeos/policy/device_policy_decoder_chromeos.cc
+++ b/chrome/browser/chromeos/policy/device_policy_decoder_chromeos.cc
@@ -833,8 +833,10 @@
     const em::ExtensionCacheSizeProto& container(policy.extension_cache_size());
     if (container.has_extension_cache_size()) {
       policies->Set(
-          key::kExtensionCacheSize, POLICY_LEVEL_MANDATORY,
-          POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD,
+          key::kExtensionCacheSize,
+          POLICY_LEVEL_MANDATORY,
+          POLICY_SCOPE_MACHINE,
+          POLICY_SOURCE_CLOUD,
           DecodeIntegerValue(container.extension_cache_size()).release(),
           nullptr);
     }
@@ -844,8 +846,10 @@
     const em::LoginScreenDomainAutoCompleteProto& container(
         policy.login_screen_domain_auto_complete());
     policies->Set(
-        key::kDeviceLoginScreenDomainAutoComplete, POLICY_LEVEL_MANDATORY,
-        POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD,
+        key::kDeviceLoginScreenDomainAutoComplete,
+        POLICY_LEVEL_MANDATORY,
+        POLICY_SCOPE_MACHINE,
+        POLICY_SOURCE_CLOUD,
         new base::StringValue(container.login_screen_domain_auto_complete()),
         nullptr);
   }
@@ -882,6 +886,20 @@
                   POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, whitelist,
                   nullptr);
   }
+
+  if (policy.has_quirks_download_enabled()) {
+    const em::DeviceQuirksDownloadEnabledProto& container(
+        policy.quirks_download_enabled());
+    if (container.has_quirks_download_enabled()) {
+      policies->Set(
+          key::kDeviceQuirksDownloadEnabled,
+          POLICY_LEVEL_MANDATORY,
+          POLICY_SCOPE_MACHINE,
+          POLICY_SOURCE_CLOUD,
+          new base::FundamentalValue(container.quirks_download_enabled()),
+          nullptr);
+    }
+  }
 }
 
 }  // namespace
diff --git a/chrome/browser/chromeos/policy/device_quirks_policy_browsertest.cc b/chrome/browser/chromeos/policy/device_quirks_policy_browsertest.cc
new file mode 100644
index 0000000..ea364f2
--- /dev/null
+++ b/chrome/browser/chromeos/policy/device_quirks_policy_browsertest.cc
@@ -0,0 +1,147 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/command_line.h"
+#include "base/files/file_util.h"
+#include "base/macros.h"
+#include "base/message_loop/message_loop.h"
+#include "chrome/browser/chromeos/policy/device_policy_cros_browser_test.h"
+#include "chrome/browser/chromeos/policy/proto/chrome_device_policy.pb.h"
+#include "chrome/browser/chromeos/settings/cros_settings.h"
+#include "components/quirks/quirks_manager.h"
+#include "components/quirks/switches.h"
+#include "content/public/test/test_utils.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace chromeos {
+
+const int64_t kProductId = 0x0000aaaa;
+const char kFakeIccData[] = {0x00, 0x00, 0x08, 0x90, 0x20, 0x20,
+                             0x20, 0x20, 0x02, 0x10, 0x00, 0x00};
+
+class DeviceQuirksPolicyTest : public policy::DevicePolicyCrosBrowserTest {
+ public:
+  DeviceQuirksPolicyTest() {}
+
+  void SetUpCommandLine(base::CommandLine* command_line) override {
+    command_line->AppendSwitch(quirks::switches::kEnableQuirksClient);
+  }
+
+  void SetUpInProcessBrowserTestFixture() override {
+    InstallOwnerKey();
+    DevicePolicyCrosBrowserTest::SetUpInProcessBrowserTestFixture();
+  }
+
+  void SetUpOnMainThread() override {
+    // NOTE: QuirksManager::Initialize() isn't necessary here, since it'll be
+    // called in ChromeBrowserMainPartsChromeos::PreMainMessageLoopRun().
+
+    // Create display_profiles subdirectory under temp profile directory.
+    base::FilePath path = quirks::QuirksManager::Get()
+                              ->delegate()
+                              ->GetDownloadDisplayProfileDirectory();
+    base::File::Error error = base::File::FILE_OK;
+    bool created = base::CreateDirectoryAndGetError(path, &error);
+    ASSERT_TRUE(created) << error;
+
+    // Create fake icc file.
+    path = path.Append(quirks::IdToFileName(kProductId));
+    int bytes_written =
+        base::WriteFile(path, kFakeIccData, sizeof(kFakeIccData));
+    ASSERT_EQ(sizeof(kFakeIccData), static_cast<size_t>(bytes_written));
+  }
+
+ protected:
+  void RefreshPolicyAndWaitDeviceSettingsUpdated() {
+    scoped_ptr<CrosSettings::ObserverSubscription> observer =
+        CrosSettings::Get()->AddSettingsObserver(
+            kDeviceQuirksDownloadEnabled,
+            base::MessageLoop::current()->QuitWhenIdleClosure());
+
+    RefreshDevicePolicy();
+    base::MessageLoop::current()->Run();
+  }
+
+  // Query QuirksManager for icc file, then run msg loop to wait for callback.
+  // This won't actually run a Quirks client: if Quirks is enabled, it will
+  // return the icc file in our fake downloads directory; if disabled, it will
+  // return before looking there.
+  bool TestQuirksEnabled() {
+    base::RunLoop run_loop;
+    end_message_loop_ = run_loop.QuitClosure();
+    icc_path_.clear();
+
+    quirks::QuirksManager::Get()->RequestIccProfilePath(
+        kProductId, base::Bind(&DeviceQuirksPolicyTest::OnQuirksClientFinished,
+                               base::Unretained(this)));
+
+    run_loop.Run();
+
+    // Quirks only returns our fake file if it's enabled.
+    return !icc_path_.empty();
+  }
+
+  // Callback from RequestIccProfilePath().
+  void OnQuirksClientFinished(const base::FilePath& path, bool downloaded) {
+    ASSERT_FALSE(downloaded);
+    icc_path_ = path;
+    ASSERT_TRUE(!end_message_loop_.is_null());
+    end_message_loop_.Run();
+  }
+
+  base::Closure end_message_loop_;  // Callback to terminate message loop.
+  base::FilePath icc_path_;         // Path to icc file if found or downloaded.
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(DeviceQuirksPolicyTest);
+};
+
+IN_PROC_BROWSER_TEST_F(DeviceQuirksPolicyTest, CheckUnset) {
+  bool quirks_download_enabled;
+  EXPECT_FALSE(CrosSettings::Get()->GetBoolean(kDeviceQuirksDownloadEnabled,
+                                               &quirks_download_enabled));
+
+  // No policy set, default is enabled, so Quirks should find the fake icc file.
+  EXPECT_TRUE(TestQuirksEnabled());
+}
+
+IN_PROC_BROWSER_TEST_F(DeviceQuirksPolicyTest, CheckTrue) {
+  bool quirks_download_enabled;
+  EXPECT_FALSE(CrosSettings::Get()->GetBoolean(kDeviceQuirksDownloadEnabled,
+                                               &quirks_download_enabled));
+
+  enterprise_management::ChromeDeviceSettingsProto& proto(
+      device_policy()->payload());
+  proto.mutable_quirks_download_enabled()->set_quirks_download_enabled(true);
+  RefreshPolicyAndWaitDeviceSettingsUpdated();
+
+  quirks_download_enabled = false;
+  EXPECT_TRUE(CrosSettings::Get()->GetBoolean(kDeviceQuirksDownloadEnabled,
+                                              &quirks_download_enabled));
+  EXPECT_TRUE(quirks_download_enabled);
+
+  // With policy enabled, Quirks should find the fake icc file.
+  EXPECT_TRUE(TestQuirksEnabled());
+}
+
+IN_PROC_BROWSER_TEST_F(DeviceQuirksPolicyTest, CheckFalse) {
+  bool quirks_download_enabled;
+  EXPECT_FALSE(CrosSettings::Get()->GetBoolean(kDeviceQuirksDownloadEnabled,
+                                               &quirks_download_enabled));
+
+  enterprise_management::ChromeDeviceSettingsProto& proto(
+      device_policy()->payload());
+  proto.mutable_quirks_download_enabled()->set_quirks_download_enabled(false);
+  RefreshPolicyAndWaitDeviceSettingsUpdated();
+
+  quirks_download_enabled = true;
+  EXPECT_TRUE(CrosSettings::Get()->GetBoolean(kDeviceQuirksDownloadEnabled,
+                                              &quirks_download_enabled));
+  EXPECT_FALSE(quirks_download_enabled);
+
+  // With policy disabled, Quirks should abort and not find the fake icc file.
+  EXPECT_FALSE(TestQuirksEnabled());
+}
+
+}  // namespace chromeos
diff --git a/chrome/browser/chromeos/policy/proto/chrome_device_policy.proto b/chrome/browser/chromeos/policy/proto/chrome_device_policy.proto
index 9de8517..af6604ce 100644
--- a/chrome/browser/chromeos/policy/proto/chrome_device_policy.proto
+++ b/chrome/browser/chromeos/policy/proto/chrome_device_policy.proto
@@ -687,6 +687,12 @@
   optional bool allow_bluetooth = 1 [default = true];
 }
 
+// Settings that control whether a device can download hardware configuration
+// files from the Quirks Server.
+message DeviceQuirksDownloadEnabledProto {
+  optional bool quirks_download_enabled = 1;
+}
+
 message ChromeDeviceSettingsProto {
   optional DevicePolicyRefreshRateProto device_policy_refresh_rate = 1;
   optional UserWhitelistProto user_whitelist = 2;
@@ -736,4 +742,5 @@
   optional LoginAuthenticationBehaviorProto login_authentication_behavior = 41;
   optional UsbDetachableWhitelistProto usb_detachable_whitelist = 42;
   optional AllowBluetoothProto allow_bluetooth = 43;
+  optional DeviceQuirksDownloadEnabledProto quirks_download_enabled = 44;
 }
diff --git a/chrome/browser/chromeos/settings/device_settings_provider.cc b/chrome/browser/chromeos/settings/device_settings_provider.cc
index 5da7a8b..5c97df74 100644
--- a/chrome/browser/chromeos/settings/device_settings_provider.cc
+++ b/chrome/browser/chromeos/settings/device_settings_provider.cc
@@ -56,6 +56,7 @@
     kAccountsPrefTransferSAMLCookies,
     kAccountsPrefUsers,
     kAccountsPrefLoginScreenDomainAutoComplete,
+    kAllowBluetooth,
     kAllowRedeemChromeOsRegistrationOffers,
     kAllowedConnectionTypesForUpdate,
     kAttestationForContentProtectionEnabled,
@@ -63,7 +64,7 @@
     kDeviceDisabled,
     kDeviceDisabledMessage,
     kDeviceOwner,
-    kAllowBluetooth,
+    kDeviceQuirksDownloadEnabled,
     kDisplayRotationDefault,
     kExtensionCacheSize,
     kHeartbeatEnabled,
@@ -459,6 +460,13 @@
       kAllowBluetooth, policy.has_allow_bluetooth() &&
                            policy.allow_bluetooth().has_allow_bluetooth() &&
                            policy.allow_bluetooth().allow_bluetooth());
+
+  if (policy.has_quirks_download_enabled() &&
+      policy.quirks_download_enabled().has_quirks_download_enabled()) {
+    new_values_cache->SetBoolean(
+        kDeviceQuirksDownloadEnabled,
+        policy.quirks_download_enabled().quirks_download_enabled());
+  }
 }
 
 void DecodeLogUploadPolicies(const em::ChromeDeviceSettingsProto& policy,
diff --git a/chrome/browser/extensions/api/activity_log_private/activity_log_private_apitest.cc b/chrome/browser/extensions/api/activity_log_private/activity_log_private_apitest.cc
index 6527ac5..6dafee1 100644
--- a/chrome/browser/extensions/api/activity_log_private/activity_log_private_apitest.cc
+++ b/chrome/browser/extensions/api/activity_log_private/activity_log_private_apitest.cc
@@ -62,12 +62,6 @@
 // The test extension sends a message to its 'friend'. The test completes
 // if it successfully sees the 'friend' receive the message.
 IN_PROC_BROWSER_TEST_F(ActivityLogApiTest, MAYBE_TriggerEvent) {
-#if defined(OS_MACOSX)
-  if (base::mac::IsOSSnowLeopard()) {
-    // This test flakes on 10.6 only. http://crbug.com/499176
-    return;
-  }
-#endif
   ActivityLog::GetInstance(profile())->SetWatchdogAppActiveForTesting(true);
 
   host_resolver()->AddRule("*", "127.0.0.1");
diff --git a/chrome/browser/extensions/api/messaging/native_message_host_chromeos.cc b/chrome/browser/extensions/api/messaging/native_message_host_chromeos.cc
index ddaa733..3164c8e 100644
--- a/chrome/browser/extensions/api/messaging/native_message_host_chromeos.cc
+++ b/chrome/browser/extensions/api/messaging/native_message_host_chromeos.cc
@@ -18,7 +18,7 @@
 #include "base/thread_task_runner_handle.h"
 #include "base/values.h"
 #include "chrome/browser/browser_process.h"
-#include "chrome/browser/extensions/api/messaging/arc_support_host.h"
+#include "chrome/browser/chromeos/arc/arc_support_host.h"
 #include "chrome/browser/extensions/api/messaging/native_messaging_test_util.h"
 #include "components/policy/core/common/policy_service.h"
 #include "content/public/browser/browser_thread.h"
diff --git a/chrome/browser/extensions/api/tabs/tabs_test.cc b/chrome/browser/extensions/api/tabs/tabs_test.cc
index f75baee9..c4a717bd 100644
--- a/chrome/browser/extensions/api/tabs/tabs_test.cc
+++ b/chrome/browser/extensions/api/tabs/tabs_test.cc
@@ -1059,10 +1059,6 @@
 
 IN_PROC_BROWSER_TEST_F(ExtensionWindowCreateTest, AcceptState) {
 #if defined(OS_MACOSX)
-  // ScopedFakeNSWindowFullscreen works on MacOS 10.7+.
-  if (base::mac::IsOSSnowLeopard())
-    return;
-
   ui::test::ScopedFakeNSWindowFullscreen fake_fullscreen;
 #endif
 
diff --git a/chrome/browser/mac/bluetooth_utility.mm b/chrome/browser/mac/bluetooth_utility.mm
index 26824d9e..f4d9989 100644
--- a/chrome/browser/mac/bluetooth_utility.mm
+++ b/chrome/browser/mac/bluetooth_utility.mm
@@ -50,12 +50,6 @@
     if ([lmp_version intValue] < 6)
       continue;
 
-    // Check the supported features registry entry for Bluetooth LE
-    // availability. The relevant bit has a different meaning on OSX 10.6, and
-    // could change again in the future.
-    if (base::mac::IsOSSnowLeopard())
-      return BLUETOOTH_AVAILABLE_LE_UNKNOWN;
-
     NSData* data = base::mac::ObjCCast<NSData>(
         [objc_dict objectForKey:@"HCISupportedFeatures"]);
 
diff --git a/chrome/browser/password_manager/auto_signin_first_run_dialog_android_unittest.cc b/chrome/browser/password_manager/auto_signin_first_run_dialog_android_unittest.cc
index 28e79723..6c42f10 100644
--- a/chrome/browser/password_manager/auto_signin_first_run_dialog_android_unittest.cc
+++ b/chrome/browser/password_manager/auto_signin_first_run_dialog_android_unittest.cc
@@ -21,15 +21,15 @@
   PrefService* prefs();
 
  protected:
-  scoped_ptr<AutoSigninFirstRunDialogAndroid> CreateDialog();
+  std::unique_ptr<AutoSigninFirstRunDialogAndroid> CreateDialog();
 
  private:
   DISALLOW_COPY_AND_ASSIGN(AutoSigninFirstRunDialogAndroidTest);
 };
 
-scoped_ptr<AutoSigninFirstRunDialogAndroid>
+std::unique_ptr<AutoSigninFirstRunDialogAndroid>
 AutoSigninFirstRunDialogAndroidTest::CreateDialog() {
-  scoped_ptr<AutoSigninFirstRunDialogAndroid> dialog(
+  std::unique_ptr<AutoSigninFirstRunDialogAndroid> dialog(
       new AutoSigninFirstRunDialogAndroid(web_contents()));
   return dialog;
 }
@@ -44,7 +44,7 @@
        CheckResetOfPrefAfterFirstRunMessageWasShown) {
   prefs()->SetBoolean(
       password_manager::prefs::kWasAutoSignInFirstRunExperienceShown, false);
-  scoped_ptr<AutoSigninFirstRunDialogAndroid> dialog(CreateDialog());
+  std::unique_ptr<AutoSigninFirstRunDialogAndroid> dialog(CreateDialog());
   dialog.reset();
   EXPECT_TRUE(prefs()->GetBoolean(
       password_manager::prefs::kWasAutoSignInFirstRunExperienceShown));
diff --git a/chrome/browser/password_manager/chrome_password_manager_client.cc b/chrome/browser/password_manager/chrome_password_manager_client.cc
index 0579c32..719c1f5 100644
--- a/chrome/browser/password_manager/chrome_password_manager_client.cc
+++ b/chrome/browser/password_manager/chrome_password_manager_client.cc
@@ -213,7 +213,7 @@
 }
 
 bool ChromePasswordManagerClient::PromptUserToSaveOrUpdatePassword(
-    scoped_ptr<password_manager::PasswordFormManager> form_to_save,
+    std::unique_ptr<password_manager::PasswordFormManager> form_to_save,
     password_manager::CredentialSourceType type,
     bool update_password) {
   // Save password infobar and the password bubble prompts in case of
@@ -316,7 +316,7 @@
 }
 
 void ChromePasswordManagerClient::NotifyUserCouldBeAutoSignedIn(
-    scoped_ptr<autofill::PasswordForm> form) {
+    std::unique_ptr<autofill::PasswordForm> form) {
   possible_auto_sign_in_ = std::move(form);
 }
 
@@ -341,7 +341,7 @@
 }
 
 void ChromePasswordManagerClient::AutomaticPasswordSave(
-    scoped_ptr<password_manager::PasswordFormManager> saved_form) {
+    std::unique_ptr<password_manager::PasswordFormManager> saved_form) {
 #if BUILDFLAG(ANDROID_JAVA_UI)
   GeneratedPasswordSavedInfoBarDelegateAndroid::Create(web_contents());
 #else
@@ -357,8 +357,8 @@
 void ChromePasswordManagerClient::PasswordWasAutofilled(
     const autofill::PasswordFormMap& best_matches,
     const GURL& origin,
-    const std::vector<scoped_ptr<autofill::PasswordForm>>* federated_matches)
-    const {
+    const std::vector<std::unique_ptr<autofill::PasswordForm>>*
+        federated_matches) const {
 #if !BUILDFLAG(ANDROID_JAVA_UI)
   PasswordsClientUIDelegate* manage_passwords_ui_controller =
       PasswordsClientUIDelegateFromWebContents(web_contents());
@@ -397,7 +397,7 @@
 bool ChromePasswordManagerClient::WasLastNavigationHTTPError() const {
   DCHECK(web_contents());
 
-  scoped_ptr<password_manager::BrowserSavePasswordProgressLogger> logger;
+  std::unique_ptr<password_manager::BrowserSavePasswordProgressLogger> logger;
   if (log_manager_->IsLoggingActive()) {
     logger.reset(new password_manager::BrowserSavePasswordProgressLogger(
         log_manager_.get()));
diff --git a/chrome/browser/password_manager/chrome_password_manager_client.h b/chrome/browser/password_manager/chrome_password_manager_client.h
index ffe628ad..bc8c97327 100644
--- a/chrome/browser/password_manager/chrome_password_manager_client.h
+++ b/chrome/browser/password_manager/chrome_password_manager_client.h
@@ -5,11 +5,11 @@
 #ifndef CHROME_BROWSER_PASSWORD_MANAGER_CHROME_PASSWORD_MANAGER_CLIENT_H_
 #define CHROME_BROWSER_PASSWORD_MANAGER_CHROME_PASSWORD_MANAGER_CLIENT_H_
 
+#include <memory>
 #include <vector>
 
 #include "base/compiler_specific.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/scoped_vector.h"
 #include "components/password_manager/content/browser/content_password_manager_driver_factory.h"
 #include "components/password_manager/content/browser/credential_manager_dispatcher.h"
@@ -51,7 +51,7 @@
   bool IsSavingAndFillingEnabledForCurrentPage() const override;
   bool IsFillingEnabledForCurrentPage() const override;
   bool PromptUserToSaveOrUpdatePassword(
-      scoped_ptr<password_manager::PasswordFormManager> form_to_save,
+      std::unique_ptr<password_manager::PasswordFormManager> form_to_save,
       password_manager::CredentialSourceType type,
       bool update_password) override;
   bool PromptUserToChooseCredentials(
@@ -65,16 +65,17 @@
       ScopedVector<autofill::PasswordForm> local_forms,
       const GURL& origin) override;
   void NotifyUserCouldBeAutoSignedIn(
-      scoped_ptr<autofill::PasswordForm> form) override;
+      std::unique_ptr<autofill::PasswordForm> form) override;
   void NotifySuccessfulLoginWithExistingPassword(
       const autofill::PasswordForm& form) override;
-  void AutomaticPasswordSave(scoped_ptr<password_manager::PasswordFormManager>
-                                 saved_form_manager) override;
+  void AutomaticPasswordSave(
+      std::unique_ptr<password_manager::PasswordFormManager> saved_form_manager)
+      override;
   void PasswordWasAutofilled(
       const autofill::PasswordFormMap& best_matches,
       const GURL& origin,
-      const std::vector<scoped_ptr<autofill::PasswordForm>>* federated_matches)
-      const override;
+      const std::vector<std::unique_ptr<autofill::PasswordForm>>*
+          federated_matches) const override;
   PrefService* GetPrefs() override;
   password_manager::PasswordStore* GetPasswordStore() const override;
   password_manager::PasswordSyncState GetPasswordSyncState() const override;
@@ -181,11 +182,11 @@
 
   const password_manager::SyncCredentialsFilter credentials_filter_;
 
-  scoped_ptr<password_manager::LogManager> log_manager_;
+  std::unique_ptr<password_manager::LogManager> log_manager_;
 
   // Set during 'NotifyUserCouldBeAutoSignedIn' in order to store the
   // form for potential use during 'NotifySuccessfulLoginWithExistingPassword'.
-  scoped_ptr<autofill::PasswordForm> possible_auto_sign_in_;
+  std::unique_ptr<autofill::PasswordForm> possible_auto_sign_in_;
 
   DISALLOW_COPY_AND_ASSIGN(ChromePasswordManagerClient);
 };
diff --git a/chrome/browser/password_manager/chrome_password_manager_client_unittest.cc b/chrome/browser/password_manager/chrome_password_manager_client_unittest.cc
index d948385..056525ff 100644
--- a/chrome/browser/password_manager/chrome_password_manager_client_unittest.cc
+++ b/chrome/browser/password_manager/chrome_password_manager_client_unittest.cc
@@ -168,7 +168,7 @@
 TEST_F(ChromePasswordManagerClientTest,
        IsAutomaticPasswordSavingEnabledWhenFlagIsSetTest) {
   // Add the enable-automatic-password-saving feature.
-  scoped_ptr<base::FeatureList> feature_list(new base::FeatureList);
+  std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList);
   std::vector<const base::Feature*> enabled_features;
   std::vector<const base::Feature*> disabled_features;
   enabled_features.push_back(
@@ -284,7 +284,7 @@
 }
 
 TEST_F(ChromePasswordManagerClientTest, SavingAndFillingEnabledConditionsTest) {
-  scoped_ptr<MockChromePasswordManagerClient> client(
+  std::unique_ptr<MockChromePasswordManagerClient> client(
       new MockChromePasswordManagerClient(web_contents()));
   // Functionality disabled if there is SSL errors.
   EXPECT_CALL(*client, DidLastPageLoadEncounterSSLErrors())
diff --git a/chrome/browser/password_manager/native_backend_gnome_x.cc b/chrome/browser/password_manager/native_backend_gnome_x.cc
index a0d4f1f6..ded031e 100644
--- a/chrome/browser/password_manager/native_backend_gnome_x.cc
+++ b/chrome/browser/password_manager/native_backend_gnome_x.cc
@@ -8,13 +8,14 @@
 #include <gnome-keyring.h>
 #include <stddef.h>
 #include <stdint.h>
+
 #include <map>
+#include <memory>
 #include <string>
 #include <utility>
 #include <vector>
 
 #include "base/logging.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/metrics/histogram.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_piece.h"
@@ -109,7 +110,8 @@
 // Convert the attributes of a given keyring entry into a new PasswordForm.
 // Note: does *not* get the actual password, as that is not a key attribute!
 // Returns NULL if the attributes are for the wrong application.
-scoped_ptr<PasswordForm> FormFromAttributes(GnomeKeyringAttributeList* attrs) {
+std::unique_ptr<PasswordForm> FormFromAttributes(
+    GnomeKeyringAttributeList* attrs) {
   // Read the string and int attributes into the appropriate map.
   std::map<std::string, std::string> string_attr_map;
   std::map<std::string, uint32_t> uint_attr_map;
@@ -123,9 +125,9 @@
   // Check to make sure this is a password we care about.
   const std::string& app_value = string_attr_map["application"];
   if (!base::StringPiece(app_value).starts_with(kGnomeKeyringAppString))
-    return scoped_ptr<PasswordForm>();
+    return std::unique_ptr<PasswordForm>();
 
-  scoped_ptr<PasswordForm> form(new PasswordForm());
+  std::unique_ptr<PasswordForm> form(new PasswordForm());
   form->origin = GURL(string_attr_map["origin_url"]);
   form->action = GURL(string_attr_map["action_url"]);
   form->username_element = UTF8ToUTF16(string_attr_map["username_element"]);
@@ -194,7 +196,7 @@
     GnomeKeyringFound* data = static_cast<GnomeKeyringFound*>(element->data);
     GnomeKeyringAttributeList* attrs = data->attributes;
 
-    scoped_ptr<PasswordForm> form(FormFromAttributes(attrs));
+    std::unique_ptr<PasswordForm> form(FormFromAttributes(attrs));
     if (form) {
       if (lookup_form && form->signon_realm != lookup_form->signon_realm) {
         if (lookup_form->scheme != PasswordForm::SCHEME_HTML ||
@@ -305,8 +307,9 @@
     }
   };
 
-  typedef scoped_ptr<GnomeKeyringAttributeList,
-                     GnomeKeyringAttributeListFreeDeleter> ScopedAttributeList;
+  typedef std::unique_ptr<GnomeKeyringAttributeList,
+                          GnomeKeyringAttributeListFreeDeleter>
+      ScopedAttributeList;
 
   // Helper methods to abbreviate Gnome Keyring long API names.
   static void AppendString(ScopedAttributeList* list,
@@ -338,7 +341,7 @@
   // Additionally, |lookup_form_->signon_realm| is also used to narrow down the
   // found logins to those which indeed PSL-match the look-up. And finally,
   // |lookup_form_| set to NULL means that PSL matching is not required.
-  scoped_ptr<PasswordForm> lookup_form_;
+  std::unique_ptr<PasswordForm> lookup_form_;
 };
 
 void GKRMethod::AddLogin(const PasswordForm& form, const char* app_string) {
diff --git a/chrome/browser/password_manager/native_backend_kwallet_x.cc b/chrome/browser/password_manager/native_backend_kwallet_x.cc
index d696d53..0ec2611 100644
--- a/chrome/browser/password_manager/native_backend_kwallet_x.cc
+++ b/chrome/browser/password_manager/native_backend_kwallet_x.cc
@@ -168,7 +168,7 @@
   ScopedVector<autofill::PasswordForm> converted_forms;
   converted_forms.reserve(count);
   for (size_t i = 0; i < count; ++i) {
-    scoped_ptr<PasswordForm> form(new PasswordForm());
+    std::unique_ptr<PasswordForm> form(new PasswordForm());
     form->signon_realm.assign(signon_realm);
 
     int scheme = 0;
@@ -402,9 +402,8 @@
   builder.AppendArrayOfStrings(empty);   // envs
   builder.AppendString(std::string());   // startup_id
   builder.AppendBool(false);             // blind
-  scoped_ptr<dbus::Response> response(
-      klauncher->CallMethodAndBlock(
-          &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT));
+  std::unique_ptr<dbus::Response> response(klauncher->CallMethodAndBlock(
+      &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT));
   if (!response.get()) {
     LOG(ERROR) << "Error contacting klauncher to start " << kwalletd_name_;
     return false;
@@ -434,9 +433,8 @@
   {
     // Check that KWallet is enabled.
     dbus::MethodCall method_call(kKWalletInterface, "isEnabled");
-    scoped_ptr<dbus::Response> response(
-        kwallet_proxy_->CallMethodAndBlock(
-            &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT));
+    std::unique_ptr<dbus::Response> response(kwallet_proxy_->CallMethodAndBlock(
+        &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT));
     if (!response.get()) {
       LOG(ERROR) << "Error contacting " << kwalletd_name_ << " (isEnabled)";
       return TEMPORARY_FAIL;
@@ -458,9 +456,8 @@
   {
     // Get the wallet name.
     dbus::MethodCall method_call(kKWalletInterface, "networkWallet");
-    scoped_ptr<dbus::Response> response(
-        kwallet_proxy_->CallMethodAndBlock(
-            &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT));
+    std::unique_ptr<dbus::Response> response(kwallet_proxy_->CallMethodAndBlock(
+        &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT));
     if (!response.get()) {
       LOG(ERROR) << "Error contacting " << kwalletd_name_ << " (networkWallet)";
       return TEMPORARY_FAIL;
@@ -647,9 +644,8 @@
     builder.AppendString(folder_name_);  // folder
     builder.AppendString(signon_realm);  // key
     builder.AppendString(app_name_);     // appid
-    scoped_ptr<dbus::Response> response(
-        kwallet_proxy_->CallMethodAndBlock(
-            &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT));
+    std::unique_ptr<dbus::Response> response(kwallet_proxy_->CallMethodAndBlock(
+        &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT));
     if (!response.get()) {
       LOG(ERROR) << "Error contacting " << kwalletd_name_ << " (hasEntry)";
       return false;
@@ -674,9 +670,8 @@
     builder.AppendString(folder_name_);  // folder
     builder.AppendString(signon_realm);  // key
     builder.AppendString(app_name_);     // appid
-    scoped_ptr<dbus::Response> response(
-        kwallet_proxy_->CallMethodAndBlock(
-            &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT));
+    std::unique_ptr<dbus::Response> response(kwallet_proxy_->CallMethodAndBlock(
+        &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT));
     if (!response.get()) {
       LOG(ERROR) << "Error contacting " << kwalletd_name_ << " (readEntry)";
       return false;
@@ -764,9 +759,8 @@
     builder.AppendInt32(wallet_handle);  // handle
     builder.AppendString(folder_name_);  // folder
     builder.AppendString(app_name_);     // appid
-    scoped_ptr<dbus::Response> response(
-        kwallet_proxy_->CallMethodAndBlock(
-            &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT));
+    std::unique_ptr<dbus::Response> response(kwallet_proxy_->CallMethodAndBlock(
+        &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT));
     if (!response.get()) {
       LOG(ERROR) << "Error contacting " << kwalletd_name_ << " (entryList)";
       return false;
@@ -787,9 +781,8 @@
     builder.AppendString(folder_name_);  // folder
     builder.AppendString(signon_realm);  // key
     builder.AppendString(app_name_);     // appid
-    scoped_ptr<dbus::Response> response(
-        kwallet_proxy_->CallMethodAndBlock(
-            &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT));
+    std::unique_ptr<dbus::Response> response(kwallet_proxy_->CallMethodAndBlock(
+        &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT));
     if (!response.get()) {
       LOG(ERROR) << "Error contacting " << kwalletd_name_ << "(readEntry)";
       return false;
@@ -824,9 +817,8 @@
     builder.AppendString(folder_name_);  // folder
     builder.AppendString(signon_realm);  // key
     builder.AppendString(app_name_);     // appid
-    scoped_ptr<dbus::Response> response(
-        kwallet_proxy_->CallMethodAndBlock(
-            &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT));
+    std::unique_ptr<dbus::Response> response(kwallet_proxy_->CallMethodAndBlock(
+        &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT));
     if (!response.get()) {
       LOG(ERROR) << "Error contacting " << kwalletd_name_ << " (removeEntry)";
       return kInvalidKWalletHandle;
@@ -854,9 +846,8 @@
   builder.AppendArrayOfBytes(static_cast<const uint8_t*>(value.data()),
                              value.size());  // value
   builder.AppendString(app_name_);     // appid
-  scoped_ptr<dbus::Response> response(
-      kwallet_proxy_->CallMethodAndBlock(
-          &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT));
+  std::unique_ptr<dbus::Response> response(kwallet_proxy_->CallMethodAndBlock(
+      &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT));
   if (!response.get()) {
     LOG(ERROR) << "Error contacting " << kwalletd_name_ << " (writeEntry)";
     return kInvalidKWalletHandle;
@@ -892,7 +883,7 @@
     builder.AppendInt32(wallet_handle);  // handle
     builder.AppendString(folder_name_);  // folder
     builder.AppendString(app_name_);     // appid
-    scoped_ptr<dbus::Response> response(kwallet_proxy_->CallMethodAndBlock(
+    std::unique_ptr<dbus::Response> response(kwallet_proxy_->CallMethodAndBlock(
         &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT));
     if (!response.get()) {
       LOG(ERROR) << "Error contacting " << kwalletd_name_ << " (entryList)";
@@ -925,7 +916,7 @@
     builder.AppendString(folder_name_);  // folder
     builder.AppendString(signon_realm);  // key
     builder.AppendString(app_name_);     // appid
-    scoped_ptr<dbus::Response> response(kwallet_proxy_->CallMethodAndBlock(
+    std::unique_ptr<dbus::Response> response(kwallet_proxy_->CallMethodAndBlock(
         &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT));
     if (!response.get()) {
       LOG(ERROR) << "Error contacting " << kwalletd_name_ << " (readEntry)";
@@ -1022,9 +1013,8 @@
     builder.AppendString(wallet_name_);  // wallet
     builder.AppendInt64(0);              // wid
     builder.AppendString(app_name_);     // appid
-    scoped_ptr<dbus::Response> response(
-        kwallet_proxy_->CallMethodAndBlock(
-            &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT));
+    std::unique_ptr<dbus::Response> response(kwallet_proxy_->CallMethodAndBlock(
+        &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT));
     if (!response.get()) {
       LOG(ERROR) << "Error contacting " << kwalletd_name_ << " (open)";
       return kInvalidKWalletHandle;
@@ -1049,9 +1039,8 @@
     builder.AppendInt32(handle);         // handle
     builder.AppendString(folder_name_);  // folder
     builder.AppendString(app_name_);     // appid
-    scoped_ptr<dbus::Response> response(
-        kwallet_proxy_->CallMethodAndBlock(
-            &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT));
+    std::unique_ptr<dbus::Response> response(kwallet_proxy_->CallMethodAndBlock(
+        &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT));
     if (!response.get()) {
       LOG(ERROR) << "Error contacting " << kwalletd_name_ << " (hasFolder)";
       return kInvalidKWalletHandle;
@@ -1071,9 +1060,8 @@
     builder.AppendInt32(handle);         // handle
     builder.AppendString(folder_name_);  // folder
     builder.AppendString(app_name_);     // appid
-    scoped_ptr<dbus::Response> response(
-        kwallet_proxy_->CallMethodAndBlock(
-            &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT));
+    std::unique_ptr<dbus::Response> response(kwallet_proxy_->CallMethodAndBlock(
+        &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT));
     if (!response.get()) {
       LOG(ERROR) << "Error contacting << " << kwalletd_name_
                  << " (createFolder)";
diff --git a/chrome/browser/password_manager/native_backend_kwallet_x_unittest.cc b/chrome/browser/password_manager/native_backend_kwallet_x_unittest.cc
index af3bffa..df4cbb3a 100644
--- a/chrome/browser/password_manager/native_backend_kwallet_x_unittest.cc
+++ b/chrome/browser/password_manager/native_backend_kwallet_x_unittest.cc
@@ -503,7 +503,7 @@
   if (kwallet_runnable_)
     kwallet_running_ = true;
 
-  scoped_ptr<dbus::Response> response(dbus::Response::CreateEmpty());
+  std::unique_ptr<dbus::Response> response(dbus::Response::CreateEmpty());
   dbus::MessageWriter writer(response.get());
   writer.AppendInt32(klauncher_ret_);
   writer.AppendString(std::string());  // dbus_name
@@ -520,7 +520,7 @@
 
   if (ContainsKey(failing_methods_, method_call->GetMember()))
     return nullptr;
-  scoped_ptr<dbus::Response> response;
+  std::unique_ptr<dbus::Response> response;
   if (method_call->GetMember() == "isEnabled") {
     response = dbus::Response::CreateEmpty();
     dbus::MessageWriter writer(response.get());
diff --git a/chrome/browser/password_manager/native_backend_libsecret.cc b/chrome/browser/password_manager/native_backend_libsecret.cc
index 9887500..21581c0c 100644
--- a/chrome/browser/password_manager/native_backend_libsecret.cc
+++ b/chrome/browser/password_manager/native_backend_libsecret.cc
@@ -10,11 +10,11 @@
 
 #include <limits>
 #include <list>
+#include <memory>
 #include <utility>
 #include <vector>
 
 #include "base/logging.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/metrics/histogram.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
@@ -147,12 +147,12 @@
 // Convert the attributes into a new PasswordForm.
 // Note: does *not* get the actual password, as that is not a key attribute!
 // Returns nullptr if the attributes are for the wrong application.
-scoped_ptr<PasswordForm> FormOutOfAttributes(GHashTable* attrs) {
+std::unique_ptr<PasswordForm> FormOutOfAttributes(GHashTable* attrs) {
   base::StringPiece app_value = GetStringFromAttributes(attrs, "application");
   if (!app_value.starts_with(kLibsecretAppString))
-    return scoped_ptr<PasswordForm>();
+    return std::unique_ptr<PasswordForm>();
 
-  scoped_ptr<PasswordForm> form(new PasswordForm());
+  std::unique_ptr<PasswordForm> form(new PasswordForm());
   form->origin = GURL(GetStringFromAttributes(attrs, "origin_url"));
   form->action = GURL(GetStringFromAttributes(attrs, "action_url"));
   form->username_element =
@@ -647,7 +647,7 @@
       continue;
     }
     GHashTable* attrs = secret_item_get_attributes(secretItem);
-    scoped_ptr<PasswordForm> form(FormOutOfAttributes(attrs));
+    std::unique_ptr<PasswordForm> form(FormOutOfAttributes(attrs));
     g_hash_table_unref(attrs);
     if (form) {
       if (lookup_form && form->signon_realm != lookup_form->signon_realm) {
diff --git a/chrome/browser/password_manager/password_manager_browsertest.cc b/chrome/browser/password_manager/password_manager_browsertest.cc
index c39ac02..d282cf14 100644
--- a/chrome/browser/password_manager/password_manager_browsertest.cc
+++ b/chrome/browser/password_manager/password_manager_browsertest.cc
@@ -7,6 +7,7 @@
 
 #include "base/command_line.h"
 #include "base/macros.h"
+#include "base/memory/ptr_util.h"
 #include "base/metrics/histogram_samples.h"
 #include "base/metrics/statistics_recorder.h"
 #include "base/path_service.h"
@@ -87,20 +88,20 @@
 // Handles |request| to "/basic_auth". If "Authorization" header is present,
 // responds with a non-empty HTTP 200 page (regardless of its value). Otherwise
 // serves a Basic Auth challenge.
-scoped_ptr<net::test_server::HttpResponse> HandleTestAuthRequest(
+std::unique_ptr<net::test_server::HttpResponse> HandleTestAuthRequest(
     const net::test_server::HttpRequest& request) {
   if (!base::StartsWith(request.relative_url, "/basic_auth",
                         base::CompareCase::SENSITIVE))
-    return scoped_ptr<net::test_server::HttpResponse>();
+    return std::unique_ptr<net::test_server::HttpResponse>();
 
   if (ContainsKey(request.headers, "Authorization")) {
-    scoped_ptr<net::test_server::BasicHttpResponse> http_response(
+    std::unique_ptr<net::test_server::BasicHttpResponse> http_response(
         new net::test_server::BasicHttpResponse);
     http_response->set_code(net::HTTP_OK);
     http_response->set_content("Success!");
     return std::move(http_response);
   } else {
-    scoped_ptr<net::test_server::BasicHttpResponse> http_response(
+    std::unique_ptr<net::test_server::BasicHttpResponse> http_response(
         new net::test_server::BasicHttpResponse);
     http_response->set_code(net::HTTP_UNAUTHORIZED);
     http_response->AddCustomHeader("WWW-Authenticate",
@@ -151,7 +152,7 @@
   SCOPED_TRACE(testing::Message(failure_message));
 
   NavigationObserver observer(web_contents);
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(web_contents));
   std::string fill_and_submit =
       "document.getElementById('username_failed').value = 'temp';"
@@ -174,7 +175,7 @@
   // Fill a form and submit through a <input type="submit"> button. Nothing
   // special.
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "document.getElementById('username_field').value = 'temp';"
@@ -211,7 +212,7 @@
   // Fill a form and submit through a <input type="submit"> button. Nothing
   // special. The form does an in-page navigation before submitting.
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "document.getElementById('username_field').value = 'temp';"
@@ -230,7 +231,7 @@
   NavigateToFile("/password/password_form.html");
 
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "document.getElementById('username_unrelated').value = 'temp';"
@@ -248,7 +249,7 @@
   NavigateToFile("/password/password_form.html");
 
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "document.getElementById('username_failed').value = 'temp';"
@@ -265,7 +266,7 @@
   // Fill a form and submit through a <input type="submit"> button. The form
   // points to a redirection page.
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "document.getElementById('username_redirect').value = 'temp';"
@@ -291,7 +292,7 @@
   // This should work regardless of the type of element, as long as submit() is
   // called.
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "document.getElementById('username_field').value = 'temp';"
@@ -310,7 +311,7 @@
 
   // Fill the dynamic password form and submit.
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "document.getElementById('create_form_button').click();"
@@ -329,7 +330,7 @@
 
   // Don't fill the password form, just navigate away. Shouldn't prompt.
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   ASSERT_TRUE(content::ExecuteScript(RenderViewHost(),
                                      "window.location.href = 'done.html';"));
@@ -344,7 +345,7 @@
   // If you are filling out a password form in one frame and a different frame
   // navigates, this should not trigger the infobar.
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   observer.SetPathToWaitFor("/password/done.html");
   std::string fill =
@@ -369,7 +370,7 @@
   // Make sure that we prompt to save password even if a sub-frame navigation
   // happens first.
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   observer.SetPathToWaitFor("/password/done.html");
   std::string navigate_frame =
@@ -396,7 +397,7 @@
   // Make sure that we don't prompt to save the password for a failed login
   // from the main frame with multiple frames in the same page.
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "document.getElementById('username_failed').value = 'temp';"
@@ -416,7 +417,7 @@
   // Make sure that we don't prompt to save the password for a failed login
   // from a sub-frame with multiple frames in the same page.
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "var first_frame = document.getElementById('first_frame');"
@@ -445,7 +446,7 @@
   // Note that calling 'submit()' on a form with javascript doesn't call
   // the onsubmit handler, so we click the submit button instead.
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "document.getElementById('username_field').value = 'temp';"
@@ -463,7 +464,7 @@
   // Verify that if XHR navigation occurs and the form is properly filled out,
   // we try and save the password even though onsubmit hasn't been called.
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_navigate =
       "document.getElementById('username_field').value = 'temp';"
@@ -483,7 +484,7 @@
   // Specifically verify that the password form saving new passwords is treated
   // the same as a login form.
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_navigate =
       "document.getElementById('signup_username_field').value = 'temp';"
@@ -508,7 +509,7 @@
   // doesn't need to be via form.submit(), but for testing purposes it's
   // necessary since we otherwise ignore changes made to the value of these
   // fields by script.
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "navigate = false;"
@@ -538,7 +539,7 @@
   // doesn't need to be via form.submit(), but for testing purposes it's
   // necessary since we otherwise ignore changes made to the value of these
   // fields by script.
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "navigate = false;"
@@ -566,7 +567,7 @@
 
   // Verify that if XHR without navigation occurs and the form has NOT been
   // filled out we don't prompt.
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "navigate = false;"
@@ -593,7 +594,7 @@
 
   // Verify that if XHR without navigation occurs and the form has NOT been
   // filled out we don't prompt.
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "navigate = false;"
@@ -623,7 +624,7 @@
   // Note that calling 'submit()' on a form with javascript doesn't call
   // the onsubmit handler, so we click the submit button instead.
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "document.getElementById('username_field').value = 'temp';"
@@ -641,7 +642,7 @@
   // Verify that if Fetch navigation occurs and the form is properly filled out,
   // we try and save the password even though onsubmit hasn't been called.
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_navigate =
       "document.getElementById('username_field').value = 'temp';"
@@ -661,7 +662,7 @@
   // Specifically verify that the password form saving new passwords is treated
   // the same as a login form.
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_navigate =
       "document.getElementById('signup_username_field').value = 'temp';"
@@ -686,7 +687,7 @@
   // doesn't need to be via form.submit(), but for testing purposes it's
   // necessary since we otherwise ignore changes made to the value of these
   // fields by script.
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "navigate = false;"
@@ -716,7 +717,7 @@
   // doesn't need to be via form.submit(), but for testing purposes it's
   // necessary since we otherwise ignore changes made to the value of these
   // fields by script.
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "navigate = false;"
@@ -745,7 +746,7 @@
 
   // Verify that if Fetch without navigation occurs and the form has NOT been
   // filled out we don't prompt.
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "navigate = false;"
@@ -772,7 +773,7 @@
 
   // Verify that if Fetch without navigation occurs and the form has NOT been
   // filled out we don't prompt.
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "navigate = false;"
@@ -794,7 +795,7 @@
   // Verify that if the user takes a direct action to leave the page, we don't
   // prompt to save the password even if the form is already filled out.
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_click_link =
       "document.getElementById('username_field').value = 'temp';"
@@ -820,7 +821,7 @@
 
   // Enter a password and save it.
   NavigationObserver first_observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "document.getElementById('other_info').value = 'stuff';"
@@ -854,7 +855,7 @@
   // Submit the form and verify that there is no infobar (as the password
   // has already been saved).
   NavigationObserver second_observer(WebContents());
-  scoped_ptr<PromptObserver> second_prompt_observer(
+  std::unique_ptr<PromptObserver> second_prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string submit_form =
       "document.getElementById('input_submit_button').click()";
@@ -870,7 +871,7 @@
       base::StatisticsRecorder::FindHistogram(
           "PasswordGeneration.UploadStarted");
   ASSERT_TRUE(upload_histogram);
-  scoped_ptr<base::HistogramSamples> snapshot =
+  std::unique_ptr<base::HistogramSamples> snapshot =
       upload_histogram->SnapshotSamples();
   EXPECT_EQ(0, snapshot->GetCount(0 /* failure */));
   EXPECT_EQ(2, snapshot->GetCount(1 /* success */));
@@ -885,7 +886,7 @@
   // user gesture. We expect the save password prompt to be shown here, because
   // some pages use such iframes for login forms.
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "var iframe = document.getElementById('test_iframe');"
@@ -906,7 +907,7 @@
   NavigateToFile("/password/password_form.html");
 
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "document.getElementById('username_field_no_name').value = 'temp';"
@@ -924,7 +925,7 @@
   NavigateToFile("/password/password_form.html");
 
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "document.getElementsByName('username_field_no_id')[0].value = 'temp';"
@@ -942,7 +943,7 @@
   NavigateToFile("/password/password_form.html");
 
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "var form = document.getElementById('testform_elements_no_id_no_name');"
@@ -980,7 +981,7 @@
   ui_test_utils::NavigateToURL(browser(), url);
 
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "document.getElementById('username_field').value = 'temp';"
@@ -998,7 +999,7 @@
   NavigateToFile("/password/password_form.html");
 
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "document.getElementById('username_field_http_error').value = 'temp';"
@@ -1056,7 +1057,7 @@
 
   // Fill in the credentials, and make sure they are saved.
   NavigationObserver form_submit_observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "document.getElementById('username_field').value = 'temp';"
@@ -1098,7 +1099,7 @@
 
   // Fill in the credentials, and make sure they are saved.
   NavigationObserver form_submit_observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "document.getElementById('username_field').value = 'temp';"
@@ -1132,7 +1133,7 @@
   // Don't prompt if we navigate away even if there is a password value since
   // it's not coming from the user.
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   NavigateToFile("/password/done.html");
   observer.Wait();
@@ -1146,7 +1147,7 @@
   // Fill a form and submit through a <input type="submit"> button. Nothing
   // special.
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "document.getElementById('username_field').value = 'temp';"
@@ -1163,7 +1164,7 @@
 
   // Fill a form and submit through a <input type="submit"> button.
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "document.getElementById('username_field').value = 'temp';"
@@ -1187,14 +1188,14 @@
 
   // Add the enable-automatic-password-saving feature.
   base::FeatureList::ClearInstanceForTesting();
-  scoped_ptr<base::FeatureList> feature_list(new base::FeatureList);
+  std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList);
   feature_list->InitializeFromCommandLine(
       password_manager::features::kEnableAutomaticPasswordSaving.name, "");
   base::FeatureList::SetInstance(std::move(feature_list));
 
   // Fill a form and submit through a <input type="submit"> button.
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   // Make sure that the only passwords saved are the auto-saved ones.
   std::string fill_and_submit =
@@ -1224,7 +1225,7 @@
   ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill));
 
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   GURL url = embedded_test_server()->GetURL("/password/password_form.html");
   chrome::NavigateParams params(browser(), url, ::ui::PAGE_TRANSITION_RELOAD);
@@ -1241,7 +1242,7 @@
   NavigateToFile("/password/between_parsing_and_rendering.html");
 
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string submit =
       "document.getElementById('username').value = 'temp';"
@@ -1286,7 +1287,7 @@
   content::NavigationController* nav_controller =
       &WebContents()->GetController();
   NavigationObserver nav_observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   WindowedAuthNeededObserver auth_needed_observer(nav_controller);
   auth_needed_observer.Wait();
@@ -1332,7 +1333,7 @@
   NavigateToFile("/password/create_form_copy_on_submit.html");
 
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string submit =
       "document.getElementById('username').value = 'overwrite_me';"
@@ -1356,7 +1357,7 @@
   ASSERT_TRUE(http_url.SchemeIs(url::kHttpScheme));
 
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   ui_test_utils::NavigateToURL(browser(), http_url);
 
@@ -1389,7 +1390,7 @@
   ASSERT_TRUE(https_url.SchemeIs(url::kHttpsScheme));
 
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   ui_test_utils::NavigateToURL(browser(), https_url);
 
@@ -1411,7 +1412,7 @@
   NavigateToFile("/password/form_with_only_password_field.html");
 
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string submit =
       "document.getElementById('password').value = 'password';"
@@ -1447,7 +1448,7 @@
 
   // Fill in the credentials, and make sure they are saved.
   NavigationObserver form_submit_observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string create_fill_and_submit =
       "document.getElementById('create_form_button').click();"
@@ -1495,7 +1496,7 @@
   // after submission
   NavigationObserver observer(WebContents());
   observer.set_quit_on_entry_committed(true);
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "document.getElementById('username_field').value = 'temp';"
@@ -1517,7 +1518,7 @@
   // history.pushsTate();
   NavigationObserver observer(WebContents());
   observer.set_quit_on_entry_committed(true);
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "should_delete_testform = false;"
@@ -1538,7 +1539,7 @@
 
   NavigationObserver observer(WebContents());
   observer.set_quit_on_entry_committed(true);
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "document.getElementById('ea_username_field').value = 'temp';"
@@ -1558,7 +1559,7 @@
 
   NavigationObserver observer(WebContents());
   observer.set_quit_on_entry_committed(true);
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "should_delete_testform = false;"
@@ -1580,7 +1581,7 @@
 
   NavigationObserver observer(WebContents());
   observer.set_quit_on_entry_committed(true);
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "add_parameters_to_target_url = true;"
@@ -1603,7 +1604,7 @@
 
   NavigationObserver observer(WebContents());
   observer.set_quit_on_entry_committed(true);
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "should_delete_testform = false;"
@@ -1627,7 +1628,7 @@
   ObservingAutofillClient observing_autofill_client;
   driver_factory->TestingSetDriverForFrame(
       RenderViewHost()->GetMainFrame(),
-      make_scoped_ptr(new password_manager::ContentPasswordManagerDriver(
+      base::WrapUnique(new password_manager::ContentPasswordManagerDriver(
           RenderViewHost()->GetMainFrame(),
           ChromePasswordManagerClient::FromWebContents(WebContents()),
           &observing_autofill_client)));
@@ -1635,7 +1636,7 @@
   NavigateToFile("/password/password_form.html");
 
   NavigationObserver form_submit_observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill =
       "document.getElementById('username_field').value = 'temp';"
@@ -1682,7 +1683,7 @@
   NavigateToFile("/password/password_form.html");
 
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "document.getElementById('chg_username_field').value = 'temp';"
@@ -1701,7 +1702,7 @@
 
   NavigationObserver observer(WebContents());
   observer.set_quit_on_entry_committed(true);
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "document.getElementById('chg_username_field').value = 'temp';"
@@ -1731,7 +1732,7 @@
   NavigateToFile("/password/dummy_submit.html");
 
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   // The (dummy) submit is necessary to provisionally save the typed password. A
   // user typing in the password field would not need to submit to provisionally
@@ -1754,7 +1755,7 @@
   // In this case, pretend that username_field is actually a password field
   // that starts as a text field to simulate placeholder.
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string change_and_submit =
       "document.getElementById('other_info').value = 'username';"
@@ -1777,7 +1778,7 @@
   NavigateToFile("/password/many_password_signup_form.html");
 
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "document.getElementById('username_field').value = 'username';"
@@ -1799,7 +1800,7 @@
   // is no navigation to wait for.
   content::DOMMessageQueue message_queue;
 
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "var iframe = document.getElementById('login_iframe');"
@@ -1865,7 +1866,7 @@
   // Store a password for autofill later
   NavigationObserver init_observer(WebContents());
   init_observer.SetPathToWaitFor("/password/done.html");
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string init_form = "sendMessage('fill_and_submit');";
   ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), init_form));
@@ -1942,7 +1943,7 @@
   NavigateToFile("/password/password_form_in_same_origin_iframe.html");
   NavigationObserver observer(WebContents());
   observer.SetPathToWaitFor("/password/done.html");
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
 
   std::string submit =
@@ -2066,7 +2067,7 @@
 
   // Fill a form and submit through a <input type="submit"> button.
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
 
   std::string fill_and_submit =
@@ -2115,7 +2116,7 @@
   // Check that password update bubble is shown.
   NavigateToFile("/password/password_form.html");
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit_change_password =
       "document.getElementById('chg_password_wo_username_field').value = "
@@ -2162,7 +2163,7 @@
   // Check that password update bubble is shown.
   NavigateToFile("/password/password_form.html");
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "document.getElementById('username_field').value = 'temp';"
@@ -2203,7 +2204,7 @@
   // Check that password update bubble is shown.
   NavigateToFile("/password/password_form.html");
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "document.getElementById('username_field').value = 'temp';"
@@ -2236,7 +2237,7 @@
   // Check that password update bubble is shown.
   NavigateToFile("/password/password_form.html");
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit_change_password =
       "document.getElementById('chg_text_field').value = '3';"
@@ -2780,7 +2781,7 @@
   // Check that password save bubble is shown.
   NavigateToFile("/password/password_form.html");
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "document.getElementById('retry_password_field').value = 'pw';"
@@ -2821,7 +2822,7 @@
   // same in one of the stored credentials.
   NavigateToFile("/password/password_form.html");
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "document.getElementById('retry_password_field').value = 'pw';"
@@ -2852,7 +2853,7 @@
   // Check that password update bubble is shown.
   NavigateToFile("/password/password_form.html");
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "document.getElementById('retry_password_field').value = 'new_pw';"
@@ -2880,7 +2881,7 @@
   NavigateToFile("/password/password_autocomplete_off_test.html");
 
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "document.getElementById('username').value = 'temp';"
@@ -2929,7 +2930,7 @@
       "navigator.credentials.get({password: true, unmediated: true })"));
 
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit_change_password =
       "document.getElementById('username_field').value = 'user';"
@@ -2973,7 +2974,7 @@
   // No API call.
 
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit_change_password =
       "document.getElementById('username_field').value = 'user';"
diff --git a/chrome/browser/password_manager/password_manager_interactive_uitest.cc b/chrome/browser/password_manager/password_manager_interactive_uitest.cc
index 1f060d1..533c3803 100644
--- a/chrome/browser/password_manager/password_manager_interactive_uitest.cc
+++ b/chrome/browser/password_manager/password_manager_interactive_uitest.cc
@@ -45,7 +45,7 @@
   NavigateToFile("/password/signup_form.html");
 
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string fill_and_submit =
       "document.getElementById('username_field').value = 'temp';"
@@ -84,7 +84,7 @@
   WaitForElementValue("username_field", "tempORARY");
 
   NavigationObserver second_observer(WebContents());
-  scoped_ptr<PromptObserver> second_prompt_observer(
+  std::unique_ptr<PromptObserver> second_prompt_observer(
       PromptObserver::Create(WebContents()));
   std::string submit =
       "document.getElementById('input_submit_button').click();";
diff --git a/chrome/browser/password_manager/password_manager_internals_service_unittest.cc b/chrome/browser/password_manager/password_manager_internals_service_unittest.cc
index bd125de..07b9c7a 100644
--- a/chrome/browser/password_manager/password_manager_internals_service_unittest.cc
+++ b/chrome/browser/password_manager/password_manager_internals_service_unittest.cc
@@ -28,9 +28,9 @@
 
 enum ProfileType { NORMAL_PROFILE, INCOGNITO_PROFILE };
 
-scoped_ptr<TestingProfile> CreateProfile(ProfileType type) {
+std::unique_ptr<TestingProfile> CreateProfile(ProfileType type) {
   TestingProfile::Builder builder;
-  scoped_ptr<TestingProfile> profile(builder.Build());
+  std::unique_ptr<TestingProfile> profile(builder.Build());
 #if !defined(NDEBUG)
   // During the test cases, the profiles may get created on the same address. To
   // avoid over-zealous asserts we need to mark the newly created one as "live".
@@ -54,7 +54,7 @@
 // When the profile is not incognito, it should be possible to activate the
 // service.
 TEST_F(PasswordManagerInternalsServiceTest, ServiceActiveNonIncognito) {
-  scoped_ptr<TestingProfile> profile(CreateProfile(NORMAL_PROFILE));
+  std::unique_ptr<TestingProfile> profile(CreateProfile(NORMAL_PROFILE));
   PasswordManagerInternalsService* service =
       PasswordManagerInternalsServiceFactory::GetForBrowserContext(
           profile.get());
@@ -74,7 +74,7 @@
 // When the browser profile is incognito, it should not be possible to activate
 // the service.
 TEST_F(PasswordManagerInternalsServiceTest, ServiceNotActiveIncognito) {
-  scoped_ptr<TestingProfile> profile(CreateProfile(INCOGNITO_PROFILE));
+  std::unique_ptr<TestingProfile> profile(CreateProfile(INCOGNITO_PROFILE));
   ASSERT_TRUE(profile);
 
   Profile* incognito_profile = profile->GetOffTheRecordProfile();
diff --git a/chrome/browser/password_manager/password_manager_test_base.cc b/chrome/browser/password_manager/password_manager_test_base.cc
index fdc641aa..bdd32c3 100644
--- a/chrome/browser/password_manager/password_manager_test_base.cc
+++ b/chrome/browser/password_manager/password_manager_test_base.cc
@@ -170,12 +170,12 @@
   DISALLOW_COPY_AND_ASSIGN(BubbleObserver);
 };
 
-scoped_ptr<PromptObserver> PromptObserver::Create(
+std::unique_ptr<PromptObserver> PromptObserver::Create(
     content::WebContents* web_contents) {
   if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) {
-    return scoped_ptr<PromptObserver>(new BubbleObserver(web_contents));
+    return std::unique_ptr<PromptObserver>(new BubbleObserver(web_contents));
   } else {
-    return scoped_ptr<PromptObserver>(new InfoBarObserver(web_contents));
+    return std::unique_ptr<PromptObserver>(new InfoBarObserver(web_contents));
   }
 }
 
@@ -232,7 +232,7 @@
   NavigateToFile(filename);
 
   NavigationObserver observer(WebContents());
-  scoped_ptr<PromptObserver> prompt_observer(
+  std::unique_ptr<PromptObserver> prompt_observer(
       PromptObserver::Create(WebContents()));
   ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), submission_script));
   observer.Wait();
diff --git a/chrome/browser/password_manager/password_manager_test_base.h b/chrome/browser/password_manager/password_manager_test_base.h
index b77b5fbe..0ca5179 100644
--- a/chrome/browser/password_manager/password_manager_test_base.h
+++ b/chrome/browser/password_manager/password_manager_test_base.h
@@ -5,9 +5,10 @@
 #ifndef CHROME_BROWSER_PASSWORD_MANAGER_PASSWORD_MANAGER_TEST_BASE_H_
 #define CHROME_BROWSER_PASSWORD_MANAGER_PASSWORD_MANAGER_TEST_BASE_H_
 
+#include <memory>
+
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "content/public/browser/web_contents_observer.h"
 #include "content/public/test/test_utils.h"
@@ -76,7 +77,8 @@
 
   // Chooses the right implementation of PromptObserver and creates an instance
   // of it.
-  static scoped_ptr<PromptObserver> Create(content::WebContents* web_contents);
+  static std::unique_ptr<PromptObserver> Create(
+      content::WebContents* web_contents);
 
  protected:
   PromptObserver();
diff --git a/chrome/browser/password_manager/password_manager_util_win.cc b/chrome/browser/password_manager/password_manager_util_win.cc
index 5e675cac..4fe6cca3 100644
--- a/chrome/browser/password_manager/password_manager_util_win.cc
+++ b/chrome/browser/password_manager/password_manager_util_win.cc
@@ -9,6 +9,8 @@
 #include <stdint.h>
 #include <wincred.h>
 
+#include <memory>
+
 // SECURITY_WIN32 must be defined in order to get
 // EXTENDED_NAME_FORMAT enumeration.
 #define SECURITY_WIN32 1
@@ -19,7 +21,6 @@
 
 #include "base/bind.h"
 #include "base/bind_helpers.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/threading/worker_pool.h"
@@ -188,8 +189,8 @@
   }
 }
 
-void ReplyOsPasswordStatus(scoped_ptr<PasswordCheckPrefs> prefs,
-                           scoped_ptr<OsPasswordStatus> status) {
+void ReplyOsPasswordStatus(std::unique_ptr<PasswordCheckPrefs> prefs,
+                           std::unique_ptr<OsPasswordStatus> status) {
   PrefService* local_state = g_browser_process->local_state();
   prefs->Write(local_state);
   UMA_HISTOGRAM_ENUMERATION("PasswordManager.OsPasswordStatus", *status,
@@ -200,9 +201,9 @@
   // Preferences can be accessed on the UI thread only.
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
   PrefService* local_state = g_browser_process->local_state();
-  scoped_ptr<PasswordCheckPrefs> prefs(new PasswordCheckPrefs);
+  std::unique_ptr<PasswordCheckPrefs> prefs(new PasswordCheckPrefs);
   prefs->Read(local_state);
-  scoped_ptr<OsPasswordStatus> status(
+  std::unique_ptr<OsPasswordStatus> status(
       new OsPasswordStatus(PASSWORD_STATUS_UNKNOWN));
   PasswordCheckPrefs* prefs_weak = prefs.get();
   OsPasswordStatus* status_weak = status.get();
diff --git a/chrome/browser/password_manager/password_store_factory.cc b/chrome/browser/password_manager/password_store_factory.cc
index f298ff9..a661c01 100644
--- a/chrome/browser/password_manager/password_store_factory.cc
+++ b/chrome/browser/password_manager/password_store_factory.cc
@@ -4,11 +4,11 @@
 
 #include "chrome/browser/password_manager/password_store_factory.h"
 
+#include <memory>
 #include <utility>
 
 #include "base/command_line.h"
 #include "base/environment.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/rand_util.h"
 #include "base/thread_task_runner_handle.h"
@@ -150,7 +150,7 @@
 #endif
   Profile* profile = static_cast<Profile*>(context);
 
-  scoped_ptr<password_manager::LoginDatabase> login_db(
+  std::unique_ptr<password_manager::LoginDatabase> login_db(
       password_manager::CreateLoginDatabase(profile->GetPath()));
 
   scoped_refptr<base::SingleThreadTaskRunner> main_thread_runner(
@@ -166,7 +166,7 @@
                             WebDataServiceFactory::GetPasswordWebDataForProfile(
                                 profile, ServiceAccessType::EXPLICIT_ACCESS));
 #elif defined(OS_MACOSX)
-  scoped_ptr<crypto::AppleKeychain> keychain(
+  std::unique_ptr<crypto::AppleKeychain> keychain(
       base::CommandLine::ForCurrentProcess()->HasSwitch(
           os_crypt::switches::kUseMockKeychain)
           ? new crypto::MockAppleKeychain()
@@ -207,7 +207,7 @@
   PrefService* prefs = profile->GetPrefs();
   LocalProfileId id = GetLocalProfileId(prefs);
 
-  scoped_ptr<PasswordStoreX::NativeBackend> backend;
+  std::unique_ptr<PasswordStoreX::NativeBackend> backend;
   if (used_desktop_env == base::nix::DESKTOP_ENVIRONMENT_KDE4 ||
       used_desktop_env == base::nix::DESKTOP_ENVIRONMENT_KDE5) {
     // KDE3 didn't use DBus, which our KWallet store uses.
@@ -294,7 +294,7 @@
 
 #if defined(USE_X11)
 base::nix::DesktopEnvironment PasswordStoreFactory::GetDesktopEnvironment() {
-  scoped_ptr<base::Environment> env(base::Environment::Create());
+  std::unique_ptr<base::Environment> env(base::Environment::Create());
   return base::nix::GetDesktopEnvironment(env.get());
 }
 
diff --git a/chrome/browser/password_manager/password_store_mac.cc b/chrome/browser/password_manager/password_store_mac.cc
index f643086e6..63dca04 100644
--- a/chrome/browser/password_manager/password_store_mac.cc
+++ b/chrome/browser/password_manager/password_store_mac.cc
@@ -226,12 +226,13 @@
 
 // Iterates over all elements in |forms|, passes the pointed to objects to
 // |mover|, and clears |forms| efficiently. FormMover needs to be a callable
-// entity, accepting scoped_ptr<autofill::PasswordForm> as its sole argument.
+// entity, accepting std::unique_ptr<autofill::PasswordForm> as its sole
+// argument.
 template <typename FormMover>
 inline void MoveAllFormsOut(ScopedVector<autofill::PasswordForm>* forms,
                             FormMover mover) {
   for (autofill::PasswordForm* form_ptr : *forms) {
-    mover(scoped_ptr<autofill::PasswordForm>(form_ptr));
+    mover(std::unique_ptr<autofill::PasswordForm>(form_ptr));
   }
   // We moved the ownership of every form out of |forms|. For performance
   // reasons, we can just weak_clear it, instead of nullptr-ing the respective
@@ -497,13 +498,13 @@
                              ScopedVector<autofill::PasswordForm>* extracted) {
   extracted->reserve(extracted->size() + forms->size());
   ScopedVector<autofill::PasswordForm> remaining;
-  MoveAllFormsOut(
-      forms, [&remaining, extracted](scoped_ptr<autofill::PasswordForm> form) {
-        if (IsLoginDatabaseOnlyForm(*form))
-          extracted->push_back(std::move(form));
-        else
-          remaining.push_back(std::move(form));
-      });
+  MoveAllFormsOut(forms, [&remaining, extracted](
+                             std::unique_ptr<autofill::PasswordForm> form) {
+    if (IsLoginDatabaseOnlyForm(*form))
+      extracted->push_back(std::move(form));
+    else
+      remaining.push_back(std::move(form));
+  });
   forms->swap(remaining);
 }
 
@@ -531,19 +532,20 @@
   // |unused_database_forms|, based on whether they have a match in the keychain
   // forms or not. If there is a match, add its password to the DB form and
   // mark the keychain form as used.
-  MoveAllFormsOut(database_forms, [keychain_forms, &used_keychain_forms,
-                                   merged_forms, &unused_database_forms](
-                                      scoped_ptr<autofill::PasswordForm> form) {
-    const PasswordForm* best_match =
-        BestKeychainFormForForm(*form, keychain_forms->get());
-    if (best_match) {
-      used_keychain_forms.insert(best_match);
-      form->password_value = best_match->password_value;
-      merged_forms->push_back(std::move(form));
-    } else {
-      unused_database_forms.push_back(std::move(form));
-    }
-  });
+  MoveAllFormsOut(
+      database_forms,
+      [keychain_forms, &used_keychain_forms, merged_forms,
+       &unused_database_forms](std::unique_ptr<autofill::PasswordForm> form) {
+        const PasswordForm* best_match =
+            BestKeychainFormForForm(*form, keychain_forms->get());
+        if (best_match) {
+          used_keychain_forms.insert(best_match);
+          form->password_value = best_match->password_value;
+          merged_forms->push_back(std::move(form));
+        } else {
+          unused_database_forms.push_back(std::move(form));
+        }
+      });
   database_forms->swap(unused_database_forms);
 
   // Clear out all the Keychain entries we used.
@@ -600,17 +602,18 @@
   unused_db_forms.reserve(database_forms->size());
   // Move database forms with a password stored in |keychain| to |passwords|,
   // including the password. The rest is moved to |unused_db_forms|.
-  MoveAllFormsOut(database_forms,
-                  [&keychain, &item_form_pairs, passwords, &unused_db_forms](
-                      scoped_ptr<autofill::PasswordForm> form) {
-    ScopedVector<autofill::PasswordForm> keychain_matches =
-        ExtractPasswordsMergeableWithForm(keychain, item_form_pairs, *form);
+  MoveAllFormsOut(
+      database_forms,
+      [&keychain, &item_form_pairs, passwords,
+       &unused_db_forms](std::unique_ptr<autofill::PasswordForm> form) {
+        ScopedVector<autofill::PasswordForm> keychain_matches =
+            ExtractPasswordsMergeableWithForm(keychain, item_form_pairs, *form);
 
-    ScopedVector<autofill::PasswordForm> db_form_container;
-    db_form_container.push_back(std::move(form));
-    MergePasswordForms(&keychain_matches, &db_form_container, passwords);
-    AppendSecondToFirst(&unused_db_forms, &db_form_container);
-  });
+        ScopedVector<autofill::PasswordForm> db_form_container;
+        db_form_container.push_back(std::move(form));
+        MergePasswordForms(&keychain_matches, &db_form_container, passwords);
+        AppendSecondToFirst(&unused_db_forms, &db_form_container);
+      });
   database_forms->swap(unused_db_forms);
 
   STLDeleteContainerPairSecondPointers(item_form_pairs.begin(),
@@ -685,7 +688,7 @@
     if (FormIsValidAndMatchesOtherForm(query_form, *(i->second))) {
       // Create a new object, since the caller is responsible for deleting the
       // returned forms.
-      scoped_ptr<PasswordForm> form_with_password(new PasswordForm());
+      std::unique_ptr<PasswordForm> form_with_password(new PasswordForm());
       FillPasswordFormFromKeychainItem(
           keychain, *(i->first), form_with_password.get(),
           true);  // Load password attributes and data.
@@ -838,7 +841,7 @@
     std::vector<SecKeychainItemRef>* items) {
   ScopedVector<autofill::PasswordForm> forms;
   for (SecKeychainItemRef item : *items) {
-    scoped_ptr<PasswordForm> form(new PasswordForm());
+    std::unique_ptr<PasswordForm> form(new PasswordForm());
     if (internal_keychain_helpers::FillPasswordFormFromKeychainItem(
             *keychain_, item, form.get(), true)) {
       forms.push_back(std::move(form));
@@ -956,7 +959,7 @@
 PasswordStoreMac::PasswordStoreMac(
     scoped_refptr<base::SingleThreadTaskRunner> main_thread_runner,
     scoped_refptr<base::SingleThreadTaskRunner> db_thread_runner,
-    scoped_ptr<AppleKeychain> keychain)
+    std::unique_ptr<AppleKeychain> keychain)
     : password_manager::PasswordStore(main_thread_runner, db_thread_runner),
       keychain_(std::move(keychain)),
       login_metadata_db_(nullptr) {
@@ -1145,13 +1148,14 @@
   if (login_metadata_db_ &&
       login_metadata_db_->GetLoginsCreatedBetween(delete_begin, delete_end,
                                                   &forms_to_consider)) {
-    MoveAllFormsOut(&forms_to_consider,
-                    [this, &url_filter, &forms_to_remove](
-                        scoped_ptr<autofill::PasswordForm> form_to_consider) {
-                      if (url_filter.Run(form_to_consider->origin) &&
-                          login_metadata_db_->RemoveLogin(*form_to_consider))
-                        forms_to_remove.push_back(std::move(form_to_consider));
-                    });
+    MoveAllFormsOut(
+        &forms_to_consider,
+        [this, &url_filter, &forms_to_remove](
+            std::unique_ptr<autofill::PasswordForm> form_to_consider) {
+          if (url_filter.Run(form_to_consider->origin) &&
+              login_metadata_db_->RemoveLogin(*form_to_consider))
+            forms_to_remove.push_back(std::move(form_to_consider));
+        });
     if (!forms_to_remove.empty()) {
       RemoveKeychainForms(forms_to_remove.get());
       CleanOrphanedForms(&forms_to_remove);  // Add the orphaned forms.
@@ -1306,12 +1310,13 @@
     login_metadata_db_->stats_table().RemoveRow(origin_domain);
 }
 
-std::vector<scoped_ptr<password_manager::InteractionsStats>>
+std::vector<std::unique_ptr<password_manager::InteractionsStats>>
 PasswordStoreMac::GetSiteStatsImpl(const GURL& origin_domain) {
   DCHECK(GetBackgroundTaskRunner()->BelongsToCurrentThread());
   return login_metadata_db_
              ? login_metadata_db_->stats_table().GetRows(origin_domain)
-             : std::vector<scoped_ptr<password_manager::InteractionsStats>>();
+             : std::vector<
+                   std::unique_ptr<password_manager::InteractionsStats>>();
 }
 
 bool PasswordStoreMac::AddToKeychainIfNecessary(const PasswordForm& form) {
@@ -1347,7 +1352,7 @@
   DCHECK(login_metadata_db_);
   ScopedVector<autofill::PasswordForm> removed_forms;
   MoveAllFormsOut(forms, [this, &removed_forms](
-                             scoped_ptr<autofill::PasswordForm> form) {
+                             std::unique_ptr<autofill::PasswordForm> form) {
     if (login_metadata_db_->RemoveLogin(*form))
       removed_forms.push_back(std::move(form));
   });
diff --git a/chrome/browser/password_manager/password_store_mac.h b/chrome/browser/password_manager/password_store_mac.h
index 14484e5d..9d0682a 100644
--- a/chrome/browser/password_manager/password_store_mac.h
+++ b/chrome/browser/password_manager/password_store_mac.h
@@ -5,12 +5,12 @@
 #ifndef CHROME_BROWSER_PASSWORD_MANAGER_PASSWORD_STORE_MAC_H_
 #define CHROME_BROWSER_PASSWORD_MANAGER_PASSWORD_STORE_MAC_H_
 
+#include <memory>
 #include <string>
 #include <vector>
 
 #include "base/callback_forward.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/scoped_vector.h"
 #include "base/threading/thread.h"
 #include "components/password_manager/core/browser/login_database.h"
@@ -44,7 +44,7 @@
   PasswordStoreMac(
       scoped_refptr<base::SingleThreadTaskRunner> main_thread_runner,
       scoped_refptr<base::SingleThreadTaskRunner> db_thread_runner,
-      scoped_ptr<crypto::AppleKeychain> keychain);
+      std::unique_ptr<crypto::AppleKeychain> keychain);
 
   // Sets the background thread.
   void InitWithTaskRunner(
@@ -102,8 +102,8 @@
   void AddSiteStatsImpl(
       const password_manager::InteractionsStats& stats) override;
   void RemoveSiteStatsImpl(const GURL& origin_domain) override;
-  std::vector<scoped_ptr<password_manager::InteractionsStats>> GetSiteStatsImpl(
-      const GURL& origin_domain) override;
+  std::vector<std::unique_ptr<password_manager::InteractionsStats>>
+  GetSiteStatsImpl(const GURL& origin_domain) override;
 
   // Adds the given form to the Keychain if it's something we want to store
   // there (i.e., not a blacklist entry or a federated login). Returns true if
@@ -129,7 +129,7 @@
   // |orphaned_forms|.
   void CleanOrphanedForms(ScopedVector<autofill::PasswordForm>* orphaned_forms);
 
-  scoped_ptr<crypto::AppleKeychain> keychain_;
+  std::unique_ptr<crypto::AppleKeychain> keychain_;
 
   // The login metadata SQL database. The caller is resonsible for initializing
   // it.
diff --git a/chrome/browser/password_manager/password_store_mac_unittest.cc b/chrome/browser/password_manager/password_store_mac_unittest.cc
index 39c21c0b..48032af 100644
--- a/chrome/browser/password_manager/password_store_mac_unittest.cc
+++ b/chrome/browser/password_manager/password_store_mac_unittest.cc
@@ -10,6 +10,7 @@
 
 #include "base/files/scoped_temp_dir.h"
 #include "base/macros.h"
+#include "base/memory/ptr_util.h"
 #include "base/scoped_observer.h"
 #include "base/stl_util.h"
 #include "base/strings/string_util.h"
@@ -191,7 +192,7 @@
 
   base::MessageLoopForUI message_loop_;
   base::ScopedTempDir db_dir_;
-  scoped_ptr<LoginDatabase> login_db_;
+  std::unique_ptr<LoginDatabase> login_db_;
   scoped_refptr<PasswordStoreMac> store_;
 
   DISALLOW_COPY_AND_ASSIGN(PasswordStoreMacTestDelegate);
@@ -221,7 +222,7 @@
   // Create and initialize the password store.
   store_ = new PasswordStoreMac(base::ThreadTaskRunnerHandle::Get(),
                                 base::ThreadTaskRunnerHandle::Get(),
-                                make_scoped_ptr(new MockAppleKeychain));
+                                base::WrapUnique(new MockAppleKeychain));
   store_->set_login_metadata_db(login_db_.get());
   store_->login_metadata_db()->set_clear_password_values(false);
 }
@@ -568,7 +569,7 @@
   MacKeychainPasswordFormAdapter owned_keychain_adapter(keychain_);
   owned_keychain_adapter.SetFindsOnlyOwnedItems(true);
   for (unsigned int i = 0; i < arraysize(test_data); ++i) {
-    scoped_ptr<PasswordForm> query_form =
+    std::unique_ptr<PasswordForm> query_form =
         CreatePasswordFormFromDataForTesting(test_data[i].data);
 
     // Check matches treating the form as a fill target.
@@ -647,7 +648,7 @@
 
   for (unsigned int i = 0; i < arraysize(base_form_data); ++i) {
     // Create a base form and make sure we find a match.
-    scoped_ptr<PasswordForm> base_form =
+    std::unique_ptr<PasswordForm> base_form =
         CreatePasswordFormFromDataForTesting(base_form_data[i]);
     EXPECT_TRUE(keychain_adapter.HasPasswordsMergeableWithForm(*base_form));
     EXPECT_TRUE(keychain_adapter.HasPasswordExactlyMatchingForm(*base_form));
@@ -731,7 +732,7 @@
   owned_keychain_adapter.SetFindsOnlyOwnedItems(true);
 
   for (unsigned int i = 0; i < arraysize(test_data); ++i) {
-    scoped_ptr<PasswordForm> in_form =
+    std::unique_ptr<PasswordForm> in_form =
         CreatePasswordFormFromDataForTesting(test_data[i].data);
     bool add_succeeded = owned_keychain_adapter.AddPassword(*in_form);
     EXPECT_EQ(test_data[i].should_succeed, add_succeeded);
@@ -752,7 +753,7 @@
       "http://some.domain.com/insecure.html", NULL,
       NULL, NULL, NULL, L"joe_user", L"updated_password", false, false, 0
     };
-    scoped_ptr<PasswordForm> update_form =
+    std::unique_ptr<PasswordForm> update_form =
         CreatePasswordFormFromDataForTesting(data);
     MacKeychainPasswordFormAdapter keychain_adapter(keychain_);
     EXPECT_TRUE(keychain_adapter.AddPassword(*update_form));
@@ -797,13 +798,13 @@
 
   // Add our test items (except the last one) so that we can delete them.
   for (unsigned int i = 0; i + 1 < arraysize(test_data); ++i) {
-    scoped_ptr<PasswordForm> add_form =
+    std::unique_ptr<PasswordForm> add_form =
         CreatePasswordFormFromDataForTesting(test_data[i].data);
     EXPECT_TRUE(owned_keychain_adapter.AddPassword(*add_form));
   }
 
   for (unsigned int i = 0; i < arraysize(test_data); ++i) {
-    scoped_ptr<PasswordForm> form =
+    std::unique_ptr<PasswordForm> form =
         CreatePasswordFormFromDataForTesting(test_data[i].data);
     EXPECT_EQ(test_data[i].should_succeed,
               owned_keychain_adapter.RemovePassword(*form));
@@ -1227,7 +1228,7 @@
       L"testname", L"testpass", false, false, 0 },
   };
   for (unsigned int i = 0; i < arraysize(owned_password_data); ++i) {
-    scoped_ptr<PasswordForm> form =
+    std::unique_ptr<PasswordForm> form =
         CreatePasswordFormFromDataForTesting(owned_password_data[i]);
     owned_keychain_adapter.AddPassword(*form);
   }
@@ -1287,7 +1288,7 @@
   void CreateAndInitPasswordStore(password_manager::LoginDatabase* login_db) {
     store_ = new PasswordStoreMac(
         base::ThreadTaskRunnerHandle::Get(), nullptr,
-        make_scoped_ptr<AppleKeychain>(new MockAppleKeychain));
+        base::WrapUnique<AppleKeychain>(new MockAppleKeychain));
     ASSERT_TRUE(thread_->task_runner()->PostTask(
         FROM_HERE, base::Bind(&PasswordStoreMac::InitWithTaskRunner, store_,
                               thread_->task_runner())));
@@ -1380,12 +1381,12 @@
   base::MessageLoopForUI message_loop_;
   content::TestBrowserThread ui_thread_;
   // Thread that the synchronous methods are run on.
-  scoped_ptr<base::Thread> thread_;
+  std::unique_ptr<base::Thread> thread_;
 
   base::ScopedTempDir db_dir_;
-  scoped_ptr<password_manager::LoginDatabase> login_db_;
+  std::unique_ptr<password_manager::LoginDatabase> login_db_;
   scoped_refptr<PasswordStoreMac> store_;
-  scoped_ptr<base::HistogramTester> histogram_tester_;
+  std::unique_ptr<base::HistogramTester> histogram_tester_;
 };
 
 TEST_F(PasswordStoreMacTest, TestStoreUpdate) {
@@ -1399,7 +1400,7 @@
     "http://some.domain.com/insecure.html", "login.cgi",
     L"username", L"password", L"submit", L"joe_user", L"sekrit", true, false, 1
   };
-  scoped_ptr<PasswordForm> joint_form =
+  std::unique_ptr<PasswordForm> joint_form =
       CreatePasswordFormFromDataForTesting(joint_data);
   EXPECT_EQ(AddChangeForForm(*joint_form), login_db()->AddLogin(*joint_form));
   MockAppleKeychain::KeychainTestData joint_keychain_data = {
@@ -1449,7 +1450,7 @@
     },
   };
   for (unsigned int i = 0; i < arraysize(updates); ++i) {
-    scoped_ptr<PasswordForm> form =
+    std::unique_ptr<PasswordForm> form =
         CreatePasswordFormFromDataForTesting(updates[i].form_data);
     store_->UpdateLogin(*form);
   }
@@ -1458,7 +1459,7 @@
 
   MacKeychainPasswordFormAdapter keychain_adapter(keychain());
   for (unsigned int i = 0; i < arraysize(updates); ++i) {
-    scoped_ptr<PasswordForm> query_form =
+    std::unique_ptr<PasswordForm> query_form =
         CreatePasswordFormFromDataForTesting(updates[i].form_data);
 
     ScopedVector<autofill::PasswordForm> matching_items =
@@ -1501,7 +1502,7 @@
     "http://www.facebook.com/index.html", "login",
     L"username", L"password", L"submit", L"joe_user", L"sekrit", true, false, 1
   };
-  scoped_ptr<PasswordForm> www_form =
+  std::unique_ptr<PasswordForm> www_form =
       CreatePasswordFormFromDataForTesting(www_form_data);
   EXPECT_EQ(AddChangeForForm(*www_form), login_db()->AddLogin(*www_form));
   MacKeychainPasswordFormAdapter owned_keychain_adapter(keychain());
@@ -1594,11 +1595,11 @@
       PasswordForm::SCHEME_HTML, "http://different.com/",
       "http://different.com/index.html", "login", L"submit", L"username",
       L"password", L"different_joe_user", L"sekrit", true, false, 0 };
-  scoped_ptr<PasswordForm> form_facebook =
+  std::unique_ptr<PasswordForm> form_facebook =
       CreatePasswordFormFromDataForTesting(www_form_data_facebook);
-  scoped_ptr<PasswordForm> form_facebook_old =
+  std::unique_ptr<PasswordForm> form_facebook_old =
       CreatePasswordFormFromDataForTesting(www_form_data_facebook_old);
-  scoped_ptr<PasswordForm> form_other =
+  std::unique_ptr<PasswordForm> form_other =
       CreatePasswordFormFromDataForTesting(www_form_data_other);
   base::Time now = base::Time::Now();
   base::Time next_day = now + base::TimeDelta::FromDays(1);
@@ -1698,7 +1699,7 @@
       true,
       false,
       0};
-  scoped_ptr<PasswordForm> form_facebook =
+  std::unique_ptr<PasswordForm> form_facebook =
       CreatePasswordFormFromDataForTesting(www_form_data_facebook);
   form_facebook->skip_zero_click = false;
 
@@ -1739,7 +1740,7 @@
       PasswordForm::SCHEME_HTML, "http://www.facebook.com/",
       "http://www.facebook.com/index.html", "login", L"username", L"password",
       L"submit", L"joe_user", L"sekrit", true, false, 1 };
-  scoped_ptr<PasswordForm> www_form =
+  std::unique_ptr<PasswordForm> www_form =
       CreatePasswordFormFromDataForTesting(www_form_data1);
   EXPECT_TRUE(owned_keychain_adapter.AddPassword(*www_form));
 
@@ -1791,7 +1792,7 @@
     "http://www.facebook.com/index.html", "login",
     L"username", L"password", L"submit", L"joe_user", L"", true, false, 1
   };
-  scoped_ptr<PasswordForm> www_form(
+  std::unique_ptr<PasswordForm> www_form(
       CreatePasswordFormFromDataForTesting(www_form_data));
   EXPECT_EQ(AddChangeForForm(*www_form), login_db()->AddLogin(*www_form));
 
diff --git a/chrome/browser/password_manager/password_store_proxy_mac.cc b/chrome/browser/password_manager/password_store_proxy_mac.cc
index dadc0a1..4a3fe4f6 100644
--- a/chrome/browser/password_manager/password_store_proxy_mac.cc
+++ b/chrome/browser/password_manager/password_store_proxy_mac.cc
@@ -18,8 +18,8 @@
 
 PasswordStoreProxyMac::PasswordStoreProxyMac(
     scoped_refptr<base::SingleThreadTaskRunner> main_thread_runner,
-    scoped_ptr<crypto::AppleKeychain> keychain,
-    scoped_ptr<password_manager::LoginDatabase> login_db,
+    std::unique_ptr<crypto::AppleKeychain> keychain,
+    std::unique_ptr<password_manager::LoginDatabase> login_db,
     PrefService* prefs)
     : PasswordStore(main_thread_runner, nullptr),
       login_metadata_db_(std::move(login_db)) {
@@ -225,7 +225,7 @@
   GetBackend()->RemoveSiteStatsImpl(origin_domain);
 }
 
-std::vector<scoped_ptr<password_manager::InteractionsStats>>
+std::vector<std::unique_ptr<password_manager::InteractionsStats>>
 PasswordStoreProxyMac::GetSiteStatsImpl(const GURL& origin_domain) {
   return GetBackend()->GetSiteStatsImpl(origin_domain);
 }
diff --git a/chrome/browser/password_manager/password_store_proxy_mac.h b/chrome/browser/password_manager/password_store_proxy_mac.h
index fbd87d9d..40ba71f 100644
--- a/chrome/browser/password_manager/password_store_proxy_mac.h
+++ b/chrome/browser/password_manager/password_store_proxy_mac.h
@@ -34,8 +34,8 @@
  public:
   PasswordStoreProxyMac(
       scoped_refptr<base::SingleThreadTaskRunner> main_thread_runner,
-      scoped_ptr<crypto::AppleKeychain> keychain,
-      scoped_ptr<password_manager::LoginDatabase> login_db,
+      std::unique_ptr<crypto::AppleKeychain> keychain,
+      std::unique_ptr<password_manager::LoginDatabase> login_db,
       PrefService* prefs);
 
   bool Init(const syncer::SyncableService::StartSyncFlare& flare) override;
@@ -99,8 +99,8 @@
   void AddSiteStatsImpl(
       const password_manager::InteractionsStats& stats) override;
   void RemoveSiteStatsImpl(const GURL& origin_domain) override;
-  std::vector<scoped_ptr<password_manager::InteractionsStats>> GetSiteStatsImpl(
-      const GURL& origin_domain) override;
+  std::vector<std::unique_ptr<password_manager::InteractionsStats>>
+  GetSiteStatsImpl(const GURL& origin_domain) override;
 
   scoped_refptr<PasswordStoreMac> password_store_mac_;
   scoped_refptr<SimplePasswordStoreMac> password_store_simple_;
@@ -108,10 +108,10 @@
   // The login metadata SQL database. If opening the DB on |thread_| fails,
   // |login_metadata_db_| will be reset to NULL for the lifetime of |this|.
   // The ownership may be transferred to |password_store_simple_|.
-  scoped_ptr<password_manager::LoginDatabase> login_metadata_db_;
+  std::unique_ptr<password_manager::LoginDatabase> login_metadata_db_;
 
   // Thread that the synchronous methods are run on.
-  scoped_ptr<base::Thread> thread_;
+  std::unique_ptr<base::Thread> thread_;
 
   // Current migration status for the profile.
   IntegerPrefMember migration_status_;
diff --git a/chrome/browser/password_manager/password_store_proxy_mac_unittest.cc b/chrome/browser/password_manager/password_store_proxy_mac_unittest.cc
index 6093287..996571e 100644
--- a/chrome/browser/password_manager/password_store_proxy_mac_unittest.cc
+++ b/chrome/browser/password_manager/password_store_proxy_mac_unittest.cc
@@ -8,6 +8,7 @@
 
 #include "base/files/scoped_temp_dir.h"
 #include "base/macros.h"
+#include "base/memory/ptr_util.h"
 #include "base/scoped_observer.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/histogram_tester.h"
@@ -99,7 +100,7 @@
   void TearDown() override;
 
   void CreateAndInitPasswordStore(
-      scoped_ptr<password_manager::LoginDatabase> login_db);
+      std::unique_ptr<password_manager::LoginDatabase> login_db);
 
   void ClosePasswordStore();
 
@@ -146,7 +147,7 @@
 }
 
 void PasswordStoreProxyMacTest::SetUp() {
-  scoped_ptr<password_manager::LoginDatabase> login_db(
+  std::unique_ptr<password_manager::LoginDatabase> login_db(
       new password_manager::LoginDatabase(test_login_db_file_path()));
   CreateAndInitPasswordStore(std::move(login_db));
 }
@@ -156,10 +157,10 @@
 }
 
 void PasswordStoreProxyMacTest::CreateAndInitPasswordStore(
-    scoped_ptr<password_manager::LoginDatabase> login_db) {
+    std::unique_ptr<password_manager::LoginDatabase> login_db) {
   store_ = new PasswordStoreProxyMac(
       BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI),
-      make_scoped_ptr(new crypto::MockAppleKeychain), std::move(login_db),
+      base::WrapUnique(new crypto::MockAppleKeychain), std::move(login_db),
       &testing_prefs_);
   ASSERT_TRUE(store_->Init(syncer::SyncableService::StartSyncFlare()));
 }
@@ -336,7 +337,7 @@
   // explosions, but fail without side effect, return no data and trigger no
   // notifications.
   ClosePasswordStore();
-  CreateAndInitPasswordStore(make_scoped_ptr(new BadLoginDatabase));
+  CreateAndInitPasswordStore(base::WrapUnique(new BadLoginDatabase));
   FinishAsyncProcessing();
   EXPECT_FALSE(login_db());
 
@@ -350,9 +351,9 @@
       PasswordForm::SCHEME_HTML, "http://www.facebook.com/",
       "http://www.facebook.com/index.html", "login", L"username", L"password",
       L"submit", L"not_joe_user", L"12345", true, false, 1};
-  scoped_ptr<PasswordForm> form =
+  std::unique_ptr<PasswordForm> form =
       CreatePasswordFormFromDataForTesting(www_form_data);
-  scoped_ptr<PasswordForm> blacklisted_form(new PasswordForm(*form));
+  std::unique_ptr<PasswordForm> blacklisted_form(new PasswordForm(*form));
   blacklisted_form->signon_realm = "http://foo.example.com";
   blacklisted_form->origin = GURL("http://foo.example.com/origin");
   blacklisted_form->action = GURL("http://foo.example.com/action");
@@ -412,8 +413,8 @@
   void TestMigration(bool lock_keychain);
 
  protected:
-  scoped_ptr<password_manager::LoginDatabase> login_db_;
-  scoped_ptr<crypto::MockAppleKeychain> keychain_;
+  std::unique_ptr<password_manager::LoginDatabase> login_db_;
+  std::unique_ptr<crypto::MockAppleKeychain> keychain_;
   base::HistogramTester histogram_tester_;
 };
 
diff --git a/chrome/browser/password_manager/password_store_win.cc b/chrome/browser/password_manager/password_store_win.cc
index 49993a9b..277fa6673 100644
--- a/chrome/browser/password_manager/password_store_win.cc
+++ b/chrome/browser/password_manager/password_store_win.cc
@@ -7,13 +7,13 @@
 #include <stddef.h>
 
 #include <map>
+#include <memory>
 #include <utility>
 #include <vector>
 
 #include "base/bind.h"
 #include "base/logging.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/profiler/scoped_tracker.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
@@ -156,7 +156,7 @@
   PendingRequestMap::iterator i = pending_requests_.find(handle);
   DCHECK(i != pending_requests_.end());
 
-  scoped_ptr<PasswordForm> form(i->second.form);
+  std::unique_ptr<PasswordForm> form(i->second.form);
   ResultCallback result_callback(i->second.result_callback);
   pending_requests_.erase(i);
 
@@ -174,7 +174,7 @@
 PasswordStoreWin::PasswordStoreWin(
     scoped_refptr<base::SingleThreadTaskRunner> main_thread_runner,
     scoped_refptr<base::SingleThreadTaskRunner> db_thread_runner,
-    scoped_ptr<password_manager::LoginDatabase> login_db,
+    std::unique_ptr<password_manager::LoginDatabase> login_db,
     const scoped_refptr<PasswordWebDataService>& web_data_service)
     : PasswordStoreDefault(main_thread_runner,
                            db_thread_runner,
@@ -197,8 +197,9 @@
   PasswordStoreDefault::ShutdownOnUIThread();
 }
 
-void PasswordStoreWin::GetLoginsImpl(const PasswordForm& form,
-                                     scoped_ptr<GetLoginsRequest> request) {
+void PasswordStoreWin::GetLoginsImpl(
+    const PasswordForm& form,
+    std::unique_ptr<GetLoginsRequest> request) {
   // When importing from IE7, the credentials are first stored into a temporary
   // Web SQL database. Then, after each GetLogins() request that does not yield
   // any matches from the LoginDatabase, the matching credentials in the Web SQL
diff --git a/chrome/browser/password_manager/password_store_win.h b/chrome/browser/password_manager/password_store_win.h
index fb58e3f..f1272b3 100644
--- a/chrome/browser/password_manager/password_store_win.h
+++ b/chrome/browser/password_manager/password_store_win.h
@@ -5,8 +5,9 @@
 #ifndef CHROME_BROWSER_PASSWORD_MANAGER_PASSWORD_STORE_WIN_H_
 #define CHROME_BROWSER_PASSWORD_MANAGER_PASSWORD_STORE_WIN_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/password_manager/core/browser/password_store_default.h"
 
 class PasswordWebDataService;
@@ -29,7 +30,7 @@
   PasswordStoreWin(
       scoped_refptr<base::SingleThreadTaskRunner> main_thread_runner,
       scoped_refptr<base::SingleThreadTaskRunner> db_thread_runner,
-      scoped_ptr<password_manager::LoginDatabase> login_db,
+      std::unique_ptr<password_manager::LoginDatabase> login_db,
       const scoped_refptr<PasswordWebDataService>& web_data_service);
 
   // PasswordStore:
@@ -45,9 +46,9 @@
 
   // password_manager::PasswordStore:
   void GetLoginsImpl(const autofill::PasswordForm& form,
-                     scoped_ptr<GetLoginsRequest> request) override;
+                     std::unique_ptr<GetLoginsRequest> request) override;
 
-  scoped_ptr<DBHandler> db_handler_;
+  std::unique_ptr<DBHandler> db_handler_;
 
   DISALLOW_COPY_AND_ASSIGN(PasswordStoreWin);
 };
diff --git a/chrome/browser/password_manager/password_store_win_unittest.cc b/chrome/browser/password_manager/password_store_win_unittest.cc
index 26ac186d..7206c80 100644
--- a/chrome/browser/password_manager/password_store_win_unittest.cc
+++ b/chrome/browser/password_manager/password_store_win_unittest.cc
@@ -2,8 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "chrome/browser/password_manager/password_store_win.h"
+
 #include <windows.h>
 
+#include <memory>
 #include <string>
 #include <vector>
 
@@ -11,13 +14,12 @@
 #include "base/bind_helpers.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
+#include "base/memory/ptr_util.h"
 #include "base/message_loop/message_loop.h"
 #include "base/stl_util.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/thread_task_runner_handle.h"
 #include "base/time/time.h"
-#include "chrome/browser/password_manager/password_store_win.h"
 #include "chrome/test/base/testing_profile.h"
 #include "components/os_crypt/ie7_password_win.h"
 #include "components/password_manager/core/browser/password_manager_test_utils.h"
@@ -127,7 +129,7 @@
         BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI),
         BrowserThread::GetMessageLoopProxyForThread(BrowserThread::DB));
     // Need to add at least one table so the database gets created.
-    wdbs_->AddTable(scoped_ptr<WebDatabaseTable>(new LoginsTable()));
+    wdbs_->AddTable(std::unique_ptr<WebDatabaseTable>(new LoginsTable()));
     wdbs_->LoadDatabase();
     wds_ = new PasswordWebDataService(
         wdbs_,
@@ -161,7 +163,7 @@
     return new PasswordStoreWin(
         base::ThreadTaskRunnerHandle::Get(),
         BrowserThread::GetMessageLoopProxyForThread(BrowserThread::DB),
-        make_scoped_ptr(new LoginDatabase(test_login_db_file_path())),
+        base::WrapUnique(new LoginDatabase(test_login_db_file_path())),
         wds_.get());
   }
 
@@ -171,7 +173,7 @@
   content::TestBrowserThread db_thread_;
 
   base::ScopedTempDir temp_dir_;
-  scoped_ptr<TestingProfile> profile_;
+  std::unique_ptr<TestingProfile> profile_;
   scoped_refptr<PasswordWebDataService> wds_;
   scoped_refptr<WebDatabaseService> wdbs_;
   scoped_refptr<PasswordStore> store_;
@@ -232,7 +234,7 @@
     L"",
     true, false, 1,
   };
-  scoped_ptr<PasswordForm> form =
+  std::unique_ptr<PasswordForm> form =
       CreatePasswordFormFromDataForTesting(form_data);
 
   // The returned form will not have 'action' or '*_element' fields set. This
@@ -279,7 +281,7 @@
     L"",
     true, false, 1,
   };
-  scoped_ptr<PasswordForm> form =
+  std::unique_ptr<PasswordForm> form =
       CreatePasswordFormFromDataForTesting(form_data);
 
   MockPasswordStoreConsumer consumer;
@@ -328,7 +330,7 @@
     L"",
     true, false, 1,
   };
-  scoped_ptr<PasswordForm> form =
+  std::unique_ptr<PasswordForm> form =
       CreatePasswordFormFromDataForTesting(form_data);
 
   PasswordFormData expected_form_data = {
@@ -384,7 +386,7 @@
     L"",
     true, false, 1,
   };
-  scoped_ptr<PasswordForm> form =
+  std::unique_ptr<PasswordForm> form =
       CreatePasswordFormFromDataForTesting(form_data);
 
   MockPasswordStoreConsumer consumer;
diff --git a/chrome/browser/password_manager/password_store_x.cc b/chrome/browser/password_manager/password_store_x.cc
index 6aa9bc2..1cfa3d0 100644
--- a/chrome/browser/password_manager/password_store_x.cc
+++ b/chrome/browser/password_manager/password_store_x.cc
@@ -28,9 +28,10 @@
 
 namespace {
 
-bool AddLoginToBackend(const scoped_ptr<PasswordStoreX::NativeBackend>& backend,
-                       const PasswordForm& form,
-                       PasswordStoreChangeList* changes) {
+bool AddLoginToBackend(
+    const std::unique_ptr<PasswordStoreX::NativeBackend>& backend,
+    const PasswordForm& form,
+    PasswordStoreChangeList* changes) {
   *changes = backend->AddLogin(form);
   return (!changes->empty() &&
           changes->back().type() == PasswordStoreChange::ADD);
@@ -61,7 +62,7 @@
 PasswordStoreX::PasswordStoreX(
     scoped_refptr<base::SingleThreadTaskRunner> main_thread_runner,
     scoped_refptr<base::SingleThreadTaskRunner> db_thread_runner,
-    scoped_ptr<password_manager::LoginDatabase> login_db,
+    std::unique_ptr<password_manager::LoginDatabase> login_db,
     NativeBackend* backend)
     : PasswordStoreDefault(main_thread_runner,
                            db_thread_runner,
diff --git a/chrome/browser/password_manager/password_store_x.h b/chrome/browser/password_manager/password_store_x.h
index b27d39d..a33709d 100644
--- a/chrome/browser/password_manager/password_store_x.h
+++ b/chrome/browser/password_manager/password_store_x.h
@@ -7,10 +7,10 @@
 
 #include <stddef.h>
 
+#include <memory>
 #include <vector>
 
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/scoped_vector.h"
 #include "base/time/time.h"
 #include "components/password_manager/core/browser/password_store_default.h"
@@ -91,7 +91,7 @@
   // case this PasswordStoreX will act the same as PasswordStoreDefault.
   PasswordStoreX(scoped_refptr<base::SingleThreadTaskRunner> main_thread_runner,
                  scoped_refptr<base::SingleThreadTaskRunner> db_thread_runner,
-                 scoped_ptr<password_manager::LoginDatabase> login_db,
+                 std::unique_ptr<password_manager::LoginDatabase> login_db,
                  NativeBackend* backend);
 
  private:
@@ -142,7 +142,7 @@
   ssize_t MigrateLogins();
 
   // The native backend in use, or NULL if none.
-  scoped_ptr<NativeBackend> backend_;
+  std::unique_ptr<NativeBackend> backend_;
   // Whether we have already attempted migration to the native store.
   bool migration_checked_;
   // Whether we should allow falling back to the default store. If there is
diff --git a/chrome/browser/password_manager/password_store_x_unittest.cc b/chrome/browser/password_manager/password_store_x_unittest.cc
index 81a84f9..85bb8e9e0 100644
--- a/chrome/browser/password_manager/password_store_x_unittest.cc
+++ b/chrome/browser/password_manager/password_store_x_unittest.cc
@@ -5,6 +5,7 @@
 #include "chrome/browser/password_manager/password_store_x.h"
 
 #include <stddef.h>
+
 #include <string>
 #include <utility>
 
@@ -12,6 +13,7 @@
 #include "base/bind_helpers.h"
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
+#include "base/memory/ptr_util.h"
 #include "base/run_loop.h"
 #include "base/stl_util.h"
 #include "base/strings/string_util.h"
@@ -329,7 +331,7 @@
   SetupTempDir();
   store_ = new PasswordStoreX(
       base::ThreadTaskRunnerHandle::Get(), base::ThreadTaskRunnerHandle::Get(),
-      make_scoped_ptr(
+      base::WrapUnique(
           new password_manager::LoginDatabase(test_login_db_file_path())),
       GetBackend(backend_type_));
   store_->Init(syncer::SyncableService::StartSyncFlare());
@@ -400,7 +402,7 @@
 }
 
 TEST_P(PasswordStoreXTest, Notifications) {
-  scoped_ptr<password_manager::LoginDatabase> login_db(
+  std::unique_ptr<password_manager::LoginDatabase> login_db(
       new password_manager::LoginDatabase(test_login_db_file_path()));
   scoped_refptr<PasswordStoreX> store(new PasswordStoreX(
       base::ThreadTaskRunnerHandle::Get(), base::ThreadTaskRunnerHandle::Get(),
@@ -414,7 +416,7 @@
       L"password_element",             L"username_value",
       L"password_value",               true,
       false,                           1};
-  scoped_ptr<PasswordForm> form =
+  std::unique_ptr<PasswordForm> form =
       CreatePasswordFormFromDataForTesting(form_data);
 
   password_manager::MockPasswordStoreObserver observer;
@@ -479,7 +481,7 @@
   InitExpectedForms(false, 50, &expected_blacklisted);
 
   const base::FilePath login_db_file = test_login_db_file_path();
-  scoped_ptr<password_manager::LoginDatabase> login_db(
+  std::unique_ptr<password_manager::LoginDatabase> login_db(
       new password_manager::LoginDatabase(login_db_file));
   ASSERT_TRUE(login_db->Init());
 
diff --git a/chrome/browser/password_manager/save_password_infobar_delegate.cc b/chrome/browser/password_manager/save_password_infobar_delegate.cc
index fe309bb..e1dc8c8 100644
--- a/chrome/browser/password_manager/save_password_infobar_delegate.cc
+++ b/chrome/browser/password_manager/save_password_infobar_delegate.cc
@@ -6,6 +6,7 @@
 
 #include <utility>
 
+#include "base/memory/ptr_util.h"
 #include "base/metrics/histogram.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/profiles/profile.h"
@@ -25,7 +26,7 @@
 // static
 void SavePasswordInfoBarDelegate::Create(
     content::WebContents* web_contents,
-    scoped_ptr<password_manager::PasswordFormManager> form_to_save) {
+    std::unique_ptr<password_manager::PasswordFormManager> form_to_save) {
   Profile* profile =
       Profile::FromBrowserContext(web_contents->GetBrowserContext());
   sync_driver::SyncService* sync_service =
@@ -37,7 +38,7 @@
       password_bubble_experiment::ShouldShowSavePromptFirstRunExperience(
           sync_service, profile->GetPrefs());
   InfoBarService::FromWebContents(web_contents)
-      ->AddInfoBar(CreateSavePasswordInfoBar(make_scoped_ptr(
+      ->AddInfoBar(CreateSavePasswordInfoBar(base::WrapUnique(
           new SavePasswordInfoBarDelegate(web_contents, std::move(form_to_save),
                                           is_smartlock_branding_enabled,
                                           should_show_first_run_experience))));
@@ -56,7 +57,7 @@
 
 SavePasswordInfoBarDelegate::SavePasswordInfoBarDelegate(
     content::WebContents* web_contents,
-    scoped_ptr<password_manager::PasswordFormManager> form_to_save,
+    std::unique_ptr<password_manager::PasswordFormManager> form_to_save,
     bool is_smartlock_branding_enabled,
     bool should_show_first_run_experience)
     : PasswordManagerInfoBarDelegate(),
diff --git a/chrome/browser/password_manager/save_password_infobar_delegate.h b/chrome/browser/password_manager/save_password_infobar_delegate.h
index db7a3d8..112fdbe4 100644
--- a/chrome/browser/password_manager/save_password_infobar_delegate.h
+++ b/chrome/browser/password_manager/save_password_infobar_delegate.h
@@ -5,8 +5,9 @@
 #ifndef CHROME_BROWSER_PASSWORD_MANAGER_SAVE_PASSWORD_INFOBAR_DELEGATE_H_
 #define CHROME_BROWSER_PASSWORD_MANAGER_SAVE_PASSWORD_INFOBAR_DELEGATE_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/timer/elapsed_timer.h"
 #include "chrome/browser/password_manager/password_manager_infobar_delegate.h"
 #include "components/infobars/core/confirm_infobar_delegate.h"
@@ -35,7 +36,7 @@
   // for |web_contents|.
   static void Create(
       content::WebContents* web_contents,
-      scoped_ptr<password_manager::PasswordFormManager> form_to_save);
+      std::unique_ptr<password_manager::PasswordFormManager> form_to_save);
 
   ~SavePasswordInfoBarDelegate() override;
 
@@ -52,14 +53,14 @@
   // Makes a ctor available in tests.
   SavePasswordInfoBarDelegate(
       content::WebContents* web_contents,
-      scoped_ptr<password_manager::PasswordFormManager> form_to_save,
+      std::unique_ptr<password_manager::PasswordFormManager> form_to_save,
       bool is_smartlock_branding_enabled,
       bool should_show_first_run_experience);
 
  private:
   // The PasswordFormManager managing the form we're asking the user about,
   // and should update as per her decision.
-  scoped_ptr<password_manager::PasswordFormManager> form_to_save_;
+  std::unique_ptr<password_manager::PasswordFormManager> form_to_save_;
 
   // Used to track the results we get from the info bar.
   password_manager::metrics_util::UIDismissalReason infobar_response_;
@@ -81,7 +82,7 @@
 
 // Creates the platform-specific SavePassword InfoBar. This function is defined
 // in platform-specific .cc (or .mm) files.
-scoped_ptr<infobars::InfoBar> CreateSavePasswordInfoBar(
-    scoped_ptr<SavePasswordInfoBarDelegate> delegate);
+std::unique_ptr<infobars::InfoBar> CreateSavePasswordInfoBar(
+    std::unique_ptr<SavePasswordInfoBarDelegate> delegate);
 
 #endif  // CHROME_BROWSER_PASSWORD_MANAGER_SAVE_PASSWORD_INFOBAR_DELEGATE_H_
diff --git a/chrome/browser/password_manager/save_password_infobar_delegate_unittest.cc b/chrome/browser/password_manager/save_password_infobar_delegate_unittest.cc
index 5993b99..25698d1 100644
--- a/chrome/browser/password_manager/save_password_infobar_delegate_unittest.cc
+++ b/chrome/browser/password_manager/save_password_infobar_delegate_unittest.cc
@@ -45,7 +45,7 @@
  public:
   TestSavePasswordInfobarDelegate(
       content::WebContents* web_contents,
-      scoped_ptr<password_manager::PasswordFormManager> form_to_save,
+      std::unique_ptr<password_manager::PasswordFormManager> form_to_save,
       bool should_show_first_run_experience)
       : SavePasswordInfoBarDelegate(web_contents,
                                     std::move(form_to_save),
@@ -67,11 +67,12 @@
 
   PrefService* prefs();
   const autofill::PasswordForm& test_form() { return test_form_; }
-  scoped_ptr<MockPasswordFormManager> CreateMockFormManager();
+  std::unique_ptr<MockPasswordFormManager> CreateMockFormManager();
 
  protected:
-  scoped_ptr<ConfirmInfoBarDelegate> CreateDelegate(
-      scoped_ptr<password_manager::PasswordFormManager> password_form_manager,
+  std::unique_ptr<ConfirmInfoBarDelegate> CreateDelegate(
+      std::unique_ptr<password_manager::PasswordFormManager>
+          password_form_manager,
       bool should_show_first_run_experience);
 
   password_manager::StubPasswordManagerClient client_;
@@ -97,20 +98,21 @@
   return profile->GetPrefs();
 }
 
-scoped_ptr<MockPasswordFormManager>
+std::unique_ptr<MockPasswordFormManager>
 SavePasswordInfoBarDelegateTest::CreateMockFormManager() {
-  return scoped_ptr<MockPasswordFormManager>(new MockPasswordFormManager(
+  return std::unique_ptr<MockPasswordFormManager>(new MockPasswordFormManager(
       &password_manager_, &client_, driver_.AsWeakPtr(), test_form()));
 }
 
-scoped_ptr<ConfirmInfoBarDelegate>
+std::unique_ptr<ConfirmInfoBarDelegate>
 SavePasswordInfoBarDelegateTest::CreateDelegate(
-    scoped_ptr<password_manager::PasswordFormManager> password_form_manager,
+    std::unique_ptr<password_manager::PasswordFormManager>
+        password_form_manager,
     bool should_show_first_run_experience) {
-  scoped_ptr<ConfirmInfoBarDelegate> delegate(
-      new TestSavePasswordInfobarDelegate(
-          web_contents(), std::move(password_form_manager),
-          should_show_first_run_experience));
+  std::unique_ptr<ConfirmInfoBarDelegate> delegate(
+      new TestSavePasswordInfobarDelegate(web_contents(),
+                                          std::move(password_form_manager),
+                                          should_show_first_run_experience));
   return delegate;
 }
 
@@ -123,20 +125,20 @@
 }
 
 TEST_F(SavePasswordInfoBarDelegateTest, CancelTestCredentialSourceAPI) {
-  scoped_ptr<MockPasswordFormManager> password_form_manager(
+  std::unique_ptr<MockPasswordFormManager> password_form_manager(
       CreateMockFormManager());
   EXPECT_CALL(*password_form_manager.get(), PermanentlyBlacklist());
-  scoped_ptr<ConfirmInfoBarDelegate> infobar(
+  std::unique_ptr<ConfirmInfoBarDelegate> infobar(
       CreateDelegate(std::move(password_form_manager), false));
   EXPECT_TRUE(infobar->Cancel());
 }
 
 TEST_F(SavePasswordInfoBarDelegateTest,
        CancelTestCredentialSourcePasswordManager) {
-  scoped_ptr<MockPasswordFormManager> password_form_manager(
+  std::unique_ptr<MockPasswordFormManager> password_form_manager(
       CreateMockFormManager());
   EXPECT_CALL(*password_form_manager.get(), PermanentlyBlacklist());
-  scoped_ptr<ConfirmInfoBarDelegate> infobar(
+  std::unique_ptr<ConfirmInfoBarDelegate> infobar(
       CreateDelegate(std::move(password_form_manager), false));
   EXPECT_TRUE(infobar->Cancel());
 }
@@ -146,9 +148,9 @@
   using password_manager::CredentialSourceType;
   prefs()->SetBoolean(
       password_manager::prefs::kWasSavePrompFirstRunExperienceShown, false);
-  scoped_ptr<MockPasswordFormManager> password_form_manager(
+  std::unique_ptr<MockPasswordFormManager> password_form_manager(
       CreateMockFormManager());
-  scoped_ptr<ConfirmInfoBarDelegate> infobar(
+  std::unique_ptr<ConfirmInfoBarDelegate> infobar(
       CreateDelegate(std::move(password_form_manager), true));
   EXPECT_TRUE(infobar->Cancel());
   infobar.reset();
@@ -161,9 +163,9 @@
   using password_manager::CredentialSourceType;
   prefs()->SetBoolean(
       password_manager::prefs::kWasSavePrompFirstRunExperienceShown, false);
-  scoped_ptr<MockPasswordFormManager> password_form_manager(
+  std::unique_ptr<MockPasswordFormManager> password_form_manager(
       CreateMockFormManager());
-  scoped_ptr<ConfirmInfoBarDelegate> infobar(
+  std::unique_ptr<ConfirmInfoBarDelegate> infobar(
       CreateDelegate(std::move(password_form_manager), false));
   EXPECT_TRUE(infobar->Cancel());
   infobar.reset();
diff --git a/chrome/browser/password_manager/simple_password_store_mac.cc b/chrome/browser/password_manager/simple_password_store_mac.cc
index 8d4171cc..f479a9ec 100644
--- a/chrome/browser/password_manager/simple_password_store_mac.cc
+++ b/chrome/browser/password_manager/simple_password_store_mac.cc
@@ -9,7 +9,7 @@
 SimplePasswordStoreMac::SimplePasswordStoreMac(
     scoped_refptr<base::SingleThreadTaskRunner> main_thread_runner,
     scoped_refptr<base::SingleThreadTaskRunner> background_thread_runner,
-    scoped_ptr<password_manager::LoginDatabase> login_db)
+    std::unique_ptr<password_manager::LoginDatabase> login_db)
     : PasswordStoreDefault(main_thread_runner,
                            background_thread_runner,
                            std::move(login_db)) {
@@ -22,7 +22,7 @@
 
 void SimplePasswordStoreMac::InitWithTaskRunner(
     scoped_refptr<base::SingleThreadTaskRunner> background_task_runner,
-    scoped_ptr<password_manager::LoginDatabase> login_db) {
+    std::unique_ptr<password_manager::LoginDatabase> login_db) {
   db_thread_runner_ = background_task_runner;
   DCHECK(GetBackgroundTaskRunner()->BelongsToCurrentThread());
   set_login_db(std::move(login_db));
diff --git a/chrome/browser/password_manager/simple_password_store_mac.h b/chrome/browser/password_manager/simple_password_store_mac.h
index 0f36dd2f..4c95d56 100644
--- a/chrome/browser/password_manager/simple_password_store_mac.h
+++ b/chrome/browser/password_manager/simple_password_store_mac.h
@@ -17,14 +17,14 @@
   SimplePasswordStoreMac(
       scoped_refptr<base::SingleThreadTaskRunner> main_thread_runner,
       scoped_refptr<base::SingleThreadTaskRunner> background_thread_runner,
-      scoped_ptr<password_manager::LoginDatabase> login_db);
+      std::unique_ptr<password_manager::LoginDatabase> login_db);
 
   // Sets the background thread and LoginDatabase. |login_db| should be already
   // inited. The method isn't necessary to call if the constructor already got
   // the correct parameters.
   void InitWithTaskRunner(
       scoped_refptr<base::SingleThreadTaskRunner> background_task_runner,
-      scoped_ptr<password_manager::LoginDatabase> login_db);
+      std::unique_ptr<password_manager::LoginDatabase> login_db);
 
   using PasswordStoreDefault::GetBackgroundTaskRunner;
 
diff --git a/chrome/browser/password_manager/simple_password_store_mac_unittest.cc b/chrome/browser/password_manager/simple_password_store_mac_unittest.cc
index 26f459b..a2a641f 100644
--- a/chrome/browser/password_manager/simple_password_store_mac_unittest.cc
+++ b/chrome/browser/password_manager/simple_password_store_mac_unittest.cc
@@ -41,7 +41,7 @@
     OSCrypt::UseMockKeychain(true);
 
     // Setup LoginDatabase.
-    scoped_ptr<password_manager::LoginDatabase> login_db(
+    std::unique_ptr<password_manager::LoginDatabase> login_db(
         new password_manager::LoginDatabase(test_login_db_file_path()));
     scoped_refptr<base::SingleThreadTaskRunner> file_task_runner =
         BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE);
@@ -51,7 +51,7 @@
         base::Bind(&InitOnBackgroundThread, base::Unretained(login_db.get())));
     store_ = new SimplePasswordStoreMac(
         BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI), nullptr,
-        scoped_ptr<password_manager::LoginDatabase>());
+        std::unique_ptr<password_manager::LoginDatabase>());
     file_task_runner->PostTask(
         FROM_HERE,
         base::Bind(&SimplePasswordStoreMac::InitWithTaskRunner, store_,
diff --git a/chrome/browser/password_manager/update_password_infobar_delegate.cc b/chrome/browser/password_manager/update_password_infobar_delegate.cc
index 7044a3ba..23d06e6aa 100644
--- a/chrome/browser/password_manager/update_password_infobar_delegate.cc
+++ b/chrome/browser/password_manager/update_password_infobar_delegate.cc
@@ -4,6 +4,7 @@
 
 #include "chrome/browser/password_manager/update_password_infobar_delegate.h"
 
+#include "base/memory/ptr_util.h"
 #include "base/numerics/safe_conversions.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/password_manager/chrome_password_manager_client.h"
@@ -22,14 +23,14 @@
 // static
 void UpdatePasswordInfoBarDelegate::Create(
     content::WebContents* web_contents,
-    scoped_ptr<password_manager::PasswordFormManager> form_to_save) {
+    std::unique_ptr<password_manager::PasswordFormManager> form_to_save) {
   const bool is_smartlock_branding_enabled =
       password_bubble_experiment::IsSmartLockBrandingEnabled(
           ProfileSyncServiceFactory::GetForProfile(
               Profile::FromBrowserContext(web_contents->GetBrowserContext())));
   InfoBarService::FromWebContents(web_contents)
-      ->AddInfoBar(make_scoped_ptr(new UpdatePasswordInfoBar(
-          make_scoped_ptr(new UpdatePasswordInfoBarDelegate(
+      ->AddInfoBar(base::WrapUnique(new UpdatePasswordInfoBar(
+          base::WrapUnique(new UpdatePasswordInfoBarDelegate(
               web_contents, std::move(form_to_save),
               is_smartlock_branding_enabled)))));
 }
@@ -58,7 +59,7 @@
 
 UpdatePasswordInfoBarDelegate::UpdatePasswordInfoBarDelegate(
     content::WebContents* web_contents,
-    scoped_ptr<password_manager::PasswordFormManager> form_to_update,
+    std::unique_ptr<password_manager::PasswordFormManager> form_to_update,
     bool is_smartlock_branding_enabled)
     : is_smartlock_branding_enabled_(is_smartlock_branding_enabled) {
   // TODO(melandory): Add histograms, crbug.com/577129
diff --git a/chrome/browser/password_manager/update_password_infobar_delegate.h b/chrome/browser/password_manager/update_password_infobar_delegate.h
index ee41a28..2a221d28 100644
--- a/chrome/browser/password_manager/update_password_infobar_delegate.h
+++ b/chrome/browser/password_manager/update_password_infobar_delegate.h
@@ -5,10 +5,10 @@
 #ifndef CHROME_BROWSER_PASSWORD_MANAGER_UPDATE_PASSWORD_INFOBAR_DELEGATE_H_
 #define CHROME_BROWSER_PASSWORD_MANAGER_UPDATE_PASSWORD_INFOBAR_DELEGATE_H_
 
+#include <memory>
 #include <vector>
 
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "chrome/browser/password_manager/password_manager_infobar_delegate.h"
 #include "chrome/browser/ui/passwords/manage_passwords_state.h"
 #include "components/password_manager/core/browser/password_form_manager.h"
@@ -26,7 +26,7 @@
  public:
   static void Create(
       content::WebContents* web_contents,
-      scoped_ptr<password_manager::PasswordFormManager> form_to_update);
+      std::unique_ptr<password_manager::PasswordFormManager> form_to_update);
 
   ~UpdatePasswordInfoBarDelegate() override;
 
@@ -53,7 +53,7 @@
  private:
   UpdatePasswordInfoBarDelegate(
       content::WebContents* web_contents,
-      scoped_ptr<password_manager::PasswordFormManager> form_to_update,
+      std::unique_ptr<password_manager::PasswordFormManager> form_to_update,
       bool is_smartlock_branding_enabled);
 
   // ConfirmInfoBarDelegate:
diff --git a/chrome/browser/policy/DEPS b/chrome/browser/policy/DEPS
index 468cb591..382e9d0 100644
--- a/chrome/browser/policy/DEPS
+++ b/chrome/browser/policy/DEPS
@@ -1,6 +1,7 @@
 include_rules = [
   "+chrome",
   "+chromeos",
+  "+components/arc/test",
   "+components/drive/drive_pref_names.h",
   "+components/user_manager",
   "+content/public/browser",
diff --git a/chrome/browser/policy/configuration_policy_handler_list_factory.cc b/chrome/browser/policy/configuration_policy_handler_list_factory.cc
index 4c33391..58f9c908 100644
--- a/chrome/browser/policy/configuration_policy_handler_list_factory.cc
+++ b/chrome/browser/policy/configuration_policy_handler_list_factory.cc
@@ -499,6 +499,9 @@
   { key::kUnifiedDesktopEnabledByDefault,
     prefs::kUnifiedDesktopEnabledByDefault,
     base::Value::TYPE_BOOLEAN },
+  { key::kArcEnabled,
+    prefs::kArcEnabled,
+    base::Value::TYPE_BOOLEAN },
 #endif  // defined(OS_CHROMEOS)
 
 // Metrics reporting is controlled by a platform specific policy for ChromeOS
diff --git a/chrome/browser/policy/policy_browsertest.cc b/chrome/browser/policy/policy_browsertest.cc
index eb72c63..e803251 100644
--- a/chrome/browser/policy/policy_browsertest.cc
+++ b/chrome/browser/policy/policy_browsertest.cc
@@ -191,9 +191,19 @@
 #include "ash/shell.h"
 #include "chrome/browser/chromeos/accessibility/accessibility_manager.h"
 #include "chrome/browser/chromeos/accessibility/magnification_manager.h"
+#include "chrome/browser/chromeos/arc/arc_auth_service.h"
 #include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/browser/ui/ash/chrome_screenshot_grabber.h"
+#include "chrome/browser/ui/ash/multi_user/multi_user_util.h"
 #include "chromeos/audio/cras_audio_handler.h"
+#include "chromeos/dbus/dbus_thread_manager.h"
+#include "chromeos/dbus/fake_session_manager_client.h"
+#include "chromeos/dbus/session_manager_client.h"
+#include "components/arc/arc_bridge_service.h"
+#include "components/arc/arc_bridge_service_impl.h"
+#include "components/arc/arc_service_manager.h"
+#include "components/arc/test/fake_arc_bridge_bootstrap.h"
+#include "components/arc/test/fake_arc_bridge_instance.h"
 #include "ui/chromeos/accessibility_types.h"
 #include "ui/keyboard/keyboard_util.h"
 #include "ui/snapshot/screenshot_grabber.h"
@@ -3991,6 +4001,86 @@
   UpdateProviderPolicy(policies);
   EXPECT_FALSE(display_manager->unified_desktop_enabled());
 }
+
+class ArcPolicyTest : public PolicyTest {
+ public:
+  ArcPolicyTest() {}
+  ~ArcPolicyTest() override {}
+
+ protected:
+  void SetUpTest() {
+    arc::ArcAuthService::DisableUIForTesting();
+
+    browser()->profile()->GetPrefs()->SetBoolean(prefs::kArcSignedIn, true);
+    arc::ArcServiceManager::Get()->OnPrimaryUserProfilePrepared(
+        multi_user_util::GetAccountIdFromProfile(browser()->profile()));
+    arc::ArcAuthService::Get()->OnPrimaryUserProfilePrepared(
+        browser()->profile());
+  }
+
+  void TearDownTest() {
+    arc::ArcAuthService::Get()->Shutdown();
+  }
+
+  void SetUpInProcessBrowserTestFixture() override {
+    PolicyTest::SetUpInProcessBrowserTestFixture();
+    fake_session_manager_client_ = new chromeos::FakeSessionManagerClient;
+    fake_session_manager_client_->set_arc_available(true);
+    chromeos::DBusThreadManager::GetSetterForTesting()->SetSessionManagerClient(
+        scoped_ptr<chromeos::SessionManagerClient>(
+            fake_session_manager_client_));
+
+    fake_arc_bridge_instance_.reset(new arc::FakeArcBridgeInstance);
+    arc::ArcServiceManager::SetArcBridgeServiceForTesting(make_scoped_ptr(
+        new arc::ArcBridgeServiceImpl(make_scoped_ptr(
+            new arc::FakeArcBridgeBootstrap(
+                fake_arc_bridge_instance_.get())))));
+  }
+
+ private:
+  chromeos::FakeSessionManagerClient *fake_session_manager_client_;
+  scoped_ptr<arc::FakeArcBridgeInstance> fake_arc_bridge_instance_;
+
+  DISALLOW_COPY_AND_ASSIGN(ArcPolicyTest);
+};
+
+// Test ArcEnabled policy.
+IN_PROC_BROWSER_TEST_F(ArcPolicyTest, ArcEnabled) {
+  SetUpTest();
+
+  const PrefService* const pref = browser()->profile()->GetPrefs();
+  const arc::ArcBridgeService* const arc_bridge_service
+      = arc::ArcBridgeService::Get();
+
+  // ARC is switched off by default.
+  EXPECT_EQ(arc::ArcBridgeService::State::STOPPED, arc_bridge_service->state());
+  EXPECT_FALSE(pref->GetBoolean(prefs::kArcEnabled));
+
+  // Enable ARC.
+  PolicyMap policies;
+  policies.Set(key::kArcEnabled,
+               POLICY_LEVEL_MANDATORY,
+               POLICY_SCOPE_USER,
+               POLICY_SOURCE_CLOUD,
+               new base::FundamentalValue(true),
+               nullptr);
+  UpdateProviderPolicy(policies);
+  EXPECT_TRUE(pref->GetBoolean(prefs::kArcEnabled));
+  EXPECT_EQ(arc::ArcBridgeService::State::READY, arc_bridge_service->state());
+
+  // Disable ARC.
+  policies.Set(key::kArcEnabled,
+               POLICY_LEVEL_MANDATORY,
+               POLICY_SCOPE_USER,
+               POLICY_SOURCE_CLOUD,
+               new base::FundamentalValue(false),
+               nullptr);
+  UpdateProviderPolicy(policies);
+  EXPECT_FALSE(pref->GetBoolean(prefs::kArcEnabled));
+  EXPECT_EQ(arc::ArcBridgeService::State::STOPPED, arc_bridge_service->state());
+
+  TearDownTest();
+}
 #endif  // defined(OS_CHROMEOS)
 
 }  // namespace policy
diff --git a/chrome/browser/resources/chromeos/arc_support/background.js b/chrome/browser/resources/chromeos/arc_support/background.js
index 56c75762..bfeacdc 100644
--- a/chrome/browser/resources/chromeos/arc_support/background.js
+++ b/chrome/browser/resources/chromeos/arc_support/background.js
@@ -52,9 +52,10 @@
 /**
  * Sends a native message to ArcSupportHost.
  * @param {string} code The action code in message.
+ * @param {Object=} opt_Props Extra properties for the message.
  */
-function sendNativeMessage(code) {
-  message = {'action': code};
+function sendNativeMessage(code, opt_Props) {
+  var message = Object.assign({'action': code}, opt_Props);
   port.postMessage(message);
 }
 
@@ -124,15 +125,28 @@
   }
 
   if (pageDivId == 'lso-loading') {
-    webview.src = 'https://accounts.google.com/o/oauth2/programmatic_auth?' +
-                  'scope=https://www.google.com/accounts/OAuthLogin&client_id' +
-                  '=1070009224336-sdh77n7uot3oc99ais00jmuft6sk2fg9.apps.' +
-                  'googleusercontent.com';
+    webview.src = 'https://accounts.google.com/o/oauth2/v2/auth?client_id=' +
+                  '1070009224336-sdh77n7uot3oc99ais00jmuft6sk2fg9.apps.' +
+                  'googleusercontent.com&response_type=code&redirect_uri=oob&' +
+                  'scope=https://www.google.com/accounts/OAuthLogin';
   }
   appWindow.show();
 }
 
 /**
+ * Sets error message.
+ * @param {string} error message.
+ */
+function setErrorMessage(error) {
+  if (!appWindow) {
+    return;
+  }
+  var doc = appWindow.contentWindow.document;
+  var messageElement = doc.getElementById('error-message');
+  messageElement.innerText = error;
+}
+
+/**
  * Shows requested page.
  * @param {int} pageId Index of the page to show. Must be in the array range of
  * UI_PAGES.
@@ -145,9 +159,7 @@
   }
 
   if (UI_PAGES[pageId] == 'error') {
-    var doc = appWindow.contentWindow.document;
-    var messageElement = doc.getElementById('error-message');
-    messageElement.innerText = status;
+    setErrorMessage(status);
   }
   showPage(UI_PAGES[pageId]);
 }
@@ -157,30 +169,53 @@
     var doc = appWindow.contentWindow.document;
     webview = doc.getElementById('arc-support');
 
-    var onWebviewRequestCompleted = function(details) {
-      showPage('lso');
-      var resultUrlPrefix =
-          'https://accounts.google.com/o/oauth2/programmatic_auth?';
-      if (details.statusCode == 200 &&
-          details.url.substring(0, resultUrlPrefix.length) == resultUrlPrefix) {
-        sendNativeMessage('checkAuthCode');
+    var isApprovalResponse = function(url) {
+      var resultUrlPrefix = 'https://accounts.google.com/o/oauth2/approval?';
+      return url.substring(0, resultUrlPrefix.length) == resultUrlPrefix;
+    };
+
+    var onWebviewRequestResponseStarted = function(details) {
+      if (isApprovalResponse(details.url)) {
+        showPage('arc-loading');
       }
     };
 
+    var onWebviewContentLoad = function() {
+      if (!isApprovalResponse(webview.src)) {
+        // Show LSO page when its content is ready.
+        showPage('lso');
+        return;
+      }
+
+      webview.executeScript({code: 'document.title;'}, function(results) {
+        var authCodePrefix = 'Success code=';
+        if (results[0].substring(0, authCodePrefix.length) ==
+            authCodePrefix) {
+          var authCode = results[0].substring(authCodePrefix.length);
+          sendNativeMessage('setAuthCode', {code: authCode});
+        } else {
+          setErrorMessage(appWindow.contentWindow.loadTimeData.getString(
+              'authorizationFailed'));
+          showPage('error');
+        }
+      });
+    };
+
     var requestFilter = {
       urls: ['<all_urls>'],
       types: ['main_frame']
     };
 
-    webview.request.onCompleted.addListener(onWebviewRequestCompleted,
-        requestFilter);
+    webview.request.onResponseStarted.addListener(
+        onWebviewRequestResponseStarted, requestFilter);
+    webview.addEventListener('contentload', onWebviewContentLoad);
 
     var onGetStarted = function() {
-      sendNativeMessage('checkAuthCode');
+      sendNativeMessage('startLso');
     };
 
     var onRetry = function() {
-      sendNativeMessage('checkAuthCode');
+      sendNativeMessage('startLso');
     };
 
     doc.getElementById('get-started').addEventListener('click', onGetStarted);
diff --git a/chrome/browser/resources/chromeos/arc_support/main.html b/chrome/browser/resources/chromeos/arc_support/main.html
index 50a7297..bca639a 100644
--- a/chrome/browser/resources/chromeos/arc_support/main.html
+++ b/chrome/browser/resources/chromeos/arc_support/main.html
@@ -44,7 +44,7 @@
   <div id="lso-loading" class="section" hidden>
     <div class="loading-header"></div>
     <paper-progress class="green" indeterminate></paper-progress>
-    <p class="text-status" i18n-content=progressLSOLoading></p>
+    <p class="text-status" i18n-content=progressLsoLoading></p>
   </div>
   <div id="lso" class="section" hidden>
     <webview id="arc-support" partition="persist:arc_support"></webview>
diff --git a/chrome/browser/resources/history/history.css b/chrome/browser/resources/history/history.css
index 3cf0bd0..810aa55a 100644
--- a/chrome/browser/resources/history/history.css
+++ b/chrome/browser/resources/history/history.css
@@ -38,15 +38,23 @@
   float: left;
 }
 
-#notification-bar.alone {
+#top-container.overflow #notification-bar {
   float: left;
   margin-top: 12px;
 }
 
-html[dir='rtl'] #notification-bar.alone {
+html[dir='rtl'] #top-container.overflow #notification-bar {
   float: right;
 }
 
+#notification-bar span {
+  display: block;
+}
+
+#notification-bar span + span {
+  margin: 1em 0;
+}
+
 #filter-controls,
 #top-container,
 #results-display,
@@ -73,6 +81,10 @@
   float: right;
 }
 
+#top-container.overflow #editing-controls {
+  float: none;
+}
+
 #editing-controls button:first-of-type {
   -webkit-margin-start: 0;
 }
diff --git a/chrome/browser/resources/history/history.js b/chrome/browser/resources/history/history.js
index e67c903..1fac504 100644
--- a/chrome/browser/resources/history/history.js
+++ b/chrome/browser/resources/history/history.js
@@ -644,12 +644,6 @@
     lastDay = thisDay;
   }
 
-  if (loadTimeData.getBoolean('isUserSignedIn')) {
-    var message = loadTimeData.getString(
-        info.hasSyncedResults ? 'hasSyncedResults' : 'noSyncedResults');
-    this.view_.showNotification(message);
-  }
-
   this.updateSearch_();
 };
 
@@ -1167,6 +1161,31 @@
 };
 
 /**
+ * Shows a notification about whether there are any synced results, and whether
+ * there are other forms of browsing history on the server.
+ * @param {boolean} hasSyncedResults Whether there are synced results.
+ * @param {boolean} includeOtherFormsOfBrowsingHistory Whether to include
+ *     a sentence about the existence of other forms of browsing history.
+ */
+HistoryView.prototype.showWebHistoryNotification = function(
+    hasSyncedResults, includeOtherFormsOfBrowsingHistory) {
+  var message = '';
+
+  if (loadTimeData.getBoolean('isUserSignedIn')) {
+    message += '<span>' + loadTimeData.getString(
+        hasSyncedResults ? 'hasSyncedResults' : 'noSyncedResults') + '</span>';
+  }
+
+  if (includeOtherFormsOfBrowsingHistory) {
+    message += ' ' /* A whitespace to separate <span>s. */ + '<span>' +
+        loadTimeData.getString('otherFormsOfBrowsingHistory') + '</span>';
+  }
+
+  if (message)
+    this.showNotification(message, false /* isWarning */);
+};
+
+/**
  * @param {Visit} visit The visit about to be removed from this view.
  */
 HistoryView.prototype.onBeforeRemove = function(visit) {
@@ -1274,15 +1293,15 @@
  */
 HistoryView.prototype.positionNotificationBar = function() {
   var bar = $('notification-bar');
+  var container = $('top-container');
 
-  // If the bar does not fit beside the editing controls, put it into the
-  // overflow state.
-  if (bar.getBoundingClientRect().top >=
-      $('editing-controls').getBoundingClientRect().bottom) {
-    bar.classList.add('alone');
-  } else {
-    bar.classList.remove('alone');
-  }
+  // If the bar does not fit beside the editing controls, or if it contains
+  // more than one message, put it into the overflow state.
+  var shouldOverflow =
+      (bar.getBoundingClientRect().top >=
+           $('editing-controls').getBoundingClientRect().bottom) ||
+      bar.childElementCount > 1;
+  container.classList.toggle('overflow', shouldOverflow);
 };
 
 /**
@@ -2346,6 +2365,19 @@
 }
 
 /**
+ * Called by the history backend after receiving results and after discovering
+ * the existence of other forms of browsing history.
+ * @param {boolean} hasSyncedResults Whether there are synced results.
+ * @param {boolean} includeOtherFormsOfBrowsingHistory Whether to include
+ *     a sentence about the existence of other forms of browsing history.
+ */
+function showNotification(
+    hasSyncedResults, includeOtherFormsOfBrowsingHistory) {
+  historyView.showWebHistoryNotification(
+      hasSyncedResults, includeOtherFormsOfBrowsingHistory);
+}
+
+/**
  * Called by the history backend when history removal is successful.
  */
 function deleteComplete() {
diff --git a/chrome/browser/resources/history/history_mobile.css b/chrome/browser/resources/history/history_mobile.css
index 9f9ce36..2e4bf38 100644
--- a/chrome/browser/resources/history/history_mobile.css
+++ b/chrome/browser/resources/history/history_mobile.css
@@ -13,6 +13,7 @@
 }
 
 body {
+  background-color: rgba(0, 0, 0, .05);
   color: rgb(76, 76, 76);
   font-size: initial;
   height: 100%;
@@ -32,6 +33,7 @@
 }
 
 h1 {
+  color: rgb(34, 34, 34);
   font-weight: bold;
   margin-bottom: 12px;
 }
@@ -87,9 +89,20 @@
   background-position: right 16px center;
 }
 
-#notification-bar.alone {
+#notification-bar {
+  color: rgb(138, 138, 138);
+  font-size: 14px;
+  line-height: 1.5;
+}
+
+#notification-bar span {
+  /* On desktop, notification spans are displayed as separate paragraphs.
+     On mobile, join them into a single paragraph. */
+  display: inline;
+}
+
+#top-container.overflow #notification-bar {
   float: none;
-  font-size: 75%;
   margin: 0;
   padding-bottom: 0;
   padding-top: 0;
@@ -123,6 +136,10 @@
   opacity: 1.0;
 }
 
+.entry {
+  background-color: white;
+}
+
 .entry-box {
   margin-bottom: 0;
   margin-top: 0;
diff --git a/chrome/browser/resources/md_history/history.js b/chrome/browser/resources/md_history/history.js
index f67c06bd0..b3678e8 100644
--- a/chrome/browser/resources/md_history/history.js
+++ b/chrome/browser/resources/md_history/history.js
@@ -100,6 +100,19 @@
 }
 
 /**
+ * Called by the history backend after receiving results and after discovering
+ * the existence of other forms of browsing history.
+ * @param {boolean} hasSyncedResults Whether there are synced results.
+ * @param {boolean} includeOtherFormsOfBrowsingHistory Whether to include
+ *     a sentence about the existence of other forms of browsing history.
+ */
+function showNotification(
+    hasSyncedResults, includeOtherFormsOfBrowsingHistory) {
+  // TODO(msramek): Implement the joint notification about web history and other
+  // forms of browsing history for the MD history page.
+}
+
+/**
  * Receives the synced history data. An empty list means that either there are
  * no foreign sessions, or tab sync is disabled for this profile.
  * |isTabSyncEnabled| makes it possible to distinguish between the cases.
diff --git a/chrome/browser/resources/options/browser_options.html b/chrome/browser/resources/options/browser_options.html
index 77ee6a1..478ec4d5 100644
--- a/chrome/browser/resources/options/browser_options.html
+++ b/chrome/browser/resources/options/browser_options.html
@@ -222,7 +222,7 @@
       </div>
   </section>
 <if expr="chromeos">
-  <section id="andorid-apps-section" guest-visibility="hidden">
+  <section id="android-apps-section" guest-visibility="hidden">
     <h3 i18n-content="androidAppsTitle"></h3>
     <div class="checkbox controlled-setting-with-label">
       <label>
@@ -230,6 +230,8 @@
             metric="Options_AndroidApps" type="checkbox">
         <span>
           <span i18n-content="androidAppsEnabled"></span>
+          <span class="controlled-setting-indicator"
+                pref="arc.enabled"></span>
         </span>
       </label>
     </div>
diff --git a/chrome/browser/resources/options/browser_options.js b/chrome/browser/resources/options/browser_options.js
index 8538abc..514c0284 100644
--- a/chrome/browser/resources/options/browser_options.js
+++ b/chrome/browser/resources/options/browser_options.js
@@ -2327,10 +2327,11 @@
     };
 
     /**
-     * Hides Android Apps settings when they are not available (ChromeOS only).
+     * Hides Android Apps settings when they are not available.
+     * (Chrome OS only).
      */
     BrowserOptions.hideAndroidAppsSection = function() {
-      var section = $('andorid-apps-section');
+      var section = $('android-apps-section');
       if (section)
         section.hidden = true;
     };
diff --git a/chrome/browser/resources/options/clear_browser_data_history_notice_overlay.html b/chrome/browser/resources/options/clear_browser_data_history_notice_overlay.html
new file mode 100644
index 0000000..1a338f8
--- /dev/null
+++ b/chrome/browser/resources/options/clear_browser_data_history_notice_overlay.html
@@ -0,0 +1,13 @@
+<div id="clear-browser-data-history-notice" class="page" hidden>
+  <h1 i18n-content="clearBrowserDataHistoryNoticeTitle"></h1>
+  <div class="content-area">
+    <p i18n-values=".innerHTML:clearBrowserDataHistoryNotice"></p>
+  </div>
+  <div class="action-area">
+    <div class="button-strip">
+      <button id="clear-browser-data-history-notice-ok" class="default-button"
+          i18n-content="ok">
+      </button>
+    </div>
+  </div>
+</div>
diff --git a/chrome/browser/resources/options/clear_browser_data_history_notice_overlay.js b/chrome/browser/resources/options/clear_browser_data_history_notice_overlay.js
new file mode 100644
index 0000000..a96f20f
--- /dev/null
+++ b/chrome/browser/resources/options/clear_browser_data_history_notice_overlay.js
@@ -0,0 +1,45 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/**
+ * @fileoverview A popup that may be shown on top of the Clear Browsing Data
+ *     overlay after the deletion finished.
+ */
+
+cr.define('options', function() {
+  /** @const */ var Page = cr.ui.pageManager.Page;
+  /** @const */ var PageManager = cr.ui.pageManager.PageManager;
+
+  /**
+   * A notice to be shown atop of the Clear Browsing Data overlay after
+   * the deletion of browsing history, informing the user that other forms
+   * of browsing history are still available.
+   * @constructor
+   * @extends {cr.ui.pageManager.Page}
+   */
+  function ClearBrowserDataHistoryNotice() {
+    Page.call(this, 'clearBrowserDataHistoryNotice',
+                    loadTimeData.getString('clearBrowserDataOverlayTabTitle'),
+                    'clear-browser-data-history-notice');
+  }
+
+  cr.addSingletonGetter(ClearBrowserDataHistoryNotice);
+
+  ClearBrowserDataHistoryNotice.prototype = {
+    __proto__: Page.prototype,
+
+    /** @override */
+    initializePage: function() {
+      $('clear-browser-data-history-notice-ok').onclick = function() {
+        // Close this popup, and the Clear Browsing Data overlay below it.
+        PageManager.closeOverlay();
+        ClearBrowserDataOverlay.dismiss();
+      };
+    },
+  };
+
+  return {
+    ClearBrowserDataHistoryNotice: ClearBrowserDataHistoryNotice
+  };
+});
diff --git a/chrome/browser/resources/options/clear_browser_data_overlay.css b/chrome/browser/resources/options/clear_browser_data_overlay.css
index fca5b8d..f18d8534 100644
--- a/chrome/browser/resources/options/clear_browser_data_overlay.css
+++ b/chrome/browser/resources/options/clear_browser_data_overlay.css
@@ -48,10 +48,35 @@
   display: none;
 }
 
+#some-stuff-remains-footer {
+  display: block;
+}
+
 #some-stuff-remains-footer > p {
-  margin: 0;
+  -webkit-padding-start: 33px;
 }
 
 #some-stuff-remains-footer button {
   padding: 0;
 }
+
+#clear-browser-data-history-footer {
+  background: url(googleg.svg) left no-repeat;
+  margin: 0 0 0.8em 0;
+  min-height: 16px;
+}
+
+#clear-browser-data-general-footer {
+  background: url(info.svg) left no-repeat;
+  margin: 0;
+  min-height: 18px;
+}
+
+html[dir='rtl'] #clear-browser-data-history-footer,
+html[dir='rtl'] #clear-browser-data-general-footer {
+  background-position: right center;
+}
+
+#clear-browser-data-history-notice {
+  width: 300px;
+}
diff --git a/chrome/browser/resources/options/clear_browser_data_overlay.html b/chrome/browser/resources/options/clear_browser_data_overlay.html
index f3cb5c9..3ddd153 100644
--- a/chrome/browser/resources/options/clear_browser_data_overlay.html
+++ b/chrome/browser/resources/options/clear_browser_data_overlay.html
@@ -107,7 +107,9 @@
     </div>
   </div>
   <div id="some-stuff-remains-footer" class="gray-bottom-bar">
-    <p>
+    <p id="clear-browser-data-history-footer"
+        i18n-values=".innerHTML:clearBrowserDataHistoryFooter" hidden></p>
+    <p id="clear-browser-data-general-footer">
       <span><!--This is filled by JavaScript--></span>
       <a id="clear-browser-data-footer-learn-more-link" hidden
           target="_blank" i18n-content="learnMore"
diff --git a/chrome/browser/resources/options/clear_browser_data_overlay.js b/chrome/browser/resources/options/clear_browser_data_overlay.js
index 5ad1a89..91c1812 100644
--- a/chrome/browser/resources/options/clear_browser_data_overlay.js
+++ b/chrome/browser/resources/options/clear_browser_data_overlay.js
@@ -100,9 +100,11 @@
      * clear browsing data dialog and warns that the deletion may be synced.
      * @param {boolean} simple Whether to use a simple support string.
      * @param {boolean} syncing Whether the user uses Sync.
+     * @param {boolean} showHistoryFooter Whether to show an additional footer
+     *     about other forms of browsing history.
      * @private
      */
-    createFooter_: function(simple, syncing) {
+    createFooter_: function(simple, syncing, showHistoryFooter) {
       // The localized string is of the form "Saved [content settings] and
       // {search engines} will not be cleared and may reflect your browsing
       // habits.", or of the form "Some settings that may reflect browsing
@@ -166,15 +168,19 @@
       $('clear-browser-data-old-learn-more-link').hidden = simple;
       $('clear-browser-data-footer-learn-more-link').hidden = !simple;
       $('flash-storage-settings').hidden = simple;
+      $('clear-browser-data-history-footer').hidden = !showHistoryFooter;
     },
 
     /**
      * Shows or hides the sync warning based on whether the user uses Sync.
      * @param {boolean} syncing Whether the user uses Sync.
+     * @param {boolean} showHistoryFooter Whether the user syncs history
+     *     and conditions are met to show an additional history footer.
      * @private
      */
-    updateSyncWarning_: function(syncing) {
+    updateSyncWarningAndHistoryFooter_: function(syncing, showHistoryFooter) {
       $('clear-browser-data-sync-warning').hidden = !syncing;
+      $('clear-browser-data-history-footer').hidden = !showHistoryFooter;
     },
 
     /**
@@ -283,12 +289,16 @@
     ClearBrowserDataOverlay.getInstance().updateCounter_(pref_name, text);
   };
 
-  ClearBrowserDataOverlay.createFooter = function(simple, syncing) {
-    ClearBrowserDataOverlay.getInstance().createFooter_(simple, syncing);
+  ClearBrowserDataOverlay.createFooter = function(
+      simple, syncing, showHistoryFooter) {
+    ClearBrowserDataOverlay.getInstance().createFooter_(
+      simple, syncing, showHistoryFooter);
   };
 
-  ClearBrowserDataOverlay.updateSyncWarning = function(syncing) {
-    ClearBrowserDataOverlay.getInstance().updateSyncWarning_(syncing);
+  ClearBrowserDataOverlay.updateSyncWarningAndHistoryFooter = function(
+      syncing, showHistoryFooter) {
+    ClearBrowserDataOverlay.getInstance().updateSyncWarningAndHistoryFooter_(
+        syncing, showHistoryFooter);
   };
 
   ClearBrowserDataOverlay.setClearing = function(clearing) {
@@ -303,13 +313,17 @@
     $('clear-browser-data-info-banner').innerText = text;
   };
 
-  ClearBrowserDataOverlay.doneClearing = function() {
+  ClearBrowserDataOverlay.doneClearing = function(showHistoryNotice) {
     // The delay gives the user some feedback that the clearing
     // actually worked. Otherwise the dialog just vanishes instantly in most
     // cases.
     window.setTimeout(function() {
       ClearBrowserDataOverlay.setClearing(false);
-      ClearBrowserDataOverlay.dismiss();
+
+      if (showHistoryNotice)
+        PageManager.showPageByName('clearBrowserDataHistoryNotice');
+      else
+        ClearBrowserDataOverlay.dismiss();
     }, 200);
   };
 
diff --git a/chrome/browser/resources/options/googleg.svg b/chrome/browser/resources/options/googleg.svg
new file mode 100644
index 0000000..7a1ad34
--- /dev/null
+++ b/chrome/browser/resources/options/googleg.svg
@@ -0,0 +1,7 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="16px" height="16px" viewBox="0 0 16 16">
+    <path fill="#4285F4" d="M14.72 8.16c0-.46-.05-.81-.11-1.16H8v2.4h3.97c-.1.62-.52 1.59-1.45 2.26v1.64h2.12c1.32-1.21 2.08-3.01 2.08-5.14z"/>
+    <path fill="#34A853" d="M8 15c1.89 0 3.47-.63 4.63-1.69l-2.12-1.64c-.6.43-1.42.75-2.51.75-1.89 0-3.48-1.24-4.08-2.96H1.75v1.69C2.9 13.43 5.26 15 8 15z"/>
+    <path fill="#FBBC05" d="M3.92 9.45C3.77 9 3.66 8.51 3.66 8s.1-1 .26-1.45V4.86H1.75C1.27 5.81 1 6.87 1 8s.27 2.19.75 3.14l2.17-1.69z"/>
+    <path fill="#EA4335" d="M8 3.58c1.36 0 2.27.58 2.79 1.08l1.9-1.83C11.47 1.69 9.89 1 8 1 5.26 1 2.9 2.57 1.75 4.86l2.17 1.69C4.52 4.83 6.11 3.58 8 3.58z"/>
+    <path fill="none" d="M1 1h14v14H1z"/>
+</svg>
diff --git a/chrome/browser/resources/options/info.svg b/chrome/browser/resources/options/info.svg
new file mode 100644
index 0000000..e76e247
--- /dev/null
+++ b/chrome/browser/resources/options/info.svg
@@ -0,0 +1,4 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="18px" height="18px" viewBox="0 0 48 48" fill="#757575">
+    <path d="M0 0h48v48H0z" fill="none"/>
+    <path d="M24 4C12.95 4 4 12.95 4 24s8.95 20 20 20 20-8.95 20-20S35.05 4 24 4zm2 30h-4V22h4v12zm0-16h-4v-4h4v4z"/>
+</svg>
diff --git a/chrome/browser/resources/options/options.html b/chrome/browser/resources/options/options.html
index e6e1ee2b..6d62f002 100644
--- a/chrome/browser/resources/options/options.html
+++ b/chrome/browser/resources/options/options.html
@@ -148,6 +148,7 @@
   <include src="alert_overlay.html">
   <include src="autofill_edit_address_overlay.html">
   <include src="autofill_edit_creditcard_overlay.html">
+  <include src="clear_browser_data_history_notice_overlay.html">
   <include src="content_settings_exceptions_area.html">
   <include src="cookies_view.html">
   <include src="handler_options.html">
diff --git a/chrome/browser/resources/options/options.js b/chrome/browser/resources/options/options.js
index d331855..bbfbf474 100644
--- a/chrome/browser/resources/options/options.js
+++ b/chrome/browser/resources/options/options.js
@@ -10,6 +10,7 @@
 var AutomaticSettingsResetBanner = options.AutomaticSettingsResetBanner;
 var BrowserOptions = options.BrowserOptions;
 var ClearBrowserDataOverlay = options.ClearBrowserDataOverlay;
+var ClearBrowserDataHistoryNotice = options.ClearBrowserDataHistoryNotice;
 var ConfirmDialog = options.ConfirmDialog;
 var ContentSettingsExceptionsArea =
     options.contentSettings.ContentSettingsExceptionsArea;
@@ -87,6 +88,9 @@
                               BrowserOptions.getInstance(),
                               [$('privacyClearDataButton')]);
   PageManager.registerOverlay(
+      ClearBrowserDataHistoryNotice.getInstance(),
+      ClearBrowserDataOverlay.getInstance());
+  PageManager.registerOverlay(
       new ConfirmDialog(
           'doNotTrackConfirm',
           loadTimeData.getString('doNotTrackConfirmOverlayTabTitle'),
diff --git a/chrome/browser/resources/options/options_bundle.js b/chrome/browser/resources/options/options_bundle.js
index 811c5f0..e1b6e3b 100644
--- a/chrome/browser/resources/options/options_bundle.js
+++ b/chrome/browser/resources/options/options_bundle.js
@@ -77,6 +77,7 @@
 <include src="browser_options_profile_list.js">
 <include src="browser_options_startup_page_list.js">
 <include src="clear_browser_data_overlay.js">
+<include src="clear_browser_data_history_notice_overlay.js">
 <include src="confirm_dialog.js">
 <include src="content_settings.js">
 <include src="content_settings_exceptions_area.js">
diff --git a/chrome/browser/resources/settings/site_settings/constants.js b/chrome/browser/resources/settings/site_settings/constants.js
index f937c254d..55f871e 100644
--- a/chrome/browser/resources/settings/site_settings/constants.js
+++ b/chrome/browser/resources/settings/site_settings/constants.js
@@ -34,6 +34,15 @@
   };
 
   /**
+   * Contains the possible string values for a given contentSettingsType.
+   * @enum {string}
+   */
+  var PermissionStringValues = {
+    ALLOW: 'allow',
+    BLOCK: 'block',
+  };
+
+  /**
    * A category value to use for the All Sites list.
    * @const {number}
    */
@@ -48,6 +57,7 @@
   return {
     ContentSettingsTypes: ContentSettingsTypes,
     PermissionValues: PermissionValues,
+    PermissionStringValues: PermissionStringValues,
     ALL_SITES: ALL_SITES,
     INVALID_CATEGORY_SUBTYPE: INVALID_CATEGORY_SUBTYPE,
   };
diff --git a/chrome/browser/resources/settings/site_settings/site_details_permission.js b/chrome/browser/resources/settings/site_settings/site_details_permission.js
index 423ced5..b2f4ce64 100644
--- a/chrome/browser/resources/settings/site_settings/site_details_permission.js
+++ b/chrome/browser/resources/settings/site_settings/site_details_permission.js
@@ -53,8 +53,8 @@
       for (var i = 0; i < exceptionList.length; ++i) {
         if (exceptionList[i].origin == site.origin) {
           // TODO(finnur): Convert to use attrForSelected.
-          this.$.permission.selected =
-              exceptionList[i].setting == 'allow' ? 0 : 1;
+          this.$.permission.selected = exceptionList[i].setting ==
+              settings.PermissionStringValues.ALLOW ? 0 : 1;
           this.$.details.hidden = false;
         }
       }
diff --git a/chrome/browser/resources/settings/site_settings/site_list.html b/chrome/browser/resources/settings/site_settings/site_list.html
index 3d83c88..643f85f 100644
--- a/chrome/browser/resources/settings/site_settings/site_list.html
+++ b/chrome/browser/resources/settings/site_settings/site_list.html
@@ -22,14 +22,14 @@
         on-paper-submenu-close="onToggle_">
       <paper-item class="menu-trigger" hidden$="[[allSites]]">
         <div class="site-header horizontal layout">
-          <div class="flex"
+          <div class="flex" id="header"
               >[[computeSiteListHeader_(sites, categoryEnabled)]]</div>
           <iron-icon id="icon" icon="icons:expand-more"></iron-icon>
         </div>
       </paper-item>
 
       <paper-menu class="menu-content" id="listContainer">
-        <template is="dom-repeat" items="{{sites}}">
+        <template is="dom-repeat" items="[[sites]]">
           <div class="site-list horizontal layout center">
             <paper-item class="flex">
               <iron-icon icon="[[computeSiteIcon_(item)]]" item-icon>
diff --git a/chrome/browser/resources/settings/site_settings/site_list.js b/chrome/browser/resources/settings/site_settings/site_list.js
index b053707..e724ab8 100644
--- a/chrome/browser/resources/settings/site_settings/site_list.js
+++ b/chrome/browser/resources/settings/site_settings/site_list.js
@@ -2,12 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// Define a global boolean for notifications (only enabled in the test class).
-cr.exportPath('settings_test');
-
-/** @type {boolean} */
-settings_test.siteListNotifyForTest;
-
 /**
  * @fileoverview
  * 'settings-site-list' shows a list of Allowed and Blocked sites for a given
@@ -39,11 +33,11 @@
 
     /**
      * Array of sites to display in the widget.
+     * @type {!Array<SiteException>}
      */
     sites: {
       type: Array,
       value: function() { return []; },
-      notify: true,  // !!settings_test.siteListNotifyForTest,
     },
 
     /**
@@ -135,6 +129,13 @@
    * @private
    */
   configureWidget_: function() {
+    // The observer for All Sites fires before the attached/ready event, so
+    // initialize this here.
+    if (this.browserProxy_ === undefined) {
+      this.browserProxy_ =
+          settings.SiteSettingsPrefsBrowserProxyImpl.getInstance();
+    }
+
     this.setUpActionMenu_();
     this.ensureOpened_();
     this.populateList_();
@@ -155,14 +156,19 @@
 
     // Block list should only be shown opened if there is nothing to show in
     // the allowed list.
-    var prefsProxy = settings.SiteSettingsPrefsBrowserProxyImpl.getInstance();
-    prefsProxy.getExceptionList(this.category).then(function(exceptionList) {
-      for (var i = 0; i < exceptionList.length; ++i) {
-        if (exceptionList[i].setting == 'allow')
-          return;
-      }
+    if (this.category != settings.INVALID_CATEGORY_SUBTYPE) {
+      this.browserProxy_.getExceptionList(this.category).then(
+        function(exceptionList) {
+          var allowExists = exceptionList.some(function(exception) {
+            return exception.setting == settings.PermissionStringValues.ALLOW;
+          });
+          if (allowExists)
+            return;
+          this.$.category.opened = true;
+      }.bind(this));
+    } else {
       this.$.category.opened = true;
-    }.bind(this));
+    }
   },
 
   /**
@@ -196,9 +202,9 @@
         this.processExceptions_(lists);
       }.bind(this));
     } else {
-      var prefsProxy = settings.SiteSettingsPrefsBrowserProxyImpl.getInstance();
-      prefsProxy.getExceptionList(this.category).then(function(exceptionList) {
-        this.processExceptions_([exceptionList]);
+      this.browserProxy_.getExceptionList(this.category).then(
+        function(exceptionList) {
+          this.processExceptions_([exceptionList]);
       }.bind(this));
     }
   },
@@ -223,11 +229,11 @@
    * @private
    */
   getAllSitesList_: function() {
-    var prefsProxy = settings.SiteSettingsPrefsBrowserProxyImpl.getInstance();
     var promiseList = [];
     for (var type in settings.ContentSettingsTypes) {
       promiseList.push(
-          prefsProxy.getExceptionList(settings.ContentSettingsTypes[type]));
+          this.browserProxy_.getExceptionList(
+              settings.ContentSettingsTypes[type]));
     }
 
     return Promise.all(promiseList);
@@ -245,12 +251,12 @@
     for (var i = 0; i < exceptionList.length; ++i) {
       if (this.category != settings.ALL_SITES) {
         // Filter out 'Block' values if this list is handling 'Allow' items.
-        if (exceptionList[i].setting == 'block' &&
+        if (exceptionList[i].setting == settings.PermissionStringValues.BLOCK &&
             this.categorySubtype != settings.PermissionValues.BLOCK) {
           continue;
         }
         // Filter out 'Allow' values if this list is handling 'Block' items.
-        if (exceptionList[i].setting == 'allow' &&
+        if (exceptionList[i].setting == settings.PermissionStringValues.ALLOW &&
             this.categorySubtype != settings.PermissionValues.ALLOW) {
           continue;
         }
diff --git a/chrome/browser/resources/settings/site_settings/site_settings_category.js b/chrome/browser/resources/settings/site_settings/site_settings_category.js
index 324ba4d..7016b24 100644
--- a/chrome/browser/resources/settings/site_settings/site_settings_category.js
+++ b/chrome/browser/resources/settings/site_settings/site_settings_category.js
@@ -2,12 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// Define a global boolean for notifications (only enabled in the test class).
-cr.exportPath('settings_test');
-
-/** @type {boolean} */
-settings_test.siteCategoryNotifyForTest;
-
 /**
  * @fileoverview
  * 'site-settings-category' is the polymer element for showing a certain
@@ -32,10 +26,7 @@
      * example, the Location category can be set to Block/Ask so false, in that
      * case, represents Block and true represents Ask.
      */
-    categoryEnabled: {
-      type: Boolean,
-      notify: true,  // !!settings_test.siteCategoryNotifyForTest,
-    },
+    categoryEnabled: Boolean,
 
     /**
      * The site that was selected by the user in the dropdown list.
@@ -115,7 +106,7 @@
                 settings.PermissionValues.ASK);
         break;
       default:
-        assertNotReached();
+        assertNotReached('Invalid category: ' + this.category);
     }
   },
 
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index 855548a..a85c75a 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -152,6 +152,7 @@
       "//chrome/common/net",
       "//chrome/installer/util:with_no_strings",
       "//components/autofill/content/browser:risk_proto",
+      "//components/browsing_data_ui",
       "//components/bubble:bubble",
       "//components/crash/core/browser",
       "//components/net_log",
diff --git a/chrome/browser/ui/ash/chrome_launcher_prefs.cc b/chrome/browser/ui/ash/chrome_launcher_prefs.cc
index ee412eb9..696c2b4 100644
--- a/chrome/browser/ui/ash/chrome_launcher_prefs.cc
+++ b/chrome/browser/ui/ash/chrome_launcher_prefs.cc
@@ -43,7 +43,6 @@
 const char kShelfAlignmentBottom[] = "Bottom";
 const char kShelfAlignmentLeft[] = "Left";
 const char kShelfAlignmentRight[] = "Right";
-const char kShelfAlignmentTop[] = "Top";
 
 void RegisterChromeLauncherUserPrefs(
     user_prefs::PrefRegistrySyncable* registry) {
diff --git a/chrome/browser/ui/ash/chrome_launcher_prefs.h b/chrome/browser/ui/ash/chrome_launcher_prefs.h
index f01bfae..5b04b16 100644
--- a/chrome/browser/ui/ash/chrome_launcher_prefs.h
+++ b/chrome/browser/ui/ash/chrome_launcher_prefs.h
@@ -31,7 +31,6 @@
 extern const char kShelfAlignmentBottom[];
 extern const char kShelfAlignmentLeft[];
 extern const char kShelfAlignmentRight[];
-extern const char kShelfAlignmentTop[];
 
 void RegisterChromeLauncherUserPrefs(
     user_prefs::PrefRegistrySyncable* registry);
diff --git a/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc b/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc
index d9cac50a9d..beaef900 100644
--- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc
+++ b/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc
@@ -252,8 +252,7 @@
     return ash::SHELF_ALIGNMENT_LEFT;
   else if (alignment_value == ash::kShelfAlignmentRight)
     return ash::SHELF_ALIGNMENT_RIGHT;
-  else if (alignment_value == ash::kShelfAlignmentTop)
-    return ash::SHELF_ALIGNMENT_TOP;
+  // Default to bottom.
   return ash::SHELF_ALIGNMENT_BOTTOM;
 }
 
@@ -1296,8 +1295,6 @@
     case ash::SHELF_ALIGNMENT_RIGHT:
       pref_value = ash::kShelfAlignmentRight;
       break;
-    case ash::SHELF_ALIGNMENT_TOP:
-      pref_value = ash::kShelfAlignmentTop;
   }
 
   UpdatePerDisplayPref(
diff --git a/chrome/browser/ui/browser_ui_prefs.cc b/chrome/browser/ui/browser_ui_prefs.cc
index 53a0dae..aeb6ca4 100644
--- a/chrome/browser/ui/browser_ui_prefs.cc
+++ b/chrome/browser/ui/browser_ui_prefs.cc
@@ -69,6 +69,8 @@
       prefs::kDeleteTimePeriod,
       0,
       user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
+  registry->RegisterIntegerPref(
+      prefs::kClearBrowsingDataHistoryNoticeShownTimes, 0);
   registry->RegisterInt64Pref(prefs::kLastClearBrowsingDataTime, 0);
   registry->RegisterIntegerPref(prefs::kModuleConflictBubbleShown, 0);
   registry->RegisterBooleanPref(prefs::kCheckDefaultBrowser, true);
diff --git a/chrome/browser/ui/cocoa/apps/native_app_window_cocoa.mm b/chrome/browser/ui/cocoa/apps/native_app_window_cocoa.mm
index e3e3423..2d386376 100644
--- a/chrome/browser/ui/cocoa/apps/native_app_window_cocoa.mm
+++ b/chrome/browser/ui/cocoa/apps/native_app_window_cocoa.mm
@@ -276,10 +276,6 @@
   [window setTitle:base::SysUTF8ToNSString(name)];
   [[window contentView] setWantsLayer:YES];
 
-  if (base::mac::IsOSSnowLeopard() &&
-      [window respondsToSelector:@selector(setBottomCornerRounded:)])
-    [window setBottomCornerRounded:NO];
-
   if (params.always_on_top)
     gfx::SetNSWindowAlwaysOnTop(window, true);
 
@@ -396,56 +392,12 @@
   if (fullscreen)
     is_fullscreen_ = true;
 
-  if (base::mac::IsOSLionOrLater()) {
-    // If going fullscreen, but the window is constrained (fullscreen UI control
-    // is disabled), temporarily enable it. It will be disabled again on leaving
-    // fullscreen.
-    if (fullscreen && !shows_fullscreen_controls_)
-      gfx::SetNSWindowCanFullscreen(window(), true);
-    [window() toggleFullScreen:nil];
-    is_fullscreen_ = fullscreen;
-    return;
-  }
-
-  DCHECK(base::mac::IsOSSnowLeopard());
-
-  // Fade to black.
-  const CGDisplayReservationInterval kFadeDurationSeconds = 0.6;
-  bool did_fade_out = false;
-  CGDisplayFadeReservationToken token;
-  if (CGAcquireDisplayFadeReservation(kFadeDurationSeconds, &token) ==
-      kCGErrorSuccess) {
-    did_fade_out = true;
-    CGDisplayFade(token, kFadeDurationSeconds / 2, kCGDisplayBlendNormal,
-        kCGDisplayBlendSolidColor, 0.0, 0.0, 0.0, /*synchronous=*/true);
-  }
-
-  // Since frameless windows insert the WebContentsView into the NSThemeFrame
-  // ([[window contentView] superview]), and since that NSThemeFrame is
-  // destroyed and recreated when we change the styleMask of the window, we
-  // need to remove the view from the window when we change the style, and
-  // add it back afterwards.
-  UninstallView();
-  if (fullscreen) {
-    UpdateRestoredBounds();
-    [window() setStyleMask:NSBorderlessWindowMask];
-    [window() setFrame:[window()
-        frameRectForContentRect:[[window() screen] frame]]
-               display:YES];
-    base::mac::RequestFullScreen(base::mac::kFullScreenModeAutoHideAll);
-  } else {
-    base::mac::ReleaseFullScreen(base::mac::kFullScreenModeAutoHideAll);
-    [window() setStyleMask:GetWindowStyleMask()];
-    [window() setFrame:restored_bounds_ display:YES];
-  }
-  InstallView();
-
-  // Fade back in.
-  if (did_fade_out) {
-    CGDisplayFade(token, kFadeDurationSeconds / 2, kCGDisplayBlendSolidColor,
-        kCGDisplayBlendNormal, 0.0, 0.0, 0.0, /*synchronous=*/false);
-    CGReleaseDisplayFadeReservation(token);
-  }
+  // If going fullscreen, but the window is constrained (fullscreen UI control
+  // is disabled), temporarily enable it. It will be disabled again on leaving
+  // fullscreen.
+  if (fullscreen && !shows_fullscreen_controls_)
+    gfx::SetNSWindowCanFullscreen(window(), true);
+  [window() toggleFullScreen:nil];
   is_fullscreen_ = fullscreen;
 }
 
diff --git a/chrome/browser/ui/cocoa/apps/native_app_window_cocoa_browsertest.mm b/chrome/browser/ui/cocoa/apps/native_app_window_cocoa_browsertest.mm
index 97a5b19..c983929 100644
--- a/chrome/browser/ui/cocoa/apps/native_app_window_cocoa_browsertest.mm
+++ b/chrome/browser/ui/cocoa/apps/native_app_window_cocoa_browsertest.mm
@@ -312,11 +312,6 @@
 
 // Test Maximize, Restore combinations with their native equivalents.
 IN_PROC_BROWSER_TEST_P(NativeAppWindowCocoaBrowserTest, Maximize) {
-  // This test is flaky on 10.6. Disable it until we're sure we need MacViews on
-  // 10.6. See http://crbug.com/503208
-  if (GetParam() && base::mac::IsOSSnowLeopard())
-    return;
-
   SetUpAppWithWindows(1);
   AppWindow* app_window = GetFirstAppWindow();
   extensions::NativeAppWindow* window = app_window->GetBaseWindow();
@@ -457,9 +452,6 @@
 
 // Test Maximize, Fullscreen, Restore combinations.
 IN_PROC_BROWSER_TEST_P(NativeAppWindowCocoaBrowserTest, MaximizeFullscreen) {
-  if (base::mac::IsOSSnowLeopard())
-    return;
-
   ui::test::ScopedFakeNSWindowFullscreen fake_fullscreen;
 
   SetUpAppWithWindows(1);
@@ -552,8 +544,6 @@
 
   // The window is resizable.
   EXPECT_TRUE([ns_window styleMask] & NSResizableWindowMask);
-  if (base::mac::IsOSSnowLeopard())
-    EXPECT_TRUE([ns_window showsResizeIndicator]);
 
   // Due to this bug: http://crbug.com/362039, which manifests on the Cocoa
   // implementation but not the views one, frameless windows should have
@@ -585,8 +575,6 @@
 
   // Still resizable.
   EXPECT_TRUE([ns_window styleMask] & NSResizableWindowMask);
-  if (base::mac::IsOSSnowLeopard())
-    EXPECT_TRUE([ns_window showsResizeIndicator]);
 
   // Fullscreen and maximize are disabled.
   if (base::mac::IsOSLionOrLater())
@@ -602,8 +590,6 @@
 
   // No longer resizable.
   EXPECT_FALSE([ns_window styleMask] & NSResizableWindowMask);
-  if (base::mac::IsOSSnowLeopard())
-    EXPECT_FALSE([ns_window showsResizeIndicator]);
 
   // If a window is made fullscreen by the API, fullscreen should be enabled so
   // the user can exit fullscreen.
diff --git a/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.mm b/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.mm
index 44f18e5..2b11e5a 100644
--- a/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.mm
+++ b/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.mm
@@ -63,6 +63,7 @@
 #include "extensions/common/extension.h"
 #include "extensions/common/extension_set.h"
 #include "grit/theme_resources.h"
+#include "ui/base/clipboard/clipboard_util_mac.h"
 #import "ui/base/cocoa/cocoa_base_utils.h"
 #import "ui/base/cocoa/nsview_additions.h"
 #include "ui/base/l10n/l10n_util_mac.h"
@@ -2565,7 +2566,8 @@
   // Don't allow drops that would result in cycles.
   if (button) {
     NSData* data = [[info draggingPasteboard]
-                    dataForType:kBookmarkButtonDragType];
+        dataForType:ui::ClipboardUtil::UTIForPasteboardType(
+                        kBookmarkButtonDragType)];
     if (data && [info draggingSource]) {
       BookmarkButton* sourceButton = nil;
       [data getBytes:&sourceButton length:sizeof(sourceButton)];
diff --git a/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_controller.mm b/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_controller.mm
index 704dcbea..51510e0d 100644
--- a/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_controller.mm
+++ b/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_controller.mm
@@ -24,6 +24,7 @@
 #include "components/bookmarks/browser/bookmark_model.h"
 #include "components/bookmarks/browser/bookmark_node_data.h"
 #import "components/bookmarks/managed/managed_bookmark_service.h"
+#include "ui/base/clipboard/clipboard_util_mac.h"
 #include "ui/base/cocoa/cocoa_base_utils.h"
 #include "ui/base/theme_provider.h"
 
@@ -1454,7 +1455,8 @@
   // Don't allow drops that would result in cycles.
   if (button) {
     NSData* data = [[info draggingPasteboard]
-                    dataForType:kBookmarkButtonDragType];
+        dataForType:ui::ClipboardUtil::UTIForPasteboardType(
+                        kBookmarkButtonDragType)];
     if (data && [info draggingSource]) {
       BookmarkButton* sourceButton = nil;
       [data getBytes:&sourceButton length:sizeof(sourceButton)];
diff --git a/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_view.mm b/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_view.mm
index cf12996..5ba2689 100644
--- a/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_view.mm
+++ b/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_view.mm
@@ -17,6 +17,7 @@
 using bookmarks::BookmarkNode;
 
 #import "third_party/mozilla/NSPasteboard+Utils.h"
+#include "ui/base/clipboard/clipboard_util_mac.h"
 
 @interface BookmarkBarFolderView()
 
@@ -29,13 +30,11 @@
 @implementation BookmarkBarFolderView
 
 - (void)awakeFromNib {
-  NSArray* types = [NSArray arrayWithObjects:
-                    NSStringPboardType,
-                    NSHTMLPboardType,
-                    NSURLPboardType,
-                    kBookmarkButtonDragType,
-                    kBookmarkDictionaryListPboardType,
-                    nil];
+  NSArray* types = @[
+    NSStringPboardType, NSHTMLPboardType, NSURLPboardType,
+    ui::ClipboardUtil::UTIForPasteboardType(kBookmarkButtonDragType),
+    ui::ClipboardUtil::UTIForPasteboardType(kBookmarkDictionaryListPboardType)
+  ];
   [self registerForDraggedTypes:types];
 }
 
@@ -58,7 +57,9 @@
   inDrag_ = YES;
   if (![[self controller] draggingAllowed:info])
     return NSDragOperationNone;
-  if ([[info draggingPasteboard] dataForType:kBookmarkButtonDragType] ||
+  if ([[info draggingPasteboard]
+          dataForType:ui::ClipboardUtil::UTIForPasteboardType(
+                          kBookmarkButtonDragType)] ||
       bookmarks::PasteboardContainsBookmarks(ui::CLIPBOARD_TYPE_DRAG) ||
       [[info draggingPasteboard] containsURLData]) {
     // Find the position of the drop indicator.
@@ -149,7 +150,8 @@
 - (BOOL)performDragOperationForBookmarkButton:(id<NSDraggingInfo>)info {
   BOOL doDrag = NO;
   NSData* data = [[info draggingPasteboard]
-                   dataForType:kBookmarkButtonDragType];
+      dataForType:ui::ClipboardUtil::UTIForPasteboardType(
+                      kBookmarkButtonDragType)];
   // [info draggingSource] is nil if not the same application.
   if (data && [info draggingSource]) {
     BookmarkButton* button = nil;
@@ -181,7 +183,8 @@
   if ([[self controller] dragBookmarkData:info])
     return YES;
   NSPasteboard* pboard = [info draggingPasteboard];
-  if ([pboard dataForType:kBookmarkButtonDragType] &&
+  if ([pboard dataForType:ui::ClipboardUtil::UTIForPasteboardType(
+                              kBookmarkButtonDragType)] &&
       [self performDragOperationForBookmarkButton:info])
     return YES;
   if ([pboard containsURLData] && [self performDragOperationForURL:info])
diff --git a/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_view_unittest.mm b/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_view_unittest.mm
index dc3a67f..2b9befdc 100644
--- a/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_view_unittest.mm
+++ b/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_view_unittest.mm
@@ -22,6 +22,7 @@
 #import "third_party/mozilla/NSPasteboard+Utils.h"
 #import "third_party/ocmock/OCMock/OCMock.h"
 #import "third_party/ocmock/ocmock_extensions.h"
+#include "ui/base/clipboard/clipboard_util_mac.h"
 
 using bookmarks::BookmarkModel;
 using bookmarks::BookmarkNode;
@@ -80,7 +81,8 @@
 
   id GetFakePasteboardForType(NSString* dataType) {
     id pasteboard = [OCMockObject mockForClass:[NSPasteboard class]];
-    if ([dataType isEqualToString:kBookmarkButtonDragType]) {
+    if ([dataType isEqualToString:ui::ClipboardUtil::UTIForPasteboardType(
+                                      kBookmarkButtonDragType)]) {
       BookmarkButton* button = mock_button_.get();
       [[[pasteboard stub]
         andReturn:[NSData dataWithBytes:&button length:sizeof(button)]]
@@ -143,7 +145,8 @@
 };
 
 TEST_F(BookmarkBarFolderViewTest, BookmarkButtonDragAndDrop) {
-  id drag_info = GetFakeDragInfoForType(kBookmarkButtonDragType);
+  id drag_info = GetFakeDragInfoForType(
+      ui::ClipboardUtil::UTIForPasteboardType(kBookmarkButtonDragType));
   [[[mock_controller_ expect] andReturnUnsignedInteger:NSDragOperationNone]
    draggingEntered:drag_info];
   [[[mock_controller_ expect] andReturnBool:NO] dragBookmarkData:drag_info];
@@ -168,7 +171,8 @@
       YES, BookmarkModelFactory::GetForProfile(other_profile)));
   [view_ setController:mock_controller_];
 
-  id drag_info = GetFakeDragInfoForType(kBookmarkButtonDragType);
+  id drag_info = GetFakeDragInfoForType(
+      ui::ClipboardUtil::UTIForPasteboardType(kBookmarkButtonDragType));
   [[[mock_controller_ expect] andReturnUnsignedInteger:NSDragOperationNone]
    draggingEntered:drag_info];
   [[[mock_controller_ expect] andReturnBool:NO] dragBookmarkData:drag_info];
@@ -197,7 +201,8 @@
 }
 
 TEST_F(BookmarkBarFolderViewTest, BookmarkButtonDropIndicator) {
-  id drag_info = GetFakeDragInfoForType(kBookmarkButtonDragType);
+  id drag_info = GetFakeDragInfoForType(
+      ui::ClipboardUtil::UTIForPasteboardType(kBookmarkButtonDragType));
   [[[mock_controller_ expect] andReturnUnsignedInteger:NSDragOperationNone]
    draggingEntered:drag_info];
   EXPECT_EQ([view_ draggingEntered:drag_info], NSDragOperationMove);
diff --git a/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_view_cocoa.mm b/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_view_cocoa.mm
index 743e64a6..029e4b4 100644
--- a/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_view_cocoa.mm
+++ b/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_view_cocoa.mm
@@ -18,6 +18,7 @@
 #include "components/bookmarks/browser/bookmark_utils.h"
 #include "content/public/browser/user_metrics.h"
 #import "third_party/mozilla/NSPasteboard+Utils.h"
+#include "ui/base/clipboard/clipboard_util_mac.h"
 #import "ui/base/cocoa/nsview_additions.h"
 
 using base::UserMetricsAction;
@@ -68,13 +69,11 @@
                       object:nil];
 
   DCHECK(controller_) << "Expected this to be hooked up via Interface Builder";
-  NSArray* types = [NSArray arrayWithObjects:
-                    NSStringPboardType,
-                    NSHTMLPboardType,
-                    NSURLPboardType,
-                    kBookmarkButtonDragType,
-                    kBookmarkDictionaryListPboardType,
-                    nil];
+  NSArray* types = @[
+    NSStringPboardType, NSHTMLPboardType, NSURLPboardType,
+    ui::ClipboardUtil::UTIForPasteboardType(kBookmarkButtonDragType),
+    ui::ClipboardUtil::UTIForPasteboardType(kBookmarkDictionaryListPboardType)
+  ];
   [self registerForDraggedTypes:types];
 }
 
@@ -141,7 +140,9 @@
 - (NSDragOperation)draggingEntered:(id<NSDraggingInfo>)info {
   if (![controller_ draggingAllowed:info])
     return NSDragOperationNone;
-  if ([[info draggingPasteboard] dataForType:kBookmarkButtonDragType] ||
+  if ([[info draggingPasteboard]
+          dataForType:ui::ClipboardUtil::UTIForPasteboardType(
+                          kBookmarkButtonDragType)] ||
       bookmarks::PasteboardContainsBookmarks(ui::CLIPBOARD_TYPE_DRAG) ||
       [[info draggingPasteboard] containsURLData]) {
     // We only show the drop indicator if we're not in a position to
@@ -227,7 +228,8 @@
 - (BOOL)performDragOperationForBookmarkButton:(id<NSDraggingInfo>)info {
   BOOL rtn = NO;
   NSData* data = [[info draggingPasteboard]
-                  dataForType:kBookmarkButtonDragType];
+      dataForType:ui::ClipboardUtil::UTIForPasteboardType(
+                      kBookmarkButtonDragType)];
   // [info draggingSource] is nil if not the same application.
   if (data && [info draggingSource]) {
     BookmarkButton* button = nil;
@@ -259,7 +261,8 @@
   if ([controller_ dragBookmarkData:info])
     return YES;
   NSPasteboard* pboard = [info draggingPasteboard];
-  if ([pboard dataForType:kBookmarkButtonDragType]) {
+  if ([pboard dataForType:ui::ClipboardUtil::UTIForPasteboardType(
+                              kBookmarkButtonDragType)]) {
     if ([self performDragOperationForBookmarkButton:info])
       return YES;
     // Fall through....
diff --git a/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_view_cocoa_unittest.mm b/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_view_cocoa_unittest.mm
index d49703355..a4f1734 100644
--- a/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_view_cocoa_unittest.mm
+++ b/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_view_cocoa_unittest.mm
@@ -21,6 +21,7 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "testing/platform_test.h"
 #import "third_party/mozilla/NSPasteboard+Utils.h"
+#include "ui/base/clipboard/clipboard_util_mac.h"
 
 using bookmarks::BookmarkModel;
 using bookmarks::BookmarkNode;
@@ -237,7 +238,8 @@
       [[BookmarkButton alloc] init]);
   [dragged_button setCell:button_cell];
   [info setDraggingSource:dragged_button.get()];
-  [info setDragDataType:kBookmarkButtonDragType];
+  [info setDragDataType:ui::ClipboardUtil::UTIForPasteboardType(
+                            kBookmarkButtonDragType)];
   [info setButton:dragged_button.get()];
   [info setBookmarkModel:bookmark_model];
   EXPECT_EQ([view_ draggingEntered:(id)info.get()], NSDragOperationMove);
@@ -279,7 +281,8 @@
       [[BookmarkButton alloc] init]);
   [dragged_button setCell:button_cell];
   [info setDraggingSource:dragged_button.get()];
-  [info setDragDataType:kBookmarkButtonDragType];
+  [info setDragDataType:ui::ClipboardUtil::UTIForPasteboardType(
+                            kBookmarkButtonDragType)];
   [info setButton:dragged_button.get()];
   [info setBookmarkModel:BookmarkModelFactory::GetForProfile(other_profile)];
   EXPECT_EQ([view_ draggingEntered:(id)info.get()], NSDragOperationMove);
@@ -317,7 +320,8 @@
   base::scoped_nsobject<BookmarkButton> dragged_button(
       [[BookmarkButton alloc] init]);
   [info setDraggingSource:dragged_button.get()];
-  [info setDragDataType:kBookmarkButtonDragType];
+  [info setDragDataType:ui::ClipboardUtil::UTIForPasteboardType(
+                            kBookmarkButtonDragType)];
   EXPECT_FALSE([info draggingEnteredCalled]);
   EXPECT_EQ([view_ draggingEntered:(id)info.get()], NSDragOperationMove);
   EXPECT_TRUE([info draggingEnteredCalled]);  // Ensure controller pinged.
diff --git a/chrome/browser/ui/cocoa/bookmarks/bookmark_button.mm b/chrome/browser/ui/cocoa/bookmarks/bookmark_button.mm
index 4366431..983b0fc6 100644
--- a/chrome/browser/ui/cocoa/bookmarks/bookmark_button.mm
+++ b/chrome/browser/ui/cocoa/bookmarks/bookmark_button.mm
@@ -17,6 +17,7 @@
 #import "chrome/browser/ui/cocoa/view_id_util.h"
 #include "components/bookmarks/browser/bookmark_model.h"
 #include "content/public/browser/user_metrics.h"
+#include "ui/base/clipboard/clipboard_util_mac.h"
 #include "ui/base/cocoa/cocoa_base_utils.h"
 #import "ui/base/cocoa/nsview_additions.h"
 #include "ui/gfx/scoped_ns_graphics_context_save_gstate_mac.h"
@@ -215,7 +216,9 @@
   [self setHidden:YES];
 
   NSPasteboardItem* pbItem = [NSPasteboardItem new];
-  [pbItem setDataProvider:self forTypes:@[ kBookmarkButtonDragType ]];
+  [pbItem setDataProvider:self
+                 forTypes:@[ ui::ClipboardUtil::UTIForPasteboardType(
+                              kBookmarkButtonDragType) ]];
 
   base::scoped_nsobject<NSDraggingItem> dragItem(
       [[NSDraggingItem alloc] initWithPasteboardWriter:pbItem]);
@@ -240,9 +243,10 @@
 - (void)pasteboard:(NSPasteboard*)sender
                   item:(NSPasteboardItem*)item
     provideDataForType:(NSString*)type {
-  [sender setData:[NSData dataWithBytes:&gDraggedButton
-                                 length:sizeof(gDraggedButton)]
-          forType:kBookmarkButtonDragType];
+  [sender
+      setData:[NSData dataWithBytes:&gDraggedButton
+                             length:sizeof(gDraggedButton)]
+      forType:ui::ClipboardUtil::UTIForPasteboardType(kBookmarkButtonDragType)];
 }
 
 - (NSDragOperation)draggingSession:(NSDraggingSession*)session
diff --git a/chrome/browser/ui/cocoa/bookmarks/bookmark_folder_target.mm b/chrome/browser/ui/cocoa/bookmarks/bookmark_folder_target.mm
index ba59cb2..f1c67b18 100644
--- a/chrome/browser/ui/cocoa/bookmarks/bookmark_folder_target.mm
+++ b/chrome/browser/ui/cocoa/bookmarks/bookmark_folder_target.mm
@@ -12,6 +12,7 @@
 #include "components/bookmarks/browser/bookmark_model.h"
 #include "components/bookmarks/browser/bookmark_node_data.h"
 #include "components/bookmarks/browser/bookmark_pasteboard_helper_mac.h"
+#include "ui/base/clipboard/clipboard_util_mac.h"
 #import "ui/base/cocoa/cocoa_base_utils.h"
 
 using bookmarks::BookmarkNode;
@@ -114,12 +115,15 @@
        forDragOfButton:(BookmarkButton*)button {
   if (const BookmarkNode* node = [button bookmarkNode]) {
     // Put the bookmark information into the pasteboard, and then write our own
-    // data for |kBookmarkButtonDragType|.
+    // data for
+    // |ui::ClipboardUtil::UTIForPasteboardType(kBookmarkButtonDragType)|.
     [self copyBookmarkNode:node toDragPasteboard:pboard];
-    [pboard addTypes:[NSArray arrayWithObject:kBookmarkButtonDragType]
+    [pboard addTypes:@[ ui::ClipboardUtil::UTIForPasteboardType(
+                         kBookmarkButtonDragType) ]
                owner:nil];
     [pboard setData:[NSData dataWithBytes:&button length:sizeof(button)]
-            forType:kBookmarkButtonDragType];
+            forType:ui::ClipboardUtil::UTIForPasteboardType(
+                        kBookmarkButtonDragType)];
   } else {
     NOTREACHED();
   }
diff --git a/chrome/browser/ui/cocoa/browser_window_controller.mm b/chrome/browser/ui/cocoa/browser_window_controller.mm
index 4c0128c0..dcddda0 100644
--- a/chrome/browser/ui/cocoa/browser_window_controller.mm
+++ b/chrome/browser/ui/cocoa/browser_window_controller.mm
@@ -260,14 +260,6 @@
     // be big enough to hold all locks that'll ever be needed.
     barVisibilityLocks_.reset([[NSMutableSet setWithCapacity:10] retain]);
 
-    // Set the window to not have rounded corners, which prevents the resize
-    // control from being inset slightly and looking ugly. Only bother to do
-    // this on Snow Leopard; on Lion and later all windows have rounded bottom
-    // corners, and this won't work anyway.
-    if (base::mac::IsOSSnowLeopard() &&
-        [window respondsToSelector:@selector(setBottomCornerRounded:)])
-      [window setBottomCornerRounded:NO];
-
     // Lion will attempt to automagically save and restore the UI. This
     // functionality appears to be leaky (or at least interacts badly with our
     // architecture) and thus BrowserWindowController never gets released. This
diff --git a/chrome/browser/ui/cocoa/browser_window_controller_browsertest.mm b/chrome/browser/ui/cocoa/browser_window_controller_browsertest.mm
index 638d09d..a1344a3 100644
--- a/chrome/browser/ui/cocoa/browser_window_controller_browsertest.mm
+++ b/chrome/browser/ui/cocoa/browser_window_controller_browsertest.mm
@@ -399,9 +399,6 @@
 // DISABLED_ because it regularly times out: http://crbug.com/159002.
 IN_PROC_BROWSER_TEST_F(BrowserWindowControllerTest,
                        DISABLED_ProfileAvatarFullscreenButton) {
-  if (base::mac::IsOSSnowLeopard())
-    return;
-
   // Initialize the locals.
   ProfileManager* profile_manager = g_browser_process->profile_manager();
   ASSERT_TRUE(profile_manager);
diff --git a/chrome/browser/ui/cocoa/browser_window_controller_private.mm b/chrome/browser/ui/cocoa/browser_window_controller_private.mm
index ef42630..85d1f50 100644
--- a/chrome/browser/ui/cocoa/browser_window_controller_private.mm
+++ b/chrome/browser/ui/cocoa/browser_window_controller_private.mm
@@ -921,10 +921,6 @@
 }
 
 - (NSRect)fullscreenButtonFrame {
-  // NSWindowFullScreenButton is 10.7+ and results in log spam on 10.6 if used.
-  if (base::mac::IsOSSnowLeopard())
-    return NSZeroRect;
-
   NSButton* fullscreenButton =
       [[self window] standardWindowButton:NSWindowFullScreenButton];
   if (!fullscreenButton)
diff --git a/chrome/browser/ui/cocoa/browser_window_controller_unittest.mm b/chrome/browser/ui/cocoa/browser_window_controller_unittest.mm
index d2b00f5..2758102 100644
--- a/chrome/browser/ui/cocoa/browser_window_controller_unittest.mm
+++ b/chrome/browser/ui/cocoa/browser_window_controller_unittest.mm
@@ -793,10 +793,6 @@
   [controller_ activate];
   chrome::testing::NSRunLoopRunAllPending();
 
-  // No fullscreen window on 10.7+.
-  if (base::mac::IsOSSnowLeopard())
-    EXPECT_TRUE(IsFrontWindow([controller_ createFullscreenWindow]));
-
   // We have to cleanup after ourselves by unfullscreening.
   [controller_ exitAnyFullscreen];
   WaitForFullScreenTransition();
diff --git a/chrome/browser/ui/cocoa/presentation_mode_controller.mm b/chrome/browser/ui/cocoa/presentation_mode_controller.mm
index e8c3ec8f..b81b5210 100644
--- a/chrome/browser/ui/cocoa/presentation_mode_controller.mm
+++ b/chrome/browser/ui/cocoa/presentation_mode_controller.mm
@@ -260,21 +260,6 @@
   NSNotificationCenter* nc = [NSNotificationCenter defaultCenter];
   NSWindow* window = [browserController_ window];
 
-  // Disable these notifications on Lion as they cause crashes.
-  // TODO(rohitrao): Figure out what happens if a fullscreen window changes
-  // monitors on Lion.
-  if (base::mac::IsOSSnowLeopard()) {
-    [nc addObserver:self
-           selector:@selector(windowDidChangeScreen:)
-               name:NSWindowDidChangeScreenNotification
-             object:window];
-
-    [nc addObserver:self
-           selector:@selector(windowDidMove:)
-               name:NSWindowDidMoveNotification
-             object:window];
-  }
-
   [nc addObserver:self
          selector:@selector(windowDidBecomeMain:)
              name:NSWindowDidBecomeMainNotification
diff --git a/chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac.mm b/chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac.mm
index 7dd8730..14464bc0 100644
--- a/chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac.mm
+++ b/chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac.mm
@@ -107,10 +107,6 @@
   if (![[NSProcessInfo processInfo] cr_isMainBrowserOrTestProcess])
     return;
 
-  // Services filtering does not work on OS X 10.6.
-  if (base::mac::IsOSSnowLeopard())
-    return;
-
   static dispatch_once_t onceToken;
   dispatch_once(&onceToken, ^{
     // Confirm that the AppKit's private _NSServiceEntry class exists. This
diff --git a/chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac_browsertest.mm b/chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac_browsertest.mm
index abb844430..42b0fd62 100644
--- a/chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac_browsertest.mm
+++ b/chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac_browsertest.mm
@@ -53,10 +53,6 @@
 // items exist and implement the expected methods, and that the filtering code
 // successfully removes those Services items.
 IN_PROC_BROWSER_TEST_F(RenderViewContextMenuMacBrowserTest, ServicesFiltering) {
-  // Services filtering does not work on Snow Leopard.
-  if (base::mac::IsOSSnowLeopard())
-    return;
-
   // Confirm that the _NSServicesMenuUpdater class exists and implements the
   // method we expect it to.
   Class menuUpdaterClass = NSClassFromString(@"_NSServicesMenuUpdater");
diff --git a/chrome/browser/ui/cocoa/toolbar/toolbar_controller.mm b/chrome/browser/ui/cocoa/toolbar/toolbar_controller.mm
index e500ef4..a799b5a 100644
--- a/chrome/browser/ui/cocoa/toolbar/toolbar_controller.mm
+++ b/chrome/browser/ui/cocoa/toolbar/toolbar_controller.mm
@@ -722,14 +722,6 @@
     // aren't sent correctly.
     DCHECK(autocompleteTextFieldEditor_.get());
     [autocompleteTextFieldEditor_.get() setFieldEditor:YES];
-    if (base::mac::IsOSSnowLeopard()) {
-      // Manually transferring the drawsBackground and backgroundColor
-      // properties is necessary to ensure anti-aliased text on 10.6.
-      [autocompleteTextFieldEditor_
-          setDrawsBackground:[locationBar_ drawsBackground]];
-      [autocompleteTextFieldEditor_
-          setBackgroundColor:[locationBar_ backgroundColor]];
-    }
     return autocompleteTextFieldEditor_.get();
   }
   return nil;
diff --git a/chrome/browser/ui/passwords/password_manager_presenter.cc b/chrome/browser/ui/passwords/password_manager_presenter.cc
index a7b8980e..272ca70 100644
--- a/chrome/browser/ui/passwords/password_manager_presenter.cc
+++ b/chrome/browser/ui/passwords/password_manager_presenter.cc
@@ -182,9 +182,10 @@
 
 void PasswordManagerPresenter::RemoveSavedPassword(size_t index) {
   if (index >= password_list_.size()) {
-    // |index| out of bounds might come from a compromised renderer, don't let
-    // it crash the browser. http://crbug.com/362054
-    NOTREACHED();
+    // |index| out of bounds might come from a compromised renderer
+    // (http://crbug.com/362054), or the user removed a password while a request
+    // to the store is in progress (i.e. |password_list_| is empty).
+    // Don't let it crash the browser.
     return;
   }
   PasswordStore* store = GetPasswordStore();
@@ -200,9 +201,10 @@
 
 void PasswordManagerPresenter::RemovePasswordException(size_t index) {
   if (index >= password_exception_list_.size()) {
-    // |index| out of bounds might come from a compromised renderer, don't let
-    // it crash the browser. http://crbug.com/362054
-    NOTREACHED();
+    // |index| out of bounds might come from a compromised renderer
+    // (http://crbug.com/362054), or the user removed a password exception while
+    // a request to the store is in progress (i.e. |password_exception_list_|
+    // is empty). Don't let it crash the browser.
     return;
   }
   PasswordStore* store = GetPasswordStore();
@@ -218,9 +220,10 @@
 void PasswordManagerPresenter::RequestShowPassword(size_t index) {
 #if !defined(OS_ANDROID)  // This is never called on Android.
   if (index >= password_list_.size()) {
-    // |index| out of bounds might come from a compromised renderer, don't let
-    // it crash the browser. http://crbug.com/362054
-    NOTREACHED();
+    // |index| out of bounds might come from a compromised renderer
+    // (http://crbug.com/362054), or the user requested to show a password while
+    // a request to the store is in progress (i.e. |password_list_|
+    // is empty). Don't let it crash the browser.
     return;
   }
   if ((base::TimeTicks::Now() - last_authentication_time_) >
@@ -265,9 +268,10 @@
 const autofill::PasswordForm* PasswordManagerPresenter::GetPassword(
     size_t index) {
   if (index >= password_list_.size()) {
-    // |index| out of bounds might come from a compromised renderer, don't let
-    // it crash the browser. http://crbug.com/362054
-    NOTREACHED();
+    // |index| out of bounds might come from a compromised renderer
+    // (http://crbug.com/362054), or the user requested to get a password while
+    // a request to the store is in progress (i.e. |password_list_|
+    // is empty). Don't let it crash the browser.
     return NULL;
   }
   return password_list_[index].get();
@@ -276,9 +280,10 @@
 const autofill::PasswordForm* PasswordManagerPresenter::GetPasswordException(
     size_t index) {
   if (index >= password_exception_list_.size()) {
-    // |index| out of bounds might come from a compromised renderer, don't let
-    // it crash the browser. http://crbug.com/362054
-    NOTREACHED();
+    // |index| out of bounds might come from a compromised renderer
+    // (http://crbug.com/362054), or the user requested to get a password
+    // exception while a request to the store is in progress (i.e.
+    // |password_exception_list_| is empty). Don't let it crash the browser.
     return NULL;
   }
   return password_exception_list_[index].get();
diff --git a/chrome/browser/ui/webui/browsing_history_handler.cc b/chrome/browser/ui/webui/browsing_history_handler.cc
index 5046887..c229f41 100644
--- a/chrome/browser/ui/webui/browsing_history_handler.cc
+++ b/chrome/browser/ui/webui/browsing_history_handler.cc
@@ -37,6 +37,7 @@
 #include "components/bookmarks/browser/bookmark_model.h"
 #include "components/bookmarks/browser/bookmark_utils.h"
 #include "components/browser_sync/browser/profile_sync_service.h"
+#include "components/browsing_data_ui/history_notice_utils.h"
 #include "components/favicon/core/fallback_icon_service.h"
 #include "components/favicon/core/fallback_url_util.h"
 #include "components/favicon/core/large_icon_service.h"
@@ -310,6 +311,8 @@
 BrowsingHistoryHandler::BrowsingHistoryHandler()
     : has_pending_delete_request_(false),
       history_service_observer_(this),
+      has_synced_results_(false),
+      has_other_forms_of_browsing_history_(false),
       weak_factory_(this) {
 }
 
@@ -388,6 +391,8 @@
 
   query_results_.clear();
   results_info_value_.Clear();
+  has_synced_results_ = false;
+  has_other_forms_of_browsing_history_ = false;
 
   history::HistoryService* hs = HistoryServiceFactory::GetForProfile(
       profile, ServiceAccessType::EXPLICIT_ACCESS);
@@ -418,6 +423,14 @@
     web_history_timer_.Start(
         FROM_HERE, base::TimeDelta::FromSeconds(kWebHistoryTimeoutSeconds),
         this, &BrowsingHistoryHandler::WebHistoryTimeout);
+
+    // Test the existence of other forms of browsing history.
+    browsing_data_ui::ShouldShowNoticeAboutOtherFormsOfBrowsingHistory(
+        ProfileSyncServiceFactory::GetInstance()->GetForProfile(profile),
+        web_history,
+        base::Bind(
+            &BrowsingHistoryHandler::OtherFormsOfBrowsingHistoryQueryComplete,
+            weak_factory_.GetWeakPtr()));
   }
 }
 
@@ -690,6 +703,10 @@
 
   web_ui()->CallJavascriptFunction(
       "historyResult", results_info_value_, results_value);
+  web_ui()->CallJavascriptFunction(
+      "showNotification",
+      base::FundamentalValue(has_synced_results_),
+      base::FundamentalValue(has_other_forms_of_browsing_history_));
   results_info_value_.Clear();
   query_results_.clear();
   web_history_query_results_.clear();
@@ -829,11 +846,21 @@
       }
     }
   }
-  results_info_value_.SetBoolean("hasSyncedResults", results_value != NULL);
+  has_synced_results_ = results_value != nullptr;
+  results_info_value_.SetBoolean("hasSyncedResults", has_synced_results_);
   if (!query_task_tracker_.HasTrackedTasks())
     ReturnResultsToFrontEnd();
 }
 
+void BrowsingHistoryHandler::OtherFormsOfBrowsingHistoryQueryComplete(
+    bool found_other_forms_of_browsing_history) {
+  has_other_forms_of_browsing_history_ = found_other_forms_of_browsing_history;
+  web_ui()->CallJavascriptFunction(
+      "showNotification",
+      base::FundamentalValue(has_synced_results_),
+      base::FundamentalValue(has_other_forms_of_browsing_history_));
+}
+
 void BrowsingHistoryHandler::RemoveComplete() {
   urls_to_be_deleted_.clear();
 
diff --git a/chrome/browser/ui/webui/browsing_history_handler.h b/chrome/browser/ui/webui/browsing_history_handler.h
index f94ef2f..0146c4ad 100644
--- a/chrome/browser/ui/webui/browsing_history_handler.h
+++ b/chrome/browser/ui/webui/browsing_history_handler.h
@@ -162,6 +162,11 @@
                                history::WebHistoryService::Request* request,
                                const base::DictionaryValue* results_value);
 
+  // Callback telling us whether other forms of browsing history were found
+  // on the history server.
+  void OtherFormsOfBrowsingHistoryQueryComplete(
+      bool found_other_forms_of_browsing_history);
+
   // Callback from the history system when visits were deleted.
   void RemoveComplete();
 
@@ -218,6 +223,12 @@
   ScopedObserver<history::HistoryService, history::HistoryServiceObserver>
       history_service_observer_;
 
+  // Whether the last call to Web History returned synced results.
+  bool has_synced_results_;
+
+  // Whether there are other forms of browsing history on the history server.
+  bool has_other_forms_of_browsing_history_;
+
   base::WeakPtrFactory<BrowsingHistoryHandler> weak_factory_;
 
   DISALLOW_COPY_AND_ASSIGN(BrowsingHistoryHandler);
diff --git a/chrome/browser/ui/webui/history_ui.cc b/chrome/browser/ui/webui/history_ui.cc
index c07d39c..8f4e094 100644
--- a/chrome/browser/ui/webui/history_ui.cc
+++ b/chrome/browser/ui/webui/history_ui.cc
@@ -42,6 +42,9 @@
 
 namespace {
 
+static const char kMyActivityUrl[] =
+    "https://history.google.com/history/?utm_source=chrome_h";
+
 #if defined(OS_MACOSX)
 const char kIncognitoModeShortcut[] = "("
     "\xE2\x87\xA7"  // Shift symbol (U+21E7 'UPWARDS WHITE ARROW').
@@ -128,6 +131,10 @@
   source->AddLocalizedString("hasSyncedResults",
                              IDS_HISTORY_HAS_SYNCED_RESULTS);
   source->AddLocalizedString("noSyncedResults", IDS_HISTORY_NO_SYNCED_RESULTS);
+  source->AddString("otherFormsOfBrowsingHistory",
+                    l10n_util::GetStringFUTF16(
+                        IDS_HISTORY_OTHER_FORMS_OF_HISTORY,
+                        base::ASCIIToUTF16(kMyActivityUrl)));
   source->AddLocalizedString("cancel", IDS_CANCEL);
   source->AddLocalizedString("deleteConfirm",
                              IDS_HISTORY_DELETE_PRIOR_VISITS_CONFIRM_BUTTON);
diff --git a/chrome/browser/ui/webui/options/chromeos/guest_mode_options_browsertest.js b/chrome/browser/ui/webui/options/chromeos/guest_mode_options_browsertest.js
index b7a52858..f4a0d0e 100644
--- a/chrome/browser/ui/webui/options/chromeos/guest_mode_options_browsertest.js
+++ b/chrome/browser/ui/webui/options/chromeos/guest_mode_options_browsertest.js
@@ -44,7 +44,7 @@
 TEST_F('GuestModeOptionsUIBrowserTest', 'testSections', function() {
   this.expectHidden($('startup-section'));
   this.expectHidden($('appearance-section'));
-  this.expectHidden($('andorid-apps-section'));
+  this.expectHidden($('android-apps-section'));
   this.expectHidden($('sync-users-section'));
   this.expectHidden($('easy-unlock-section'));
   this.expectHidden($('reset-profile-settings-section'));
diff --git a/chrome/browser/ui/webui/options/clear_browser_data_handler.cc b/chrome/browser/ui/webui/options/clear_browser_data_handler.cc
index 892ad95..54e5ffe 100644
--- a/chrome/browser/ui/webui/options/clear_browser_data_handler.cc
+++ b/chrome/browser/ui/webui/options/clear_browser_data_handler.cc
@@ -14,6 +14,7 @@
 #include "base/metrics/sparse_histogram.h"
 #include "base/strings/string16.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/strings/utf_string_conversions.h"
 #include "base/values.h"
 #include "chrome/app/chrome_command_ids.h"
 #include "chrome/browser/browser_process.h"
@@ -26,6 +27,7 @@
 #include "chrome/browser/browsing_data/cache_counter.h"
 #include "chrome/browser/browsing_data/history_counter.h"
 #include "chrome/browser/browsing_data/passwords_counter.h"
+#include "chrome/browser/history/web_history_service_factory.h"
 #include "chrome/browser/prefs/incognito_mode_prefs.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/sync/profile_sync_service_factory.h"
@@ -33,6 +35,7 @@
 #include "chrome/common/pref_names.h"
 #include "chrome/grit/generated_resources.h"
 #include "chrome/grit/locale_settings.h"
+#include "components/browsing_data_ui/history_notice_utils.h"
 #include "components/google/core/browser/google_util.h"
 #include "components/prefs/pref_service.h"
 #include "content/public/browser/notification_details.h"
@@ -46,13 +49,24 @@
 const char kClearBrowsingDataLearnMoreUrl[] =
     "https://support.google.com/chrome/?p=settings_clear_browsing_data";
 
+const char kMyActivityUrlInFooter[] =
+    "https://history.google.com/history/?utm_source=chrome_cbd";
+
+const char kMyActivityUrlInDialog[] =
+    "https://history.google.com/history/?utm_source=chrome_n";
+
+const int kMaxTimesHistoryNoticeShown = 1;
+
 }  // namespace
 
 namespace options {
 
 ClearBrowserDataHandler::ClearBrowserDataHandler()
     : remover_(nullptr),
-      sync_service_(nullptr) {
+      sync_service_(nullptr),
+      should_show_history_notice_(false),
+      should_show_history_deletion_dialog_(false),
+      weak_ptr_factory_(this) {
 }
 
 ClearBrowserDataHandler::~ClearBrowserDataHandler() {
@@ -90,7 +104,9 @@
   web_ui()->CallJavascriptFunction(
       "ClearBrowserDataOverlay.createFooter",
       base::FundamentalValue(AreCountersEnabled()),
-      base::FundamentalValue(sync_service_ && sync_service_->IsSyncActive()));
+      base::FundamentalValue(sync_service_ && sync_service_->IsSyncActive()),
+      base::FundamentalValue(should_show_history_notice_));
+  RefreshHistoryNotice();
   UpdateInfoBannerVisibility();
   OnBrowsingHistoryPrefChanged();
   bool removal_in_progress = !!remover_;
@@ -141,6 +157,8 @@
     { "clearBrowserDataSupportString", AreCountersEnabled()
         ? IDS_CLEAR_BROWSING_DATA_SOME_STUFF_REMAINS_SIMPLE
         : IDS_CLEAR_BROWSING_DATA_SOME_STUFF_REMAINS },
+    { "clearBrowserDataHistoryNoticeTitle",
+        IDS_CLEAR_BROWSING_DATA_HISTORY_NOTICE_TITLE },
     { "deleteBrowsingHistoryCheckbox", IDS_DEL_BROWSING_HISTORY_CHKBOX },
     { "deleteDownloadHistoryCheckbox", IDS_DEL_DOWNLOAD_HISTORY_CHKBOX },
     { "deleteCacheCheckbox", IDS_DEL_CACHE_CHKBOX },
@@ -150,7 +168,7 @@
     { "deleteFormDataCheckbox", IDS_DEL_FORM_DATA_CHKBOX },
     { "deleteHostedAppsDataCheckbox", IDS_DEL_HOSTED_APPS_DATA_CHKBOX },
     { "deauthorizeContentLicensesCheckbox",
-      IDS_DEAUTHORIZE_CONTENT_LICENSES_CHKBOX },
+        IDS_DEAUTHORIZE_CONTENT_LICENSES_CHKBOX },
     { "clearBrowserDataCommit", IDS_CLEAR_BROWSING_DATA_COMMIT },
     { "flashStorageUrl", IDS_FLASH_STORAGE_URL },
   };
@@ -160,6 +178,16 @@
                 IDS_CLEAR_BROWSING_DATA_TITLE);
   localized_strings->SetString("clearBrowsingDataLearnMoreUrl",
                                kClearBrowsingDataLearnMoreUrl);
+  localized_strings->SetString(
+      "clearBrowserDataHistoryFooter",
+      l10n_util::GetStringFUTF16(
+          IDS_CLEAR_BROWSING_DATA_HISTORY_FOOTER,
+          base::ASCIIToUTF16(kMyActivityUrlInFooter)));
+  localized_strings->SetString(
+      "clearBrowserDataHistoryNotice",
+      l10n_util::GetStringFUTF16(
+          IDS_CLEAR_BROWSING_DATA_HISTORY_NOTICE,
+          base::ASCIIToUTF16(kMyActivityUrlInDialog)));
 
   base::ListValue* time_list = new base::ListValue;
   for (int i = 0; i < 5; i++) {
@@ -297,7 +325,30 @@
 void ClearBrowserDataHandler::OnBrowsingDataRemoverDone() {
   remover_->RemoveObserver(this);
   remover_ = nullptr;
-  web_ui()->CallJavascriptFunction("ClearBrowserDataOverlay.doneClearing");
+
+  PrefService* prefs = Profile::FromWebUI(web_ui())->GetPrefs();
+  int notice_shown_times =
+      prefs->GetInteger(prefs::kClearBrowsingDataHistoryNoticeShownTimes);
+
+  // When the deletion is complete, we might show an additional dialog with
+  // a notice about other forms of browsing history. This is the case if
+  const bool show_notice =
+      // 1. The dialog is relevant for the user.
+      should_show_history_deletion_dialog_ &&
+      // 2. The selected data types contained browsing history.
+      prefs->GetBoolean(prefs::kDeleteBrowsingHistory) &&
+      // 3. The notice has been shown less than |kMaxTimesHistoryNoticeShown|.
+      notice_shown_times < kMaxTimesHistoryNoticeShown;
+
+  if (show_notice) {
+    // Increment the preference.
+    prefs->SetInteger(prefs::kClearBrowsingDataHistoryNoticeShownTimes,
+                      notice_shown_times + 1);
+  }
+
+  web_ui()->CallJavascriptFunction(
+      "ClearBrowserDataOverlay.doneClearing",
+      base::FundamentalValue(show_notice));
 }
 
 void ClearBrowserDataHandler::OnBrowsingHistoryPrefChanged() {
@@ -328,8 +379,41 @@
 
 void ClearBrowserDataHandler::OnStateChanged() {
   web_ui()->CallJavascriptFunction(
-      "ClearBrowserDataOverlay.updateSyncWarning",
-      base::FundamentalValue(sync_service_ && sync_service_->IsSyncActive()));
+      "ClearBrowserDataOverlay.updateSyncWarningAndHistoryFooter",
+      base::FundamentalValue(sync_service_ && sync_service_->IsSyncActive()),
+      base::FundamentalValue(should_show_history_notice_));
+}
+
+void ClearBrowserDataHandler::RefreshHistoryNotice() {
+  browsing_data_ui::ShouldShowNoticeAboutOtherFormsOfBrowsingHistory(
+      sync_service_,
+      WebHistoryServiceFactory::GetForProfile(Profile::FromWebUI(web_ui())),
+      base::Bind(&ClearBrowserDataHandler::UpdateHistoryNotice,
+                 weak_ptr_factory_.GetWeakPtr()));
+
+  // If the dialog with history notice has been shown less than
+  // |kMaxTimesHistoryNoticeShown| times, we might have to show it when the
+  // user deletes history. Find out if the conditions are met.
+  int notice_shown_times = Profile::FromWebUI(web_ui())->GetPrefs()->
+      GetInteger(prefs::kClearBrowsingDataHistoryNoticeShownTimes);
+
+  if (notice_shown_times < kMaxTimesHistoryNoticeShown) {
+    browsing_data_ui::ShouldPopupDialogAboutOtherFormsOfBrowsingHistory(
+        sync_service_,
+        WebHistoryServiceFactory::GetForProfile(Profile::FromWebUI(web_ui())),
+        base::Bind(&ClearBrowserDataHandler::UpdateHistoryDeletionDialog,
+                   weak_ptr_factory_.GetWeakPtr()));
+  }
+}
+
+void ClearBrowserDataHandler::UpdateHistoryNotice(bool show) {
+  should_show_history_notice_ = show;
+  OnStateChanged();
+}
+
+void ClearBrowserDataHandler::UpdateHistoryDeletionDialog(bool show) {
+  // This is used by OnBrowsingDataRemoverDone (when the deletion finishes).
+  should_show_history_deletion_dialog_ = show;
 }
 
 }  // namespace options
diff --git a/chrome/browser/ui/webui/options/clear_browser_data_handler.h b/chrome/browser/ui/webui/options/clear_browser_data_handler.h
index 44786bc..036cb16 100644
--- a/chrome/browser/ui/webui/options/clear_browser_data_handler.h
+++ b/chrome/browser/ui/webui/options/clear_browser_data_handler.h
@@ -58,6 +58,18 @@
   // bottom of the dialog.
   void OnStateChanged() override;
 
+  // Finds out whether we should show a notice informing the user about other
+  // forms of browsing history. Responds with an asynchronous callback to
+  // |UpdateHistoryNotice|.
+  void RefreshHistoryNotice();
+
+  // Shows or hides the notice about other forms of browsing history.
+  void UpdateHistoryNotice(bool show);
+
+  // Remembers whether we should popup a dialog about other forms of browsing
+  // history when the user deletes the history for the first time.
+  void UpdateHistoryDeletionDialog(bool show);
+
   // If non-null it means removal is in progress.
   BrowsingDataRemover* remover_;
 
@@ -77,6 +89,16 @@
   // Informs us whether the user is syncing their data.
   ProfileSyncService* sync_service_;
 
+  // Whether we should show a notice about other forms of browsing history.
+  bool should_show_history_notice_;
+
+  // Whether we should popup a dialog about other forms of browsing history
+  // when the user deletes their browsing history for the first time.
+  bool should_show_history_deletion_dialog_;
+
+  // A weak pointer factory for asynchronous calls referencing this class.
+  base::WeakPtrFactory<ClearBrowserDataHandler> weak_ptr_factory_;
+
   DISALLOW_COPY_AND_ASSIGN(ClearBrowserDataHandler);
 };
 
diff --git a/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc b/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc
index 5431a05..381c032 100644
--- a/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc
+++ b/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc
@@ -858,12 +858,13 @@
 }
 
 void InlineLoginHandlerImpl::HandleLoginError(const std::string& error_msg) {
-  CloseModalSigninIfNeeded(this);
   SyncStarterCallback(OneClickSigninSyncStarter::SYNC_SETUP_FAILURE);
-
   Browser* browser = GetDesktopBrowser();
+  Profile* profile = Profile::FromWebUI(web_ui());
+
+  CloseModalSigninIfNeeded(this);
   if (browser && !error_msg.empty()) {
-    LoginUIServiceFactory::GetForProfile(Profile::FromWebUI(web_ui()))->
+    LoginUIServiceFactory::GetForProfile(profile)->
         DisplayLoginResult(browser, base::UTF8ToUTF16(error_msg));
   }
 }
diff --git a/chrome/chrome_browser_chromeos.gypi b/chrome/chrome_browser_chromeos.gypi
index 289d73d..8940a1e 100644
--- a/chrome/chrome_browser_chromeos.gypi
+++ b/chrome/chrome_browser_chromeos.gypi
@@ -60,6 +60,8 @@
         'browser/chromeos/arc/arc_auth_service.h',
         'browser/chromeos/arc/arc_service_launcher.cc',
         'browser/chromeos/arc/arc_service_launcher.h',
+        'browser/chromeos/arc/arc_support_host.cc',
+        'browser/chromeos/arc/arc_support_host.h',
         'browser/chromeos/arc/arc_policy_bridge.cc',
         'browser/chromeos/arc/arc_policy_bridge.h',
         'browser/chromeos/arc/arc_process.h',
diff --git a/chrome/chrome_browser_extensions.gypi b/chrome/chrome_browser_extensions.gypi
index d222f408..a03bebe 100644
--- a/chrome/chrome_browser_extensions.gypi
+++ b/chrome/chrome_browser_extensions.gypi
@@ -33,8 +33,6 @@
       'browser/extensions/api/log_private/log_private_api_chromeos.cc',
       'browser/extensions/api/log_private/syslog_parser.cc',
       'browser/extensions/api/log_private/syslog_parser.h',
-      'browser/extensions/api/messaging/arc_support_host.cc',
-      'browser/extensions/api/messaging/arc_support_host.h',
       'browser/extensions/api/messaging/native_message_host_chromeos.cc',
       'browser/extensions/api/networking_private/crypto_verify_impl.cc',
       'browser/extensions/api/networking_private/crypto_verify_impl.h',
diff --git a/chrome/chrome_browser_ui.gypi b/chrome/chrome_browser_ui.gypi
index af3ab7c..4e6905d 100644
--- a/chrome/chrome_browser_ui.gypi
+++ b/chrome/chrome_browser_ui.gypi
@@ -2955,6 +2955,7 @@
             'installer_util',
             '../components/components.gyp:app_modal',
             '../components/components.gyp:autofill_content_risk_proto',
+            '../components/components.gyp:browsing_data_ui',
             '../components/components.gyp:crash_core_browser',
             '../components/components.gyp:flags_ui',
             '../components/components.gyp:net_log',
diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi
index aafe00f..445dce98 100644
--- a/chrome/chrome_tests.gypi
+++ b/chrome/chrome_tests.gypi
@@ -826,6 +826,7 @@
       'browser/chromeos/policy/device_local_account_browsertest.cc',
       'browser/chromeos/policy/device_policy_cros_browser_test.cc',
       'browser/chromeos/policy/device_policy_cros_browser_test.h',
+      'browser/chromeos/policy/device_quirks_policy_browsertest.cc',
       'browser/chromeos/policy/device_status_collector_browsertest.cc',
       'browser/chromeos/policy/device_system_use_24hour_clock_browsertest.cc',
       'browser/chromeos/policy/display_rotation_default_handler_browsertest.cc',
@@ -2263,6 +2264,7 @@
       'conditions': [
         ['chromeos==1', {
           'dependencies': [
+            '../components/components.gyp:arc_test_support',
             '../third_party/boringssl/boringssl.gyp:boringssl',
           ]
         }, {
diff --git a/chrome/chrome_tests_unit.gypi b/chrome/chrome_tests_unit.gypi
index 338a120d..781db9a9 100644
--- a/chrome/chrome_tests_unit.gypi
+++ b/chrome/chrome_tests_unit.gypi
@@ -1631,6 +1631,7 @@
     ],
     'chrome_unit_tests_arc_sources': [
       'browser/chromeos/arc/arc_auth_service_unittest.cc',
+      'browser/chromeos/arc/arc_policy_bridge_unittest.cc',
     ],
     # Sources for Offline pages. For now only for Android.
     'chrome_unit_tests_offline_pages_sources': [
diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc
index f8aff32..c3c12e97 100644
--- a/chrome/common/pref_names.cc
+++ b/chrome/common/pref_names.cc
@@ -880,6 +880,8 @@
 const char kDeleteTimePeriod[] = "browser.clear_data.time_period";
 const char kLastClearBrowsingDataTime[] =
     "browser.last_clear_browsing_data_time";
+const char kClearBrowsingDataHistoryNoticeShownTimes[] =
+    "browser.clear_data.history_notice_shown_times";
 
 // Boolean pref to define the default values for using spellchecker.
 const char kEnableContinuousSpellcheck[] = "browser.enable_spellchecking";
diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h
index 0890759..50a3471 100644
--- a/chrome/common/pref_names.h
+++ b/chrome/common/pref_names.h
@@ -306,6 +306,7 @@
 extern const char kRecordHistory[];
 extern const char kDeleteTimePeriod[];
 extern const char kLastClearBrowsingDataTime[];
+extern const char kClearBrowsingDataHistoryNoticeShownTimes[];
 #if defined(OS_LINUX) && !defined(OS_CHROMEOS)
 extern const char kUsesSystemTheme[];
 #endif
diff --git a/chrome/renderer/autofill/password_generation_agent_browsertest.cc b/chrome/renderer/autofill/password_generation_agent_browsertest.cc
index cdcdeb9b..410b75b8 100644
--- a/chrome/renderer/autofill/password_generation_agent_browsertest.cc
+++ b/chrome/renderer/autofill/password_generation_agent_browsertest.cc
@@ -596,4 +596,15 @@
   ExpectGenerationAvailable("second_password", false);
 }
 
+TEST_F(PasswordGenerationAgentTest, ManualGenerationChangeFocusTest) {
+  // This test simulates focus change after user triggered password generation.
+  // PasswordGenerationAgent should save last focused password element and
+  // generate password, even if focused element has changed.
+  LoadHTMLWithUserGesture(kAccountCreationFormHTML);
+  FocusField("first_password");
+  ShowGenerationPopUpManually("username" /* current focus */);
+  ExpectGenerationAvailable("first_password", true);
+  ExpectGenerationAvailable("second_password", false);
+}
+
 }  // namespace autofill
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 079d7bc..2b9f3c74 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -1068,6 +1068,7 @@
       ]
       deps += [
         "//chromeos/ime:gencode",
+        "//components/arc:arc_test_support",
         "//components/user_manager:test_support",
         "//dbus",
         "//dbus:test_support",
diff --git a/chrome/test/data/policy/policy_test_cases.json b/chrome/test/data/policy/policy_test_cases.json
index 9ad87ff6..0b67419f 100644
--- a/chrome/test/data/policy/policy_test_cases.json
+++ b/chrome/test/data/policy/policy_test_cases.json
@@ -2442,7 +2442,10 @@
   "ArcEnabled": {
     "os": ["chromeos"],
     "can_be_recommended": false,
-    "test_policy": { "ArcEnabled": false }
+    "test_policy": { "ArcEnabled": false },
+    "pref_mappings": [
+      { "pref": "arc.enabled" }
+    ]
   },
 
   "ArcApplicationPolicy": {
@@ -2687,6 +2690,15 @@
   "DeviceAllowBluetooth": {
   },
 
+  "DeviceQuirksDownloadEnabled": {
+    "os": ["chromeos"],
+    "can_be_recommended": false,
+    "test_policy": { "DeviceQuirksDownloadEnabled": true },
+    "pref_mappings": [
+      { "pref": "cros.device.quirks_download_enabled" }
+    ]
+  },
+
   "----- Chrome Frame policies -------------------------------------------": {},
 
   "ChromeFrameRendererSettings": {
diff --git a/chrome/test/data/webui/history_browsertest.js b/chrome/test/data/webui/history_browsertest.js
index d49ee8b..c35b5fb 100644
--- a/chrome/test/data/webui/history_browsertest.js
+++ b/chrome/test/data/webui/history_browsertest.js
@@ -784,7 +784,7 @@
     // AX_TEXT_04: http://crbug.com/560914
     this.accessibilityAuditConfig.ignoreSelectors(
         'linkWithUnclearPurpose',
-        '#notification-bar > A');
+        '#notification-bar > SPAN > A');
   },
 };
 
diff --git a/chrome/test/data/webui/settings/cr_settings_browsertest.js b/chrome/test/data/webui/settings/cr_settings_browsertest.js
index 34ef70ec..50e101e8 100644
--- a/chrome/test/data/webui/settings/cr_settings_browsertest.js
+++ b/chrome/test/data/webui/settings/cr_settings_browsertest.js
@@ -221,14 +221,6 @@
   browsePreload: 'chrome://md-settings/prefs/prefs.html',
 
   /** @override */
-  preLoad: function() {
-    SettingsPageBrowserTest.prototype.preLoad.call(this);
-
-    cr.exportPath('settings_test').siteCategoryNotifyForTest = true;
-    cr.exportPath('settings_test').siteListNotifyForTest = true;
-  },
-
-  /** @override */
   extraLibraries: PolymerTest.getLibraries(ROOT_PATH).concat([
     'site_details_tests.js',
     'site_details_permission_tests.js',
diff --git a/chrome/test/data/webui/settings/site_list_tests.js b/chrome/test/data/webui/settings/site_list_tests.js
index ffe81d83..9235f42 100644
--- a/chrome/test/data/webui/settings/site_list_tests.js
+++ b/chrome/test/data/webui/settings/site_list_tests.js
@@ -192,22 +192,6 @@
       });
 
       /**
-       * Returns a promise that resolves once the site list has been updated.
-       * @param {function()} action is executed after the listener is set up.
-       * @return {!Promise} a Promise fulfilled when the selected item changes.
-       */
-      function runAndResolveWhenSitesChanged(action) {
-        return new Promise(function(resolve, reject) {
-          var handler = function() {
-            testElement.removeEventListener('sites-changed', handler);
-            resolve();
-          };
-          testElement.addEventListener('sites-changed', handler);
-          action();
-        });
-      }
-
-      /**
        * Asserts if a menu action is incorrectly hidden.
        * @param {!HTMLElement} parentElement The parent node to start looking
        *     in.
@@ -215,14 +199,19 @@
        *     should be hidden.
        */
       function assertMenuActionHidden(parentElement, textForHiddenAction) {
-        var actions = parentElement.$.listContainer.items;
-        for (var i = 0; i < actions.length; ++i) {
-          var content = actions[i].textContent.trim();
-          if (content == textForHiddenAction)
-            assertTrue(actions[i].hidden);
-          else
-            assertFalse(actions[i].hidden);
-        }
+        var listItem = parentElement.$.listContainer.items[0];
+        var menuItems =
+            listItem.querySelectorAll('paper-menu-button paper-item');
+        assertNotEquals(0, menuItems.length);
+
+        var found = false;
+        menuItems.forEach(function(item) {
+          var text = item.textContent.trim();
+          if (text == textForHiddenAction)
+            found = true;
+          assertEquals(text == textForHiddenAction, item.hidden);
+        });
+        assertTrue(found);
       }
 
       /**
@@ -272,179 +261,246 @@
       });
 
       test('Empty list', function() {
-        return runAndResolveWhenSitesChanged(function() {
-          setupLocationCategory(settings.PermissionValues.ALLOW, prefsEmpty);
-        }).then(function() {
-          assertEquals(0, testElement.sites.length);
+        setupLocationCategory(settings.PermissionValues.ALLOW, prefsEmpty);
+        return browserProxy.whenCalled('getExceptionList').then(
+          function(contentType) {
+            assertEquals(
+                settings.ContentSettingsTypes.GEOLOCATION, contentType);
 
-          assertTrue(testElement.isAllowList_());
-          assertFalse(testElement.showSiteList_(testElement.sites, true));
-          assertFalse(testElement.showSiteList_(testElement.sites, false));
-          assertEquals('Allow - 0', testElement.computeSiteListHeader_(
-              testElement.sites, true));
-          assertEquals('Exceptions - 0', testElement.computeSiteListHeader_(
-              testElement.sites, false));
-        }.bind(this));
+            assertEquals(0, testElement.sites.length);
+
+            assertEquals(
+                settings.PermissionValues.ALLOW, testElement.categorySubtype);
+            assertEquals('Allow - 0', testElement.$.header.innerText);
+
+            // Site list should not show, no matter what category default is set
+            // to.
+            assertTrue(testElement.$.category.hidden);
+            browserProxy.resetResolver('getExceptionList');
+            testElement.categoryEnabled = false;
+            return browserProxy.whenCalled('getExceptionList').then(
+              function(contentType) {
+                assertTrue(testElement.$.category.hidden);
+                assertEquals('Exceptions - 0', testElement.$.header.innerText);
+            });
+          });
       });
 
       test('initial ALLOW state is correct', function() {
-        return runAndResolveWhenSitesChanged(function() {
-          setupLocationCategory(settings.PermissionValues.ALLOW, prefs);
-        }).then(function() {
-          assertEquals(2, testElement.sites.length);
-          assertEquals('https://bar-allow.com:443', testElement.sites[0].origin);
-          assertTrue(testElement.isAllowList_());
-          assertMenuActionHidden(testElement, 'Allow');
-          // Site list should show, no matter what category default is set to.
-          assertTrue(testElement.showSiteList_(testElement.sites, true));
-          assertTrue(testElement.showSiteList_(testElement.sites, false));
-          assertEquals('Exceptions - 2', testElement.computeSiteListHeader_(
-              testElement.sites, false));
-          assertEquals('Allow - 2', testElement.computeSiteListHeader_(
-              testElement.sites, true));
-        }.bind(this));
+        setupLocationCategory(settings.PermissionValues.ALLOW, prefs);
+        return browserProxy.whenCalled('getExceptionList').then(
+          function(contentType) {
+            assertEquals(
+                settings.ContentSettingsTypes.GEOLOCATION, contentType);
+
+            assertEquals(2, testElement.sites.length);
+            assertEquals(prefs.exceptions.geolocation[1].origin,
+                testElement.sites[0].origin);
+            assertEquals(
+                settings.PermissionValues.ALLOW, testElement.categorySubtype);
+            Polymer.dom.flush();  // Populates action menu.
+            assertMenuActionHidden(testElement, 'Allow');
+            assertEquals('Allow - 2', testElement.$.header.innerText);
+
+            // Site list should show, no matter what category default is set to.
+            assertFalse(testElement.$.category.hidden);
+            browserProxy.resetResolver('getExceptionList');
+            testElement.categoryEnabled = false;
+            return browserProxy.whenCalled('getExceptionList').then(
+              function(contentType) {
+                assertFalse(testElement.$.category.hidden);
+                assertEquals('Exceptions - 2', testElement.$.header.innerText);
+            });
+          });
       });
 
       test('initial BLOCK state is correct', function() {
-        return runAndResolveWhenSitesChanged(function() {
-          setupLocationCategory(settings.PermissionValues.BLOCK, prefs);
-        }).then(function() {
-          assertEquals(2, testElement.sites.length);
-          assertEquals('https://bar-block.com:443', testElement.sites[0].origin);
+        setupLocationCategory(settings.PermissionValues.BLOCK, prefs);
+        return browserProxy.whenCalled('getExceptionList').then(
+          function(contentType) {
+            assertEquals(
+                settings.ContentSettingsTypes.GEOLOCATION, contentType);
 
-          assertFalse(testElement.isAllowList_());
-          assertMenuActionHidden(testElement, 'Block');
-          // Site list should only show when category default is enabled.
-          assertFalse(testElement.showSiteList_(testElement.sites, false));
-          assertTrue(testElement.showSiteList_(testElement.sites, true));
-          assertEquals('Block - 2', testElement.computeSiteListHeader_(
-              testElement.sites, true));
-        }.bind(this));
+            assertEquals(2, testElement.sites.length);
+            assertEquals(prefs.exceptions.geolocation[3].origin,
+                testElement.sites[0].origin);
+
+            assertEquals(
+                settings.PermissionValues.BLOCK, testElement.categorySubtype);
+            Polymer.dom.flush();  // Populates action menu.
+            assertMenuActionHidden(testElement, 'Block');
+            assertEquals('Block - 2', testElement.$.header.innerText);
+
+            // Site list should only show when category default is enabled.
+            assertFalse(testElement.$.category.hidden);
+            browserProxy.resetResolver('getExceptionList');
+            testElement.categoryEnabled = false;
+            return browserProxy.whenCalled('getExceptionList').then(
+              function(contentType) {
+                assertTrue(testElement.$.category.hidden);
+            });
+          });
       });
 
       test('list items shown and clickable when data is present', function() {
-        return runAndResolveWhenSitesChanged(function() {
-          setupLocationCategory(settings.PermissionValues.ALLOW, prefs);
-        }).then(function() {
-          // Required for firstItem to be found below.
-          Polymer.dom.flush();
+        setupLocationCategory(settings.PermissionValues.ALLOW, prefs);
+        return browserProxy.whenCalled('getExceptionList').then(
+          function(contentType) {
+            assertEquals(
+                settings.ContentSettingsTypes.GEOLOCATION, contentType);
 
-          // Validate that the sites gets populated from pre-canned prefs.
-          assertEquals(2, testElement.sites.length);
-          assertEquals('https://bar-allow.com:443', testElement.sites[0].origin);
-          assertEquals(undefined, testElement.selectedOrigin);
+            // Required for firstItem to be found below.
+            Polymer.dom.flush();
 
-          // Validate that the sites are shown in UI and can be selected.
-          var firstItem = testElement.$.listContainer.items[0];
-          var clickable = firstItem.querySelector('.flex paper-item-body');
-          assertNotEquals(undefined, clickable);
-          MockInteractions.tap(clickable);
-          assertEquals(
-              'https://bar-allow.com:443', testElement.selectedSite.origin);
-        }.bind(this));
+            // Validate that the sites gets populated from pre-canned prefs.
+            assertEquals(2, testElement.sites.length);
+            assertEquals(prefs.exceptions.geolocation[1].origin,
+                testElement.sites[0].origin);
+            assertEquals(undefined, testElement.selectedOrigin);
+
+            // Validate that the sites are shown in UI and can be selected.
+            var firstItem = testElement.$.listContainer.items[0];
+            var clickable = firstItem.querySelector('.flex paper-item-body');
+            assertNotEquals(undefined, clickable);
+            MockInteractions.tap(clickable);
+            assertEquals(prefs.exceptions.geolocation[1].origin,
+                testElement.selectedSite.origin);
+        });
       });
 
       test('Block list open when Allow list is empty', function() {
-        return runAndResolveWhenSitesChanged(function() {
-          // Prefs: One item in Block list, nothing in Allow list.
-          setupLocationCategory(settings.PermissionValues.BLOCK,
-                                prefsOneDisabled);
-        }).then(function() {
-          assertFalse(testElement.$.category.hidden);
-          assertTrue(testElement.$.category.opened);
-          assertNotEquals(0, testElement.$.listContainer.offsetHeight);
-        }.bind(this));
+        // Prefs: One item in Block list, nothing in Allow list.
+        setupLocationCategory(settings.PermissionValues.BLOCK,
+                              prefsOneDisabled);
+        return browserProxy.whenCalled('getExceptionList').then(
+          function(contentType) {
+            assertEquals(
+                settings.ContentSettingsTypes.GEOLOCATION, contentType);
+
+            assertFalse(testElement.$.category.hidden);
+            assertTrue(testElement.$.category.opened);
+            assertNotEquals(0, testElement.$.listContainer.offsetHeight);
+        });
       });
 
       test('Block list closed when Allow list is not empty', function() {
-        return runAndResolveWhenSitesChanged(function() {
-          // Prefs: Items in both Block and Allow list.
-          setupLocationCategory(settings.PermissionValues.BLOCK, prefs);
-        }).then(function() {
-          assertFalse(testElement.$.category.hidden);
-          assertFalse(testElement.$.category.opened);
-          assertEquals(0, testElement.$.listContainer.offsetHeight);
-        }.bind(this));
+        // Prefs: Items in both Block and Allow list.
+        setupLocationCategory(settings.PermissionValues.BLOCK, prefs);
+        return browserProxy.whenCalled('getExceptionList').then(
+          function(contentType) {
+            assertEquals(
+                settings.ContentSettingsTypes.GEOLOCATION, contentType);
+
+            assertFalse(testElement.$.category.hidden);
+            assertFalse(testElement.$.category.opened);
+            assertEquals(0, testElement.$.listContainer.offsetHeight);
+        });
       });
 
       test('Allow list is always open (Block list empty)', function() {
-        return runAndResolveWhenSitesChanged(function() {
-          // Prefs: One item in Allow list, nothing in Block list.
-          setupLocationCategory(
-              settings.PermissionValues.ALLOW, prefsOneEnabled);
-        }).then(function() {
-          assertFalse(testElement.$.category.hidden);
-          assertTrue(testElement.$.category.opened);
-          assertNotEquals(0, testElement.$.listContainer.offsetHeight);
-        }.bind(this));
+        // Prefs: One item in Allow list, nothing in Block list.
+        setupLocationCategory(
+            settings.PermissionValues.ALLOW, prefsOneEnabled);
+        return browserProxy.whenCalled('getExceptionList').then(
+          function(contentType) {
+            assertEquals(
+                settings.ContentSettingsTypes.GEOLOCATION, contentType);
+
+            assertFalse(testElement.$.category.hidden);
+            assertTrue(testElement.$.category.opened);
+            assertNotEquals(0, testElement.$.listContainer.offsetHeight);
+        });
       });
 
       test('Allow list is always open (Block list non-empty)', function() {
-        return runAndResolveWhenSitesChanged(function() {
-          // Prefs: Items in both Block and Allow list.
-          setupLocationCategory(settings.PermissionValues.ALLOW, prefs);
-        }).then(function() {
-          assertFalse(testElement.$.category.hidden);
-          assertTrue(testElement.$.category.opened);
-          assertNotEquals(0, testElement.$.listContainer.offsetHeight);
-        }.bind(this));
+        // Prefs: Items in both Block and Allow list.
+        setupLocationCategory(settings.PermissionValues.ALLOW, prefs);
+        return browserProxy.whenCalled('getExceptionList').then(
+          function(contentType) {
+            assertEquals(
+                settings.ContentSettingsTypes.GEOLOCATION, contentType);
+
+            assertFalse(testElement.$.category.hidden);
+            assertTrue(testElement.$.category.opened);
+            assertNotEquals(0, testElement.$.listContainer.offsetHeight);
+        });
       });
 
       test('Block list hidden when empty', function() {
-        return runAndResolveWhenSitesChanged(function() {
-          // Prefs: One item in Allow list, nothing in Block list.
-          setupLocationCategory(
-              settings.PermissionValues.BLOCK, prefsOneEnabled);
-        }).then(function() {
-          assertTrue(testElement.$.category.hidden);
-        }.bind(this));
+        // Prefs: One item in Allow list, nothing in Block list.
+        setupLocationCategory(
+            settings.PermissionValues.BLOCK, prefsOneEnabled);
+        return browserProxy.whenCalled('getExceptionList').then(
+          function(contentType) {
+            assertEquals(
+                settings.ContentSettingsTypes.GEOLOCATION, contentType);
+
+            assertTrue(testElement.$.category.hidden);
+        });
       });
 
       test('Allow list hidden when empty', function() {
-        return runAndResolveWhenSitesChanged(function() {
-          // Prefs: One item in Block list, nothing in Allow list.
-          setupLocationCategory(settings.PermissionValues.ALLOW,
-                                prefsOneDisabled);
-        }).then(function() {
-          assertTrue(testElement.$.category.hidden);
-        }.bind(this));
+        // Prefs: One item in Block list, nothing in Allow list.
+        setupLocationCategory(settings.PermissionValues.ALLOW,
+                              prefsOneDisabled);
+        return browserProxy.whenCalled('getExceptionList').then(
+          function(contentType) {
+            assertEquals(
+                settings.ContentSettingsTypes.GEOLOCATION, contentType);
+
+            assertTrue(testElement.$.category.hidden);
+        });
       });
 
-      test('All sites category', function() {
-        return runAndResolveWhenSitesChanged(function() {
-          // Prefs: Multiple and overlapping sites.
-          setupAllSitesCategory(prefsVarious);
-        }).then(function() {
-          // Required for firstItem to be found below.
-          Polymer.dom.flush();
+      test('All sites category', function(done) {
+        // Prefs: Multiple and overlapping sites.
+        setupAllSitesCategory(prefsVarious);
 
-          assertFalse(testElement.$.category.hidden);
-          // Validate that the sites gets populated from pre-canned prefs. If
-          // this fails with 5 instead of the expected 3, then the de-duping of
-          // sites is not working for site_list.
-          assertEquals(3, testElement.sites.length);
-          assertEquals('https://bar.com', testElement.sites[0].origin);
-          assertEquals('https://foo.com', testElement.sites[1].origin);
-          assertEquals('https://google.com', testElement.sites[2].origin);
-          assertEquals(undefined, testElement.selectedOrigin);
+        browserProxy.whenCalled('getExceptionList').then(
+          function(contentType) {
+            testElement.async(function() {
+              // All Sites calls getExceptionList for all categories, starting
+              // with Cookies.
+              assertEquals(settings.ContentSettingsTypes.COOKIES, contentType);
 
-          // Validate that the sites are shown in UI and can be selected.
-          var firstItem = testElement.$.listContainer.items[1];
-          var clickable = firstItem.querySelector('.flex paper-item-body');
-          assertNotEquals(undefined, clickable);
-          MockInteractions.tap(clickable);
-          assertEquals('https://foo.com', testElement.selectedSite.origin);
-        }.bind(this));
+              // Required for firstItem to be found below.
+              Polymer.dom.flush();
+
+              assertTrue(testElement.$.category.opened);
+              assertFalse(testElement.$.category.hidden);
+              // Validate that the sites gets populated from pre-canned prefs.
+              // If this fails with 5 instead of the expected 3, then the
+              // de-duping of sites is not working for site_list.
+              assertEquals(3, testElement.sites.length);
+              assertEquals(prefsVarious.exceptions.geolocation[1].origin,
+                  testElement.sites[0].origin);
+              assertEquals(prefsVarious.exceptions.geolocation[0].origin,
+                  testElement.sites[1].origin);
+              assertEquals(prefsVarious.exceptions.notifications[0].origin,
+                  testElement.sites[2].origin);
+              assertEquals(undefined, testElement.selectedOrigin);
+
+              // Validate that the sites are shown in UI and can be selected.
+              var firstItem = testElement.$.listContainer.items[1];
+              var clickable = firstItem.querySelector('.flex paper-item-body');
+              assertNotEquals(undefined, clickable);
+              MockInteractions.tap(clickable);
+              assertEquals(prefsVarious.exceptions.geolocation[0].origin,
+                  testElement.selectedSite.origin);
+
+              done();
+          });
+        });
       });
 
       test('Mixed schemes (present and absent)', function() {
-        return runAndResolveWhenSitesChanged(function() {
-          // Prefs: One item with scheme and one without.
-          setupLocationCategory(settings.PermissionValues.ALLOW,
-                                prefsMixedSchemes);
-        }).then(function() {
-          // No further checks needed. If this fails, it will hang the test.
-        }.bind(this));
+        // Prefs: One item with scheme and one without.
+        setupLocationCategory(settings.PermissionValues.ALLOW,
+                              prefsMixedSchemes);
+        return browserProxy.whenCalled('getExceptionList').then(
+          function(contentType) {
+            // No further checks needed. If this fails, it will hang the test.
+        });
       });
     });
   }
diff --git a/chrome/test/data/webui/settings/site_settings_category_tests.js b/chrome/test/data/webui/settings/site_settings_category_tests.js
index 230ca937..9568cfe 100644
--- a/chrome/test/data/webui/settings/site_settings_category_tests.js
+++ b/chrome/test/data/webui/settings/site_settings_category_tests.js
@@ -59,23 +59,6 @@
         document.body.appendChild(testElement);
       });
 
-      /**
-       * Returns a promise that resolves once the selected item is updated.
-       * @param {function()} action is executed after the listener is set up.
-       * @return {!Promise} a Promise fulfilled when the selected item changes.
-       */
-      function runAndResolveWhenCategoryEnabledChanged(action) {
-        return new Promise(function(resolve, reject) {
-          var handler = function() {
-            testElement.removeEventListener(
-                'category-enabled-changed', handler);
-            resolve();
-          };
-          testElement.addEventListener('category-enabled-changed', handler);
-          action();
-        });
-      }
-
       test('getDefaultValueForContentType API used', function() {
         testElement.category = settings.ContentSettingsTypes.GEOLOCATION;
         return browserProxy.whenCalled('getDefaultValueForContentType').then(
@@ -85,31 +68,37 @@
             });
       });
 
+      function testCategoryEnabled(testElement, enabled) {
+        browserProxy.setPrefs(
+            enabled ? prefsLocationEnabled : prefsLocationDisabled);
+
+        testElement.category = settings.ContentSettingsTypes.GEOLOCATION;
+        return browserProxy.whenCalled('getDefaultValueForContentType').then(
+          function(contentType) {
+            assertEquals(
+                settings.ContentSettingsTypes.GEOLOCATION, contentType);
+            assertEquals(enabled, testElement.categoryEnabled);
+            MockInteractions.tap(testElement.$.toggle);
+            return browserProxy.whenCalled(
+                'setDefaultValueForContentType').then(
+              function(arguments) {
+                  assertEquals(
+                      settings.ContentSettingsTypes.GEOLOCATION, arguments[0]);
+                assertEquals(
+                    enabled ? settings.PermissionValues.BLOCK :
+                        settings.PermissionValues.ASK,
+                    arguments[1]);
+                assertNotEquals(enabled, testElement.categoryEnabled);
+              });
+          });
+      }
+
       test('categoryEnabled correctly represents prefs (enabled)', function() {
-        return runAndResolveWhenCategoryEnabledChanged(function() {
-          browserProxy.setPrefs(prefsLocationEnabled);
-          testElement.category = settings.ContentSettingsTypes.GEOLOCATION;
-        }).then(function() {
-          assertTrue(testElement.categoryEnabled);
-          MockInteractions.tap(testElement.$.toggle);
-          assertFalse(testElement.categoryEnabled);
-        });
+        return testCategoryEnabled(testElement, true);
       });
 
       test('categoryEnabled correctly represents prefs (disabled)', function() {
-        // In order for the 'change' event to trigger, the value monitored needs
-        // to actually change (the event is not sent otherwise). Therefore,
-        // ensure the initial state of enabledness is opposite of what we expect
-        // it to end at.
-        testElement.categoryEnabled = true;
-        return runAndResolveWhenCategoryEnabledChanged(function() {
-          browserProxy.setPrefs(prefsLocationDisabled);
-          testElement.category = settings.ContentSettingsTypes.GEOLOCATION;
-        }).then(function() {
-          assertFalse(testElement.categoryEnabled);
-          MockInteractions.tap(testElement.$.toggle);
-          assertTrue(testElement.categoryEnabled);
-        });
+        return testCategoryEnabled(testElement, false);
       });
 
       test('basic category tests', function() {
diff --git a/chrome/test/data/webui/settings/test_site_settings_prefs_browser_proxy.js b/chrome/test/data/webui/settings/test_site_settings_prefs_browser_proxy.js
index a7b2982..a05734d 100644
--- a/chrome/test/data/webui/settings/test_site_settings_prefs_browser_proxy.js
+++ b/chrome/test/data/webui/settings/test_site_settings_prefs_browser_proxy.js
@@ -74,27 +74,6 @@
 
   /** @override */
   setDefaultValueForContentType: function(contentType, defaultValue) {
-    if (contentType == settings.ContentSettingsTypes.CAMERA)
-      this.prefs_.defaults.media_stream_camera = defaultValue == 'allow';
-    else if (contentType == settings.ContentSettingsTypes.COOKIES)
-      this.prefs_.defaults.cookies = defaultValue == 'allow';
-    else if (contentType == settings.ContentSettingsTypes.FULLSCREEN)
-      this.prefs_.defaults.fullscreen = defaultValue == 'allow';
-    else if (contentType == settings.ContentSettingsTypes.GEOLOCATION)
-      this.prefs_.defaults.geolocation = defaultValue == 'allow';
-    else if (contentType == settings.ContentSettingsTypes.IMAGES)
-      this.prefs_.defaults.images = defaultValue == 'allow';
-    else if (contentType == settings.ContentSettingsTypes.JAVASCRIPT)
-      this.prefs_.defaults.javascript = defaultValue == 'allow';
-    else if (contentType == settings.ContentSettingsTypes.MIC)
-      this.prefs_.defaults.media_stream_mic = defaultValue == 'allow';
-    else if (contentType == settings.ContentSettingsTypes.NOTIFICATIONS)
-      this.prefs_.defaults.notifications = defaultValue == 'allow';
-    else if (contentType == settings.ContentSettingsTypes.POPUPS)
-      this.prefs_.defaults.popups = defaultValue == 'allow';
-    else
-      console.log('setDefault received unknown category: ' + contentType);
-
     this.methodCalled(
         'setDefaultValueForContentType', [contentType, defaultValue]);
   },
diff --git a/chrome_elf/blacklist/test/blacklist_test.cc b/chrome_elf/blacklist/test/blacklist_test.cc
index 35b8805..0928f753 100644
--- a/chrome_elf/blacklist/test/blacklist_test.cc
+++ b/chrome_elf/blacklist/test/blacklist_test.cc
@@ -4,6 +4,8 @@
 
 #include <stddef.h>
 
+#include <memory>
+
 #include "base/environment.h"
 #include "base/files/file_path.h"
 #include "base/files/scoped_temp_dir.h"
@@ -117,7 +119,7 @@
     }
   }
 
-  scoped_ptr<base::win::RegKey> blacklist_registry_key_;
+  std::unique_ptr<base::win::RegKey> blacklist_registry_key_;
   registry_util::RegistryOverrideManager override_manager_;
 
   // The number of dlls initially blocked by the blacklist.
@@ -267,7 +269,7 @@
   CheckBlacklistedDllsNotLoaded();
 }
 
-void TestResetBeacon(scoped_ptr<base::win::RegKey>& key,
+void TestResetBeacon(std::unique_ptr<base::win::RegKey>& key,
                      DWORD input_state,
                      DWORD expected_output_state) {
   LONG result = key->WriteValue(blacklist::kBeaconState, input_state);
diff --git a/chromeos/dbus/fake_session_manager_client.cc b/chromeos/dbus/fake_session_manager_client.cc
index 3c055b4..58ffcd7 100644
--- a/chromeos/dbus/fake_session_manager_client.cc
+++ b/chromeos/dbus/fake_session_manager_client.cc
@@ -16,7 +16,8 @@
 FakeSessionManagerClient::FakeSessionManagerClient()
     : start_device_wipe_call_count_(0),
       notify_lock_screen_shown_call_count_(0),
-      notify_lock_screen_dismissed_call_count_(0) {}
+      notify_lock_screen_dismissed_call_count_(0),
+      arc_available_(false) {}
 
 FakeSessionManagerClient::~FakeSessionManagerClient() {
 }
@@ -152,19 +153,19 @@
 
 void FakeSessionManagerClient::CheckArcAvailability(
     const ArcCallback& callback) {
-  base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE,
-                                                base::Bind(callback, false));
+  base::ThreadTaskRunnerHandle::Get()->PostTask(
+      FROM_HERE, base::Bind(callback, arc_available_));
 }
 
 void FakeSessionManagerClient::StartArcInstance(const std::string& socket_path,
                                                 const ArcCallback& callback) {
-  base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE,
-                                                base::Bind(callback, false));
+  base::ThreadTaskRunnerHandle::Get()->PostTask(
+      FROM_HERE, base::Bind(callback, arc_available_));
 }
 
 void FakeSessionManagerClient::StopArcInstance(const ArcCallback& callback) {
-  base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE,
-                                                base::Bind(callback, false));
+  base::ThreadTaskRunnerHandle::Get()->PostTask(
+      FROM_HERE, base::Bind(callback, arc_available_));
 }
 
 const std::string& FakeSessionManagerClient::device_policy() const {
diff --git a/chromeos/dbus/fake_session_manager_client.h b/chromeos/dbus/fake_session_manager_client.h
index 4150091..e5b594a 100644
--- a/chromeos/dbus/fake_session_manager_client.h
+++ b/chromeos/dbus/fake_session_manager_client.h
@@ -105,6 +105,8 @@
     return notify_lock_screen_dismissed_call_count_;
   }
 
+  void set_arc_available(bool available) { arc_available_ = available; }
+
  private:
   std::string device_policy_;
   std::map<cryptohome::Identification, std::string> user_policies_;
@@ -117,6 +119,8 @@
   int notify_lock_screen_shown_call_count_;
   int notify_lock_screen_dismissed_call_count_;
 
+  bool arc_available_;
+
   DISALLOW_COPY_AND_ASSIGN(FakeSessionManagerClient);
 };
 
diff --git a/chromeos/settings/cros_settings_names.cc b/chromeos/settings/cros_settings_names.cc
index 01a00828..ae36b0cb 100644
--- a/chromeos/settings/cros_settings_names.cc
+++ b/chromeos/settings/cros_settings_names.cc
@@ -195,4 +195,8 @@
 // device.
 const char kAllowBluetooth[] = "cros.device.allow_bluetooth";
 
+// A boolean pref to enable any pings or requests to the Quirks Server.
+const char kDeviceQuirksDownloadEnabled[] =
+    "cros.device.quirks_download_enabled";
+
 }  // namespace chromeos
diff --git a/chromeos/settings/cros_settings_names.h b/chromeos/settings/cros_settings_names.h
index 60d30208..492bc49 100644
--- a/chromeos/settings/cros_settings_names.h
+++ b/chromeos/settings/cros_settings_names.h
@@ -98,6 +98,8 @@
 
 CHROMEOS_EXPORT extern const char kAllowBluetooth[];
 
+CHROMEOS_EXPORT extern const char kDeviceQuirksDownloadEnabled[];
+
 }  // namespace chromeos
 
 #endif  // CHROMEOS_SETTINGS_CROS_SETTINGS_NAMES_H_
diff --git a/components/arc.gypi b/components/arc.gypi
index 0c71dcc9..7096ff2 100644
--- a/components/arc.gypi
+++ b/components/arc.gypi
@@ -41,8 +41,6 @@
         'arc/arc_service_manager.h',
         'arc/audio/arc_audio_bridge.cc',
         'arc/audio/arc_audio_bridge.h',
-        'arc/auth/arc_auth_fetcher.cc',
-        'arc/auth/arc_auth_fetcher.h',
         'arc/clipboard/arc_clipboard_bridge.cc',
         'arc/clipboard/arc_clipboard_bridge.h',
         'arc/crash_collector/arc_crash_collector_bridge.cc',
@@ -83,6 +81,8 @@
       'sources': [
         'arc/test/fake_app_instance.cc',
         'arc/test/fake_app_instance.h',
+        'arc/test/fake_arc_bridge_bootstrap.cc',
+        'arc/test/fake_arc_bridge_bootstrap.h',
         'arc/test/fake_arc_bridge_instance.cc',
         'arc/test/fake_arc_bridge_instance.h',
         'arc/test/fake_arc_bridge_service.cc',
diff --git a/components/arc/BUILD.gn b/components/arc/BUILD.gn
index db927cdc..343dec0 100644
--- a/components/arc/BUILD.gn
+++ b/components/arc/BUILD.gn
@@ -19,8 +19,6 @@
     "arc_service_manager.h",
     "audio/arc_audio_bridge.cc",
     "audio/arc_audio_bridge.h",
-    "auth/arc_auth_fetcher.cc",
-    "auth/arc_auth_fetcher.h",
     "clipboard/arc_clipboard_bridge.cc",
     "clipboard/arc_clipboard_bridge.h",
     "crash_collector/arc_crash_collector_bridge.cc",
@@ -100,6 +98,8 @@
   sources = [
     "test/fake_app_instance.cc",
     "test/fake_app_instance.h",
+    "test/fake_arc_bridge_bootstrap.cc",
+    "test/fake_arc_bridge_bootstrap.h",
     "test/fake_arc_bridge_instance.cc",
     "test/fake_arc_bridge_instance.h",
     "test/fake_arc_bridge_service.cc",
diff --git a/components/arc/arc_bridge_bootstrap.cc b/components/arc/arc_bridge_bootstrap.cc
index 1d7a94f..c9e44a1 100644
--- a/components/arc/arc_bridge_bootstrap.cc
+++ b/components/arc/arc_bridge_bootstrap.cc
@@ -341,6 +341,7 @@
 }  // namespace
 
 ArcBridgeBootstrap::ArcBridgeBootstrap() {}
+
 ArcBridgeBootstrap::~ArcBridgeBootstrap() {}
 
 // static
diff --git a/components/arc/arc_bridge_service_unittest.cc b/components/arc/arc_bridge_service_unittest.cc
index c753f23..e3eae597 100644
--- a/components/arc/arc_bridge_service_unittest.cc
+++ b/components/arc/arc_bridge_service_unittest.cc
@@ -2,14 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include <utility>
-
 #include "base/bind.h"
 #include "base/bind_helpers.h"
 #include "base/macros.h"
 #include "base/run_loop.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
 #include "components/arc/arc_bridge_service_impl.h"
+#include "components/arc/test/fake_arc_bridge_bootstrap.h"
 #include "components/arc/test/fake_arc_bridge_instance.h"
 #include "ipc/mojo/scoped_ipc_support.h"
 #include "mojo/public/cpp/system/message_pipe.h"
@@ -17,37 +16,6 @@
 
 namespace arc {
 
-namespace {
-
-// A fake ArcBridgeBootstrap that creates a local connection.
-class FakeArcBridgeBootstrap : public ArcBridgeBootstrap {
- public:
-  explicit FakeArcBridgeBootstrap(FakeArcBridgeInstance* instance)
-      : instance_(instance) {}
-  ~FakeArcBridgeBootstrap() override {}
-
-  void Start() override {
-    DCHECK(delegate_);
-    ArcBridgeInstancePtr instance;
-    instance_->Bind(mojo::GetProxy(&instance));
-    delegate_->OnConnectionEstablished(std::move(instance));
-  }
-
-  void Stop() override {
-    DCHECK(delegate_);
-    instance_->Unbind();
-    delegate_->OnStopped();
-  }
-
- private:
-  // Owned by the caller.
-  FakeArcBridgeInstance* instance_;
-
-  DISALLOW_COPY_AND_ASSIGN(FakeArcBridgeBootstrap);
-};
-
-}  // namespace
-
 class ArcBridgeTest : public testing::Test, public ArcBridgeService::Observer {
  public:
   ArcBridgeTest() : ready_(false) {}
diff --git a/components/arc/arc_service_manager.cc b/components/arc/arc_service_manager.cc
index 0d982c4..71489575 100644
--- a/components/arc/arc_service_manager.cc
+++ b/components/arc/arc_service_manager.cc
@@ -7,6 +7,7 @@
 #include "base/sequenced_task_runner.h"
 #include "base/thread_task_runner_handle.h"
 #include "components/arc/arc_bridge_bootstrap.h"
+#include "components/arc/arc_bridge_service.h"
 #include "components/arc/arc_bridge_service_impl.h"
 #include "components/arc/audio/arc_audio_bridge.h"
 #include "components/arc/clipboard/arc_clipboard_bridge.h"
@@ -26,14 +27,23 @@
 // Weak pointer.  This class is owned by ChromeBrowserMainPartsChromeos.
 ArcServiceManager* g_arc_service_manager = nullptr;
 
+// This pointer is owned by ArcServiceManager.
+ArcBridgeService* g_arc_bridge_service_for_testing = nullptr;
+
 }  // namespace
 
-ArcServiceManager::ArcServiceManager()
-    : arc_bridge_service_(
-          new ArcBridgeServiceImpl(ArcBridgeBootstrap::Create())) {
+ArcServiceManager::ArcServiceManager() {
   DCHECK(!g_arc_service_manager);
   g_arc_service_manager = this;
 
+  if (g_arc_bridge_service_for_testing) {
+    arc_bridge_service_.reset(g_arc_bridge_service_for_testing);
+    g_arc_bridge_service_for_testing = nullptr;
+  } else {
+    arc_bridge_service_.reset(new ArcBridgeServiceImpl(
+        ArcBridgeBootstrap::Create()));
+  }
+
   AddService(make_scoped_ptr(new ArcAudioBridge(arc_bridge_service())));
   AddService(make_scoped_ptr(new ArcClipboardBridge(arc_bridge_service())));
   AddService(
@@ -50,6 +60,9 @@
   DCHECK(thread_checker_.CalledOnValidThread());
   DCHECK(g_arc_service_manager == this);
   g_arc_service_manager = nullptr;
+  if (g_arc_bridge_service_for_testing) {
+    delete g_arc_bridge_service_for_testing;
+  }
 }
 
 // static
@@ -78,4 +91,13 @@
       new ArcNotificationManager(arc_bridge_service(), account_id)));
 }
 
+//static
+void ArcServiceManager::SetArcBridgeServiceForTesting(
+    scoped_ptr<ArcBridgeService> arc_bridge_service) {
+  if (g_arc_bridge_service_for_testing) {
+    delete g_arc_bridge_service_for_testing;
+  }
+  g_arc_bridge_service_for_testing = arc_bridge_service.release();
+}
+
 }  // namespace arc
diff --git a/components/arc/arc_service_manager.h b/components/arc/arc_service_manager.h
index b3a1a6d..5c36f568 100644
--- a/components/arc/arc_service_manager.h
+++ b/components/arc/arc_service_manager.h
@@ -38,6 +38,10 @@
   // Called when the main profile is initialized after user logs in.
   void OnPrimaryUserProfilePrepared(const AccountId& account_id);
 
+  // Set ArcBridgeService instance for testing. Call before ArcServiceManager
+  // creation. ArcServiceManager owns |arc_bridge_service|.
+  static void SetArcBridgeServiceForTesting(
+      scoped_ptr<ArcBridgeService> arc_bridge_service);
  private:
   base::ThreadChecker thread_checker_;
   scoped_ptr<ArcBridgeService> arc_bridge_service_;
diff --git a/components/arc/auth/DEPS b/components/arc/auth/DEPS
deleted file mode 100644
index 21d4bbd3..0000000
--- a/components/arc/auth/DEPS
+++ /dev/null
@@ -1,3 +0,0 @@
-include_rules = [
- "+google_apis/gaia",
-]
diff --git a/components/arc/auth/arc_auth_fetcher.cc b/components/arc/auth/arc_auth_fetcher.cc
deleted file mode 100644
index e67333f..0000000
--- a/components/arc/auth/arc_auth_fetcher.cc
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "components/arc/auth/arc_auth_fetcher.h"
-
-#include "base/strings/stringprintf.h"
-#include "google_apis/gaia/gaia_constants.h"
-#include "google_apis/gaia/gaia_urls.h"
-
-namespace arc {
-
-namespace {
-
-const char kGMSCoreClientId[] =
-    "1070009224336-sdh77n7uot3oc99ais00jmuft6sk2fg9.apps.googleusercontent.com";
-
-}  // namespace
-
-ArcAuthFetcher::ArcAuthFetcher(net::URLRequestContextGetter* getter,
-                               Delegate* delegate)
-    : delegate_(delegate), auth_fetcher_(this, std::string(), getter) {
-  FetchAuthCode();
-}
-
-// static
-GURL ArcAuthFetcher::CreateURL() {
-  std::string query_string =
-      base::StringPrintf("?scope=%s&client_id=%s",
-                         GaiaConstants::kOAuth1LoginScope, kGMSCoreClientId);
-  return GaiaUrls::GetInstance()->client_login_to_oauth2_url().Resolve(
-      query_string);
-}
-
-void ArcAuthFetcher::FetchAuthCode() {
-  DCHECK(!auth_fetcher_.HasPendingFetch());
-  auth_fetcher_.StartCookieForOAuthLoginTokenExchange(
-      false, /* fetch_token_from_auth_code */
-      std::string(),    /* session_index */
-      kGMSCoreClientId, std::string() /* device_id */);
-}
-
-void ArcAuthFetcher::OnClientOAuthCode(const std::string& auth_code) {
-  DCHECK(!auth_fetcher_.HasPendingFetch());
-  delegate_->OnAuthCodeFetched(auth_code);
-}
-
-void ArcAuthFetcher::OnClientOAuthFailure(const GoogleServiceAuthError& error) {
-  // UNEXPECTED_SERVICE_RESPONSE indicates no cookies in response, but request
-  // is completed successfully.
-  if (error.state() == GoogleServiceAuthError::UNEXPECTED_SERVICE_RESPONSE) {
-    delegate_->OnAuthCodeNeedUI();
-  } else {
-    VLOG(2) << "ARC Auth request failed: " << error.ToString() << ".";
-    delegate_->OnAuthCodeFailed();
-  }
-}
-
-}  // namespace arc
diff --git a/components/arc/auth/arc_auth_fetcher.h b/components/arc/auth/arc_auth_fetcher.h
deleted file mode 100644
index bf99a50d..0000000
--- a/components/arc/auth/arc_auth_fetcher.h
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef COMPONENTS_ARC_AUTH_ARC_AUTH_FETCHER_H_
-#define COMPONENTS_ARC_AUTH_ARC_AUTH_FETCHER_H_
-
-#include <string>
-
-#include "base/macros.h"
-#include "google_apis/gaia/gaia_auth_consumer.h"
-#include "google_apis/gaia/gaia_auth_fetcher.h"
-
-class GURL;
-
-namespace net {
-class URLRequestContextGetter;
-}
-
-namespace arc {
-
-// Fetches ARC auth code. Fetching process starts automatically on creation.
-class ArcAuthFetcher : public GaiaAuthConsumer {
- public:
-  // Returns a result of ARC auth code fetching.
-  class Delegate {
-   public:
-    // Called when code was fetched.
-    virtual void OnAuthCodeFetched(const std::string& code) = 0;
-    // Called when additional UI authorization is required.
-    virtual void OnAuthCodeNeedUI() = 0;
-    // Called when auth code cannot be received.
-    virtual void OnAuthCodeFailed() = 0;
-
-   protected:
-    virtual ~Delegate() = default;
-  };
-
-  ArcAuthFetcher(net::URLRequestContextGetter* getter, Delegate* delegate);
-  ~ArcAuthFetcher() override = default;
-
-  // GaiaAuthConsumer:
-  void OnClientOAuthCode(const std::string& auth_code) override;
-  void OnClientOAuthFailure(const GoogleServiceAuthError& error) override;
-
-  // Helper function to compose target URL for current user, also is used in
-  // test.
-  static GURL CreateURL();
-
- private:
-  void FetchAuthCode();
-
-  // Unowned pointer.
-  Delegate* const delegate_;
-
-  GaiaAuthFetcher auth_fetcher_;
-
-  DISALLOW_COPY_AND_ASSIGN(ArcAuthFetcher);
-};
-
-}  // namespace arc
-
-#endif  // COMPONENTS_ARC_AUTH_ARC_AUTH_FETCHER_H_
diff --git a/components/arc/test/fake_arc_bridge_bootstrap.cc b/components/arc/test/fake_arc_bridge_bootstrap.cc
new file mode 100644
index 0000000..d2d80bd
--- /dev/null
+++ b/components/arc/test/fake_arc_bridge_bootstrap.cc
@@ -0,0 +1,33 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/arc/test/fake_arc_bridge_bootstrap.h"
+
+#include <utility>
+
+#include "base/logging.h"
+#include "components/arc/common/arc_bridge.mojom.h"
+#include "components/arc/test/fake_arc_bridge_instance.h"
+#include "mojo/public/cpp/bindings/interface_request.h"
+
+namespace arc {
+
+FakeArcBridgeBootstrap::FakeArcBridgeBootstrap(FakeArcBridgeInstance* instance)
+    : instance_(instance) {
+}
+
+void FakeArcBridgeBootstrap::Start() {
+  DCHECK(delegate_);
+  ArcBridgeInstancePtr instance;
+  instance_->Bind(mojo::GetProxy(&instance));
+  delegate_->OnConnectionEstablished(std::move(instance));
+}
+
+void FakeArcBridgeBootstrap::Stop() {
+  DCHECK(delegate_);
+  instance_->Unbind();
+  delegate_->OnStopped();
+}
+
+}  // namespace arc
diff --git a/components/arc/test/fake_arc_bridge_bootstrap.h b/components/arc/test/fake_arc_bridge_bootstrap.h
new file mode 100644
index 0000000..feb7d6c
--- /dev/null
+++ b/components/arc/test/fake_arc_bridge_bootstrap.h
@@ -0,0 +1,34 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_ARC_TEST_FAKE_ARC_BRIDGE_BOOTSTRAP_H_
+#define COMPONENTS_ARC_TEST_FAKE_ARC_BRIDGE_BOOTSTRAP_H_
+
+#include "base/macros.h"
+#include "components/arc/arc_bridge_bootstrap.h"
+
+namespace arc {
+
+class FakeArcBridgeInstance;
+
+// A fake ArcBridgeBootstrap that creates a local connection.
+class FakeArcBridgeBootstrap : public ArcBridgeBootstrap {
+ public:
+  explicit FakeArcBridgeBootstrap(FakeArcBridgeInstance* instance);
+  ~FakeArcBridgeBootstrap() override {}
+
+  // ArcBridgeBootstrap:
+  void Start() override;
+  void Stop() override;
+
+ private:
+  // Owned by the caller.
+  FakeArcBridgeInstance* instance_;
+
+  DISALLOW_COPY_AND_ASSIGN(FakeArcBridgeBootstrap);
+};
+
+} // namespace arc
+
+#endif  // COMPONENTS_ARC_TEST_FAKE_ARC_BRIDGE_BOOTSTRAP_H_
diff --git a/components/autofill/content/browser/content_autofill_driver.cc b/components/autofill/content/browser/content_autofill_driver.cc
index 23e11ebc..e68f29d89 100644
--- a/components/autofill/content/browser/content_autofill_driver.cc
+++ b/components/autofill/content/browser/content_autofill_driver.cc
@@ -218,7 +218,7 @@
 }
 
 void ContentAutofillDriver::SetAutofillManager(
-    scoped_ptr<AutofillManager> manager) {
+    std::unique_ptr<AutofillManager> manager) {
   autofill_manager_ = std::move(manager);
   autofill_manager_->SetExternalDelegate(&autofill_external_delegate_);
 }
diff --git a/components/autofill/content/browser/content_autofill_driver.h b/components/autofill/content/browser/content_autofill_driver.h
index 61bc690..c0dda594 100644
--- a/components/autofill/content/browser/content_autofill_driver.h
+++ b/components/autofill/content/browser/content_autofill_driver.h
@@ -5,9 +5,9 @@
 #ifndef COMPONENTS_AUTOFILL_CONTENT_BROWSER_CONTENT_AUTOFILL_DRIVER_H_
 #define COMPONENTS_AUTOFILL_CONTENT_BROWSER_CONTENT_AUTOFILL_DRIVER_H_
 
+#include <memory>
 #include <string>
 
-#include "base/memory/scoped_ptr.h"
 #include "base/supports_user_data.h"
 #include "components/autofill/content/browser/request_autocomplete_manager.h"
 #include "components/autofill/core/browser/autofill_driver.h"
@@ -81,7 +81,7 @@
  protected:
   // Sets the manager to |manager| and sets |manager|'s external delegate
   // to |autofill_external_delegate_|. Takes ownership of |manager|.
-  void SetAutofillManager(scoped_ptr<AutofillManager> manager);
+  void SetAutofillManager(std::unique_ptr<AutofillManager> manager);
 
  private:
   // Weak ref to the RenderFrameHost the driver is associated with. Should
@@ -93,7 +93,7 @@
 
   // AutofillManager instance via which this object drives the shared Autofill
   // code.
-  scoped_ptr<AutofillManager> autofill_manager_;
+  std::unique_ptr<AutofillManager> autofill_manager_;
 
   // AutofillExternalDelegate instance that this object instantiates in the
   // case where the Autofill native UI is enabled.
diff --git a/components/autofill/content/browser/content_autofill_driver_factory.cc b/components/autofill/content/browser/content_autofill_driver_factory.cc
index 9e2cb55..27c342c7 100644
--- a/components/autofill/content/browser/content_autofill_driver_factory.cc
+++ b/components/autofill/content/browser/content_autofill_driver_factory.cc
@@ -4,6 +4,7 @@
 
 #include "components/autofill/content/browser/content_autofill_driver_factory.h"
 
+#include "base/memory/ptr_util.h"
 #include "base/stl_util.h"
 #include "components/autofill/content/browser/content_autofill_driver.h"
 #include "components/autofill/core/browser/autofill_client.h"
@@ -54,7 +55,7 @@
       enable_download_manager_(enable_download_manager) {
   content::RenderFrameHost* main_frame = web_contents->GetMainFrame();
   if (main_frame->IsRenderFrameLive()) {
-    frame_driver_map_[main_frame] = make_scoped_ptr(new ContentAutofillDriver(
+    frame_driver_map_[main_frame] = base::WrapUnique(new ContentAutofillDriver(
         main_frame, client_, app_locale_, enable_download_manager_));
   }
 }
@@ -79,7 +80,7 @@
       frame_driver_map_.insert(std::make_pair(render_frame_host, nullptr));
   // This is called twice for the main frame.
   if (insertion_result.second) {  // This was the first time.
-    insertion_result.first->second = make_scoped_ptr(new ContentAutofillDriver(
+    insertion_result.first->second = base::WrapUnique(new ContentAutofillDriver(
         render_frame_host, client_, app_locale_, enable_download_manager_));
   }
 }
diff --git a/components/autofill/content/browser/content_autofill_driver_factory.h b/components/autofill/content/browser/content_autofill_driver_factory.h
index 1103b19..661856d7 100644
--- a/components/autofill/content/browser/content_autofill_driver_factory.h
+++ b/components/autofill/content/browser/content_autofill_driver_factory.h
@@ -6,9 +6,9 @@
 #define COMPONENTS_AUTOFILL_CONTENT_BROWSER_CONTENT_AUTOFILL_DRIVER_FACTORY_H_
 
 #include <map>
+#include <memory>
 #include <string>
 
-#include "base/memory/scoped_ptr.h"
 #include "base/supports_user_data.h"
 #include "components/autofill/content/browser/request_autocomplete_manager.h"
 #include "components/autofill/core/browser/autofill_manager.h"
@@ -73,7 +73,7 @@
   std::string app_locale_;
   AutofillManager::AutofillDownloadManagerState enable_download_manager_;
 
-  std::map<content::RenderFrameHost*, scoped_ptr<ContentAutofillDriver>>
+  std::map<content::RenderFrameHost*, std::unique_ptr<ContentAutofillDriver>>
       frame_driver_map_;
 };
 
diff --git a/components/autofill/content/browser/content_autofill_driver_unittest.cc b/components/autofill/content/browser/content_autofill_driver_unittest.cc
index 68fe6f2..dce2817 100644
--- a/components/autofill/content/browser/content_autofill_driver_unittest.cc
+++ b/components/autofill/content/browser/content_autofill_driver_unittest.cc
@@ -5,13 +5,14 @@
 #include "components/autofill/content/browser/content_autofill_driver.h"
 
 #include <stdint.h>
+
 #include <algorithm>
+#include <memory>
 #include <tuple>
 #include <utility>
 #include <vector>
 
 #include "base/command_line.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/strings/utf_string_conversions.h"
 #include "components/autofill/content/common/autofill_messages.h"
 #include "components/autofill/core/browser/autofill_external_delegate.h"
@@ -54,7 +55,7 @@
   TestContentAutofillDriver(content::RenderFrameHost* rfh,
                             AutofillClient* client)
       : ContentAutofillDriver(rfh, client, kAppLocale, kDownloadState) {
-    scoped_ptr<AutofillManager> autofill_manager(
+    std::unique_ptr<AutofillManager> autofill_manager(
         new MockAutofillManager(this, client));
     SetAutofillManager(std::move(autofill_manager));
   }
@@ -195,8 +196,8 @@
     return true;
   }
 
-  scoped_ptr<TestAutofillClient> test_autofill_client_;
-  scoped_ptr<TestContentAutofillDriver> driver_;
+  std::unique_ptr<TestAutofillClient> test_autofill_client_;
+  std::unique_ptr<TestContentAutofillDriver> driver_;
 };
 
 TEST_F(ContentAutofillDriverTest, GetURLRequestContext) {
diff --git a/components/autofill/content/browser/request_autocomplete_manager_unittest.cc b/components/autofill/content/browser/request_autocomplete_manager_unittest.cc
index 8d9db483..9786b80 100644
--- a/components/autofill/content/browser/request_autocomplete_manager_unittest.cc
+++ b/components/autofill/content/browser/request_autocomplete_manager_unittest.cc
@@ -2,13 +2,15 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "components/autofill/content/browser/request_autocomplete_manager.h"
+
 #include <stdint.h>
 
 #include <tuple>
 
 #include "base/macros.h"
+#include "base/memory/ptr_util.h"
 #include "components/autofill/content/browser/content_autofill_driver.h"
-#include "components/autofill/content/browser/request_autocomplete_manager.h"
 #include "components/autofill/content/common/autofill_messages.h"
 #include "components/autofill/core/browser/test_autofill_client.h"
 #include "content/public/browser/web_contents.h"
@@ -80,7 +82,7 @@
   TestContentAutofillDriver(content::RenderFrameHost* rfh,
                             AutofillClient* client)
       : ContentAutofillDriver(rfh, client, kAppLocale, kDownloadState) {
-    SetAutofillManager(make_scoped_ptr<AutofillManager>(
+    SetAutofillManager(base::WrapUnique<AutofillManager>(
         new TestAutofillManager(this, client)));
   }
   ~TestContentAutofillDriver() override {}
@@ -137,8 +139,8 @@
 
  protected:
   CustomTestAutofillClient autofill_client_;
-  scoped_ptr<TestContentAutofillDriver> driver_;
-  scoped_ptr<RequestAutocompleteManager> request_autocomplete_manager_;
+  std::unique_ptr<TestContentAutofillDriver> driver_;
+  std::unique_ptr<RequestAutocompleteManager> request_autocomplete_manager_;
 
   DISALLOW_COPY_AND_ASSIGN(RequestAutocompleteManagerTest);
 };
diff --git a/components/autofill/content/browser/risk/fingerprint.cc b/components/autofill/content/browser/risk/fingerprint.cc
index c6f3956..f60edfa 100644
--- a/components/autofill/content/browser/risk/fingerprint.cc
+++ b/components/autofill/content/browser/risk/fingerprint.cc
@@ -184,7 +184,7 @@
       const std::string& app_locale,
       const std::string& user_agent,
       const base::TimeDelta& timeout,
-      const base::Callback<void(scoped_ptr<Fingerprint>)>& callback);
+      const base::Callback<void(std::unique_ptr<Fingerprint>)>& callback);
 
  private:
   ~FingerprintDataLoader() override {}
@@ -193,7 +193,7 @@
   void OnGpuInfoUpdate() override;
 
   // Callbacks for asynchronously loaded data.
-  void OnGotFonts(scoped_ptr<base::ListValue> fonts);
+  void OnGotFonts(std::unique_ptr<base::ListValue> fonts);
   void OnGotPlugins(const std::vector<content::WebPluginInfo>& plugins);
   void OnGotGeoposition(const content::Geoposition& geoposition);
 
@@ -226,7 +226,7 @@
   const base::Time install_time_;
 
   // Data that will be loaded asynchronously.
-  scoped_ptr<base::ListValue> fonts_;
+  std::unique_ptr<base::ListValue> fonts_;
   std::vector<content::WebPluginInfo> plugins_;
   bool waiting_on_plugins_;
   content::Geoposition geoposition_;
@@ -236,10 +236,10 @@
   base::OneShotTimer timeout_timer_;
 
   // The callback that will be called once all the data is available.
-  base::Callback<void(scoped_ptr<Fingerprint>)> callback_;
+  base::Callback<void(std::unique_ptr<Fingerprint>)> callback_;
 
   // The callback used as an "observer" of the GeolocationProvider.
-  scoped_ptr<content::GeolocationProvider::Subscription>
+  std::unique_ptr<content::GeolocationProvider::Subscription>
       geolocation_subscription_;
 
   // For invalidating asynchronous callbacks that might arrive after |this|
@@ -261,7 +261,7 @@
     const std::string& app_locale,
     const std::string& user_agent,
     const base::TimeDelta& timeout,
-    const base::Callback<void(scoped_ptr<Fingerprint>)>& callback)
+    const base::Callback<void(std::unique_ptr<Fingerprint>)>& callback)
     : gpu_data_manager_(content::GpuDataManager::GetInstance()),
       gpu_observer_(this),
       obfuscated_gaia_id_(obfuscated_gaia_id),
@@ -320,7 +320,7 @@
   MaybeFillFingerprint();
 }
 
-void FingerprintDataLoader::OnGotFonts(scoped_ptr<base::ListValue> fonts) {
+void FingerprintDataLoader::OnGotFonts(std::unique_ptr<base::ListValue> fonts) {
   DCHECK(!fonts_);
   fonts_.reset(fonts.release());
   MaybeFillFingerprint();
@@ -362,7 +362,7 @@
 }
 
 void FingerprintDataLoader::FillFingerprint() {
-  scoped_ptr<Fingerprint> fingerprint(new Fingerprint);
+  std::unique_ptr<Fingerprint> fingerprint(new Fingerprint);
   Fingerprint::MachineCharacteristics* machine =
       fingerprint->mutable_machine_characteristics();
 
@@ -441,7 +441,7 @@
     const std::string& app_locale,
     const std::string& user_agent,
     const base::TimeDelta& timeout,
-    const base::Callback<void(scoped_ptr<Fingerprint>)>& callback) {
+    const base::Callback<void(std::unique_ptr<Fingerprint>)>& callback) {
   // Begin loading all of the data that we need to load asynchronously.
   // This class is responsible for freeing its own memory.
   new FingerprintDataLoader(obfuscated_gaia_id, window_bounds, content_bounds,
@@ -462,7 +462,7 @@
     const base::Time& install_time,
     const std::string& app_locale,
     const std::string& user_agent,
-    const base::Callback<void(scoped_ptr<Fingerprint>)>& callback) {
+    const base::Callback<void(std::unique_ptr<Fingerprint>)>& callback) {
   gfx::Rect content_bounds = web_contents->GetContainerBounds();
 
   blink::WebScreenInfo screen_info;
diff --git a/components/autofill/content/browser/risk/fingerprint.h b/components/autofill/content/browser/risk/fingerprint.h
index 4b38182..ae1b785 100644
--- a/components/autofill/content/browser/risk/fingerprint.h
+++ b/components/autofill/content/browser/risk/fingerprint.h
@@ -14,10 +14,10 @@
 
 #include <stdint.h>
 
+#include <memory>
 #include <string>
 
 #include "base/callback_forward.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/autofill/core/browser/autofill_client.h"
 
 class PrefService;
@@ -57,7 +57,7 @@
     const base::Time& install_time,
     const std::string& app_locale,
     const std::string& user_agent,
-    const base::Callback<void(scoped_ptr<Fingerprint>)>& callback);
+    const base::Callback<void(std::unique_ptr<Fingerprint>)>& callback);
 
 }  // namespace risk
 }  // namespace autofill
diff --git a/components/autofill/content/browser/risk/fingerprint_browsertest.cc b/components/autofill/content/browser/risk/fingerprint_browsertest.cc
index 25179808..a6f8888a 100644
--- a/components/autofill/content/browser/risk/fingerprint_browsertest.cc
+++ b/components/autofill/content/browser/risk/fingerprint_browsertest.cc
@@ -6,6 +6,8 @@
 
 #include <stdint.h>
 
+#include <memory>
+
 #include "base/bind.h"
 #include "base/message_loop/message_loop.h"
 #include "build/build_config.h"
@@ -41,7 +43,7 @@
     const std::string& app_locale,
     const std::string& user_agent,
     const base::TimeDelta& timeout,
-    const base::Callback<void(scoped_ptr<Fingerprint>)>& callback);
+    const base::Callback<void(std::unique_ptr<Fingerprint>)>& callback);
 
 }  // namespace internal
 
@@ -71,7 +73,7 @@
         available_screen_bounds_(0, 11, 101, 60),
         unavailable_screen_bounds_(0, 0, 101, 11) {}
 
-  void GetFingerprintTestCallback(scoped_ptr<Fingerprint> fingerprint) {
+  void GetFingerprintTestCallback(std::unique_ptr<Fingerprint> fingerprint) {
     // Verify that all fields Chrome can fill have been filled.
     ASSERT_TRUE(fingerprint->has_machine_characteristics());
     const Fingerprint::MachineCharacteristics& machine =
diff --git a/components/autofill/content/browser/wallet/full_wallet.cc b/components/autofill/content/browser/wallet/full_wallet.cc
index 84e86424..db76382 100644
--- a/components/autofill/content/browser/wallet/full_wallet.cc
+++ b/components/autofill/content/browser/wallet/full_wallet.cc
@@ -30,8 +30,8 @@
                        int expiration_year,
                        const std::string& iin,
                        const std::string& encrypted_rest,
-                       scoped_ptr<Address> billing_address,
-                       scoped_ptr<Address> shipping_address)
+                       std::unique_ptr<Address> billing_address,
+                       std::unique_ptr<Address> shipping_address)
     : expiration_month_(expiration_month),
       expiration_year_(expiration_year),
       iin_(iin),
@@ -44,19 +44,18 @@
 FullWallet::~FullWallet() {}
 
 // static
-scoped_ptr<FullWallet>
-    FullWallet::CreateFullWalletFromClearText(
-        int expiration_month,
-        int expiration_year,
-        const std::string& pan,
-        const std::string& cvn,
-        scoped_ptr<Address> billing_address,
-        scoped_ptr<Address> shipping_address) {
+std::unique_ptr<FullWallet> FullWallet::CreateFullWalletFromClearText(
+    int expiration_month,
+    int expiration_year,
+    const std::string& pan,
+    const std::string& cvn,
+    std::unique_ptr<Address> billing_address,
+    std::unique_ptr<Address> shipping_address) {
   DCHECK(billing_address);
   DCHECK(!pan.empty());
   DCHECK(!cvn.empty());
 
-  scoped_ptr<FullWallet> wallet(new FullWallet(
+  std::unique_ptr<FullWallet> wallet(new FullWallet(
       expiration_month, expiration_year,
       std::string(),  // no iin -- clear text pan/cvn are set below.
       std::string(),  // no encrypted_rest -- clear text pan/cvn are set below.
diff --git a/components/autofill/content/browser/wallet/full_wallet.h b/components/autofill/content/browser/wallet/full_wallet.h
index b882a0b..8372e84 100644
--- a/components/autofill/content/browser/wallet/full_wallet.h
+++ b/components/autofill/content/browser/wallet/full_wallet.h
@@ -7,12 +7,12 @@
 
 #include <stdint.h>
 
+#include <memory>
 #include <string>
 #include <vector>
 
 #include "base/gtest_prod_util.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/strings/string16.h"
 #include "components/autofill/content/browser/wallet/wallet_address.h"
 
@@ -39,13 +39,13 @@
 
   // Returns a wallet built from the provided clear-text data.
   // Data is not validated; |pan|, |cvn| and |billing_address| must be set.
-  static scoped_ptr<FullWallet>
-      CreateFullWalletFromClearText(int expiration_month,
-                                    int expiration_year,
-                                    const std::string& pan,
-                                    const std::string& cvn,
-                                    scoped_ptr<Address> billing_address,
-                                    scoped_ptr<Address> shipping_address);
+  static std::unique_ptr<FullWallet> CreateFullWalletFromClearText(
+      int expiration_month,
+      int expiration_year,
+      const std::string& pan,
+      const std::string& cvn,
+      std::unique_ptr<Address> billing_address,
+      std::unique_ptr<Address> shipping_address);
 
   // Returns corresponding data for |type|.
   base::string16 GetInfo(const std::string& app_locale,
@@ -74,8 +74,8 @@
 
  private:
   friend class FullWalletTest;
-  friend scoped_ptr<FullWallet> GetTestFullWallet();
-  friend scoped_ptr<FullWallet> GetTestFullWalletInstrumentOnly();
+  friend std::unique_ptr<FullWallet> GetTestFullWallet();
+  friend std::unique_ptr<FullWallet> GetTestFullWalletInstrumentOnly();
   FRIEND_TEST_ALL_PREFIXES(FullWalletTest, CreateFullWallet);
   FRIEND_TEST_ALL_PREFIXES(FullWalletTest, RestLengthCorrectDecryptionTest);
   FRIEND_TEST_ALL_PREFIXES(FullWalletTest, RestLengthUnderDecryptionTest);
@@ -85,8 +85,8 @@
              int expiration_year,
              const std::string& iin,
              const std::string& encrypted_rest,
-             scoped_ptr<Address> billing_address,
-             scoped_ptr<Address> shipping_address);
+             std::unique_ptr<Address> billing_address,
+             std::unique_ptr<Address> shipping_address);
 
   // Decrypts both |pan_| and |cvn_|.
   void DecryptCardInfo();
@@ -114,10 +114,10 @@
   std::string encrypted_rest_;
 
   // The billing address of the backing instrument.
-  scoped_ptr<Address> billing_address_;
+  std::unique_ptr<Address> billing_address_;
 
   // The shipping address for the transaction.
-  scoped_ptr<Address> shipping_address_;
+  std::unique_ptr<Address> shipping_address_;
 
   // The one time pad used for FullWallet encryption.
   std::vector<uint8_t> one_time_pad_;
diff --git a/components/autofill/content/browser/wallet/full_wallet_unittest.cc b/components/autofill/content/browser/wallet/full_wallet_unittest.cc
index 3f00fb4..2fc5cfff 100644
--- a/components/autofill/content/browser/wallet/full_wallet_unittest.cc
+++ b/components/autofill/content/browser/wallet/full_wallet_unittest.cc
@@ -2,15 +2,17 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "components/autofill/content/browser/wallet/full_wallet.h"
+
 #include <stdint.h>
 
+#include <memory>
+
 #include "base/json/json_reader.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/values.h"
-#include "components/autofill/content/browser/wallet/full_wallet.h"
 #include "components/autofill/content/browser/wallet/wallet_test_util.h"
 #include "components/autofill/core/browser/autofill_type.h"
 #include "components/autofill/core/browser/field_types.h"
@@ -79,11 +81,10 @@
 }
 
 TEST_F(FullWalletTest, CreateFullWalletFromClearTextData) {
-  scoped_ptr<FullWallet> full_wallet =
-      FullWallet::CreateFullWalletFromClearText(
-          11, 2012,
-          "5555555555554444", "123",
-          GetTestAddress(), GetTestShippingAddress());
+  std::unique_ptr<FullWallet> full_wallet =
+      FullWallet::CreateFullWalletFromClearText(11, 2012, "5555555555554444",
+                                                "123", GetTestAddress(),
+                                                GetTestShippingAddress());
   EXPECT_EQ(ASCIIToUTF16("5555555555554444"),
             full_wallet->GetInfo("", AutofillType(CREDIT_CARD_NUMBER)));
   EXPECT_EQ(ASCIIToUTF16("MasterCard"),
diff --git a/components/autofill/content/browser/wallet/payments_client_unittest.cc b/components/autofill/content/browser/wallet/payments_client_unittest.cc
index de4cbd6..bb27679 100644
--- a/components/autofill/content/browser/wallet/payments_client_unittest.cc
+++ b/components/autofill/content/browser/wallet/payments_client_unittest.cc
@@ -59,7 +59,7 @@
   void OnDidGetUploadDetails(
       AutofillClient::PaymentsRpcResult result,
       const base::string16& context_token,
-      scoped_ptr<base::DictionaryValue> legal_message) override {
+      std::unique_ptr<base::DictionaryValue> legal_message) override {
     result_ = result;
     legal_message_ = std::move(legal_message);
   }
@@ -124,14 +124,14 @@
 
   AutofillClient::PaymentsRpcResult result_;
   std::string real_pan_;
-  scoped_ptr<base::DictionaryValue> legal_message_;
+  std::unique_ptr<base::DictionaryValue> legal_message_;
 
   content::TestBrowserThreadBundle thread_bundle_;
   net::TestURLFetcherFactory factory_;
   scoped_refptr<net::TestURLRequestContextGetter> request_context_;
-  scoped_ptr<FakeOAuth2TokenService> token_service_;
-  scoped_ptr<FakeIdentityProvider> identity_provider_;
-  scoped_ptr<PaymentsClient> client_;
+  std::unique_ptr<FakeOAuth2TokenService> token_service_;
+  std::unique_ptr<FakeIdentityProvider> identity_provider_;
+  std::unique_ptr<PaymentsClient> client_;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(PaymentsClientTest);
diff --git a/components/autofill/content/browser/wallet/wallet_address.cc b/components/autofill/content/browser/wallet/wallet_address.cc
index 239dfb96d..3f134246 100644
--- a/components/autofill/content/browser/wallet/wallet_address.cc
+++ b/components/autofill/content/browser/wallet/wallet_address.cc
@@ -169,43 +169,43 @@
 Address::~Address() {}
 
 // static
-scoped_ptr<Address> Address::CreateAddressWithID(
+std::unique_ptr<Address> Address::CreateAddressWithID(
     const base::DictionaryValue& dictionary) {
   std::string object_id;
   if (!dictionary.GetString("id", &object_id)) {
     DLOG(ERROR) << "Response from Google Payments missing object id";
-    return scoped_ptr<Address>();
+    return std::unique_ptr<Address>();
   }
-  return scoped_ptr<Address>(CreateAddressInternal(dictionary, object_id));
+  return std::unique_ptr<Address>(CreateAddressInternal(dictionary, object_id));
 }
 
 // static
-scoped_ptr<Address> Address::CreateAddress(
+std::unique_ptr<Address> Address::CreateAddress(
     const base::DictionaryValue& dictionary) {
   std::string object_id;
   dictionary.GetString("id", &object_id);
-  return scoped_ptr<Address>(CreateAddressInternal(dictionary, object_id));
+  return std::unique_ptr<Address>(CreateAddressInternal(dictionary, object_id));
 }
 
 // static
-scoped_ptr<Address> Address::CreateDisplayAddress(
+std::unique_ptr<Address> Address::CreateDisplayAddress(
     const base::DictionaryValue& dictionary) {
   std::string country_code;
   if (!dictionary.GetString("country_code", &country_code)) {
     DLOG(ERROR) << "Reponse from Google Payments missing country code";
-    return scoped_ptr<Address>();
+    return std::unique_ptr<Address>();
   }
 
   base::string16 name;
   if (!dictionary.GetString("name", &name)) {
     DLOG(ERROR) << "Reponse from Google Payments missing name";
-    return scoped_ptr<Address>();
+    return std::unique_ptr<Address>();
   }
 
   base::string16 postal_code;
   if (!dictionary.GetString("postal_code", &postal_code)) {
     DLOG(ERROR) << "Reponse from Google Payments missing postal code";
-    return scoped_ptr<Address>();
+    return std::unique_ptr<Address>();
   }
 
   base::string16 sorting_code;
@@ -254,25 +254,16 @@
   if (!dictionary.GetString("language_code", &language_code))
     DVLOG(1) << "Response from Google Payments missing language code";
 
-  scoped_ptr<Address> address(
-      new Address(country_code,
-                  name,
-                  street_address,
-                  city,
-                  dependent_locality_name,
-                  state,
-                  postal_code,
-                  sorting_code,
-                  phone_number,
-                  std::string(),
-                  language_code));
+  std::unique_ptr<Address> address(new Address(
+      country_code, name, street_address, city, dependent_locality_name, state,
+      postal_code, sorting_code, phone_number, std::string(), language_code));
   address->set_is_complete_address(address_state == kFullAddress);
 
   return address;
 }
 
-scoped_ptr<base::DictionaryValue> Address::ToDictionaryWithID() const {
-  scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue());
+std::unique_ptr<base::DictionaryValue> Address::ToDictionaryWithID() const {
+  std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue());
 
   if (!object_id_.empty())
     dict->SetString("id", object_id_);
@@ -282,10 +273,10 @@
   return dict;
 }
 
-scoped_ptr<base::DictionaryValue> Address::ToDictionaryWithoutID() const {
-  scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue());
+std::unique_ptr<base::DictionaryValue> Address::ToDictionaryWithoutID() const {
+  std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue());
 
-  scoped_ptr<base::ListValue> address_lines(new base::ListValue());
+  std::unique_ptr<base::ListValue> address_lines(new base::ListValue());
   address_lines->AppendStrings(street_address_);
   dict->Set("address_line", address_lines.release());
 
diff --git a/components/autofill/content/browser/wallet/wallet_address.h b/components/autofill/content/browser/wallet/wallet_address.h
index f52a6ac..e3e94bb 100644
--- a/components/autofill/content/browser/wallet/wallet_address.h
+++ b/components/autofill/content/browser/wallet/wallet_address.h
@@ -7,10 +7,10 @@
 
 #include <stddef.h>
 
+#include <memory>
 #include <string>
 
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/strings/string16.h"
 #include "components/autofill/core/browser/phone_number_i18n.h"
 
@@ -62,7 +62,7 @@
   // Returns an empty scoped_ptr if input is invalid or a valid address that is
   // selectable for Google Wallet use. Does not require "id" in |dictionary|.
   // IDs are not required for billing addresses.
-  static scoped_ptr<Address> CreateAddress(
+  static std::unique_ptr<Address> CreateAddress(
       const base::DictionaryValue& dictionary);
 
   // TODO(ahutter): Make obvious in the function name that this public method
@@ -70,22 +70,22 @@
   // Builds an Address from |dictionary|, which must have an "id" field. This
   // function is designed for use with shipping addresses. The function may fail
   // and return an empty pointer if its input is invalid.
-  static scoped_ptr<Address> CreateAddressWithID(
+  static std::unique_ptr<Address> CreateAddressWithID(
       const base::DictionaryValue& dictionary);
 
   // Returns an empty scoped_ptr if input in invalid or a valid address that
   // can only be used for displaying to the user.
-  static scoped_ptr<Address> CreateDisplayAddress(
+  static std::unique_ptr<Address> CreateDisplayAddress(
       const base::DictionaryValue& dictionary);
 
   // If an address is being upgraded, it will be sent to the server in a
   // different format and with a few additional fields set, most importantly
   // |object_id_|.
-  scoped_ptr<base::DictionaryValue> ToDictionaryWithID() const;
+  std::unique_ptr<base::DictionaryValue> ToDictionaryWithID() const;
 
   // Newly created addresses will not have an associated |object_id_| and are
   // sent to the server in a slightly different format.
-  scoped_ptr<base::DictionaryValue> ToDictionaryWithoutID() const;
+  std::unique_ptr<base::DictionaryValue> ToDictionaryWithoutID() const;
 
   // Returns a string that summarizes this address, suitable for display to
   // the user.
diff --git a/components/autofill/content/browser/wallet/wallet_address_unittest.cc b/components/autofill/content/browser/wallet/wallet_address_unittest.cc
index a8ed7ac..bd3b8ab8 100644
--- a/components/autofill/content/browser/wallet/wallet_address_unittest.cc
+++ b/components/autofill/content/browser/wallet/wallet_address_unittest.cc
@@ -2,12 +2,14 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "components/autofill/content/browser/wallet/wallet_address.h"
+
+#include <memory>
+
 #include "base/json/json_reader.h"
 #include "base/logging.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/values.h"
-#include "components/autofill/content/browser/wallet/wallet_address.h"
 #include "components/autofill/content/browser/wallet/wallet_test_util.h"
 #include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
@@ -219,13 +221,13 @@
   WalletAddressTest() {}
  protected:
   void SetUpDictionary(const std::string& json) {
-    scoped_ptr<base::Value> value = base::JSONReader::Read(json);
+    std::unique_ptr<base::Value> value = base::JSONReader::Read(json);
     DCHECK(value.get());
     DCHECK(value->IsType(base::Value::TYPE_DICTIONARY));
     dict_.reset(static_cast<base::DictionaryValue*>(value.release()));
   }
 
-  scoped_ptr<const base::DictionaryValue> dict_;
+  std::unique_ptr<const base::DictionaryValue> dict_;
 };
 
 TEST_F(WalletAddressTest, AddressEqualsIgnoreID) {
diff --git a/components/autofill/content/browser/wallet/wallet_test_util.cc b/components/autofill/content/browser/wallet/wallet_test_util.cc
index 287dfe7..ebef1134 100644
--- a/components/autofill/content/browser/wallet/wallet_test_util.cc
+++ b/components/autofill/content/browser/wallet/wallet_test_util.cc
@@ -9,6 +9,7 @@
 #include <string>
 #include <vector>
 
+#include "base/memory/ptr_util.h"
 #include "base/strings/string16.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/utf_string_conversions.h"
@@ -38,79 +39,68 @@
   return street_address;
 }
 
-scoped_ptr<Address> GetTestAddress() {
-  return make_scoped_ptr(
-      new Address("US",
-                  ASCIIToUTF16("recipient_name"),
-                  StreetAddress("address_line_1", "address_line_2"),
-                  ASCIIToUTF16("locality_name"),
-                  ASCIIToUTF16("dependent_locality_name"),
-                  ASCIIToUTF16("admin_area_name"),
-                  ASCIIToUTF16("postal_code_number"),
-                  ASCIIToUTF16("sorting_code"),
-                  ASCIIToUTF16("phone_number"),
-                  std::string(),
-                  "language_code"));
+std::unique_ptr<Address> GetTestAddress() {
+  return base::WrapUnique(new Address(
+      "US", ASCIIToUTF16("recipient_name"),
+      StreetAddress("address_line_1", "address_line_2"),
+      ASCIIToUTF16("locality_name"), ASCIIToUTF16("dependent_locality_name"),
+      ASCIIToUTF16("admin_area_name"), ASCIIToUTF16("postal_code_number"),
+      ASCIIToUTF16("sorting_code"), ASCIIToUTF16("phone_number"), std::string(),
+      "language_code"));
 }
 
-scoped_ptr<Address> GetTestMinimalAddress() {
-  scoped_ptr<Address> address = GetTestAddress();
+std::unique_ptr<Address> GetTestMinimalAddress() {
+  std::unique_ptr<Address> address = GetTestAddress();
   address->set_is_complete_address(false);
   return address;
 }
 
-scoped_ptr<FullWallet> GetTestFullWallet() {
-  scoped_ptr<FullWallet> wallet(new FullWallet(FutureYear(), 12, "528512",
-                                               "5ec4feecf9d6", GetTestAddress(),
-                                               GetTestShippingAddress()));
+std::unique_ptr<FullWallet> GetTestFullWallet() {
+  std::unique_ptr<FullWallet> wallet(
+      new FullWallet(FutureYear(), 12, "528512", "5ec4feecf9d6",
+                     GetTestAddress(), GetTestShippingAddress()));
   std::vector<uint8_t> one_time_pad;
   base::HexStringToBytes("5F04A8704183", &one_time_pad);
   wallet->set_one_time_pad(one_time_pad);
   return wallet;
 }
 
-scoped_ptr<FullWallet> GetTestFullWalletInstrumentOnly() {
-  scoped_ptr<FullWallet> wallet(new FullWallet(FutureYear(), 12, "528512",
-                                               "5ec4feecf9d6", GetTestAddress(),
-                                               scoped_ptr<Address>()));
+std::unique_ptr<FullWallet> GetTestFullWalletInstrumentOnly() {
+  std::unique_ptr<FullWallet> wallet(
+      new FullWallet(FutureYear(), 12, "528512", "5ec4feecf9d6",
+                     GetTestAddress(), std::unique_ptr<Address>()));
   std::vector<uint8_t> one_time_pad;
   base::HexStringToBytes("5F04A8704183", &one_time_pad);
   wallet->set_one_time_pad(one_time_pad);
   return wallet;
 }
 
-scoped_ptr<Address> GetTestSaveableAddress() {
-  return make_scoped_ptr(
-      new Address("US",
-                  ASCIIToUTF16("save_recipient_name"),
-                  StreetAddress("save_address_line_1", "save_address_line_2"),
-                  ASCIIToUTF16("save_locality_name"),
-                  ASCIIToUTF16("save_dependent_locality_name"),
-                  ASCIIToUTF16("save_admin_area_name"),
-                  ASCIIToUTF16("save_postal_code_number"),
-                  ASCIIToUTF16("save_sorting_code"),
-                  ASCIIToUTF16("save_phone_number"),
-                  std::string(),
-                  "save_language_code"));
+std::unique_ptr<Address> GetTestSaveableAddress() {
+  return base::WrapUnique(new Address(
+      "US", ASCIIToUTF16("save_recipient_name"),
+      StreetAddress("save_address_line_1", "save_address_line_2"),
+      ASCIIToUTF16("save_locality_name"),
+      ASCIIToUTF16("save_dependent_locality_name"),
+      ASCIIToUTF16("save_admin_area_name"),
+      ASCIIToUTF16("save_postal_code_number"),
+      ASCIIToUTF16("save_sorting_code"), ASCIIToUTF16("save_phone_number"),
+      std::string(), "save_language_code"));
 }
 
-scoped_ptr<Address> GetTestShippingAddress() {
-  return make_scoped_ptr(
-      new Address("US",
-                  ASCIIToUTF16("ship_recipient_name"),
-                  StreetAddress("ship_address_line_1", "ship_address_line_2"),
-                  ASCIIToUTF16("ship_locality_name"),
-                  ASCIIToUTF16("ship_dependent_locality_name"),
-                  ASCIIToUTF16("ship_admin_area_name"),
-                  ASCIIToUTF16("ship_postal_code_number"),
-                  ASCIIToUTF16("ship_sorting_code"),
-                  ASCIIToUTF16("ship_phone_number"),
-                  "default_address_id",
-                  "ship_language_code"));
+std::unique_ptr<Address> GetTestShippingAddress() {
+  return base::WrapUnique(new Address(
+      "US", ASCIIToUTF16("ship_recipient_name"),
+      StreetAddress("ship_address_line_1", "ship_address_line_2"),
+      ASCIIToUTF16("ship_locality_name"),
+      ASCIIToUTF16("ship_dependent_locality_name"),
+      ASCIIToUTF16("ship_admin_area_name"),
+      ASCIIToUTF16("ship_postal_code_number"),
+      ASCIIToUTF16("ship_sorting_code"), ASCIIToUTF16("ship_phone_number"),
+      "default_address_id", "ship_language_code"));
 }
 
-scoped_ptr<Address> GetTestNonDefaultShippingAddress() {
-  scoped_ptr<Address> address = GetTestShippingAddress();
+std::unique_ptr<Address> GetTestNonDefaultShippingAddress() {
+  std::unique_ptr<Address> address = GetTestShippingAddress();
   address->set_object_id("address_id");
   return address;
 }
diff --git a/components/autofill/content/browser/wallet/wallet_test_util.h b/components/autofill/content/browser/wallet/wallet_test_util.h
index cd9fb17..e99d802 100644
--- a/components/autofill/content/browser/wallet/wallet_test_util.h
+++ b/components/autofill/content/browser/wallet/wallet_test_util.h
@@ -5,9 +5,9 @@
 #ifndef COMPONENTS_AUTOFILL_CONTENT_BROWSER_WALLET_WALLET_TEST_UTIL_H_
 #define COMPONENTS_AUTOFILL_CONTENT_BROWSER_WALLET_WALLET_TEST_UTIL_H_
 
+#include <memory>
 #include <vector>
 
-#include "base/memory/scoped_ptr.h"
 #include "base/strings/string16.h"
 
 namespace autofill {
@@ -18,13 +18,13 @@
 
 std::vector<base::string16> StreetAddress(const std::string& line1,
                                           const std::string& line2);
-scoped_ptr<Address> GetTestAddress();
-scoped_ptr<Address> GetTestMinimalAddress();
-scoped_ptr<FullWallet> GetTestFullWallet();
-scoped_ptr<FullWallet> GetTestFullWalletInstrumentOnly();
-scoped_ptr<Address> GetTestSaveableAddress();
-scoped_ptr<Address> GetTestShippingAddress();
-scoped_ptr<Address> GetTestNonDefaultShippingAddress();
+std::unique_ptr<Address> GetTestAddress();
+std::unique_ptr<Address> GetTestMinimalAddress();
+std::unique_ptr<FullWallet> GetTestFullWallet();
+std::unique_ptr<FullWallet> GetTestFullWalletInstrumentOnly();
+std::unique_ptr<Address> GetTestSaveableAddress();
+std::unique_ptr<Address> GetTestShippingAddress();
+std::unique_ptr<Address> GetTestNonDefaultShippingAddress();
 
 }  // namespace wallet
 }  // namespace autofill
diff --git a/components/autofill/content/renderer/password_autofill_agent.cc b/components/autofill/content/renderer/password_autofill_agent.cc
index ba1b36c..804b584 100644
--- a/components/autofill/content/renderer/password_autofill_agent.cc
+++ b/components/autofill/content/renderer/password_autofill_agent.cc
@@ -5,12 +5,13 @@
 #include "components/autofill/content/renderer/password_autofill_agent.h"
 
 #include <stddef.h>
+
+#include <memory>
 #include <utility>
 
 #include "base/bind.h"
 #include "base/command_line.h"
 #include "base/i18n/case_conversion.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/message_loop/message_loop.h"
 #include "base/metrics/field_trial.h"
 #include "base/metrics/histogram_macros.h"
@@ -127,7 +128,7 @@
                                   const GURL& origin,
                                   const FormData& form_data,
                                   const FormsPredictionsMap& form_predictions) {
-  scoped_ptr<PasswordForm> unowned_password_form(
+  std::unique_ptr<PasswordForm> unowned_password_form(
       CreatePasswordFormFromUnownedInputElements(*frame, nullptr,
                                                  &form_predictions));
   if (!unowned_password_form)
@@ -748,7 +749,7 @@
   // handlers run, so save away a copy of the password in case it gets lost.
   // To honor the user having explicitly cleared the password, even an empty
   // password will be saved here.
-  scoped_ptr<PasswordForm> password_form;
+  std::unique_ptr<PasswordForm> password_form;
   if (element.form().isNull()) {
     password_form = CreatePasswordFormFromUnownedInputElements(
         *element_frame, &nonscript_modified_values_, &form_predictions_);
@@ -968,7 +969,7 @@
 }
 
 void PasswordAutofillAgent::SendPasswordForms(bool only_visible) {
-  scoped_ptr<RendererSavePasswordProgressLogger> logger;
+  std::unique_ptr<RendererSavePasswordProgressLogger> logger;
   if (logging_state_active_) {
     logger.reset(new RendererSavePasswordProgressLogger(this, routing_id()));
     logger->LogMessage(Logger::STRING_SEND_PASSWORD_FORMS_METHOD);
@@ -1017,7 +1018,7 @@
         continue;
     }
 
-    scoped_ptr<PasswordForm> password_form(
+    std::unique_ptr<PasswordForm> password_form(
         CreatePasswordFormFromWebForm(form, nullptr, &form_predictions_));
     if (password_form) {
       if (logger) {
@@ -1043,7 +1044,7 @@
     }
   }
   if (add_unowned_inputs) {
-    scoped_ptr<PasswordForm> password_form(
+    std::unique_ptr<PasswordForm> password_form(
         CreatePasswordFormFromUnownedInputElements(*frame, nullptr,
                                                    &form_predictions_));
     if (password_form) {
@@ -1139,23 +1140,22 @@
   // cleared by some scripts (http://crbug.com/28910, http://crbug.com/391693).
   // Had the user cleared the password, |provisionally_saved_form_| would
   // already have been updated in TextDidChangeInTextField.
-  scoped_ptr<PasswordForm> password_form = CreatePasswordFormFromWebForm(
+  std::unique_ptr<PasswordForm> password_form = CreatePasswordFormFromWebForm(
       form, &nonscript_modified_values_, &form_predictions_);
   ProvisionallySavePassword(std::move(password_form),
                             RESTRICTION_NON_EMPTY_PASSWORD);
 }
 
 void PasswordAutofillAgent::WillSubmitForm(const blink::WebFormElement& form) {
-  scoped_ptr<RendererSavePasswordProgressLogger> logger;
+  std::unique_ptr<RendererSavePasswordProgressLogger> logger;
   if (logging_state_active_) {
     logger.reset(new RendererSavePasswordProgressLogger(this, routing_id()));
     logger->LogMessage(Logger::STRING_WILL_SUBMIT_FORM_METHOD);
     LogHTMLForm(logger.get(), Logger::STRING_HTML_FORM_FOR_SUBMIT, form);
   }
 
-  scoped_ptr<PasswordForm> submitted_form =
-      CreatePasswordFormFromWebForm(form, &nonscript_modified_values_,
-                                    &form_predictions_);
+  std::unique_ptr<PasswordForm> submitted_form = CreatePasswordFormFromWebForm(
+      form, &nonscript_modified_values_, &form_predictions_);
 
   // If there is a provisionally saved password, copy over the previous
   // password value so we get the user's typed password, not the value that
@@ -1192,7 +1192,7 @@
 }
 
 void PasswordAutofillAgent::DidStartProvisionalLoad() {
-  scoped_ptr<RendererSavePasswordProgressLogger> logger;
+  std::unique_ptr<RendererSavePasswordProgressLogger> logger;
   if (logging_state_active_) {
     logger.reset(new RendererSavePasswordProgressLogger(this, routing_id()));
     logger->LogMessage(Logger::STRING_DID_START_PROVISIONAL_LOAD_METHOD);
@@ -1356,7 +1356,7 @@
 }
 
 void PasswordAutofillAgent::OnFindFocusedPasswordForm() {
-  scoped_ptr<PasswordForm> password_form;
+  std::unique_ptr<PasswordForm> password_form;
 
   blink::WebElement element = render_frame()->GetFocusedElement();
   if (!element.isNull() && element.hasHTMLTagName("input")) {
@@ -1496,7 +1496,7 @@
 }
 
 void PasswordAutofillAgent::ProvisionallySavePassword(
-    scoped_ptr<PasswordForm> password_form,
+    std::unique_ptr<PasswordForm> password_form,
     ProvisionallySaveRestriction restriction) {
   if (!password_form || (restriction == RESTRICTION_NON_EMPTY_PASSWORD &&
                          password_form->password_value.empty() &&
diff --git a/components/autofill/content/renderer/password_autofill_agent.h b/components/autofill/content/renderer/password_autofill_agent.h
index 864a075..6abe810 100644
--- a/components/autofill/content/renderer/password_autofill_agent.h
+++ b/components/autofill/content/renderer/password_autofill_agent.h
@@ -6,10 +6,10 @@
 #define COMPONENTS_AUTOFILL_CONTENT_RENDERER_PASSWORD_AUTOFILL_AGENT_H_
 
 #include <map>
+#include <memory>
 #include <vector>
 
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "components/autofill/content/renderer/password_form_conversion_utils.h"
 #include "components/autofill/core/common/form_data_predictions.h"
@@ -202,7 +202,7 @@
 
   // Saves |password_form| in |provisionally_saved_form_|, as long as it
   // satisfies |restriction|.
-  void ProvisionallySavePassword(scoped_ptr<PasswordForm> password_form,
+  void ProvisionallySavePassword(std::unique_ptr<PasswordForm> password_form,
                                  ProvisionallySaveRestriction restriction);
 
   // Returns true if |provisionally_saved_form_| has enough information that
@@ -221,7 +221,7 @@
 
   // Set if the user might be submitting a password form on the current page,
   // but the submit may still fail (i.e. doesn't pass JavaScript validation).
-  scoped_ptr<PasswordForm> provisionally_saved_form_;
+  std::unique_ptr<PasswordForm> provisionally_saved_form_;
 
   // Contains the most recent text that user typed or PasswordManager autofilled
   // in input elements. Used for storing username/password before JavaScript
diff --git a/components/autofill/content/renderer/password_form_conversion_utils.cc b/components/autofill/content/renderer/password_form_conversion_utils.cc
index afecbcba..dc6bf7ba2 100644
--- a/components/autofill/content/renderer/password_form_conversion_utils.cc
+++ b/components/autofill/content/renderer/password_form_conversion_utils.cc
@@ -12,7 +12,6 @@
 #include "base/i18n/case_conversion.h"
 #include "base/lazy_instance.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
@@ -633,17 +632,17 @@
   return has_rart_field && has_continue_field;
 }
 
-scoped_ptr<PasswordForm> CreatePasswordFormFromWebForm(
+std::unique_ptr<PasswordForm> CreatePasswordFormFromWebForm(
     const WebFormElement& web_form,
     const ModifiedValues* nonscript_modified_values,
     const FormsPredictionsMap* form_predictions) {
   if (web_form.isNull())
-    return scoped_ptr<PasswordForm>();
+    return std::unique_ptr<PasswordForm>();
 
-  scoped_ptr<PasswordForm> password_form(new PasswordForm());
+  std::unique_ptr<PasswordForm> password_form(new PasswordForm());
   password_form->action = form_util::GetCanonicalActionForForm(web_form);
   if (!password_form->action.is_valid())
-    return scoped_ptr<PasswordForm>();
+    return std::unique_ptr<PasswordForm>();
 
   SyntheticForm synthetic_form;
   PopulateSyntheticFormFromWebForm(web_form, &synthetic_form);
@@ -654,12 +653,12 @@
 
   if (!GetPasswordForm(synthetic_form, password_form.get(),
                        nonscript_modified_values, form_predictions))
-    return scoped_ptr<PasswordForm>();
+    return std::unique_ptr<PasswordForm>();
 
   return password_form;
 }
 
-scoped_ptr<PasswordForm> CreatePasswordFormFromUnownedInputElements(
+std::unique_ptr<PasswordForm> CreatePasswordFormFromUnownedInputElements(
     const WebFrame& frame,
     const ModifiedValues* nonscript_modified_values,
     const FormsPredictionsMap* form_predictions) {
@@ -669,16 +668,16 @@
   synthetic_form.document = frame.document();
 
   if (synthetic_form.control_elements.empty())
-    return scoped_ptr<PasswordForm>();
+    return std::unique_ptr<PasswordForm>();
 
-  scoped_ptr<PasswordForm> password_form(new PasswordForm());
+  std::unique_ptr<PasswordForm> password_form(new PasswordForm());
   UnownedPasswordFormElementsAndFieldSetsToFormData(
       synthetic_form.fieldsets, synthetic_form.control_elements, nullptr,
       frame.document(), form_util::EXTRACT_NONE, &password_form->form_data,
       nullptr /* FormFieldData */);
   if (!GetPasswordForm(synthetic_form, password_form.get(),
                        nonscript_modified_values, form_predictions))
-    return scoped_ptr<PasswordForm>();
+    return std::unique_ptr<PasswordForm>();
 
   // No actual action on the form, so use the the origin as the action.
   password_form->action = password_form->origin;
diff --git a/components/autofill/content/renderer/password_form_conversion_utils.h b/components/autofill/content/renderer/password_form_conversion_utils.h
index 42092289..2d2847a1 100644
--- a/components/autofill/content/renderer/password_form_conversion_utils.h
+++ b/components/autofill/content/renderer/password_form_conversion_utils.h
@@ -6,9 +6,9 @@
 #define COMPONENTS_AUTOFILL_CONTENT_RENDERER_PASSWORD_FORM_CONVERSION_UTILS_H_
 
 #include <map>
+#include <memory>
 #include <vector>
 
-#include "base/memory/scoped_ptr.h"
 #include "components/autofill/core/common/password_form_field_prediction_map.h"
 #include "third_party/WebKit/public/platform/WebString.h"
 #include "url/gurl.h"
@@ -47,14 +47,14 @@
 // the PasswordForm.
 // |form_predictions| is Autofill server response, if present it's used for
 // overwriting default username element selection.
-scoped_ptr<PasswordForm> CreatePasswordFormFromWebForm(
+std::unique_ptr<PasswordForm> CreatePasswordFormFromWebForm(
     const blink::WebFormElement& form,
     const ModifiedValues* nonscript_modified_values,
     const FormsPredictionsMap* form_predictions);
 
 // Same as CreatePasswordFormFromWebForm() but for input elements that are not
 // enclosed in <form> element.
-scoped_ptr<PasswordForm> CreatePasswordFormFromUnownedInputElements(
+std::unique_ptr<PasswordForm> CreatePasswordFormFromUnownedInputElements(
     const blink::WebFrame& frame,
     const ModifiedValues* nonscript_modified_values,
     const FormsPredictionsMap* form_predictions);
diff --git a/components/autofill/content/renderer/password_form_conversion_utils_browsertest.cc b/components/autofill/content/renderer/password_form_conversion_utils_browsertest.cc
index 1db126c..46969b4 100644
--- a/components/autofill/content/renderer/password_form_conversion_utils_browsertest.cc
+++ b/components/autofill/content/renderer/password_form_conversion_utils_browsertest.cc
@@ -171,7 +171,7 @@
   // a |password_form|. Note that ASSERT() can only be used in void functions,
   // this is why |password_form| is passed in as a pointer to a scoped_ptr.
   void LoadHTMLAndConvertForm(const std::string& html,
-                              scoped_ptr<PasswordForm>* password_form,
+                              std::unique_ptr<PasswordForm>* password_form,
                               FormsPredictionsMap* predictions) {
     WebFormElement form;
     LoadWebFormFromHTML(html, &form);
@@ -244,7 +244,7 @@
   builder.AddPasswordField("password", "secret", NULL);
   std::string html = builder.ProduceHTML();
 
-  scoped_ptr<PasswordForm> password_form;
+  std::unique_ptr<PasswordForm> password_form;
   ASSERT_NO_FATAL_FAILURE(
       LoadHTMLAndConvertForm(html, &password_form, nullptr));
   ASSERT_TRUE(password_form);
@@ -271,7 +271,7 @@
   builder.AddSubmitButton("submit");
   std::string html = builder.ProduceHTML();
 
-  scoped_ptr<PasswordForm> password_form;
+  std::unique_ptr<PasswordForm> password_form;
   ASSERT_NO_FATAL_FAILURE(
       LoadHTMLAndConvertForm(html, &password_form, nullptr));
   ASSERT_TRUE(password_form);
@@ -342,7 +342,7 @@
       builder.AddSubmitButton("submit");
       std::string html = builder.ProduceHTML();
 
-      scoped_ptr<PasswordForm> password_form;
+      std::unique_ptr<PasswordForm> password_form;
       ASSERT_NO_FATAL_FAILURE(
           LoadHTMLAndConvertForm(html, &password_form, nullptr));
       ASSERT_TRUE(password_form);
@@ -402,7 +402,7 @@
     builder.AddSubmitButton("submit");
     std::string html = builder.ProduceHTML();
 
-    scoped_ptr<PasswordForm> password_form;
+    std::unique_ptr<PasswordForm> password_form;
     ASSERT_NO_FATAL_FAILURE(
         LoadHTMLAndConvertForm(html, &password_form, nullptr));
     ASSERT_TRUE(password_form);
@@ -464,7 +464,7 @@
     builder.AddSubmitButton("submit");
     std::string html = builder.ProduceHTML();
 
-    scoped_ptr<PasswordForm> password_form;
+    std::unique_ptr<PasswordForm> password_form;
     ASSERT_NO_FATAL_FAILURE(
         LoadHTMLAndConvertForm(html, &password_form, nullptr));
     ASSERT_TRUE(password_form);
@@ -605,7 +605,7 @@
     builder.AddSubmitButton("submit");
     std::string html = builder.ProduceHTML();
 
-    scoped_ptr<PasswordForm> password_form;
+    std::unique_ptr<PasswordForm> password_form;
     ASSERT_NO_FATAL_FAILURE(
         LoadHTMLAndConvertForm(html, &password_form, nullptr));
     ASSERT_TRUE(password_form);
@@ -648,7 +648,7 @@
   builder.AddSubmitButton("submit");
   std::string html = builder.ProduceHTML();
 
-  scoped_ptr<PasswordForm> password_form;
+  std::unique_ptr<PasswordForm> password_form;
   ASSERT_NO_FATAL_FAILURE(
       LoadHTMLAndConvertForm(html, &password_form, nullptr));
   ASSERT_TRUE(password_form);
@@ -672,7 +672,7 @@
   builder.AddSubmitButton("submit");
   std::string html = builder.ProduceHTML();
 
-  scoped_ptr<PasswordForm> password_form;
+  std::unique_ptr<PasswordForm> password_form;
   ASSERT_NO_FATAL_FAILURE(
       LoadHTMLAndConvertForm(html, &password_form, nullptr));
   ASSERT_TRUE(password_form);
@@ -691,7 +691,7 @@
   builder.AddSubmitButton("submit");
   std::string html = builder.ProduceHTML();
 
-  scoped_ptr<PasswordForm> password_form;
+  std::unique_ptr<PasswordForm> password_form;
   ASSERT_NO_FATAL_FAILURE(
       LoadHTMLAndConvertForm(html, &password_form, nullptr));
   ASSERT_TRUE(password_form);
@@ -714,7 +714,7 @@
   builder.AddSubmitButton("submit");
   std::string html = builder.ProduceHTML();
 
-  scoped_ptr<PasswordForm> password_form;
+  std::unique_ptr<PasswordForm> password_form;
   ASSERT_NO_FATAL_FAILURE(
       LoadHTMLAndConvertForm(html, &password_form, nullptr));
   ASSERT_TRUE(password_form);
@@ -734,7 +734,7 @@
   builder.AddSubmitButton("submit");
   std::string html = builder.ProduceHTML();
 
-  scoped_ptr<PasswordForm> password_form;
+  std::unique_ptr<PasswordForm> password_form;
   ASSERT_NO_FATAL_FAILURE(
       LoadHTMLAndConvertForm(html, &password_form, nullptr));
   ASSERT_TRUE(password_form);
@@ -754,7 +754,7 @@
   builder.AddSubmitButton("submit");
   std::string html = builder.ProduceHTML();
 
-  scoped_ptr<PasswordForm> password_form;
+  std::unique_ptr<PasswordForm> password_form;
   ASSERT_NO_FATAL_FAILURE(
       LoadHTMLAndConvertForm(html, &password_form, nullptr));
   ASSERT_TRUE(password_form);
@@ -771,7 +771,7 @@
   builder.AddPasswordField("password", "secret", NULL);
   std::string html = builder.ProduceHTML();
 
-  scoped_ptr<PasswordForm> password_form;
+  std::unique_ptr<PasswordForm> password_form;
   ASSERT_NO_FATAL_FAILURE(
       LoadHTMLAndConvertForm(html, &password_form, nullptr));
   EXPECT_FALSE(password_form);
@@ -785,7 +785,7 @@
   builder.AddSubmitButton("submit");
   std::string html = builder.ProduceHTML();
 
-  scoped_ptr<PasswordForm> password_form;
+  std::unique_ptr<PasswordForm> password_form;
   ASSERT_NO_FATAL_FAILURE(
       LoadHTMLAndConvertForm(html, &password_form, nullptr));
   EXPECT_FALSE(password_form);
@@ -816,7 +816,7 @@
     builder.AddSubmitButton("submit");
     std::string html = builder.ProduceHTML();
 
-    scoped_ptr<PasswordForm> password_form;
+    std::unique_ptr<PasswordForm> password_form;
     ASSERT_NO_FATAL_FAILURE(
         LoadHTMLAndConvertForm(html, &password_form, nullptr));
     EXPECT_FALSE(password_form);
@@ -834,7 +834,7 @@
   builder.AddSubmitButton("submit");
   std::string html = builder.ProduceHTML();
 
-  scoped_ptr<PasswordForm> password_form;
+  std::unique_ptr<PasswordForm> password_form;
   ASSERT_NO_FATAL_FAILURE(
       LoadHTMLAndConvertForm(html, &password_form, nullptr));
   EXPECT_FALSE(password_form);
@@ -848,7 +848,7 @@
   builder.AddSubmitButton("submit");
   std::string login_html = builder.ProduceHTML();
 
-  scoped_ptr<PasswordForm> login_form;
+  std::unique_ptr<PasswordForm> login_form;
   ASSERT_NO_FATAL_FAILURE(
       LoadHTMLAndConvertForm(login_html, &login_form, nullptr));
   ASSERT_TRUE(login_form);
@@ -865,7 +865,7 @@
   builder.AddSubmitButton("submit");
   std::string signup_html = builder.ProduceHTML();
 
-  scoped_ptr<PasswordForm> signup_form;
+  std::unique_ptr<PasswordForm> signup_form;
   ASSERT_NO_FATAL_FAILURE(
       LoadHTMLAndConvertForm(signup_html, &signup_form, nullptr));
   ASSERT_TRUE(signup_form);
@@ -882,7 +882,7 @@
   builder.AddSubmitButton("submit");
   std::string change_html = builder.ProduceHTML();
 
-  scoped_ptr<PasswordForm> change_form;
+  std::unique_ptr<PasswordForm> change_form;
   ASSERT_NO_FATAL_FAILURE(
       LoadHTMLAndConvertForm(change_html, &change_form, nullptr));
   ASSERT_TRUE(change_form);
@@ -903,7 +903,7 @@
   builder.AddSubmitButton("submit");
   std::string login_plus_signup_html = builder.ProduceHTML();
 
-  scoped_ptr<PasswordForm> login_plus_signup_form;
+  std::unique_ptr<PasswordForm> login_plus_signup_form;
   ASSERT_NO_FATAL_FAILURE(LoadHTMLAndConvertForm(
       login_plus_signup_html, &login_plus_signup_form, nullptr));
   ASSERT_TRUE(login_plus_signup_form);
@@ -925,7 +925,7 @@
   builder.AddSubmitButton("submit");
   std::string login_plus_signup_html = builder.ProduceHTML();
 
-  scoped_ptr<PasswordForm> login_plus_signup_form;
+  std::unique_ptr<PasswordForm> login_plus_signup_form;
   ASSERT_NO_FATAL_FAILURE(LoadHTMLAndConvertForm(
       login_plus_signup_html, &login_plus_signup_form, nullptr));
   ASSERT_TRUE(login_plus_signup_form);
@@ -949,7 +949,7 @@
   FormsPredictionsMap predictions;
   SetPredictions(html, &predictions, predictions_positions);
 
-  scoped_ptr<PasswordForm> password_form;
+  std::unique_ptr<PasswordForm> password_form;
   LoadHTMLAndConvertForm(html, &password_form, &predictions);
   EXPECT_FALSE(password_form);
 }
@@ -969,7 +969,7 @@
   FormsPredictionsMap predictions;
   SetPredictions(html, &predictions, predictions_positions);
 
-  scoped_ptr<PasswordForm> password_form;
+  std::unique_ptr<PasswordForm> password_form;
   LoadHTMLAndConvertForm(html, &password_form, &predictions);
   EXPECT_FALSE(password_form);
 }
@@ -990,7 +990,7 @@
   FormsPredictionsMap predictions;
   SetPredictions(html, &predictions, predictions_positions);
 
-  scoped_ptr<PasswordForm> password_form;
+  std::unique_ptr<PasswordForm> password_form;
   LoadHTMLAndConvertForm(html, &password_form, &predictions);
   EXPECT_TRUE(password_form);
 }
@@ -1010,7 +1010,7 @@
   FormsPredictionsMap predictions;
   SetPredictions(html, &predictions, predictions_positions);
 
-  scoped_ptr<PasswordForm> password_form;
+  std::unique_ptr<PasswordForm> password_form;
   LoadHTMLAndConvertForm(html, &password_form, &predictions);
   EXPECT_TRUE(password_form);
 }
@@ -1103,7 +1103,7 @@
                  << "/" << test_case.hidden_fields[1].value
                  << ", expected_form_is_reauth="
                  << test_case.expected_form_is_reauth);
-    scoped_ptr<PasswordFormBuilder> builder(new PasswordFormBuilder(""));
+    std::unique_ptr<PasswordFormBuilder> builder(new PasswordFormBuilder(""));
     builder->AddTextField("username", "", nullptr);
     builder->AddPasswordField("password", "", nullptr);
     for (TestCase::KeyValue& hidden_field : test_case.hidden_fields) {
@@ -1175,7 +1175,7 @@
     }
     std::string html = builder.ProduceHTML();
 
-    scoped_ptr<PasswordForm> password_form;
+    std::unique_ptr<PasswordForm> password_form;
     LoadHTMLAndConvertForm(html, &password_form, nullptr);
     EXPECT_TRUE(password_form);
 
diff --git a/components/autofill/content/renderer/password_generation_agent.cc b/components/autofill/content/renderer/password_generation_agent.cc
index a1087843..2485c3d 100644
--- a/components/autofill/content/renderer/password_generation_agent.cc
+++ b/components/autofill/content/renderer/password_generation_agent.cc
@@ -4,9 +4,10 @@
 
 #include "components/autofill/content/renderer/password_generation_agent.h"
 
+#include <memory>
+
 #include "base/command_line.h"
 #include "base/logging.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/autofill/content/common/autofill_messages.h"
 #include "components/autofill/content/renderer/form_autofill_util.h"
 #include "components/autofill/content/renderer/password_autofill_agent.h"
@@ -203,7 +204,7 @@
 
     // If we can't get a valid PasswordForm, we skip this form because the
     // the password won't get saved even if we generate it.
-    scoped_ptr<PasswordForm> password_form(
+    std::unique_ptr<PasswordForm> password_form(
         CreatePasswordFormFromWebForm(forms[i], nullptr, nullptr));
     if (!password_form.get()) {
       VLOG(2) << "Skipping form as it would not be saved";
@@ -376,6 +377,8 @@
     return false;
 
   const blink::WebInputElement* element = toWebInputElement(&web_element);
+  if (element && element->isPasswordField())
+    last_focused_password_element_ = *element;
   if (!element || *element != generation_element_)
     return false;
 
@@ -465,37 +468,34 @@
 }
 
 void PasswordGenerationAgent::OnUserTriggeredGeneratePassword() {
-  blink::WebDocument doc = render_frame()->GetWebFrame()->document();
-  if (doc.isNull())
+  if (last_focused_password_element_.isNull())
     return;
 
-  blink::WebElement focused_element = doc.focusedElement();
-  const blink::WebInputElement* element = toWebInputElement(&focused_element);
-  if (!element || !element->isPasswordField())
-    return;
-
-  blink::WebFormElement form = element->form();
-  scoped_ptr<PasswordForm> password_form;
+  blink::WebFormElement form = last_focused_password_element_.form();
+  std::unique_ptr<PasswordForm> password_form;
   std::vector<blink::WebFormControlElement> control_elements;
   if (!form.isNull()) {
     password_form = CreatePasswordFormFromWebForm(form, nullptr, nullptr);
     control_elements = form_util::ExtractAutofillableElementsInForm(form);
   } else {
     const blink::WebFrame& frame = *render_frame()->GetWebFrame();
+    blink::WebDocument doc = frame.document();
+    if (doc.isNull())
+      return;
     password_form =
         CreatePasswordFormFromUnownedInputElements(frame, nullptr, nullptr);
     control_elements =
-        form_util::GetUnownedFormFieldElements(frame.document().all(), nullptr);
+        form_util::GetUnownedFormFieldElements(doc.all(), nullptr);
   }
 
   if (!password_form)
     return;
 
-  generation_element_ = *element;
+  generation_element_ = last_focused_password_element_;
   std::vector<blink::WebInputElement> password_elements;
   GetAccountCreationPasswordFields(control_elements, &password_elements);
   password_elements = FindPasswordElementsForGeneration(
-      password_elements, element->nameForAutofill());
+      password_elements, last_focused_password_element_.nameForAutofill());
   generation_form_data_.reset(new AccountCreationFormData(
       make_linked_ptr(password_form.release()), password_elements));
   is_manually_triggered_ = true;
diff --git a/components/autofill/content/renderer/password_generation_agent.h b/components/autofill/content/renderer/password_generation_agent.h
index 8fc6346..82cdf5e 100644
--- a/components/autofill/content/renderer/password_generation_agent.h
+++ b/components/autofill/content/renderer/password_generation_agent.h
@@ -8,12 +8,12 @@
 #include <stddef.h>
 
 #include <map>
+#include <memory>
 #include <utility>
 #include <vector>
 
 #include "base/macros.h"
 #include "base/memory/linked_ptr.h"
-#include "base/memory/scoped_ptr.h"
 #include "content/public/renderer/render_frame_observer.h"
 #include "third_party/WebKit/public/web/WebInputElement.h"
 #include "url/gurl.h"
@@ -121,11 +121,16 @@
   std::vector<autofill::PasswordFormGenerationData> generation_enabled_forms_;
 
   // Data for form which generation is allowed on.
-  scoped_ptr<AccountCreationFormData> generation_form_data_;
+  std::unique_ptr<AccountCreationFormData> generation_form_data_;
 
   // Element where we want to trigger password generation UI.
   blink::WebInputElement generation_element_;
 
+  // Password element that had focus last. Since Javascript could change focused
+  // element after the user triggered a generation request, it is better to save
+  // the last focused password element.
+  blink::WebInputElement last_focused_password_element_;
+
   // If the password field at |generation_element_| contains a generated
   // password.
   bool password_is_generated_;
diff --git a/components/autofill/core/browser/address_field.cc b/components/autofill/core/browser/address_field.cc
index 3b705a8..08fdd7c 100644
--- a/components/autofill/core/browser/address_field.cc
+++ b/components/autofill/core/browser/address_field.cc
@@ -5,10 +5,11 @@
 #include "components/autofill/core/browser/address_field.h"
 
 #include <stddef.h>
+
+#include <memory>
 #include <utility>
 
 #include "base/logging.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/strings/string16.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
@@ -41,11 +42,11 @@
 
 const int AddressField::kStateMatchType = MATCH_DEFAULT | MATCH_SELECT;
 
-scoped_ptr<FormField> AddressField::Parse(AutofillScanner* scanner) {
+std::unique_ptr<FormField> AddressField::Parse(AutofillScanner* scanner) {
   if (scanner->IsEnd())
     return NULL;
 
-  scoped_ptr<AddressField> address_field(new AddressField);
+  std::unique_ptr<AddressField> address_field(new AddressField);
   const AutofillField* const initial_field = scanner->Cursor();
   size_t saved_cursor = scanner->SaveCursor();
 
diff --git a/components/autofill/core/browser/address_field.h b/components/autofill/core/browser/address_field.h
index 9afb770..a6117cb8 100644
--- a/components/autofill/core/browser/address_field.h
+++ b/components/autofill/core/browser/address_field.h
@@ -5,12 +5,12 @@
 #ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_ADDRESS_FIELD_H_
 #define COMPONENTS_AUTOFILL_CORE_BROWSER_ADDRESS_FIELD_H_
 
+#include <memory>
 #include <vector>
 
 #include "base/compiler_specific.h"
 #include "base/gtest_prod_util.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/strings/string16.h"
 #include "components/autofill/core/browser/autofill_type.h"
 #include "components/autofill/core/browser/form_field.h"
@@ -22,7 +22,7 @@
 
 class AddressField : public FormField {
  public:
-  static scoped_ptr<FormField> Parse(AutofillScanner* scanner);
+  static std::unique_ptr<FormField> Parse(AutofillScanner* scanner);
 
  protected:
   void AddClassifications(FieldCandidatesMap* field_candidates) const override;
diff --git a/components/autofill/core/browser/address_field_unittest.cc b/components/autofill/core/browser/address_field_unittest.cc
index 858a468..b3f4f92 100644
--- a/components/autofill/core/browser/address_field_unittest.cc
+++ b/components/autofill/core/browser/address_field_unittest.cc
@@ -2,12 +2,15 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "components/autofill/core/browser/address_field.h"
+
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
+#include "base/memory/ptr_util.h"
 #include "base/memory/scoped_vector.h"
 #include "base/strings/string16.h"
 #include "base/strings/utf_string_conversions.h"
-#include "components/autofill/core/browser/address_field.h"
 #include "components/autofill/core/browser/autofill_field.h"
 #include "components/autofill/core/browser/autofill_scanner.h"
 #include "components/autofill/core/common/form_field_data.h"
@@ -23,13 +26,13 @@
 
  protected:
   ScopedVector<AutofillField> list_;
-  scoped_ptr<AddressField> field_;
+  std::unique_ptr<AddressField> field_;
   FieldCandidatesMap field_candidates_map_;
 
   // Downcast for tests.
-  static scoped_ptr<AddressField> Parse(AutofillScanner* scanner) {
-    scoped_ptr<FormField> field = AddressField::Parse(scanner);
-    return make_scoped_ptr(static_cast<AddressField*>(field.release()));
+  static std::unique_ptr<AddressField> Parse(AutofillScanner* scanner) {
+    std::unique_ptr<FormField> field = AddressField::Parse(scanner);
+    return base::WrapUnique(static_cast<AddressField*>(field.release()));
   }
 
  private:
diff --git a/components/autofill/core/browser/address_i18n.cc b/components/autofill/core/browser/address_i18n.cc
index 67be69b4..a983e25 100644
--- a/components/autofill/core/browser/address_i18n.cc
+++ b/components/autofill/core/browser/address_i18n.cc
@@ -29,9 +29,9 @@
 using ::i18n::addressinput::AddressData;
 using ::i18n::addressinput::AddressField;
 
-scoped_ptr<AddressData> CreateAddressData(
+std::unique_ptr<AddressData> CreateAddressData(
     const base::Callback<base::string16(const AutofillType&)>& get_info) {
-  scoped_ptr<AddressData> address_data(new AddressData());
+  std::unique_ptr<AddressData> address_data(new AddressData());
   address_data->recipient = base::UTF16ToUTF8(
       get_info.Run(AutofillType(NAME_FULL)));
   address_data->organization = base::UTF16ToUTF8(
@@ -55,10 +55,10 @@
   return address_data;
 }
 
-scoped_ptr< ::i18n::addressinput::AddressData>
-    CreateAddressDataFromAutofillProfile(const AutofillProfile& profile,
-                                         const std::string& app_locale) {
-  scoped_ptr< ::i18n::addressinput::AddressData> address_data =
+std::unique_ptr<::i18n::addressinput::AddressData>
+CreateAddressDataFromAutofillProfile(const AutofillProfile& profile,
+                                     const std::string& app_locale) {
+  std::unique_ptr<::i18n::addressinput::AddressData> address_data =
       i18n::CreateAddressData(base::Bind(&GetInfoHelper, profile, app_locale));
   address_data->language_code = profile.language_code();
   return address_data;
diff --git a/components/autofill/core/browser/address_i18n.h b/components/autofill/core/browser/address_i18n.h
index 8ae3c56..6473ee5 100644
--- a/components/autofill/core/browser/address_i18n.h
+++ b/components/autofill/core/browser/address_i18n.h
@@ -5,8 +5,9 @@
 #ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_ADDRESS_I18N_H_
 #define COMPONENTS_AUTOFILL_CORE_BROWSER_ADDRESS_I18N_H_
 
+#include <memory>
+
 #include "base/callback_forward.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/strings/string16.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "third_party/libaddressinput/src/cpp/include/libaddressinput/address_field.h"
@@ -26,13 +27,13 @@
 
 // Creates an AddressData object for internationalized address display or
 // validation using |get_info| for field values.
-scoped_ptr< ::i18n::addressinput::AddressData> CreateAddressData(
+std::unique_ptr<::i18n::addressinput::AddressData> CreateAddressData(
     const base::Callback<base::string16(const AutofillType&)>& get_info);
 
 // Creates an |AddressData| from |profile|.
-scoped_ptr< ::i18n::addressinput::AddressData>
-    CreateAddressDataFromAutofillProfile(const AutofillProfile& profile,
-                                         const std::string& app_locale);
+std::unique_ptr<::i18n::addressinput::AddressData>
+CreateAddressDataFromAutofillProfile(const AutofillProfile& profile,
+                                     const std::string& app_locale);
 
 // Returns the corresponding Autofill server type for |field|.
 ServerFieldType TypeForField(::i18n::addressinput::AddressField field,
diff --git a/components/autofill/core/browser/address_i18n_unittest.cc b/components/autofill/core/browser/address_i18n_unittest.cc
index 288ea04..c36223d 100644
--- a/components/autofill/core/browser/address_i18n_unittest.cc
+++ b/components/autofill/core/browser/address_i18n_unittest.cc
@@ -6,12 +6,12 @@
 
 #include <stddef.h>
 
+#include <memory>
 #include <string>
 #include <vector>
 
 #include "base/guid.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
 #include "components/autofill/core/browser/field_types.h"
@@ -110,7 +110,7 @@
                        "US",
                        "16502111111");
   profile.set_language_code("en");
-  scoped_ptr<AddressData> actual =
+  std::unique_ptr<AddressData> actual =
       CreateAddressDataFromAutofillProfile(profile, "en_US");
 
   AddressData expected;
diff --git a/components/autofill/core/browser/autocomplete_history_manager_unittest.cc b/components/autofill/core/browser/autocomplete_history_manager_unittest.cc
index 601e574..90906d76 100644
--- a/components/autofill/core/browser/autocomplete_history_manager_unittest.cc
+++ b/components/autofill/core/browser/autocomplete_history_manager_unittest.cc
@@ -57,7 +57,7 @@
 
  private:
   scoped_refptr<MockWebDataService> web_data_service_;
-  scoped_ptr<PrefService> prefs_;
+  std::unique_ptr<PrefService> prefs_;
 
   DISALLOW_COPY_AND_ASSIGN(MockAutofillClient);
 };
@@ -80,9 +80,9 @@
 
   base::MessageLoop message_loop_;
   scoped_refptr<MockWebDataService> web_data_service_;
-  scoped_ptr<AutocompleteHistoryManager> autocomplete_manager_;
-  scoped_ptr<AutofillDriver> autofill_driver_;
-  scoped_ptr<MockAutofillClient> autofill_client_;
+  std::unique_ptr<AutocompleteHistoryManager> autocomplete_manager_;
+  std::unique_ptr<AutofillDriver> autofill_driver_;
+  std::unique_ptr<MockAutofillClient> autofill_client_;
 };
 
 // Tests that credit card numbers are not sent to the WebDatabase to be saved.
@@ -222,11 +222,9 @@
   TestAutocompleteHistoryManager autocomplete_history_manager(
       autofill_driver_.get(), autofill_client_.get());
 
-  scoped_ptr<AutofillManager> autofill_manager(
-      new AutofillManager(autofill_driver_.get(),
-                          autofill_client_.get(),
-                          "en-US",
-                          AutofillManager::ENABLE_AUTOFILL_DOWNLOAD_MANAGER));
+  std::unique_ptr<AutofillManager> autofill_manager(new AutofillManager(
+      autofill_driver_.get(), autofill_client_.get(), "en-US",
+      AutofillManager::ENABLE_AUTOFILL_DOWNLOAD_MANAGER));
 
   MockAutofillExternalDelegate external_delegate(autofill_manager.get(),
                                                  autofill_driver_.get());
@@ -242,11 +240,9 @@
   TestAutocompleteHistoryManager autocomplete_history_manager(
       autofill_driver_.get(), autofill_client_.get());
 
-  scoped_ptr<AutofillManager> autofill_manager(
-      new AutofillManager(autofill_driver_.get(),
-                          autofill_client_.get(),
-                          "en-US",
-                          AutofillManager::ENABLE_AUTOFILL_DOWNLOAD_MANAGER));
+  std::unique_ptr<AutofillManager> autofill_manager(new AutofillManager(
+      autofill_driver_.get(), autofill_client_.get(), "en-US",
+      AutofillManager::ENABLE_AUTOFILL_DOWNLOAD_MANAGER));
 
   MockAutofillExternalDelegate external_delegate(autofill_manager.get(),
                                                  autofill_driver_.get());
diff --git a/components/autofill/core/browser/autofill_client.h b/components/autofill/core/browser/autofill_client.h
index a0e1b10..4b8c8a5 100644
--- a/components/autofill/core/browser/autofill_client.h
+++ b/components/autofill/core/browser/autofill_client.h
@@ -5,6 +5,7 @@
 #ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_CLIENT_H_
 #define COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_CLIENT_H_
 
+#include <memory>
 #include <vector>
 
 #include "base/callback_forward.h"
@@ -135,7 +136,7 @@
   // contents of |legal_message| to the user.
   virtual void ConfirmSaveCreditCardToCloud(
       const CreditCard& card,
-      scoped_ptr<base::DictionaryValue> legal_message,
+      std::unique_ptr<base::DictionaryValue> legal_message,
       const base::Closure& callback) = 0;
 
   // Gathers risk data and provides it to |callback|.
diff --git a/components/autofill/core/browser/autofill_download_manager_unittest.cc b/components/autofill/core/browser/autofill_download_manager_unittest.cc
index d1f0488..ad26e28c 100644
--- a/components/autofill/core/browser/autofill_download_manager_unittest.cc
+++ b/components/autofill/core/browser/autofill_download_manager_unittest.cc
@@ -7,6 +7,7 @@
 #include <stddef.h>
 
 #include <list>
+#include <memory>
 #include <utility>
 
 #include "base/strings/string_number_conversions.h"
@@ -401,7 +402,7 @@
   field.form_control_type = "submit";
   form.fields.push_back(field);
 
-  scoped_ptr<FormStructure> form_structure(new FormStructure(form));
+  std::unique_ptr<FormStructure> form_structure(new FormStructure(form));
 
   // Request with id 0.
   EXPECT_TRUE(download_manager_.StartUploadRequest(
diff --git a/components/autofill/core/browser/autofill_external_delegate_unittest.cc b/components/autofill/core/browser/autofill_external_delegate_unittest.cc
index 9e5485c7b..0349cb5 100644
--- a/components/autofill/core/browser/autofill_external_delegate_unittest.cc
+++ b/components/autofill/core/browser/autofill_external_delegate_unittest.cc
@@ -2,6 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include <memory>
 #include <vector>
 
 #include "base/command_line.h"
@@ -147,9 +148,9 @@
   }
 
   testing::NiceMock<MockAutofillClient> autofill_client_;
-  scoped_ptr<testing::NiceMock<MockAutofillDriver>> autofill_driver_;
-  scoped_ptr<MockAutofillManager> autofill_manager_;
-  scoped_ptr<AutofillExternalDelegate> external_delegate_;
+  std::unique_ptr<testing::NiceMock<MockAutofillDriver>> autofill_driver_;
+  std::unique_ptr<MockAutofillManager> autofill_manager_;
+  std::unique_ptr<AutofillExternalDelegate> external_delegate_;
 
   base::MessageLoop message_loop_;
 };
diff --git a/components/autofill/core/browser/autofill_manager.cc b/components/autofill/core/browser/autofill_manager.cc
index 1088993..6f4908ce 100644
--- a/components/autofill/core/browser/autofill_manager.cc
+++ b/components/autofill/core/browser/autofill_manager.cc
@@ -294,7 +294,7 @@
     return false;
 
   // We will always give Autocomplete a chance to save the data.
-  scoped_ptr<FormStructure> submitted_form = ValidateSubmittedForm(form);
+  std::unique_ptr<FormStructure> submitted_form = ValidateSubmittedForm(form);
   if (!submitted_form) {
     autocomplete_history_manager_->OnWillSubmitForm(form);
     return false;
@@ -324,7 +324,7 @@
     return false;
 
   // We will always give Autocomplete a chance to save the data.
-  scoped_ptr<FormStructure> submitted_form = ValidateSubmittedForm(form);
+  std::unique_ptr<FormStructure> submitted_form = ValidateSubmittedForm(form);
   if (!submitted_form) {
     return false;
   }
@@ -340,7 +340,7 @@
 }
 
 void AutofillManager::StartUploadProcess(
-    scoped_ptr<FormStructure> form_structure,
+    std::unique_ptr<FormStructure> form_structure,
     const TimeTicks& timestamp,
     bool observed_submission) {
   // It is possible for |personal_data_| to be null, such as when used in the
@@ -402,7 +402,7 @@
 
   // We get the FormStructure corresponding to |pending_form_data_|, used in the
   // upload process. |pending_form_data_| is reset.
-  scoped_ptr<FormStructure> upload_form =
+  std::unique_ptr<FormStructure> upload_form =
       ValidateSubmittedForm(*pending_form_data_);
   pending_form_data_.reset();
   if (!upload_form)
@@ -914,7 +914,7 @@
 void AutofillManager::OnDidGetUploadDetails(
     AutofillClient::PaymentsRpcResult result,
     const base::string16& context_token,
-    scoped_ptr<base::DictionaryValue> legal_message) {
+    std::unique_ptr<base::DictionaryValue> legal_message) {
   // TODO(jdonnelly): Log duration.
   if (result == AutofillClient::SUCCESS) {
     // Do *not* call payments_client_->Prepare() here. We shouldn't send
@@ -1005,7 +1005,7 @@
 }
 
 void AutofillManager::ImportFormData(const FormStructure& submitted_form) {
-  scoped_ptr<CreditCard> imported_credit_card;
+  std::unique_ptr<CreditCard> imported_credit_card;
   if (!personal_data_->ImportFormData(
           submitted_form, IsCreditCardUploadEnabled(), &imported_credit_card)) {
     return;
@@ -1495,17 +1495,17 @@
   driver_->SendFormDataToRenderer(query_id, action, result);
 }
 
-scoped_ptr<FormStructure> AutofillManager::ValidateSubmittedForm(
+std::unique_ptr<FormStructure> AutofillManager::ValidateSubmittedForm(
     const FormData& form) {
-  scoped_ptr<FormStructure> submitted_form(new FormStructure(form));
+  std::unique_ptr<FormStructure> submitted_form(new FormStructure(form));
   if (!ShouldUploadForm(*submitted_form))
-    return scoped_ptr<FormStructure>();
+    return std::unique_ptr<FormStructure>();
 
   // Ignore forms not present in our cache.  These are typically forms with
   // wonky JavaScript that also makes them not auto-fillable.
   FormStructure* cached_submitted_form;
   if (!FindCachedForm(form, &cached_submitted_form))
-    return scoped_ptr<FormStructure>();
+    return std::unique_ptr<FormStructure>();
 
   submitted_form->UpdateFromCache(*cached_submitted_form);
   return submitted_form;
@@ -1693,7 +1693,7 @@
   for (const FormData& form : forms) {
     const auto parse_form_start_time = base::TimeTicks::Now();
 
-    scoped_ptr<FormStructure> form_structure(new FormStructure(form));
+    std::unique_ptr<FormStructure> form_structure(new FormStructure(form));
     form_structure->ParseFieldTypesFromAutocompleteAttributes();
     if (!form_structure->ShouldBeParsed())
       continue;
diff --git a/components/autofill/core/browser/autofill_manager.h b/components/autofill/core/browser/autofill_manager.h
index a859e2ff..13cd6d5 100644
--- a/components/autofill/core/browser/autofill_manager.h
+++ b/components/autofill/core/browser/autofill_manager.h
@@ -7,6 +7,7 @@
 
 #include <deque>
 #include <map>
+#include <memory>
 #include <string>
 #include <vector>
 
@@ -14,7 +15,6 @@
 #include "base/compiler_specific.h"
 #include "base/gtest_prod_util.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/scoped_vector.h"
 #include "base/memory/weak_ptr.h"
 #include "base/strings/string16.h"
@@ -168,7 +168,7 @@
   // Will send an upload based on the |form_structure| data and the local
   // Autofill profile data. |observed_submission| is specified if the upload
   // follows an observed submission event.
-  void StartUploadProcess(scoped_ptr<FormStructure> form_structure,
+  void StartUploadProcess(std::unique_ptr<FormStructure> form_structure,
                           const base::TimeTicks& timestamp,
                           bool observed_submission);
 
@@ -278,7 +278,7 @@
   void OnDidGetUploadDetails(
       AutofillClient::PaymentsRpcResult result,
       const base::string16& context_token,
-      scoped_ptr<base::DictionaryValue> legal_message) override;
+      std::unique_ptr<base::DictionaryValue> legal_message) override;
   void OnDidUploadCard(AutofillClient::PaymentsRpcResult result) override;
 
   // Saves risk data in |unmasking_risk_data_| and calls UnmaskCard if the user
@@ -342,7 +342,7 @@
   // Creates a FormStructure using the FormData received from the renderer. Will
   // return an empty scoped_ptr if the data should not be processed for upload
   // or personal data.
-  scoped_ptr<FormStructure> ValidateSubmittedForm(const FormData& form);
+  std::unique_ptr<FormStructure> ValidateSubmittedForm(const FormData& form);
 
   // Fills |form_structure| cached element corresponding to |form|.
   // Returns false if the cached element was not found.
@@ -446,7 +446,7 @@
   AutofillClient* const client_;
 
   // Handles Payments service requests.
-  scoped_ptr<payments::PaymentsClient> payments_client_;
+  std::unique_ptr<payments::PaymentsClient> payments_client_;
 
   std::string app_locale_;
 
@@ -460,14 +460,15 @@
 
   // Handles queries and uploads to Autofill servers. Will be NULL if
   // the download manager functionality is disabled.
-  scoped_ptr<AutofillDownloadManager> download_manager_;
+  std::unique_ptr<AutofillDownloadManager> download_manager_;
 
   // Handles single-field autocomplete form data.
-  scoped_ptr<AutocompleteHistoryManager> autocomplete_history_manager_;
+  std::unique_ptr<AutocompleteHistoryManager> autocomplete_history_manager_;
 
   // Utilities for logging form events.
-  scoped_ptr<AutofillMetrics::FormEventLogger> address_form_event_logger_;
-  scoped_ptr<AutofillMetrics::FormEventLogger> credit_card_form_event_logger_;
+  std::unique_ptr<AutofillMetrics::FormEventLogger> address_form_event_logger_;
+  std::unique_ptr<AutofillMetrics::FormEventLogger>
+      credit_card_form_event_logger_;
 
   // Have we logged whether Autofill is enabled for this page load?
   bool has_logged_autofill_enabled_;
@@ -492,7 +493,7 @@
   ScopedVector<FormStructure> form_structures_;
 
   // A copy of the currently interacted form data.
-  scoped_ptr<FormData> pending_form_data_;
+  std::unique_ptr<FormData> pending_form_data_;
 
   // Collected information about a pending unmask request, and data about the
   // form.
diff --git a/components/autofill/core/browser/autofill_manager_unittest.cc b/components/autofill/core/browser/autofill_manager_unittest.cc
index 125f4b8..9b00363e 100644
--- a/components/autofill/core/browser/autofill_manager_unittest.cc
+++ b/components/autofill/core/browser/autofill_manager_unittest.cc
@@ -2,16 +2,18 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "components/autofill/core/browser/autofill_manager.h"
+
 #include <stddef.h>
 
 #include <algorithm>
+#include <memory>
 #include <vector>
 
 #include "base/command_line.h"
 #include "base/format_macros.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/scoped_vector.h"
 #include "base/run_loop.h"
 #include "base/strings/string16.h"
@@ -25,7 +27,6 @@
 #include "build/build_config.h"
 #include "components/autofill/core/browser/autocomplete_history_manager.h"
 #include "components/autofill/core/browser/autofill_download_manager.h"
-#include "components/autofill/core/browser/autofill_manager.h"
 #include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
 #include "components/autofill/core/browser/credit_card.h"
@@ -88,7 +89,7 @@
         app_locale == "en-US" ? AutofillClient::SUCCESS
                               : AutofillClient::PERMANENT_FAILURE,
         ASCIIToUTF16("this is a context token"),
-        scoped_ptr<base::DictionaryValue>(nullptr));
+        std::unique_ptr<base::DictionaryValue>(nullptr));
   }
 
   void UploadCard(const payments::PaymentsClient::UploadRequestDetails&
@@ -606,7 +607,7 @@
   bool credit_card_was_uploaded_;
   bool expected_observed_submission_;
 
-  scoped_ptr<base::RunLoop> run_loop_;
+  std::unique_ptr<base::RunLoop> run_loop_;
 
   std::string submitted_form_signature_;
   std::vector<ServerFieldTypeSet> expected_submitted_field_types_;
@@ -925,9 +926,9 @@
  protected:
   base::MessageLoop message_loop_;
   MockAutofillClient autofill_client_;
-  scoped_ptr<MockAutofillDriver> autofill_driver_;
-  scoped_ptr<TestAutofillManager> autofill_manager_;
-  scoped_ptr<TestAutofillExternalDelegate> external_delegate_;
+  std::unique_ptr<MockAutofillDriver> autofill_driver_;
+  std::unique_ptr<TestAutofillManager> autofill_manager_;
+  std::unique_ptr<TestAutofillExternalDelegate> external_delegate_;
   scoped_refptr<net::TestURLRequestContextGetter> request_context_;
   TestPaymentsClient* payments_client_;
   TestAutofillDownloadManager* download_manager_;
diff --git a/components/autofill/core/browser/autofill_merge_unittest.cc b/components/autofill/core/browser/autofill_merge_unittest.cc
index 61c58a8..571fed9 100644
--- a/components/autofill/core/browser/autofill_merge_unittest.cc
+++ b/components/autofill/core/browser/autofill_merge_unittest.cc
@@ -5,6 +5,7 @@
 #include <stddef.h>
 
 #include <map>
+#include <memory>
 #include <vector>
 
 #include "base/files/file_path.h"
@@ -229,7 +230,7 @@
       form_structure.IdentifySections(false);
 
       // Import the profile.
-      scoped_ptr<CreditCard> imported_credit_card;
+      std::unique_ptr<CreditCard> imported_credit_card;
       personal_data_.ImportFormData(form_structure, false,
                                     &imported_credit_card);
       EXPECT_FALSE(imported_credit_card);
diff --git a/components/autofill/core/browser/autofill_metrics_unittest.cc b/components/autofill/core/browser/autofill_metrics_unittest.cc
index 4944464..b8278a4 100644
--- a/components/autofill/core/browser/autofill_metrics_unittest.cc
+++ b/components/autofill/core/browser/autofill_metrics_unittest.cc
@@ -6,10 +6,10 @@
 
 #include <stddef.h>
 
+#include <memory>
 #include <vector>
 
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/run_loop.h"
 #include "base/strings/string16.h"
 #include "base/strings/utf_string_conversions.h"
@@ -288,7 +288,7 @@
 
  private:
   bool autofill_enabled_;
-  scoped_ptr<base::RunLoop> run_loop_;
+  std::unique_ptr<base::RunLoop> run_loop_;
 
   DISALLOW_COPY_AND_ASSIGN(TestAutofillManager);
 };
@@ -311,13 +311,13 @@
 
   base::MessageLoop message_loop_;
   TestAutofillClient autofill_client_;
-  scoped_ptr<AccountTrackerService> account_tracker_;
-  scoped_ptr<FakeSigninManagerBase> signin_manager_;
-  scoped_ptr<TestSigninClient> signin_client_;
-  scoped_ptr<TestAutofillDriver> autofill_driver_;
-  scoped_ptr<TestAutofillManager> autofill_manager_;
-  scoped_ptr<TestPersonalDataManager> personal_data_;
-  scoped_ptr<AutofillExternalDelegate> external_delegate_;
+  std::unique_ptr<AccountTrackerService> account_tracker_;
+  std::unique_ptr<FakeSigninManagerBase> signin_manager_;
+  std::unique_ptr<TestSigninClient> signin_client_;
+  std::unique_ptr<TestAutofillDriver> autofill_driver_;
+  std::unique_ptr<TestAutofillManager> autofill_manager_;
+  std::unique_ptr<TestPersonalDataManager> personal_data_;
+  std::unique_ptr<AutofillExternalDelegate> external_delegate_;
 };
 
 AutofillMetricsTest::~AutofillMetricsTest() {
diff --git a/components/autofill/core/browser/autofill_profile.cc b/components/autofill/core/browser/autofill_profile.cc
index 49176d3..86d3e4c 100644
--- a/components/autofill/core/browser/autofill_profile.cc
+++ b/components/autofill/core/browser/autofill_profile.cc
@@ -7,6 +7,7 @@
 #include <algorithm>
 #include <functional>
 #include <map>
+#include <memory>
 #include <ostream>
 #include <set>
 
@@ -321,7 +322,7 @@
 base::string16 AutofillProfile::GetInfo(const AutofillType& type,
                                         const std::string& app_locale) const {
   if (type.html_type() == HTML_TYPE_FULL_ADDRESS) {
-    scoped_ptr<AddressData> address_data =
+    std::unique_ptr<AddressData> address_data =
         i18n::CreateAddressDataFromAutofillProfile(*this, app_locale);
     if (!addressinput::HasAllRequiredFields(*address_data))
       return base::string16();
@@ -445,7 +446,7 @@
     const AutofillProfile& profile,
     const std::string& app_locale,
     const ServerFieldTypeSet& types) const {
-  scoped_ptr<l10n::CaseInsensitiveCompare> compare;
+  std::unique_ptr<l10n::CaseInsensitiveCompare> compare;
 
   for (ServerFieldType type : types) {
     base::string16 value = GetRawInfo(type);
@@ -869,7 +870,7 @@
     --num_fields_to_use;
   }
 
-  scoped_ptr<AddressData> address_data =
+  std::unique_ptr<AddressData> address_data =
       i18n::CreateAddressDataFromAutofillProfile(trimmed_profile, app_locale);
   std::string address_line;
   ::i18n::addressinput::GetFormattedNationalAddressLine(
diff --git a/components/autofill/core/browser/autofill_profile_unittest.cc b/components/autofill/core/browser/autofill_profile_unittest.cc
index 0dbd93a..20086169 100644
--- a/components/autofill/core/browser/autofill_profile_unittest.cc
+++ b/components/autofill/core/browser/autofill_profile_unittest.cc
@@ -2,18 +2,20 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "components/autofill/core/browser/autofill_profile.h"
+
 #include <stddef.h>
 
+#include <memory>
+
 #include "base/format_macros.h"
 #include "base/guid.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/scoped_vector.h"
 #include "base/stl_util.h"
 #include "base/strings/string16.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
-#include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
 #include "components/autofill/core/browser/autofill_type.h"
 #include "components/autofill/core/browser/field_types.h"
@@ -805,7 +807,7 @@
 }
 
 TEST(AutofillProfileTest, IsSubsetOf) {
-  scoped_ptr<AutofillProfile> a, b;
+  std::unique_ptr<AutofillProfile> a, b;
 
   // |a| is a subset of |b|.
   a.reset(
diff --git a/components/autofill/core/browser/autofill_save_card_infobar_delegate_mobile.cc b/components/autofill/core/browser/autofill_save_card_infobar_delegate_mobile.cc
index 9c93cfe4..471e0d2f 100644
--- a/components/autofill/core/browser/autofill_save_card_infobar_delegate_mobile.cc
+++ b/components/autofill/core/browser/autofill_save_card_infobar_delegate_mobile.cc
@@ -25,7 +25,7 @@
 AutofillSaveCardInfoBarDelegateMobile::AutofillSaveCardInfoBarDelegateMobile(
     bool upload,
     const CreditCard& card,
-    scoped_ptr<base::DictionaryValue> legal_message,
+    std::unique_ptr<base::DictionaryValue> legal_message,
     const base::Closure& save_card_callback)
     : ConfirmInfoBarDelegate(),
       upload_(upload),
diff --git a/components/autofill/core/browser/autofill_save_card_infobar_delegate_mobile.h b/components/autofill/core/browser/autofill_save_card_infobar_delegate_mobile.h
index 3f1aeaaf..d507696 100644
--- a/components/autofill/core/browser/autofill_save_card_infobar_delegate_mobile.h
+++ b/components/autofill/core/browser/autofill_save_card_infobar_delegate_mobile.h
@@ -5,9 +5,10 @@
 #ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_SAVE_CARD_INFOBAR_DELEGATE_MOBILE_H_
 #define COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_SAVE_CARD_INFOBAR_DELEGATE_MOBILE_H_
 
+#include <memory>
+
 #include "base/callback.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/strings/string16.h"
 #include "components/autofill/core/browser/autofill_metrics.h"
 #include "components/autofill/core/browser/legal_message_line.h"
@@ -28,7 +29,7 @@
   AutofillSaveCardInfoBarDelegateMobile(
       bool upload,
       const CreditCard& card,
-      scoped_ptr<base::DictionaryValue> legal_message,
+      std::unique_ptr<base::DictionaryValue> legal_message,
       const base::Closure& save_card_callback);
 
   ~AutofillSaveCardInfoBarDelegateMobile() override;
diff --git a/components/autofill/core/browser/autofill_save_card_infobar_mobile.h b/components/autofill/core/browser/autofill_save_card_infobar_mobile.h
index 494d4796..995bc7d 100644
--- a/components/autofill/core/browser/autofill_save_card_infobar_mobile.h
+++ b/components/autofill/core/browser/autofill_save_card_infobar_mobile.h
@@ -5,7 +5,7 @@
 #ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_SAVE_CARD_INFOBAR_MOBILE_H_
 #define COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_SAVE_CARD_INFOBAR_MOBILE_H_
 
-#include "base/memory/scoped_ptr.h"
+#include <memory>
 
 namespace infobars {
 class InfoBar;
@@ -16,8 +16,8 @@
 class AutofillSaveCardInfoBarDelegateMobile;
 
 // Creates an infobar for saving a credit card on a mobile device.
-scoped_ptr<infobars::InfoBar> CreateSaveCardInfoBarMobile(
-    scoped_ptr<AutofillSaveCardInfoBarDelegateMobile> delegate);
+std::unique_ptr<infobars::InfoBar> CreateSaveCardInfoBarMobile(
+    std::unique_ptr<AutofillSaveCardInfoBarDelegateMobile> delegate);
 
 }  // namespace autofill
 
diff --git a/components/autofill/core/browser/autofill_test_utils.cc b/components/autofill/core/browser/autofill_test_utils.cc
index 621baa7..c9d5c33 100644
--- a/components/autofill/core/browser/autofill_test_utils.cc
+++ b/components/autofill/core/browser/autofill_test_utils.cc
@@ -37,7 +37,7 @@
 
 }  // namespace
 
-scoped_ptr<PrefService> PrefServiceForTesting() {
+std::unique_ptr<PrefService> PrefServiceForTesting() {
   scoped_refptr<user_prefs::PrefRegistrySyncable> registry(
       new user_prefs::PrefRegistrySyncable());
   AutofillManager::RegisterProfilePrefs(registry.get());
diff --git a/components/autofill/core/browser/autofill_test_utils.h b/components/autofill/core/browser/autofill_test_utils.h
index 0d84734..2f153b5 100644
--- a/components/autofill/core/browser/autofill_test_utils.h
+++ b/components/autofill/core/browser/autofill_test_utils.h
@@ -5,9 +5,9 @@
 #ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_TEST_UTILS_H_
 #define COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_TEST_UTILS_H_
 
+#include <memory>
 #include <vector>
 
-#include "base/memory/scoped_ptr.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/proto/server.pb.h"
 
@@ -29,7 +29,7 @@
 // manually (e.g., in unit tests within Autofill core code). The returned
 // PrefService has had Autofill preferences registered on its associated
 // registry.
-scoped_ptr<PrefService> PrefServiceForTesting();
+std::unique_ptr<PrefService> PrefServiceForTesting();
 
 // Provides a quick way to populate a FormField with c-strings.
 void CreateTestFormField(const char* label,
diff --git a/components/autofill/core/browser/autofill_xml_parser_unittest.cc b/components/autofill/core/browser/autofill_xml_parser_unittest.cc
index 40e9527..cfa4290 100644
--- a/components/autofill/core/browser/autofill_xml_parser_unittest.cc
+++ b/components/autofill/core/browser/autofill_xml_parser_unittest.cc
@@ -2,14 +2,15 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "components/autofill/core/browser/autofill_xml_parser.h"
+
+#include <memory>
 #include <string>
 #include <utility>
 #include <vector>
 
-#include "base/memory/scoped_ptr.h"
 #include "base/strings/string_number_conversions.h"
 #include "components/autofill/core/browser/autofill_server_field_info.h"
-#include "components/autofill/core/browser/autofill_xml_parser.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
diff --git a/components/autofill/core/browser/country_names.cc b/components/autofill/core/browser/country_names.cc
index 7a47d1f..bbf1fb6c 100644
--- a/components/autofill/core/browser/country_names.cc
+++ b/components/autofill/core/browser/country_names.cc
@@ -6,9 +6,10 @@
 
 #include <stdint.h>
 
+#include <memory>
+
 #include "base/lazy_instance.h"
 #include "base/logging.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/singleton.h"
 #include "base/stl_util.h"
 #include "base/strings/string_util.h"
@@ -32,7 +33,7 @@
 // the |buffer| is resized.
 const std::string GetSortKey(const icu::Collator& collator,
                              const base::string16& str,
-                             scoped_ptr<uint8_t[]>* buffer,
+                             std::unique_ptr<uint8_t[]>* buffer,
                              int32_t* buffer_size) {
   DCHECK(buffer);
   DCHECK(buffer_size);
@@ -80,8 +81,8 @@
 }
 
 // Creates collator for |locale| and sets its attributes as needed.
-scoped_ptr<icu::Collator> CreateCollator(const icu::Locale& locale) {
-  scoped_ptr<icu::Collator> collator(
+std::unique_ptr<icu::Collator> CreateCollator(const icu::Locale& locale) {
+  std::unique_ptr<icu::Collator> collator(
       autofill::l10n::GetCollatorForLocale(locale));
   if (!collator)
     return nullptr;
@@ -97,7 +98,8 @@
 
 // If |locale| is different from "en_US", returns a collator for "en_US" and
 // sets its attributes as appropriate. Otherwise returns null.
-scoped_ptr<icu::Collator> CreateDefaultCollator(const icu::Locale& locale) {
+std::unique_ptr<icu::Collator> CreateDefaultCollator(
+    const icu::Locale& locale) {
   icu::Locale default_locale("en_US");
 
   if (default_locale != locale)
@@ -119,7 +121,7 @@
 
   std::map<std::string, std::string> localized_names;
   int32_t buffer_size = 1000;
-  scoped_ptr<uint8_t[]> buffer(new uint8_t[buffer_size]);
+  std::unique_ptr<uint8_t[]> buffer(new uint8_t[buffer_size]);
 
   for (const std::string& country_code :
        CountryDataMap::GetInstance()->country_codes()) {
@@ -198,7 +200,7 @@
   // source string length.
   // [1] http://userguide.icu-project.org/collation/api#TOC-Examples
   int32_t buffer_size = country_name.size() * 4;
-  scoped_ptr<uint8_t[]> buffer(new uint8_t[buffer_size]);
+  std::unique_ptr<uint8_t[]> buffer(new uint8_t[buffer_size]);
   std::string sort_key =
       GetSortKey(collator, country_name, &buffer, &buffer_size);
 
diff --git a/components/autofill/core/browser/country_names.h b/components/autofill/core/browser/country_names.h
index c54f8f93..ea36b61 100644
--- a/components/autofill/core/browser/country_names.h
+++ b/components/autofill/core/browser/country_names.h
@@ -6,11 +6,11 @@
 #define COMPONENTS_AUTOFILL_CORE_BROWSER_COUNTRY_NAMES_H_
 
 #include <map>
+#include <memory>
 #include <string>
 #include <vector>
 
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/strings/string16.h"
 #include "third_party/icu/source/common/unicode/locid.h"
 #include "third_party/icu/source/i18n/unicode/coll.h"
@@ -68,11 +68,11 @@
   const icu::Locale locale_;
 
   // Collator for the application locale.
-  const scoped_ptr<icu::Collator> collator_;
+  const std::unique_ptr<icu::Collator> collator_;
 
   // Collator for the "en_US" locale, if different from the application
   // locale, null otherwise.
-  const scoped_ptr<icu::Collator> default_collator_;
+  const std::unique_ptr<icu::Collator> default_collator_;
 
   // Maps from common country names, including 2- and 3-letter country codes,
   // to the corresponding 2-letter country codes. The keys are uppercase ASCII
diff --git a/components/autofill/core/browser/credit_card_field.cc b/components/autofill/core/browser/credit_card_field.cc
index c492c0a..dc4145a 100644
--- a/components/autofill/core/browser/credit_card_field.cc
+++ b/components/autofill/core/browser/credit_card_field.cc
@@ -5,9 +5,10 @@
 #include "components/autofill/core/browser/credit_card_field.h"
 
 #include <stddef.h>
+
+#include <memory>
 #include <utility>
 
-#include "base/memory/scoped_ptr.h"
 #include "base/stl_util.h"
 #include "base/strings/string16.h"
 #include "base/strings/string_number_conversions.h"
@@ -75,11 +76,11 @@
 }  // namespace
 
 // static
-scoped_ptr<FormField> CreditCardField::Parse(AutofillScanner* scanner) {
+std::unique_ptr<FormField> CreditCardField::Parse(AutofillScanner* scanner) {
   if (scanner->IsEnd())
     return nullptr;
 
-  scoped_ptr<CreditCardField> credit_card_field(new CreditCardField);
+  std::unique_ptr<CreditCardField> credit_card_field(new CreditCardField);
   size_t saved_cursor = scanner->SaveCursor();
 
   // Credit card fields can appear in many different orders.
diff --git a/components/autofill/core/browser/credit_card_field.h b/components/autofill/core/browser/credit_card_field.h
index 344fac8..a737add0 100644
--- a/components/autofill/core/browser/credit_card_field.h
+++ b/components/autofill/core/browser/credit_card_field.h
@@ -5,11 +5,11 @@
 #ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_CREDIT_CARD_FIELD_H_
 #define COMPONENTS_AUTOFILL_CORE_BROWSER_CREDIT_CARD_FIELD_H_
 
+#include <memory>
 #include <vector>
 
 #include "base/compiler_specific.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/autofill/core/browser/autofill_type.h"
 #include "components/autofill/core/browser/form_field.h"
 
@@ -21,7 +21,7 @@
 class CreditCardField : public FormField {
  public:
   ~CreditCardField() override;
-  static scoped_ptr<FormField> Parse(AutofillScanner* scanner);
+  static std::unique_ptr<FormField> Parse(AutofillScanner* scanner);
 
  protected:
   void AddClassifications(FieldCandidatesMap* field_candidates) const override;
diff --git a/components/autofill/core/browser/credit_card_field_unittest.cc b/components/autofill/core/browser/credit_card_field_unittest.cc
index 8b4b838..609ff17 100644
--- a/components/autofill/core/browser/credit_card_field_unittest.cc
+++ b/components/autofill/core/browser/credit_card_field_unittest.cc
@@ -2,13 +2,16 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "components/autofill/core/browser/credit_card_field.h"
+
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
+#include "base/memory/ptr_util.h"
 #include "base/memory/scoped_vector.h"
 #include "base/strings/utf_string_conversions.h"
 #include "components/autofill/core/browser/autofill_field.h"
 #include "components/autofill/core/browser/autofill_scanner.h"
-#include "components/autofill/core/browser/credit_card_field.h"
 #include "components/autofill/core/common/form_field_data.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -23,24 +26,24 @@
 
  protected:
   ScopedVector<AutofillField> list_;
-  scoped_ptr<const CreditCardField> field_;
+  std::unique_ptr<const CreditCardField> field_;
   FieldCandidatesMap field_candidates_map_;
 
   // Parses the contents of |list_| as a form, and stores the result into
   // |field_|.
   void Parse() {
     AutofillScanner scanner(list_.get());
-    scoped_ptr<FormField> field = CreditCardField::Parse(&scanner);
-    field_ = make_scoped_ptr(static_cast<CreditCardField*>(field.release()));
+    std::unique_ptr<FormField> field = CreditCardField::Parse(&scanner);
+    field_ = base::WrapUnique(static_cast<CreditCardField*>(field.release()));
   }
 
   void MultipleParses() {
-    scoped_ptr<FormField> field;
+    std::unique_ptr<FormField> field;
 
     AutofillScanner scanner(list_.get());
     while (!scanner.IsEnd()) {
       field = CreditCardField::Parse(&scanner);
-      field_ = make_scoped_ptr(static_cast<CreditCardField*>(field.release()));
+      field_ = base::WrapUnique(static_cast<CreditCardField*>(field.release()));
       if (field_ == nullptr) {
         scanner.Advance();
       } else {
diff --git a/components/autofill/core/browser/crypto/rc4_decryptor.h b/components/autofill/core/browser/crypto/rc4_decryptor.h
index 3d24bca8..4598274 100644
--- a/components/autofill/core/browser/crypto/rc4_decryptor.h
+++ b/components/autofill/core/browser/crypto/rc4_decryptor.h
@@ -8,8 +8,8 @@
 #include <stdint.h>
 #include <string.h>
 
+#include <memory>
 #include <string>
-#include "base/memory/scoped_ptr.h"
 
 namespace autofill {
 
@@ -38,7 +38,7 @@
   std::wstring Run(const std::wstring& data) {
     int data_size = data.length() * sizeof(wchar_t);
 
-    scoped_ptr<wchar_t[]> buffer(new wchar_t[data.length() + 1]);
+    std::unique_ptr<wchar_t[]> buffer(new wchar_t[data.length() + 1]);
     memset(buffer.get(), 0, (data.length() + 1) * sizeof(wchar_t));
     memcpy(buffer.get(), data.c_str(), data_size);
 
diff --git a/components/autofill/core/browser/email_field.cc b/components/autofill/core/browser/email_field.cc
index d0830c4..a6b14bd 100644
--- a/components/autofill/core/browser/email_field.cc
+++ b/components/autofill/core/browser/email_field.cc
@@ -4,6 +4,7 @@
 
 #include "components/autofill/core/browser/email_field.h"
 
+#include "base/memory/ptr_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "components/autofill/core/browser/autofill_regex_constants.h"
 #include "components/autofill/core/browser/autofill_scanner.h"
@@ -11,11 +12,11 @@
 namespace autofill {
 
 // static
-scoped_ptr<FormField> EmailField::Parse(AutofillScanner* scanner) {
+std::unique_ptr<FormField> EmailField::Parse(AutofillScanner* scanner) {
   AutofillField* field;
   if (ParseFieldSpecifics(scanner, base::UTF8ToUTF16(kEmailRe),
                           MATCH_DEFAULT | MATCH_EMAIL, &field)) {
-    return make_scoped_ptr(new EmailField(field));
+    return base::WrapUnique(new EmailField(field));
   }
 
   return NULL;
diff --git a/components/autofill/core/browser/email_field.h b/components/autofill/core/browser/email_field.h
index f4a2cc4d..c47eb44 100644
--- a/components/autofill/core/browser/email_field.h
+++ b/components/autofill/core/browser/email_field.h
@@ -5,16 +5,17 @@
 #ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_EMAIL_FIELD_H_
 #define COMPONENTS_AUTOFILL_CORE_BROWSER_EMAIL_FIELD_H_
 
+#include <memory>
+
 #include "base/compiler_specific.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/autofill/core/browser/form_field.h"
 
 namespace autofill {
 
 class EmailField : public FormField {
  public:
-  static scoped_ptr<FormField> Parse(AutofillScanner* scanner);
+  static std::unique_ptr<FormField> Parse(AutofillScanner* scanner);
 
  protected:
   void AddClassifications(FieldCandidatesMap* field_candidates) const override;
diff --git a/components/autofill/core/browser/form_field.cc b/components/autofill/core/browser/form_field.cc
index 84caf06..b7646c8 100644
--- a/components/autofill/core/browser/form_field.cc
+++ b/components/autofill/core/browser/form_field.cc
@@ -7,11 +7,11 @@
 #include <algorithm>
 #include <cstddef>
 #include <iterator>
+#include <memory>
 #include <string>
 #include <utility>
 
 #include "base/logging.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
@@ -174,7 +174,7 @@
                                     FieldCandidatesMap* field_candidates) {
   AutofillScanner scanner(fields);
   while (!scanner.IsEnd()) {
-    scoped_ptr<FormField> form_field(parse(&scanner));
+    std::unique_ptr<FormField> form_field(parse(&scanner));
     if (form_field == nullptr) {
       scanner.Advance();
     } else {
diff --git a/components/autofill/core/browser/form_field.h b/components/autofill/core/browser/form_field.h
index d3a127a..2d7dcd7 100644
--- a/components/autofill/core/browser/form_field.h
+++ b/components/autofill/core/browser/form_field.h
@@ -5,11 +5,11 @@
 #ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_FORM_FIELD_H_
 #define COMPONENTS_AUTOFILL_CORE_BROWSER_FORM_FIELD_H_
 
+#include <memory>
 #include <vector>
 
 #include "base/gtest_prod_util.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/strings/string16.h"
 #include "components/autofill/core/browser/field_candidates.h"
 #include "components/autofill/core/browser/field_types.h"
@@ -109,7 +109,7 @@
 
   // Function pointer type for the parsing function that should be passed to the
   // ParseFormFieldsPass() helper function.
-  typedef scoped_ptr<FormField> ParseFunction(AutofillScanner* scanner);
+  typedef std::unique_ptr<FormField> ParseFunction(AutofillScanner* scanner);
 
   // Matches |pattern| to the contents of the field at the head of the
   // |scanner|.
diff --git a/components/autofill/core/browser/form_structure.cc b/components/autofill/core/browser/form_structure.cc
index c5774de5..fe9c560 100644
--- a/components/autofill/core/browser/form_structure.cc
+++ b/components/autofill/core/browser/form_structure.cc
@@ -13,7 +13,6 @@
 #include "base/command_line.h"
 #include "base/i18n/case_conversion.h"
 #include "base/logging.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/metrics/field_trial.h"
 #include "base/sha1.h"
 #include "base/strings/string_number_conversions.h"
diff --git a/components/autofill/core/browser/form_structure.h b/components/autofill/core/browser/form_structure.h
index 4309d1252..6a76db3 100644
--- a/components/autofill/core/browser/form_structure.h
+++ b/components/autofill/core/browser/form_structure.h
@@ -14,7 +14,6 @@
 #include "base/callback.h"
 #include "base/gtest_prod_util.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/scoped_vector.h"
 #include "base/strings/string16.h"
 #include "base/strings/string_piece.h"
diff --git a/components/autofill/core/browser/form_structure_unittest.cc b/components/autofill/core/browser/form_structure_unittest.cc
index 0e866d2..74a4e226 100644
--- a/components/autofill/core/browser/form_structure_unittest.cc
+++ b/components/autofill/core/browser/form_structure_unittest.cc
@@ -6,8 +6,9 @@
 
 #include <stddef.h>
 
+#include <memory>
+
 #include "base/command_line.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/metrics/field_trial.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
@@ -72,12 +73,12 @@
     field_trial_->group();
   }
 
-  scoped_ptr<base::FieldTrialList> field_trial_list_;
+  std::unique_ptr<base::FieldTrialList> field_trial_list_;
   scoped_refptr<base::FieldTrial> field_trial_;
 };
 
 TEST_F(FormStructureTest, FieldCount) {
-  scoped_ptr<FormStructure> form_structure;
+  std::unique_ptr<FormStructure> form_structure;
   FormData form;
 
   FormFieldData field;
@@ -109,7 +110,7 @@
 }
 
 TEST_F(FormStructureTest, AutofillCount) {
-  scoped_ptr<FormStructure> form_structure;
+  std::unique_ptr<FormStructure> form_structure;
   FormData form;
 
   FormFieldData field;
@@ -170,7 +171,7 @@
 }
 
 TEST_F(FormStructureTest, IsAutofillable) {
-  scoped_ptr<FormStructure> form_structure;
+  std::unique_ptr<FormStructure> form_structure;
   FormData form;
 
   // We need at least three text fields to be auto-fillable.
@@ -234,7 +235,7 @@
 }
 
 TEST_F(FormStructureTest, ShouldBeParsed) {
-  scoped_ptr<FormStructure> form_structure;
+  std::unique_ptr<FormStructure> form_structure;
   FormData form;
 
   // We need at least three text fields to be parseable.
@@ -335,7 +336,7 @@
 // Tests that ShouldBeParsed returns true for a form containing less than three
 // fields if at least one has an autocomplete attribute.
 TEST_F(FormStructureTest, ShouldBeParsed_TwoFields_HasAutocomplete) {
-  scoped_ptr<FormStructure> form_structure;
+  std::unique_ptr<FormStructure> form_structure;
   FormData form;
   FormFieldData field;
 
@@ -357,7 +358,7 @@
 }
 
 TEST_F(FormStructureTest, HeuristicsContactInfo) {
-  scoped_ptr<FormStructure> form_structure;
+  std::unique_ptr<FormStructure> form_structure;
   FormData form;
 
   FormFieldData field;
@@ -431,7 +432,7 @@
 
 // Verify that we can correctly process the |autocomplete| attribute.
 TEST_F(FormStructureTest, HeuristicsAutocompleteAttribute) {
-  scoped_ptr<FormStructure> form_structure;
+  std::unique_ptr<FormStructure> form_structure;
   FormData form;
 
   FormFieldData field;
@@ -470,7 +471,7 @@
 
 // Verify that the heuristics are not run for non checkout formless forms.
 TEST_F(FormStructureTest, Heuristics_FormlessNonCheckoutForm) {
-  scoped_ptr<FormStructure> form_structure;
+  std::unique_ptr<FormStructure> form_structure;
   FormData form;
 
   FormFieldData field;
@@ -548,7 +549,7 @@
   field.form_control_type = "submit";
   form.fields.push_back(field);
 
-  scoped_ptr<FormStructure> form_structure(new FormStructure(form));
+  std::unique_ptr<FormStructure> form_structure(new FormStructure(form));
   form_structure->DetermineHeuristicTypes();
   EXPECT_TRUE(form_structure->IsAutofillable());
 
@@ -588,7 +589,7 @@
   field.name = ASCIIToUTF16("address3");
   form.fields.push_back(field);
 
-  scoped_ptr<FormStructure> form_structure(new FormStructure(form));
+  std::unique_ptr<FormStructure> form_structure(new FormStructure(form));
   form_structure->DetermineHeuristicTypes();
   EXPECT_TRUE(form_structure->IsAutofillable());
 
@@ -607,7 +608,7 @@
 // Verify that we can correctly process the 'autocomplete' attribute for phone
 // number types (especially phone prefixes and suffixes).
 TEST_F(FormStructureTest, HeuristicsAutocompleteAttributePhoneTypes) {
-  scoped_ptr<FormStructure> form_structure;
+  std::unique_ptr<FormStructure> form_structure;
   FormData form;
 
   FormFieldData field;
@@ -650,7 +651,7 @@
 // fillable fields.
 TEST_F(FormStructureTest,
        HeuristicsAndServerPredictions_BigForm_NoAutocompleteAttribute) {
-  scoped_ptr<FormStructure> form_structure;
+  std::unique_ptr<FormStructure> form_structure;
   FormData form;
 
   FormFieldData field;
@@ -685,7 +686,7 @@
 // attribute is present in the form (if it has more that two fillable fields).
 TEST_F(FormStructureTest,
        HeuristicsAndServerPredictions_ValidAutocompleteAttribute) {
-  scoped_ptr<FormStructure> form_structure;
+  std::unique_ptr<FormStructure> form_structure;
   FormData form;
 
   FormFieldData field;
@@ -724,7 +725,7 @@
 // fillable fields).
 TEST_F(FormStructureTest,
        HeuristicsAndServerPredictions_UnrecognizedAutocompleteAttribute) {
-  scoped_ptr<FormStructure> form_structure;
+  std::unique_ptr<FormStructure> form_structure;
   FormData form;
 
   FormFieldData field;
@@ -767,7 +768,7 @@
 // than 3 fields.
 TEST_F(FormStructureTest,
        HeuristicsAndServerPredictions_SmallForm_NoAutocompleteAttribute) {
-  scoped_ptr<FormStructure> form_structure;
+  std::unique_ptr<FormStructure> form_structure;
   FormData form;
 
   FormFieldData field;
@@ -799,7 +800,7 @@
 // than 3 fields, even if an autocomplete attribute is specified.
 TEST_F(FormStructureTest,
        HeuristicsAndServerPredictions_SmallForm_ValidAutocompleteAttribute) {
-  scoped_ptr<FormStructure> form_structure;
+  std::unique_ptr<FormStructure> form_structure;
   FormData form;
 
   FormFieldData field;
@@ -1038,7 +1039,7 @@
 }
 
 TEST_F(FormStructureTest, HeuristicsSample8) {
-  scoped_ptr<FormStructure> form_structure;
+  std::unique_ptr<FormStructure> form_structure;
   FormData form;
 
   FormFieldData field;
@@ -1115,7 +1116,7 @@
 }
 
 TEST_F(FormStructureTest, HeuristicsSample6) {
-  scoped_ptr<FormStructure> form_structure;
+  std::unique_ptr<FormStructure> form_structure;
   FormData form;
 
   FormFieldData field;
@@ -1177,7 +1178,7 @@
 // for matching.  This works because FormFieldData labels are matched in the
 // case that input element ids (or |name| fields) are missing.
 TEST_F(FormStructureTest, HeuristicsLabelsOnly) {
-  scoped_ptr<FormStructure> form_structure;
+  std::unique_ptr<FormStructure> form_structure;
   FormData form;
 
   FormFieldData field;
@@ -1242,7 +1243,7 @@
 }
 
 TEST_F(FormStructureTest, HeuristicsCreditCardInfo) {
-  scoped_ptr<FormStructure> form_structure;
+  std::unique_ptr<FormStructure> form_structure;
   FormData form;
 
   FormFieldData field;
@@ -1296,7 +1297,7 @@
 }
 
 TEST_F(FormStructureTest, HeuristicsCreditCardInfoWithUnknownCardField) {
-  scoped_ptr<FormStructure> form_structure;
+  std::unique_ptr<FormStructure> form_structure;
   FormData form;
 
   FormFieldData field;
@@ -1358,7 +1359,7 @@
 }
 
 TEST_F(FormStructureTest, ThreeAddressLines) {
-  scoped_ptr<FormStructure> form_structure;
+  std::unique_ptr<FormStructure> form_structure;
   FormData form;
 
   FormFieldData field;
@@ -1398,7 +1399,7 @@
 
 // Numbered address lines after line two are ignored.
 TEST_F(FormStructureTest, SurplusAddressLinesIgnored) {
-  scoped_ptr<FormStructure> form_structure;
+  std::unique_ptr<FormStructure> form_structure;
   FormData form;
 
   FormFieldData field;
@@ -1441,7 +1442,7 @@
 // "Street address second line" we interpret as address line 3.
 // See http://crbug.com/48197 for details.
 TEST_F(FormStructureTest, ThreeAddressLinesExpedia) {
-  scoped_ptr<FormStructure> form_structure;
+  std::unique_ptr<FormStructure> form_structure;
   FormData form;
 
   FormFieldData field;
@@ -1483,7 +1484,7 @@
 // and the name "address2" clearly indicates that this is the address line 2.
 // See http://crbug.com/48197 for details.
 TEST_F(FormStructureTest, TwoAddressLinesEbay) {
-  scoped_ptr<FormStructure> form_structure;
+  std::unique_ptr<FormStructure> form_structure;
   FormData form;
 
   FormFieldData field;
@@ -1516,7 +1517,7 @@
 }
 
 TEST_F(FormStructureTest, HeuristicsStateWithProvince) {
-  scoped_ptr<FormStructure> form_structure;
+  std::unique_ptr<FormStructure> form_structure;
   FormData form;
 
   FormFieldData field;
@@ -1550,7 +1551,7 @@
 
 // This example comes from lego.com's checkout page.
 TEST_F(FormStructureTest, HeuristicsWithBilling) {
-  scoped_ptr<FormStructure> form_structure;
+  std::unique_ptr<FormStructure> form_structure;
   FormData form;
 
   FormFieldData field;
@@ -1621,7 +1622,7 @@
 }
 
 TEST_F(FormStructureTest, ThreePartPhoneNumber) {
-  scoped_ptr<FormStructure> form_structure;
+  std::unique_ptr<FormStructure> form_structure;
   FormData form;
 
   FormFieldData field;
@@ -1668,7 +1669,7 @@
 }
 
 TEST_F(FormStructureTest, HeuristicsInfernoCC) {
-  scoped_ptr<FormStructure> form_structure;
+  std::unique_ptr<FormStructure> form_structure;
   FormData form;
 
   FormFieldData field;
@@ -1718,7 +1719,7 @@
 // Tests that the heuristics detect split credit card names if they appear in
 // the middle of the form.
 TEST_F(FormStructureTest, HeuristicsInferCCNames_NamesNotFirst) {
-  scoped_ptr<FormStructure> form_structure;
+  std::unique_ptr<FormStructure> form_structure;
   FormData form;
 
   FormFieldData field;
@@ -1776,7 +1777,7 @@
 // the beginning of the form. The first name has to contains some credit card
 // keyword.
 TEST_F(FormStructureTest, HeuristicsInferCCNames_NamesFirst) {
-  scoped_ptr<FormStructure> form_structure;
+  std::unique_ptr<FormStructure> form_structure;
   FormData form;
 
   FormFieldData field;
@@ -1982,7 +1983,7 @@
 }
 
 TEST_F(FormStructureTest, EncodeUploadRequest) {
-  scoped_ptr<FormStructure> form_structure;
+  std::unique_ptr<FormStructure> form_structure;
   std::vector<ServerFieldTypeSet> possible_field_types;
   FormData form;
   form_structure.reset(new FormStructure(form));
@@ -2158,7 +2159,7 @@
 
 TEST_F(FormStructureTest,
        EncodeUploadRequestWithAdditionalPasswordFormSignature) {
-  scoped_ptr<FormStructure> form_structure;
+  std::unique_ptr<FormStructure> form_structure;
   std::vector<ServerFieldTypeSet> possible_field_types;
   FormData form;
   form_structure.reset(new FormStructure(form));
@@ -2257,7 +2258,7 @@
 }
 
 TEST_F(FormStructureTest, EncodeUploadRequest_WithAutocomplete) {
-  scoped_ptr<FormStructure> form_structure;
+  std::unique_ptr<FormStructure> form_structure;
   std::vector<ServerFieldTypeSet> possible_field_types;
   FormData form;
   form_structure.reset(new FormStructure(form));
@@ -2328,7 +2329,7 @@
 }
 
 TEST_F(FormStructureTest, EncodeUploadRequest_ObservedSubmissionFalse) {
-  scoped_ptr<FormStructure> form_structure;
+  std::unique_ptr<FormStructure> form_structure;
   std::vector<ServerFieldTypeSet> possible_field_types;
   FormData form;
   form_structure.reset(new FormStructure(form));
@@ -2397,7 +2398,7 @@
 }
 
 TEST_F(FormStructureTest, EncodeUploadRequest_WithLabels) {
-  scoped_ptr<FormStructure> form_structure;
+  std::unique_ptr<FormStructure> form_structure;
   std::vector<ServerFieldTypeSet> possible_field_types;
   FormData form;
   form_structure.reset(new FormStructure(form));
@@ -2462,7 +2463,7 @@
 
 // Test that the form name is sent in the upload request.
 TEST_F(FormStructureTest, EncodeUploadRequest_WithFormName) {
-  scoped_ptr<FormStructure> form_structure;
+  std::unique_ptr<FormStructure> form_structure;
   std::vector<ServerFieldTypeSet> possible_field_types;
   FormData form;
   // Setting the form name which we expect to see in the upload.
@@ -2526,7 +2527,7 @@
 }
 
 TEST_F(FormStructureTest, EncodeUploadRequestPartialMetadata) {
-  scoped_ptr<FormStructure> form_structure;
+  std::unique_ptr<FormStructure> form_structure;
   std::vector<ServerFieldTypeSet> possible_field_types;
   FormData form;
   form_structure.reset(new FormStructure(form));
@@ -2599,7 +2600,7 @@
 TEST_F(FormStructureTest, EncodeUploadRequest_DisabledMetadataTrial) {
   DisableAutofillMetadataFieldTrial();
 
-  scoped_ptr<FormStructure> form_structure;
+  std::unique_ptr<FormStructure> form_structure;
   std::vector<ServerFieldTypeSet> possible_field_types;
   FormData form;
   form_structure.reset(new FormStructure(form));
@@ -2932,7 +2933,7 @@
   available_field_types.insert(COMPANY_NAME);
 
   // Check that multiple types for the field are processed correctly.
-  scoped_ptr<FormStructure> form_structure;
+  std::unique_ptr<FormStructure> form_structure;
   std::vector<ServerFieldTypeSet> possible_field_types;
   FormData form;
 
@@ -3058,7 +3059,7 @@
 
 TEST_F(FormStructureTest, CheckFormSignature) {
   // Check that form signature is created correctly.
-  scoped_ptr<FormStructure> form_structure;
+  std::unique_ptr<FormStructure> form_structure;
   FormData form;
 
   FormFieldData field;
diff --git a/components/autofill/core/browser/legal_message_line.h b/components/autofill/core/browser/legal_message_line.h
index 550831e..681173c 100644
--- a/components/autofill/core/browser/legal_message_line.h
+++ b/components/autofill/core/browser/legal_message_line.h
@@ -10,7 +10,6 @@
 
 #include "base/gtest_prod_util.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/strings/string16.h"
 #include "ui/gfx/range/range.h"
 #include "url/gurl.h"
diff --git a/components/autofill/core/browser/legal_message_line_unittest.cc b/components/autofill/core/browser/legal_message_line_unittest.cc
index 313acd3..a65bc3dc 100644
--- a/components/autofill/core/browser/legal_message_line_unittest.cc
+++ b/components/autofill/core/browser/legal_message_line_unittest.cc
@@ -4,11 +4,11 @@
 
 #include "components/autofill/core/browser/legal_message_line.h"
 
+#include <memory>
 #include <string>
 #include <utility>
 
 #include "base/json/json_reader.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/values.h"
 #include "testing/gmock/include/gmock/gmock.h"
@@ -102,7 +102,7 @@
 
 // Verifies that legal message parsing is correct.
 TEST_P(LegalMessageLineTest, Parsing) {
-  scoped_ptr<base::Value> value(
+  std::unique_ptr<base::Value> value(
       base::JSONReader::Read(GetParam().message_json));
   ASSERT_TRUE(value);
   base::DictionaryValue* dictionary = nullptr;
diff --git a/components/autofill/core/browser/name_field.cc b/components/autofill/core/browser/name_field.cc
index 3028812..25a9d47b0 100644
--- a/components/autofill/core/browser/name_field.cc
+++ b/components/autofill/core/browser/name_field.cc
@@ -4,8 +4,10 @@
 
 #include "components/autofill/core/browser/name_field.h"
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
+#include "base/memory/ptr_util.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "components/autofill/core/browser/autofill_regex_constants.h"
@@ -20,7 +22,7 @@
 // A form field that can parse a full name field.
 class FullNameField : public NameField {
  public:
-  static scoped_ptr<FullNameField> Parse(AutofillScanner* scanner);
+  static std::unique_ptr<FullNameField> Parse(AutofillScanner* scanner);
 
  protected:
   void AddClassifications(FieldCandidatesMap* field_candidates) const override;
@@ -36,11 +38,11 @@
 // A form field that can parse a first and last name field.
 class FirstLastNameField : public NameField {
  public:
-  static scoped_ptr<FirstLastNameField> ParseSpecificName(
+  static std::unique_ptr<FirstLastNameField> ParseSpecificName(
       AutofillScanner* scanner);
-  static scoped_ptr<FirstLastNameField> ParseComponentNames(
+  static std::unique_ptr<FirstLastNameField> ParseComponentNames(
       AutofillScanner* scanner);
-  static scoped_ptr<FirstLastNameField> Parse(AutofillScanner* scanner);
+  static std::unique_ptr<FirstLastNameField> Parse(AutofillScanner* scanner);
 
  protected:
   void AddClassifications(FieldCandidatesMap* field_candidates) const override;
@@ -59,12 +61,12 @@
 }  // namespace
 
 // static
-scoped_ptr<FormField> NameField::Parse(AutofillScanner* scanner) {
+std::unique_ptr<FormField> NameField::Parse(AutofillScanner* scanner) {
   if (scanner->IsEnd())
     return NULL;
 
   // Try FirstLastNameField first since it's more specific.
-  scoped_ptr<FormField> field = FirstLastNameField::Parse(scanner);
+  std::unique_ptr<FormField> field = FirstLastNameField::Parse(scanner);
   if (!field)
     field = FullNameField::Parse(scanner);
   return field;
@@ -75,7 +77,7 @@
 }
 
 // static
-scoped_ptr<FullNameField> FullNameField::Parse(AutofillScanner* scanner) {
+std::unique_ptr<FullNameField> FullNameField::Parse(AutofillScanner* scanner) {
   // Exclude e.g. "username" or "nickname" fields.
   scanner->SaveCursor();
   bool should_ignore = ParseField(scanner, UTF8ToUTF16(kNameIgnoredRe), NULL);
@@ -88,7 +90,7 @@
   // "Travel Profile Name".
   AutofillField* field = NULL;
   if (ParseField(scanner, UTF8ToUTF16(kNameRe), &field))
-    return make_scoped_ptr(new FullNameField(field));
+    return base::WrapUnique(new FullNameField(field));
 
   return NULL;
 }
@@ -101,11 +103,11 @@
 FullNameField::FullNameField(AutofillField* field) : field_(field) {
 }
 
-scoped_ptr<FirstLastNameField> FirstLastNameField::ParseSpecificName(
+std::unique_ptr<FirstLastNameField> FirstLastNameField::ParseSpecificName(
     AutofillScanner* scanner) {
   // Some pages (e.g. Overstock_comBilling.html, SmithsonianCheckout.html)
   // have the label "Name" followed by two or three text fields.
-  scoped_ptr<FirstLastNameField> v(new FirstLastNameField);
+  std::unique_ptr<FirstLastNameField> v(new FirstLastNameField);
   scanner->SaveCursor();
 
   AutofillField* next = NULL;
@@ -128,9 +130,9 @@
 }
 
 // static
-scoped_ptr<FirstLastNameField> FirstLastNameField::ParseComponentNames(
+std::unique_ptr<FirstLastNameField> FirstLastNameField::ParseComponentNames(
     AutofillScanner* scanner) {
-  scoped_ptr<FirstLastNameField> v(new FirstLastNameField);
+  std::unique_ptr<FirstLastNameField> v(new FirstLastNameField);
   scanner->SaveCursor();
 
   // A fair number of pages use the names "fname" and "lname" for naming
@@ -190,9 +192,9 @@
 }
 
 // static
-scoped_ptr<FirstLastNameField> FirstLastNameField::Parse(
+std::unique_ptr<FirstLastNameField> FirstLastNameField::Parse(
     AutofillScanner* scanner) {
-  scoped_ptr<FirstLastNameField> field = ParseSpecificName(scanner);
+  std::unique_ptr<FirstLastNameField> field = ParseSpecificName(scanner);
   if (!field)
     field = ParseComponentNames(scanner);
   return field;
diff --git a/components/autofill/core/browser/name_field.h b/components/autofill/core/browser/name_field.h
index e0356b4..459f0d4e 100644
--- a/components/autofill/core/browser/name_field.h
+++ b/components/autofill/core/browser/name_field.h
@@ -5,12 +5,12 @@
 #ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_NAME_FIELD_H_
 #define COMPONENTS_AUTOFILL_CORE_BROWSER_NAME_FIELD_H_
 
+#include <memory>
 #include <vector>
 
 #include "base/compiler_specific.h"
 #include "base/gtest_prod_util.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/autofill/core/browser/autofill_field.h"
 #include "components/autofill/core/browser/form_field.h"
 
@@ -21,7 +21,7 @@
 // A form field that can parse either a FullNameField or a FirstLastNameField.
 class NameField : public FormField {
  public:
-  static scoped_ptr<FormField> Parse(AutofillScanner* scanner);
+  static std::unique_ptr<FormField> Parse(AutofillScanner* scanner);
 
  protected:
   NameField() {}
diff --git a/components/autofill/core/browser/name_field_unittest.cc b/components/autofill/core/browser/name_field_unittest.cc
index 2221da1..a76c15f62 100644
--- a/components/autofill/core/browser/name_field_unittest.cc
+++ b/components/autofill/core/browser/name_field_unittest.cc
@@ -2,13 +2,16 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "components/autofill/core/browser/name_field.h"
+
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
+#include "base/memory/ptr_util.h"
 #include "base/memory/scoped_vector.h"
 #include "base/strings/utf_string_conversions.h"
 #include "components/autofill/core/browser/autofill_field.h"
 #include "components/autofill/core/browser/autofill_scanner.h"
-#include "components/autofill/core/browser/name_field.h"
 #include "components/autofill/core/common/form_field_data.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -22,13 +25,13 @@
 
  protected:
   ScopedVector<AutofillField> list_;
-  scoped_ptr<NameField> field_;
+  std::unique_ptr<NameField> field_;
   FieldCandidatesMap field_candidates_map_;
 
   // Downcast for tests.
-  static scoped_ptr<NameField> Parse(AutofillScanner* scanner) {
-    scoped_ptr<FormField> field = NameField::Parse(scanner);
-    return make_scoped_ptr(static_cast<NameField*>(field.release()));
+  static std::unique_ptr<NameField> Parse(AutofillScanner* scanner) {
+    std::unique_ptr<FormField> field = NameField::Parse(scanner);
+    return base::WrapUnique(static_cast<NameField*>(field.release()));
   }
 
  private:
diff --git a/components/autofill/core/browser/payments/payments_client.cc b/components/autofill/core/browser/payments/payments_client.cc
index b039e01..a519b52 100644
--- a/components/autofill/core/browser/payments/payments_client.cc
+++ b/components/autofill/core/browser/payments/payments_client.cc
@@ -4,12 +4,13 @@
 
 #include "components/autofill/core/browser/payments/payments_client.h"
 
+#include <memory>
 #include <utility>
 
 #include "base/command_line.h"
 #include "base/json/json_reader.h"
 #include "base/json/json_writer.h"
-#include "base/memory/scoped_ptr.h"
+#include "base/memory/ptr_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
@@ -95,9 +96,9 @@
   return base.Resolve(path);
 }
 
-scoped_ptr<base::DictionaryValue> BuildRiskDictionary(
+std::unique_ptr<base::DictionaryValue> BuildRiskDictionary(
     const std::string& encoded_risk_data) {
-  scoped_ptr<base::DictionaryValue> risk_data(new base::DictionaryValue());
+  std::unique_ptr<base::DictionaryValue> risk_data(new base::DictionaryValue());
 #if defined(OS_IOS)
   // Browser fingerprinting is not available on iOS. Instead, we generate
   // RiskAdvisoryData.
@@ -132,15 +133,16 @@
     list->AppendString(value);
 }
 
-scoped_ptr<base::DictionaryValue> BuildAddressDictionary(
+std::unique_ptr<base::DictionaryValue> BuildAddressDictionary(
     const AutofillProfile& profile,
     const std::string& app_locale) {
-  scoped_ptr<base::DictionaryValue> postal_address(new base::DictionaryValue());
+  std::unique_ptr<base::DictionaryValue> postal_address(
+      new base::DictionaryValue());
 
   SetStringIfNotEmpty(profile, NAME_FULL, app_locale, "recipient_name",
                       postal_address.get());
 
-  scoped_ptr<base::ListValue> address_lines(new base::ListValue());
+  std::unique_ptr<base::ListValue> address_lines(new base::ListValue());
   AppendStringIfNotEmpty(profile, ADDRESS_HOME_LINE1, app_locale,
                          address_lines.get());
   AppendStringIfNotEmpty(profile, ADDRESS_HOME_LINE2, app_locale,
@@ -162,7 +164,7 @@
   if (!country_code.empty())
     postal_address->SetString("country_name_code", country_code);
 
-  scoped_ptr<base::DictionaryValue> address(new base::DictionaryValue());
+  std::unique_ptr<base::DictionaryValue> address(new base::DictionaryValue());
   address->Set("postal_address", std::move(postal_address));
   SetStringIfNotEmpty(profile, PHONE_HOME_WHOLE_NUMBER, app_locale,
                       "phone_number", address.get());
@@ -191,7 +193,7 @@
     request_dict.SetString("credit_card_id", request_details_.card.server_id());
     request_dict.Set("risk_data_encoded",
                      BuildRiskDictionary(request_details_.risk_data));
-    request_dict.Set("context", make_scoped_ptr(new base::DictionaryValue()));
+    request_dict.Set("context", base::WrapUnique(new base::DictionaryValue()));
 
     int value = 0;
     if (base::StringToInt(request_details_.user_response.exp_month, &value))
@@ -211,7 +213,7 @@
     return request_content;
   }
 
-  void ParseResponse(scoped_ptr<base::DictionaryValue> response) override {
+  void ParseResponse(std::unique_ptr<base::DictionaryValue> response) override {
     response->GetString("pan", &real_pan_);
   }
 
@@ -241,7 +243,7 @@
 
   std::string GetRequestContent() override {
     base::DictionaryValue request_dict;
-    scoped_ptr<base::DictionaryValue> context(new base::DictionaryValue());
+    std::unique_ptr<base::DictionaryValue> context(new base::DictionaryValue());
     context->SetString("language_code", app_locale_);
     request_dict.Set("context", std::move(context));
 
@@ -251,7 +253,7 @@
     return request_content;
   }
 
-  void ParseResponse(scoped_ptr<base::DictionaryValue> response) override {
+  void ParseResponse(std::unique_ptr<base::DictionaryValue> response) override {
     response->GetString("context_token", &context_token_);
     base::DictionaryValue* unowned_legal_message;
     if (response->GetDictionary("legal_message", &unowned_legal_message))
@@ -271,7 +273,7 @@
  private:
   std::string app_locale_;
   base::string16 context_token_;
-  scoped_ptr<base::DictionaryValue> legal_message_;
+  std::unique_ptr<base::DictionaryValue> legal_message_;
 };
 
 class UploadCardRequest : public PaymentsRequest {
@@ -294,14 +296,14 @@
                      BuildRiskDictionary(request_details_.risk_data));
 
     const std::string& app_locale = request_details_.app_locale;
-    scoped_ptr<base::DictionaryValue> context(new base::DictionaryValue());
+    std::unique_ptr<base::DictionaryValue> context(new base::DictionaryValue());
     context->SetString("language_code", app_locale);
     request_dict.Set("context", std::move(context));
 
     SetStringIfNotEmpty(request_details_.card, CREDIT_CARD_NAME_FULL,
                         app_locale, "cardholder_name", &request_dict);
 
-    scoped_ptr<base::ListValue> addresses(new base::ListValue());
+    std::unique_ptr<base::ListValue> addresses(new base::ListValue());
     for (const AutofillProfile& profile : request_details_.profiles) {
       addresses->Append(BuildAddressDictionary(profile, app_locale));
     }
@@ -334,7 +336,8 @@
     return request_content;
   }
 
-  void ParseResponse(scoped_ptr<base::DictionaryValue> response) override {}
+  void ParseResponse(std::unique_ptr<base::DictionaryValue> response) override {
+  }
 
   bool IsResponseComplete() override { return true; }
 
@@ -376,19 +379,20 @@
 
 void PaymentsClient::UnmaskCard(
     const PaymentsClient::UnmaskRequestDetails& request_details) {
-  IssueRequest(make_scoped_ptr(new UnmaskCardRequest(request_details)), true);
+  IssueRequest(base::WrapUnique(new UnmaskCardRequest(request_details)), true);
 }
 
 void PaymentsClient::GetUploadDetails(const std::string& app_locale) {
-  IssueRequest(make_scoped_ptr(new GetUploadDetailsRequest(app_locale)), false);
+  IssueRequest(base::WrapUnique(new GetUploadDetailsRequest(app_locale)),
+               false);
 }
 
 void PaymentsClient::UploadCard(
     const PaymentsClient::UploadRequestDetails& request_details) {
-  IssueRequest(make_scoped_ptr(new UploadCardRequest(request_details)), true);
+  IssueRequest(base::WrapUnique(new UploadCardRequest(request_details)), true);
 }
 
-void PaymentsClient::IssueRequest(scoped_ptr<PaymentsRequest> request,
+void PaymentsClient::IssueRequest(std::unique_ptr<PaymentsRequest> request,
                                   bool authenticate) {
   request_ = std::move(request);
   has_retried_authorization_ = false;
@@ -431,8 +435,8 @@
 
   // |url_fetcher_|, which is aliased to |source|, might continue to be used in
   // this method, but should be freed once control leaves the method.
-  scoped_ptr<net::URLFetcher> scoped_url_fetcher(std::move(url_fetcher_));
-  scoped_ptr<base::DictionaryValue> response_dict;
+  std::unique_ptr<net::URLFetcher> scoped_url_fetcher(std::move(url_fetcher_));
+  std::unique_ptr<base::DictionaryValue> response_dict;
   int response_code = source->GetResponseCode();
   std::string data;
   source->GetResponseAsString(&data);
@@ -444,7 +448,7 @@
     // Valid response.
     case net::HTTP_OK: {
       std::string error_code;
-      scoped_ptr<base::Value> message_value = base::JSONReader::Read(data);
+      std::unique_ptr<base::Value> message_value = base::JSONReader::Read(data);
       if (message_value.get() &&
           message_value->IsType(base::Value::TYPE_DICTIONARY)) {
         response_dict.reset(
diff --git a/components/autofill/core/browser/payments/payments_client.h b/components/autofill/core/browser/payments/payments_client.h
index 0284f8fa..417f17f 100644
--- a/components/autofill/core/browser/payments/payments_client.h
+++ b/components/autofill/core/browser/payments/payments_client.h
@@ -44,7 +44,7 @@
   virtual void OnDidGetUploadDetails(
       AutofillClient::PaymentsRpcResult result,
       const base::string16& context_token,
-      scoped_ptr<base::DictionaryValue> legal_message) = 0;
+      std::unique_ptr<base::DictionaryValue> legal_message) = 0;
 
   // Returns the result of an upload request.
   virtual void OnDidUploadCard(AutofillClient::PaymentsRpcResult result) = 0;
@@ -119,7 +119,8 @@
   // Initiates a Payments request using the state in |request|. If
   // |authenticate| is true, ensures that an OAuth token is avialble first.
   // Takes ownership of |request|.
-  void IssueRequest(scoped_ptr<PaymentsRequest> request, bool authenticate);
+  void IssueRequest(std::unique_ptr<PaymentsRequest> request,
+                    bool authenticate);
 
   // net::URLFetcherDelegate:
   void OnURLFetchComplete(const net::URLFetcher* source) override;
@@ -148,13 +149,13 @@
   PaymentsClientDelegate* const delegate_;  // must outlive |this|.
 
   // The current request.
-  scoped_ptr<PaymentsRequest> request_;
+  std::unique_ptr<PaymentsRequest> request_;
 
   // The fetcher being used to issue the current request.
-  scoped_ptr<net::URLFetcher> url_fetcher_;
+  std::unique_ptr<net::URLFetcher> url_fetcher_;
 
   // The current OAuth2 token request object.
-  scoped_ptr<OAuth2TokenService::Request> access_token_request_;
+  std::unique_ptr<OAuth2TokenService::Request> access_token_request_;
 
   // The OAuth2 token, or empty if not fetched.
   std::string access_token_;
diff --git a/components/autofill/core/browser/payments/payments_request.h b/components/autofill/core/browser/payments/payments_request.h
index be59661..6466d22 100644
--- a/components/autofill/core/browser/payments/payments_request.h
+++ b/components/autofill/core/browser/payments/payments_request.h
@@ -5,6 +5,8 @@
 #ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_PAYMENTS_PAYMENTS_REQUEST_H_
 #define COMPONENTS_AUTOFILL_CORE_BROWSER_PAYMENTS_PAYMENTS_REQUEST_H_
 
+#include <memory>
+
 namespace autofill {
 
 class AutofillClient;
@@ -28,7 +30,8 @@
   virtual std::string GetRequestContent() = 0;
 
   // Parses the required elements of the HTTP response.
-  virtual void ParseResponse(scoped_ptr<base::DictionaryValue> response) = 0;
+  virtual void ParseResponse(
+      std::unique_ptr<base::DictionaryValue> response) = 0;
 
   // Returns true if all of the required elements were successfully retrieved by
   // a call to ParseResponse.
diff --git a/components/autofill/core/browser/personal_data_manager.cc b/components/autofill/core/browser/personal_data_manager.cc
index 2de59f6..a564baa 100644
--- a/components/autofill/core/browser/personal_data_manager.cc
+++ b/components/autofill/core/browser/personal_data_manager.cc
@@ -371,7 +371,7 @@
 bool PersonalDataManager::ImportFormData(
     const FormStructure& form,
     bool should_return_local_card,
-    scoped_ptr<CreditCard>* imported_credit_card) {
+    std::unique_ptr<CreditCard>* imported_credit_card) {
   // We try the same |form| for both credit card and address import/update.
   // - ImportCreditCard may update an existing card, or fill
   //   |imported_credit_card| with an extracted card. See .h for details of
@@ -1387,7 +1387,7 @@
 bool PersonalDataManager::ImportCreditCard(
     const FormStructure& form,
     bool should_return_local_card,
-    scoped_ptr<CreditCard>* imported_credit_card) {
+    std::unique_ptr<CreditCard>* imported_credit_card) {
   DCHECK(!imported_credit_card->get());
 
   // The candidate for credit card import. There are many ways for the candidate
diff --git a/components/autofill/core/browser/personal_data_manager.h b/components/autofill/core/browser/personal_data_manager.h
index ce0014dd..fd2dbef 100644
--- a/components/autofill/core/browser/personal_data_manager.h
+++ b/components/autofill/core/browser/personal_data_manager.h
@@ -11,7 +11,6 @@
 
 #include "base/gtest_prod_util.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/scoped_vector.h"
 #include "base/observer_list.h"
 #include "base/strings/string16.h"
@@ -100,7 +99,7 @@
   // Returns |true| if sufficient address or credit card data was found.
   bool ImportFormData(const FormStructure& form,
                       bool should_return_local_card,
-                      scoped_ptr<CreditCard>* imported_credit_card);
+                      std::unique_ptr<CreditCard>* imported_credit_card);
 
   // Called to indicate |data_model| was used (to fill in a form). Updates
   // the database accordingly. Can invalidate |data_model|, particularly if
@@ -383,7 +382,7 @@
   // new card to import, or having merged with an existing card.
   bool ImportCreditCard(const FormStructure& form,
                         bool should_return_local_card,
-                        scoped_ptr<CreditCard>* imported_credit_card);
+                        std::unique_ptr<CreditCard>* imported_credit_card);
 
   // Functionally equivalent to GetProfiles(), but also records metrics if
   // |record_metrics| is true. Metrics should be recorded when the returned
@@ -418,10 +417,10 @@
   mutable bool has_logged_credit_card_count_;
 
   // An observer to listen for changes to prefs::kAutofillEnabled.
-  scoped_ptr<BooleanPrefMember> enabled_pref_;
+  std::unique_ptr<BooleanPrefMember> enabled_pref_;
 
   // An observer to listen for changes to prefs::kAutofillWalletImportEnabled.
-  scoped_ptr<BooleanPrefMember> wallet_enabled_pref_;
+  std::unique_ptr<BooleanPrefMember> wallet_enabled_pref_;
 
   DISALLOW_COPY_AND_ASSIGN(PersonalDataManager);
 };
diff --git a/components/autofill/core/browser/personal_data_manager_unittest.cc b/components/autofill/core/browser/personal_data_manager_unittest.cc
index 1afa8410..2b6e908e 100644
--- a/components/autofill/core/browser/personal_data_manager_unittest.cc
+++ b/components/autofill/core/browser/personal_data_manager_unittest.cc
@@ -2,16 +2,18 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "components/autofill/core/browser/personal_data_manager.h"
+
 #include <stddef.h>
 
 #include <algorithm>
+#include <memory>
 #include <string>
 #include <vector>
 
 #include "base/command_line.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/guid.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/metrics/field_trial.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/synchronization/waitable_event.h"
@@ -23,7 +25,6 @@
 #include "components/autofill/core/browser/autofill_test_utils.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/form_structure.h"
-#include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/autofill/core/browser/personal_data_manager_observer.h"
 #include "components/autofill/core/browser/webdata/autofill_table.h"
 #include "components/autofill/core/browser/webdata/autofill_webdata_service.h"
@@ -118,7 +119,7 @@
 
     // Hacky: hold onto a pointer but pass ownership.
     autofill_table_ = new AutofillTable;
-    web_database_->AddTable(scoped_ptr<WebDatabaseTable>(autofill_table_));
+    web_database_->AddTable(std::unique_ptr<WebDatabaseTable>(autofill_table_));
     web_database_->LoadDatabase();
     autofill_database_service_ = new AutofillWebDataService(
         web_database_, base::ThreadTaskRunnerHandle::Get(),
@@ -267,7 +268,7 @@
   }
   bool ImportCreditCard(const FormStructure& form,
                         bool should_return_local_card,
-                        scoped_ptr<CreditCard>* imported_credit_card) {
+                        std::unique_ptr<CreditCard>* imported_credit_card) {
     return personal_data_->ImportCreditCard(form, should_return_local_card,
                                             imported_credit_card);
   }
@@ -297,17 +298,17 @@
   // files are not used anymore and deletion succeeds.
   base::ScopedTempDir temp_dir_;
   base::MessageLoopForUI message_loop_;
-  scoped_ptr<PrefService> prefs_;
-  scoped_ptr<AccountTrackerService> account_tracker_;
-  scoped_ptr<FakeSigninManagerBase> signin_manager_;
-  scoped_ptr<TestSigninClient> signin_client_;
+  std::unique_ptr<PrefService> prefs_;
+  std::unique_ptr<AccountTrackerService> account_tracker_;
+  std::unique_ptr<FakeSigninManagerBase> signin_manager_;
+  std::unique_ptr<TestSigninClient> signin_client_;
   scoped_refptr<AutofillWebDataService> autofill_database_service_;
   scoped_refptr<WebDatabaseService> web_database_;
   AutofillTable* autofill_table_;  // weak ref
   PersonalDataLoadedObserverMock personal_data_observer_;
-  scoped_ptr<PersonalDataManager> personal_data_;
+  std::unique_ptr<PersonalDataManager> personal_data_;
 
-  scoped_ptr<base::FieldTrialList> field_trial_list_;
+  std::unique_ptr<base::FieldTrialList> field_trial_list_;
   scoped_refptr<base::FieldTrial> field_trial_;
 };
 
@@ -1958,7 +1959,7 @@
 
   FormStructure form_structure(form);
   form_structure.DetermineHeuristicTypes();
-  scoped_ptr<CreditCard> imported_credit_card;
+  std::unique_ptr<CreditCard> imported_credit_card;
   EXPECT_TRUE(ImportCreditCard(form_structure, false, &imported_credit_card));
   ASSERT_TRUE(imported_credit_card);
   personal_data_->SaveImportedCreditCard(*imported_credit_card);
@@ -1984,7 +1985,7 @@
 
   FormStructure form_structure(form);
   form_structure.DetermineHeuristicTypes();
-  scoped_ptr<CreditCard> imported_credit_card;
+  std::unique_ptr<CreditCard> imported_credit_card;
   EXPECT_FALSE(ImportCreditCard(form_structure, false, &imported_credit_card));
   ASSERT_FALSE(imported_credit_card);
 
@@ -2018,7 +2019,7 @@
 
   FormStructure form_structure(form);
   form_structure.DetermineHeuristicTypes();
-  scoped_ptr<CreditCard> imported_credit_card;
+  std::unique_ptr<CreditCard> imported_credit_card;
   EXPECT_TRUE(ImportCreditCard(form_structure, false, &imported_credit_card));
   ASSERT_TRUE(imported_credit_card);
   personal_data_->SaveImportedCreditCard(*imported_credit_card);
@@ -2045,7 +2046,7 @@
 
   FormStructure form_structure1(form1);
   form_structure1.DetermineHeuristicTypes();
-  scoped_ptr<CreditCard> imported_credit_card;
+  std::unique_ptr<CreditCard> imported_credit_card;
   EXPECT_TRUE(ImportCreditCard(form_structure1, false, &imported_credit_card));
   ASSERT_TRUE(imported_credit_card);
   personal_data_->SaveImportedCreditCard(*imported_credit_card);
@@ -2068,7 +2069,7 @@
 
   FormStructure form_structure2(form2);
   form_structure2.DetermineHeuristicTypes();
-  scoped_ptr<CreditCard> imported_credit_card2;
+  std::unique_ptr<CreditCard> imported_credit_card2;
   EXPECT_TRUE(ImportCreditCard(form_structure2, false, &imported_credit_card2));
   ASSERT_TRUE(imported_credit_card2);
   personal_data_->SaveImportedCreditCard(*imported_credit_card2);
@@ -2107,7 +2108,7 @@
   // masked server card.
   FormStructure form_structure(form);
   form_structure.DetermineHeuristicTypes();
-  scoped_ptr<CreditCard> imported_credit_card;
+  std::unique_ptr<CreditCard> imported_credit_card;
   EXPECT_TRUE(ImportCreditCard(form_structure, false, &imported_credit_card));
   ASSERT_TRUE(imported_credit_card);
   personal_data_->SaveImportedCreditCard(*imported_credit_card);
@@ -2137,7 +2138,7 @@
   // the full server card.
   FormStructure form_structure(form);
   form_structure.DetermineHeuristicTypes();
-  scoped_ptr<CreditCard> imported_credit_card;
+  std::unique_ptr<CreditCard> imported_credit_card;
   EXPECT_FALSE(ImportCreditCard(form_structure, false, &imported_credit_card));
   ASSERT_FALSE(imported_credit_card);
 }
@@ -2150,7 +2151,7 @@
 
   FormStructure form_structure1(form1);
   form_structure1.DetermineHeuristicTypes();
-  scoped_ptr<CreditCard> imported_credit_card;
+  std::unique_ptr<CreditCard> imported_credit_card;
   EXPECT_TRUE(ImportCreditCard(form_structure1, false, &imported_credit_card));
   ASSERT_TRUE(imported_credit_card);
   personal_data_->SaveImportedCreditCard(*imported_credit_card);
@@ -2175,7 +2176,7 @@
 
   FormStructure form_structure2(form2);
   form_structure2.DetermineHeuristicTypes();
-  scoped_ptr<CreditCard> imported_credit_card2;
+  std::unique_ptr<CreditCard> imported_credit_card2;
   EXPECT_TRUE(ImportCreditCard(form_structure2, false, &imported_credit_card2));
   EXPECT_FALSE(imported_credit_card2);
 
@@ -2202,7 +2203,7 @@
 
   FormStructure form_structure1(form1);
   form_structure1.DetermineHeuristicTypes();
-  scoped_ptr<CreditCard> imported_credit_card;
+  std::unique_ptr<CreditCard> imported_credit_card;
   EXPECT_TRUE(ImportCreditCard(form_structure1, false, &imported_credit_card));
   ASSERT_TRUE(imported_credit_card);
   personal_data_->SaveImportedCreditCard(*imported_credit_card);
@@ -2227,7 +2228,7 @@
 
   FormStructure form_structure2(form2);
   form_structure2.DetermineHeuristicTypes();
-  scoped_ptr<CreditCard> imported_credit_card2;
+  std::unique_ptr<CreditCard> imported_credit_card2;
   EXPECT_TRUE(ImportCreditCard(form_structure2,
                                /* should_return_local_card= */ true,
                                &imported_credit_card2));
@@ -2257,7 +2258,7 @@
 
   FormStructure form_structure1(form1);
   form_structure1.DetermineHeuristicTypes();
-  scoped_ptr<CreditCard> imported_credit_card;
+  std::unique_ptr<CreditCard> imported_credit_card;
   EXPECT_TRUE(ImportCreditCard(form_structure1, false, &imported_credit_card));
   ASSERT_TRUE(imported_credit_card);
   personal_data_->SaveImportedCreditCard(*imported_credit_card);
@@ -2281,7 +2282,7 @@
 
   FormStructure form_structure2(form2);
   form_structure2.DetermineHeuristicTypes();
-  scoped_ptr<CreditCard> imported_credit_card2;
+  std::unique_ptr<CreditCard> imported_credit_card2;
   EXPECT_FALSE(
       ImportCreditCard(form_structure2, false, &imported_credit_card2));
   EXPECT_FALSE(imported_credit_card2);
@@ -2307,7 +2308,7 @@
 
   FormStructure form_structure1(form1);
   form_structure1.DetermineHeuristicTypes();
-  scoped_ptr<CreditCard> imported_credit_card;
+  std::unique_ptr<CreditCard> imported_credit_card;
   EXPECT_TRUE(ImportCreditCard(form_structure1, false, &imported_credit_card));
   ASSERT_TRUE(imported_credit_card);
   personal_data_->SaveImportedCreditCard(*imported_credit_card);
@@ -2332,7 +2333,7 @@
 
   FormStructure form_structure2(form2);
   form_structure2.DetermineHeuristicTypes();
-  scoped_ptr<CreditCard> imported_credit_card2;
+  std::unique_ptr<CreditCard> imported_credit_card2;
   EXPECT_TRUE(ImportCreditCard(form_structure2, false, &imported_credit_card2));
   EXPECT_FALSE(imported_credit_card2);
 
@@ -2356,7 +2357,7 @@
 
   FormStructure form_structure3(form3);
   form_structure3.DetermineHeuristicTypes();
-  scoped_ptr<CreditCard> imported_credit_card3;
+  std::unique_ptr<CreditCard> imported_credit_card3;
   EXPECT_FALSE(
       ImportCreditCard(form_structure3, false, &imported_credit_card3));
   ASSERT_FALSE(imported_credit_card3);
@@ -2399,7 +2400,7 @@
 
   FormStructure form_structure(form);
   form_structure.DetermineHeuristicTypes();
-  scoped_ptr<CreditCard> imported_credit_card;
+  std::unique_ptr<CreditCard> imported_credit_card;
   EXPECT_TRUE(ImportCreditCard(form_structure, false, &imported_credit_card));
   EXPECT_FALSE(imported_credit_card);
 
@@ -2444,7 +2445,7 @@
 
   FormStructure form_structure(form);
   form_structure.DetermineHeuristicTypes();
-  scoped_ptr<CreditCard> imported_credit_card;
+  std::unique_ptr<CreditCard> imported_credit_card;
   EXPECT_TRUE(ImportCreditCard(form_structure, false, &imported_credit_card));
   EXPECT_FALSE(imported_credit_card);
 
@@ -2483,7 +2484,7 @@
 
   FormStructure form_structure(form);
   form_structure.DetermineHeuristicTypes();
-  scoped_ptr<CreditCard> imported_credit_card;
+  std::unique_ptr<CreditCard> imported_credit_card;
   EXPECT_TRUE(ImportCreditCard(form_structure, false, &imported_credit_card));
   ASSERT_FALSE(imported_credit_card);
 
@@ -2530,7 +2531,7 @@
 
   FormStructure form_structure(form);
   form_structure.DetermineHeuristicTypes();
-  scoped_ptr<CreditCard> imported_credit_card;
+  std::unique_ptr<CreditCard> imported_credit_card;
   EXPECT_TRUE(personal_data_->ImportFormData(form_structure, false,
                                              &imported_credit_card));
   ASSERT_TRUE(imported_credit_card);
@@ -2608,7 +2609,7 @@
 
   FormStructure form_structure(form);
   form_structure.DetermineHeuristicTypes();
-  scoped_ptr<CreditCard> imported_credit_card;
+  std::unique_ptr<CreditCard> imported_credit_card;
   // Still returns true because the credit card import was successful.
   EXPECT_TRUE(personal_data_->ImportFormData(form_structure, false,
                                              &imported_credit_card));
@@ -3829,7 +3830,7 @@
 
   FormStructure form_structure1(form1);
   form_structure1.DetermineHeuristicTypes();
-  scoped_ptr<CreditCard> imported_credit_card;
+  std::unique_ptr<CreditCard> imported_credit_card;
   EXPECT_FALSE(personal_data_->ImportFormData(form_structure1, false,
                                              &imported_credit_card));
   EXPECT_FALSE(imported_credit_card);
@@ -3851,7 +3852,7 @@
 
   FormStructure form_structure2(form2);
   form_structure2.DetermineHeuristicTypes();
-  scoped_ptr<CreditCard> imported_credit_card2;
+  std::unique_ptr<CreditCard> imported_credit_card2;
   EXPECT_FALSE(personal_data_->ImportFormData(form_structure2, false,
                                               &imported_credit_card2));
   EXPECT_FALSE(imported_credit_card2);
diff --git a/components/autofill/core/browser/phone_field.cc b/components/autofill/core/browser/phone_field.cc
index 0044fcc..68135df1 100644
--- a/components/autofill/core/browser/phone_field.cc
+++ b/components/autofill/core/browser/phone_field.cc
@@ -5,11 +5,12 @@
 #include "components/autofill/core/browser/phone_field.h"
 
 #include <string.h>
+
+#include <memory>
 #include <utility>
 
 #include "base/logging.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/strings/string16.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
@@ -129,7 +130,7 @@
 };
 
 // static
-scoped_ptr<FormField> PhoneField::Parse(AutofillScanner* scanner) {
+std::unique_ptr<FormField> PhoneField::Parse(AutofillScanner* scanner) {
   if (scanner->IsEnd())
     return nullptr;
 
@@ -182,7 +183,7 @@
     return nullptr;
   }
 
-  scoped_ptr<PhoneField> phone_field(new PhoneField);
+  std::unique_ptr<PhoneField> phone_field(new PhoneField);
   for (int i = 0; i < FIELD_MAX; ++i)
     phone_field->parsed_phone_fields_[i] = parsed_fields[i];
 
diff --git a/components/autofill/core/browser/phone_field.h b/components/autofill/core/browser/phone_field.h
index 9134ad9..b288d835 100644
--- a/components/autofill/core/browser/phone_field.h
+++ b/components/autofill/core/browser/phone_field.h
@@ -7,12 +7,12 @@
 
 #include <stddef.h>
 
+#include <memory>
 #include <vector>
 
 #include "base/compiler_specific.h"
 #include "base/gtest_prod_util.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/autofill/core/browser/autofill_type.h"
 #include "components/autofill/core/browser/form_field.h"
 #include "components/autofill/core/browser/phone_number.h"
@@ -30,7 +30,7 @@
  public:
   ~PhoneField() override;
 
-  static scoped_ptr<FormField> Parse(AutofillScanner* scanner);
+  static std::unique_ptr<FormField> Parse(AutofillScanner* scanner);
 
  protected:
   void AddClassifications(FieldCandidatesMap* field_candidates) const override;
diff --git a/components/autofill/core/browser/phone_field_unittest.cc b/components/autofill/core/browser/phone_field_unittest.cc
index 2649cb0..b32bbdc 100644
--- a/components/autofill/core/browser/phone_field_unittest.cc
+++ b/components/autofill/core/browser/phone_field_unittest.cc
@@ -2,15 +2,18 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "components/autofill/core/browser/phone_field.h"
+
 #include <stddef.h>
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
+#include "base/memory/ptr_util.h"
 #include "base/memory/scoped_vector.h"
 #include "base/strings/utf_string_conversions.h"
 #include "components/autofill/core/browser/autofill_field.h"
 #include "components/autofill/core/browser/autofill_scanner.h"
-#include "components/autofill/core/browser/phone_field.h"
 #include "components/autofill/core/common/form_field_data.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -34,9 +37,9 @@
 
  protected:
   // Downcast for tests.
-  static scoped_ptr<PhoneField> Parse(AutofillScanner* scanner) {
-    scoped_ptr<FormField> field = PhoneField::Parse(scanner);
-    return make_scoped_ptr(static_cast<PhoneField*>(field.release()));
+  static std::unique_ptr<PhoneField> Parse(AutofillScanner* scanner) {
+    std::unique_ptr<FormField> field = PhoneField::Parse(scanner);
+    return base::WrapUnique(static_cast<PhoneField*>(field.release()));
   }
 
   void Clear() {
@@ -53,7 +56,7 @@
   }
 
   ScopedVector<AutofillField> list_;
-  scoped_ptr<PhoneField> field_;
+  std::unique_ptr<PhoneField> field_;
   FieldCandidatesMap field_candidates_map_;
 
  private:
diff --git a/components/autofill/core/browser/phone_number_i18n.cc b/components/autofill/core/browser/phone_number_i18n.cc
index 6c90e6b..66fe9faa 100644
--- a/components/autofill/core/browser/phone_number_i18n.cc
+++ b/components/autofill/core/browser/phone_number_i18n.cc
@@ -246,7 +246,7 @@
   // [ http://crbug.com/100845 ].  Once the bug is fixed, add a DCHECK here to
   // verify.
 
-  scoped_ptr<PhoneNumber> i18n_number(new PhoneNumber);
+  std::unique_ptr<PhoneNumber> i18n_number(new PhoneNumber);
   if (ParsePhoneNumber(number, region, &country_code_, &city_code_, &number_,
                        &region_, i18n_number.get())) {
     // The phone number was successfully parsed, so store the parsed version.
diff --git a/components/autofill/core/browser/phone_number_i18n.h b/components/autofill/core/browser/phone_number_i18n.h
index 51a0dcc..26e2a1b 100644
--- a/components/autofill/core/browser/phone_number_i18n.h
+++ b/components/autofill/core/browser/phone_number_i18n.h
@@ -5,11 +5,11 @@
 #ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_PHONE_NUMBER_I18N_H_
 #define COMPONENTS_AUTOFILL_CORE_BROWSER_PHONE_NUMBER_I18N_H_
 
+#include <memory>
 #include <string>
 #include <vector>
 
 #include "base/compiler_specific.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/strings/string16.h"
 
 namespace i18n {
@@ -97,7 +97,7 @@
 
   // The parsed number and its components.
   //
-  scoped_ptr< ::i18n::phonenumbers::PhoneNumber> i18n_number_;
+  std::unique_ptr<::i18n::phonenumbers::PhoneNumber> i18n_number_;
   base::string16 city_code_;
   base::string16 country_code_;
   base::string16 number_;
diff --git a/components/autofill/core/browser/test_autofill_client.cc b/components/autofill/core/browser/test_autofill_client.cc
index 8103f9d..2b6deb0b 100644
--- a/components/autofill/core/browser/test_autofill_client.cc
+++ b/components/autofill/core/browser/test_autofill_client.cc
@@ -63,7 +63,7 @@
 
 void TestAutofillClient::ConfirmSaveCreditCardToCloud(
     const CreditCard& card,
-    scoped_ptr<base::DictionaryValue> legal_message,
+    std::unique_ptr<base::DictionaryValue> legal_message,
     const base::Closure& callback) {
   callback.Run();
 }
diff --git a/components/autofill/core/browser/test_autofill_client.h b/components/autofill/core/browser/test_autofill_client.h
index d11e8740..f9ebbaaa 100644
--- a/components/autofill/core/browser/test_autofill_client.h
+++ b/components/autofill/core/browser/test_autofill_client.h
@@ -5,12 +5,12 @@
 #ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_TEST_AUTOFILL_CLIENT_H_
 #define COMPONENTS_AUTOFILL_CORE_BROWSER_TEST_AUTOFILL_CLIENT_H_
 
+#include <memory>
 #include <utility>
 
 #include "base/compiler_specific.h"
 #include "base/i18n/rtl.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/autofill/core/browser/autofill_client.h"
 #include "components/prefs/pref_service.h"
 #include "components/rappor/test_rappor_service.h"
@@ -41,7 +41,7 @@
                                     const base::Closure& callback) override;
   void ConfirmSaveCreditCardToCloud(
       const CreditCard& card,
-      scoped_ptr<base::DictionaryValue> legal_message,
+      std::unique_ptr<base::DictionaryValue> legal_message,
       const base::Closure& callback) override;
   void LoadRiskData(
       const base::Callback<void(const std::string&)>& callback) override;
@@ -72,7 +72,9 @@
     is_context_secure_ = is_context_secure;
   };
 
-  void SetPrefs(scoped_ptr<PrefService> prefs) { prefs_ = std::move(prefs); }
+  void SetPrefs(std::unique_ptr<PrefService> prefs) {
+    prefs_ = std::move(prefs);
+  }
 
   rappor::TestRapporService* test_rappor_service() {
     return rappor_service_.get();
@@ -80,10 +82,10 @@
 
  private:
   // NULL by default.
-  scoped_ptr<PrefService> prefs_;
-  scoped_ptr<FakeOAuth2TokenService> token_service_;
-  scoped_ptr<FakeIdentityProvider> identity_provider_;
-  scoped_ptr<rappor::TestRapporService> rappor_service_;
+  std::unique_ptr<PrefService> prefs_;
+  std::unique_ptr<FakeOAuth2TokenService> token_service_;
+  std::unique_ptr<FakeIdentityProvider> identity_provider_;
+  std::unique_ptr<rappor::TestRapporService> rappor_service_;
 
   bool is_context_secure_;
 
diff --git a/components/autofill/core/browser/ui/card_unmask_prompt_controller_impl.h b/components/autofill/core/browser/ui/card_unmask_prompt_controller_impl.h
index 25d8565..ef311e9 100644
--- a/components/autofill/core/browser/ui/card_unmask_prompt_controller_impl.h
+++ b/components/autofill/core/browser/ui/card_unmask_prompt_controller_impl.h
@@ -9,7 +9,6 @@
 
 #include "base/callback.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "components/autofill/core/browser/autofill_client.h"
 #include "components/autofill/core/browser/autofill_metrics.h"
diff --git a/components/autofill/core/browser/ui/card_unmask_prompt_controller_impl_unittest.cc b/components/autofill/core/browser/ui/card_unmask_prompt_controller_impl_unittest.cc
index fb6e4b86..e7597e5 100644
--- a/components/autofill/core/browser/ui/card_unmask_prompt_controller_impl_unittest.cc
+++ b/components/autofill/core/browser/ui/card_unmask_prompt_controller_impl_unittest.cc
@@ -6,6 +6,8 @@
 
 #include <stddef.h>
 
+#include <memory>
+
 #include "base/bind.h"
 #include "base/macros.h"
 #include "base/strings/utf_string_conversions.h"
@@ -124,10 +126,10 @@
         prefs::kAutofillWalletImportStorageCheckboxState, value);
   }
 
-  scoped_ptr<TestCardUnmaskPromptView> test_unmask_prompt_view_;
-  scoped_ptr<TestingPrefServiceSimple> pref_service_;
-  scoped_ptr<TestCardUnmaskPromptController> controller_;
-  scoped_ptr<TestCardUnmaskDelegate> delegate_;
+  std::unique_ptr<TestCardUnmaskPromptView> test_unmask_prompt_view_;
+  std::unique_ptr<TestingPrefServiceSimple> pref_service_;
+  std::unique_ptr<TestCardUnmaskPromptController> controller_;
+  std::unique_ptr<TestCardUnmaskDelegate> delegate_;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(CardUnmaskPromptControllerImplTest);
diff --git a/components/autofill/core/browser/webdata/autocomplete_syncable_service.cc b/components/autofill/core/browser/webdata/autocomplete_syncable_service.cc
index ac8f216d..08c44577 100644
--- a/components/autofill/core/browser/webdata/autocomplete_syncable_service.cc
+++ b/components/autofill/core/browser/webdata/autocomplete_syncable_service.cc
@@ -101,8 +101,8 @@
 syncer::SyncMergeResult AutocompleteSyncableService::MergeDataAndStartSyncing(
     syncer::ModelType type,
     const syncer::SyncDataList& initial_sync_data,
-    scoped_ptr<syncer::SyncChangeProcessor> sync_processor,
-    scoped_ptr<syncer::SyncErrorFactory> error_handler) {
+    std::unique_ptr<syncer::SyncChangeProcessor> sync_processor,
+    std::unique_ptr<syncer::SyncErrorFactory> error_handler) {
   DCHECK(CalledOnValidThread());
   DCHECK(!sync_processor_);
   DCHECK(sync_processor);
@@ -203,7 +203,7 @@
 
   // Data is loaded only if we get new ADD/UPDATE change.
   std::vector<AutofillEntry> entries;
-  scoped_ptr<AutocompleteEntryMap> db_entries;
+  std::unique_ptr<AutocompleteEntryMap> db_entries;
   std::vector<AutofillEntry> new_entries;
 
   syncer::SyncError list_processing_error;
diff --git a/components/autofill/core/browser/webdata/autocomplete_syncable_service.h b/components/autofill/core/browser/webdata/autocomplete_syncable_service.h
index 240d3db5..75f2aa1 100644
--- a/components/autofill/core/browser/webdata/autocomplete_syncable_service.h
+++ b/components/autofill/core/browser/webdata/autocomplete_syncable_service.h
@@ -5,13 +5,13 @@
 #define COMPONENTS_AUTOFILL_CORE_BROWSER_WEBDATA_AUTOCOMPLETE_SYNCABLE_SERVICE_H_
 
 #include <map>
+#include <memory>
 #include <set>
 #include <string>
 #include <utility>
 #include <vector>
 
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/scoped_observer.h"
 #include "base/supports_user_data.h"
 #include "base/threading/non_thread_safe.h"
@@ -68,8 +68,8 @@
   syncer::SyncMergeResult MergeDataAndStartSyncing(
       syncer::ModelType type,
       const syncer::SyncDataList& initial_sync_data,
-      scoped_ptr<syncer::SyncChangeProcessor> sync_processor,
-      scoped_ptr<syncer::SyncErrorFactory> error_handler) override;
+      std::unique_ptr<syncer::SyncChangeProcessor> sync_processor,
+      std::unique_ptr<syncer::SyncErrorFactory> error_handler) override;
   void StopSyncing(syncer::ModelType type) override;
   syncer::SyncDataList GetAllSyncData(syncer::ModelType type) const override;
   syncer::SyncError ProcessSyncChanges(
@@ -152,11 +152,11 @@
 
   // We receive ownership of |sync_processor_| in MergeDataAndStartSyncing() and
   // destroy it in StopSyncing().
-  scoped_ptr<syncer::SyncChangeProcessor> sync_processor_;
+  std::unique_ptr<syncer::SyncChangeProcessor> sync_processor_;
 
   // We receive ownership of |error_handler_| in MergeDataAndStartSyncing() and
   // destroy it in StopSyncing().
-  scoped_ptr<syncer::SyncErrorFactory> error_handler_;
+  std::unique_ptr<syncer::SyncErrorFactory> error_handler_;
 
   syncer::SyncableService::StartSyncFlare flare_;
 
diff --git a/components/autofill/core/browser/webdata/autofill_data_type_controller_unittest.cc b/components/autofill/core/browser/webdata/autofill_data_type_controller_unittest.cc
index f811771c..458a83b 100644
--- a/components/autofill/core/browser/webdata/autofill_data_type_controller_unittest.cc
+++ b/components/autofill/core/browser/webdata/autofill_data_type_controller_unittest.cc
@@ -9,7 +9,6 @@
 #include "base/compiler_specific.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
diff --git a/components/autofill/core/browser/webdata/autofill_profile_syncable_service.cc b/components/autofill/core/browser/webdata/autofill_profile_syncable_service.cc
index 459d9813..6e444546 100644
--- a/components/autofill/core/browser/webdata/autofill_profile_syncable_service.cc
+++ b/components/autofill/core/browser/webdata/autofill_profile_syncable_service.cc
@@ -90,8 +90,8 @@
 AutofillProfileSyncableService::MergeDataAndStartSyncing(
     syncer::ModelType type,
     const syncer::SyncDataList& initial_sync_data,
-    scoped_ptr<syncer::SyncChangeProcessor> sync_processor,
-    scoped_ptr<syncer::SyncErrorFactory> sync_error_factory) {
+    std::unique_ptr<syncer::SyncChangeProcessor> sync_processor,
+    std::unique_ptr<syncer::SyncErrorFactory> sync_error_factory) {
   DCHECK(CalledOnValidThread());
   DCHECK(!sync_processor_.get());
   DCHECK(sync_processor.get());
diff --git a/components/autofill/core/browser/webdata/autofill_profile_syncable_service.h b/components/autofill/core/browser/webdata/autofill_profile_syncable_service.h
index f67f6613..78c08726 100644
--- a/components/autofill/core/browser/webdata/autofill_profile_syncable_service.h
+++ b/components/autofill/core/browser/webdata/autofill_profile_syncable_service.h
@@ -5,6 +5,7 @@
 #define COMPONENTS_AUTOFILL_CORE_BROWSER_WEBDATA_AUTOFILL_PROFILE_SYNCABLE_SERVICE_H_
 
 #include <map>
+#include <memory>
 #include <string>
 #include <vector>
 
@@ -69,8 +70,8 @@
   syncer::SyncMergeResult MergeDataAndStartSyncing(
       syncer::ModelType type,
       const syncer::SyncDataList& initial_sync_data,
-      scoped_ptr<syncer::SyncChangeProcessor> sync_processor,
-      scoped_ptr<syncer::SyncErrorFactory> sync_error_factory) override;
+      std::unique_ptr<syncer::SyncChangeProcessor> sync_processor,
+      std::unique_ptr<syncer::SyncErrorFactory> sync_error_factory) override;
   void StopSyncing(syncer::ModelType type) override;
   syncer::SyncDataList GetAllSyncData(syncer::ModelType type) const override;
   syncer::SyncError ProcessSyncChanges(
@@ -180,9 +181,9 @@
   ScopedVector<AutofillProfile> profiles_;
   GUIDToProfileMap profiles_map_;
 
-  scoped_ptr<syncer::SyncChangeProcessor> sync_processor_;
+  std::unique_ptr<syncer::SyncChangeProcessor> sync_processor_;
 
-  scoped_ptr<syncer::SyncErrorFactory> sync_error_factory_;
+  std::unique_ptr<syncer::SyncErrorFactory> sync_error_factory_;
 
   syncer::SyncableService::StartSyncFlare flare_;
 
diff --git a/components/autofill/core/browser/webdata/autofill_profile_syncable_service_unittest.cc b/components/autofill/core/browser/webdata/autofill_profile_syncable_service_unittest.cc
index 0558211..352074e 100644
--- a/components/autofill/core/browser/webdata/autofill_profile_syncable_service_unittest.cc
+++ b/components/autofill/core/browser/webdata/autofill_profile_syncable_service_unittest.cc
@@ -5,9 +5,11 @@
 #include "components/autofill/core/browser/webdata/autofill_profile_syncable_service.h"
 
 #include <stddef.h>
+
 #include <utility>
 
 #include "base/location.h"
+#include "base/memory/ptr_util.h"
 #include "base/message_loop/message_loop.h"
 #include "base/strings/utf_string_conversions.h"
 #include "components/autofill/core/browser/autofill_profile.h"
@@ -134,8 +136,8 @@
 
 // Returns a profile with all fields set.  Contains identical data to the data
 // returned from ConstructCompleteSyncData().
-scoped_ptr<AutofillProfile> ConstructCompleteProfile() {
-  scoped_ptr<AutofillProfile> profile(
+std::unique_ptr<AutofillProfile> ConstructCompleteProfile() {
+  std::unique_ptr<AutofillProfile> profile(
       new AutofillProfile(kGuid1, kHttpsOrigin));
 
   profile->set_use_count(7);
@@ -244,14 +246,14 @@
     // Takes ownership of sync_processor_.
     autofill_syncable_service_.MergeDataAndStartSyncing(
         syncer::AUTOFILL_PROFILE, data_list, std::move(sync_processor_),
-        scoped_ptr<syncer::SyncErrorFactory>(
+        std::unique_ptr<syncer::SyncErrorFactory>(
             new syncer::SyncErrorFactoryMock()));
   }
 
  protected:
   base::MessageLoop message_loop_;
   MockAutofillProfileSyncableService autofill_syncable_service_;
-  scoped_ptr<MockSyncChangeProcessor> sync_processor_;
+  std::unique_ptr<MockSyncChangeProcessor> sync_processor_;
 };
 
 TEST_F(AutofillProfileSyncableServiceTest, MergeDataAndStartSyncing) {
@@ -685,7 +687,8 @@
   // Set up expectations: All fields correctly copied to the WebDB, and no
   // changes propagated to Sync.
   syncer::SyncChangeList expected_change_list;
-  scoped_ptr<AutofillProfile> expected_profile = ConstructCompleteProfile();
+  std::unique_ptr<AutofillProfile> expected_profile =
+      ConstructCompleteProfile();
   MockAutofillProfileSyncableService::DataBundle expected_bundle;
   expected_bundle.profiles_to_add.push_back(expected_profile.get());
 
@@ -1217,10 +1220,9 @@
       .Times(1)
       .WillOnce(Return(true));
   autofill_syncable_service_.MergeDataAndStartSyncing(
-      syncer::AUTOFILL_PROFILE,
-      data_list,
-      make_scoped_ptr(sync_change_processor),
-      scoped_ptr<syncer::SyncErrorFactory>(
+      syncer::AUTOFILL_PROFILE, data_list,
+      base::WrapUnique(sync_change_processor),
+      std::unique_ptr<syncer::SyncErrorFactory>(
           new syncer::SyncErrorFactoryMock()));
 
   // Update to the usage stats for that profile.
@@ -1255,8 +1257,9 @@
       .WillOnce(Return(true));
   autofill_syncable_service_.MergeDataAndStartSyncing(
       syncer::AUTOFILL_PROFILE, syncer::SyncDataList(),
-      make_scoped_ptr(new TestSyncChangeProcessor),
-      scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
+      base::WrapUnique(new TestSyncChangeProcessor),
+      std::unique_ptr<syncer::SyncErrorFactory>(
+          new syncer::SyncErrorFactoryMock()));
   AutofillProfile server_profile(AutofillProfile::SERVER_PROFILE, "server-id");
 
   // Should not crash:
diff --git a/components/autofill/core/browser/webdata/autofill_table.cc b/components/autofill/core/browser/webdata/autofill_table.cc
index 2b40540..fc234ae4 100644
--- a/components/autofill/core/browser/webdata/autofill_table.cc
+++ b/components/autofill/core/browser/webdata/autofill_table.cc
@@ -99,9 +99,9 @@
   s->BindString(index++, profile.language_code());
 }
 
-scoped_ptr<AutofillProfile> AutofillProfileFromStatement(
+std::unique_ptr<AutofillProfile> AutofillProfileFromStatement(
     const sql::Statement& s) {
-  scoped_ptr<AutofillProfile> profile(new AutofillProfile);
+  std::unique_ptr<AutofillProfile> profile(new AutofillProfile);
   int index = 0;
   profile->set_guid(s.ColumnString(index++));
   DCHECK(base::IsValidGUID(profile->guid()));
@@ -166,8 +166,8 @@
   return credit_card_number;
 }
 
-scoped_ptr<CreditCard> CreditCardFromStatement(const sql::Statement& s) {
-  scoped_ptr<CreditCard> credit_card(new CreditCard);
+std::unique_ptr<CreditCard> CreditCardFromStatement(const sql::Statement& s) {
+  std::unique_ptr<CreditCard> credit_card(new CreditCard);
 
   int index = 0;
   credit_card->set_guid(s.ColumnString(index++));
@@ -874,7 +874,7 @@
   return AddAutofillProfilePieces(profile, db_);
 }
 
-scoped_ptr<AutofillProfile> AutofillTable::GetAutofillProfile(
+std::unique_ptr<AutofillProfile> AutofillTable::GetAutofillProfile(
     const std::string& guid) {
   DCHECK(base::IsValidGUID(guid));
   sql::Statement s(db_->GetUniqueStatement(
@@ -885,7 +885,7 @@
       "WHERE guid=?"));
   s.BindString(0, guid);
 
-  scoped_ptr<AutofillProfile> p;
+  std::unique_ptr<AutofillProfile> p;
   if (!s.Step())
     return p;
 
@@ -915,7 +915,7 @@
 
   while (s.Step()) {
     std::string guid = s.ColumnString(0);
-    scoped_ptr<AutofillProfile> profile = GetAutofillProfile(guid);
+    std::unique_ptr<AutofillProfile> profile = GetAutofillProfile(guid);
     if (!profile)
       return false;
     profiles->push_back(profile.release());
@@ -949,7 +949,7 @@
 
   while (s.Step()) {
     int index = 0;
-    scoped_ptr<AutofillProfile> profile(new AutofillProfile(
+    std::unique_ptr<AutofillProfile> profile(new AutofillProfile(
         AutofillProfile::SERVER_PROFILE, s.ColumnString(index++)));
     profile->set_use_count(s.ColumnInt64(index++));
     profile->set_use_date(Time::FromInternalValue(s.ColumnInt64(index++)));
@@ -1049,7 +1049,8 @@
   if (!IsAutofillProfilesTrashEmpty())
     return true;
 
-  scoped_ptr<AutofillProfile> old_profile = GetAutofillProfile(profile.guid());
+  std::unique_ptr<AutofillProfile> old_profile =
+      GetAutofillProfile(profile.guid());
   if (!old_profile)
     return false;
 
@@ -1142,7 +1143,8 @@
   return true;
 }
 
-scoped_ptr<CreditCard> AutofillTable::GetCreditCard(const std::string& guid) {
+std::unique_ptr<CreditCard> AutofillTable::GetCreditCard(
+    const std::string& guid) {
   DCHECK(base::IsValidGUID(guid));
   sql::Statement s(db_->GetUniqueStatement(
       "SELECT guid, name_on_card, expiration_month, expiration_year, "
@@ -1153,7 +1155,7 @@
   s.BindString(0, guid);
 
   if (!s.Step())
-    return scoped_ptr<CreditCard>();
+    return std::unique_ptr<CreditCard>();
 
   return CreditCardFromStatement(s);
 }
@@ -1170,7 +1172,7 @@
 
   while (s.Step()) {
     std::string guid = s.ColumnString(0);
-    scoped_ptr<CreditCard> credit_card = GetCreditCard(guid);
+    std::unique_ptr<CreditCard> credit_card = GetCreditCard(guid);
     if (!credit_card)
       return false;
     credit_cards->push_back(credit_card.release());
@@ -1417,7 +1419,8 @@
 bool AutofillTable::UpdateCreditCard(const CreditCard& credit_card) {
   DCHECK(base::IsValidGUID(credit_card.guid()));
 
-  scoped_ptr<CreditCard> old_credit_card = GetCreditCard(credit_card.guid());
+  std::unique_ptr<CreditCard> old_credit_card =
+      GetCreditCard(credit_card.guid());
   if (!old_credit_card)
     return false;
 
@@ -1552,7 +1555,7 @@
     if (!s_profile.Run())
       return false;
 
-    scoped_ptr<AutofillProfile> profile = GetAutofillProfile(guid);
+    std::unique_ptr<AutofillProfile> profile = GetAutofillProfile(guid);
     if (!profile)
       return false;
 
diff --git a/components/autofill/core/browser/webdata/autofill_table.h b/components/autofill/core/browser/webdata/autofill_table.h
index 6bcf067..b0b949c 100644
--- a/components/autofill/core/browser/webdata/autofill_table.h
+++ b/components/autofill/core/browser/webdata/autofill_table.h
@@ -7,11 +7,11 @@
 
 #include <stddef.h>
 
+#include <memory>
 #include <vector>
 
 #include "base/gtest_prod_util.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/scoped_vector.h"
 #include "base/strings/string16.h"
 #include "components/webdata/common/web_database_table.h"
@@ -307,7 +307,7 @@
   virtual bool RemoveAutofillProfile(const std::string& guid);
 
   // Retrieves a profile with guid |guid|.
-  scoped_ptr<AutofillProfile> GetAutofillProfile(const std::string& guid);
+  std::unique_ptr<AutofillProfile> GetAutofillProfile(const std::string& guid);
 
   // Retrieves local/server profiles in the database. Caller owns the returned
   // profiles.
@@ -330,7 +330,7 @@
   bool RemoveCreditCard(const std::string& guid);
 
   // Retrieves a credit card with guid |guid|.
-  scoped_ptr<CreditCard> GetCreditCard(const std::string& guid);
+  std::unique_ptr<CreditCard> GetCreditCard(const std::string& guid);
 
   // Retrieves the local/server credit cards in the database. Caller owns the
   // returned credit cards.
diff --git a/components/autofill/core/browser/webdata/autofill_table_unittest.cc b/components/autofill/core/browser/webdata/autofill_table_unittest.cc
index e81c82a..0152b15 100644
--- a/components/autofill/core/browser/webdata/autofill_table_unittest.cc
+++ b/components/autofill/core/browser/webdata/autofill_table_unittest.cc
@@ -136,8 +136,8 @@
 
   base::FilePath file_;
   base::ScopedTempDir temp_dir_;
-  scoped_ptr<AutofillTable> table_;
-  scoped_ptr<WebDatabase> db_;
+  std::unique_ptr<AutofillTable> table_;
+  std::unique_ptr<WebDatabase> db_;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(AutofillTableTest);
@@ -729,7 +729,7 @@
   Time post_creation_time = Time::Now();
 
   // Get the 'Home' profile.
-  scoped_ptr<AutofillProfile> db_profile =
+  std::unique_ptr<AutofillProfile> db_profile =
       table_->GetAutofillProfile(home_profile.guid());
   ASSERT_TRUE(db_profile);
   EXPECT_EQ(home_profile, *db_profile);
@@ -868,7 +868,7 @@
   // adding it.
   EXPECT_TRUE(table_->AddAutofillGUIDToTrash(profile.guid()));
   EXPECT_TRUE(table_->AddAutofillProfile(profile));
-  scoped_ptr<AutofillProfile> added_profile =
+  std::unique_ptr<AutofillProfile> added_profile =
       table_->GetAutofillProfile(profile.guid());
   EXPECT_FALSE(added_profile);
 
@@ -886,7 +886,7 @@
   EXPECT_TRUE(table_->AddAutofillGUIDToTrash(profile.guid()));
   profile.SetRawInfo(NAME_FIRST, ASCIIToUTF16("Jane"));
   EXPECT_TRUE(table_->UpdateAutofillProfile(profile));
-  scoped_ptr<AutofillProfile> updated_profile =
+  std::unique_ptr<AutofillProfile> updated_profile =
       table_->GetAutofillProfile(profile.guid());
   EXPECT_TRUE(updated_profile);
   EXPECT_EQ(ASCIIToUTF16("John"), updated_profile->GetRawInfo(NAME_FIRST));
@@ -898,7 +898,7 @@
   // other clients remove it (via Sync say) then it is gone and doesn't need to
   // be processed further by |WebDataService|.
   EXPECT_TRUE(table_->RemoveAutofillProfile(profile.guid()));
-  scoped_ptr<AutofillProfile> removed_profile =
+  std::unique_ptr<AutofillProfile> removed_profile =
       table_->GetAutofillProfile(profile.guid());
   EXPECT_TRUE(removed_profile);
   EXPECT_FALSE(table_->IsAutofillGUIDInTrash(profile.guid()));
@@ -927,7 +927,7 @@
   Time post_creation_time = Time::Now();
 
   // Get the 'Work' credit card.
-  scoped_ptr<CreditCard> db_creditcard =
+  std::unique_ptr<CreditCard> db_creditcard =
       table_->GetCreditCard(work_creditcard.guid());
   ASSERT_TRUE(db_creditcard);
   EXPECT_EQ(work_creditcard, *db_creditcard);
@@ -1025,7 +1025,7 @@
   ASSERT_TRUE(s_mock_creation_date.Run());
 
   // Get the profile.
-  scoped_ptr<AutofillProfile> db_profile =
+  std::unique_ptr<AutofillProfile> db_profile =
       table_->GetAutofillProfile(profile.guid());
   ASSERT_TRUE(db_profile);
   EXPECT_EQ(profile, *db_profile);
@@ -1096,7 +1096,7 @@
   ASSERT_TRUE(s_mock_creation_date.Run());
 
   // Get the credit card.
-  scoped_ptr<CreditCard> db_credit_card =
+  std::unique_ptr<CreditCard> db_credit_card =
       table_->GetCreditCard(credit_card.guid());
   ASSERT_TRUE(db_credit_card);
   EXPECT_EQ(credit_card, *db_credit_card);
@@ -1175,7 +1175,7 @@
   ASSERT_TRUE(s_mock_creation_date.Run());
 
   // Get the profile.
-  scoped_ptr<AutofillProfile> db_profile =
+  std::unique_ptr<AutofillProfile> db_profile =
       table_->GetAutofillProfile(profile.guid());
   ASSERT_TRUE(db_profile);
   EXPECT_EQ(profile, *db_profile);
@@ -1222,7 +1222,7 @@
   ASSERT_TRUE(s_mock_creation_date.Run());
 
   // Get the credit card.
-  scoped_ptr<CreditCard> db_credit_card =
+  std::unique_ptr<CreditCard> db_credit_card =
       table_->GetCreditCard(credit_card.guid());
   ASSERT_TRUE(db_credit_card);
   EXPECT_EQ(credit_card, *db_credit_card);
diff --git a/components/autofill/core/browser/webdata/autofill_wallet_metadata_syncable_service.cc b/components/autofill/core/browser/webdata/autofill_wallet_metadata_syncable_service.cc
index d69c9e50..b6cd2647 100644
--- a/components/autofill/core/browser/webdata/autofill_wallet_metadata_syncable_service.cc
+++ b/components/autofill/core/browser/webdata/autofill_wallet_metadata_syncable_service.cc
@@ -5,6 +5,7 @@
 #include "components/autofill/core/browser/webdata/autofill_wallet_metadata_syncable_service.h"
 
 #include <stddef.h>
+
 #include <utility>
 
 #include "base/base64.h"
@@ -12,6 +13,7 @@
 #include "base/containers/scoped_ptr_hash_map.h"
 #include "base/location.h"
 #include "base/logging.h"
+#include "base/memory/ptr_util.h"
 #include "base/memory/scoped_vector.h"
 #include "base/numerics/safe_conversions.h"
 #include "base/time/time.h"
@@ -71,11 +73,11 @@
 void UndeleteMetadataIfExisting(
     const std::string& server_id,
     const sync_pb::WalletMetadataSpecifics::Type& metadata_type,
-    base::ScopedPtrHashMap<std::string, scoped_ptr<DataType>>* locals,
+    base::ScopedPtrHashMap<std::string, std::unique_ptr<DataType>>* locals,
     syncer::SyncChangeList* changes_to_sync) {
   const auto& it = locals->find(server_id);
   if (it != locals->end()) {
-    scoped_ptr<DataType> local_metadata = locals->take_and_erase(it);
+    std::unique_ptr<DataType> local_metadata = locals->take_and_erase(it);
     changes_to_sync->push_back(syncer::SyncChange(
         FROM_HERE, syncer::SyncChange::ACTION_ADD,
         BuildSyncData(metadata_type, server_id, *local_metadata)));
@@ -149,7 +151,7 @@
 bool MergeRemote(
     const syncer::SyncData& remote,
     const base::Callback<bool(const DataType&)>& updater,
-    base::ScopedPtrHashMap<std::string, scoped_ptr<DataType>>* locals,
+    base::ScopedPtrHashMap<std::string, std::unique_ptr<DataType>>* locals,
     syncer::SyncChangeList* changes_to_sync) {
   DCHECK(locals);
   DCHECK(changes_to_sync);
@@ -160,7 +162,7 @@
   if (it == locals->end())
     return false;
 
-  scoped_ptr<DataType> local_metadata = locals->take_and_erase(it);
+  std::unique_ptr<DataType> local_metadata = locals->take_and_erase(it);
 
   size_t remote_use_count =
       base::checked_cast<size_t>(remote_metadata.use_count());
@@ -211,8 +213,8 @@
 AutofillWalletMetadataSyncableService::MergeDataAndStartSyncing(
     syncer::ModelType type,
     const syncer::SyncDataList& initial_sync_data,
-    scoped_ptr<syncer::SyncChangeProcessor> sync_processor,
-    scoped_ptr<syncer::SyncErrorFactory> sync_error_factory) {
+    std::unique_ptr<syncer::SyncChangeProcessor> sync_processor,
+    std::unique_ptr<syncer::SyncErrorFactory> sync_error_factory) {
   DCHECK(thread_checker_.CalledOnValidThread());
   DCHECK(!sync_processor_);
   DCHECK(!sync_error_factory_);
@@ -242,8 +244,9 @@
   DCHECK_EQ(syncer::AUTOFILL_WALLET_METADATA, type);
 
   syncer::SyncDataList data_list;
-  base::ScopedPtrHashMap<std::string, scoped_ptr<AutofillProfile>> profiles;
-  base::ScopedPtrHashMap<std::string, scoped_ptr<CreditCard>> cards;
+  base::ScopedPtrHashMap<std::string, std::unique_ptr<AutofillProfile>>
+      profiles;
+  base::ScopedPtrHashMap<std::string, std::unique_ptr<CreditCard>> cards;
   if (GetLocalData(&profiles, &cards)) {
     for (const auto& it : profiles) {
       data_list.push_back(BuildSyncData(
@@ -266,8 +269,9 @@
 
   ApplyChangesToCache(changes_from_sync, &cache_);
 
-  base::ScopedPtrHashMap<std::string, scoped_ptr<AutofillProfile>> profiles;
-  base::ScopedPtrHashMap<std::string, scoped_ptr<CreditCard>> cards;
+  base::ScopedPtrHashMap<std::string, std::unique_ptr<AutofillProfile>>
+      profiles;
+  base::ScopedPtrHashMap<std::string, std::unique_ptr<CreditCard>> cards;
   GetLocalData(&profiles, &cards);
 
   // base::Unretained is used because the callbacks are invoked synchronously.
@@ -392,15 +396,17 @@
 }
 
 bool AutofillWalletMetadataSyncableService::GetLocalData(
-    base::ScopedPtrHashMap<std::string, scoped_ptr<AutofillProfile>>* profiles,
-    base::ScopedPtrHashMap<std::string, scoped_ptr<CreditCard>>* cards) const {
+    base::ScopedPtrHashMap<std::string, std::unique_ptr<AutofillProfile>>*
+        profiles,
+    base::ScopedPtrHashMap<std::string, std::unique_ptr<CreditCard>>* cards)
+    const {
   ScopedVector<AutofillProfile> profile_list;
   bool success =
       AutofillTable::FromWebDatabase(web_data_backend_->GetDatabase())
           ->GetServerProfiles(&profile_list.get());
   while (!profile_list.empty()) {
     profiles->add(GetServerId(*profile_list.front()),
-                  make_scoped_ptr(profile_list.front()));
+                  base::WrapUnique(profile_list.front()));
     profile_list.weak_erase(profile_list.begin());
   }
 
@@ -409,7 +415,7 @@
                  ->GetServerCreditCards(&card_list.get());
   while (!card_list.empty()) {
     cards->add(GetServerId(*card_list.front()),
-               make_scoped_ptr(card_list.front()));
+               base::WrapUnique(card_list.front()));
     card_list.weak_erase(card_list.begin());
   }
 
@@ -438,8 +444,9 @@
 
 syncer::SyncMergeResult AutofillWalletMetadataSyncableService::MergeData(
     const syncer::SyncDataList& sync_data) {
-  base::ScopedPtrHashMap<std::string, scoped_ptr<AutofillProfile>> profiles;
-  base::ScopedPtrHashMap<std::string, scoped_ptr<CreditCard>> cards;
+  base::ScopedPtrHashMap<std::string, std::unique_ptr<AutofillProfile>>
+      profiles;
+  base::ScopedPtrHashMap<std::string, std::unique_ptr<CreditCard>> cards;
   GetLocalData(&profiles, &cards);
 
   syncer::SyncMergeResult result(syncer::AUTOFILL_WALLET_METADATA);
diff --git a/components/autofill/core/browser/webdata/autofill_wallet_metadata_syncable_service.h b/components/autofill/core/browser/webdata/autofill_wallet_metadata_syncable_service.h
index 8411fc1..55b4434 100644
--- a/components/autofill/core/browser/webdata/autofill_wallet_metadata_syncable_service.h
+++ b/components/autofill/core/browser/webdata/autofill_wallet_metadata_syncable_service.h
@@ -5,11 +5,11 @@
 #ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_WEBDATA_AUTOFILL_WALLET_METADATA_SYNCABLE_SERVICE_H_
 #define COMPONENTS_AUTOFILL_CORE_BROWSER_WEBDATA_AUTOFILL_WALLET_METADATA_SYNCABLE_SERVICE_H_
 
+#include <memory>
 #include <string>
 
 #include "base/callback_forward.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/scoped_observer.h"
 #include "base/supports_user_data.h"
 #include "base/threading/thread_checker.h"
@@ -61,8 +61,8 @@
   syncer::SyncMergeResult MergeDataAndStartSyncing(
       syncer::ModelType type,
       const syncer::SyncDataList& initial_sync_data,
-      scoped_ptr<syncer::SyncChangeProcessor> sync_processor,
-      scoped_ptr<syncer::SyncErrorFactory> sync_error_factory) override;
+      std::unique_ptr<syncer::SyncChangeProcessor> sync_processor,
+      std::unique_ptr<syncer::SyncErrorFactory> sync_error_factory) override;
   void StopSyncing(syncer::ModelType type) override;
   syncer::SyncDataList GetAllSyncData(syncer::ModelType type) const override;
   syncer::SyncError ProcessSyncChanges(
@@ -97,9 +97,10 @@
   // to server profiles and server cards read from disk. This data contains the
   // usage stats. Returns true on success.
   virtual bool GetLocalData(
-      base::ScopedPtrHashMap<std::string, scoped_ptr<AutofillProfile>>*
+      base::ScopedPtrHashMap<std::string, std::unique_ptr<AutofillProfile>>*
           profiles,
-      base::ScopedPtrHashMap<std::string, scoped_ptr<CreditCard>>* cards) const;
+      base::ScopedPtrHashMap<std::string, std::unique_ptr<CreditCard>>* cards)
+      const;
 
   // Updates the stats for |profile| stored on disk. Does not trigger
   // notifications that this profile was updated.
@@ -137,8 +138,8 @@
   AutofillWebDataBackend* web_data_backend_;  // Weak ref.
   ScopedObserver<AutofillWebDataBackend, AutofillWalletMetadataSyncableService>
       scoped_observer_;
-  scoped_ptr<syncer::SyncChangeProcessor> sync_processor_;
-  scoped_ptr<syncer::SyncErrorFactory> sync_error_factory_;
+  std::unique_ptr<syncer::SyncChangeProcessor> sync_processor_;
+  std::unique_ptr<syncer::SyncErrorFactory> sync_error_factory_;
 
   // Local metadata plus metadata for the data that hasn't synced down yet.
   syncer::SyncDataList cache_;
diff --git a/components/autofill/core/browser/webdata/autofill_wallet_metadata_syncable_service_unittest.cc b/components/autofill/core/browser/webdata/autofill_wallet_metadata_syncable_service_unittest.cc
index 2106e0fa..1c22d70 100644
--- a/components/autofill/core/browser/webdata/autofill_wallet_metadata_syncable_service_unittest.cc
+++ b/components/autofill/core/browser/webdata/autofill_wallet_metadata_syncable_service_unittest.cc
@@ -6,6 +6,7 @@
 
 #include <stddef.h>
 #include <stdint.h>
+
 #include <utility>
 #include <vector>
 
@@ -13,6 +14,7 @@
 #include "base/containers/scoped_ptr_hash_map.h"
 #include "base/location.h"
 #include "base/macros.h"
+#include "base/memory/ptr_util.h"
 #include "base/numerics/safe_conversions.h"
 #include "base/time/time.h"
 #include "components/autofill/core/browser/autofill_profile.h"
@@ -63,13 +65,13 @@
   for (const auto& profile : *profiles) {
     std::string utf8_server_id;
     base::Base64Encode(profile.server_id(), &utf8_server_id);
-    arg0->add(utf8_server_id, make_scoped_ptr(new AutofillProfile(profile)));
+    arg0->add(utf8_server_id, base::WrapUnique(new AutofillProfile(profile)));
   }
 
   for (const auto& card : *cards) {
     std::string utf8_server_id;
     base::Base64Encode(card.server_id(), &utf8_server_id);
-    arg1->add(utf8_server_id, make_scoped_ptr(new CreditCard(card)));
+    arg1->add(utf8_server_id, base::WrapUnique(new CreditCard(card)));
   }
 }
 
@@ -119,8 +121,9 @@
  private:
   MOCK_CONST_METHOD2(
       GetLocalData,
-      bool(base::ScopedPtrHashMap<std::string, scoped_ptr<AutofillProfile>>*,
-           base::ScopedPtrHashMap<std::string, scoped_ptr<CreditCard>>*));
+      bool(base::ScopedPtrHashMap<std::string,
+                                  std::unique_ptr<AutofillProfile>>*,
+           base::ScopedPtrHashMap<std::string, std::unique_ptr<CreditCard>>*));
 
   syncer::SyncError SendChangesToSyncServerConcrete(
       const syncer::SyncChangeList& changes) {
@@ -234,16 +237,17 @@
   ON_CALL(*remote, SendChangesToSyncServer(_))
       .WillByDefault(Return(syncer::SyncError()));
 
-  scoped_ptr<syncer::SyncErrorFactoryMock> errors(
+  std::unique_ptr<syncer::SyncErrorFactoryMock> errors(
       new syncer::SyncErrorFactoryMock);
   EXPECT_CALL(*errors, CreateAndUploadError(_, _)).Times(0);
   EXPECT_FALSE(
-      local->MergeDataAndStartSyncing(
-               syncer::AUTOFILL_WALLET_METADATA,
-               remote->GetAllSyncData(syncer::AUTOFILL_WALLET_METADATA),
-               scoped_ptr<syncer::SyncChangeProcessor>(
-                   new syncer::SyncChangeProcessorWrapperForTest(remote)),
-               std::move(errors))
+      local
+          ->MergeDataAndStartSyncing(
+              syncer::AUTOFILL_WALLET_METADATA,
+              remote->GetAllSyncData(syncer::AUTOFILL_WALLET_METADATA),
+              std::unique_ptr<syncer::SyncChangeProcessor>(
+                  new syncer::SyncChangeProcessorWrapperForTest(remote)),
+              std::move(errors))
           .error()
           .IsSet());
 }
diff --git a/components/autofill/core/browser/webdata/autofill_wallet_syncable_service.cc b/components/autofill/core/browser/webdata/autofill_wallet_syncable_service.cc
index ae584e7..ba38cba 100644
--- a/components/autofill/core/browser/webdata/autofill_wallet_syncable_service.cc
+++ b/components/autofill/core/browser/webdata/autofill_wallet_syncable_service.cc
@@ -190,12 +190,11 @@
 AutofillWalletSyncableService::~AutofillWalletSyncableService() {
 }
 
-syncer::SyncMergeResult
-AutofillWalletSyncableService::MergeDataAndStartSyncing(
+syncer::SyncMergeResult AutofillWalletSyncableService::MergeDataAndStartSyncing(
     syncer::ModelType type,
     const syncer::SyncDataList& initial_sync_data,
-    scoped_ptr<syncer::SyncChangeProcessor> sync_processor,
-    scoped_ptr<syncer::SyncErrorFactory> sync_error_factory) {
+    std::unique_ptr<syncer::SyncChangeProcessor> sync_processor,
+    std::unique_ptr<syncer::SyncErrorFactory> sync_error_factory) {
   DCHECK(thread_checker_.CalledOnValidThread());
   sync_processor_ = std::move(sync_processor);
   return SetSyncData(initial_sync_data);
diff --git a/components/autofill/core/browser/webdata/autofill_wallet_syncable_service.h b/components/autofill/core/browser/webdata/autofill_wallet_syncable_service.h
index 3a156ac..7042baa4 100644
--- a/components/autofill/core/browser/webdata/autofill_wallet_syncable_service.h
+++ b/components/autofill/core/browser/webdata/autofill_wallet_syncable_service.h
@@ -27,8 +27,8 @@
   syncer::SyncMergeResult MergeDataAndStartSyncing(
       syncer::ModelType type,
       const syncer::SyncDataList& initial_sync_data,
-      scoped_ptr<syncer::SyncChangeProcessor> sync_processor,
-      scoped_ptr<syncer::SyncErrorFactory> sync_error_factory) override;
+      std::unique_ptr<syncer::SyncChangeProcessor> sync_processor,
+      std::unique_ptr<syncer::SyncErrorFactory> sync_error_factory) override;
   void StopSyncing(syncer::ModelType type) override;
   syncer::SyncDataList GetAllSyncData(syncer::ModelType type) const override;
   syncer::SyncError ProcessSyncChanges(
@@ -64,7 +64,7 @@
 
   AutofillWebDataBackend* webdata_backend_;  // Weak ref.
 
-  scoped_ptr<syncer::SyncChangeProcessor> sync_processor_;
+  std::unique_ptr<syncer::SyncChangeProcessor> sync_processor_;
 
   syncer::SyncableService::StartSyncFlare flare_;
 
diff --git a/components/autofill/core/browser/webdata/autofill_webdata.h b/components/autofill/core/browser/webdata/autofill_webdata.h
index 069731cc..06219a4 100644
--- a/components/autofill/core/browser/webdata/autofill_webdata.h
+++ b/components/autofill/core/browser/webdata/autofill_webdata.h
@@ -8,7 +8,6 @@
 #include <string>
 #include <vector>
 
-#include "base/memory/scoped_ptr.h"
 #include "base/strings/string16.h"
 #include "components/webdata/common/web_data_service_base.h"
 
diff --git a/components/autofill/core/browser/webdata/autofill_webdata_backend_impl.cc b/components/autofill/core/browser/webdata/autofill_webdata_backend_impl.cc
index 655285c..bcbb7a36 100644
--- a/components/autofill/core/browser/webdata/autofill_webdata_backend_impl.cc
+++ b/components/autofill/core/browser/webdata/autofill_webdata_backend_impl.cc
@@ -107,17 +107,18 @@
   return WebDatabase::COMMIT_NEEDED;
 }
 
-scoped_ptr<WDTypedResult>
+std::unique_ptr<WDTypedResult>
 AutofillWebDataBackendImpl::GetFormValuesForElementName(
-    const base::string16& name, const base::string16& prefix, int limit,
+    const base::string16& name,
+    const base::string16& prefix,
+    int limit,
     WebDatabase* db) {
   DCHECK(db_thread_->BelongsToCurrentThread());
   std::vector<base::string16> values;
   AutofillTable::FromWebDatabase(db)->GetFormValuesForElementName(
       name, prefix, &values, limit);
-  return scoped_ptr<WDTypedResult>(
-      new WDResult<std::vector<base::string16> >(AUTOFILL_VALUE_RESULT,
-                                                 values));
+  return std::unique_ptr<WDTypedResult>(
+      new WDResult<std::vector<base::string16>>(AUTOFILL_VALUE_RESULT, values));
 }
 
 WebDatabase::State AutofillWebDataBackendImpl::RemoveFormElementsAddedBetween(
@@ -185,7 +186,7 @@
   // Only perform the update if the profile exists.  It is currently
   // valid to try to update a missing profile.  We simply drop the write and
   // the caller will detect this on the next refresh.
-  scoped_ptr<AutofillProfile> original_profile =
+  std::unique_ptr<AutofillProfile> original_profile =
       AutofillTable::FromWebDatabase(db)->GetAutofillProfile(profile.guid());
   if (!original_profile) {
     return WebDatabase::COMMIT_NOT_NEEDED;
@@ -208,7 +209,7 @@
 WebDatabase::State AutofillWebDataBackendImpl::RemoveAutofillProfile(
     const std::string& guid, WebDatabase* db) {
   DCHECK(db_thread_->BelongsToCurrentThread());
-  scoped_ptr<AutofillProfile> profile =
+  std::unique_ptr<AutofillProfile> profile =
       AutofillTable::FromWebDatabase(db)->GetAutofillProfile(guid);
   if (!profile) {
     NOTREACHED();
@@ -229,41 +230,39 @@
   return WebDatabase::COMMIT_NEEDED;
 }
 
-scoped_ptr<WDTypedResult> AutofillWebDataBackendImpl::GetAutofillProfiles(
+std::unique_ptr<WDTypedResult> AutofillWebDataBackendImpl::GetAutofillProfiles(
     WebDatabase* db) {
   DCHECK(db_thread_->BelongsToCurrentThread());
   std::vector<AutofillProfile*> profiles;
   AutofillTable::FromWebDatabase(db)->GetAutofillProfiles(&profiles);
-  return scoped_ptr<WDTypedResult>(
-      new WDDestroyableResult<std::vector<AutofillProfile*> >(
-          AUTOFILL_PROFILES_RESULT,
-          profiles,
+  return std::unique_ptr<WDTypedResult>(
+      new WDDestroyableResult<std::vector<AutofillProfile*>>(
+          AUTOFILL_PROFILES_RESULT, profiles,
           base::Bind(&AutofillWebDataBackendImpl::DestroyAutofillProfileResult,
-              base::Unretained(this))));
+                     base::Unretained(this))));
 }
 
-scoped_ptr<WDTypedResult> AutofillWebDataBackendImpl::GetServerProfiles(
+std::unique_ptr<WDTypedResult> AutofillWebDataBackendImpl::GetServerProfiles(
     WebDatabase* db) {
   DCHECK(db_thread_->BelongsToCurrentThread());
   std::vector<AutofillProfile*> profiles;
   AutofillTable::FromWebDatabase(db)->GetServerProfiles(&profiles);
-  return scoped_ptr<WDTypedResult>(
-      new WDDestroyableResult<std::vector<AutofillProfile*> >(
-          AUTOFILL_PROFILES_RESULT,
-          profiles,
+  return std::unique_ptr<WDTypedResult>(
+      new WDDestroyableResult<std::vector<AutofillProfile*>>(
+          AUTOFILL_PROFILES_RESULT, profiles,
           base::Bind(&AutofillWebDataBackendImpl::DestroyAutofillProfileResult,
-              base::Unretained(this))));
+                     base::Unretained(this))));
 }
 
-scoped_ptr<WDTypedResult>
-    AutofillWebDataBackendImpl::GetCountOfValuesContainedBetween(
-        const base::Time& begin,
-        const base::Time& end,
-        WebDatabase* db) {
+std::unique_ptr<WDTypedResult>
+AutofillWebDataBackendImpl::GetCountOfValuesContainedBetween(
+    const base::Time& begin,
+    const base::Time& end,
+    WebDatabase* db) {
   DCHECK(db_thread_->BelongsToCurrentThread());
   int value = AutofillTable::FromWebDatabase(db)
       ->GetCountOfValuesContainedBetween(begin, end);
-  return scoped_ptr<WDTypedResult>(
+  return std::unique_ptr<WDTypedResult>(
       new WDResult<int>(AUTOFILL_VALUE_RESULT, value));
 }
 
@@ -298,7 +297,7 @@
   DCHECK(db_thread_->BelongsToCurrentThread());
   // It is currently valid to try to update a missing profile.  We simply drop
   // the write and the caller will detect this on the next refresh.
-  scoped_ptr<CreditCard> original_credit_card =
+  std::unique_ptr<CreditCard> original_credit_card =
       AutofillTable::FromWebDatabase(db)->GetCreditCard(credit_card.guid());
   if (!original_credit_card)
     return WebDatabase::COMMIT_NOT_NEEDED;
@@ -329,29 +328,29 @@
   return WebDatabase::COMMIT_NEEDED;
 }
 
-scoped_ptr<WDTypedResult> AutofillWebDataBackendImpl::GetCreditCards(
+std::unique_ptr<WDTypedResult> AutofillWebDataBackendImpl::GetCreditCards(
     WebDatabase* db) {
   DCHECK(db_thread_->BelongsToCurrentThread());
   std::vector<CreditCard*> credit_cards;
   AutofillTable::FromWebDatabase(db)->GetCreditCards(&credit_cards);
-  return scoped_ptr<WDTypedResult>(
-      new WDDestroyableResult<std::vector<CreditCard*> >(
-          AUTOFILL_CREDITCARDS_RESULT,
-          credit_cards,
-        base::Bind(&AutofillWebDataBackendImpl::DestroyAutofillCreditCardResult,
+  return std::unique_ptr<WDTypedResult>(
+      new WDDestroyableResult<std::vector<CreditCard*>>(
+          AUTOFILL_CREDITCARDS_RESULT, credit_cards,
+          base::Bind(
+              &AutofillWebDataBackendImpl::DestroyAutofillCreditCardResult,
               base::Unretained(this))));
 }
 
-scoped_ptr<WDTypedResult> AutofillWebDataBackendImpl::GetServerCreditCards(
+std::unique_ptr<WDTypedResult> AutofillWebDataBackendImpl::GetServerCreditCards(
     WebDatabase* db) {
   DCHECK(db_thread_->BelongsToCurrentThread());
   std::vector<CreditCard*> credit_cards;
   AutofillTable::FromWebDatabase(db)->GetServerCreditCards(&credit_cards);
-  return scoped_ptr<WDTypedResult>(
-      new WDDestroyableResult<std::vector<CreditCard*> >(
-          AUTOFILL_CREDITCARDS_RESULT,
-          credit_cards,
-        base::Bind(&AutofillWebDataBackendImpl::DestroyAutofillCreditCardResult,
+  return std::unique_ptr<WDTypedResult>(
+      new WDDestroyableResult<std::vector<CreditCard*>>(
+          AUTOFILL_CREDITCARDS_RESULT, credit_cards,
+          base::Bind(
+              &AutofillWebDataBackendImpl::DestroyAutofillCreditCardResult,
               base::Unretained(this))));
 }
 
diff --git a/components/autofill/core/browser/webdata/autofill_webdata_backend_impl.h b/components/autofill/core/browser/webdata/autofill_webdata_backend_impl.h
index f0bcb63..29c0941 100644
--- a/components/autofill/core/browser/webdata/autofill_webdata_backend_impl.h
+++ b/components/autofill/core/browser/webdata/autofill_webdata_backend_impl.h
@@ -5,10 +5,11 @@
 #ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_WEBDATA_AUTOFILL_WEBDATA_BACKEND_IMPL_H_
 #define COMPONENTS_AUTOFILL_CORE_BROWSER_WEBDATA_AUTOFILL_WEBDATA_BACKEND_IMPL_H_
 
+#include <memory>
+
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/ref_counted_delete_on_message_loop.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/observer_list.h"
 #include "base/supports_user_data.h"
 #include "components/autofill/core/browser/webdata/autofill_webdata.h"
@@ -75,7 +76,7 @@
 
   // Returns a vector of values which have been entered in form input fields
   // named |name|.
-  scoped_ptr<WDTypedResult> GetFormValuesForElementName(
+  std::unique_ptr<WDTypedResult> GetFormValuesForElementName(
       const base::string16& name,
       const base::string16& prefix,
       int limit,
@@ -109,13 +110,13 @@
                                            WebDatabase* db);
 
   // Returns the local/server Autofill profiles from the web database.
-  scoped_ptr<WDTypedResult> GetAutofillProfiles(WebDatabase* db);
-  scoped_ptr<WDTypedResult> GetServerProfiles(WebDatabase* db);
+  std::unique_ptr<WDTypedResult> GetAutofillProfiles(WebDatabase* db);
+  std::unique_ptr<WDTypedResult> GetServerProfiles(WebDatabase* db);
 
   // Returns the number of values such that all for autofill entries with that
   // value, the interval between creation date and last usage is entirely
   // contained between [|begin|, |end|).
-  scoped_ptr<WDTypedResult> GetCountOfValuesContainedBetween(
+  std::unique_ptr<WDTypedResult> GetCountOfValuesContainedBetween(
       const base::Time& begin,
       const base::Time& end,
       WebDatabase* db);
@@ -138,8 +139,8 @@
                                       WebDatabase* db);
 
   // Returns a vector of local/server credit cards from the web database.
-  scoped_ptr<WDTypedResult> GetCreditCards(WebDatabase* db);
-  scoped_ptr<WDTypedResult> GetServerCreditCards(WebDatabase* db);
+  std::unique_ptr<WDTypedResult> GetCreditCards(WebDatabase* db);
+  std::unique_ptr<WDTypedResult> GetServerCreditCards(WebDatabase* db);
 
   // Server credit cards can be masked (only last 4 digits stored) or unmasked
   // (all data stored). These toggle between the two states.
@@ -202,7 +203,7 @@
   // Storage for user data to be accessed only on the DB thread. May
   // be used e.g. for SyncableService subclasses that need to be owned
   // by this object. Is created on first call to |GetDBUserData()|.
-  scoped_ptr<SupportsUserDataAggregatable> user_data_;
+  std::unique_ptr<SupportsUserDataAggregatable> user_data_;
 
   WebDatabase::State RemoveExpiredFormElementsImpl(WebDatabase* db);
 
diff --git a/components/autofill/core/browser/webdata/web_data_service_unittest.cc b/components/autofill/core/browser/webdata/web_data_service_unittest.cc
index 87545b4..6c0a7db0 100644
--- a/components/autofill/core/browser/webdata/web_data_service_unittest.cc
+++ b/components/autofill/core/browser/webdata/web_data_service_unittest.cc
@@ -2,6 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include <memory>
 #include <string>
 #include <vector>
 
@@ -9,8 +10,8 @@
 #include "base/files/scoped_temp_dir.h"
 #include "base/location.h"
 #include "base/macros.h"
+#include "base/memory/ptr_util.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/single_thread_task_runner.h"
 #include "base/stl_util.h"
 #include "base/strings/string16.h"
@@ -103,7 +104,7 @@
 
     wdbs_ = new WebDatabaseService(path, base::ThreadTaskRunnerHandle::Get(),
                                    db_thread_.task_runner());
-    wdbs_->AddTable(make_scoped_ptr(new AutofillTable));
+    wdbs_->AddTable(base::WrapUnique(new AutofillTable));
     wdbs_->LoadDatabase();
 
     wds_ = new AutofillWebDataService(
diff --git a/components/autofill/core/common/autofill_l10n_util.cc b/components/autofill/core/common/autofill_l10n_util.cc
index dda5a32..9ab031f 100644
--- a/components/autofill/core/common/autofill_l10n_util.cc
+++ b/components/autofill/core/common/autofill_l10n_util.cc
@@ -9,14 +9,15 @@
 
 #include "base/i18n/string_compare.h"
 #include "base/logging.h"
+#include "base/memory/ptr_util.h"
 #include "base/metrics/histogram_macros.h"
 
 namespace autofill {
 namespace l10n {
 
-scoped_ptr<icu::Collator> GetCollatorForLocale(const icu::Locale& locale) {
+std::unique_ptr<icu::Collator> GetCollatorForLocale(const icu::Locale& locale) {
   UErrorCode ignored = U_ZERO_ERROR;
-  scoped_ptr<icu::Collator> collator(
+  std::unique_ptr<icu::Collator> collator(
       icu::Collator::createInstance(locale, ignored));
   if (!collator) {
     // On some systems, the default locale is invalid to the eyes of the ICU
@@ -30,7 +31,7 @@
                << locale_name;
 
     // Attempt to load the English locale.
-    collator = make_scoped_ptr(
+    collator = base::WrapUnique(
         icu::Collator::createInstance(icu::Locale::getEnglish(), ignored));
     if (!collator) {
       LOG(ERROR) << "Failed to initialize the ICU Collator with the English "
diff --git a/components/autofill/core/common/autofill_l10n_util.h b/components/autofill/core/common/autofill_l10n_util.h
index 27c7247..ada5bc7 100644
--- a/components/autofill/core/common/autofill_l10n_util.h
+++ b/components/autofill/core/common/autofill_l10n_util.h
@@ -5,8 +5,9 @@
 #ifndef COMPONENTS_AUTOFILL_CORE_COMMON_AUTOFILL_L10N_UTIL_H_
 #define COMPONENTS_AUTOFILL_CORE_COMMON_AUTOFILL_L10N_UTIL_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/strings/string16.h"
 #include "third_party/icu/source/common/unicode/locid.h"
 #include "third_party/icu/source/i18n/unicode/coll.h"
@@ -16,7 +17,7 @@
 
 // Obtains the ICU Collator for this locale. If unsuccessful, attempts to return
 // the ICU collator for the English locale. If unsuccessful, returns null.
-scoped_ptr<icu::Collator> GetCollatorForLocale(const icu::Locale& locale);
+std::unique_ptr<icu::Collator> GetCollatorForLocale(const icu::Locale& locale);
 
 // Assists with locale-aware case insensitive string comparisons.
 class CaseInsensitiveCompare {
@@ -29,7 +30,7 @@
   bool StringsEqual(const base::string16& lhs, const base::string16& rhs) const;
 
  private:
-  scoped_ptr<icu::Collator> collator_;
+  std::unique_ptr<icu::Collator> collator_;
 
   DISALLOW_COPY_AND_ASSIGN(CaseInsensitiveCompare);
 };
diff --git a/components/autofill/core/common/autofill_regexes.cc b/components/autofill/core/common/autofill_regexes.cc
index 91db50e07..dc3dd58 100644
--- a/components/autofill/core/common/autofill_regexes.cc
+++ b/components/autofill/core/common/autofill_regexes.cc
@@ -4,12 +4,12 @@
 
 #include "components/autofill/core/common/autofill_regexes.h"
 
+#include <memory>
 #include <utility>
 
 #include "base/containers/scoped_ptr_hash_map.h"
 #include "base/logging.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/singleton.h"
 #include "base/strings/string16.h"
 #include "third_party/icu/source/i18n/unicode/regex.h"
@@ -30,7 +30,7 @@
   friend struct base::DefaultSingletonTraits<AutofillRegexes>;
 
   // Maps patterns to their corresponding regex matchers.
-  base::ScopedPtrHashMap<base::string16, scoped_ptr<icu::RegexMatcher>>
+  base::ScopedPtrHashMap<base::string16, std::unique_ptr<icu::RegexMatcher>>
       matchers_;
 
   DISALLOW_COPY_AND_ASSIGN(AutofillRegexes);
@@ -53,7 +53,7 @@
     const icu::UnicodeString icu_pattern(pattern.data(), pattern.length());
 
     UErrorCode status = U_ZERO_ERROR;
-    scoped_ptr<icu::RegexMatcher> matcher(
+    std::unique_ptr<icu::RegexMatcher> matcher(
         new icu::RegexMatcher(icu_pattern, UREGEX_CASE_INSENSITIVE, status));
     DCHECK(U_SUCCESS(status));
 
diff --git a/components/autofill/core/common/password_form.h b/components/autofill/core/common/password_form.h
index 2ae86b8a..e28d3b8 100644
--- a/components/autofill/core/common/password_form.h
+++ b/components/autofill/core/common/password_form.h
@@ -6,10 +6,10 @@
 #define COMPONENTS_AUTOFILL_CORE_COMMON_PASSWORD_FORM_H__
 
 #include <map>
+#include <memory>
 #include <string>
 #include <vector>
 
-#include "base/memory/scoped_ptr.h"
 #include "base/time/time.h"
 #include "components/autofill/core/common/form_data.h"
 #include "url/gurl.h"
@@ -303,7 +303,7 @@
 };
 
 // Map username to PasswordForm* for convenience. See password_form_manager.h.
-using PasswordFormMap = std::map<base::string16, scoped_ptr<PasswordForm>>;
+using PasswordFormMap = std::map<base::string16, std::unique_ptr<PasswordForm>>;
 
 // Like PasswordFormMap, but with weak (not owned) pointers.
 using ConstPasswordFormMap = std::map<base::string16, const PasswordForm*>;
diff --git a/components/autofill/core/common/password_form_fill_data.h b/components/autofill/core/common/password_form_fill_data.h
index dbe90a1..9c7819a 100644
--- a/components/autofill/core/common/password_form_fill_data.h
+++ b/components/autofill/core/common/password_form_fill_data.h
@@ -7,7 +7,6 @@
 
 #include <map>
 
-#include "base/memory/scoped_ptr.h"
 #include "components/autofill/core/common/form_data.h"
 #include "components/autofill/core/common/password_form.h"
 
diff --git a/components/autofill/core/common/password_form_fill_data_unittest.cc b/components/autofill/core/common/password_form_fill_data_unittest.cc
index 9dc77db..e4734cc3 100644
--- a/components/autofill/core/common/password_form_fill_data_unittest.cc
+++ b/components/autofill/core/common/password_form_fill_data_unittest.cc
@@ -4,9 +4,9 @@
 
 #include "components/autofill/core/common/password_form_fill_data.h"
 
+#include <memory>
 #include <utility>
 
-#include "base/memory/scoped_ptr.h"
 #include "base/strings/utf_string_conversions.h"
 #include "components/autofill/core/common/password_form.h"
 #include "testing/gmock/include/gmock/gmock.h"
@@ -113,7 +113,7 @@
 
   // Create a match that matches exactly, so |is_public_suffix_match| has a
   // default value false.
-  scoped_ptr<PasswordForm> scoped_exact_match(new PasswordForm);
+  std::unique_ptr<PasswordForm> scoped_exact_match(new PasswordForm);
   PasswordForm& exact_match = *scoped_exact_match;
   exact_match.origin = GURL("https://foo.com/");
   exact_match.action = GURL("https://foo.com/login");
@@ -129,7 +129,7 @@
 
   // Create a match that was matched using public suffix, so
   // |is_public_suffix_match| == true.
-  scoped_ptr<PasswordForm> scoped_public_suffix_match(new PasswordForm);
+  std::unique_ptr<PasswordForm> scoped_public_suffix_match(new PasswordForm);
   PasswordForm& public_suffix_match = *scoped_public_suffix_match;
   public_suffix_match.origin = GURL("https://foo.com/");
   public_suffix_match.action = GURL("https://foo.com/login");
@@ -205,7 +205,7 @@
 
   // Create a match that matches exactly, so |is_affiliation_based_match| has a
   // default value false.
-  scoped_ptr<PasswordForm> scoped_exact_match(new PasswordForm);
+  std::unique_ptr<PasswordForm> scoped_exact_match(new PasswordForm);
   PasswordForm& exact_match = *scoped_exact_match;
   exact_match.origin = GURL("https://foo.com/");
   exact_match.action = GURL("https://foo.com/login");
@@ -221,7 +221,7 @@
 
   // Create a match that was matched using public suffix, so
   // |is_public_suffix_match| == true.
-  scoped_ptr<PasswordForm> scoped_affiliated_match(new PasswordForm);
+  std::unique_ptr<PasswordForm> scoped_affiliated_match(new PasswordForm);
   PasswordForm& affiliated_match = *scoped_affiliated_match;
   affiliated_match.origin = GURL("android://hash@foo1.com/");
   affiliated_match.username_value = ASCIIToUTF16("test2@gmail.com");
diff --git a/components/autofill/core/common/save_password_progress_logger_unittest.cc b/components/autofill/core/common/save_password_progress_logger_unittest.cc
index 41e4f55..96f2b4c 100644
--- a/components/autofill/core/common/save_password_progress_logger_unittest.cc
+++ b/components/autofill/core/common/save_password_progress_logger_unittest.cc
@@ -10,7 +10,6 @@
 
 #include "base/bind.h"
 #include "base/logging.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
 #include "components/autofill/core/common/password_form.h"
diff --git a/components/exo/shell_surface.cc b/components/exo/shell_surface.cc
index dcb1400..ce15711 100644
--- a/components/exo/shell_surface.cc
+++ b/components/exo/shell_surface.cc
@@ -118,7 +118,10 @@
       surface_(surface),
       parent_(parent ? parent->GetWidget()->GetNativeWindow() : nullptr),
       initial_bounds_(initial_bounds),
-      activatable_(activatable) {
+      activatable_(activatable),
+      ignore_window_bounds_changes_(false),
+      resize_component_(HTCAPTION),
+      pending_resize_component_(HTCAPTION) {
   ash::Shell::GetInstance()->activation_client()->AddObserver(this);
   surface_->SetSurfaceDelegate(this);
   surface_->AddSurfaceObserver(this);
@@ -143,12 +146,36 @@
     EndDrag(false /* revert */);
   if (widget_) {
     ash::wm::GetWindowState(widget_->GetNativeWindow())->RemoveObserver(this);
+    widget_->GetNativeWindow()->RemoveObserver(this);
     if (widget_->IsVisible())
       widget_->Hide();
     widget_->CloseNow();
   }
 }
 
+void ShellSurface::AcknowledgeConfigure(uint32_t serial) {
+  TRACE_EVENT1("exo", "ShellSurface::AcknowledgeConfigure", "serial", serial);
+
+  // Apply all configs that are older or equal to |serial|. The result is that
+  // the origin of the main surface will move and the resize direction will
+  // change to reflect the acknowledgement of configure request with |serial|
+  // at the next call to Commit().
+  while (!pending_configs_.empty()) {
+    auto config = pending_configs_.front();
+    pending_configs_.pop_front();
+
+    // Add the config offset to the accumulated offset that will be applied when
+    // Commit() is called.
+    pending_origin_offset_ += config.origin_offset;
+
+    // Set the resize direction that will be applied when Commit() is called.
+    pending_resize_component_ = config.resize_component;
+
+    if (config.serial == serial)
+      break;
+  }
+}
+
 void ShellSurface::SetParent(ShellSurface* parent) {
   TRACE_EVENT1("exo", "ShellSurface::SetParent", "parent",
                parent ? base::UTF16ToASCII(parent->title_) : "null");
@@ -267,7 +294,7 @@
     return;
   }
 
-  geometry_ = geometry;
+  pending_geometry_ = geometry;
 }
 
 // static
@@ -294,20 +321,26 @@
 void ShellSurface::OnSurfaceCommit() {
   surface_->CommitSurfaceHierarchy();
 
+  // Apply new window geometry.
+  geometry_ = pending_geometry_;
+
   if (enabled() && !widget_)
     CreateShellSurfaceWidget();
 
+  // Apply the accumulated pending origin offset to reflect acknowledged
+  // configure requests.
+  origin_ += pending_origin_offset_;
+  pending_origin_offset_ = gfx::Vector2d();
+
+  // Update resize direction to reflect acknowledged configure requests.
+  resize_component_ = pending_resize_component_;
+
   if (widget_) {
-    gfx::Rect visible_bounds = GetVisibleBounds();
+    UpdateWidgetBounds();
 
     // Update surface bounds.
     surface_->SetBounds(
-        gfx::Rect(gfx::Point() - visible_bounds.OffsetFromOrigin(),
-                  surface_->layer()->size()));
-
-    // Update widget size unless resizing.
-    if (!IsResizing())
-      widget_->SetSize(visible_bounds.size());
+        gfx::Rect(GetSurfaceOrigin(), surface_->layer()->size()));
 
     // Show widget if not already visible.
     if (!widget_->IsClosed() && !widget_->IsVisible())
@@ -416,17 +449,44 @@
       new_type == ash::wm::WINDOW_STATE_TYPE_FULLSCREEN) {
     Configure();
   }
+
+  if (widget_)
+    UpdateWidgetBounds();
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 // aura::WindowObserver overrides:
 
+void ShellSurface::OnWindowBoundsChanged(aura::Window* window,
+                                         const gfx::Rect& old_bounds,
+                                         const gfx::Rect& new_bounds) {
+  if (!widget_ || !surface_ || ignore_window_bounds_changes_)
+    return;
+
+  if (window == widget_->GetNativeWindow()) {
+    if (new_bounds.size() == old_bounds.size())
+      return;
+
+    // If size changed then give the client a chance to produce new contents
+    // before origin on screen is changed by adding offset to the next configure
+    // request and offset |origin_| by the same distance.
+    gfx::Vector2d origin_offset = new_bounds.origin() - old_bounds.origin();
+    pending_origin_config_offset_ += origin_offset;
+    origin_ -= origin_offset;
+
+    surface_->SetBounds(
+        gfx::Rect(GetSurfaceOrigin(), surface_->layer()->size()));
+  }
+}
+
 void ShellSurface::OnWindowDestroying(aura::Window* window) {
+  if (window == parent_) {
+    parent_ = nullptr;
+    // Disable shell surface in case parent is destroyed before shell surface
+    // widget has been created.
+    SetEnabled(false);
+  }
   window->RemoveObserver(this);
-  parent_ = nullptr;
-  // Disable shell surface in case parent is destroyed before shell surface
-  // widget has been created.
-  SetEnabled(false);
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -550,7 +610,8 @@
   SetApplicationId(widget_->GetNativeWindow(), &application_id_);
   SetMainSurface(widget_->GetNativeWindow(), surface_);
 
-  // Start tracking window state changes.
+  // Start tracking changes to window bounds and window state.
+  widget_->GetNativeWindow()->AddObserver(this);
   ash::wm::GetWindowState(widget_->GetNativeWindow())->AddObserver(this);
 
   // Make shell surface a transient child if |parent_| has been set.
@@ -568,13 +629,30 @@
 void ShellSurface::Configure() {
   DCHECK(widget_);
 
-  if (configure_callback_.is_null())
-    return;
+  gfx::Vector2d origin_offset = pending_origin_config_offset_;
+  pending_origin_config_offset_ = gfx::Vector2d();
 
-  configure_callback_.Run(
+  // If surface is being resized, save the resize direction.
+  int resize_component =
+      resizer_ ? resizer_->details().window_component : HTCAPTION;
+
+  if (configure_callback_.is_null()) {
+    pending_origin_offset_ += origin_offset;
+    pending_resize_component_ = resize_component;
+    return;
+  }
+
+  uint32_t serial = configure_callback_.Run(
       widget_->GetWindowBoundsInScreen().size(),
       ash::wm::GetWindowState(widget_->GetNativeWindow())->GetStateType(),
       IsResizing(), widget_->IsActive());
+
+  // Apply origin offset and resize component at the first Commit() after this
+  // configure request has been acknowledged.
+  pending_configs_.push_back({serial, origin_offset, resize_component});
+  LOG_IF(WARNING, pending_configs_.size() > 100)
+      << "Number of pending configure acks for shell surface has reached: "
+      << pending_configs_.size();
 }
 
 void ShellSurface::AttemptToStartDrag(int component) {
@@ -603,8 +681,11 @@
     case HTCAPTION:
       cursor_client->SetCursor(ui::kCursorPointer);
       break;
-    case HTBOTTOM:
-      cursor_client->SetCursor(ui::kCursorSouthResize);
+    case HTTOP:
+      cursor_client->SetCursor(ui::kCursorNorthResize);
+      break;
+    case HTTOPRIGHT:
+      cursor_client->SetCursor(ui::kCursorNorthEastResize);
       break;
     case HTRIGHT:
       cursor_client->SetCursor(ui::kCursorEastResize);
@@ -612,14 +693,20 @@
     case HTBOTTOMRIGHT:
       cursor_client->SetCursor(ui::kCursorSouthEastResize);
       break;
-    case HTTOP:
+    case HTBOTTOM:
+      cursor_client->SetCursor(ui::kCursorSouthResize);
+      break;
+    case HTBOTTOMLEFT:
+      cursor_client->SetCursor(ui::kCursorSouthWestResize);
+      break;
     case HTLEFT:
+      cursor_client->SetCursor(ui::kCursorWestResize);
+      break;
     case HTTOPLEFT:
-      // TODO(reveman): Add support for resize in top-left direction after
-      // adding configure acks.
-      NOTIMPLEMENTED();
-      return;
+      cursor_client->SetCursor(ui::kCursorNorthWestResize);
+      break;
     default:
+      NOTREACHED();
       break;
   }
 
@@ -629,6 +716,13 @@
   if (!resizer_)
     return;
 
+  // Apply pending origin offsets and resize direction before starting a new
+  // resize operation. These can still be pending if the client has acknowledged
+  // the configure request but not yet called Commit().
+  origin_ += pending_origin_offset_;
+  pending_origin_offset_ = gfx::Vector2d();
+  resize_component_ = pending_resize_component_;
+
   ash::Shell::GetInstance()->AddPreTargetHandler(this);
   widget_->GetNativeWindow()->SetCapture();
 
@@ -655,6 +749,8 @@
   // Notify client that resizing state has changed.
   if (was_resizing)
     Configure();
+
+  UpdateWidgetBounds();
 }
 
 bool ShellSurface::IsResizing() const {
@@ -670,4 +766,68 @@
   return geometry_.IsEmpty() ? surface_->GetVisibleBounds() : geometry_;
 }
 
+gfx::Point ShellSurface::GetSurfaceOrigin() const {
+  gfx::Rect window_bounds = widget_->GetWindowBoundsInScreen();
+  gfx::Rect visible_bounds = GetVisibleBounds();
+
+  switch (resize_component_) {
+    case HTCAPTION:
+      return origin_ - visible_bounds.OffsetFromOrigin();
+    case HTBOTTOM:
+    case HTRIGHT:
+    case HTBOTTOMRIGHT:
+      return gfx::Point() - visible_bounds.OffsetFromOrigin();
+    case HTTOP:
+    case HTTOPRIGHT:
+      return gfx::Point(0, window_bounds.height() - visible_bounds.height()) -
+             visible_bounds.OffsetFromOrigin();
+      break;
+    case HTLEFT:
+    case HTBOTTOMLEFT:
+      return gfx::Point(window_bounds.width() - visible_bounds.width(), 0) -
+             visible_bounds.OffsetFromOrigin();
+    case HTTOPLEFT:
+      return gfx::Point(window_bounds.width() - visible_bounds.width(),
+                        window_bounds.height() - visible_bounds.height()) -
+             visible_bounds.OffsetFromOrigin();
+    default:
+      NOTREACHED();
+      return gfx::Point();
+  }
+}
+
+void ShellSurface::UpdateWidgetBounds() {
+  DCHECK(widget_);
+
+  // Return early if the shell is currently managing the bounds of the widget.
+  if (widget_->IsMaximized() || widget_->IsFullscreen() || IsResizing())
+    return;
+
+  gfx::Rect visible_bounds = GetVisibleBounds();
+  gfx::Rect new_widget_bounds(widget_->GetNativeWindow()->bounds().origin(),
+                              visible_bounds.size());
+
+  // Update widget origin using the surface origin if the current location of
+  // surface is being anchored to one side of the widget as a result of a
+  // resize operation.
+  if (resize_component_ != HTCAPTION) {
+    gfx::Point new_widget_origin =
+        GetSurfaceOrigin() + visible_bounds.OffsetFromOrigin();
+    aura::Window::ConvertPointToTarget(widget_->GetNativeWindow(),
+                                       widget_->GetNativeWindow()->parent(),
+                                       &new_widget_origin);
+    new_widget_bounds.set_origin(new_widget_origin);
+  }
+
+  // Set |ignore_window_bounds_changes_| as this change to window bounds
+  // should not result in a configure request.
+  DCHECK(!ignore_window_bounds_changes_);
+  ignore_window_bounds_changes_ = true;
+  widget_->SetBounds(new_widget_bounds);
+  ignore_window_bounds_changes_ = false;
+
+  // A change to the widget size requires surface bounds to be re-adjusted.
+  surface_->SetBounds(gfx::Rect(GetSurfaceOrigin(), surface_->layer()->size()));
+}
+
 }  // namespace exo
diff --git a/components/exo/shell_surface.h b/components/exo/shell_surface.h
index 7770141..81927a4e 100644
--- a/components/exo/shell_surface.h
+++ b/components/exo/shell_surface.h
@@ -5,6 +5,7 @@
 #ifndef COMPONENTS_EXO_SHELL_SURFACE_H_
 #define COMPONENTS_EXO_SHELL_SURFACE_H_
 
+#include <deque>
 #include <string>
 
 #include "ash/wm/window_state_observer.h"
@@ -14,6 +15,9 @@
 #include "components/exo/surface_delegate.h"
 #include "components/exo/surface_observer.h"
 #include "ui/aura/window_observer.h"
+#include "ui/gfx/geometry/point.h"
+#include "ui/gfx/geometry/rect.h"
+#include "ui/gfx/geometry/vector2d.h"
 #include "ui/views/widget/widget_delegate.h"
 #include "ui/wm/public/activation_change_observer.h"
 
@@ -65,14 +69,19 @@
   // it doesn't resize, pick a smaller size (to satisfy aspect ratio or resize
   // in steps of NxM pixels).
   using ConfigureCallback =
-      base::Callback<void(const gfx::Size& size,
-                          ash::wm::WindowStateType state_type,
-                          bool resizing,
-                          bool activated)>;
+      base::Callback<uint32_t(const gfx::Size& size,
+                              ash::wm::WindowStateType state_type,
+                              bool resizing,
+                              bool activated)>;
   void set_configure_callback(const ConfigureCallback& configure_callback) {
     configure_callback_ = configure_callback;
   }
 
+  // When the client is asked to configure the surface, it should acknowledge
+  // the configure request sometime before the commit. |serial| is the serial
+  // from the configure callback.
+  void AcknowledgeConfigure(uint32_t serial);
+
   // Set the "parent" of this surface. This window should be stacked above a
   // parent.
   void SetParent(ShellSurface* parent);
@@ -149,6 +158,9 @@
                                    ash::wm::WindowStateType old_type) override;
 
   // Overridden from aura::WindowObserver:
+  void OnWindowBoundsChanged(aura::Window* window,
+                             const gfx::Rect& old_bounds,
+                             const gfx::Rect& new_bounds) override;
   void OnWindowDestroying(aura::Window* window) override;
 
   // Overridden from aura::client::ActivationChangeObserver:
@@ -162,15 +174,19 @@
   void OnMouseEvent(ui::MouseEvent* event) override;
 
  private:
+  // Surface state associated with each configure request.
+  struct Config {
+    uint32_t serial;
+    gfx::Vector2d origin_offset;
+    int resize_component;
+  };
+
   // Creates the |widget_| for |surface_|.
   void CreateShellSurfaceWidget();
 
   // Asks the client to configure its surface.
   void Configure();
 
-  // Returns the "visible bounds" for the surface from the user's perspective.
-  gfx::Rect GetVisibleBounds() const;
-
   // Attempt to start a drag operation. The type of drag operation to start is
   // determined by |component|.
   void AttemptToStartDrag(int component);
@@ -181,6 +197,16 @@
   // Returns true if surface is currently being resized.
   bool IsResizing() const;
 
+  // Returns the "visible bounds" for the surface from the user's perspective.
+  gfx::Rect GetVisibleBounds() const;
+
+  // Returns the origin for the surface taking visible bounds and current
+  // resize direction into account.
+  gfx::Point GetSurfaceOrigin() const;
+
+  // Update bounds of widget to match the current surface bounds.
+  void UpdateWidgetBounds();
+
   views::Widget* widget_;
   Surface* surface_;
   aura::Window* parent_;
@@ -189,9 +215,17 @@
   base::string16 title_;
   std::string application_id_;
   gfx::Rect geometry_;
+  gfx::Rect pending_geometry_;
   base::Closure close_callback_;
   base::Closure surface_destroyed_callback_;
   ConfigureCallback configure_callback_;
+  bool ignore_window_bounds_changes_;
+  gfx::Point origin_;
+  gfx::Vector2d pending_origin_offset_;
+  gfx::Vector2d pending_origin_config_offset_;
+  int resize_component_;  // HT constant (see ui/base/hit_test.h)
+  int pending_resize_component_;
+  std::deque<Config> pending_configs_;
   scoped_ptr<ash::WindowResizer> resizer_;
 
   DISALLOW_COPY_AND_ASSIGN(ShellSurface);
diff --git a/components/exo/shell_surface_unittest.cc b/components/exo/shell_surface_unittest.cc
index 7a9f6bd..b06ce347 100644
--- a/components/exo/shell_surface_unittest.cc
+++ b/components/exo/shell_surface_unittest.cc
@@ -20,6 +20,50 @@
 
 using ShellSurfaceTest = test::ExoTestBase;
 
+uint32_t ConfigureFullscreen(uint32_t serial,
+                             const gfx::Size& size,
+                             ash::wm::WindowStateType state_type,
+                             bool resizing,
+                             bool activated) {
+  EXPECT_EQ(ash::wm::WINDOW_STATE_TYPE_FULLSCREEN, state_type);
+  return serial;
+}
+
+TEST_F(ShellSurfaceTest, AcknowledgeConfigure) {
+  gfx::Size buffer_size(32, 32);
+  scoped_ptr<Buffer> buffer(
+      new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(buffer_size)));
+  scoped_ptr<Surface> surface(new Surface);
+  scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get()));
+
+  surface->Attach(buffer.get());
+  surface->Commit();
+
+  gfx::Point origin(100, 100);
+  shell_surface->GetWidget()->SetBounds(gfx::Rect(origin, buffer_size));
+  EXPECT_EQ(origin.ToString(),
+            surface->GetBoundsInRootWindow().origin().ToString());
+
+  const uint32_t kSerial = 1;
+  shell_surface->set_configure_callback(
+      base::Bind(&ConfigureFullscreen, kSerial));
+  shell_surface->SetFullscreen(true);
+
+  // Surface origin should not change until configure request is acknowledged.
+  EXPECT_EQ(origin.ToString(),
+            surface->GetBoundsInRootWindow().origin().ToString());
+
+  shell_surface->AcknowledgeConfigure(kSerial);
+  scoped_ptr<Buffer> fullscreen_buffer(
+      new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(
+          CurrentContext()->bounds().size())));
+  surface->Attach(fullscreen_buffer.get());
+  surface->Commit();
+
+  EXPECT_EQ(gfx::Point().ToString(),
+            surface->GetBoundsInRootWindow().origin().ToString());
+}
+
 TEST_F(ShellSurfaceTest, SetParent) {
   gfx::Size buffer_size(256, 256);
   scoped_ptr<Buffer> parent_buffer(
@@ -195,18 +239,19 @@
   EXPECT_FALSE(shell_surface.get());
 }
 
-void Configure(gfx::Size* suggested_size,
-               ash::wm::WindowStateType* has_state_type,
-               bool* is_resizing,
-               bool* is_active,
-               const gfx::Size& size,
-               ash::wm::WindowStateType state_type,
-               bool resizing,
-               bool activated) {
+uint32_t Configure(gfx::Size* suggested_size,
+                   ash::wm::WindowStateType* has_state_type,
+                   bool* is_resizing,
+                   bool* is_active,
+                   const gfx::Size& size,
+                   ash::wm::WindowStateType state_type,
+                   bool resizing,
+                   bool activated) {
   *suggested_size = size;
   *has_state_type = state_type;
   *is_resizing = resizing;
   *is_active = activated;
+  return 0;
 }
 
 TEST_F(ShellSurfaceTest, ConfigureCallback) {
diff --git a/components/exo/wayland/server.cc b/components/exo/wayland/server.cc
index 9a8216bda..9dfa9d3 100644
--- a/components/exo/wayland/server.cc
+++ b/components/exo/wayland/server.cc
@@ -765,29 +765,6 @@
 ////////////////////////////////////////////////////////////////////////////////
 // wl_shell_surface_interface:
 
-int ResizeComponent(uint32_t edges) {
-  switch (edges) {
-    case WL_SHELL_SURFACE_RESIZE_TOP:
-      return HTTOP;
-    case WL_SHELL_SURFACE_RESIZE_BOTTOM:
-      return HTBOTTOM;
-    case WL_SHELL_SURFACE_RESIZE_LEFT:
-      return HTLEFT;
-    case WL_SHELL_SURFACE_RESIZE_TOP_LEFT:
-      return HTTOPLEFT;
-    case WL_SHELL_SURFACE_RESIZE_BOTTOM_LEFT:
-      return HTBOTTOMLEFT;
-    case WL_SHELL_SURFACE_RESIZE_RIGHT:
-      return HTRIGHT;
-    case WL_SHELL_SURFACE_RESIZE_TOP_RIGHT:
-      return HTTOPRIGHT;
-    case WL_SHELL_SURFACE_RESIZE_BOTTOM_RIGHT:
-      return HTBOTTOMRIGHT;
-    default:
-      return HTNOWHERE;
-  }
-}
-
 void shell_surface_pong(wl_client* client,
                         wl_resource* resource,
                         uint32_t serial) {
@@ -806,9 +783,7 @@
                           wl_resource* seat_resource,
                           uint32_t serial,
                           uint32_t edges) {
-  int component = ResizeComponent(edges);
-  if (component != HTNOWHERE)
-    GetUserDataAs<ShellSurface>(resource)->Resize(component);
+  NOTIMPLEMENTED();
 }
 
 void shell_surface_set_toplevel(wl_client* client, wl_resource* resource) {
@@ -831,6 +806,11 @@
                                   wl_resource* output_resource) {
   GetUserDataAs<ShellSurface>(resource)->SetEnabled(true);
   GetUserDataAs<ShellSurface>(resource)->SetFullscreen(true);
+  gfx::Rect bounds = GetUserDataAs<ShellSurface>(resource)
+                         ->GetWidget()
+                         ->GetWindowBoundsInScreen();
+  wl_shell_surface_send_configure(resource, WL_SHELL_SURFACE_RESIZE_NONE,
+                                  bounds.width(), bounds.height());
 }
 
 void shell_surface_set_popup(wl_client* client,
@@ -849,6 +829,11 @@
                                  wl_resource* output_resource) {
   GetUserDataAs<ShellSurface>(resource)->SetEnabled(true);
   GetUserDataAs<ShellSurface>(resource)->Maximize();
+  gfx::Rect bounds = GetUserDataAs<ShellSurface>(resource)
+                         ->GetWidget()
+                         ->GetWindowBoundsInScreen();
+  wl_shell_surface_send_configure(resource, WL_SHELL_SURFACE_RESIZE_NONE,
+                                  bounds.width(), bounds.height());
 }
 
 void shell_surface_set_title(wl_client* client,
@@ -874,16 +859,6 @@
 ////////////////////////////////////////////////////////////////////////////////
 // wl_shell_interface:
 
-void HandleShellSurfaceConfigureCallback(wl_resource* resource,
-                                         const gfx::Size& size,
-                                         ash::wm::WindowStateType state_type,
-                                         bool resizing,
-                                         bool activated) {
-  wl_shell_surface_send_configure(resource, WL_SHELL_SURFACE_RESIZE_NONE,
-                                  size.width(), size.height());
-  wl_client_flush(wl_resource_get_client(resource));
-}
-
 void shell_get_shell_surface(wl_client* client,
                              wl_resource* resource,
                              uint32_t id,
@@ -907,10 +882,6 @@
   shell_surface->set_surface_destroyed_callback(base::Bind(
       &wl_resource_destroy, base::Unretained(shell_surface_resource)));
 
-  shell_surface->set_configure_callback(
-      base::Bind(&HandleShellSurfaceConfigureCallback,
-                 base::Unretained(shell_surface_resource)));
-
   SetImplementation(shell_surface_resource, &shell_surface_implementation,
                     std::move(shell_surface));
 }
@@ -1052,7 +1023,7 @@
     case XDG_SURFACE_RESIZE_EDGE_BOTTOM_RIGHT:
       return HTBOTTOMRIGHT;
     default:
-      return HTNOWHERE;
+      return HTBOTTOMRIGHT;
   }
 }
 
@@ -1116,7 +1087,7 @@
 void xdg_surface_ack_configure(wl_client* client,
                                wl_resource* resource,
                                uint32_t serial) {
-  NOTIMPLEMENTED();
+  GetUserDataAs<ShellSurface>(resource)->AcknowledgeConfigure(serial);
 }
 
 void xdg_surface_set_window_geometry(wl_client* client,
@@ -1209,11 +1180,11 @@
   *value = state;
 }
 
-void HandleXdgSurfaceConfigureCallback(wl_resource* resource,
-                                       const gfx::Size& size,
-                                       ash::wm::WindowStateType state_type,
-                                       bool resizing,
-                                       bool activated) {
+uint32_t HandleXdgSurfaceConfigureCallback(wl_resource* resource,
+                                           const gfx::Size& size,
+                                           ash::wm::WindowStateType state_type,
+                                           bool resizing,
+                                           bool activated) {
   wl_array states;
   wl_array_init(&states);
   if (state_type == ash::wm::WINDOW_STATE_TYPE_MAXIMIZED)
@@ -1224,11 +1195,13 @@
     AddXdgSurfaceState(&states, XDG_SURFACE_STATE_RESIZING);
   if (activated)
     AddXdgSurfaceState(&states, XDG_SURFACE_STATE_ACTIVATED);
+  uint32_t serial = wl_display_next_serial(
+      wl_client_get_display(wl_resource_get_client(resource)));
   xdg_surface_send_configure(resource, size.width(), size.height(), &states,
-                             wl_display_next_serial(wl_client_get_display(
-                                 wl_resource_get_client(resource))));
+                             serial);
   wl_client_flush(wl_resource_get_client(resource));
   wl_array_release(&states);
+  return serial;
 }
 
 void xdg_shell_get_xdg_surface(wl_client* client,
diff --git a/components/gcm_driver/android/java/src/org/chromium/components/gcm_driver/GCMDriver.java b/components/gcm_driver/android/java/src/org/chromium/components/gcm_driver/GCMDriver.java
index 462d515..547f7216 100644
--- a/components/gcm_driver/android/java/src/org/chromium/components/gcm_driver/GCMDriver.java
+++ b/components/gcm_driver/android/java/src/org/chromium/components/gcm_driver/GCMDriver.java
@@ -120,7 +120,8 @@
 
     // The caller of this function is responsible for setting the PathUtils Private Data Directory
     // Suffix before calling onMessageReceived().
-    public static void onMessageReceived(Context context, final String appId, final Bundle extras) {
+    public static void onMessageReceived(
+            Context context, final String appId, final String senderId, final Bundle extras) {
         // TODO(johnme): Store message and redeliver later if Chrome is killed before delivery.
         ThreadUtils.assertOnUiThread();
         launchNativeThen(context, new Runnable() {
@@ -131,7 +132,6 @@
                 final String bundleRawData = "rawData";
                 final String bundleGcmplex = "com.google.ipc.invalidation.gcmmplex.";
 
-                String senderId = extras.getString(bundleSenderId);
                 String collapseKey = extras.getString(bundleCollapseKey);  // May be null.
                 byte[] rawData = extras.getByteArray(bundleRawData);  // May be null.
 
diff --git a/components/history_strings.grdp b/components/history_strings.grdp
index 74633486..99328f17 100644
--- a/components/history_strings.grdp
+++ b/components/history_strings.grdp
@@ -53,7 +53,10 @@
     Group domains
   </message>
   <message name="IDS_HISTORY_HAS_SYNCED_RESULTS" desc="The notification at the top of the history page indicating that it is showing visits synced from other devices.">
-    Showing history from your signed-in devices. <ph name="BEGIN_LINK">&lt;a href="https://support.google.com/chrome/?p=sync_history&amp;hl=[GRITLANGCODE]"&gt;</ph>Learn more<ph name="END_LINK">&lt;/a&gt;<ex>&lt;/a&gt;</ex></ph>
+    Showing history from your signed-in devices. <ph name="BEGIN_LINK">&lt;a href="https://support.google.com/chrome/?p=sync_history&amp;hl=[GRITLANGCODE]"&gt;</ph>Learn more<ph name="END_LINK">&lt;/a&gt;<ex>&lt;/a&gt;</ex></ph>.
+  </message>
+  <message name="IDS_HISTORY_OTHER_FORMS_OF_HISTORY" desc="The notification at the top of the history page indicating that deleting Chrome browsing history will not delete other forms of history stored at Google My Activity.">
+    Your Google Account may have other forms of browsing history at <ph name="BEGIN_LINK">&lt;a target="_blank" href="$1"&gt;</ph>history.google.com<ph name="END_LINK">&lt;/a&gt;</ph>.
   </message>
   <message name="IDS_HISTORY_IN_CONTENT_PACK" desc="Text that shows that an entry is in a content pack.">
     In content pack
@@ -80,7 +83,7 @@
     No search results found.
   </message>
   <message name="IDS_HISTORY_NO_SYNCED_RESULTS" desc="The notification at the top of the history page indicating that it does not include visits from other devices.">
-    Showing history from this device. <ph name="BEGIN_LINK">&lt;a href="https://support.google.com/chrome/?p=sync_history&amp;hl=[GRITLANGCODE]"&gt;</ph>Learn more<ph name="END_LINK">&lt;/a&gt;<ex>&lt;/a&gt;</ex></ph>
+    Showing history from this device. <ph name="BEGIN_LINK">&lt;a href="https://support.google.com/chrome/?p=sync_history&amp;hl=[GRITLANGCODE]"&gt;</ph>Learn more<ph name="END_LINK">&lt;/a&gt;<ex>&lt;/a&gt;</ex></ph>.
   </message>
   <message name="IDS_HISTORY_NUMBER_VISITS" desc="Format string for the number of visits of a site.">
     (<ph name="NUMBER_VISITS">$1<ex>3</ex></ph>)
diff --git a/components/password_manager/content/browser/content_password_manager_driver_factory.cc b/components/password_manager/content/browser/content_password_manager_driver_factory.cc
index 1432e14..be8b22a 100644
--- a/components/password_manager/content/browser/content_password_manager_driver_factory.cc
+++ b/components/password_manager/content/browser/content_password_manager_driver_factory.cc
@@ -6,6 +6,7 @@
 
 #include <utility>
 
+#include "base/memory/ptr_util.h"
 #include "base/stl_util.h"
 #include "components/autofill/content/browser/content_autofill_driver.h"
 #include "components/autofill/content/browser/content_autofill_driver_factory.h"
@@ -56,7 +57,7 @@
   content::RenderFrameHost* main_frame = web_contents->GetMainFrame();
   if (main_frame->IsRenderFrameLive()) {
     frame_driver_map_[main_frame] =
-        make_scoped_ptr(new ContentPasswordManagerDriver(
+        base::WrapUnique(new ContentPasswordManagerDriver(
             main_frame, password_client_, autofill_client_));
   }
 }
@@ -86,7 +87,7 @@
   // This is called twice for the main frame.
   if (insertion_result.second) {  // This was the first time.
     insertion_result.first->second =
-        make_scoped_ptr(new ContentPasswordManagerDriver(
+        base::WrapUnique(new ContentPasswordManagerDriver(
             render_frame_host, password_client_, autofill_client_));
     insertion_result.first->second->SendLoggingAvailability();
   }
@@ -114,7 +115,7 @@
 
 void ContentPasswordManagerDriverFactory::TestingSetDriverForFrame(
     content::RenderFrameHost* render_frame_host,
-    scoped_ptr<ContentPasswordManagerDriver> driver) {
+    std::unique_ptr<ContentPasswordManagerDriver> driver) {
   frame_driver_map_[render_frame_host] = std::move(driver);
 }
 
diff --git a/components/password_manager/content/browser/content_password_manager_driver_factory.h b/components/password_manager/content/browser/content_password_manager_driver_factory.h
index f5bf925..9b1335b 100644
--- a/components/password_manager/content/browser/content_password_manager_driver_factory.h
+++ b/components/password_manager/content/browser/content_password_manager_driver_factory.h
@@ -6,10 +6,10 @@
 #define COMPONENTS_PASSWORD_MANAGER_CONTENT_BROWSER_CONTENT_PASSWORD_MANAGER_DRIVER_FACTORY_H_
 
 #include <map>
+#include <memory>
 
 #include "base/compiler_specific.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/supports_user_data.h"
 #include "components/password_manager/core/browser/password_autofill_manager.h"
 #include "components/password_manager/core/browser/password_generation_manager.h"
@@ -49,7 +49,7 @@
 
   void TestingSetDriverForFrame(
       content::RenderFrameHost* render_frame_host,
-      scoped_ptr<ContentPasswordManagerDriver> driver);
+      std::unique_ptr<ContentPasswordManagerDriver> driver);
 
   // Requests all drivers to inform their renderers whether
   // chrome://password-manager-internals is available.
@@ -70,7 +70,8 @@
       PasswordManagerClient* client,
       autofill::AutofillClient* autofill_client);
 
-  std::map<content::RenderFrameHost*, scoped_ptr<ContentPasswordManagerDriver>>
+  std::map<content::RenderFrameHost*,
+           std::unique_ptr<ContentPasswordManagerDriver>>
       frame_driver_map_;
 
   PasswordManagerClient* password_client_;
diff --git a/components/password_manager/content/browser/content_password_manager_driver_unittest.cc b/components/password_manager/content/browser/content_password_manager_driver_unittest.cc
index 551fcb5..267aa37 100644
--- a/components/password_manager/content/browser/content_password_manager_driver_unittest.cc
+++ b/components/password_manager/content/browser/content_password_manager_driver_unittest.cc
@@ -74,7 +74,7 @@
 TEST_P(ContentPasswordManagerDriverTest,
        AnswerToNotificationsAboutLoggingState) {
   const bool should_allow_logging = GetParam();
-  scoped_ptr<ContentPasswordManagerDriver> driver(
+  std::unique_ptr<ContentPasswordManagerDriver> driver(
       new ContentPasswordManagerDriver(main_rfh(), &password_manager_client_,
                                        &autofill_client_));
   process()->sink().ClearMessages();
@@ -95,7 +95,7 @@
 
 TEST_P(ContentPasswordManagerDriverTest, AnswerToIPCPingsAboutLoggingState) {
   const bool should_allow_logging = GetParam();
-  scoped_ptr<ContentPasswordManagerDriver> driver(
+  std::unique_ptr<ContentPasswordManagerDriver> driver(
       new ContentPasswordManagerDriver(main_rfh(), &password_manager_client_,
                                        &autofill_client_));
 
diff --git a/components/password_manager/content/browser/credential_manager_dispatcher.cc b/components/password_manager/content/browser/credential_manager_dispatcher.cc
index 81194cb..65313124 100644
--- a/components/password_manager/content/browser/credential_manager_dispatcher.cc
+++ b/components/password_manager/content/browser/credential_manager_dispatcher.cc
@@ -64,8 +64,9 @@
   if (!client_->IsSavingAndFillingEnabledForCurrentPage())
     return;
 
-  scoped_ptr<autofill::PasswordForm> form(CreatePasswordFormFromCredentialInfo(
-      credential, web_contents()->GetLastCommittedURL().GetOrigin()));
+  std::unique_ptr<autofill::PasswordForm> form(
+      CreatePasswordFormFromCredentialInfo(
+          credential, web_contents()->GetLastCommittedURL().GetOrigin()));
   form->skip_zero_click = !IsZeroClickAllowed();
 
   form_manager_.reset(new CredentialManagerPasswordFormManager(
diff --git a/components/password_manager/content/browser/credential_manager_dispatcher.h b/components/password_manager/content/browser/credential_manager_dispatcher.h
index 9e9f87a..1471a7b7 100644
--- a/components/password_manager/content/browser/credential_manager_dispatcher.h
+++ b/components/password_manager/content/browser/credential_manager_dispatcher.h
@@ -5,9 +5,10 @@
 #ifndef COMPONENTS_PASSWORD_MANAGER_CONTENT_BROWSER_CONTENT_CREDENTIAL_MANAGER_DISPATCHER_H_
 #define COMPONENTS_PASSWORD_MANAGER_CONTENT_BROWSER_CONTENT_CREDENTIAL_MANAGER_DISPATCHER_H_
 
+#include <memory>
+
 #include "base/callback.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "components/password_manager/core/browser/credential_manager_password_form_manager.h"
 #include "components/password_manager/core/browser/credential_manager_pending_request_task.h"
@@ -105,7 +106,7 @@
   bool IsUpdatingCredentialAllowed() const;
 
   PasswordManagerClient* client_;
-  scoped_ptr<CredentialManagerPasswordFormManager> form_manager_;
+  std::unique_ptr<CredentialManagerPasswordFormManager> form_manager_;
 
   // Set to false to disable automatic signing in.
   BooleanPrefMember auto_signin_enabled_;
@@ -114,8 +115,8 @@
   // PasswordStore; we push enough data into Pending*Task objects so that
   // they can properly respond to the request once the PasswordStore gives
   // us data.
-  scoped_ptr<CredentialManagerPendingRequestTask> pending_request_;
-  scoped_ptr<CredentialManagerPendingRequireUserMediationTask>
+  std::unique_ptr<CredentialManagerPendingRequestTask> pending_request_;
+  std::unique_ptr<CredentialManagerPendingRequireUserMediationTask>
       pending_require_user_mediation_;
 
   base::WeakPtrFactory<CredentialManagerDispatcher> weak_factory_;
diff --git a/components/password_manager/content/browser/credential_manager_dispatcher_unittest.cc b/components/password_manager/content/browser/credential_manager_dispatcher_unittest.cc
index cbe8921..512284a 100644
--- a/components/password_manager/content/browser/credential_manager_dispatcher_unittest.cc
+++ b/components/password_manager/content/browser/credential_manager_dispatcher_unittest.cc
@@ -13,6 +13,7 @@
 #include "base/bind.h"
 #include "base/command_line.h"
 #include "base/macros.h"
+#include "base/memory/ptr_util.h"
 #include "base/run_loop.h"
 #include "base/strings/string16.h"
 #include "base/strings/utf_string_conversions.h"
@@ -75,16 +76,17 @@
   }
   ~MockPasswordManagerClient() override {}
 
-  bool PromptUserToSaveOrUpdatePassword(scoped_ptr<PasswordFormManager> manager,
-                                        CredentialSourceType type,
-                                        bool update_password) override {
+  bool PromptUserToSaveOrUpdatePassword(
+      std::unique_ptr<PasswordFormManager> manager,
+      CredentialSourceType type,
+      bool update_password) override {
     manager_.swap(manager);
     PromptUserToSavePasswordPtr(manager_.get(), type);
     return true;
   }
 
   void NotifyUserCouldBeAutoSignedIn(
-      scoped_ptr<autofill::PasswordForm> form) override {
+      std::unique_ptr<autofill::PasswordForm> form) override {
     NotifyUserCouldBeAutoSignedInPtr(form.get());
   }
 
@@ -128,7 +130,7 @@
  private:
   TestingPrefServiceSimple prefs_;
   PasswordStore* store_;
-  scoped_ptr<PasswordFormManager> manager_;
+  std::unique_ptr<PasswordFormManager> manager_;
 
   DISALLOW_COPY_AND_ASSIGN(MockPasswordManagerClient);
 };
@@ -299,9 +301,9 @@
   autofill::PasswordForm origin_path_form_;
   autofill::PasswordForm cross_origin_form_;
   scoped_refptr<TestPasswordStore> store_;
-  scoped_ptr<testing::NiceMock<MockPasswordManagerClient>> client_;
-  scoped_ptr<SlightlyLessStubbyPasswordManagerDriver> stub_driver_;
-  scoped_ptr<CredentialManagerDispatcher> dispatcher_;
+  std::unique_ptr<testing::NiceMock<MockPasswordManagerClient>> client_;
+  std::unique_ptr<SlightlyLessStubbyPasswordManagerDriver> stub_driver_;
+  std::unique_ptr<CredentialManagerDispatcher> dispatcher_;
 };
 
 TEST_F(CredentialManagerDispatcherTest, IsZeroClickAllowed) {
@@ -530,7 +532,7 @@
   store_->AddLogin(affiliated_form1_);
   store_->AddLogin(affiliated_form2_);
 
-  auto mock_helper = make_scoped_ptr(new MockAffiliatedMatchHelper);
+  auto mock_helper = base::WrapUnique(new MockAffiliatedMatchHelper);
   store_->SetAffiliatedMatchHelper(std::move(mock_helper));
 
   std::vector<GURL> federations;
@@ -712,7 +714,7 @@
        CredentialManagerOnRequestCredentialAffiliatedPasswordMatch) {
   store_->AddLogin(affiliated_form1_);
   client_->set_first_run_seen(true);
-  auto mock_helper = make_scoped_ptr(new MockAffiliatedMatchHelper);
+  auto mock_helper = base::WrapUnique(new MockAffiliatedMatchHelper);
   store_->SetAffiliatedMatchHelper(std::move(mock_helper));
 
   std::vector<GURL> federations;
@@ -733,7 +735,7 @@
        CredentialManagerOnRequestCredentialAffiliatedPasswordNoMatch) {
   store_->AddLogin(affiliated_form1_);
   client_->set_first_run_seen(true);
-  auto mock_helper = make_scoped_ptr(new MockAffiliatedMatchHelper);
+  auto mock_helper = base::WrapUnique(new MockAffiliatedMatchHelper);
   store_->SetAffiliatedMatchHelper(std::move(mock_helper));
 
   std::vector<GURL> federations;
@@ -756,7 +758,7 @@
       url::Origin(GURL("https://example.com/"));
   store_->AddLogin(affiliated_form1_);
   client_->set_first_run_seen(true);
-  auto mock_helper = make_scoped_ptr(new MockAffiliatedMatchHelper);
+  auto mock_helper = base::WrapUnique(new MockAffiliatedMatchHelper);
   store_->SetAffiliatedMatchHelper(std::move(mock_helper));
 
   std::vector<GURL> federations;
@@ -779,7 +781,7 @@
       url::Origin(GURL("https://example.com/"));
   store_->AddLogin(affiliated_form1_);
   client_->set_first_run_seen(true);
-  auto mock_helper = make_scoped_ptr(new MockAffiliatedMatchHelper);
+  auto mock_helper = base::WrapUnique(new MockAffiliatedMatchHelper);
   store_->SetAffiliatedMatchHelper(std::move(mock_helper));
 
   std::vector<GURL> federations;
@@ -1069,7 +1071,7 @@
   // ought to be returned automagically.
   store_->AddLogin(affiliated_form1_);
 
-  auto mock_helper = make_scoped_ptr(new MockAffiliatedMatchHelper);
+  auto mock_helper = base::WrapUnique(new MockAffiliatedMatchHelper);
   store_->SetAffiliatedMatchHelper(std::move(mock_helper));
 
   std::vector<GURL> federations;
@@ -1091,7 +1093,7 @@
   store_->AddLogin(affiliated_form1_);
   store_->AddLogin(affiliated_form2_);
 
-  auto mock_helper = make_scoped_ptr(new MockAffiliatedMatchHelper);
+  auto mock_helper = base::WrapUnique(new MockAffiliatedMatchHelper);
   store_->SetAffiliatedMatchHelper(std::move(mock_helper));
 
   std::vector<GURL> federations;
@@ -1114,7 +1116,7 @@
   // in.
   store_->AddLogin(affiliated_form1_);
 
-  auto mock_helper = make_scoped_ptr(new MockAffiliatedMatchHelper);
+  auto mock_helper = base::WrapUnique(new MockAffiliatedMatchHelper);
   store_->SetAffiliatedMatchHelper(std::move(mock_helper));
 
   std::vector<GURL> federations;
@@ -1136,7 +1138,7 @@
   store_->AddLogin(form_);
   store_->AddLogin(affiliated_form1_);
 
-  auto mock_helper = make_scoped_ptr(new MockAffiliatedMatchHelper);
+  auto mock_helper = base::WrapUnique(new MockAffiliatedMatchHelper);
   store_->SetAffiliatedMatchHelper(std::move(mock_helper));
 
   std::vector<GURL> federations;
diff --git a/components/password_manager/content/renderer/credential_manager_client.cc b/components/password_manager/content/renderer/credential_manager_client.cc
index 749b429e..6c071a2 100644
--- a/components/password_manager/content/renderer/credential_manager_client.cc
+++ b/components/password_manager/content/renderer/credential_manager_client.cc
@@ -76,7 +76,7 @@
                                                const CredentialInfo& info) {
   RequestCallbacks* callbacks = get_callbacks_.Lookup(request_id);
   DCHECK(callbacks);
-  scoped_ptr<blink::WebCredential> credential = nullptr;
+  std::unique_ptr<blink::WebCredential> credential = nullptr;
   switch (info.type) {
     case CredentialType::CREDENTIAL_TYPE_FEDERATED:
       credential.reset(new blink::WebFederatedCredential(
diff --git a/components/password_manager/content/renderer/credential_manager_client_browsertest.cc b/components/password_manager/content/renderer/credential_manager_client_browsertest.cc
index d7318d7..cb28b97 100644
--- a/components/password_manager/content/renderer/credential_manager_client_browsertest.cc
+++ b/components/password_manager/content/renderer/credential_manager_client_browsertest.cc
@@ -91,7 +91,7 @@
   void set_callback_succeeded(bool state) { callback_succeeded_ = state; }
 
  protected:
-  scoped_ptr<CredentialManagerClient> client_;
+  std::unique_ptr<CredentialManagerClient> client_;
 
   // True if a message's callback's 'onSuccess'/'onError' methods were called,
   // false otherwise. We put these on the test object rather than on the
@@ -101,7 +101,7 @@
   bool callback_errored_;
   bool callback_succeeded_;
 
-  scoped_ptr<blink::WebPasswordCredential> credential_;
+  std::unique_ptr<blink::WebPasswordCredential> credential_;
 };
 
 class TestNotificationCallbacks
@@ -149,7 +149,7 @@
   EXPECT_FALSE(
       ExtractRequestId(CredentialManagerHostMsg_Store::ID, request_id));
 
-  scoped_ptr<TestNotificationCallbacks> callbacks(
+  std::unique_ptr<TestNotificationCallbacks> callbacks(
       new TestNotificationCallbacks(this));
   client_->dispatchStore(*credential(), callbacks.release());
 
@@ -165,7 +165,7 @@
   EXPECT_FALSE(ExtractRequestId(
       CredentialManagerHostMsg_RequireUserMediation::ID, request_id));
 
-  scoped_ptr<TestNotificationCallbacks> callbacks(
+  std::unique_ptr<TestNotificationCallbacks> callbacks(
       new TestNotificationCallbacks(this));
   client_->dispatchRequireUserMediation(callbacks.release());
 
@@ -182,7 +182,8 @@
   EXPECT_FALSE(ExtractRequestId(CredentialManagerHostMsg_RequestCredential::ID,
                                 request_id));
 
-  scoped_ptr<TestRequestCallbacks> callbacks(new TestRequestCallbacks(this));
+  std::unique_ptr<TestRequestCallbacks> callbacks(
+      new TestRequestCallbacks(this));
   std::vector<GURL> federations;
   client_->dispatchGet(false, true, federations, callbacks.release());
 
@@ -201,7 +202,8 @@
   EXPECT_FALSE(ExtractRequestId(CredentialManagerHostMsg_RequestCredential::ID,
                                 request_id));
 
-  scoped_ptr<TestRequestCallbacks> callbacks(new TestRequestCallbacks(this));
+  std::unique_ptr<TestRequestCallbacks> callbacks(
+      new TestRequestCallbacks(this));
   std::vector<GURL> federations;
   client_->dispatchGet(false, true, federations, callbacks.release());
 
diff --git a/components/password_manager/core/browser/affiliated_match_helper.cc b/components/password_manager/core/browser/affiliated_match_helper.cc
index abf8c0c..2f82ee0 100644
--- a/components/password_manager/core/browser/affiliated_match_helper.cc
+++ b/components/password_manager/core/browser/affiliated_match_helper.cc
@@ -37,7 +37,7 @@
 
 AffiliatedMatchHelper::AffiliatedMatchHelper(
     PasswordStore* password_store,
-    scoped_ptr<AffiliationService> affiliation_service)
+    std::unique_ptr<AffiliationService> affiliation_service)
     : password_store_(password_store),
       task_runner_for_waiting_(base::ThreadTaskRunnerHandle::Get()),
       affiliation_service_(std::move(affiliation_service)),
diff --git a/components/password_manager/core/browser/affiliated_match_helper.h b/components/password_manager/core/browser/affiliated_match_helper.h
index bde81a8..a72268f8 100644
--- a/components/password_manager/core/browser/affiliated_match_helper.h
+++ b/components/password_manager/core/browser/affiliated_match_helper.h
@@ -7,13 +7,13 @@
 
 #include <stdint.h>
 
+#include <memory>
 #include <string>
 #include <vector>
 
 #include "base/callback_forward.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/scoped_vector.h"
 #include "components/password_manager/core/browser/affiliation_utils.h"
 #include "components/password_manager/core/browser/password_store.h"
@@ -59,8 +59,9 @@
 
   // The |password_store| must outlive |this|. Both arguments must be non-NULL,
   // except in tests which do not Initialize() the object.
-  AffiliatedMatchHelper(PasswordStore* password_store,
-                        scoped_ptr<AffiliationService> affiliation_service);
+  AffiliatedMatchHelper(
+      PasswordStore* password_store,
+      std::unique_ptr<AffiliationService> affiliation_service);
   ~AffiliatedMatchHelper() override;
 
   // Schedules deferred initialization.
@@ -156,7 +157,7 @@
   scoped_refptr<base::SingleThreadTaskRunner> task_runner_for_waiting_;
 
   // Being the sole consumer of AffiliationService, |this| owns the service.
-  scoped_ptr<AffiliationService> affiliation_service_;
+  std::unique_ptr<AffiliationService> affiliation_service_;
 
   base::WeakPtrFactory<AffiliatedMatchHelper> weak_ptr_factory_;
 
diff --git a/components/password_manager/core/browser/affiliated_match_helper_unittest.cc b/components/password_manager/core/browser/affiliated_match_helper_unittest.cc
index e9d8b0e..68bdefb 100644
--- a/components/password_manager/core/browser/affiliated_match_helper_unittest.cc
+++ b/components/password_manager/core/browser/affiliated_match_helper_unittest.cc
@@ -5,11 +5,12 @@
 #include "components/password_manager/core/browser/affiliated_match_helper.h"
 
 #include <stddef.h>
+
+#include <memory>
 #include <utility>
 
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/strings/utf_string_conversions.h"
@@ -319,7 +320,8 @@
 
   // testing::Test:
   void SetUp() override {
-    scoped_ptr<MockAffiliationService> service(new MockAffiliationService());
+    std::unique_ptr<MockAffiliationService> service(
+        new MockAffiliationService());
     mock_affiliation_service_ = service.get();
 
     password_store_ = new TestPasswordStore;
@@ -342,7 +344,7 @@
   bool expecting_result_callback_;
 
   scoped_refptr<TestPasswordStore> password_store_;
-  scoped_ptr<AffiliatedMatchHelper> match_helper_;
+  std::unique_ptr<AffiliatedMatchHelper> match_helper_;
 
   // Owned by |match_helper_|.
   MockAffiliationService* mock_affiliation_service_;
diff --git a/components/password_manager/core/browser/affiliation_backend.cc b/components/password_manager/core/browser/affiliation_backend.cc
index bd258f2..f7881bf 100644
--- a/components/password_manager/core/browser/affiliation_backend.cc
+++ b/components/password_manager/core/browser/affiliation_backend.cc
@@ -27,8 +27,8 @@
 AffiliationBackend::AffiliationBackend(
     const scoped_refptr<net::URLRequestContextGetter>& request_context_getter,
     const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
-    scoped_ptr<base::Clock> time_source,
-    scoped_ptr<base::TickClock> time_tick_source)
+    std::unique_ptr<base::Clock> time_source,
+    std::unique_ptr<base::TickClock> time_tick_source)
     : request_context_getter_(request_context_getter),
       task_runner_(task_runner),
       clock_(std::move(time_source)),
@@ -122,7 +122,7 @@
 FacetManager* AffiliationBackend::GetOrCreateFacetManager(
     const FacetURI& facet_uri) {
   if (!facet_managers_.contains(facet_uri)) {
-    scoped_ptr<FacetManager> new_manager(
+    std::unique_ptr<FacetManager> new_manager(
         new FacetManager(facet_uri, this, clock_.get()));
     facet_managers_.add(facet_uri, std::move(new_manager));
   }
@@ -178,7 +178,7 @@
 }
 
 void AffiliationBackend::OnFetchSucceeded(
-    scoped_ptr<AffiliationFetcherDelegate::Result> result) {
+    std::unique_ptr<AffiliationFetcherDelegate::Result> result) {
   DCHECK(thread_checker_ && thread_checker_->CalledOnValidThread());
 
   fetcher_.reset();
@@ -283,7 +283,7 @@
 }
 
 void AffiliationBackend::SetThrottlerForTesting(
-    scoped_ptr<AffiliationFetchThrottler> throttler) {
+    std::unique_ptr<AffiliationFetchThrottler> throttler) {
   throttler_ = std::move(throttler);
 }
 
diff --git a/components/password_manager/core/browser/affiliation_backend.h b/components/password_manager/core/browser/affiliation_backend.h
index 63ca56c9..5b2a05e 100644
--- a/components/password_manager/core/browser/affiliation_backend.h
+++ b/components/password_manager/core/browser/affiliation_backend.h
@@ -62,8 +62,8 @@
   AffiliationBackend(
       const scoped_refptr<net::URLRequestContextGetter>& request_context_getter,
       const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
-      scoped_ptr<base::Clock> time_source,
-      scoped_ptr<base::TickClock> time_tick_source);
+      std::unique_ptr<base::Clock> time_source,
+      std::unique_ptr<base::TickClock> time_tick_source);
   ~AffiliationBackend() override;
 
   // Performs the I/O-heavy part of initialization. The database used to cache
@@ -116,7 +116,7 @@
 
   // AffiliationFetcherDelegate:
   void OnFetchSucceeded(
-      scoped_ptr<AffiliationFetcherDelegate::Result> result) override;
+      std::unique_ptr<AffiliationFetcherDelegate::Result> result) override;
   void OnFetchFailed() override;
   void OnMalformedResponse() override;
 
@@ -132,27 +132,29 @@
 
   // To be called after Initialize() to use |throttler| instead of the default
   // one. Used only for testing.
-  void SetThrottlerForTesting(scoped_ptr<AffiliationFetchThrottler> throttler);
+  void SetThrottlerForTesting(
+      std::unique_ptr<AffiliationFetchThrottler> throttler);
 
   // Created in Initialize(), and ensures that all subsequent methods are called
   // on the same thread.
-  scoped_ptr<base::ThreadChecker> thread_checker_;
+  std::unique_ptr<base::ThreadChecker> thread_checker_;
 
   scoped_refptr<net::URLRequestContextGetter> request_context_getter_;
   scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
-  scoped_ptr<base::Clock> clock_;
-  scoped_ptr<base::TickClock> tick_clock_;
+  std::unique_ptr<base::Clock> clock_;
+  std::unique_ptr<base::TickClock> tick_clock_;
 
-  scoped_ptr<AffiliationDatabase> cache_;
-  scoped_ptr<AffiliationFetcher> fetcher_;
-  scoped_ptr<AffiliationFetchThrottler> throttler_;
+  std::unique_ptr<AffiliationDatabase> cache_;
+  std::unique_ptr<AffiliationFetcher> fetcher_;
+  std::unique_ptr<AffiliationFetchThrottler> throttler_;
 
   base::Time construction_time_;
   base::Time last_request_time_;
 
   // Contains a FacetManager for each facet URI that need ongoing attention. To
   // save memory, managers are discarded as soon as they become redundant.
-  base::ScopedPtrHashMap<FacetURI, scoped_ptr<FacetManager>> facet_managers_;
+  base::ScopedPtrHashMap<FacetURI, std::unique_ptr<FacetManager>>
+      facet_managers_;
 
   base::WeakPtrFactory<AffiliationBackend> weak_ptr_factory_;
 
diff --git a/components/password_manager/core/browser/affiliation_backend_unittest.cc b/components/password_manager/core/browser/affiliation_backend_unittest.cc
index d19e53dc..9c10c76 100644
--- a/components/password_manager/core/browser/affiliation_backend_unittest.cc
+++ b/components/password_manager/core/browser/affiliation_backend_unittest.cc
@@ -6,11 +6,13 @@
 
 #include <stddef.h>
 
+#include <memory>
+
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/macros.h"
+#include "base/memory/ptr_util.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/test/test_mock_time_task_runner.h"
 #include "base/test/test_simple_task_runner.h"
 #include "base/time/clock.h"
@@ -283,12 +285,12 @@
   }
 
   bool IsCachedDataFreshForFacet(const FacetURI& facet_uri) {
-    scoped_ptr<base::Clock> clock(backend_task_runner_->GetMockClock());
+    std::unique_ptr<base::Clock> clock(backend_task_runner_->GetMockClock());
     return FacetManager(facet_uri, backend(), clock.get()).IsCachedDataFresh();
   }
 
   bool IsCachedDataNearStaleForFacet(const FacetURI& facet_uri) {
-    scoped_ptr<base::Clock> clock(backend_task_runner_->GetMockClock());
+    std::unique_ptr<base::Clock> clock(backend_task_runner_->GetMockClock());
     return FacetManager(facet_uri, backend(), clock.get())
         .IsCachedDataNearStale();
   }
@@ -325,7 +327,7 @@
     backend_->Initialize(db_path());
     mock_fetch_throttler_ = new MockAffiliationFetchThrottler(backend_.get());
     backend_->SetThrottlerForTesting(
-        make_scoped_ptr<AffiliationFetchThrottler>(mock_fetch_throttler_));
+        base::WrapUnique<AffiliationFetchThrottler>(mock_fetch_throttler_));
 
     fake_affiliation_api_.AddTestEquivalenceClass(
         GetTestEquivalenceClassAlpha());
@@ -341,7 +343,7 @@
   base::FilePath db_path_;
   ScopedFakeAffiliationAPI fake_affiliation_api_;
   MockAffiliationConsumer mock_consumer_;
-  scoped_ptr<AffiliationBackend> backend_;
+  std::unique_ptr<AffiliationBackend> backend_;
   MockAffiliationFetchThrottler* mock_fetch_throttler_;  // Owned by |backend_|.
 
   DISALLOW_COPY_AND_ASSIGN(AffiliationBackendTest);
diff --git a/components/password_manager/core/browser/affiliation_database.h b/components/password_manager/core/browser/affiliation_database.h
index 621add9c..c9b418c5 100644
--- a/components/password_manager/core/browser/affiliation_database.h
+++ b/components/password_manager/core/browser/affiliation_database.h
@@ -5,8 +5,9 @@
 #ifndef COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_AFFILIATION_DATABASE_H_
 #define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_AFFILIATION_DATABASE_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/time/time.h"
 #include "components/password_manager/core/browser/affiliation_utils.h"
 
@@ -82,7 +83,7 @@
   void SQLErrorCallback(int error_number, sql::Statement* statement);
 
   // The SQL connection to the database.
-  scoped_ptr<sql::Connection> sql_connection_;
+  std::unique_ptr<sql::Connection> sql_connection_;
 
   DISALLOW_COPY_AND_ASSIGN(AffiliationDatabase);
 };
diff --git a/components/password_manager/core/browser/affiliation_database_unittest.cc b/components/password_manager/core/browser/affiliation_database_unittest.cc
index 920281f..dab7968 100644
--- a/components/password_manager/core/browser/affiliation_database_unittest.cc
+++ b/components/password_manager/core/browser/affiliation_database_unittest.cc
@@ -99,7 +99,7 @@
 
  private:
   base::ScopedTempDir temp_directory_;
-  scoped_ptr<AffiliationDatabase> db_;
+  std::unique_ptr<AffiliationDatabase> db_;
 
   DISALLOW_COPY_AND_ASSIGN(AffiliationDatabaseTest);
 };
diff --git a/components/password_manager/core/browser/affiliation_fetch_throttler.h b/components/password_manager/core/browser/affiliation_fetch_throttler.h
index e793d0d..42743aa 100644
--- a/components/password_manager/core/browser/affiliation_fetch_throttler.h
+++ b/components/password_manager/core/browser/affiliation_fetch_throttler.h
@@ -7,10 +7,11 @@
 
 #include <stdint.h>
 
+#include <memory>
+
 #include "base/gtest_prod_util.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "net/base/backoff_entry.h"
 #include "net/base/network_change_notifier.h"
@@ -122,7 +123,7 @@
   State state_;
   bool has_network_connectivity_;
   bool is_fetch_scheduled_;
-  scoped_ptr<net::BackoffEntry> exponential_backoff_;
+  std::unique_ptr<net::BackoffEntry> exponential_backoff_;
 
   base::WeakPtrFactory<AffiliationFetchThrottler> weak_ptr_factory_;
 
diff --git a/components/password_manager/core/browser/affiliation_fetch_throttler_unittest.cc b/components/password_manager/core/browser/affiliation_fetch_throttler_unittest.cc
index 17d5d54..4e8cd9b 100644
--- a/components/password_manager/core/browser/affiliation_fetch_throttler_unittest.cc
+++ b/components/password_manager/core/browser/affiliation_fetch_throttler_unittest.cc
@@ -8,11 +8,12 @@
 #include <stdint.h>
 
 #include <cmath>
+#include <memory>
 
 #include "base/callback.h"
 #include "base/macros.h"
+#include "base/memory/ptr_util.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/message_loop/message_loop.h"
 #include "base/numerics/safe_math.h"
 #include "base/run_loop.h"
@@ -71,8 +72,8 @@
         mock_delegate_(mock_tick_clock_.get()) {}
   ~AffiliationFetchThrottlerTest() override {}
 
-  scoped_ptr<AffiliationFetchThrottler> CreateThrottler() {
-    return make_scoped_ptr(new AffiliationFetchThrottler(
+  std::unique_ptr<AffiliationFetchThrottler> CreateThrottler() {
+    return base::WrapUnique(new AffiliationFetchThrottler(
         &mock_delegate_, task_runner_, mock_tick_clock_.get()));
   }
 
@@ -128,16 +129,16 @@
   // observers on the MessageLoop that belongs to the thread from which they
   // have registered.
   base::MessageLoop message_loop_;
-  scoped_ptr<net::NetworkChangeNotifier> network_change_notifier_;
+  std::unique_ptr<net::NetworkChangeNotifier> network_change_notifier_;
   scoped_refptr<base::TestMockTimeTaskRunner> task_runner_;
-  scoped_ptr<base::TickClock> mock_tick_clock_;
+  std::unique_ptr<base::TickClock> mock_tick_clock_;
   MockAffiliationFetchThrottlerDelegate mock_delegate_;
 
   DISALLOW_COPY_AND_ASSIGN(AffiliationFetchThrottlerTest);
 };
 
 TEST_F(AffiliationFetchThrottlerTest, SuccessfulRequests) {
-  scoped_ptr<AffiliationFetchThrottler> throttler(CreateThrottler());
+  std::unique_ptr<AffiliationFetchThrottler> throttler(CreateThrottler());
 
   throttler->SignalNetworkRequestNeeded();
   ASSERT_NO_FATAL_FAILURE(AssertReleaseInBetween(true, 0, 0));
@@ -156,7 +157,7 @@
 }
 
 TEST_F(AffiliationFetchThrottlerTest, FailedRequests) {
-  scoped_ptr<AffiliationFetchThrottler> throttler(CreateThrottler());
+  std::unique_ptr<AffiliationFetchThrottler> throttler(CreateThrottler());
 
   throttler->SignalNetworkRequestNeeded();
   ASSERT_NO_FATAL_FAILURE(AssertReleaseInBetween(true, 0, 0));
@@ -197,7 +198,7 @@
 }
 
 TEST_F(AffiliationFetchThrottlerTest, OnCanSendNetworkRequestReturnsFalse) {
-  scoped_ptr<AffiliationFetchThrottler> throttler(CreateThrottler());
+  std::unique_ptr<AffiliationFetchThrottler> throttler(CreateThrottler());
 
   // A need for a network request is signaled, but as OnCanSendNetworkRequest()
   // is called, the implementation returns false to indicate that the request
@@ -213,7 +214,7 @@
 }
 
 TEST_F(AffiliationFetchThrottlerTest, GracePeriodAfterConnectivityIsRestored) {
-  scoped_ptr<AffiliationFetchThrottler> throttler(CreateThrottler());
+  std::unique_ptr<AffiliationFetchThrottler> throttler(CreateThrottler());
   SimulateHasNetworkConnectivity(false);
 
   // After connectivity is restored, the first request should be delayed by the
@@ -237,7 +238,7 @@
 // Same as GracePeriodAfterConnectivityIsRestored, but the network comes back
 // just before SignalNetworkRequestNeeded() is called.
 TEST_F(AffiliationFetchThrottlerTest, GracePeriodAfterConnectivityIsRestored2) {
-  scoped_ptr<AffiliationFetchThrottler> throttler(CreateThrottler());
+  std::unique_ptr<AffiliationFetchThrottler> throttler(CreateThrottler());
   SimulateHasNetworkConnectivity(false);
 
   SimulateHasNetworkConnectivity(true);
@@ -254,7 +255,7 @@
 }
 
 TEST_F(AffiliationFetchThrottlerTest, ConnectivityLostDuringBackoff) {
-  scoped_ptr<AffiliationFetchThrottler> throttler(CreateThrottler());
+  std::unique_ptr<AffiliationFetchThrottler> throttler(CreateThrottler());
 
   throttler->SignalNetworkRequestNeeded();
   ASSERT_NO_FATAL_FAILURE(AssertReleaseInBetween(true, 0, 0));
@@ -279,7 +280,7 @@
 
 TEST_F(AffiliationFetchThrottlerTest,
        ConnectivityLostAndRestoredDuringBackoff) {
-  scoped_ptr<AffiliationFetchThrottler> throttler(CreateThrottler());
+  std::unique_ptr<AffiliationFetchThrottler> throttler(CreateThrottler());
 
   throttler->SignalNetworkRequestNeeded();
   ASSERT_NO_FATAL_FAILURE(AssertReleaseInBetween(true, 0, 0));
@@ -312,7 +313,7 @@
 }
 
 TEST_F(AffiliationFetchThrottlerTest, FlakyConnectivity) {
-  scoped_ptr<AffiliationFetchThrottler> throttler(CreateThrottler());
+  std::unique_ptr<AffiliationFetchThrottler> throttler(CreateThrottler());
 
   throttler->SignalNetworkRequestNeeded();
   ASSERT_NO_FATAL_FAILURE(AssertReleaseInBetween(true, 0, 0));
@@ -339,7 +340,7 @@
 }
 
 TEST_F(AffiliationFetchThrottlerTest, ConnectivityLostDuringRequest) {
-  scoped_ptr<AffiliationFetchThrottler> throttler(CreateThrottler());
+  std::unique_ptr<AffiliationFetchThrottler> throttler(CreateThrottler());
 
   throttler->SignalNetworkRequestNeeded();
   ASSERT_NO_FATAL_FAILURE(AssertReleaseInBetween(true, 0, 0));
@@ -364,7 +365,7 @@
 
 TEST_F(AffiliationFetchThrottlerTest,
        ConnectivityLostAndRestoredDuringRequest) {
-  scoped_ptr<AffiliationFetchThrottler> throttler(CreateThrottler());
+  std::unique_ptr<AffiliationFetchThrottler> throttler(CreateThrottler());
 
   throttler->SignalNetworkRequestNeeded();
   ASSERT_NO_FATAL_FAILURE(AssertReleaseInBetween(true, 0, 0));
@@ -388,7 +389,7 @@
 
 TEST_F(AffiliationFetchThrottlerTest,
        ConnectivityLostAndRestoredDuringRequest2) {
-  scoped_ptr<AffiliationFetchThrottler> throttler(CreateThrottler());
+  std::unique_ptr<AffiliationFetchThrottler> throttler(CreateThrottler());
 
   throttler->SignalNetworkRequestNeeded();
   ASSERT_NO_FATAL_FAILURE(AssertReleaseInBetween(true, 0, 0));
@@ -408,7 +409,7 @@
 }
 
 TEST_F(AffiliationFetchThrottlerTest, InstanceDestroyedWhileInBackoff) {
-  scoped_ptr<AffiliationFetchThrottler> throttler(CreateThrottler());
+  std::unique_ptr<AffiliationFetchThrottler> throttler(CreateThrottler());
 
   throttler->SignalNetworkRequestNeeded();
   ASSERT_NO_FATAL_FAILURE(AssertReleaseInBetween(true, 0, 0));
diff --git a/components/password_manager/core/browser/affiliation_fetcher.cc b/components/password_manager/core/browser/affiliation_fetcher.cc
index cad2e7a..004c221 100644
--- a/components/password_manager/core/browser/affiliation_fetcher.cc
+++ b/components/password_manager/core/browser/affiliation_fetcher.cc
@@ -199,7 +199,7 @@
 
   // Note that invoking the |delegate_| may destroy |this| synchronously, so the
   // invocation must happen last.
-  scoped_ptr<AffiliationFetcherDelegate::Result> result_data(
+  std::unique_ptr<AffiliationFetcherDelegate::Result> result_data(
       new AffiliationFetcherDelegate::Result);
   if (fetcher_->GetStatus().status() == net::URLRequestStatus::SUCCESS &&
       fetcher_->GetResponseCode() == net::HTTP_OK) {
diff --git a/components/password_manager/core/browser/affiliation_fetcher.h b/components/password_manager/core/browser/affiliation_fetcher.h
index 408a348..b606ce06 100644
--- a/components/password_manager/core/browser/affiliation_fetcher.h
+++ b/components/password_manager/core/browser/affiliation_fetcher.h
@@ -89,7 +89,7 @@
   const std::vector<FacetURI> requested_facet_uris_;
   AffiliationFetcherDelegate* const delegate_;
 
-  scoped_ptr<net::URLFetcher> fetcher_;
+  std::unique_ptr<net::URLFetcher> fetcher_;
 
   DISALLOW_COPY_AND_ASSIGN(AffiliationFetcher);
 };
diff --git a/components/password_manager/core/browser/affiliation_fetcher_delegate.h b/components/password_manager/core/browser/affiliation_fetcher_delegate.h
index fdea5b8..b67e636 100644
--- a/components/password_manager/core/browser/affiliation_fetcher_delegate.h
+++ b/components/password_manager/core/browser/affiliation_fetcher_delegate.h
@@ -5,9 +5,9 @@
 #ifndef COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_AFFILIATION_FETCHER_DELEGATE_H_
 #define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_AFFILIATION_FETCHER_DELEGATE_H_
 
+#include <memory>
 #include <vector>
 
-#include "base/memory/scoped_ptr.h"
 #include "components/password_manager/core/browser/affiliation_utils.h"
 
 namespace password_manager {
@@ -23,7 +23,7 @@
   // |result| will contain at most as many equivalence class as facet URIs in
   // the request, and each requested facet URI will appear in exactly one
   // equivalence class.
-  virtual void OnFetchSucceeded(scoped_ptr<Result> result) = 0;
+  virtual void OnFetchSucceeded(std::unique_ptr<Result> result) = 0;
 
   // Called when affiliation information could not be fetched due to a network
   // error or a presumably transient server error. The implementor may and will
diff --git a/components/password_manager/core/browser/affiliation_fetcher_unittest.cc b/components/password_manager/core/browser/affiliation_fetcher_unittest.cc
index 0b1ecb1..1ee3c94 100644
--- a/components/password_manager/core/browser/affiliation_fetcher_unittest.cc
+++ b/components/password_manager/core/browser/affiliation_fetcher_unittest.cc
@@ -32,7 +32,7 @@
   MOCK_METHOD0(OnFetchFailed, void());
   MOCK_METHOD0(OnMalformedResponse, void());
 
-  void OnFetchSucceeded(scoped_ptr<Result> result) override {
+  void OnFetchSucceeded(std::unique_ptr<Result> result) override {
     OnFetchSucceededProxy();
     result_ = std::move(result);
   }
@@ -40,7 +40,7 @@
   const Result& result() const { return *result_.get(); }
 
  private:
-  scoped_ptr<Result> result_;
+  std::unique_ptr<Result> result_;
 
   DISALLOW_COPY_AND_ASSIGN(MockAffiliationFetcherDelegate);
 };
@@ -132,7 +132,7 @@
       FacetURI::FromCanonicalSpec(kNotExampleAndroidFacetURI));
 
   MockAffiliationFetcherDelegate mock_delegate;
-  scoped_ptr<AffiliationFetcher> fetcher(AffiliationFetcher::Create(
+  std::unique_ptr<AffiliationFetcher> fetcher(AffiliationFetcher::Create(
       request_context_getter(), requested_uris, &mock_delegate));
   fetcher->StartRequest();
 
@@ -164,7 +164,7 @@
   requested_uris.push_back(FacetURI::FromCanonicalSpec(kExampleWebFacet1URI));
 
   MockAffiliationFetcherDelegate mock_delegate;
-  scoped_ptr<AffiliationFetcher> fetcher(AffiliationFetcher::Create(
+  std::unique_ptr<AffiliationFetcher> fetcher(AffiliationFetcher::Create(
       request_context_getter(), requested_uris, &mock_delegate));
   fetcher->StartRequest();
 
@@ -195,7 +195,7 @@
   requested_uris.push_back(FacetURI::FromCanonicalSpec(kExampleWebFacet1URI));
 
   MockAffiliationFetcherDelegate mock_delegate;
-  scoped_ptr<AffiliationFetcher> fetcher(AffiliationFetcher::Create(
+  std::unique_ptr<AffiliationFetcher> fetcher(AffiliationFetcher::Create(
       request_context_getter(), requested_uris, &mock_delegate));
   fetcher->StartRequest();
 
@@ -222,7 +222,7 @@
   requested_uris.push_back(FacetURI::FromCanonicalSpec(kExampleWebFacet1URI));
 
   MockAffiliationFetcherDelegate mock_delegate;
-  scoped_ptr<AffiliationFetcher> fetcher(AffiliationFetcher::Create(
+  std::unique_ptr<AffiliationFetcher> fetcher(AffiliationFetcher::Create(
       request_context_getter(), requested_uris, &mock_delegate));
   fetcher->StartRequest();
 
@@ -253,7 +253,7 @@
   requested_uris.push_back(FacetURI::FromCanonicalSpec(kExampleWebFacet1URI));
 
   MockAffiliationFetcherDelegate mock_delegate;
-  scoped_ptr<AffiliationFetcher> fetcher(AffiliationFetcher::Create(
+  std::unique_ptr<AffiliationFetcher> fetcher(AffiliationFetcher::Create(
       request_context_getter(), requested_uris, &mock_delegate));
   fetcher->StartRequest();
 
@@ -276,7 +276,7 @@
   uris.push_back(FacetURI::FromCanonicalSpec(kExampleWebFacet1URI));
 
   MockAffiliationFetcherDelegate mock_delegate;
-  scoped_ptr<AffiliationFetcher> fetcher(AffiliationFetcher::Create(
+  std::unique_ptr<AffiliationFetcher> fetcher(AffiliationFetcher::Create(
       request_context_getter(), uris, &mock_delegate));
   fetcher->StartRequest();
 
@@ -300,7 +300,7 @@
   uris.push_back(FacetURI::FromCanonicalSpec(kExampleWebFacet1URI));
 
   MockAffiliationFetcherDelegate mock_delegate;
-  scoped_ptr<AffiliationFetcher> fetcher(AffiliationFetcher::Create(
+  std::unique_ptr<AffiliationFetcher> fetcher(AffiliationFetcher::Create(
       request_context_getter(), uris, &mock_delegate));
   fetcher->StartRequest();
 
@@ -313,7 +313,7 @@
   uris.push_back(FacetURI::FromCanonicalSpec(kExampleWebFacet1URI));
 
   MockAffiliationFetcherDelegate mock_delegate;
-  scoped_ptr<AffiliationFetcher> fetcher(AffiliationFetcher::Create(
+  std::unique_ptr<AffiliationFetcher> fetcher(AffiliationFetcher::Create(
       request_context_getter(), uris, &mock_delegate));
   fetcher->StartRequest();
 
@@ -326,7 +326,7 @@
   uris.push_back(FacetURI::FromCanonicalSpec(kExampleWebFacet1URI));
 
   MockAffiliationFetcherDelegate mock_delegate;
-  scoped_ptr<AffiliationFetcher> fetcher(AffiliationFetcher::Create(
+  std::unique_ptr<AffiliationFetcher> fetcher(AffiliationFetcher::Create(
       request_context_getter(), uris, &mock_delegate));
   fetcher->StartRequest();
 
diff --git a/components/password_manager/core/browser/affiliation_service.cc b/components/password_manager/core/browser/affiliation_service.cc
index 3d55d5f6..55ea2aea 100644
--- a/components/password_manager/core/browser/affiliation_service.cc
+++ b/components/password_manager/core/browser/affiliation_service.cc
@@ -8,6 +8,7 @@
 #include "base/bind_helpers.h"
 #include "base/files/file_path.h"
 #include "base/location.h"
+#include "base/memory/ptr_util.h"
 #include "base/single_thread_task_runner.h"
 #include "base/thread_task_runner_handle.h"
 #include "base/time/default_clock.h"
@@ -39,10 +40,10 @@
   DCHECK(!backend_);
   backend_ =
       new AffiliationBackend(request_context_getter, backend_task_runner_,
-                             make_scoped_ptr(new base::DefaultClock),
-                             make_scoped_ptr(new base::DefaultTickClock));
+                             base::WrapUnique(new base::DefaultClock),
+                             base::WrapUnique(new base::DefaultTickClock));
 
-  scoped_ptr<base::TickClock> tick_clock(new base::DefaultTickClock);
+  std::unique_ptr<base::TickClock> tick_clock(new base::DefaultTickClock);
   backend_task_runner_->PostTask(
       FROM_HERE, base::Bind(&AffiliationBackend::Initialize,
                             base::Unretained(backend_), db_path));
diff --git a/components/password_manager/core/browser/affiliation_service_unittest.cc b/components/password_manager/core/browser/affiliation_service_unittest.cc
index 4a85811..0d54ef54 100644
--- a/components/password_manager/core/browser/affiliation_service_unittest.cc
+++ b/components/password_manager/core/browser/affiliation_service_unittest.cc
@@ -7,11 +7,12 @@
 
 #include "components/password_manager/core/browser/affiliation_service.h"
 
+#include <memory>
+
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/test/test_mock_time_task_runner.h"
 #include "base/test/test_simple_task_runner.h"
 #include "base/thread_task_runner_handle.h"
@@ -95,7 +96,7 @@
   ScopedFakeAffiliationAPI fake_affiliation_api_;
   MockAffiliationConsumer mock_consumer_;
 
-  scoped_ptr<AffiliationService> service_;
+  std::unique_ptr<AffiliationService> service_;
 
   DISALLOW_COPY_AND_ASSIGN(AffiliationServiceTest);
 };
diff --git a/components/password_manager/core/browser/credential_manager_pending_request_task.cc b/components/password_manager/core/browser/credential_manager_pending_request_task.cc
index 4145b18..1e1b6cd 100644
--- a/components/password_manager/core/browser/credential_manager_pending_request_task.cc
+++ b/components/password_manager/core/browser/credential_manager_pending_request_task.cc
@@ -116,7 +116,7 @@
   // Otherwise, return an empty credential if we're in zero-click-only mode
   // or if the user chooses not to return a credential, and the credential the
   // user chooses if they pick one.
-  scoped_ptr<autofill::PasswordForm> potential_autosignin_form(
+  std::unique_ptr<autofill::PasswordForm> potential_autosignin_form(
       new autofill::PasswordForm(*local_results[0]));
   if (zero_click_only_ ||
       !delegate_->client()->PromptUserToChooseCredentials(
diff --git a/components/password_manager/core/browser/facet_manager_unittest.cc b/components/password_manager/core/browser/facet_manager_unittest.cc
index 554e49d..7bb7c71 100644
--- a/components/password_manager/core/browser/facet_manager_unittest.cc
+++ b/components/password_manager/core/browser/facet_manager_unittest.cc
@@ -6,12 +6,13 @@
 
 #include <stddef.h>
 
+#include <memory>
+
 #include "base/bind.h"
 #include "base/bind_helpers.h"
 #include "base/location.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/rand_util.h"
 #include "base/test/test_mock_time_task_runner.h"
 #include "base/test/test_simple_task_runner.h"
@@ -400,11 +401,11 @@
   MockAffiliationConsumer mock_consumer_;
   scoped_refptr<base::TestSimpleTaskRunner> consumer_task_runner_;
   scoped_refptr<base::TestMockTimeTaskRunner> main_task_runner_;
-  scoped_ptr<base::Clock> main_clock_;
+  std::unique_ptr<base::Clock> main_clock_;
   TestFacetManagerNotifier facet_manager_notifier_;
   MockFacetManagerHost facet_manager_host_;
 
-  scoped_ptr<FacetManager> facet_manager_;
+  std::unique_ptr<FacetManager> facet_manager_;
   base::Time facet_manager_creation_;
 
   DISALLOW_COPY_AND_ASSIGN(FacetManagerTest);
diff --git a/components/password_manager/core/browser/fake_affiliation_api.cc b/components/password_manager/core/browser/fake_affiliation_api.cc
index 6edd706..6db19f0 100644
--- a/components/password_manager/core/browser/fake_affiliation_api.cc
+++ b/components/password_manager/core/browser/fake_affiliation_api.cc
@@ -5,9 +5,9 @@
 #include "components/password_manager/core/browser/fake_affiliation_api.h"
 
 #include <algorithm>
+#include <memory>
 #include <utility>
 
-#include "base/memory/scoped_ptr.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace password_manager {
@@ -43,7 +43,7 @@
     return;
 
   FakeAffiliationFetcher* fetcher = fake_fetcher_factory_.PopNextFetcher();
-  scoped_ptr<AffiliationFetcherDelegate::Result> fake_response(
+  std::unique_ptr<AffiliationFetcherDelegate::Result> fake_response(
       new AffiliationFetcherDelegate::Result);
   for (const auto& preset_equivalence_class : preset_equivalence_relation_) {
     bool had_intersection_with_request = false;
diff --git a/components/password_manager/core/browser/fake_affiliation_fetcher.cc b/components/password_manager/core/browser/fake_affiliation_fetcher.cc
index 2aa5842f..bad984f 100644
--- a/components/password_manager/core/browser/fake_affiliation_fetcher.cc
+++ b/components/password_manager/core/browser/fake_affiliation_fetcher.cc
@@ -19,7 +19,7 @@
 }
 
 void password_manager::FakeAffiliationFetcher::SimulateSuccess(
-    scoped_ptr<AffiliationFetcherDelegate::Result> fake_result) {
+    std::unique_ptr<AffiliationFetcherDelegate::Result> fake_result) {
   delegate()->OnFetchSucceeded(std::move(fake_result));
 }
 
diff --git a/components/password_manager/core/browser/fake_affiliation_fetcher.h b/components/password_manager/core/browser/fake_affiliation_fetcher.h
index bcebcc4..d2a5037 100644
--- a/components/password_manager/core/browser/fake_affiliation_fetcher.h
+++ b/components/password_manager/core/browser/fake_affiliation_fetcher.h
@@ -5,10 +5,10 @@
 #ifndef COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_FAKE_AFFILIATION_FETCHER_H_
 #define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_FAKE_AFFILIATION_FETCHER_H_
 
+#include <memory>
 #include <queue>
 
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/password_manager/core/browser/affiliation_fetcher.h"
 #include "components/password_manager/core/browser/affiliation_fetcher_delegate.h"
 #include "components/password_manager/core/browser/test_affiliation_fetcher_factory.h"
@@ -27,7 +27,7 @@
   // Simulates successful completion of the request with |fake_result|. Note
   // that the consumer may choose to destroy |this| from within this call.
   void SimulateSuccess(
-      scoped_ptr<AffiliationFetcherDelegate::Result> fake_result);
+      std::unique_ptr<AffiliationFetcherDelegate::Result> fake_result);
 
   // Simulates completion of the request with failure. Note that the consumer
   // may choose to destroy |this| from within this call.
diff --git a/components/password_manager/core/browser/log_manager.cc b/components/password_manager/core/browser/log_manager.cc
index 8f78eee4..17dd339 100644
--- a/components/password_manager/core/browser/log_manager.cc
+++ b/components/password_manager/core/browser/log_manager.cc
@@ -5,6 +5,7 @@
 #include "components/password_manager/core/browser/log_manager.h"
 
 #include "base/macros.h"
+#include "base/memory/ptr_util.h"
 #include "components/password_manager/core/browser/log_router.h"
 
 namespace password_manager {
@@ -86,9 +87,11 @@
 }  // namespace
 
 // static
-scoped_ptr<LogManager> LogManager::Create(LogRouter* log_router,
-                                          base::Closure notification_callback) {
-  return make_scoped_ptr(new LogManagerImpl(log_router, notification_callback));
+std::unique_ptr<LogManager> LogManager::Create(
+    LogRouter* log_router,
+    base::Closure notification_callback) {
+  return base::WrapUnique(
+      new LogManagerImpl(log_router, notification_callback));
 }
 
 }  // namespace password_manager
diff --git a/components/password_manager/core/browser/log_manager.h b/components/password_manager/core/browser/log_manager.h
index 875f0b8d..39d056b 100644
--- a/components/password_manager/core/browser/log_manager.h
+++ b/components/password_manager/core/browser/log_manager.h
@@ -5,11 +5,11 @@
 #ifndef COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_LOG_MANAGER_H_
 #define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_LOG_MANAGER_H_
 
+#include <memory>
 #include <string>
 
 #include "base/callback.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 
 namespace password_manager {
 
@@ -42,8 +42,9 @@
   // Returns the production code implementation of LogManager. If |log_router|
   // is null, the manager will do nothing. |notification_callback| will be
   // called every time the activity status of logging changes.
-  static scoped_ptr<LogManager> Create(LogRouter* log_router,
-                                       base::Closure notification_callback);
+  static std::unique_ptr<LogManager> Create(
+      LogRouter* log_router,
+      base::Closure notification_callback);
 };
 
 }  // namespace password_manager
diff --git a/components/password_manager/core/browser/log_manager_unittest.cc b/components/password_manager/core/browser/log_manager_unittest.cc
index 153da91..31afe6ba 100644
--- a/components/password_manager/core/browser/log_manager_unittest.cc
+++ b/components/password_manager/core/browser/log_manager_unittest.cc
@@ -56,7 +56,7 @@
   testing::StrictMock<MockLogReceiver> receiver_;
   LogRouter router_;
   testing::StrictMock<MockNotifiedObject> notified_object_;
-  scoped_ptr<LogManager> manager_;
+  std::unique_ptr<LogManager> manager_;
 };
 
 TEST_F(LogManagerTest, LogSavePasswordProgressNoReceiver) {
diff --git a/components/password_manager/core/browser/login_database.cc b/components/password_manager/core/browser/login_database.cc
index 897c155..0cc76ff 100644
--- a/components/password_manager/core/browser/login_database.cc
+++ b/components/password_manager/core/browser/login_database.cc
@@ -1318,7 +1318,7 @@
 
   forms->clear();
   while (statement->Step()) {
-    scoped_ptr<PasswordForm> new_form(new PasswordForm());
+    std::unique_ptr<PasswordForm> new_form(new PasswordForm());
     EncryptionResult result =
         InitPasswordFormFromStatement(new_form.get(), *statement);
     if (result == ENCRYPTION_RESULT_SERVICE_FAILURE)
diff --git a/components/password_manager/core/browser/login_database_ios.cc b/components/password_manager/core/browser/login_database_ios.cc
index 68812c25..4d965ed 100644
--- a/components/password_manager/core/browser/login_database_ios.cc
+++ b/components/password_manager/core/browser/login_database_ios.cc
@@ -7,11 +7,12 @@
 #import <Security/Security.h>
 #include <stddef.h>
 
+#include <memory>
+
 #include "base/base64.h"
 #include "base/logging.h"
 #include "base/mac/mac_logging.h"
 #include "base/mac/scoped_cftyperef.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/metrics/sparse_histogram.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/strings/utf_string_conversions.h"
@@ -101,7 +102,7 @@
   }
 
   const size_t size = CFDataGetLength(data);
-  scoped_ptr<UInt8[]> buffer(new UInt8[size]);
+  std::unique_ptr<UInt8[]> buffer(new UInt8[size]);
   CFDataGetBytes(data, CFRangeMake(0, size), buffer.get());
   CFRelease(data);
 
diff --git a/components/password_manager/core/browser/login_database_ios_unittest.cc b/components/password_manager/core/browser/login_database_ios_unittest.cc
index 60facfc..856cf9f2 100644
--- a/components/password_manager/core/browser/login_database_ios_unittest.cc
+++ b/components/password_manager/core/browser/login_database_ios_unittest.cc
@@ -44,7 +44,7 @@
 
  protected:
   base::ScopedTempDir temp_dir_;
-  scoped_ptr<LoginDatabase> login_db_;
+  std::unique_ptr<LoginDatabase> login_db_;
 };
 
 void LoginDatabaseIOSTest::ClearKeychain() {
diff --git a/components/password_manager/core/browser/login_database_unittest.cc b/components/password_manager/core/browser/login_database_unittest.cc
index 46ba8f57..8b1999e 100644
--- a/components/password_manager/core/browser/login_database_unittest.cc
+++ b/components/password_manager/core/browser/login_database_unittest.cc
@@ -7,9 +7,10 @@
 #include <stddef.h>
 #include <stdint.h>
 
+#include <memory>
+
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/scoped_vector.h"
 #include "base/path_service.h"
 #include "base/strings/string_number_conversions.h"
@@ -206,7 +207,7 @@
 
   base::ScopedTempDir temp_dir_;
   base::FilePath file_;
-  scoped_ptr<LoginDatabase> db_;
+  std::unique_ptr<LoginDatabase> db_;
 };
 
 TEST_F(LoginDatabaseTest, Logins) {
diff --git a/components/password_manager/core/browser/mock_affiliated_match_helper.cc b/components/password_manager/core/browser/mock_affiliated_match_helper.cc
index f3a1efc..4667936 100644
--- a/components/password_manager/core/browser/mock_affiliated_match_helper.cc
+++ b/components/password_manager/core/browser/mock_affiliated_match_helper.cc
@@ -4,6 +4,7 @@
 
 #include "components/password_manager/core/browser/mock_affiliated_match_helper.h"
 
+#include "base/memory/ptr_util.h"
 #include "components/autofill/core/common/password_form.h"
 #include "components/password_manager/core/browser/affiliation_service.h"
 #include "testing/gmock/include/gmock/gmock.h"
@@ -13,7 +14,7 @@
 
 MockAffiliatedMatchHelper::MockAffiliatedMatchHelper()
     : AffiliatedMatchHelper(nullptr,
-                            make_scoped_ptr<AffiliationService>(nullptr)) {}
+                            base::WrapUnique<AffiliationService>(nullptr)) {}
 
 MockAffiliatedMatchHelper::~MockAffiliatedMatchHelper() {}
 
diff --git a/components/password_manager/core/browser/mock_password_store.cc b/components/password_manager/core/browser/mock_password_store.cc
index c55e3a04..ef0c961 100644
--- a/components/password_manager/core/browser/mock_password_store.cc
+++ b/components/password_manager/core/browser/mock_password_store.cc
@@ -4,6 +4,8 @@
 
 #include "components/password_manager/core/browser/mock_password_store.h"
 
+#include "base/memory/ptr_util.h"
+
 namespace password_manager {
 
 MockPasswordStore::MockPasswordStore()
@@ -14,13 +16,13 @@
 MockPasswordStore::~MockPasswordStore() {
 }
 
-std::vector<scoped_ptr<InteractionsStats>> MockPasswordStore::GetSiteStatsImpl(
-    const GURL& origin_domain) {
+std::vector<std::unique_ptr<InteractionsStats>>
+MockPasswordStore::GetSiteStatsImpl(const GURL& origin_domain) {
   std::vector<InteractionsStats*> stats = GetSiteStatsMock(origin_domain);
-  std::vector<scoped_ptr<InteractionsStats>> result;
+  std::vector<std::unique_ptr<InteractionsStats>> result;
   result.reserve(stats.size());
   for (auto* stat : stats) {
-    result.push_back(make_scoped_ptr(stat));
+    result.push_back(base::WrapUnique(stat));
   }
   return result;
 }
diff --git a/components/password_manager/core/browser/mock_password_store.h b/components/password_manager/core/browser/mock_password_store.h
index 5499d50..0c127f7 100644
--- a/components/password_manager/core/browser/mock_password_store.h
+++ b/components/password_manager/core/browser/mock_password_store.h
@@ -56,7 +56,7 @@
                bool(ScopedVector<autofill::PasswordForm>*));
   MOCK_METHOD1(NotifyLoginsChanged, void(const PasswordStoreChangeList&));
   // GMock doesn't allow to return noncopyable types.
-  std::vector<scoped_ptr<InteractionsStats>> GetSiteStatsImpl(
+  std::vector<std::unique_ptr<InteractionsStats>> GetSiteStatsImpl(
       const GURL& origin_domain) override;
   MOCK_METHOD1(GetSiteStatsMock, std::vector<InteractionsStats*>(const GURL&));
   MOCK_METHOD1(AddSiteStatsImpl, void(const InteractionsStats&));
diff --git a/components/password_manager/core/browser/password_autofill_manager_unittest.cc b/components/password_manager/core/browser/password_autofill_manager_unittest.cc
index 275aa2ba..3e0d9c43 100644
--- a/components/password_manager/core/browser/password_autofill_manager_unittest.cc
+++ b/components/password_manager/core/browser/password_autofill_manager_unittest.cc
@@ -107,7 +107,7 @@
   int fill_data_id() { return fill_data_id_; }
   autofill::PasswordFormFillData& fill_data() { return fill_data_; }
 
-  scoped_ptr<PasswordAutofillManager> password_autofill_manager_;
+  std::unique_ptr<PasswordAutofillManager> password_autofill_manager_;
 
   base::string16 test_username_;
   base::string16 test_password_;
@@ -122,7 +122,8 @@
 };
 
 TEST_F(PasswordAutofillManagerTest, FillSuggestion) {
-  scoped_ptr<TestPasswordManagerClient> client(new TestPasswordManagerClient);
+  std::unique_ptr<TestPasswordManagerClient> client(
+      new TestPasswordManagerClient);
   InitializePasswordAutofillManager(client.get(), nullptr);
 
   EXPECT_CALL(*client->mock_driver(),
@@ -146,7 +147,8 @@
 }
 
 TEST_F(PasswordAutofillManagerTest, PreviewSuggestion) {
-  scoped_ptr<TestPasswordManagerClient> client(new TestPasswordManagerClient);
+  std::unique_ptr<TestPasswordManagerClient> client(
+      new TestPasswordManagerClient);
   InitializePasswordAutofillManager(client.get(), nullptr);
 
   EXPECT_CALL(*client->mock_driver(),
@@ -172,8 +174,9 @@
 // Test that the popup is marked as visible after recieving password
 // suggestions.
 TEST_F(PasswordAutofillManagerTest, ExternalDelegatePasswordSuggestions) {
-  scoped_ptr<TestPasswordManagerClient> client(new TestPasswordManagerClient);
-  scoped_ptr<MockAutofillClient> autofill_client(new MockAutofillClient);
+  std::unique_ptr<TestPasswordManagerClient> client(
+      new TestPasswordManagerClient);
+  std::unique_ptr<MockAutofillClient> autofill_client(new MockAutofillClient);
   InitializePasswordAutofillManager(client.get(), autofill_client.get());
 
   gfx::RectF element_bounds;
@@ -208,8 +211,9 @@
 // Test that OnShowPasswordSuggestions correctly matches the given FormFieldData
 // to the known PasswordFormFillData, and extracts the right suggestions.
 TEST_F(PasswordAutofillManagerTest, ExtractSuggestions) {
-  scoped_ptr<TestPasswordManagerClient> client(new TestPasswordManagerClient);
-  scoped_ptr<MockAutofillClient> autofill_client(new MockAutofillClient);
+  std::unique_ptr<TestPasswordManagerClient> client(
+      new TestPasswordManagerClient);
+  std::unique_ptr<MockAutofillClient> autofill_client(new MockAutofillClient);
   InitializePasswordAutofillManager(client.get(), autofill_client.get());
 
   gfx::RectF element_bounds;
@@ -279,8 +283,9 @@
 // applications are displayed as the labels of suggestions on the UI (for
 // matches of all levels of preferredness).
 TEST_F(PasswordAutofillManagerTest, PrettifiedAndroidRealmsAreShownAsLabels) {
-  scoped_ptr<TestPasswordManagerClient> client(new TestPasswordManagerClient);
-  scoped_ptr<MockAutofillClient> autofill_client(new MockAutofillClient);
+  std::unique_ptr<TestPasswordManagerClient> client(
+      new TestPasswordManagerClient);
+  std::unique_ptr<MockAutofillClient> autofill_client(new MockAutofillClient);
   InitializePasswordAutofillManager(client.get(), autofill_client.get());
 
   autofill::PasswordFormFillData data;
@@ -316,8 +321,9 @@
 }
 
 TEST_F(PasswordAutofillManagerTest, FillSuggestionPasswordField) {
-  scoped_ptr<TestPasswordManagerClient> client(new TestPasswordManagerClient);
-  scoped_ptr<MockAutofillClient> autofill_client(new MockAutofillClient);
+  std::unique_ptr<TestPasswordManagerClient> client(
+      new TestPasswordManagerClient);
+  std::unique_ptr<MockAutofillClient> autofill_client(new MockAutofillClient);
   InitializePasswordAutofillManager(client.get(), autofill_client.get());
 
   gfx::RectF element_bounds;
@@ -364,8 +370,9 @@
   base::CommandLine::ForCurrentProcess()->AppendSwitch(
       autofill::switches::kEnableSuggestionsWithSubstringMatch);
 
-  scoped_ptr<TestPasswordManagerClient> client(new TestPasswordManagerClient);
-  scoped_ptr<MockAutofillClient> autofill_client(new MockAutofillClient);
+  std::unique_ptr<TestPasswordManagerClient> client(
+      new TestPasswordManagerClient);
+  std::unique_ptr<MockAutofillClient> autofill_client(new MockAutofillClient);
   InitializePasswordAutofillManager(client.get(), autofill_client.get());
 
   gfx::RectF element_bounds;
@@ -408,8 +415,9 @@
   base::CommandLine::ForCurrentProcess()->AppendSwitch(
       autofill::switches::kEnableSuggestionsWithSubstringMatch);
 
-  scoped_ptr<TestPasswordManagerClient> client(new TestPasswordManagerClient);
-  scoped_ptr<MockAutofillClient> autofill_client(new MockAutofillClient);
+  std::unique_ptr<TestPasswordManagerClient> client(
+      new TestPasswordManagerClient);
+  std::unique_ptr<MockAutofillClient> autofill_client(new MockAutofillClient);
   InitializePasswordAutofillManager(client.get(), autofill_client.get());
 
   gfx::RectF element_bounds;
@@ -450,8 +458,9 @@
   base::CommandLine::ForCurrentProcess()->AppendSwitch(
       autofill::switches::kEnableSuggestionsWithSubstringMatch);
 
-  scoped_ptr<TestPasswordManagerClient> client(new TestPasswordManagerClient);
-  scoped_ptr<MockAutofillClient> autofill_client(new MockAutofillClient);
+  std::unique_ptr<TestPasswordManagerClient> client(
+      new TestPasswordManagerClient);
+  std::unique_ptr<MockAutofillClient> autofill_client(new MockAutofillClient);
   InitializePasswordAutofillManager(client.get(), autofill_client.get());
 
   gfx::RectF element_bounds;
@@ -496,8 +505,9 @@
   base::CommandLine::ForCurrentProcess()->AppendSwitch(
       autofill::switches::kEnableSuggestionsWithSubstringMatch);
 
-  scoped_ptr<TestPasswordManagerClient> client(new TestPasswordManagerClient);
-  scoped_ptr<MockAutofillClient> autofill_client(new MockAutofillClient);
+  std::unique_ptr<TestPasswordManagerClient> client(
+      new TestPasswordManagerClient);
+  std::unique_ptr<MockAutofillClient> autofill_client(new MockAutofillClient);
   InitializePasswordAutofillManager(client.get(), autofill_client.get());
 
   gfx::RectF element_bounds;
@@ -535,8 +545,9 @@
 
 TEST_F(PasswordAutofillManagerTest, PreviewAndFillEmptyUsernameSuggestion) {
   // Initialize PasswordAutofillManager with credentials without username.
-  scoped_ptr<TestPasswordManagerClient> client(new TestPasswordManagerClient);
-  scoped_ptr<MockAutofillClient> autofill_client(new MockAutofillClient);
+  std::unique_ptr<TestPasswordManagerClient> client(
+      new TestPasswordManagerClient);
+  std::unique_ptr<MockAutofillClient> autofill_client(new MockAutofillClient);
   fill_data().username_field.value.clear();
   InitializePasswordAutofillManager(client.get(), autofill_client.get());
 
diff --git a/components/password_manager/core/browser/password_bubble_experiment.cc b/components/password_manager/core/browser/password_bubble_experiment.cc
index 0dfd8f42..6c9d60f 100644
--- a/components/password_manager/core/browser/password_bubble_experiment.cc
+++ b/components/password_manager/core/browser/password_bubble_experiment.cc
@@ -10,6 +10,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "components/password_manager/core/browser/password_manager_util.h"
 #include "components/password_manager/core/common/password_manager_pref_names.h"
+#include "components/pref_registry/pref_registry_syncable.h"
 #include "components/prefs/pref_registry_simple.h"
 #include "components/prefs/pref_service.h"
 #include "components/variations/variations_associated_data.h"
@@ -28,7 +29,8 @@
       password_manager::prefs::kWasSavePrompFirstRunExperienceShown, false);
 
   registry->RegisterBooleanPref(
-      password_manager::prefs::kWasAutoSignInFirstRunExperienceShown, false);
+      password_manager::prefs::kWasAutoSignInFirstRunExperienceShown, false,
+      user_prefs::PrefRegistrySyncable::SYNCABLE_PRIORITY_PREF);
 }
 
 int GetSmartBubbleDismissalThreshold() {
diff --git a/components/password_manager/core/browser/password_form_manager.cc b/components/password_manager/core/browser/password_form_manager.cc
index 959e5a7..247d5394 100644
--- a/components/password_manager/core/browser/password_form_manager.cc
+++ b/components/password_manager/core/browser/password_form_manager.cc
@@ -11,6 +11,7 @@
 #include <set>
 #include <utility>
 
+#include "base/memory/ptr_util.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
@@ -93,7 +94,7 @@
 
 // Splits federated matches from |store_results| into a separate vector and
 // returns that.
-std::vector<scoped_ptr<autofill::PasswordForm>> SplitFederatedMatches(
+std::vector<std::unique_ptr<autofill::PasswordForm>> SplitFederatedMatches(
     ScopedVector<PasswordForm>* store_results) {
   auto first_federated =
       std::partition(store_results->begin(), store_results->end(),
@@ -101,11 +102,11 @@
                        return form->federation_origin.unique();
                      });
 
-  std::vector<scoped_ptr<autofill::PasswordForm>> federated_matches;
+  std::vector<std::unique_ptr<autofill::PasswordForm>> federated_matches;
   federated_matches.reserve(store_results->end() - first_federated);
   for (auto federated = first_federated; federated != store_results->end();
        ++federated) {
-    federated_matches.push_back(make_scoped_ptr(*federated));
+    federated_matches.push_back(base::WrapUnique(*federated));
     *federated = nullptr;
   }
   store_results->weak_erase(first_federated, store_results->end());
@@ -279,7 +280,7 @@
   DCHECK(state_ == MATCHING_PHASE || state_ == POST_MATCHING_PHASE) << state_;
   DCHECK_NE(RESULT_NO_MATCH, DoesManage(credentials));
 
-  scoped_ptr<autofill::PasswordForm> mutable_provisionally_saved_form(
+  std::unique_ptr<autofill::PasswordForm> mutable_provisionally_saved_form(
       new PasswordForm(credentials));
   if (credentials.IsPossibleChangePasswordForm() &&
       !credentials.username_value.empty() &&
@@ -339,7 +340,7 @@
     return;
   }
 
-  scoped_ptr<BrowserSavePasswordProgressLogger> logger;
+  std::unique_ptr<BrowserSavePasswordProgressLogger> logger;
   if (password_manager_util::IsLoggingActive(client_)) {
     logger.reset(
         new BrowserSavePasswordProgressLogger(client_->GetLogManager()));
@@ -411,7 +412,7 @@
   blacklisted_matches_.clear();
   const size_t logins_result_size = logins_result.size();
 
-  scoped_ptr<BrowserSavePasswordProgressLogger> logger;
+  std::unique_ptr<BrowserSavePasswordProgressLogger> logger;
   if (password_manager_util::IsLoggingActive(client_)) {
     logger.reset(
         new BrowserSavePasswordProgressLogger(client_->GetLogManager()));
@@ -458,7 +459,7 @@
   // Fill |best_matches_| with the best-scoring credentials for each username.
   for (size_t i = 0; i < logins_result.size(); ++i) {
     // Take ownership of the PasswordForm from the ScopedVector.
-    scoped_ptr<PasswordForm> login(logins_result[i]);
+    std::unique_ptr<PasswordForm> login(logins_result[i]);
     logins_result[i] = nullptr;
     DCHECK(!login->blacklisted_by_user);
     const base::string16& username = login->username_value;
@@ -558,7 +559,7 @@
     return;
   }
 
-  scoped_ptr<BrowserSavePasswordProgressLogger> logger;
+  std::unique_ptr<BrowserSavePasswordProgressLogger> logger;
   if (password_manager_util::IsLoggingActive(client_)) {
     logger.reset(
         new BrowserSavePasswordProgressLogger(client_->GetLogManager()));
@@ -585,7 +586,7 @@
 }
 
 void PasswordFormManager::OnGetSiteStatistics(
-    scoped_ptr<std::vector<scoped_ptr<InteractionsStats>>> stats) {
+    std::unique_ptr<std::vector<std::unique_ptr<InteractionsStats>>> stats) {
   // On Windows the password request may be resolved after the statistics due to
   // importing from IE.
   DCHECK(state_ == MATCHING_PHASE || state_ == POST_MATCHING_PHASE) << state_;
diff --git a/components/password_manager/core/browser/password_form_manager.h b/components/password_manager/core/browser/password_form_manager.h
index 6bb8623..b855d15 100644
--- a/components/password_manager/core/browser/password_form_manager.h
+++ b/components/password_manager/core/browser/password_form_manager.h
@@ -6,15 +6,15 @@
 #define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_PASSWORD_FORM_MANAGER_H_
 
 #include <stdint.h>
+
+#include <memory>
 #include <string>
 #include <vector>
 
-#include "build/build_config.h"
-
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/scoped_vector.h"
 #include "base/memory/weak_ptr.h"
+#include "build/build_config.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/common/password_form.h"
 #include "components/password_manager/core/browser/password_manager_driver.h"
@@ -121,7 +121,8 @@
   void OnGetPasswordStoreResults(
       ScopedVector<autofill::PasswordForm> results) override;
   void OnGetSiteStatistics(
-      scoped_ptr<std::vector<scoped_ptr<InteractionsStats>>> stats) override;
+      std::unique_ptr<std::vector<std::unique_ptr<InteractionsStats>>> stats)
+      override;
 
   // A user opted to 'never remember' passwords for this form.
   // Blacklist it so that from now on when it is seen we ignore it.
@@ -221,7 +222,8 @@
   }
 #endif
 
-  const std::vector<scoped_ptr<InteractionsStats>>& interactions_stats() const {
+  const std::vector<std::unique_ptr<InteractionsStats>>& interactions_stats()
+      const {
     return interactions_stats_;
   }
 
@@ -231,7 +233,8 @@
     return is_possible_change_password_form_without_username_;
   }
 
-  const std::vector<scoped_ptr<autofill::PasswordForm>>& federated_matches() {
+  const std::vector<std::unique_ptr<autofill::PasswordForm>>&
+  federated_matches() {
     return federated_matches_;
   }
 
@@ -461,7 +464,7 @@
   // filled not saved by this PasswordFormManager, so they are kept separately
   // from |best_matches_|. The PasswordFormManager passes them further to
   // PasswordManager to show them in the UI.
-  std::vector<scoped_ptr<autofill::PasswordForm>> federated_matches_;
+  std::vector<std::unique_ptr<autofill::PasswordForm>> federated_matches_;
 
   // Set of blacklisted forms from the PasswordStore that best match the current
   // form.
@@ -471,10 +474,10 @@
   const autofill::PasswordForm observed_form_;
 
   // Statistics for the current domain.
-  std::vector<scoped_ptr<InteractionsStats>> interactions_stats_;
+  std::vector<std::unique_ptr<InteractionsStats>> interactions_stats_;
 
   // Stores a submitted form.
-  scoped_ptr<const autofill::PasswordForm> provisionally_saved_form_;
+  std::unique_ptr<const autofill::PasswordForm> provisionally_saved_form_;
 
   // Stores if for creating |pending_credentials_| other possible usernames
   // option should apply.
diff --git a/components/password_manager/core/browser/password_form_manager_unittest.cc b/components/password_manager/core/browser/password_form_manager_unittest.cc
index c0947af..c911e28 100644
--- a/components/password_manager/core/browser/password_form_manager_unittest.cc
+++ b/components/password_manager/core/browser/password_form_manager_unittest.cc
@@ -5,10 +5,11 @@
 #include "components/password_manager/core/browser/password_form_manager.h"
 
 #include <map>
+#include <memory>
 #include <utility>
 
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
+#include "base/memory/ptr_util.h"
 #include "base/run_loop.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/histogram_tester.h"
@@ -57,10 +58,10 @@
 // Invokes the password store consumer with a copy of all forms.
 ACTION_P4(InvokeConsumer, form1, form2, form3, form4) {
   ScopedVector<PasswordForm> result;
-  result.push_back(make_scoped_ptr(new PasswordForm(form1)));
-  result.push_back(make_scoped_ptr(new PasswordForm(form2)));
-  result.push_back(make_scoped_ptr(new PasswordForm(form3)));
-  result.push_back(make_scoped_ptr(new PasswordForm(form4)));
+  result.push_back(base::WrapUnique(new PasswordForm(form1)));
+  result.push_back(base::WrapUnique(new PasswordForm(form2)));
+  result.push_back(base::WrapUnique(new PasswordForm(form3)));
+  result.push_back(base::WrapUnique(new PasswordForm(form4)));
   arg0->OnGetPasswordStoreResults(std::move(result));
 }
 
@@ -161,7 +162,8 @@
       : mock_autofill_manager_(&test_autofill_driver_,
                                &test_autofill_client_,
                                &test_personal_data_manager_) {
-    scoped_ptr<TestingPrefServiceSimple> prefs(new TestingPrefServiceSimple());
+    std::unique_ptr<TestingPrefServiceSimple> prefs(
+        new TestingPrefServiceSimple());
     prefs->registry()->RegisterBooleanPref(autofill::prefs::kAutofillEnabled,
                                            true);
     test_autofill_client_.SetPrefs(std::move(prefs));
@@ -260,7 +262,7 @@
  private:
   TestingPrefServiceSimple prefs_;
   PasswordStore* password_store_;
-  scoped_ptr<MockPasswordManagerDriver> driver_;
+  std::unique_ptr<MockPasswordManagerDriver> driver_;
   bool is_update_password_ui_enabled_;
 
   // Filters to remove all and no results, respectively, in FilterResults.
@@ -643,9 +645,9 @@
   PasswordForm saved_match_;
   PasswordForm psl_saved_match_;
   scoped_refptr<NiceMock<MockPasswordStore>> mock_store_;
-  scoped_ptr<TestPasswordManagerClient> client_;
-  scoped_ptr<PasswordManager> password_manager_;
-  scoped_ptr<PasswordFormManager> form_manager_;
+  std::unique_ptr<TestPasswordManagerClient> client_;
+  std::unique_ptr<PasswordManager> password_manager_;
+  std::unique_ptr<PasswordFormManager> form_manager_;
 };
 
 TEST_F(PasswordFormManagerTest, TestNewLogin) {
@@ -1393,7 +1395,7 @@
   form_manager.FetchDataFromPasswordStore();
 
   // Password store only has these incomplete credentials.
-  scoped_ptr<PasswordForm> incomplete_form(new PasswordForm());
+  std::unique_ptr<PasswordForm> incomplete_form(new PasswordForm());
   incomplete_form->origin = GURL("http://accounts.google.com/LoginAuth");
   incomplete_form->signon_realm = "http://accounts.google.com/";
   incomplete_form->password_value = ASCIIToUTF16("my_password");
@@ -1835,7 +1837,7 @@
   // This test checks implicitly that after step 4 the PFM does not attempt
   // use-after-free of the deleted driver.
   std::string example_url("http://example.com");
-  scoped_ptr<PasswordForm> form(new PasswordForm);
+  std::unique_ptr<PasswordForm> form(new PasswordForm);
   form->origin = GURL(example_url);
   form->signon_realm = example_url;
   form->action = GURL(example_url);
@@ -1863,12 +1865,12 @@
   form_manager()->FetchDataFromPasswordStore();
 
   ScopedVector<PasswordForm> simulated_results;
-  scoped_ptr<PasswordForm> form(new PasswordForm(*observed_form()));
+  std::unique_ptr<PasswordForm> form(new PasswordForm(*observed_form()));
   form->username_value = ASCIIToUTF16("username");
   form->password_value = ASCIIToUTF16("password1");
   form->preferred = false;
 
-  scoped_ptr<PasswordForm> generated_form(new PasswordForm(*form));
+  std::unique_ptr<PasswordForm> generated_form(new PasswordForm(*form));
   generated_form->type = PasswordForm::TYPE_GENERATED;
   generated_form->password_value = ASCIIToUTF16("password2");
   generated_form->preferred = true;
@@ -2361,7 +2363,8 @@
   EXPECT_CALL(*mock_store(), GetLogins(*observed_form(), form_manager()));
   form_manager()->FetchDataFromPasswordStore();
 
-  scoped_ptr<PasswordForm> generated_form(new PasswordForm(*observed_form()));
+  std::unique_ptr<PasswordForm> generated_form(
+      new PasswordForm(*observed_form()));
   generated_form->type = PasswordForm::TYPE_GENERATED;
   generated_form->username_value = ASCIIToUTF16("username");
   generated_form->password_value = ASCIIToUTF16("password2");
@@ -2391,7 +2394,8 @@
   EXPECT_CALL(*mock_store(), GetLogins(*observed_form(), form_manager()));
   form_manager()->FetchDataFromPasswordStore();
 
-  scoped_ptr<PasswordForm> generated_form(new PasswordForm(*observed_form()));
+  std::unique_ptr<PasswordForm> generated_form(
+      new PasswordForm(*observed_form()));
   generated_form->type = PasswordForm::TYPE_GENERATED;
   generated_form->username_value = ASCIIToUTF16("username");
   generated_form->password_value = ASCIIToUTF16("password2");
@@ -2425,7 +2429,7 @@
   form_manager()->FetchDataFromPasswordStore();
 
   // First response from the store, should be ignored.
-  scoped_ptr<PasswordForm> saved_form(new PasswordForm(*saved_match()));
+  std::unique_ptr<PasswordForm> saved_form(new PasswordForm(*saved_match()));
   saved_form->username_value = ASCIIToUTF16("a@gmail.com");
   ScopedVector<PasswordForm> results;
   results.push_back(std::move(saved_form));
@@ -2477,7 +2481,7 @@
   form_manager()->ProcessFrame(extra_driver.AsWeakPtr());
 
   // Password store responds.
-  scoped_ptr<PasswordForm> match(new PasswordForm(*saved_match()));
+  std::unique_ptr<PasswordForm> match(new PasswordForm(*saved_match()));
   ScopedVector<PasswordForm> result_form;
   result_form.push_back(std::move(match));
   form_manager()->OnGetPasswordStoreResults(std::move(result_form));
diff --git a/components/password_manager/core/browser/password_generation_manager_unittest.cc b/components/password_manager/core/browser/password_generation_manager_unittest.cc
index a3fb762..6bcc8a6b3 100644
--- a/components/password_manager/core/browser/password_generation_manager_unittest.cc
+++ b/components/password_manager/core/browser/password_generation_manager_unittest.cc
@@ -77,7 +77,7 @@
   MOCK_CONST_METHOD0(IsSavingAndFillingEnabledForCurrentPage, bool());
   MOCK_CONST_METHOD0(IsOffTheRecord, bool());
 
-  explicit MockPasswordManagerClient(scoped_ptr<PrefService> prefs)
+  explicit MockPasswordManagerClient(std::unique_ptr<PrefService> prefs)
       : prefs_(std::move(prefs)),
         store_(new TestPasswordStore),
         driver_(this) {}
@@ -90,7 +90,7 @@
   TestPasswordManagerDriver* test_driver() { return &driver_; }
 
  private:
-  scoped_ptr<PrefService> prefs_;
+  std::unique_ptr<PrefService> prefs_;
   scoped_refptr<TestPasswordStore> store_;
   TestPasswordManagerDriver driver_;
 };
@@ -103,7 +103,8 @@
     // Construct a PrefService and register all necessary prefs before handing
     // it off to |client_|, as the initialization flow of |client_| will
     // indirectly cause those prefs to be immediately accessed.
-    scoped_ptr<TestingPrefServiceSimple> prefs(new TestingPrefServiceSimple());
+    std::unique_ptr<TestingPrefServiceSimple> prefs(
+        new TestingPrefServiceSimple());
     prefs->registry()->RegisterBooleanPref(prefs::kPasswordManagerSavingEnabled,
                                            true);
     client_.reset(new MockPasswordManagerClient(std::move(prefs)));
@@ -127,7 +128,7 @@
   }
 
   base::MessageLoop message_loop_;
-  scoped_ptr<MockPasswordManagerClient> client_;
+  std::unique_ptr<MockPasswordManagerClient> client_;
 };
 
 TEST_F(PasswordGenerationManagerTest, IsGenerationEnabled) {
diff --git a/components/password_manager/core/browser/password_manager.cc b/components/password_manager/core/browser/password_manager.cc
index 60cdeb6d..f734ef0 100644
--- a/components/password_manager/core/browser/password_manager.cc
+++ b/components/password_manager/core/browser/password_manager.cc
@@ -222,7 +222,7 @@
   bool is_saving_and_filling_enabled =
       client_->IsSavingAndFillingEnabledForCurrentPage();
 
-  scoped_ptr<BrowserSavePasswordProgressLogger> logger;
+  std::unique_ptr<BrowserSavePasswordProgressLogger> logger;
   if (password_manager_util::IsLoggingActive(client_)) {
     logger.reset(
         new BrowserSavePasswordProgressLogger(client_->GetLogManager()));
@@ -242,7 +242,7 @@
     return;
   }
 
-  scoped_ptr<PasswordFormManager> manager;
+  std::unique_ptr<PasswordFormManager> manager;
   ScopedVector<PasswordFormManager>::iterator matched_manager_it =
       pending_login_managers_.end();
   PasswordFormManager::MatchResultMask current_match_result =
@@ -441,7 +441,7 @@
 void PasswordManager::CreatePendingLoginManagers(
     password_manager::PasswordManagerDriver* driver,
     const std::vector<PasswordForm>& forms) {
-  scoped_ptr<BrowserSavePasswordProgressLogger> logger;
+  std::unique_ptr<BrowserSavePasswordProgressLogger> logger;
   if (password_manager_util::IsLoggingActive(client_)) {
     logger.reset(
         new BrowserSavePasswordProgressLogger(client_->GetLogManager()));
@@ -512,7 +512,7 @@
 }
 
 bool PasswordManager::CanProvisionalManagerSave() {
-  scoped_ptr<BrowserSavePasswordProgressLogger> logger;
+  std::unique_ptr<BrowserSavePasswordProgressLogger> logger;
   if (password_manager_util::IsLoggingActive(client_)) {
     logger.reset(
         new BrowserSavePasswordProgressLogger(client_->GetLogManager()));
@@ -555,7 +555,7 @@
     const std::vector<PasswordForm>& visible_forms,
     bool did_stop_loading) {
   CreatePendingLoginManagers(driver, visible_forms);
-  scoped_ptr<BrowserSavePasswordProgressLogger> logger;
+  std::unique_ptr<BrowserSavePasswordProgressLogger> logger;
   if (password_manager_util::IsLoggingActive(client_)) {
     logger.reset(
         new BrowserSavePasswordProgressLogger(client_->GetLogManager()));
@@ -633,7 +633,7 @@
 void PasswordManager::OnInPageNavigation(
     password_manager::PasswordManagerDriver* driver,
     const PasswordForm& password_form) {
-  scoped_ptr<BrowserSavePasswordProgressLogger> logger;
+  std::unique_ptr<BrowserSavePasswordProgressLogger> logger;
   if (password_manager_util::IsLoggingActive(client_)) {
     logger.reset(
         new BrowserSavePasswordProgressLogger(client_->GetLogManager()));
@@ -649,7 +649,7 @@
 }
 
 void PasswordManager::OnLoginSuccessful() {
-  scoped_ptr<BrowserSavePasswordProgressLogger> logger;
+  std::unique_ptr<BrowserSavePasswordProgressLogger> logger;
   if (password_manager_util::IsLoggingActive(client_)) {
     logger.reset(
         new BrowserSavePasswordProgressLogger(client_->GetLogManager()));
@@ -717,12 +717,12 @@
     password_manager::PasswordManagerDriver* driver,
     const PasswordForm& form_for_autofill,
     const PasswordFormMap& best_matches,
-    const std::vector<scoped_ptr<PasswordForm>>& federated_matches,
+    const std::vector<std::unique_ptr<PasswordForm>>& federated_matches,
     const PasswordForm& preferred_match,
     bool wait_for_username) const {
   DCHECK_EQ(PasswordForm::SCHEME_HTML, preferred_match.scheme);
 
-  scoped_ptr<BrowserSavePasswordProgressLogger> logger;
+  std::unique_ptr<BrowserSavePasswordProgressLogger> logger;
   if (password_manager_util::IsLoggingActive(client_)) {
     logger.reset(
         new BrowserSavePasswordProgressLogger(client_->GetLogManager()));
@@ -751,7 +751,7 @@
     const PasswordForm& preferred_match) const {
   DCHECK_NE(PasswordForm::SCHEME_HTML, preferred_match.scheme);
 
-  scoped_ptr<BrowserSavePasswordProgressLogger> logger;
+  std::unique_ptr<BrowserSavePasswordProgressLogger> logger;
   if (password_manager_util::IsLoggingActive(client_)) {
     logger.reset(
         new BrowserSavePasswordProgressLogger(client_->GetLogManager()));
diff --git a/components/password_manager/core/browser/password_manager.h b/components/password_manager/core/browser/password_manager.h
index f2c8b616..6b90234 100644
--- a/components/password_manager/core/browser/password_manager.h
+++ b/components/password_manager/core/browser/password_manager.h
@@ -5,12 +5,12 @@
 #ifndef COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_PASSWORD_MANAGER_H_
 #define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_PASSWORD_MANAGER_H_
 
+#include <memory>
 #include <string>
 #include <vector>
 
 #include "base/callback.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/scoped_vector.h"
 #include "base/observer_list.h"
 #include "base/stl_util.h"
@@ -63,13 +63,13 @@
 
   // Called by a PasswordFormManager when it decides a form can be autofilled
   // on the page.
-  void Autofill(
-      password_manager::PasswordManagerDriver* driver,
-      const autofill::PasswordForm& form_for_autofill,
-      const autofill::PasswordFormMap& best_matches,
-      const std::vector<scoped_ptr<autofill::PasswordForm>>& federated_matches,
-      const autofill::PasswordForm& preferred_match,
-      bool wait_for_username) const;
+  void Autofill(password_manager::PasswordManagerDriver* driver,
+                const autofill::PasswordForm& form_for_autofill,
+                const autofill::PasswordFormMap& best_matches,
+                const std::vector<std::unique_ptr<autofill::PasswordForm>>&
+                    federated_matches,
+                const autofill::PasswordForm& preferred_match,
+                bool wait_for_username) const;
 
   // Called by a PasswordFormManager when it decides a HTTP auth dialog can be
   // autofilled.
@@ -218,7 +218,7 @@
   // send the PasswordFormManager back to the pending_login_managers_ set.
   // Scoped in case PasswordManager gets deleted (e.g tab closes) between the
   // time a user submits a login form and gets to the next page.
-  scoped_ptr<PasswordFormManager> provisional_save_manager_;
+  std::unique_ptr<PasswordFormManager> provisional_save_manager_;
 
   // The embedder-level client. Must outlive this class.
   PasswordManagerClient* const client_;
diff --git a/components/password_manager/core/browser/password_manager_client.cc b/components/password_manager/core/browser/password_manager_client.cc
index a3f8e13..a2ea65c 100644
--- a/components/password_manager/core/browser/password_manager_client.cc
+++ b/components/password_manager/core/browser/password_manager_client.cc
@@ -27,8 +27,8 @@
 void PasswordManagerClient::PasswordWasAutofilled(
     const autofill::PasswordFormMap& best_matches,
     const GURL& origin,
-    const std::vector<scoped_ptr<autofill::PasswordForm>>* federated_matches)
-    const {}
+    const std::vector<std::unique_ptr<autofill::PasswordForm>>*
+        federated_matches) const {}
 
 PasswordSyncState PasswordManagerClient::GetPasswordSyncState() const {
   return NOT_SYNCING_PASSWORDS;
diff --git a/components/password_manager/core/browser/password_manager_client.h b/components/password_manager/core/browser/password_manager_client.h
index 942fab9e..f87aaec 100644
--- a/components/password_manager/core/browser/password_manager_client.h
+++ b/components/password_manager/core/browser/password_manager_client.h
@@ -84,7 +84,7 @@
   // TODO(crbug.com/576747): Analyze usefulness of the |type| parameter, make a
   // decision if it should be kept or removed.
   virtual bool PromptUserToSaveOrUpdatePassword(
-      scoped_ptr<PasswordFormManager> form_to_save,
+      std::unique_ptr<PasswordFormManager> form_to_save,
       CredentialSourceType type,
       bool update_password) = 0;
 
@@ -118,7 +118,7 @@
   // had been through the first-run experience to ensure their opt-in. |form|
   // contains the PasswordForm that would have been delivered.
   virtual void NotifyUserCouldBeAutoSignedIn(
-      scoped_ptr<autofill::PasswordForm> form) = 0;
+      std::unique_ptr<autofill::PasswordForm> form) = 0;
 
   // Inform the embedder that the user signed in with a saved credential.
   // |form| contains the form used.
@@ -128,7 +128,7 @@
   // Called when a password is saved in an automated fashion. Embedder may
   // inform the user that this save has occured.
   virtual void AutomaticPasswordSave(
-      scoped_ptr<PasswordFormManager> saved_form_manager) = 0;
+      std::unique_ptr<PasswordFormManager> saved_form_manager) = 0;
 
   // Called when a password is autofilled. |best_matches| contains the
   // PasswordForm into which a password was filled: the client may choose to
@@ -140,8 +140,8 @@
   virtual void PasswordWasAutofilled(
       const autofill::PasswordFormMap& best_matches,
       const GURL& origin,
-      const std::vector<scoped_ptr<autofill::PasswordForm>>* federated_matches)
-      const;
+      const std::vector<std::unique_ptr<autofill::PasswordForm>>*
+          federated_matches) const;
 
   // Gets prefs associated with this embedder.
   virtual PrefService* GetPrefs() = 0;
diff --git a/components/password_manager/core/browser/password_manager_test_utils.cc b/components/password_manager/core/browser/password_manager_test_utils.cc
index ccf2829..73f28571 100644
--- a/components/password_manager/core/browser/password_manager_test_utils.cc
+++ b/components/password_manager/core/browser/password_manager_test_utils.cc
@@ -33,9 +33,9 @@
 const int kTestingDaysAfterPasswordsAreSynced = 1;
 const wchar_t kTestingFederatedLoginMarker[] = L"__federated__";
 
-scoped_ptr<PasswordForm> CreatePasswordFormFromDataForTesting(
+std::unique_ptr<PasswordForm> CreatePasswordFormFromDataForTesting(
     const PasswordFormData& form_data) {
-  scoped_ptr<PasswordForm> form(new PasswordForm());
+  std::unique_ptr<PasswordForm> form(new PasswordForm());
   form->scheme = form_data.scheme;
   form->preferred = form_data.preferred;
   form->ssl_valid = form_data.ssl_valid;
@@ -110,7 +110,7 @@
 
 void SetFeatures(const std::vector<const base::Feature*>& enable_features,
                  const std::vector<const base::Feature*>& disable_features,
-                 scoped_ptr<base::FeatureList> feature_list) {
+                 std::unique_ptr<base::FeatureList> feature_list) {
   std::string enable_overrides;
   std::string disable_overrides;
 
diff --git a/components/password_manager/core/browser/password_manager_test_utils.h b/components/password_manager/core/browser/password_manager_test_utils.h
index fe16f8c..9a75e12 100644
--- a/components/password_manager/core/browser/password_manager_test_utils.h
+++ b/components/password_manager/core/browser/password_manager_test_utils.h
@@ -57,7 +57,7 @@
 };
 
 // Creates and returns a new PasswordForm built from form_data.
-scoped_ptr<autofill::PasswordForm> CreatePasswordFormFromDataForTesting(
+std::unique_ptr<autofill::PasswordForm> CreatePasswordFormFromDataForTesting(
     const PasswordFormData& form_data);
 
 // Checks whether the PasswordForms pointed to in |actual_values| are in some
@@ -79,7 +79,7 @@
 // |feature_list|.
 void SetFeatures(const std::vector<const base::Feature*>& enable_features,
                  const std::vector<const base::Feature*>& disable_features,
-                 scoped_ptr<base::FeatureList> feature_list);
+                 std::unique_ptr<base::FeatureList> feature_list);
 
 class MockPasswordStoreObserver : public PasswordStore::Observer {
  public:
diff --git a/components/password_manager/core/browser/password_manager_unittest.cc b/components/password_manager/core/browser/password_manager_unittest.cc
index 052a6eb..8cb257c6 100644
--- a/components/password_manager/core/browser/password_manager_unittest.cc
+++ b/components/password_manager/core/browser/password_manager_unittest.cc
@@ -9,6 +9,7 @@
 #include <vector>
 
 #include "base/macros.h"
+#include "base/memory/ptr_util.h"
 #include "base/message_loop/message_loop.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
@@ -77,15 +78,16 @@
   MOCK_CONST_METHOD0(IsUpdatePasswordUIEnabled, bool());
   MOCK_CONST_METHOD0(GetStoreResultFilter, const CredentialsFilter*());
 
-  // Workaround for scoped_ptr<> lacking a copy constructor.
+  // Workaround for std::unique_ptr<> lacking a copy constructor.
   bool PromptUserToSaveOrUpdatePassword(
-      scoped_ptr<PasswordFormManager> manager,
+      std::unique_ptr<PasswordFormManager> manager,
       password_manager::CredentialSourceType type,
       bool update_password) override {
     PromptUserToSaveOrUpdatePasswordPtr(manager.release(), type);
     return false;
   }
-  void AutomaticPasswordSave(scoped_ptr<PasswordFormManager> manager) override {
+  void AutomaticPasswordSave(
+      std::unique_ptr<PasswordFormManager> manager) override {
     AutomaticPasswordSaveIndicator();
   }
 
@@ -107,7 +109,7 @@
 // Invokes the password store consumer with a single copy of |form|.
 ACTION_P(InvokeConsumer, form) {
   ScopedVector<PasswordForm> result;
-  result.push_back(make_scoped_ptr(new PasswordForm(form)));
+  result.push_back(base::WrapUnique(new PasswordForm(form)));
   arg0->OnGetPasswordStoreResults(std::move(result));
 }
 
@@ -231,8 +233,8 @@
   scoped_refptr<MockPasswordStore> store_;
   MockPasswordManagerClient client_;
   MockPasswordManagerDriver driver_;
-  scoped_ptr<PasswordAutofillManager> password_autofill_manager_;
-  scoped_ptr<PasswordManager> manager_;
+  std::unique_ptr<PasswordAutofillManager> password_autofill_manager_;
+  std::unique_ptr<PasswordManager> manager_;
   PasswordForm submitted_form_;
 };
 
@@ -264,7 +266,7 @@
       .WillRepeatedly(Return(true));
   OnPasswordFormSubmitted(form);
 
-  scoped_ptr<PasswordFormManager> form_manager_to_save;
+  std::unique_ptr<PasswordFormManager> form_manager_to_save;
   EXPECT_CALL(client_,
               PromptUserToSaveOrUpdatePasswordPtr(
                   _, CredentialSourceType::CREDENTIAL_SOURCE_PASSWORD_MANAGER))
@@ -344,7 +346,7 @@
   OnPasswordFormSubmitted(form);
 
   // We still expect an add, since we didn't have a good match.
-  scoped_ptr<PasswordFormManager> form_manager_to_save;
+  std::unique_ptr<PasswordFormManager> form_manager_to_save;
   EXPECT_CALL(client_,
               PromptUserToSaveOrUpdatePasswordPtr(
                   _, CredentialSourceType::CREDENTIAL_SOURCE_PASSWORD_MANAGER))
@@ -392,7 +394,7 @@
       .WillRepeatedly(Return(true));
   OnPasswordFormSubmitted(form);
 
-  scoped_ptr<PasswordFormManager> form_manager_to_save;
+  std::unique_ptr<PasswordFormManager> form_manager_to_save;
   EXPECT_CALL(client_,
               PromptUserToSaveOrUpdatePasswordPtr(
                   _, CredentialSourceType::CREDENTIAL_SOURCE_PASSWORD_MANAGER))
@@ -442,7 +444,7 @@
       .WillRepeatedly(Return(true));
   OnPasswordFormSubmitted(second_form);
 
-  scoped_ptr<PasswordFormManager> form_manager_to_save;
+  std::unique_ptr<PasswordFormManager> form_manager_to_save;
   EXPECT_CALL(client_,
               PromptUserToSaveOrUpdatePasswordPtr(
                   _, CredentialSourceType::CREDENTIAL_SOURCE_PASSWORD_MANAGER))
@@ -475,7 +477,7 @@
   OnPasswordFormSubmitted(form);
 
   // Expect info bar to appear:
-  scoped_ptr<PasswordFormManager> form_manager_to_save;
+  std::unique_ptr<PasswordFormManager> form_manager_to_save;
   EXPECT_CALL(client_,
               PromptUserToSaveOrUpdatePasswordPtr(
                   _, CredentialSourceType::CREDENTIAL_SOURCE_PASSWORD_MANAGER))
@@ -730,7 +732,7 @@
       .WillRepeatedly(Return(true));
   OnPasswordFormSubmitted(form);
 
-  scoped_ptr<PasswordFormManager> form_manager_to_save;
+  std::unique_ptr<PasswordFormManager> form_manager_to_save;
   EXPECT_CALL(client_,
               PromptUserToSaveOrUpdatePasswordPtr(
                   _, CredentialSourceType::CREDENTIAL_SOURCE_PASSWORD_MANAGER))
@@ -765,7 +767,7 @@
       .WillRepeatedly(Return(true));
   OnPasswordFormSubmitted(form);
 
-  scoped_ptr<PasswordFormManager> form_manager_to_save;
+  std::unique_ptr<PasswordFormManager> form_manager_to_save;
   EXPECT_CALL(client_,
               PromptUserToSaveOrUpdatePasswordPtr(
                   _, CredentialSourceType::CREDENTIAL_SOURCE_PASSWORD_MANAGER))
@@ -817,7 +819,7 @@
   EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage())
       .WillRepeatedly(Return(true));
 
-  scoped_ptr<PasswordFormManager> form_manager_to_save;
+  std::unique_ptr<PasswordFormManager> form_manager_to_save;
   EXPECT_CALL(client_,
               PromptUserToSaveOrUpdatePasswordPtr(
                   _, CredentialSourceType::CREDENTIAL_SOURCE_PASSWORD_MANAGER))
@@ -851,7 +853,7 @@
   // Prefs are needed for failure logging about blacklisting.
   EXPECT_CALL(client_, GetPrefs()).WillRepeatedly(Return(nullptr));
 
-  scoped_ptr<PasswordFormManager> form_manager_to_save;
+  std::unique_ptr<PasswordFormManager> form_manager_to_save;
   EXPECT_CALL(client_,
               PromptUserToSaveOrUpdatePasswordPtr(
                   _, CredentialSourceType::CREDENTIAL_SOURCE_PASSWORD_MANAGER))
@@ -888,7 +890,7 @@
       .WillRepeatedly(Return(true));
   OnPasswordFormSubmitted(submitted_form);
 
-  scoped_ptr<PasswordFormManager> form_manager_to_save;
+  std::unique_ptr<PasswordFormManager> form_manager_to_save;
   EXPECT_CALL(client_,
               PromptUserToSaveOrUpdatePasswordPtr(
                   _, CredentialSourceType::CREDENTIAL_SOURCE_PASSWORD_MANAGER))
@@ -943,7 +945,7 @@
       .WillRepeatedly(Return(true));
   OnPasswordFormSubmitted(submitted_form);
 
-  scoped_ptr<PasswordFormManager> form_manager_to_save;
+  std::unique_ptr<PasswordFormManager> form_manager_to_save;
   EXPECT_CALL(client_,
               PromptUserToSaveOrUpdatePasswordPtr(
                   _, CredentialSourceType::CREDENTIAL_SOURCE_PASSWORD_MANAGER))
@@ -997,7 +999,7 @@
       .WillRepeatedly(Return(true));
   OnPasswordFormSubmitted(form);
 
-  scoped_ptr<PasswordFormManager> form_manager_to_save;
+  std::unique_ptr<PasswordFormManager> form_manager_to_save;
   EXPECT_CALL(client_,
               PromptUserToSaveOrUpdatePasswordPtr(
                   _, CredentialSourceType::CREDENTIAL_SOURCE_PASSWORD_MANAGER))
@@ -1069,7 +1071,7 @@
   ASSERT_TRUE(form_manager);
   form_manager->OnGetPasswordStoreResults(ScopedVector<PasswordForm>());
 
-  scoped_ptr<PasswordFormManager> form_manager_to_save;
+  std::unique_ptr<PasswordFormManager> form_manager_to_save;
   EXPECT_CALL(client_,
               PromptUserToSaveOrUpdatePasswordPtr(
                   _, CredentialSourceType::CREDENTIAL_SOURCE_PASSWORD_MANAGER))
@@ -1218,7 +1220,7 @@
   OnPasswordFormSubmitted(form);
 
   // Verify that a normal prompt is shown instead of the force saving UI.
-  scoped_ptr<PasswordFormManager> form_to_save;
+  std::unique_ptr<PasswordFormManager> form_to_save;
   EXPECT_CALL(client_,
               PromptUserToSaveOrUpdatePasswordPtr(
                   _, CredentialSourceType::CREDENTIAL_SOURCE_PASSWORD_MANAGER))
@@ -1267,7 +1269,7 @@
 TEST_F(PasswordManagerTest, ForceSavingPasswords) {
   // Add the enable-password-force-saving feature.
   base::FeatureList::ClearInstanceForTesting();
-  scoped_ptr<base::FeatureList> feature_list(new base::FeatureList);
+  std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList);
   feature_list->InitializeFromCommandLine(
       password_manager::features::kEnablePasswordForceSaving.name, "");
   base::FeatureList::SetInstance(std::move(feature_list));
@@ -1280,7 +1282,7 @@
   manager()->OnPasswordFormsParsed(&driver_, observed);
   manager()->OnPasswordFormsRendered(&driver_, observed, true);
 
-  scoped_ptr<PasswordFormManager> form_manager_to_save;
+  std::unique_ptr<PasswordFormManager> form_manager_to_save;
   EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage())
       .WillRepeatedly(Return(true));
   EXPECT_CALL(client_,
@@ -1298,7 +1300,7 @@
 TEST_F(PasswordManagerTest, ForceSavingPasswords_Empty) {
   // Add the enable-password-force-saving feature.
   base::FeatureList::ClearInstanceForTesting();
-  scoped_ptr<base::FeatureList> feature_list(new base::FeatureList);
+  std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList);
   feature_list->InitializeFromCommandLine(
       password_manager::features::kEnablePasswordForceSaving.name, "");
   base::FeatureList::SetInstance(std::move(feature_list));
@@ -1405,7 +1407,7 @@
   filled_form.password_value = ASCIIToUTF16("new_password");
   OnPasswordFormSubmitted(filled_form);
 
-  scoped_ptr<PasswordFormManager> form_manager_to_save;
+  std::unique_ptr<PasswordFormManager> form_manager_to_save;
   EXPECT_CALL(client_,
               PromptUserToSaveOrUpdatePasswordPtr(
                   _, CredentialSourceType::CREDENTIAL_SOURCE_PASSWORD_MANAGER))
diff --git a/components/password_manager/core/browser/password_manager_util.cc b/components/password_manager/core/browser/password_manager_util.cc
index ef12ebe..e8804193 100644
--- a/components/password_manager/core/browser/password_manager_util.cc
+++ b/components/password_manager/core/browser/password_manager_util.cc
@@ -6,6 +6,7 @@
 
 #include <algorithm>
 
+#include "base/memory/ptr_util.h"
 #include "components/autofill/core/common/password_form.h"
 #include "components/password_manager/core/browser/log_manager.h"
 #include "components/sync_driver/sync_service.h"
@@ -75,12 +76,12 @@
   android_credentials->swap(result);
 }
 
-std::vector<scoped_ptr<autofill::PasswordForm>> ConvertScopedVector(
+std::vector<std::unique_ptr<autofill::PasswordForm>> ConvertScopedVector(
     ScopedVector<autofill::PasswordForm> old_vector) {
-  std::vector<scoped_ptr<autofill::PasswordForm>> new_vector;
+  std::vector<std::unique_ptr<autofill::PasswordForm>> new_vector;
   new_vector.reserve(old_vector.size());
   for (auto* form : old_vector) {
-    new_vector.push_back(make_scoped_ptr(form));
+    new_vector.push_back(base::WrapUnique(form));
   }
   old_vector.weak_clear();  // All owned by |new_vector| by now.
   return new_vector;
diff --git a/components/password_manager/core/browser/password_manager_util.h b/components/password_manager/core/browser/password_manager_util.h
index a148d6e..3e7465c 100644
--- a/components/password_manager/core/browser/password_manager_util.h
+++ b/components/password_manager/core/browser/password_manager_util.h
@@ -5,10 +5,10 @@
 #ifndef COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_PASSWORD_MANAGER_UTIL_H_
 #define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_PASSWORD_MANAGER_UTIL_H_
 
+#include <memory>
 #include <vector>
 
 #include "base/callback.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/scoped_vector.h"
 #include "components/password_manager/core/browser/password_manager_client.h"
 #include "ui/gfx/native_widget_types.h"
@@ -46,7 +46,7 @@
 
 // TODO(crbug.com/555132): Remove this when the migration from ScopedVector is
 // finished for PasswordForm.
-std::vector<scoped_ptr<autofill::PasswordForm>> ConvertScopedVector(
+std::vector<std::unique_ptr<autofill::PasswordForm>> ConvertScopedVector(
     ScopedVector<autofill::PasswordForm> old_vector);
 
 // A convenience function for testing that |client| has a non-null LogManager
diff --git a/components/password_manager/core/browser/password_store.cc b/components/password_manager/core/browser/password_store.cc
index 395abb9..bb424b2 100644
--- a/components/password_manager/core/browser/password_store.cc
+++ b/components/password_manager/core/browser/password_store.cc
@@ -10,6 +10,7 @@
 #include "base/debug/dump_without_crashing.h"
 #include "base/location.h"
 #include "base/macros.h"
+#include "base/memory/ptr_util.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/stl_util.h"
 #include "base/thread_task_runner_handle.h"
@@ -65,9 +66,9 @@
 }
 
 void PasswordStore::GetLoginsRequest::NotifyWithSiteStatistics(
-    std::vector<scoped_ptr<InteractionsStats>> stats) {
-  auto passed_stats(make_scoped_ptr(
-      new std::vector<scoped_ptr<InteractionsStats>>(std::move(stats))));
+    std::vector<std::unique_ptr<InteractionsStats>> stats) {
+  auto passed_stats(base::WrapUnique(
+      new std::vector<std::unique_ptr<InteractionsStats>>(std::move(stats))));
   origin_task_runner_->PostTask(
       FROM_HERE, base::Bind(&PasswordStoreConsumer::OnGetSiteStatistics,
                             consumer_weak_, base::Passed(&passed_stats)));
@@ -89,7 +90,7 @@
 }
 
 void PasswordStore::SetAffiliatedMatchHelper(
-    scoped_ptr<AffiliatedMatchHelper> helper) {
+    std::unique_ptr<AffiliatedMatchHelper> helper) {
   affiliated_match_helper_ = std::move(helper);
 }
 
@@ -178,7 +179,7 @@
         { 2012, 1, 0, 1, 0, 0, 0, 0 };  // 00:00 Jan 1 2012
     ignore_logins_cutoff = base::Time::FromUTCExploded(exploded_cutoff);
   }
-  scoped_ptr<GetLoginsRequest> request(new GetLoginsRequest(consumer));
+  std::unique_ptr<GetLoginsRequest> request(new GetLoginsRequest(consumer));
   request->set_ignore_logins_cutoff(ignore_logins_cutoff);
 
   if (affiliated_match_helper_) {
@@ -235,7 +236,7 @@
 
 void PasswordStore::GetSiteStats(const GURL& origin_domain,
                                  PasswordStoreConsumer* consumer) {
-  scoped_ptr<GetLoginsRequest> request(new GetLoginsRequest(consumer));
+  std::unique_ptr<GetLoginsRequest> request(new GetLoginsRequest(consumer));
   ScheduleTask(base::Bind(&PasswordStore::NotifySiteStats, this, origin_domain,
                           base::Passed(&request)));
 }
@@ -280,7 +281,7 @@
 }
 
 void PasswordStore::GetLoginsImpl(const autofill::PasswordForm& form,
-                                  scoped_ptr<GetLoginsRequest> request) {
+                                  std::unique_ptr<GetLoginsRequest> request) {
   request->NotifyConsumerWithResults(FillMatchingLogins(form));
 }
 
@@ -313,7 +314,7 @@
     // password were to be propagated to affiliated credentials in that case, it
     // may very well overwrite the actual, up-to-date password. Try to mitigate
     // this risk by ignoring updates unless they actually update the password.
-    scoped_ptr<PasswordForm> old_form(GetLoginImpl(form));
+    std::unique_ptr<PasswordForm> old_form(GetLoginImpl(form));
     if (old_form && form.password_value != old_form->password_value)
       ScheduleFindAndUpdateAffiliatedWebLogins(form);
   }
@@ -336,9 +337,9 @@
 }
 
 void PasswordStore::Schedule(
-    void (PasswordStore::*func)(scoped_ptr<GetLoginsRequest>),
+    void (PasswordStore::*func)(std::unique_ptr<GetLoginsRequest>),
     PasswordStoreConsumer* consumer) {
-  scoped_ptr<GetLoginsRequest> request(new GetLoginsRequest(consumer));
+  std::unique_ptr<GetLoginsRequest> request(new GetLoginsRequest(consumer));
   consumer->cancelable_task_tracker()->PostTask(
       GetBackgroundTaskRunner().get(), FROM_HERE,
       base::Bind(func, this, base::Passed(&request)));
@@ -420,7 +421,7 @@
 }
 
 void PasswordStore::GetAutofillableLoginsImpl(
-    scoped_ptr<GetLoginsRequest> request) {
+    std::unique_ptr<GetLoginsRequest> request) {
   ScopedVector<PasswordForm> obtained_forms;
   if (!FillAutofillableLogins(&obtained_forms))
     obtained_forms.clear();
@@ -428,7 +429,7 @@
 }
 
 void PasswordStore::GetAutofillableLoginsWithAffiliatedRealmsImpl(
-    scoped_ptr<GetLoginsRequest> request) {
+    std::unique_ptr<GetLoginsRequest> request) {
   ScopedVector<PasswordForm> obtained_forms;
   if (!FillAutofillableLogins(&obtained_forms))
     obtained_forms.clear();
@@ -441,13 +442,13 @@
 }
 
 void PasswordStore::NotifyLoginsWithAffiliatedRealms(
-    scoped_ptr<GetLoginsRequest> request,
+    std::unique_ptr<GetLoginsRequest> request,
     ScopedVector<PasswordForm> obtained_forms) {
   request->NotifyConsumerWithResults(std::move(obtained_forms));
 }
 
 void PasswordStore::GetBlacklistLoginsImpl(
-    scoped_ptr<GetLoginsRequest> request) {
+    std::unique_ptr<GetLoginsRequest> request) {
   ScopedVector<PasswordForm> obtained_forms;
   if (!FillBlacklistLogins(&obtained_forms))
     obtained_forms.clear();
@@ -455,7 +456,7 @@
 }
 
 void PasswordStore::GetBlacklistLoginsWithAffiliatedRealmsImpl(
-    scoped_ptr<GetLoginsRequest> request) {
+    std::unique_ptr<GetLoginsRequest> request) {
   ScopedVector<PasswordForm> obtained_forms;
   if (!FillBlacklistLogins(&obtained_forms))
     obtained_forms.clear();
@@ -468,13 +469,13 @@
 }
 
 void PasswordStore::NotifySiteStats(const GURL& origin_domain,
-                                    scoped_ptr<GetLoginsRequest> request) {
+                                    std::unique_ptr<GetLoginsRequest> request) {
   request->NotifyWithSiteStatistics(GetSiteStatsImpl(origin_domain));
 }
 
 void PasswordStore::GetLoginsWithAffiliationsImpl(
     const PasswordForm& form,
-    scoped_ptr<GetLoginsRequest> request,
+    std::unique_ptr<GetLoginsRequest> request,
     const std::vector<std::string>& additional_android_realms) {
   DCHECK(GetBackgroundTaskRunner()->BelongsToCurrentThread());
   ScopedVector<PasswordForm> results(FillMatchingLogins(form));
@@ -498,7 +499,7 @@
 
 void PasswordStore::InjectAffiliatedWebRealms(
     ScopedVector<PasswordForm> forms,
-    scoped_ptr<GetLoginsRequest> request) {
+    std::unique_ptr<GetLoginsRequest> request) {
   if (affiliated_match_helper_) {
     affiliated_match_helper_->InjectAffiliatedWebRealms(
         std::move(forms),
@@ -511,26 +512,26 @@
 
 void PasswordStore::ScheduleGetLoginsWithAffiliations(
     const PasswordForm& form,
-    scoped_ptr<GetLoginsRequest> request,
+    std::unique_ptr<GetLoginsRequest> request,
     const std::vector<std::string>& additional_android_realms) {
   ScheduleTask(base::Bind(&PasswordStore::GetLoginsWithAffiliationsImpl, this,
                           form, base::Passed(&request),
                           additional_android_realms));
 }
 
-scoped_ptr<PasswordForm> PasswordStore::GetLoginImpl(
+std::unique_ptr<PasswordForm> PasswordStore::GetLoginImpl(
     const PasswordForm& primary_key) {
   DCHECK(GetBackgroundTaskRunner()->BelongsToCurrentThread());
   ScopedVector<PasswordForm> candidates(FillMatchingLogins(primary_key));
   for (PasswordForm*& candidate : candidates) {
     if (ArePasswordFormUniqueKeyEqual(*candidate, primary_key) &&
         !candidate->is_public_suffix_match) {
-      scoped_ptr<PasswordForm> result(candidate);
+      std::unique_ptr<PasswordForm> result(candidate);
       candidate = nullptr;
       return result;
     }
   }
-  return make_scoped_ptr<PasswordForm>(nullptr);
+  return base::WrapUnique<PasswordForm>(nullptr);
 }
 
 void PasswordStore::FindAndUpdateAffiliatedWebLogins(
diff --git a/components/password_manager/core/browser/password_store.h b/components/password_manager/core/browser/password_store.h
index 95987c26..7a36fdf 100644
--- a/components/password_manager/core/browser/password_store.h
+++ b/components/password_manager/core/browser/password_store.h
@@ -5,13 +5,13 @@
 #ifndef COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_PASSWORD_STORE_H_
 #define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_PASSWORD_STORE_H_
 
+#include <memory>
 #include <string>
 #include <vector>
 
 #include "base/callback.h"
 #include "base/gtest_prod_util.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/scoped_vector.h"
 #include "base/observer_list_threadsafe.h"
 #include "base/single_thread_task_runner.h"
@@ -79,7 +79,7 @@
   // null, clears the the currently set helper if any. Unless a helper is set,
   // affiliation-based matching is disabled. The passed |helper| must already be
   // initialized if it is non-null.
-  void SetAffiliatedMatchHelper(scoped_ptr<AffiliatedMatchHelper> helper);
+  void SetAffiliatedMatchHelper(std::unique_ptr<AffiliatedMatchHelper> helper);
   AffiliatedMatchHelper* affiliated_match_helper() const {
     return affiliated_match_helper_.get();
   }
@@ -220,7 +220,7 @@
         ScopedVector<autofill::PasswordForm> results);
 
     void NotifyWithSiteStatistics(
-        std::vector<scoped_ptr<InteractionsStats>> stats);
+        std::vector<std::unique_ptr<InteractionsStats>> stats);
 
     void set_ignore_logins_cutoff(base::Time cutoff) {
       ignore_logins_cutoff_ = cutoff;
@@ -278,7 +278,7 @@
   // to be virtual only because asynchronous behavior in PasswordStoreWin.
   // TODO(engedy): Make this non-virtual once https://crbug.com/78830 is fixed.
   virtual void GetLoginsImpl(const autofill::PasswordForm& form,
-                             scoped_ptr<GetLoginsRequest> request);
+                             std::unique_ptr<GetLoginsRequest> request);
 
   // Synchronous implementation provided by subclasses to add the given login.
   virtual PasswordStoreChangeList AddLoginImpl(
@@ -302,7 +302,7 @@
   // Synchronous implementation for manipulating with statistics.
   virtual void AddSiteStatsImpl(const InteractionsStats& stats) = 0;
   virtual void RemoveSiteStatsImpl(const GURL& origin_domain) = 0;
-  virtual std::vector<scoped_ptr<InteractionsStats>> GetSiteStatsImpl(
+  virtual std::vector<std::unique_ptr<InteractionsStats>> GetSiteStatsImpl(
       const GURL& origin_domain) = 0;
 
   // Log UMA stats for number of bulk deletions.
@@ -341,7 +341,7 @@
 
   // Schedule the given |func| to be run in the PasswordStore's own thread with
   // responses delivered to |consumer| on the current thread.
-  void Schedule(void (PasswordStore::*func)(scoped_ptr<GetLoginsRequest>),
+  void Schedule(void (PasswordStore::*func)(std::unique_ptr<GetLoginsRequest>),
                 PasswordStoreConsumer* consumer);
 
   // Wrapper method called on the destination thread (DB for non-mac) that
@@ -374,29 +374,29 @@
   void DisableAutoSignInForAllLoginsInternal(const base::Closure& completion);
 
   // Finds all non-blacklist PasswordForms, and notifies the consumer.
-  void GetAutofillableLoginsImpl(scoped_ptr<GetLoginsRequest> request);
+  void GetAutofillableLoginsImpl(std::unique_ptr<GetLoginsRequest> request);
 
   // Same as above, but also fills in |affiliated_web_realm| for Android
   // credentials.
   void GetAutofillableLoginsWithAffiliatedRealmsImpl(
-      scoped_ptr<GetLoginsRequest> request);
+      std::unique_ptr<GetLoginsRequest> request);
 
   // Finds all blacklist PasswordForms, and notifies the consumer.
-  void GetBlacklistLoginsImpl(scoped_ptr<GetLoginsRequest> request);
+  void GetBlacklistLoginsImpl(std::unique_ptr<GetLoginsRequest> request);
 
   // Same as above, but also fills in |affiliated_web_realm| for Android
   // credentials.
   void GetBlacklistLoginsWithAffiliatedRealmsImpl(
-      scoped_ptr<GetLoginsRequest> request);
+      std::unique_ptr<GetLoginsRequest> request);
 
   // Notifies |request| about the stats for |origin_domain|.
   void NotifySiteStats(const GURL& origin_domain,
-                       scoped_ptr<GetLoginsRequest> request);
+                       std::unique_ptr<GetLoginsRequest> request);
 
   // Notifies |request| about the autofillable logins with affiliated web
   // realms for Android credentials.
   void NotifyLoginsWithAffiliatedRealms(
-      scoped_ptr<GetLoginsRequest> request,
+      std::unique_ptr<GetLoginsRequest> request,
       ScopedVector<autofill::PasswordForm> obtained_forms);
 
   // Extended version of GetLoginsImpl that also returns credentials stored for
@@ -408,25 +408,25 @@
   // and takes care of notifying the consumer with the results when done.
   void GetLoginsWithAffiliationsImpl(
       const autofill::PasswordForm& form,
-      scoped_ptr<GetLoginsRequest> request,
+      std::unique_ptr<GetLoginsRequest> request,
       const std::vector<std::string>& additional_android_realms);
 
   // Retrieves and fills in |affiliated_web_realm| values for Android
   // credentials in |forms|. Called on the main thread.
   void InjectAffiliatedWebRealms(ScopedVector<autofill::PasswordForm> forms,
-                                 scoped_ptr<GetLoginsRequest> request);
+                                 std::unique_ptr<GetLoginsRequest> request);
 
   // Schedules GetLoginsWithAffiliationsImpl() to be run on the DB thread.
   void ScheduleGetLoginsWithAffiliations(
       const autofill::PasswordForm& form,
-      scoped_ptr<GetLoginsRequest> request,
+      std::unique_ptr<GetLoginsRequest> request,
       const std::vector<std::string>& additional_android_realms);
 
   // Retrieves the currently stored form, if any, with the same primary key as
   // |form|, that is, with the same signon_realm, origin, username_element,
   // username_value and password_element attributes. To be called on the
   // background thread.
-  scoped_ptr<autofill::PasswordForm> GetLoginImpl(
+  std::unique_ptr<autofill::PasswordForm> GetLoginImpl(
       const autofill::PasswordForm& primary_key);
 
   // Called when a password is added or updated for an Android application, and
@@ -464,8 +464,8 @@
   // The observers.
   scoped_refptr<base::ObserverListThreadSafe<Observer>> observers_;
 
-  scoped_ptr<PasswordSyncableService> syncable_service_;
-  scoped_ptr<AffiliatedMatchHelper> affiliated_match_helper_;
+  std::unique_ptr<PasswordSyncableService> syncable_service_;
+  std::unique_ptr<AffiliatedMatchHelper> affiliated_match_helper_;
   bool is_propagating_password_changes_to_web_credentials_enabled_;
 
   bool shutdown_called_;
diff --git a/components/password_manager/core/browser/password_store_consumer.cc b/components/password_manager/core/browser/password_store_consumer.cc
index 6520356..a261210 100644
--- a/components/password_manager/core/browser/password_store_consumer.cc
+++ b/components/password_manager/core/browser/password_store_consumer.cc
@@ -15,6 +15,6 @@
 }
 
 void PasswordStoreConsumer::OnGetSiteStatistics(
-    scoped_ptr<std::vector<scoped_ptr<InteractionsStats>>> stats) {}
+    std::unique_ptr<std::vector<std::unique_ptr<InteractionsStats>>> stats) {}
 
 }  // namespace password_manager
diff --git a/components/password_manager/core/browser/password_store_consumer.h b/components/password_manager/core/browser/password_store_consumer.h
index ffd5ee9..264cafa 100644
--- a/components/password_manager/core/browser/password_store_consumer.h
+++ b/components/password_manager/core/browser/password_store_consumer.h
@@ -5,9 +5,9 @@
 #ifndef COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_PASSWORD_STORE_CONSUMER_H_
 #define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_PASSWORD_STORE_CONSUMER_H_
 
+#include <memory>
 #include <vector>
 
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/scoped_vector.h"
 #include "base/task/cancelable_task_tracker.h"
 
@@ -34,10 +34,10 @@
       ScopedVector<autofill::PasswordForm> results) = 0;
 
   // TODO(crbug.com/561749): The argument's type would ideally be just
-  // std::vector<scoped_ptr<InteractionsStats>>, but currently it is not
+  // std::vector<std::unique_ptr<InteractionsStats>>, but currently it is not
   // possible to pass that into a callback.
   virtual void OnGetSiteStatistics(
-      scoped_ptr<std::vector<scoped_ptr<InteractionsStats>>> stats);
+      std::unique_ptr<std::vector<std::unique_ptr<InteractionsStats>>> stats);
 
   // The base::CancelableTaskTracker can be used for cancelling the
   // tasks associated with the consumer.
diff --git a/components/password_manager/core/browser/password_store_default.cc b/components/password_manager/core/browser/password_store_default.cc
index 91008f9..79cae2a 100644
--- a/components/password_manager/core/browser/password_store_default.cc
+++ b/components/password_manager/core/browser/password_store_default.cc
@@ -19,7 +19,7 @@
 PasswordStoreDefault::PasswordStoreDefault(
     scoped_refptr<base::SingleThreadTaskRunner> main_thread_runner,
     scoped_refptr<base::SingleThreadTaskRunner> db_thread_runner,
-    scoped_ptr<LoginDatabase> login_db)
+    std::unique_ptr<LoginDatabase> login_db)
     : PasswordStore(main_thread_runner, db_thread_runner),
       login_db_(std::move(login_db)) {}
 
@@ -189,11 +189,11 @@
     login_db_->stats_table().RemoveRow(origin_domain);
 }
 
-std::vector<scoped_ptr<InteractionsStats>>
+std::vector<std::unique_ptr<InteractionsStats>>
 PasswordStoreDefault::GetSiteStatsImpl(const GURL& origin_domain) {
   DCHECK(GetBackgroundTaskRunner()->BelongsToCurrentThread());
   return login_db_ ? login_db_->stats_table().GetRows(origin_domain)
-                   : std::vector<scoped_ptr<InteractionsStats>>();
+                   : std::vector<std::unique_ptr<InteractionsStats>>();
 }
 
 void PasswordStoreDefault::ResetLoginDB() {
diff --git a/components/password_manager/core/browser/password_store_default.h b/components/password_manager/core/browser/password_store_default.h
index 5e9b5e7..9ebcea09 100644
--- a/components/password_manager/core/browser/password_store_default.h
+++ b/components/password_manager/core/browser/password_store_default.h
@@ -5,11 +5,11 @@
 #ifndef COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_PASSWORD_STORE_DEFAULT_H_
 #define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_PASSWORD_STORE_DEFAULT_H_
 
+#include <memory>
 #include <string>
 #include <vector>
 
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/password_manager/core/browser/login_database.h"
 #include "components/password_manager/core/browser/password_store.h"
 
@@ -24,7 +24,7 @@
   PasswordStoreDefault(
       scoped_refptr<base::SingleThreadTaskRunner> main_thread_runner,
       scoped_refptr<base::SingleThreadTaskRunner> db_thread_runner,
-      scoped_ptr<LoginDatabase> login_db);
+      std::unique_ptr<LoginDatabase> login_db);
 
   bool Init(const syncer::SyncableService::StartSyncFlare& flare) override;
 
@@ -69,14 +69,14 @@
       ScopedVector<autofill::PasswordForm>* forms) override;
   void AddSiteStatsImpl(const InteractionsStats& stats) override;
   void RemoveSiteStatsImpl(const GURL& origin_domain) override;
-  std::vector<scoped_ptr<InteractionsStats>> GetSiteStatsImpl(
+  std::vector<std::unique_ptr<InteractionsStats>> GetSiteStatsImpl(
       const GURL& origin_domain) override;
 
   inline bool DeleteAndRecreateDatabaseFile() {
     return login_db_->DeleteAndRecreateDatabaseFile();
   }
 
-  void set_login_db(scoped_ptr<password_manager::LoginDatabase> login_db) {
+  void set_login_db(std::unique_ptr<password_manager::LoginDatabase> login_db) {
     login_db_.swap(login_db);
   }
 
@@ -88,7 +88,7 @@
   // in an uninitialized state, so as to allow injecting mocks, then Init() is
   // called on the DB thread in a deferred manner. If opening the DB fails,
   // |login_db_| will be reset and stay NULL for the lifetime of |this|.
-  scoped_ptr<LoginDatabase> login_db_;
+  std::unique_ptr<LoginDatabase> login_db_;
 
   DISALLOW_COPY_AND_ASSIGN(PasswordStoreDefault);
 };
diff --git a/components/password_manager/core/browser/password_store_default_unittest.cc b/components/password_manager/core/browser/password_store_default_unittest.cc
index 3ae34c975..fa6e1b19 100644
--- a/components/password_manager/core/browser/password_store_default_unittest.cc
+++ b/components/password_manager/core/browser/password_store_default_unittest.cc
@@ -11,6 +11,7 @@
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/macros.h"
+#include "base/memory/ptr_util.h"
 #include "base/run_loop.h"
 #include "base/stl_util.h"
 #include "base/strings/string_util.h"
@@ -80,7 +81,8 @@
 class PasswordStoreDefaultTestDelegate {
  public:
   PasswordStoreDefaultTestDelegate();
-  explicit PasswordStoreDefaultTestDelegate(scoped_ptr<LoginDatabase> database);
+  explicit PasswordStoreDefaultTestDelegate(
+      std::unique_ptr<LoginDatabase> database);
   ~PasswordStoreDefaultTestDelegate();
 
   PasswordStoreDefault* store() { return store_.get(); }
@@ -93,7 +95,7 @@
   void ClosePasswordStore();
 
   scoped_refptr<PasswordStoreDefault> CreateInitializedStore(
-      scoped_ptr<LoginDatabase> database);
+      std::unique_ptr<LoginDatabase> database);
 
   base::FilePath test_login_db_file_path() const;
 
@@ -107,11 +109,11 @@
 PasswordStoreDefaultTestDelegate::PasswordStoreDefaultTestDelegate() {
   SetupTempDir();
   store_ = CreateInitializedStore(
-      make_scoped_ptr(new LoginDatabase(test_login_db_file_path())));
+      base::WrapUnique(new LoginDatabase(test_login_db_file_path())));
 }
 
 PasswordStoreDefaultTestDelegate::PasswordStoreDefaultTestDelegate(
-    scoped_ptr<LoginDatabase> database) {
+    std::unique_ptr<LoginDatabase> database) {
   SetupTempDir();
   store_ = CreateInitializedStore(std::move(database));
 }
@@ -136,7 +138,7 @@
 
 scoped_refptr<PasswordStoreDefault>
 PasswordStoreDefaultTestDelegate::CreateInitializedStore(
-    scoped_ptr<LoginDatabase> database) {
+    std::unique_ptr<LoginDatabase> database) {
   scoped_refptr<PasswordStoreDefault> store(new PasswordStoreDefault(
       base::ThreadTaskRunnerHandle::Get(), base::ThreadTaskRunnerHandle::Get(),
       std::move(database)));
@@ -203,7 +205,7 @@
   PasswordStoreDefaultTestDelegate delegate;
   PasswordStoreDefault* store = delegate.store();
 
-  scoped_ptr<PasswordForm> form =
+  std::unique_ptr<PasswordForm> form =
       CreatePasswordFormFromDataForTesting(CreateTestPasswordFormData());
 
   MockPasswordStoreObserver observer;
@@ -253,7 +255,7 @@
 // notifications.
 TEST(PasswordStoreDefaultTest, OperationsOnABadDatabaseSilentlyFail) {
   PasswordStoreDefaultTestDelegate delegate(
-      make_scoped_ptr(new BadLoginDatabase));
+      base::WrapUnique(new BadLoginDatabase));
   PasswordStoreDefault* bad_store = delegate.store();
   base::MessageLoop::current()->RunUntilIdle();
   ASSERT_EQ(nullptr, bad_store->login_db());
@@ -262,9 +264,9 @@
   bad_store->AddObserver(&mock_observer);
 
   // Add a new autofillable login + a blacklisted login.
-  scoped_ptr<PasswordForm> form =
+  std::unique_ptr<PasswordForm> form =
       CreatePasswordFormFromDataForTesting(CreateTestPasswordFormData());
-  scoped_ptr<PasswordForm> blacklisted_form(new PasswordForm(*form));
+  std::unique_ptr<PasswordForm> blacklisted_form(new PasswordForm(*form));
   blacklisted_form->signon_realm = "http://foo.example.com";
   blacklisted_form->origin = GURL("http://foo.example.com/origin");
   blacklisted_form->action = GURL("http://foo.example.com/action");
diff --git a/components/password_manager/core/browser/password_store_factory_util.cc b/components/password_manager/core/browser/password_store_factory_util.cc
index d141fa9..4c73f481 100644
--- a/components/password_manager/core/browser/password_store_factory_util.cc
+++ b/components/password_manager/core/browser/password_store_factory_util.cc
@@ -6,6 +6,7 @@
 
 #include <utility>
 
+#include "base/memory/ptr_util.h"
 #include "components/password_manager/core/browser/affiliated_match_helper.h"
 #include "components/password_manager/core/browser/affiliation_service.h"
 #include "components/password_manager/core/browser/affiliation_utils.h"
@@ -33,10 +34,10 @@
   // The PasswordStore is so far the only consumer of the AffiliationService,
   // therefore the service is owned by the AffiliatedMatchHelper, which in
   // turn is owned by the PasswordStore.
-  scoped_ptr<AffiliationService> affiliation_service(
+  std::unique_ptr<AffiliationService> affiliation_service(
       new AffiliationService(db_thread_runner));
   affiliation_service->Initialize(request_context_getter, db_path);
-  scoped_ptr<AffiliatedMatchHelper> affiliated_match_helper(
+  std::unique_ptr<AffiliatedMatchHelper> affiliated_match_helper(
       new AffiliatedMatchHelper(password_store,
                                 std::move(affiliation_service)));
   affiliated_match_helper->Initialize();
@@ -71,7 +72,7 @@
                                      db_thread_runner);
   } else if (!matching_should_be_active && matching_is_active) {
     password_store->SetAffiliatedMatchHelper(
-        make_scoped_ptr<AffiliatedMatchHelper>(nullptr));
+        base::WrapUnique<AffiliatedMatchHelper>(nullptr));
   }
 }
 
@@ -87,10 +88,10 @@
   }
 }
 
-scoped_ptr<LoginDatabase> CreateLoginDatabase(
+std::unique_ptr<LoginDatabase> CreateLoginDatabase(
     const base::FilePath& profile_path) {
   base::FilePath login_db_file_path = profile_path.Append(kLoginDataFileName);
-  return make_scoped_ptr(new LoginDatabase(login_db_file_path));
+  return base::WrapUnique(new LoginDatabase(login_db_file_path));
 }
 
 }  // namespace password_manager
diff --git a/components/password_manager/core/browser/password_store_factory_util.h b/components/password_manager/core/browser/password_store_factory_util.h
index 2626618..94b9957 100644
--- a/components/password_manager/core/browser/password_store_factory_util.h
+++ b/components/password_manager/core/browser/password_store_factory_util.h
@@ -5,9 +5,10 @@
 #ifndef COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_PASSWORD_STORE_FACTORY_UTIL_H_
 #define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_PASSWORD_STORE_FACTORY_UTIL_H_
 
+#include <memory>
+
 #include "base/files/file_path.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/single_thread_task_runner.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "components/keyed_service/core/service_access_type.h"
@@ -44,7 +45,7 @@
 // Creates a LoginDatabase. Looks in |profile_path| for the database file.
 // Does not call LoginDatabase::Init() -- to avoid UI jank, that needs to be
 // called by PasswordStore::Init() on the background thread.
-scoped_ptr<LoginDatabase> CreateLoginDatabase(
+std::unique_ptr<LoginDatabase> CreateLoginDatabase(
     const base::FilePath& profile_path);
 
 }  // namespace password_manager
diff --git a/components/password_manager/core/browser/password_store_origin_unittest.h b/components/password_manager/core/browser/password_store_origin_unittest.h
index 3686f22..e8ff255 100644
--- a/components/password_manager/core/browser/password_store_origin_unittest.h
+++ b/components/password_manager/core/browser/password_store_origin_unittest.h
@@ -5,8 +5,9 @@
 #ifndef COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_PASSWORD_STORE_ORIGIN_UNITTEST_H_
 #define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_PASSWORD_STORE_ORIGIN_UNITTEST_H_
 
+#include <memory>
+
 #include "base/callback.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/run_loop.h"
 #include "base/time/time.h"
 #include "components/password_manager/core/browser/password_manager_test_utils.h"
@@ -63,7 +64,7 @@
 TYPED_TEST_P(PasswordStoreOriginTest,
              RemoveLoginsByURLAndTimeImpl_AllFittingOriginAndTime) {
   const char origin_url[] = "http://foo.example.com/";
-  scoped_ptr<PasswordForm> form = CreatePasswordFormFromDataForTesting(
+  std::unique_ptr<PasswordForm> form = CreatePasswordFormFromDataForTesting(
       CreateTestPasswordFormDataByOrigin(origin_url));
   this->delegate_.store()->AddLogin(*form);
   this->delegate_.FinishAsyncProcessing();
@@ -86,7 +87,7 @@
 TYPED_TEST_P(PasswordStoreOriginTest,
              RemoveLoginsByURLAndTimeImpl_SomeFittingOriginAndTime) {
   const char fitting_url[] = "http://foo.example.com/";
-  scoped_ptr<PasswordForm> form = CreatePasswordFormFromDataForTesting(
+  std::unique_ptr<PasswordForm> form = CreatePasswordFormFromDataForTesting(
       CreateTestPasswordFormDataByOrigin(fitting_url));
   this->delegate_.store()->AddLogin(*form);
 
@@ -115,7 +116,7 @@
 TYPED_TEST_P(PasswordStoreOriginTest,
              RemoveLoginsByURLAndTimeImpl_NonMatchingOrigin) {
   const char origin_url[] = "http://foo.example.com/";
-  scoped_ptr<autofill::PasswordForm> form =
+  std::unique_ptr<autofill::PasswordForm> form =
       CreatePasswordFormFromDataForTesting(
           CreateTestPasswordFormDataByOrigin(origin_url));
   this->delegate_.store()->AddLogin(*form);
@@ -139,7 +140,7 @@
 TYPED_TEST_P(PasswordStoreOriginTest,
              RemoveLoginsByURLAndTimeImpl_NotWithinTimeInterval) {
   const char origin_url[] = "http://foo.example.com/";
-  scoped_ptr<autofill::PasswordForm> form =
+  std::unique_ptr<autofill::PasswordForm> form =
       CreatePasswordFormFromDataForTesting(
           CreateTestPasswordFormDataByOrigin(origin_url));
   this->delegate_.store()->AddLogin(*form);
diff --git a/components/password_manager/core/browser/password_store_unittest.cc b/components/password_manager/core/browser/password_store_unittest.cc
index 4d0363f..9daa18b 100644
--- a/components/password_manager/core/browser/password_store_unittest.cc
+++ b/components/password_manager/core/browser/password_store_unittest.cc
@@ -8,11 +8,13 @@
 // passwords. This will not be needed anymore if crbug.com/466638 is fixed.
 
 #include <stddef.h>
+
 #include <utility>
 
 #include "base/bind.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/macros.h"
+#include "base/memory/ptr_util.h"
 #include "base/stl_util.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
@@ -105,7 +107,7 @@
 TEST_F(PasswordStoreTest, IgnoreOldWwwGoogleLogins) {
   scoped_refptr<PasswordStoreDefault> store(new PasswordStoreDefault(
       base::ThreadTaskRunnerHandle::Get(), base::ThreadTaskRunnerHandle::Get(),
-      make_scoped_ptr(new LoginDatabase(test_login_db_file_path()))));
+      base::WrapUnique(new LoginDatabase(test_login_db_file_path()))));
   store->Init(syncer::SyncableService::StartSyncFlare());
 
   const time_t cutoff = 1325376000;  // 00:00 Jan 1 2012 UTC
@@ -228,7 +230,7 @@
 TEST_F(PasswordStoreTest, StartSyncFlare) {
   scoped_refptr<PasswordStoreDefault> store(new PasswordStoreDefault(
       base::ThreadTaskRunnerHandle::Get(), base::ThreadTaskRunnerHandle::Get(),
-      make_scoped_ptr(new LoginDatabase(test_login_db_file_path()))));
+      base::WrapUnique(new LoginDatabase(test_login_db_file_path()))));
   StartSyncFlareMock mock;
   store->Init(
       base::Bind(&StartSyncFlareMock::StartSyncFlare, base::Unretained(&mock)));
@@ -257,22 +259,27 @@
 
   scoped_refptr<PasswordStoreDefault> store(new PasswordStoreDefault(
       base::ThreadTaskRunnerHandle::Get(), base::ThreadTaskRunnerHandle::Get(),
-      make_scoped_ptr(new LoginDatabase(test_login_db_file_path()))));
+      base::WrapUnique(new LoginDatabase(test_login_db_file_path()))));
   store->Init(syncer::SyncableService::StartSyncFlare());
 
   // For each attribute in the primary key, create one form that mismatches on
   // that attribute.
-  scoped_ptr<PasswordForm> test_form(
+  std::unique_ptr<PasswordForm> test_form(
       CreatePasswordFormFromDataForTesting(kTestCredential));
-  scoped_ptr<PasswordForm> mismatching_form_1(new PasswordForm(*test_form));
+  std::unique_ptr<PasswordForm> mismatching_form_1(
+      new PasswordForm(*test_form));
   mismatching_form_1->signon_realm = kTestPSLMatchingWebRealm;
-  scoped_ptr<PasswordForm> mismatching_form_2(new PasswordForm(*test_form));
+  std::unique_ptr<PasswordForm> mismatching_form_2(
+      new PasswordForm(*test_form));
   mismatching_form_2->origin = GURL(kTestPSLMatchingWebOrigin);
-  scoped_ptr<PasswordForm> mismatching_form_3(new PasswordForm(*test_form));
+  std::unique_ptr<PasswordForm> mismatching_form_3(
+      new PasswordForm(*test_form));
   mismatching_form_3->username_element = base::ASCIIToUTF16("other_element");
-  scoped_ptr<PasswordForm> mismatching_form_4(new PasswordForm(*test_form));
+  std::unique_ptr<PasswordForm> mismatching_form_4(
+      new PasswordForm(*test_form));
   mismatching_form_4->password_element = base::ASCIIToUTF16("other_element");
-  scoped_ptr<PasswordForm> mismatching_form_5(new PasswordForm(*test_form));
+  std::unique_ptr<PasswordForm> mismatching_form_5(
+      new PasswordForm(*test_form));
   mismatching_form_5->username_value =
       base::ASCIIToUTF16("other_username_value");
 
@@ -286,7 +293,7 @@
 
   store->AddLogin(*test_form);
   base::MessageLoop::current()->RunUntilIdle();
-  scoped_ptr<PasswordForm> returned_form = store->GetLoginImpl(*test_form);
+  std::unique_ptr<PasswordForm> returned_form = store->GetLoginImpl(*test_form);
   ASSERT_TRUE(returned_form);
   EXPECT_EQ(*test_form, *returned_form);
 
@@ -315,10 +322,10 @@
 
   scoped_refptr<PasswordStoreDefault> store(new PasswordStoreDefault(
       base::ThreadTaskRunnerHandle::Get(), base::ThreadTaskRunnerHandle::Get(),
-      make_scoped_ptr(new LoginDatabase(test_login_db_file_path()))));
+      base::WrapUnique(new LoginDatabase(test_login_db_file_path()))));
   store->Init(syncer::SyncableService::StartSyncFlare());
 
-  scoped_ptr<PasswordForm> old_form(
+  std::unique_ptr<PasswordForm> old_form(
       CreatePasswordFormFromDataForTesting(kTestCredentials[0]));
   store->AddLogin(*old_form);
   base::MessageLoop::current()->RunUntilIdle();
@@ -326,7 +333,7 @@
   MockPasswordStoreObserver mock_observer;
   store->AddObserver(&mock_observer);
 
-  scoped_ptr<PasswordForm> new_form(
+  std::unique_ptr<PasswordForm> new_form(
       CreatePasswordFormFromDataForTesting(kTestCredentials[1]));
   EXPECT_CALL(mock_observer, OnLoginsChanged(testing::SizeIs(2u)));
   PasswordForm old_primary_key;
@@ -368,10 +375,10 @@
 
   scoped_refptr<PasswordStoreDefault> store(new PasswordStoreDefault(
       base::ThreadTaskRunnerHandle::Get(), base::ThreadTaskRunnerHandle::Get(),
-      make_scoped_ptr(new LoginDatabase(test_login_db_file_path()))));
+      base::WrapUnique(new LoginDatabase(test_login_db_file_path()))));
   store->Init(syncer::SyncableService::StartSyncFlare());
 
-  scoped_ptr<PasswordForm> test_form(
+  std::unique_ptr<PasswordForm> test_form(
       CreatePasswordFormFromDataForTesting(kTestCredential));
   store->AddLogin(*test_form);
   base::MessageLoop::current()->RunUntilIdle();
@@ -421,11 +428,11 @@
 
   scoped_refptr<PasswordStoreDefault> store(new PasswordStoreDefault(
       base::ThreadTaskRunnerHandle::Get(), base::ThreadTaskRunnerHandle::Get(),
-      make_scoped_ptr(new LoginDatabase(test_login_db_file_path()))));
+      base::WrapUnique(new LoginDatabase(test_login_db_file_path()))));
   store->Init(syncer::SyncableService::StartSyncFlare());
 
   MockAffiliatedMatchHelper* mock_helper = new MockAffiliatedMatchHelper;
-  store->SetAffiliatedMatchHelper(make_scoped_ptr(mock_helper));
+  store->SetAffiliatedMatchHelper(base::WrapUnique(mock_helper));
 
   ScopedVector<PasswordForm> all_credentials;
   for (size_t i = 0; i < arraysize(kTestCredentials); ++i) {
@@ -528,11 +535,11 @@
 
   scoped_refptr<PasswordStoreDefault> store(new PasswordStoreDefault(
       base::ThreadTaskRunnerHandle::Get(), base::ThreadTaskRunnerHandle::Get(),
-      make_scoped_ptr(new LoginDatabase(test_login_db_file_path()))));
+      base::WrapUnique(new LoginDatabase(test_login_db_file_path()))));
   store->Init(syncer::SyncableService::StartSyncFlare());
 
   MockAffiliatedMatchHelper* mock_helper = new MockAffiliatedMatchHelper;
-  store->SetAffiliatedMatchHelper(make_scoped_ptr(mock_helper));
+  store->SetAffiliatedMatchHelper(base::WrapUnique(mock_helper));
 
   ScopedVector<PasswordForm> all_credentials;
   for (size_t i = 0; i < arraysize(kTestCredentials); ++i) {
@@ -716,7 +723,7 @@
       scoped_refptr<PasswordStoreDefault> store(new PasswordStoreDefault(
           base::ThreadTaskRunnerHandle::Get(),
           base::ThreadTaskRunnerHandle::Get(),
-          make_scoped_ptr(new LoginDatabase(test_login_db_file_path()))));
+          base::WrapUnique(new LoginDatabase(test_login_db_file_path()))));
       store->Init(syncer::SyncableService::StartSyncFlare());
       store->RemoveLoginsCreatedBetween(base::Time(), base::Time::Max(),
                                         base::Closure());
@@ -736,7 +743,7 @@
       // otherwise it will already start propagating updates as new Android
       // credentials are added.
       MockAffiliatedMatchHelper* mock_helper = new MockAffiliatedMatchHelper;
-      store->SetAffiliatedMatchHelper(make_scoped_ptr(mock_helper));
+      store->SetAffiliatedMatchHelper(base::WrapUnique(mock_helper));
       store->enable_propagating_password_changes_to_web_credentials(
           propagation_enabled);
 
@@ -825,7 +832,7 @@
     scoped_refptr<PasswordStoreDefault> store(new PasswordStoreDefault(
         base::ThreadTaskRunnerHandle::Get(),
         base::ThreadTaskRunnerHandle::Get(),
-        make_scoped_ptr(new LoginDatabase(test_login_db_file_path()))));
+        base::WrapUnique(new LoginDatabase(test_login_db_file_path()))));
     store->Init(syncer::SyncableService::StartSyncFlare());
     store->RemoveLoginsCreatedBetween(base::Time(), base::Time::Max(),
                                       base::Closure());
@@ -846,7 +853,7 @@
       expected_results.push_back(new PasswordForm(*all_credentials[i]));
 
     MockAffiliatedMatchHelper* mock_helper = new MockAffiliatedMatchHelper;
-    store->SetAffiliatedMatchHelper(make_scoped_ptr(mock_helper));
+    store->SetAffiliatedMatchHelper(base::WrapUnique(mock_helper));
 
     std::vector<std::string> affiliated_web_realms;
     affiliated_web_realms.push_back(kTestWebRealm1);
diff --git a/components/password_manager/core/browser/password_syncable_service.cc b/components/password_manager/core/browser/password_syncable_service.cc
index 9d82dea..5eda9433 100644
--- a/components/password_manager/core/browser/password_syncable_service.cc
+++ b/components/password_manager/core/browser/password_syncable_service.cc
@@ -145,8 +145,8 @@
 syncer::SyncMergeResult PasswordSyncableService::MergeDataAndStartSyncing(
     syncer::ModelType type,
     const syncer::SyncDataList& initial_sync_data,
-    scoped_ptr<syncer::SyncChangeProcessor> sync_processor,
-    scoped_ptr<syncer::SyncErrorFactory> sync_error_factory) {
+    std::unique_ptr<syncer::SyncChangeProcessor> sync_processor,
+    std::unique_ptr<syncer::SyncErrorFactory> sync_error_factory) {
   DCHECK(CalledOnValidThread());
   DCHECK_EQ(syncer::PASSWORDS, type);
   base::AutoReset<bool> processing_changes(&is_processing_sync_changes_, true);
diff --git a/components/password_manager/core/browser/password_syncable_service.h b/components/password_manager/core/browser/password_syncable_service.h
index 547df40..78d4ef6 100644
--- a/components/password_manager/core/browser/password_syncable_service.h
+++ b/components/password_manager/core/browser/password_syncable_service.h
@@ -5,11 +5,11 @@
 #ifndef COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_PASSWORD_SYNCABLE_SERVICE_H__
 #define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_PASSWORD_SYNCABLE_SERVICE_H__
 
+#include <memory>
 #include <string>
 #include <vector>
 
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/threading/non_thread_safe.h"
 #include "components/password_manager/core/browser/password_store_change.h"
 #include "sync/api/sync_change.h"
@@ -48,8 +48,8 @@
   syncer::SyncMergeResult MergeDataAndStartSyncing(
       syncer::ModelType type,
       const syncer::SyncDataList& initial_sync_data,
-      scoped_ptr<syncer::SyncChangeProcessor> sync_processor,
-      scoped_ptr<syncer::SyncErrorFactory> error_handler) override;
+      std::unique_ptr<syncer::SyncChangeProcessor> sync_processor,
+      std::unique_ptr<syncer::SyncErrorFactory> error_handler) override;
   void StopSyncing(syncer::ModelType type) override;
   syncer::SyncDataList GetAllSyncData(syncer::ModelType type) const override;
   syncer::SyncError ProcessSyncChanges(
@@ -102,10 +102,10 @@
 
   // The factory that creates sync errors. |SyncError| has rich data
   // suitable for debugging.
-  scoped_ptr<syncer::SyncErrorFactory> sync_error_factory_;
+  std::unique_ptr<syncer::SyncErrorFactory> sync_error_factory_;
 
   // |sync_processor_| will mirror the |PasswordStore| changes in the sync db.
-  scoped_ptr<syncer::SyncChangeProcessor> sync_processor_;
+  std::unique_ptr<syncer::SyncChangeProcessor> sync_processor_;
 
   // The password store that adds/updates/deletes password entries. Not owned.
   PasswordStoreSync* const password_store_;
diff --git a/components/password_manager/core/browser/password_syncable_service_unittest.cc b/components/password_manager/core/browser/password_syncable_service_unittest.cc
index bbff95b..df7f280 100644
--- a/components/password_manager/core/browser/password_syncable_service_unittest.cc
+++ b/components/password_manager/core/browser/password_syncable_service_unittest.cc
@@ -5,6 +5,7 @@
 #include "components/password_manager/core/browser/password_syncable_service.h"
 
 #include <algorithm>
+#include <memory>
 #include <string>
 #include <utility>
 #include <vector>
@@ -12,7 +13,6 @@
 #include "base/location.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/message_loop/message_loop.h"
 #include "base/strings/utf_string_conversions.h"
 #include "components/password_manager/core/browser/mock_password_store.h"
@@ -203,13 +203,13 @@
   MockPasswordSyncableService* service() { return service_.get(); }
 
   // Returnes the scoped_ptr to |service_| thus NULLing out it.
-  scoped_ptr<syncer::SyncChangeProcessor> ReleaseSyncableService() {
+  std::unique_ptr<syncer::SyncChangeProcessor> ReleaseSyncableService() {
     return std::move(service_);
   }
 
  private:
   scoped_refptr<MockPasswordStore> password_store_;
-  scoped_ptr<MockPasswordSyncableService> service_;
+  std::unique_ptr<MockPasswordSyncableService> service_;
 
   DISALLOW_COPY_AND_ASSIGN(PasswordSyncableServiceWrapper);
 };
@@ -226,7 +226,7 @@
 
  protected:
   base::MessageLoop message_loop_;
-  scoped_ptr<MockSyncChangeProcessor> processor_;
+  std::unique_ptr<MockSyncChangeProcessor> processor_;
 
  private:
   PasswordSyncableServiceWrapper wrapper_;
@@ -251,9 +251,9 @@
   EXPECT_CALL(*processor_, ProcessSyncChanges(_, ElementsAre(
       SyncChangeIs(SyncChange::ACTION_ADD, form))));
 
-  service()->MergeDataAndStartSyncing(syncer::PASSWORDS, list,
-                                      std::move(processor_),
-                                      scoped_ptr<syncer::SyncErrorFactory>());
+  service()->MergeDataAndStartSyncing(
+      syncer::PASSWORDS, list, std::move(processor_),
+      std::unique_ptr<syncer::SyncErrorFactory>());
 }
 
 // Sync has data that is not present in the password db.
@@ -269,9 +269,9 @@
   EXPECT_CALL(*password_store(), AddLoginImpl(PasswordIs(new_from_sync)));
   EXPECT_CALL(*processor_, ProcessSyncChanges(_, IsEmpty()));
 
-  service()->MergeDataAndStartSyncing(syncer::PASSWORDS, list,
-                                      std::move(processor_),
-                                      scoped_ptr<syncer::SyncErrorFactory>());
+  service()->MergeDataAndStartSyncing(
+      syncer::PASSWORDS, list, std::move(processor_),
+      std::unique_ptr<syncer::SyncErrorFactory>());
 }
 
 // Passwords db has data that is not present in sync.
@@ -292,9 +292,9 @@
   EXPECT_CALL(*processor_, ProcessSyncChanges(_, ElementsAre(
       SyncChangeIs(SyncChange::ACTION_ADD, form))));
 
-  service()->MergeDataAndStartSyncing(syncer::PASSWORDS, SyncDataList(),
-                                      std::move(processor_),
-                                      scoped_ptr<syncer::SyncErrorFactory>());
+  service()->MergeDataAndStartSyncing(
+      syncer::PASSWORDS, SyncDataList(), std::move(processor_),
+      std::unique_ptr<syncer::SyncErrorFactory>());
 }
 
 // Both passwords db and sync contain the same data.
@@ -313,7 +313,7 @@
 
   service()->MergeDataAndStartSyncing(
       syncer::PASSWORDS, SyncDataList(1, SyncDataFromPassword(form)),
-      std::move(processor_), scoped_ptr<syncer::SyncErrorFactory>());
+      std::move(processor_), std::unique_ptr<syncer::SyncErrorFactory>());
 }
 
 // Both passwords db and sync have the same data but they need to be merged
@@ -337,7 +337,7 @@
 
   service()->MergeDataAndStartSyncing(
       syncer::PASSWORDS, SyncDataList(1, SyncDataFromPassword(form2)),
-      std::move(processor_), scoped_ptr<syncer::SyncErrorFactory>());
+      std::move(processor_), std::unique_ptr<syncer::SyncErrorFactory>());
 }
 
 // Initiate sync due to local DB changes.
@@ -350,9 +350,9 @@
       .WillOnce(Return(true));
   EXPECT_CALL(*password_store(), FillBlacklistLogins(_))
       .WillOnce(Return(true));
-  service()->MergeDataAndStartSyncing(syncer::PASSWORDS, SyncDataList(),
-                                      std::move(processor_),
-                                      scoped_ptr<syncer::SyncErrorFactory>());
+  service()->MergeDataAndStartSyncing(
+      syncer::PASSWORDS, SyncDataList(), std::move(processor_),
+      std::unique_ptr<syncer::SyncErrorFactory>());
 
   autofill::PasswordForm form1;
   form1.signon_realm = kSignonRealm;
@@ -469,10 +469,9 @@
   syncer::SyncDataList other_service_data =
       other_service_wrapper.service()->GetAllSyncData(syncer::PASSWORDS);
   service()->MergeDataAndStartSyncing(
-      syncer::PASSWORDS,
-      other_service_data,
+      syncer::PASSWORDS, other_service_data,
       other_service_wrapper.ReleaseSyncableService(),
-      scoped_ptr<syncer::SyncErrorFactory>());
+      std::unique_ptr<syncer::SyncErrorFactory>());
 }
 
 // Calls ActOnPasswordStoreChanges without SyncChangeProcessor. StartSyncFlare
@@ -499,7 +498,7 @@
 // Start syncing with an error. Subsequent password store updates shouldn't be
 // propagated to Sync.
 TEST_F(PasswordSyncableServiceTest, FailedReadFromPasswordStore) {
-  scoped_ptr<syncer::SyncErrorFactoryMock> error_factory(
+  std::unique_ptr<syncer::SyncErrorFactoryMock> error_factory(
       new syncer::SyncErrorFactoryMock);
   syncer::SyncError error(FROM_HERE, syncer::SyncError::DATATYPE_ERROR,
                           "Failed to get passwords from store.",
@@ -530,7 +529,7 @@
   form.signon_realm = kSignonRealm;
   form.username_value = base::ASCIIToUTF16(kUsername);
   form.password_value = base::ASCIIToUTF16(kPassword);
-  scoped_ptr<syncer::SyncErrorFactoryMock> error_factory(
+  std::unique_ptr<syncer::SyncErrorFactoryMock> error_factory(
       new syncer::SyncErrorFactoryMock);
   syncer::SyncError error(FROM_HERE, syncer::SyncError::DATATYPE_ERROR,
                           "There is a problem", syncer::PASSWORDS);
@@ -581,9 +580,9 @@
       SyncChangeIs(SyncChange::ACTION_DELETE, old_empty_form),
       SyncChangeIs(SyncChange::ACTION_DELETE, sync_empty_form))));
 
-  service()->MergeDataAndStartSyncing(syncer::PASSWORDS, sync_data,
-                                      std::move(processor_),
-                                      scoped_ptr<syncer::SyncErrorFactory>());
+  service()->MergeDataAndStartSyncing(
+      syncer::PASSWORDS, sync_data, std::move(processor_),
+      std::unique_ptr<syncer::SyncErrorFactory>());
 }
 
 // Serialize and deserialize empty federation_origin and make sure it's an empty
diff --git a/components/password_manager/core/browser/psl_matching_helper.cc b/components/password_manager/core/browser/psl_matching_helper.cc
index 9167817f..ff01008 100644
--- a/components/password_manager/core/browser/psl_matching_helper.cc
+++ b/components/password_manager/core/browser/psl_matching_helper.cc
@@ -4,8 +4,9 @@
 
 #include "components/password_manager/core/browser/psl_matching_helper.h"
 
+#include <memory>
+
 #include "base/logging.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/strings/string_util.h"
 #include "components/autofill/core/common/password_form.h"
 #include "net/base/registry_controlled_domains/registry_controlled_domain.h"
diff --git a/components/password_manager/core/browser/statistics_table.cc b/components/password_manager/core/browser/statistics_table.cc
index dd6ba35..23522a9a 100644
--- a/components/password_manager/core/browser/statistics_table.cc
+++ b/components/password_manager/core/browser/statistics_table.cc
@@ -9,6 +9,7 @@
 #include <algorithm>
 #include <limits>
 
+#include "base/memory/ptr_util.h"
 #include "sql/connection.h"
 #include "sql/statement.h"
 
@@ -35,13 +36,13 @@
 }
 
 InteractionsStats* FindStatsByUsername(
-    const std::vector<scoped_ptr<InteractionsStats>>& stats,
+    const std::vector<std::unique_ptr<InteractionsStats>>& stats,
     const base::string16& username) {
-  auto it =
-      std::find_if(stats.begin(), stats.end(),
-                   [&username](const scoped_ptr<InteractionsStats>& element) {
-                     return username == element->username_value;
-                   });
+  auto it = std::find_if(
+      stats.begin(), stats.end(),
+      [&username](const std::unique_ptr<InteractionsStats>& element) {
+        return username == element->username_value;
+      });
   return it == stats.end() ? nullptr : it->get();
 }
 
@@ -105,18 +106,18 @@
   return s.Run();
 }
 
-std::vector<scoped_ptr<InteractionsStats>> StatisticsTable::GetRows(
+std::vector<std::unique_ptr<InteractionsStats>> StatisticsTable::GetRows(
     const GURL& domain) {
   if (!domain.is_valid())
-    return std::vector<scoped_ptr<InteractionsStats>>();
+    return std::vector<std::unique_ptr<InteractionsStats>>();
   const char query[] =
       "SELECT origin_domain, username_value, "
       "dismissal_count, update_time FROM stats WHERE origin_domain == ?";
   sql::Statement s(db_->GetCachedStatement(SQL_FROM_HERE, query));
   s.BindString(0, domain.spec());
-  std::vector<scoped_ptr<InteractionsStats>> result;
+  std::vector<std::unique_ptr<InteractionsStats>> result;
   while (s.Step()) {
-    result.push_back(make_scoped_ptr(new InteractionsStats));
+    result.push_back(base::WrapUnique(new InteractionsStats));
     result.back()->origin_domain = GURL(s.ColumnString(COLUMN_ORIGIN_DOMAIN));
     result.back()->username_value = s.ColumnString16(COLUMN_USERNAME);
     result.back()->dismissal_count = s.ColumnInt(COLUMN_DISMISSALS);
diff --git a/components/password_manager/core/browser/statistics_table.h b/components/password_manager/core/browser/statistics_table.h
index 22dd11e..d53c849 100644
--- a/components/password_manager/core/browser/statistics_table.h
+++ b/components/password_manager/core/browser/statistics_table.h
@@ -5,10 +5,10 @@
 #ifndef COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_STATISTICS_TABLE_H_
 #define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_STATISTICS_TABLE_H_
 
+#include <memory>
 #include <vector>
 
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/scoped_vector.h"
 #include "base/time/time.h"
 #include "url/gurl.h"
@@ -40,7 +40,7 @@
 
 // Returns an element from |stats| with |username| or nullptr if not found.
 InteractionsStats* FindStatsByUsername(
-    const std::vector<scoped_ptr<InteractionsStats>>& stats,
+    const std::vector<std::unique_ptr<InteractionsStats>>& stats,
     const base::string16& username);
 
 // Represents the 'stats' table in the Login Database.
@@ -69,7 +69,7 @@
   bool RemoveRow(const GURL& domain);
 
   // Returns the statistics for |domain| if it exists.
-  std::vector<scoped_ptr<InteractionsStats>> GetRows(const GURL& domain);
+  std::vector<std::unique_ptr<InteractionsStats>> GetRows(const GURL& domain);
 
   // Removes the statistics between the dates. Returns true if the SQL completed
   // successfully.
diff --git a/components/password_manager/core/browser/statistics_table_unittest.cc b/components/password_manager/core/browser/statistics_table_unittest.cc
index 4736cea..8e348a05e 100644
--- a/components/password_manager/core/browser/statistics_table_unittest.cc
+++ b/components/password_manager/core/browser/statistics_table_unittest.cc
@@ -50,8 +50,8 @@
 
  private:
   base::ScopedTempDir temp_dir_;
-  scoped_ptr<sql::Connection> connection_;
-  scoped_ptr<StatisticsTable> db_;
+  std::unique_ptr<sql::Connection> connection_;
+  std::unique_ptr<StatisticsTable> db_;
   InteractionsStats test_data_;
 };
 
diff --git a/components/password_manager/core/browser/stub_password_manager_client.cc b/components/password_manager/core/browser/stub_password_manager_client.cc
index 51a0612..f9f1466 100644
--- a/components/password_manager/core/browser/stub_password_manager_client.cc
+++ b/components/password_manager/core/browser/stub_password_manager_client.cc
@@ -4,7 +4,8 @@
 
 #include "components/password_manager/core/browser/stub_password_manager_client.h"
 
-#include "base/memory/scoped_ptr.h"
+#include <memory>
+
 #include "base/memory/scoped_vector.h"
 #include "components/password_manager/core/browser/credentials_filter.h"
 #include "components/password_manager/core/browser/password_form_manager.h"
@@ -27,7 +28,7 @@
 StubPasswordManagerClient::~StubPasswordManagerClient() {}
 
 bool StubPasswordManagerClient::PromptUserToSaveOrUpdatePassword(
-    scoped_ptr<PasswordFormManager> form_to_save,
+    std::unique_ptr<PasswordFormManager> form_to_save,
     password_manager::CredentialSourceType type,
     bool update_password) {
   return false;
@@ -46,14 +47,13 @@
     const GURL& origin) {}
 
 void StubPasswordManagerClient::NotifyUserCouldBeAutoSignedIn(
-    scoped_ptr<autofill::PasswordForm> form) {}
+    std::unique_ptr<autofill::PasswordForm> form) {}
 
 void StubPasswordManagerClient::NotifySuccessfulLoginWithExistingPassword(
     const autofill::PasswordForm& form) {}
 
 void StubPasswordManagerClient::AutomaticPasswordSave(
-    scoped_ptr<PasswordFormManager> saved_manager) {
-}
+    std::unique_ptr<PasswordFormManager> saved_manager) {}
 
 PrefService* StubPasswordManagerClient::GetPrefs() {
   return nullptr;
diff --git a/components/password_manager/core/browser/stub_password_manager_client.h b/components/password_manager/core/browser/stub_password_manager_client.h
index 25f72e2..0b790fa 100644
--- a/components/password_manager/core/browser/stub_password_manager_client.h
+++ b/components/password_manager/core/browser/stub_password_manager_client.h
@@ -21,7 +21,7 @@
 
   // PasswordManagerClient:
   bool PromptUserToSaveOrUpdatePassword(
-      scoped_ptr<PasswordFormManager> form_to_save,
+      std::unique_ptr<PasswordFormManager> form_to_save,
       password_manager::CredentialSourceType type,
       bool update_password) override;
   bool PromptUserToChooseCredentials(
@@ -32,11 +32,11 @@
   void NotifyUserAutoSignin(ScopedVector<autofill::PasswordForm> local_forms,
                             const GURL& origin) override;
   void NotifyUserCouldBeAutoSignedIn(
-      scoped_ptr<autofill::PasswordForm>) override;
+      std::unique_ptr<autofill::PasswordForm>) override;
   void NotifySuccessfulLoginWithExistingPassword(
       const autofill::PasswordForm& form) override;
   void AutomaticPasswordSave(
-      scoped_ptr<PasswordFormManager> saved_manager) override;
+      std::unique_ptr<PasswordFormManager> saved_manager) override;
   PrefService* GetPrefs() override;
   PasswordStore* GetPasswordStore() const override;
   const GURL& GetLastCommittedEntryURL() const override;
diff --git a/components/password_manager/core/browser/test_password_store.cc b/components/password_manager/core/browser/test_password_store.cc
index f65ed1c..afcd8c2 100644
--- a/components/password_manager/core/browser/test_password_store.cc
+++ b/components/password_manager/core/browser/test_password_store.cc
@@ -152,9 +152,9 @@
 void TestPasswordStore::RemoveSiteStatsImpl(const GURL& origin_domain) {
 }
 
-std::vector<scoped_ptr<InteractionsStats>> TestPasswordStore::GetSiteStatsImpl(
-    const GURL& origin_domain) {
-  return std::vector<scoped_ptr<InteractionsStats>>();
+std::vector<std::unique_ptr<InteractionsStats>>
+TestPasswordStore::GetSiteStatsImpl(const GURL& origin_domain) {
+  return std::vector<std::unique_ptr<InteractionsStats>>();
 }
 
 }  // namespace password_manager
diff --git a/components/password_manager/core/browser/test_password_store.h b/components/password_manager/core/browser/test_password_store.h
index 207062f1..1e76e305 100644
--- a/components/password_manager/core/browser/test_password_store.h
+++ b/components/password_manager/core/browser/test_password_store.h
@@ -69,7 +69,7 @@
       ScopedVector<autofill::PasswordForm>* forms) override;
   void AddSiteStatsImpl(const InteractionsStats& stats) override;
   void RemoveSiteStatsImpl(const GURL& origin_domain) override;
-  std::vector<scoped_ptr<InteractionsStats>> GetSiteStatsImpl(
+  std::vector<std::unique_ptr<InteractionsStats>> GetSiteStatsImpl(
       const GURL& origin_domain) override;
 
  private:
diff --git a/components/password_manager/core/browser/webdata/password_web_data_service_win.cc b/components/password_manager/core/browser/webdata/password_web_data_service_win.cc
index 80b395d..b063667 100644
--- a/components/password_manager/core/browser/webdata/password_web_data_service_win.cc
+++ b/components/password_manager/core/browser/webdata/password_web_data_service_win.cc
@@ -51,12 +51,12 @@
       WebDatabase::COMMIT_NEEDED : WebDatabase::COMMIT_NOT_NEEDED;
 }
 
-scoped_ptr<WDTypedResult> PasswordWebDataService::GetIE7LoginImpl(
+std::unique_ptr<WDTypedResult> PasswordWebDataService::GetIE7LoginImpl(
     const IE7PasswordInfo& info,
     WebDatabase* db) {
   IE7PasswordInfo result;
   LoginsTable::FromWebDatabase(db)->GetIE7Login(info, &result);
-  return scoped_ptr<WDTypedResult>(
+  return std::unique_ptr<WDTypedResult>(
       new WDResult<IE7PasswordInfo>(PASSWORD_IE7_RESULT, result));
 }
 
diff --git a/components/password_manager/core/browser/webdata/password_web_data_service_win.h b/components/password_manager/core/browser/webdata/password_web_data_service_win.h
index 10c69bd..2957b6d 100644
--- a/components/password_manager/core/browser/webdata/password_web_data_service_win.h
+++ b/components/password_manager/core/browser/webdata/password_web_data_service_win.h
@@ -67,8 +67,8 @@
                                      WebDatabase* db);
   WebDatabase::State RemoveIE7LoginImpl(const IE7PasswordInfo& info,
                                         WebDatabase* db);
-  scoped_ptr<WDTypedResult> GetIE7LoginImpl(const IE7PasswordInfo& info,
-                                            WebDatabase* db);
+  std::unique_ptr<WDTypedResult> GetIE7LoginImpl(const IE7PasswordInfo& info,
+                                                 WebDatabase* db);
 
   DISALLOW_COPY_AND_ASSIGN(PasswordWebDataService);
 };
diff --git a/components/password_manager/core/common/credential_manager_types.cc b/components/password_manager/core/common/credential_manager_types.cc
index 7c00345d..8f364867e 100644
--- a/components/password_manager/core/common/credential_manager_types.cc
+++ b/components/password_manager/core/common/credential_manager_types.cc
@@ -43,10 +43,10 @@
 CredentialInfo::~CredentialInfo() {
 }
 
-scoped_ptr<autofill::PasswordForm> CreatePasswordFormFromCredentialInfo(
+std::unique_ptr<autofill::PasswordForm> CreatePasswordFormFromCredentialInfo(
     const CredentialInfo& info,
     const GURL& origin) {
-  scoped_ptr<autofill::PasswordForm> form;
+  std::unique_ptr<autofill::PasswordForm> form;
   if (info.type == CredentialType::CREDENTIAL_TYPE_EMPTY)
     return form;
 
diff --git a/components/password_manager/core/common/credential_manager_types_unittest.cc b/components/password_manager/core/common/credential_manager_types_unittest.cc
index 75fefb2..46deeb5 100644
--- a/components/password_manager/core/common/credential_manager_types_unittest.cc
+++ b/components/password_manager/core/common/credential_manager_types_unittest.cc
@@ -28,7 +28,7 @@
 
 TEST_F(CredentialManagerTypesTest, CreatePasswordFormEmpty) {
   CredentialInfo info;
-  scoped_ptr<autofill::PasswordForm> form;
+  std::unique_ptr<autofill::PasswordForm> form;
 
   // Empty CredentialInfo -> nullptr.
   form = CreatePasswordFormFromCredentialInfo(info, origin_);
@@ -37,7 +37,7 @@
 
 TEST_F(CredentialManagerTypesTest, CreatePasswordFormFederation) {
   CredentialInfo info;
-  scoped_ptr<autofill::PasswordForm> form;
+  std::unique_ptr<autofill::PasswordForm> form;
 
   info.id = base::ASCIIToUTF16("id");
   info.name = base::ASCIIToUTF16("name");
@@ -63,7 +63,7 @@
 
 TEST_F(CredentialManagerTypesTest, CreatePasswordFormLocal) {
   CredentialInfo info;
-  scoped_ptr<autofill::PasswordForm> form;
+  std::unique_ptr<autofill::PasswordForm> form;
 
   info.id = base::ASCIIToUTF16("id");
   info.name = base::ASCIIToUTF16("name");
diff --git a/components/password_manager/sync/browser/password_manager_setting_migrator_service_unittest.cc b/components/password_manager/sync/browser/password_manager_setting_migrator_service_unittest.cc
index 889506b..7079598 100644
--- a/components/password_manager/sync/browser/password_manager_setting_migrator_service_unittest.cc
+++ b/components/password_manager/sync/browser/password_manager_setting_migrator_service_unittest.cc
@@ -116,10 +116,11 @@
     type = syncer::PRIORITY_PREFERENCES;
   ASSERT_NE(syncer::UNSPECIFIED, type) << "Wrong preference name: " << name;
   syncer::SyncableService* sync = prefs->GetSyncableService(type);
-  sync->MergeDataAndStartSyncing(
-      type, sync_data_list, scoped_ptr<syncer::SyncChangeProcessor>(
-                                new syncer::FakeSyncChangeProcessor),
-      scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock));
+  sync->MergeDataAndStartSyncing(type, sync_data_list,
+                                 std::unique_ptr<syncer::SyncChangeProcessor>(
+                                     new syncer::FakeSyncChangeProcessor),
+                                 std::unique_ptr<syncer::SyncErrorFactory>(
+                                     new syncer::SyncErrorFactoryMock));
 }
 
 class SyncServiceMock : public sync_driver::FakeSyncService {
@@ -188,7 +189,7 @@
         new user_prefs::PrefRegistrySyncable);
     password_manager::PasswordManager::RegisterProfilePrefs(
         pref_registry.get());
-    scoped_ptr<syncable_prefs::PrefServiceSyncable> pref_service_syncable =
+    std::unique_ptr<syncable_prefs::PrefServiceSyncable> pref_service_syncable =
         factory.CreateSyncable(pref_registry.get());
     migration_service_.reset(
         new PasswordManagerSettingMigratorService(pref_service_syncable.get()));
@@ -217,11 +218,11 @@
   }
 
  private:
-  scoped_ptr<base::FieldTrialList> field_trial_list_;
+  std::unique_ptr<base::FieldTrialList> field_trial_list_;
   TestPrefModelAssociatorClient client_;
   SyncServiceMock sync_service_;
-  scoped_ptr<syncable_prefs::PrefServiceSyncable> pref_service_;
-  scoped_ptr<PasswordManagerSettingMigratorService> migration_service_;
+  std::unique_ptr<syncable_prefs::PrefServiceSyncable> pref_service_;
+  std::unique_ptr<PasswordManagerSettingMigratorService> migration_service_;
 
   DISALLOW_COPY_AND_ASSIGN(PasswordManagerSettingMigratorServiceTest);
 };
diff --git a/components/password_manager/sync/browser/sync_credentials_filter_unittest.cc b/components/password_manager/sync/browser/sync_credentials_filter_unittest.cc
index a6dbcba..843fde9 100644
--- a/components/password_manager/sync/browser/sync_credentials_filter_unittest.cc
+++ b/components/password_manager/sync/browser/sync_credentials_filter_unittest.cc
@@ -138,7 +138,7 @@
 TEST_F(CredentialsFilterTest, FilterResults_DisallowSyncOnReauth) {
   // Only 'protect-sync-credential-on-reauth' feature is kept enabled, fill the
   // sync credential everywhere but on reauth.
-  scoped_ptr<base::FeatureList> feature_list(new base::FeatureList);
+  std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList);
   std::vector<const base::Feature*> enabled_features;
   std::vector<const base::Feature*> disabled_features;
   disabled_features.push_back(&features::kProtectSyncCredential);
@@ -184,7 +184,7 @@
 TEST_F(CredentialsFilterTest, FilterResults_DisallowSync) {
   // Both features are kept enabled, should cause sync credential to be
   // filtered.
-  scoped_ptr<base::FeatureList> feature_list(new base::FeatureList);
+  std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList);
   std::vector<const base::Feature*> enabled_features;
   std::vector<const base::Feature*> disabled_features;
   enabled_features.push_back(&features::kProtectSyncCredential);
@@ -262,7 +262,7 @@
 TEST_F(CredentialsFilterTest, ShouldFilterOneForm) {
   // Both features are kept enabled, should cause sync credential to be
   // filtered.
-  scoped_ptr<base::FeatureList> feature_list(new base::FeatureList);
+  std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList);
   std::vector<const base::Feature*> enabled_features;
   std::vector<const base::Feature*> disabled_features;
   enabled_features.push_back(&features::kProtectSyncCredential);
diff --git a/components/policy/resources/policy_templates.json b/components/policy/resources/policy_templates.json
index 53b111b7..133b4df 100644
--- a/components/policy/resources/policy_templates.json
+++ b/components/policy/resources/policy_templates.json
@@ -137,7 +137,7 @@
 #   persistent IDs for all fields (but not for groups!) are needed. These are
 #   specified by the 'id' keys of each policy. NEVER CHANGE EXISTING IDs,
 #   because doing so would break the deployed wire format!
-#   For your editing convenience: highest ID currently used: 324
+#   For your editing convenience: highest ID currently used: 325
 #
 # Placeholders:
 #   The following placeholder strings are automatically substituted:
@@ -8377,6 +8377,32 @@
       'tags': ['system-security'],
       'id': 324,
     },
+    {
+      'name': 'DeviceQuirksDownloadEnabled',
+      'type': 'main',
+      'schema': { 'type': 'boolean' },
+      'supported_on': ['chrome_os:51-'],
+      'device_only': True,
+      'features': {
+        'dynamic_refresh': True,
+      },
+      'example_value': True,
+      'id': 325,
+      'caption': '''Enable queries to Quirks Server for hardware profiles''',
+      'tags': [],
+      'desc':
+      '''The Quirks Server provides hardware-specific configuration files, like
+      ICC display profiles to adjust monitor calibration.
+
+      When this policy is set to false, the device will not attempt to
+      contact the Quirks Server to download configuration files.
+
+      If this policy is true or not configured then
+      <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> will
+      automatically contact the Quirks Server and download configuration files,
+      if available, and store them on the device.  Such files might, for
+      example, be used to improve display quality of attached monitors.''',
+    },
   ],
   'messages': {
     # Messages that are not associated to any policies.
diff --git a/components/quirks/quirks_manager.cc b/components/quirks/quirks_manager.cc
index d4c69337..4875ee4 100644
--- a/components/quirks/quirks_manager.cc
+++ b/components/quirks/quirks_manager.cc
@@ -43,7 +43,8 @@
 }
 
 base::FilePath CheckForIccFile(base::FilePath built_in_path,
-                               base::FilePath download_path) {
+                               base::FilePath download_path,
+                               bool quirks_enabled) {
   // First, look for icc file in old read-only location.  If there, we don't use
   // the Quirks server.
   // TODO(glevin): Awaiting final decision on how to handle old read-only files.
@@ -51,8 +52,7 @@
     return built_in_path;
 
   // If experimental Quirks flag isn't set, no other icc file is available.
-  if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
-          switches::kEnableQuirksClient)) {
+  if (!quirks_enabled) {
     VLOG(1) << "Quirks Client disabled, no built-in icc file available.";
     return base::FilePath();
   }
@@ -126,6 +126,11 @@
     return;
 
   waiting_for_login_ = false;
+  if (!QuirksEnabled()) {
+    VLOG(1) << "Quirks Client disabled by device policy.";
+    return;
+  }
+
   for (const scoped_ptr<QuirksClient>& client : clients_)
     client->StartDownload();
 }
@@ -140,7 +145,8 @@
       blocking_pool_.get(), FROM_HERE,
       base::Bind(&CheckForIccFile,
                  delegate_->GetBuiltInDisplayProfileDirectory().Append(name),
-                 delegate_->GetDownloadDisplayProfileDirectory().Append(name)),
+                 delegate_->GetDownloadDisplayProfileDirectory().Append(name),
+                 QuirksEnabled()),
       base::Bind(&QuirksManager::OnIccFilePathRequestCompleted,
                  weak_ptr_factory_.GetWeakPtr(), product_id,
                  on_request_finished));
@@ -173,9 +179,7 @@
   DCHECK(thread_checker_.CalledOnValidThread());
 
   // If we found a file or client is disabled, inform requester.
-  if (!path.empty() ||
-      !base::CommandLine::ForCurrentProcess()->HasSwitch(
-          switches::kEnableQuirksClient)) {
+  if (!path.empty() || !QuirksEnabled()) {
     on_request_finished.Run(path, false);
     // TODO(glevin): If Quirks files are ever modified on the server, we'll need
     // to modify this logic to check for updates. See crbug.com/595024.
@@ -247,6 +251,12 @@
     VLOG(2) << "Quirks Client created; waiting for login to begin download.";
 }
 
+bool QuirksManager::QuirksEnabled() {
+  return base::CommandLine::ForCurrentProcess()->HasSwitch(
+             switches::kEnableQuirksClient) &&
+         delegate_->DevicePolicyEnabled();
+}
+
 void QuirksManager::SetLastServerCheck(int64_t product_id,
                                        const base::Time& last_check) {
   DCHECK(thread_checker_.CalledOnValidThread());
diff --git a/components/quirks/quirks_manager.h b/components/quirks/quirks_manager.h
index 1edf7b82..ea5bbce0 100644
--- a/components/quirks/quirks_manager.h
+++ b/components/quirks/quirks_manager.h
@@ -78,6 +78,9 @@
     // This directory must already exist.
     virtual base::FilePath GetDownloadDisplayProfileDirectory() const = 0;
 
+    // Whether downloads are allowed by enterprise device policy.
+    virtual bool DevicePolicyEnabled() const = 0;
+
     // Gets days since first login, returned via callback.
     virtual void GetDaysSinceOobe(DaysSinceOobeCallback callback) const = 0;
 
@@ -147,6 +150,9 @@
   void CreateClient(int64_t product_id,
                     const RequestFinishedCallback& on_request_finished);
 
+  // Whether downloads allowed by cmd line flag and device policy.
+  bool QuirksEnabled();
+
   // Records time of most recent server check.
   void SetLastServerCheck(int64_t product_id, const base::Time& last_check);
 
diff --git a/components/suggestions/suggestions_service_unittest.cc b/components/suggestions/suggestions_service_unittest.cc
index 01a90938..df4b9ed 100644
--- a/components/suggestions/suggestions_service_unittest.cc
+++ b/components/suggestions/suggestions_service_unittest.cc
@@ -692,10 +692,10 @@
   EXPECT_FALSE(SuggestionsService::GetBlacklistedUrl(*fetcher, &retrieved_url));
 
   // An actual blacklist request.
-  string blacklisted_url = "http://blacklisted.com/a?b=c&d=e";
-  string encoded_blacklisted_url =
+  std::string blacklisted_url = "http://blacklisted.com/a?b=c&d=e";
+  std::string encoded_blacklisted_url =
       "http%3A%2F%2Fblacklisted.com%2Fa%3Fb%3Dc%26d%3De";
-  string blacklist_request_prefix(
+  std::string blacklist_request_prefix(
       SuggestionsService::BuildSuggestionsBlacklistURLPrefix());
   request_url.reset(
       new GURL(blacklist_request_prefix + encoded_blacklisted_url));
diff --git a/components/test_runner/BUILD.gn b/components/test_runner/BUILD.gn
index 6408e9c..a764265a 100644
--- a/components/test_runner/BUILD.gn
+++ b/components/test_runner/BUILD.gn
@@ -56,6 +56,8 @@
     "mock_webrtc_dtmf_sender_handler.h",
     "mock_webrtc_peer_connection_handler.cc",
     "mock_webrtc_peer_connection_handler.h",
+    "pixel_dump.cc",
+    "pixel_dump.h",
     "spell_check_client.cc",
     "spell_check_client.h",
     "test_common.cc",
diff --git a/components/test_runner/layout_dump.h b/components/test_runner/layout_dump.h
index f80c9c6f..d40b19a 100644
--- a/components/test_runner/layout_dump.h
+++ b/components/test_runner/layout_dump.h
@@ -16,6 +16,8 @@
 
 namespace test_runner {
 
+// Dumps textual representation of |frame| contents.  Exact dump mode depends
+// on |flags| (i.e. dump_as_text VS dump_as_markup and/or is_printing).
 TEST_RUNNER_EXPORT std::string DumpLayout(blink::WebLocalFrame* frame,
                                           const LayoutTestRuntimeFlags& flags);
 
diff --git a/components/test_runner/layout_test_runtime_flags.cc b/components/test_runner/layout_test_runtime_flags.cc
index 96da30e21..7b58208 100644
--- a/components/test_runner/layout_test_runtime_flags.cc
+++ b/components/test_runner/layout_test_runtime_flags.cc
@@ -28,6 +28,11 @@
   set_policy_delegate_should_notify_done(false);
   set_wait_until_done(false);
 
+  set_dump_selection_rect(false);
+  set_dump_drag_image(false);
+
+  set_accept_languages("");
+
   // No need to report the initial state - only the future delta is important.
   tracked_dictionary().ResetChangeTracking();
 }
diff --git a/components/test_runner/layout_test_runtime_flags.h b/components/test_runner/layout_test_runtime_flags.h
index ba116df..2b189e7 100644
--- a/components/test_runner/layout_test_runtime_flags.h
+++ b/components/test_runner/layout_test_runtime_flags.h
@@ -38,6 +38,17 @@
   }                                                                 \
   void set_##name(bool new_value) { dict_.SetBoolean(#name, new_value); }
 
+#define DEFINE_STRING_LAYOUT_TEST_RUNTIME_FLAG(name)               \
+  std::string name() const {                                       \
+    std::string result;                                            \
+    bool found = dict_.current_values().GetString(#name, &result); \
+    DCHECK(found);                                                 \
+    return result;                                                 \
+  }                                                                \
+  void set_##name(const std::string& new_value) {                  \
+    dict_.SetString(#name, new_value);                             \
+  }
+
   // If true, the test_shell will generate pixel results in DumpAsText mode.
   DEFINE_BOOL_LAYOUT_TEST_RUNTIME_FLAG(generate_pixel_results)
 
@@ -80,7 +91,18 @@
   // If true, the policy delegate will signal layout test completion.
   DEFINE_BOOL_LAYOUT_TEST_RUNTIME_FLAG(policy_delegate_should_notify_done)
 
+  // If true, the test_shell will draw the bounds of the current selection rect
+  // taking possible transforms of the selection rect into account.
+  DEFINE_BOOL_LAYOUT_TEST_RUNTIME_FLAG(dump_selection_rect)
+
+  // If true, the test_shell will dump the drag image as pixel results.
+  DEFINE_BOOL_LAYOUT_TEST_RUNTIME_FLAG(dump_drag_image)
+
+  // Contents of Accept-Language HTTP header requested by the test.
+  DEFINE_STRING_LAYOUT_TEST_RUNTIME_FLAG(accept_languages)
+
 #undef DEFINE_BOOL_LAYOUT_TEST_RUNTIME_FLAG
+#undef DEFINE_STRING_LAYOUT_TEST_RUNTIME_FLAG
 
   // Reports whether recursing over child frames is necessary.
   bool dump_child_frames() const {
diff --git a/components/test_runner/pixel_dump.cc b/components/test_runner/pixel_dump.cc
new file mode 100644
index 0000000..1b49c178
--- /dev/null
+++ b/components/test_runner/pixel_dump.cc
@@ -0,0 +1,203 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/test_runner/pixel_dump.h"
+
+#include "base/bind.h"
+#include "base/bind_helpers.h"
+#include "base/callback.h"
+#include "base/logging.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/thread_task_runner_handle.h"
+#include "base/trace_event/trace_event.h"
+#include "components/test_runner/layout_test_runtime_flags.h"
+// FIXME: Including platform_canvas.h here is a layering violation.
+#include "skia/ext/platform_canvas.h"
+#include "third_party/WebKit/public/platform/Platform.h"
+#include "third_party/WebKit/public/platform/WebClipboard.h"
+#include "third_party/WebKit/public/platform/WebCompositeAndReadbackAsyncCallback.h"
+#include "third_party/WebKit/public/platform/WebData.h"
+#include "third_party/WebKit/public/platform/WebImage.h"
+#include "third_party/WebKit/public/platform/WebPoint.h"
+#include "third_party/WebKit/public/web/WebFrame.h"
+#include "third_party/WebKit/public/web/WebPagePopup.h"
+#include "third_party/WebKit/public/web/WebPrintParams.h"
+#include "third_party/WebKit/public/web/WebView.h"
+#include "ui/gfx/geometry/point.h"
+
+namespace test_runner {
+
+namespace {
+
+struct PixelsDumpRequest {
+  PixelsDumpRequest(blink::WebView* web_view,
+                    const LayoutTestRuntimeFlags& layout_test_runtime_flags,
+                    const base::Callback<void(const SkBitmap&)>& callback)
+      : web_view(web_view),
+        layout_test_runtime_flags(layout_test_runtime_flags),
+        callback(callback) {}
+
+  blink::WebView* web_view;
+  const LayoutTestRuntimeFlags& layout_test_runtime_flags;
+  base::Callback<void(const SkBitmap&)> callback;
+};
+
+class CaptureCallback : public blink::WebCompositeAndReadbackAsyncCallback {
+ public:
+  CaptureCallback(const base::Callback<void(const SkBitmap&)>& callback);
+  virtual ~CaptureCallback();
+
+  void set_wait_for_popup(bool wait) { wait_for_popup_ = wait; }
+  void set_popup_position(const gfx::Point& position) {
+    popup_position_ = position;
+  }
+
+  // WebCompositeAndReadbackAsyncCallback implementation.
+  void didCompositeAndReadback(const SkBitmap& bitmap) override;
+
+ private:
+  base::Callback<void(const SkBitmap&)> callback_;
+  SkBitmap main_bitmap_;
+  bool wait_for_popup_;
+  gfx::Point popup_position_;
+};
+
+void DrawSelectionRect(const PixelsDumpRequest& dump_request,
+                       SkCanvas* canvas) {
+  // See if we need to draw the selection bounds rect. Selection bounds
+  // rect is the rect enclosing the (possibly transformed) selection.
+  // The rect should be drawn after everything is laid out and painted.
+  if (!dump_request.layout_test_runtime_flags.dump_selection_rect())
+    return;
+  // If there is a selection rect - draw a red 1px border enclosing rect
+  blink::WebRect wr = dump_request.web_view->mainFrame()->selectionBoundsRect();
+  if (wr.isEmpty())
+    return;
+  // Render a red rectangle bounding selection rect
+  SkPaint paint;
+  paint.setColor(0xFFFF0000);  // Fully opaque red
+  paint.setStyle(SkPaint::kStroke_Style);
+  paint.setFlags(SkPaint::kAntiAlias_Flag);
+  paint.setStrokeWidth(1.0f);
+  SkIRect rect;  // Bounding rect
+  rect.set(wr.x, wr.y, wr.x + wr.width, wr.y + wr.height);
+  canvas->drawIRect(rect, paint);
+}
+
+void CapturePixelsForPrinting(scoped_ptr<PixelsDumpRequest> dump_request) {
+  dump_request->web_view->updateAllLifecyclePhases();
+
+  blink::WebSize page_size_in_pixels = dump_request->web_view->size();
+  blink::WebFrame* web_frame = dump_request->web_view->mainFrame();
+
+  int page_count = web_frame->printBegin(page_size_in_pixels);
+  int totalHeight = page_count * (page_size_in_pixels.height + 1) - 1;
+
+  bool is_opaque = false;
+  skia::RefPtr<SkCanvas> canvas(skia::AdoptRef(skia::TryCreateBitmapCanvas(
+      page_size_in_pixels.width, totalHeight, is_opaque)));
+  if (!canvas) {
+    dump_request->callback.Run(SkBitmap());
+    return;
+  }
+  web_frame->printPagesWithBoundaries(canvas.get(), page_size_in_pixels);
+  web_frame->printEnd();
+
+  DrawSelectionRect(*dump_request, canvas.get());
+  const SkBitmap bitmap = skia::ReadPixels(canvas.get());
+  dump_request->callback.Run(bitmap);
+}
+
+CaptureCallback::CaptureCallback(
+    const base::Callback<void(const SkBitmap&)>& callback)
+    : callback_(callback), wait_for_popup_(false) {}
+
+CaptureCallback::~CaptureCallback() {}
+
+void CaptureCallback::didCompositeAndReadback(const SkBitmap& bitmap) {
+  TRACE_EVENT2("shell", "CaptureCallback::didCompositeAndReadback", "x",
+               bitmap.info().width(), "y", bitmap.info().height());
+  if (!wait_for_popup_) {
+    callback_.Run(bitmap);
+    delete this;
+    return;
+  }
+  if (main_bitmap_.isNull()) {
+    bitmap.deepCopyTo(&main_bitmap_);
+    return;
+  }
+  SkCanvas canvas(main_bitmap_);
+  canvas.drawBitmap(bitmap, popup_position_.x(), popup_position_.y());
+  callback_.Run(main_bitmap_);
+  delete this;
+}
+
+void DidCapturePixelsAsync(scoped_ptr<PixelsDumpRequest> dump_request,
+                           const SkBitmap& bitmap) {
+  SkCanvas canvas(bitmap);
+  DrawSelectionRect(*dump_request, &canvas);
+  if (!dump_request->callback.is_null())
+    dump_request->callback.Run(bitmap);
+}
+
+}  // namespace
+
+void DumpPixelsAsync(blink::WebView* web_view,
+                     const LayoutTestRuntimeFlags& layout_test_runtime_flags,
+                     float device_scale_factor_for_test,
+                     const base::Callback<void(const SkBitmap&)>& callback) {
+  TRACE_EVENT0("shell", "WebTestProxyBase::CapturePixelsAsync");
+  DCHECK(!callback.is_null());
+  DCHECK(!layout_test_runtime_flags.dump_drag_image());
+
+  scoped_ptr<PixelsDumpRequest> pixels_request(
+      new PixelsDumpRequest(web_view, layout_test_runtime_flags, callback));
+
+  if (layout_test_runtime_flags.is_printing()) {
+    base::ThreadTaskRunnerHandle::Get()->PostTask(
+        FROM_HERE, base::Bind(&CapturePixelsForPrinting,
+                              base::Passed(std::move(pixels_request))));
+    return;
+  }
+
+  CaptureCallback* capture_callback = new CaptureCallback(base::Bind(
+      &DidCapturePixelsAsync, base::Passed(std::move(pixels_request))));
+  web_view->compositeAndReadbackAsync(capture_callback);
+  if (blink::WebPagePopup* popup = web_view->pagePopup()) {
+    capture_callback->set_wait_for_popup(true);
+    blink::WebPoint position = popup->positionRelativeToOwner();
+    position.x *= device_scale_factor_for_test;
+    position.y *= device_scale_factor_for_test;
+    capture_callback->set_popup_position(position);
+    popup->compositeAndReadbackAsync(capture_callback);
+  }
+}
+
+void CopyImageAtAndCapturePixels(
+    blink::WebView* web_view,
+    int x,
+    int y,
+    const base::Callback<void(const SkBitmap&)>& callback) {
+  DCHECK(!callback.is_null());
+  uint64_t sequence_number =
+      blink::Platform::current()->clipboard()->sequenceNumber(
+          blink::WebClipboard::Buffer());
+  web_view->copyImageAt(blink::WebPoint(x, y));
+  if (sequence_number ==
+      blink::Platform::current()->clipboard()->sequenceNumber(
+          blink::WebClipboard::Buffer())) {
+    SkBitmap emptyBitmap;
+    callback.Run(emptyBitmap);
+    return;
+  }
+
+  blink::WebData data = blink::Platform::current()->clipboard()->readImage(
+      blink::WebClipboard::Buffer());
+  blink::WebImage image = blink::WebImage::fromData(data, blink::WebSize());
+  const SkBitmap& bitmap = image.getSkBitmap();
+  SkAutoLockPixels autoLock(bitmap);
+  callback.Run(bitmap);
+}
+
+}  // namespace test_runner
diff --git a/components/test_runner/pixel_dump.h b/components/test_runner/pixel_dump.h
new file mode 100644
index 0000000..8330925
--- /dev/null
+++ b/components/test_runner/pixel_dump.h
@@ -0,0 +1,40 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_TEST_RUNNER_PIXEL_DUMP_H_
+#define COMPONENTS_TEST_RUNNER_PIXEL_DUMP_H_
+
+#include "base/callback_forward.h"
+#include "components/test_runner/test_runner_export.h"
+
+class SkBitmap;
+
+namespace blink {
+class WebView;
+}  // namespace blink
+
+namespace test_runner {
+
+class LayoutTestRuntimeFlags;
+
+// Dumps image snapshot of |web_view|.  Exact dump mode depends on |flags| (i.e.
+// dump_selection_rect and/or is_printing).  Caller needs to ensure that
+// |layout_test_runtime_flags| stays alive until |callback| gets called.
+TEST_RUNNER_EXPORT void DumpPixelsAsync(
+    blink::WebView* web_view,
+    const LayoutTestRuntimeFlags& layout_test_runtime_flags,
+    float device_scale_factor_for_test,
+    const base::Callback<void(const SkBitmap&)>& callback);
+
+// Copy to clipboard the image present at |x|, |y| coordinates in |web_view|
+// and pass the captured image to |callback|.
+void CopyImageAtAndCapturePixels(
+    blink::WebView* web_view,
+    int x,
+    int y,
+    const base::Callback<void(const SkBitmap&)>& callback);
+
+}  // namespace test_runner
+
+#endif  // COMPONENTS_TEST_RUNNER_PIXEL_DUMP_H_
diff --git a/components/test_runner/test_runner.cc b/components/test_runner/test_runner.cc
index 9780b1e..9d306b1 100644
--- a/components/test_runner/test_runner.cc
+++ b/components/test_runner/test_runner.cc
@@ -20,6 +20,7 @@
 #include "components/test_runner/mock_screen_orientation_client.h"
 #include "components/test_runner/mock_web_speech_recognizer.h"
 #include "components/test_runner/mock_web_user_media_client.h"
+#include "components/test_runner/pixel_dump.h"
 #include "components/test_runner/test_interfaces.h"
 #include "components/test_runner/test_preferences.h"
 #include "components/test_runner/web_content_settings.h"
@@ -1709,6 +1710,7 @@
   top_loading_frame_ = nullptr;
   layout_test_runtime_flags_.Reset();
   mock_screen_orientation_client_->ResetData();
+  drag_image_.reset();
   wait_until_external_url_load_ = false;
 
   WebSecurityPolicy::resetOriginAccessWhitelists();
@@ -1747,8 +1749,6 @@
   dump_window_status_changes_ = false;
   dump_spell_check_callbacks_ = false;
   dump_back_forward_list_ = false;
-  dump_selection_rect_ = false;
-  dump_drag_image_ = false;
   dump_navigation_policy_ = false;
   test_repaint_ = false;
   sweep_horizontally_ = false;
@@ -1849,6 +1849,32 @@
   return ::test_runner::DumpLayout(frame, layout_test_runtime_flags_);
 }
 
+void TestRunner::DumpPixelsAsync(
+    blink::WebView* web_view,
+    const base::Callback<void(const SkBitmap&)>& callback) {
+  if (layout_test_runtime_flags_.dump_drag_image()) {
+    if (drag_image_.isNull()) {
+      // This means the test called dumpDragImage but did not initiate a drag.
+      // Return a blank image so that the test fails.
+      SkBitmap bitmap;
+      bitmap.allocN32Pixels(1, 1);
+      {
+        SkAutoLockPixels lock(bitmap);
+        bitmap.eraseColor(0);
+      }
+      callback.Run(bitmap);
+      return;
+    }
+
+    callback.Run(drag_image_.getSkBitmap());
+    return;
+  }
+
+  test_runner::DumpPixelsAsync(proxy_->GetWebView(), layout_test_runtime_flags_,
+                               delegate_->GetDeviceScaleFactorForTest(),
+                               callback);
+}
+
 void TestRunner::ReplicateLayoutTestRuntimeFlagsChanges(
     const base::DictionaryValue& changed_values) {
   layout_test_runtime_flags_.tracked_dictionary().ApplyUntrackedChanges(
@@ -1932,10 +1958,6 @@
   return dump_back_forward_list_;
 }
 
-bool TestRunner::shouldDumpSelectionRect() const {
-  return dump_selection_rect_;
-}
-
 bool TestRunner::isPrinting() const {
   return layout_test_runtime_flags_.is_printing();
 }
@@ -2024,8 +2046,12 @@
   tooltip_text_ = text.utf8();
 }
 
-bool TestRunner::shouldDumpDragImage() {
-  return dump_drag_image_;
+void TestRunner::setDragImage(
+    const blink::WebImage& drag_image) {
+  if (layout_test_runtime_flags_.dump_drag_image()) {
+    if (drag_image_.isNull())
+      drag_image_ = drag_image;
+  }
 }
 
 bool TestRunner::shouldDumpNavigationPolicy() const {
@@ -2658,8 +2684,17 @@
   delegate_->ApplyPreferences();
 }
 
+std::string TestRunner::GetAcceptLanguages() const {
+  return layout_test_runtime_flags_.accept_languages();
+}
+
 void TestRunner::SetAcceptLanguages(const std::string& accept_languages) {
-  proxy_->SetAcceptLanguages(accept_languages);
+  if (accept_languages == GetAcceptLanguages())
+    return;
+
+  layout_test_runtime_flags_.set_accept_languages(accept_languages);
+  OnLayoutTestRuntimeFlagsChanged();
+  proxy_->GetWebView()->acceptLanguagesChanged();
 }
 
 void TestRunner::SetPluginsEnabled(bool enabled) {
@@ -2800,7 +2835,8 @@
 }
 
 void TestRunner::DumpSelectionRect() {
-  dump_selection_rect_ = true;
+  layout_test_runtime_flags_.set_dump_selection_rect(true);
+  OnLayoutTestRuntimeFlagsChanged();
 }
 
 void TestRunner::SetPrinting() {
@@ -2841,8 +2877,9 @@
 }
 
 void TestRunner::DumpDragImage() {
+  layout_test_runtime_flags_.set_dump_drag_image(true);
   DumpAsTextWithPixelResults();
-  dump_drag_image_ = true;
+  OnLayoutTestRuntimeFlagsChanged();
 }
 
 void TestRunner::DumpNavigationPolicy() {
@@ -3066,11 +3103,10 @@
 }
 
 void TestRunner::CapturePixelsAsyncThen(v8::Local<v8::Function> callback) {
-  scoped_ptr<InvokeCallbackTask> task(
-      new InvokeCallbackTask(this, callback));
-  proxy_->CapturePixelsAsync(base::Bind(&TestRunner::CapturePixelsCallback,
-                                        weak_factory_.GetWeakPtr(),
-                                        base::Passed(&task)));
+  scoped_ptr<InvokeCallbackTask> task(new InvokeCallbackTask(this, callback));
+  DumpPixelsAsync(proxy_->GetWebView(),
+                  base::Bind(&TestRunner::CapturePixelsCallback,
+                             weak_factory_.GetWeakPtr(), base::Passed(&task)));
 }
 
 void TestRunner::OnLayoutTestRuntimeFlagsChanged() {
@@ -3096,10 +3132,10 @@
     int x, int y, v8::Local<v8::Function> callback) {
   scoped_ptr<InvokeCallbackTask> task(
       new InvokeCallbackTask(this, callback));
-  proxy_->CopyImageAtAndCapturePixels(
-      x, y, base::Bind(&TestRunner::CapturePixelsCallback,
-                       weak_factory_.GetWeakPtr(),
-                       base::Passed(&task)));
+  CopyImageAtAndCapturePixels(
+      proxy_->GetWebView(), x, y,
+      base::Bind(&TestRunner::CapturePixelsCallback, weak_factory_.GetWeakPtr(),
+                 base::Passed(&task)));
 }
 
 void TestRunner::GetManifestCallback(scoped_ptr<InvokeCallbackTask> task,
diff --git a/components/test_runner/test_runner.gyp b/components/test_runner/test_runner.gyp
index e3777fef..8867979 100644
--- a/components/test_runner/test_runner.gyp
+++ b/components/test_runner/test_runner.gyp
@@ -83,6 +83,8 @@
         'mock_webrtc_dtmf_sender_handler.h',
         'mock_webrtc_peer_connection_handler.cc',
         'mock_webrtc_peer_connection_handler.h',
+        'pixel_dump.cc',
+        'pixel_dump.h',
         'spell_check_client.cc',
         'spell_check_client.h',
         'test_common.cc',
diff --git a/components/test_runner/test_runner.h b/components/test_runner/test_runner.h
index 73202506..becad97 100644
--- a/components/test_runner/test_runner.h
+++ b/components/test_runner/test_runner.h
@@ -19,6 +19,7 @@
 #include "components/test_runner/test_runner_export.h"
 #include "components/test_runner/web_task.h"
 #include "components/test_runner/web_test_runner.h"
+#include "third_party/WebKit/public/platform/WebImage.h"
 #include "v8/include/v8.h"
 
 class GURL;
@@ -76,6 +77,9 @@
   void GetAudioData(std::vector<unsigned char>* buffer_view) const override;
   bool IsRecursiveLayoutDumpRequested() override;
   std::string DumpLayout(blink::WebLocalFrame* frame) override;
+  void DumpPixelsAsync(
+      blink::WebView* web_view,
+      const base::Callback<void(const SkBitmap&)>& callback) override;
   void ReplicateLayoutTestRuntimeFlagsChanges(
       const base::DictionaryValue& changed_values) override;
   bool HasCustomTextDump(std::string* custom_text_dump) const override;
@@ -83,10 +87,10 @@
   blink::WebContentSettingsClient* GetWebContentSettings() const override;
 
   // Methods used by WebTestProxyBase and WebFrameTestClient.
+  std::string GetAcceptLanguages() const;
   bool shouldStayOnPageAfterHandlingBeforeUnload() const;
   MockScreenOrientationClient* getMockScreenOrientationClient();
   MockWebUserMediaClient* getMockWebUserMediaClient();
-  bool shouldDumpSelectionRect() const;
   bool isPrinting() const;
   bool shouldDumpAsTextWithPixelResults();
   bool shouldDumpAsCustomText() const;
@@ -128,7 +132,7 @@
   void RequestPointerUnlock();
   bool isPointerLocked();
   void setToolTipText(const blink::WebString&);
-  bool shouldDumpDragImage();
+  void setDragImage(const blink::WebImage& drag_image);
   bool shouldDumpNavigationPolicy() const;
 
   bool midiAccessorResult();
@@ -477,10 +481,9 @@
   // WebFrameClient receives a loadURLExternally() call.
   void WaitUntilExternalURLLoad();
 
-  // This function sets a flag which tells the WebTestProxy to dump the drag
-  // image when the next drag-and-drop is initiated. It is equivalent to
-  // DumpAsTextWithPixelResults but the pixel results will be the drag image
-  // instead of a snapshot of the page.
+  // This function sets a flag to dump the drag image when the next drag&drop is
+  // initiated. It is equivalent to DumpAsTextWithPixelResults but the pixel
+  // results will be the drag image instead of a snapshot of the page.
   void DumpDragImage();
 
   // Sets a flag that tells the WebTestProxy to dump the default navigation
@@ -755,13 +758,6 @@
   // well.
   bool dump_back_forward_list_;
 
-  // If true, the test_shell will draw the bounds of the current selection rect
-  // taking possible transforms of the selection rect into account.
-  bool dump_selection_rect_;
-
-  // If true, the test_shell will dump the drag image as pixel results.
-  bool dump_drag_image_;
-
   // If true, content_shell will dump the default navigation policy passed to
   // WebFrameClient::decidePolicyForNavigation.
   bool dump_navigation_policy_;
@@ -817,6 +813,9 @@
   // Number of currently active color choosers.
   int chooser_count_;
 
+  // Captured drag image.
+  blink::WebImage drag_image_;
+
   base::WeakPtrFactory<TestRunner> weak_factory_;
 
   DISALLOW_COPY_AND_ASSIGN(TestRunner);
diff --git a/components/test_runner/tracked_dictionary.cc b/components/test_runner/tracked_dictionary.cc
index 890553afc..5b78ea0 100644
--- a/components/test_runner/tracked_dictionary.cc
+++ b/components/test_runner/tracked_dictionary.cc
@@ -41,4 +41,9 @@
   Set(path, make_scoped_ptr(new base::FundamentalValue(new_value)));
 }
 
+void TrackedDictionary::SetString(const std::string& path,
+                                  const std::string& new_value) {
+  Set(path, make_scoped_ptr(new base::StringValue(new_value)));
+}
+
 }  // namespace test_runner
diff --git a/components/test_runner/tracked_dictionary.h b/components/test_runner/tracked_dictionary.h
index c29eeb5..7b7182da 100644
--- a/components/test_runner/tracked_dictionary.h
+++ b/components/test_runner/tracked_dictionary.h
@@ -44,6 +44,7 @@
 
   // Type-specific setter for convenience.
   void SetBoolean(const std::string& path, bool new_value);
+  void SetString(const std::string& path, const std::string& new_value);
 
  private:
   base::DictionaryValue current_values_;
diff --git a/components/test_runner/web_test_delegate.h b/components/test_runner/web_test_delegate.h
index 28b838c..41da496 100644
--- a/components/test_runner/web_test_delegate.h
+++ b/components/test_runner/web_test_delegate.h
@@ -277,9 +277,7 @@
     blink::WebLocalFrame* frame,
     const blink::WebPluginParams& params) = 0;
 
-  // Convert the position in DIP to native coordinates.
-  virtual blink::WebPoint ConvertDIPToNative(
-      const blink::WebPoint& point_in_dip) const = 0;
+  virtual float GetDeviceScaleFactorForTest() const = 0;
 };
 
 }  // namespace test_runner
diff --git a/components/test_runner/web_test_proxy.cc b/components/test_runner/web_test_proxy.cc
index 39da5755..47112285 100644
--- a/components/test_runner/web_test_proxy.cc
+++ b/components/test_runner/web_test_proxy.cc
@@ -31,11 +31,6 @@
 #include "components/test_runner/web_test_delegate.h"
 #include "components/test_runner/web_test_interfaces.h"
 #include "components/test_runner/web_test_runner.h"
-// FIXME: Including platform_canvas.h here is a layering violation.
-#include "skia/ext/platform_canvas.h"
-#include "third_party/WebKit/public/platform/Platform.h"
-#include "third_party/WebKit/public/platform/WebClipboard.h"
-#include "third_party/WebKit/public/platform/WebCompositeAndReadbackAsyncCallback.h"
 #include "third_party/WebKit/public/platform/WebLayoutAndPaintAsyncCallback.h"
 #include "third_party/WebKit/public/platform/WebURLError.h"
 #include "third_party/WebKit/public/platform/WebURLRequest.h"
@@ -59,26 +54,6 @@
 
 namespace {
 
-class CaptureCallback : public blink::WebCompositeAndReadbackAsyncCallback {
- public:
-  CaptureCallback(const base::Callback<void(const SkBitmap&)>& callback);
-  virtual ~CaptureCallback();
-
-  void set_wait_for_popup(bool wait) { wait_for_popup_ = wait; }
-  void set_popup_position(const gfx::Point& position) {
-    popup_position_ = position;
-  }
-
-  // WebCompositeAndReadbackAsyncCallback implementation.
-  void didCompositeAndReadback(const SkBitmap& bitmap) override;
-
- private:
-  base::Callback<void(const SkBitmap&)> callback_;
-  SkBitmap main_bitmap_;
-  bool wait_for_popup_;
-  gfx::Point popup_position_;
-};
-
 class LayoutAndPaintCallback : public blink::WebLayoutAndPaintAsyncCallback {
  public:
   LayoutAndPaintCallback(const base::Closure& callback)
@@ -152,9 +127,7 @@
 }
 
 void WebTestProxyBase::Reset() {
-  drag_image_.reset();
   animate_scheduled_ = false;
-  accept_languages_ = "";
 }
 
 blink::WebSpellCheckClient* WebTestProxyBase::GetSpellCheckClient() const {
@@ -203,162 +176,6 @@
   return DumpAllBackForwardLists(test_interfaces_, delegate_);
 }
 
-void WebTestProxyBase::DrawSelectionRect(SkCanvas* canvas) {
-  // See if we need to draw the selection bounds rect. Selection bounds
-  // rect is the rect enclosing the (possibly transformed) selection.
-  // The rect should be drawn after everything is laid out and painted.
-  if (!test_interfaces_->GetTestRunner()->shouldDumpSelectionRect())
-    return;
-  // If there is a selection rect - draw a red 1px border enclosing rect
-  blink::WebRect wr = GetWebView()->mainFrame()->selectionBoundsRect();
-  if (wr.isEmpty())
-    return;
-  // Render a red rectangle bounding selection rect
-  SkPaint paint;
-  paint.setColor(0xFFFF0000);  // Fully opaque red
-  paint.setStyle(SkPaint::kStroke_Style);
-  paint.setFlags(SkPaint::kAntiAlias_Flag);
-  paint.setStrokeWidth(1.0f);
-  SkIRect rect;  // Bounding rect
-  rect.set(wr.x, wr.y, wr.x + wr.width, wr.y + wr.height);
-  canvas->drawIRect(rect, paint);
-}
-
-void WebTestProxyBase::SetAcceptLanguages(const std::string& accept_languages) {
-  bool notify = accept_languages_ != accept_languages;
-  accept_languages_ = accept_languages;
-
-  if (notify)
-    GetWebView()->acceptLanguagesChanged();
-}
-
-void WebTestProxyBase::CopyImageAtAndCapturePixels(
-    int x, int y, const base::Callback<void(const SkBitmap&)>& callback) {
-  DCHECK(!callback.is_null());
-  uint64_t sequence_number =  blink::Platform::current()->clipboard()->
-      sequenceNumber(blink::WebClipboard::Buffer());
-  GetWebView()->copyImageAt(blink::WebPoint(x, y));
-  if (sequence_number == blink::Platform::current()->clipboard()->
-      sequenceNumber(blink::WebClipboard::Buffer())) {
-    SkBitmap emptyBitmap;
-    callback.Run(emptyBitmap);
-    return;
-  }
-
-  blink::WebData data = blink::Platform::current()->clipboard()->readImage(
-      blink::WebClipboard::Buffer());
-  blink::WebImage image = blink::WebImage::fromData(data, blink::WebSize());
-  const SkBitmap& bitmap = image.getSkBitmap();
-  SkAutoLockPixels autoLock(bitmap);
-  callback.Run(bitmap);
-}
-
-void WebTestProxyBase::CapturePixelsForPrinting(
-    const base::Callback<void(const SkBitmap&)>& callback) {
-  web_widget_->updateAllLifecyclePhases();
-
-  blink::WebSize page_size_in_pixels = web_widget_->size();
-  blink::WebFrame* web_frame = GetWebView()->mainFrame();
-
-  int page_count = web_frame->printBegin(page_size_in_pixels);
-  int totalHeight = page_count * (page_size_in_pixels.height + 1) - 1;
-
-  bool is_opaque = false;
-  skia::RefPtr<SkCanvas> canvas(skia::AdoptRef(skia::TryCreateBitmapCanvas(
-      page_size_in_pixels.width, totalHeight, is_opaque)));
-  if (!canvas) {
-    callback.Run(SkBitmap());
-    return;
-  }
-  web_frame->printPagesWithBoundaries(canvas.get(), page_size_in_pixels);
-  web_frame->printEnd();
-
-  DrawSelectionRect(canvas.get());
-  const SkBitmap bitmap = skia::ReadPixels(canvas.get());
-  callback.Run(bitmap);
-}
-
-CaptureCallback::CaptureCallback(
-    const base::Callback<void(const SkBitmap&)>& callback)
-    : callback_(callback), wait_for_popup_(false) {
-}
-
-CaptureCallback::~CaptureCallback() {
-}
-
-void CaptureCallback::didCompositeAndReadback(const SkBitmap& bitmap) {
-  TRACE_EVENT2("shell",
-               "CaptureCallback::didCompositeAndReadback",
-               "x",
-               bitmap.info().width(),
-               "y",
-               bitmap.info().height());
-  if (!wait_for_popup_) {
-    callback_.Run(bitmap);
-    delete this;
-    return;
-  }
-  if (main_bitmap_.isNull()) {
-    bitmap.deepCopyTo(&main_bitmap_);
-    return;
-  }
-  SkCanvas canvas(main_bitmap_);
-  canvas.drawBitmap(bitmap, popup_position_.x(), popup_position_.y());
-  callback_.Run(main_bitmap_);
-  delete this;
-}
-
-void WebTestProxyBase::CapturePixelsAsync(
-    const base::Callback<void(const SkBitmap&)>& callback) {
-  TRACE_EVENT0("shell", "WebTestProxyBase::CapturePixelsAsync");
-  DCHECK(!callback.is_null());
-
-  if (test_interfaces_->GetTestRunner()->shouldDumpDragImage()) {
-    if (drag_image_.isNull()) {
-      // This means the test called dumpDragImage but did not initiate a drag.
-      // Return a blank image so that the test fails.
-      SkBitmap bitmap;
-      bitmap.allocN32Pixels(1, 1);
-      {
-        SkAutoLockPixels lock(bitmap);
-        bitmap.eraseColor(0);
-      }
-      callback.Run(bitmap);
-      return;
-    }
-
-    callback.Run(drag_image_.getSkBitmap());
-    return;
-  }
-
-  if (test_interfaces_->GetTestRunner()->isPrinting()) {
-    base::ThreadTaskRunnerHandle::Get()->PostTask(
-        FROM_HERE, base::Bind(&WebTestProxyBase::CapturePixelsForPrinting,
-                              base::Unretained(this), callback));
-    return;
-  }
-
-  CaptureCallback* capture_callback = new CaptureCallback(base::Bind(
-      &WebTestProxyBase::DidCapturePixelsAsync, base::Unretained(this),
-      callback));
-  web_widget_->compositeAndReadbackAsync(capture_callback);
-  if (blink::WebPagePopup* popup = web_widget_->pagePopup()) {
-    capture_callback->set_wait_for_popup(true);
-    capture_callback->set_popup_position(
-        delegate_->ConvertDIPToNative(popup->positionRelativeToOwner()));
-    popup->compositeAndReadbackAsync(capture_callback);
-  }
-}
-
-void WebTestProxyBase::DidCapturePixelsAsync(
-    const base::Callback<void(const SkBitmap&)>& callback,
-    const SkBitmap& bitmap) {
-  SkCanvas canvas(bitmap);
-  DrawSelectionRect(&canvas);
-  if (!callback.is_null())
-    callback.Run(bitmap);
-}
-
 void LayoutAndPaintCallback::didLayoutAndPaint() {
   TRACE_EVENT0("shell", "LayoutAndPaintCallback::didLayoutAndPaint");
   if (wait_for_popup_) {
@@ -438,10 +255,8 @@
                                      blink::WebDragOperationsMask mask,
                                      const blink::WebImage& image,
                                      const blink::WebPoint& point) {
-  if (test_interfaces_->GetTestRunner()->shouldDumpDragImage()) {
-    if (drag_image_.isNull())
-      drag_image_ = image;
-  }
+  test_interfaces_->GetTestRunner()->setDragImage(image);
+
   // When running a test, we need to fake a drag drop operation otherwise
   // Windows waits for real mouse events to know when the drag is over.
   test_interfaces_->GetEventSender()->DoDragDrop(data, mask);
@@ -534,7 +349,8 @@
 }
 
 blink::WebString WebTestProxyBase::acceptLanguages() {
-  return blink::WebString::fromUTF8(accept_languages_);
+  return blink::WebString::fromUTF8(
+      test_interfaces_->GetTestRunner()->GetAcceptLanguages());
 }
 
 }  // namespace test_runner
diff --git a/components/test_runner/web_test_proxy.h b/components/test_runner/web_test_proxy.h
index 3c7746b7..a9b86c0 100644
--- a/components/test_runner/web_test_proxy.h
+++ b/components/test_runner/web_test_proxy.h
@@ -13,7 +13,6 @@
 #include "build/build_config.h"
 #include "components/test_runner/test_runner_export.h"
 #include "components/test_runner/web_task.h"
-#include "third_party/WebKit/public/platform/WebImage.h"
 #include "third_party/WebKit/public/platform/WebRect.h"
 #include "third_party/WebKit/public/platform/WebScreenInfo.h"
 #include "third_party/WebKit/public/platform/WebURLError.h"
@@ -24,12 +23,10 @@
 #include "third_party/WebKit/public/web/WebNavigationPolicy.h"
 #include "third_party/WebKit/public/web/WebTextDirection.h"
 
-class SkBitmap;
-class SkCanvas;
-
 namespace blink {
 class WebDragData;
 class WebFileChooserCompletion;
+class WebImage;
 class WebLocalFrame;
 class WebSpeechRecognizer;
 class WebSpellCheckClient;
@@ -72,12 +69,6 @@
                              blink::WebTextDirection sub_message_hint);
 
   std::string DumpBackForwardLists();
-  void CapturePixelsForPrinting(
-      const base::Callback<void(const SkBitmap&)>& callback);
-  void CopyImageAtAndCapturePixels(
-      int x, int y, const base::Callback<void(const SkBitmap&)>& callback);
-  void CapturePixelsAsync(
-      const base::Callback<void(const SkBitmap&)>& callback);
 
   void LayoutAndPaintAsyncThen(const base::Closure& callback);
 
@@ -91,8 +82,6 @@
 
   void PostSpellCheckEvent(const blink::WebString& event_name);
 
-  void SetAcceptLanguages(const std::string& accept_languages);
-
   bool AnimationScheduled() { return animate_scheduled_; }
 
  protected:
@@ -129,10 +118,6 @@
 
  private:
   void AnimateNow();
-  void DrawSelectionRect(SkCanvas* canvas);
-  void DidCapturePixelsAsync(
-      const base::Callback<void(const SkBitmap&)>& callback,
-      const SkBitmap& bitmap);
 
   TestInterfaces* test_interfaces_;
   WebTestDelegate* delegate_;
@@ -140,8 +125,6 @@
 
   WebTaskList task_list_;
 
-  blink::WebImage drag_image_;
-
   scoped_ptr<SpellCheckClient> spellcheck_;
 
   bool animate_scheduled_;
@@ -149,8 +132,6 @@
   scoped_ptr<MockCredentialManagerClient> credential_manager_client_;
   scoped_ptr<MockWebSpeechRecognizer> speech_recognizer_;
 
-  std::string accept_languages_;
-
  private:
   DISALLOW_COPY_AND_ASSIGN(WebTestProxyBase);
 };
diff --git a/components/test_runner/web_test_runner.h b/components/test_runner/web_test_runner.h
index 9080c9d1..93148a0 100644
--- a/components/test_runner/web_test_runner.h
+++ b/components/test_runner/web_test_runner.h
@@ -8,6 +8,10 @@
 #include <string>
 #include <vector>
 
+#include "base/callback_forward.h"
+
+class SkBitmap;
+
 namespace base {
 class DictionaryValue;
 }
@@ -15,6 +19,7 @@
 namespace blink {
 class WebContentSettingsClient;
 class WebLocalFrame;
+class WebView;
 }
 
 namespace test_runner {
@@ -42,6 +47,13 @@
   // (i.e. text mode if testRunner.dumpAsText() was called from javascript).
   virtual std::string DumpLayout(blink::WebLocalFrame* frame) = 0;
 
+  // Snapshots image of |web_view| using the mode requested by the current test
+  // and calls |callback| with the result.  Caller needs to ensure that
+  // |web_view| stays alive until |callback| is called.
+  virtual void DumpPixelsAsync(
+      blink::WebView* web_view,
+      const base::Callback<void(const SkBitmap&)>& callback) = 0;
+
   // Replicates changes to layout test runtime flags
   // (i.e. changes that happened in another renderer).
   // See also WebTestDelegate::OnLayoutTestRuntimeFlagsChanged.
diff --git a/components/webcrypto/BUILD.gn b/components/webcrypto/BUILD.gn
index d824d54..7e1f7500 100644
--- a/components/webcrypto/BUILD.gn
+++ b/components/webcrypto/BUILD.gn
@@ -118,6 +118,13 @@
     # PartitionAlloc initialization).
     "//components/test_runner:test_runner",
   ]
+
+  # These should be generated by the blink_headers target but they don't yet.
+  # TODO(ortuno): Remove once blink_headers generates bindings.
+  # http://crbug.com/600384
+  public_deps = [
+    "//third_party/WebKit/public:mojo_bindings",
+  ]
 }
 
 # Tests the import of PKCS8 formatted EC keys.
diff --git a/content/browser/frame_host/navigation_handle_impl.cc b/content/browser/frame_host/navigation_handle_impl.cc
index 37a325bd..dde5fa7 100644
--- a/content/browser/frame_host/navigation_handle_impl.cc
+++ b/content/browser/frame_host/navigation_handle_impl.cc
@@ -65,8 +65,7 @@
       frame_tree_node_(frame_tree_node),
       next_index_(0),
       navigation_start_(navigation_start),
-      pending_nav_entry_id_(pending_nav_entry_id),
-      is_in_commit_(false) {
+      pending_nav_entry_id_(pending_nav_entry_id) {
   DCHECK(!navigation_start.is_null());
   GetDelegate()->DidStartNavigation(this);
 }
@@ -74,8 +73,6 @@
 NavigationHandleImpl::~NavigationHandleImpl() {
   GetDelegate()->DidFinishNavigation(this);
 
-  CHECK(!is_in_commit_);
-
   // Cancel the navigation on the IO thread if the NavigationHandle is being
   // destroyed in the middle of the NavigationThrottles checks.
   if (!IsBrowserSideNavigationEnabled() && !complete_callback_.is_null())
diff --git a/content/browser/frame_host/navigation_handle_impl.h b/content/browser/frame_host/navigation_handle_impl.h
index c19ed16..252a2e0 100644
--- a/content/browser/frame_host/navigation_handle_impl.h
+++ b/content/browser/frame_host/navigation_handle_impl.h
@@ -211,10 +211,6 @@
       bool same_page,
       RenderFrameHostImpl* render_frame_host);
 
-  // TODO(clamy): Remove this once enough data has been gathered for
-  // crbug.com/589365.
-  void set_is_in_commit(bool is_in_commit) { is_in_commit_ = is_in_commit; }
-
  private:
   friend class NavigationHandleImplTest;
 
@@ -296,12 +292,6 @@
   // corresponding ServiceWorkerNetworkProvider is created in the renderer.
   scoped_ptr<ServiceWorkerNavigationHandle> service_worker_handle_;
 
-  // True if the RenderFrameHost that owns the NavigationHandle is in the
-  // process of committing a navigation.  This is temporary to help pinpoint
-  // the cause of crbug.com/589365.
-  // TODO(clamy): Remove once enough data has been gathered.
-  bool is_in_commit_;
-
   DISALLOW_COPY_AND_ASSIGN(NavigationHandleImpl);
 };
 
diff --git a/content/browser/frame_host/navigator_impl.cc b/content/browser/frame_host/navigator_impl.cc
index bce9b8b..753335338 100644
--- a/content/browser/frame_host/navigator_impl.cc
+++ b/content/browser/frame_host/navigator_impl.cc
@@ -596,16 +596,9 @@
                                         transition_type);
     render_frame_host->navigation_handle()->DidCommitNavigation(
         params, is_navigation_within_page, render_frame_host);
-
-    // TODO(clamy): Remove this once enough data has been gathered for
-    // crbug.com/589365.
-    render_frame_host->navigation_handle()->set_is_in_commit(false);
-
     render_frame_host->SetNavigationHandle(nullptr);
   }
 
-  // TODO(clamy): The NavigationHandle should always be reset here.
-
   if (!did_navigate)
     return;  // No navigation happened.
 
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
index f949256..1b0946e 100644
--- a/content/browser/frame_host/render_frame_host_impl.cc
+++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -212,7 +212,6 @@
       web_ui_type_(WebUI::kNoWebUI),
       pending_web_ui_type_(WebUI::kNoWebUI),
       should_reuse_web_ui_(false),
-      is_in_commit_(false),
       last_navigation_lofi_state_(LOFI_UNSPECIFIED),
       weak_ptr_factory_(this) {
   frame_tree_->AddRenderViewHostRef(render_view_host_);
@@ -259,8 +258,6 @@
   // RenderFrameHost during cleanup.
   ClearAllWebUI();
 
-  CHECK(!is_in_commit_);
-
   GetProcess()->RemoveRoute(routing_id_);
   g_routing_id_frame_map.Get().erase(
       RenderFrameHostID(GetProcess()->GetID(), routing_id_));
@@ -1091,20 +1088,9 @@
     }
   }
 
-  // TODO(clamy): Remove this once enough data has been gathered for
-  // crbug.com/589365.
-  is_in_commit_ = true;
-  navigation_handle_->set_is_in_commit(true);
-
   accessibility_reset_count_ = 0;
   frame_tree_node()->navigator()->DidNavigate(this, validated_params);
 
-  // TODO(clamy): Remove this once enough data has been gathered for
-  // crbug.com/589365.
-  is_in_commit_ = false;
-  if (navigation_handle_.get())
-    navigation_handle_->set_is_in_commit(false);
-
   // For a top-level frame, there are potential security concerns associated
   // with displaying graphics from a previously loaded page after the URL in
   // the omnibar has been changed. It is unappealing to clear the page
diff --git a/content/browser/frame_host/render_frame_host_impl.h b/content/browser/frame_host/render_frame_host_impl.h
index 1b9f2768..acef076 100644
--- a/content/browser/frame_host/render_frame_host_impl.h
+++ b/content/browser/frame_host/render_frame_host_impl.h
@@ -969,11 +969,6 @@
   // called (no pending instance should be set).
   bool should_reuse_web_ui_;
 
-  // True if the RenderFrameHost is in the process of committing a navigation.
-  // This is temporary to help pinpoint the cause of crbug.com/589365.
-  // TODO(clamy): Remove once enough data has been gathered.
-  bool is_in_commit_;
-
   // PlzNavigate: The LoFi state of the last navigation. This is used during
   // history navigation of subframes to ensure that subframes navigate with the
   // same LoFi status as the top-level frame.
diff --git a/content/browser/renderer_host/input/input_router_client.h b/content/browser/renderer_host/input/input_router_client.h
index 34fdf0eb..b6fc6a1 100644
--- a/content/browser/renderer_host/input/input_router_client.h
+++ b/content/browser/renderer_host/input/input_router_client.h
@@ -53,6 +53,12 @@
 
   // Called when a renderer fling has terminated.
   virtual void DidStopFlinging() = 0;
+
+  // Called when the input router generates an event. It is intended that the
+  // client will do some processing on |gesture_event| and then send it back
+  // to the InputRouter via SendGestureEvent.
+  virtual void ForwardGestureEvent(
+      const blink::WebGestureEvent& gesture_event) = 0;
 };
 
 } // namespace content
diff --git a/content/browser/renderer_host/input/input_router_impl.cc b/content/browser/renderer_host/input/input_router_impl.cc
index 4f02067..ed58284 100644
--- a/content/browser/renderer_host/input/input_router_impl.cc
+++ b/content/browser/renderer_host/input/input_router_impl.cc
@@ -289,6 +289,10 @@
   ack_handler_->OnGestureEventAck(event, ack_result);
 }
 
+void InputRouterImpl::ForwardGestureEvent(const blink::WebGestureEvent& event) {
+  client_->ForwardGestureEvent(event);
+}
+
 void InputRouterImpl::SendMouseWheelEventImmediately(
     const MouseWheelEventWithLatencyInfo& wheel_event) {
   FilterAndSendWebInputEvent(wheel_event.event, wheel_event.latency);
diff --git a/content/browser/renderer_host/input/input_router_impl.h b/content/browser/renderer_host/input/input_router_impl.h
index 9315f6fa..a0f9fc2 100644
--- a/content/browser/renderer_host/input/input_router_impl.h
+++ b/content/browser/renderer_host/input/input_router_impl.h
@@ -100,6 +100,8 @@
       const GestureEventWithLatencyInfo& gesture_event) override;
   void OnGestureEventAck(const GestureEventWithLatencyInfo& event,
                          InputEventAckState ack_result) override;
+  void ForwardGestureEvent(
+      const blink::WebGestureEvent& gesture_event) override;
 
   // MouseWheelEventQueueClient
   void SendMouseWheelEventImmediately(
diff --git a/content/browser/renderer_host/input/input_router_impl_perftest.cc b/content/browser/renderer_host/input/input_router_impl_perftest.cc
index 9e24a51..5860ca85 100644
--- a/content/browser/renderer_host/input/input_router_impl_perftest.cc
+++ b/content/browser/renderer_host/input/input_router_impl_perftest.cc
@@ -87,6 +87,7 @@
   void DidFlush() override {}
   void DidOverscroll(const DidOverscrollParams& params) override {}
   void DidStopFlinging() override {}
+  void ForwardGestureEvent(const blink::WebGestureEvent& event) override {}
 };
 
 class NullIPCSender : public IPC::Sender {
diff --git a/content/browser/renderer_host/input/mock_input_router_client.cc b/content/browser/renderer_host/input/mock_input_router_client.cc
index 07d3d179..ecfd3dd 100644
--- a/content/browser/renderer_host/input/mock_input_router_client.cc
+++ b/content/browser/renderer_host/input/mock_input_router_client.cc
@@ -61,6 +61,13 @@
 void MockInputRouterClient::DidStopFlinging() {
 }
 
+void MockInputRouterClient::ForwardGestureEvent(
+    const blink::WebGestureEvent& gesture_event) {
+  if (input_router_)
+    input_router_->SendGestureEvent(
+        GestureEventWithLatencyInfo(gesture_event, ui::LatencyInfo()));
+}
+
 bool MockInputRouterClient::GetAndResetFilterEventCalled() {
   bool filter_input_event_called = filter_input_event_called_;
   filter_input_event_called_ = false;
diff --git a/content/browser/renderer_host/input/mock_input_router_client.h b/content/browser/renderer_host/input/mock_input_router_client.h
index 3ae8835..fbe50661 100644
--- a/content/browser/renderer_host/input/mock_input_router_client.h
+++ b/content/browser/renderer_host/input/mock_input_router_client.h
@@ -31,6 +31,8 @@
   void DidFlush() override;
   void DidOverscroll(const DidOverscrollParams& params) override;
   void DidStopFlinging() override;
+  void ForwardGestureEvent(
+      const blink::WebGestureEvent& gesture_event) override;
 
   bool GetAndResetFilterEventCalled();
   size_t GetAndResetDidFlushCount();
diff --git a/content/browser/renderer_host/input/mouse_wheel_event_queue.cc b/content/browser/renderer_host/input/mouse_wheel_event_queue.cc
index 6ec1abcd..a777b860 100644
--- a/content/browser/renderer_host/input/mouse_wheel_event_queue.cc
+++ b/content/browser/renderer_host/input/mouse_wheel_event_queue.cc
@@ -8,6 +8,7 @@
 #include "base/stl_util.h"
 #include "base/trace_event/trace_event.h"
 
+using blink::WebGestureEvent;
 using blink::WebInputEvent;
 using blink::WebMouseWheelEvent;
 using ui::LatencyInfo;
@@ -85,50 +86,49 @@
       event_sent_for_gesture_ack_->event.canScroll &&
       (scrolling_device_ == blink::WebGestureDeviceUninitialized ||
        scrolling_device_ == blink::WebGestureDeviceTouchpad)) {
-    GestureEventWithLatencyInfo scroll_update;
-    scroll_update.event.timeStampSeconds =
+    WebGestureEvent scroll_update;
+    scroll_update.timeStampSeconds =
         event_sent_for_gesture_ack_->event.timeStampSeconds;
 
-    scroll_update.event.x = event_sent_for_gesture_ack_->event.x;
-    scroll_update.event.y = event_sent_for_gesture_ack_->event.y;
-    scroll_update.event.globalX = event_sent_for_gesture_ack_->event.globalX;
-    scroll_update.event.globalY = event_sent_for_gesture_ack_->event.globalY;
-    scroll_update.event.type = WebInputEvent::GestureScrollUpdate;
-    scroll_update.event.sourceDevice = blink::WebGestureDeviceTouchpad;
-    scroll_update.event.resendingPluginId = -1;
-    scroll_update.event.data.scrollUpdate.deltaX =
+    scroll_update.x = event_sent_for_gesture_ack_->event.x;
+    scroll_update.y = event_sent_for_gesture_ack_->event.y;
+    scroll_update.globalX = event_sent_for_gesture_ack_->event.globalX;
+    scroll_update.globalY = event_sent_for_gesture_ack_->event.globalY;
+    scroll_update.type = WebInputEvent::GestureScrollUpdate;
+    scroll_update.sourceDevice = blink::WebGestureDeviceTouchpad;
+    scroll_update.resendingPluginId = -1;
+    scroll_update.data.scrollUpdate.deltaX =
         event_sent_for_gesture_ack_->event.deltaX;
-    scroll_update.event.data.scrollUpdate.deltaY =
+    scroll_update.data.scrollUpdate.deltaY =
         event_sent_for_gesture_ack_->event.deltaY;
     // Only OSX populates the momentumPhase; so expect this to
     // always be PhaseNone on all other platforms.
-    scroll_update.event.data.scrollUpdate.inertial =
+    scroll_update.data.scrollUpdate.inertial =
         event_sent_for_gesture_ack_->event.momentumPhase !=
         blink::WebMouseWheelEvent::PhaseNone;
     if (event_sent_for_gesture_ack_->event.scrollByPage) {
-      scroll_update.event.data.scrollUpdate.deltaUnits =
-          blink::WebGestureEvent::Page;
+      scroll_update.data.scrollUpdate.deltaUnits = WebGestureEvent::Page;
 
       // Turn page scrolls into a *single* page scroll because
       // the magnitude the number of ticks is lost when coalescing.
-      if (scroll_update.event.data.scrollUpdate.deltaX)
-        scroll_update.event.data.scrollUpdate.deltaX =
-            scroll_update.event.data.scrollUpdate.deltaX > 0 ? 1 : -1;
-      if (scroll_update.event.data.scrollUpdate.deltaY)
-        scroll_update.event.data.scrollUpdate.deltaY =
-            scroll_update.event.data.scrollUpdate.deltaY > 0 ? 1 : -1;
+      if (scroll_update.data.scrollUpdate.deltaX)
+        scroll_update.data.scrollUpdate.deltaX =
+            scroll_update.data.scrollUpdate.deltaX > 0 ? 1 : -1;
+      if (scroll_update.data.scrollUpdate.deltaY)
+        scroll_update.data.scrollUpdate.deltaY =
+            scroll_update.data.scrollUpdate.deltaY > 0 ? 1 : -1;
     } else {
-      scroll_update.event.data.scrollUpdate.deltaUnits =
+      scroll_update.data.scrollUpdate.deltaUnits =
           event_sent_for_gesture_ack_->event.hasPreciseScrollingDeltas
-              ? blink::WebGestureEvent::PrecisePixels
-              : blink::WebGestureEvent::Pixels;
+              ? WebGestureEvent::PrecisePixels
+              : WebGestureEvent::Pixels;
 
       if (event_sent_for_gesture_ack_->event.railsMode ==
           WebInputEvent::RailsModeVertical)
-        scroll_update.event.data.scrollUpdate.deltaX = 0;
+        scroll_update.data.scrollUpdate.deltaX = 0;
       if (event_sent_for_gesture_ack_->event.railsMode ==
           WebInputEvent::RailsModeHorizontal)
-        scroll_update.event.data.scrollUpdate.deltaY = 0;
+        scroll_update.data.scrollUpdate.deltaY = 0;
     }
 
     bool current_phase_ended = false;
@@ -149,8 +149,8 @@
                                 blink::WebMouseWheelEvent::PhaseCancelled;
     }
 
-    bool needs_update = scroll_update.event.data.scrollUpdate.deltaX != 0 ||
-                        scroll_update.event.data.scrollUpdate.deltaY != 0;
+    bool needs_update = scroll_update.data.scrollUpdate.deltaX != 0 ||
+                        scroll_update.data.scrollUpdate.deltaY != 0;
 
     // If there is no update to send and the current phase is ended yet a GSB
     // needs to be sent, this event sequence doesn't need to be generated
@@ -172,23 +172,23 @@
       }
 
       if (needs_update)
-        client_->SendGestureEvent(scroll_update);
+        client_->ForwardGestureEvent(scroll_update);
 
       if (current_phase_ended) {
         // Non-synthetic GSEs are sent when the current phase is canceled or
         // ended.
-        SendScrollEnd(scroll_update.event, false);
+        SendScrollEnd(scroll_update, false);
       } else if (has_phase_info) {
         // Generate a synthetic GSE for every update to force hit testing so
         // that the non-latching behavior is preserved. Remove once
         // crbug.com/526463 is fully implemented.
-        SendScrollEnd(scroll_update.event, true);
+        SendScrollEnd(scroll_update, true);
       } else {
         scroll_end_timer_.Start(
             FROM_HERE,
             base::TimeDelta::FromMilliseconds(scroll_transaction_ms_),
             base::Bind(&MouseWheelEventQueue::SendScrollEnd,
-                       base::Unretained(this), scroll_update.event, false));
+                       base::Unretained(this), scroll_update, false));
       }
     }
   }
@@ -215,6 +215,8 @@
               gesture_event.event.type ==
                   blink::WebInputEvent::GestureFlingStart)) {
     scrolling_device_ = blink::WebGestureDeviceUninitialized;
+    if (scroll_end_timer_.IsRunning())
+      scroll_end_timer_.Reset();
   }
 }
 
@@ -230,19 +232,18 @@
   client_->SendMouseWheelEventImmediately(*event_sent_for_gesture_ack_);
 }
 
-void MouseWheelEventQueue::SendScrollEnd(blink::WebGestureEvent update_event,
+void MouseWheelEventQueue::SendScrollEnd(WebGestureEvent update_event,
                                          bool synthetic) {
   DCHECK((synthetic && !needs_scroll_end_) || needs_scroll_end_);
 
-  GestureEventWithLatencyInfo scroll_end(update_event);
-  scroll_end.event.timeStampSeconds =
+  WebGestureEvent scroll_end(update_event);
+  scroll_end.timeStampSeconds =
       (base::TimeTicks::Now() - base::TimeTicks()).InSecondsF();
-  scroll_end.event.type = WebInputEvent::GestureScrollEnd;
-  scroll_end.event.resendingPluginId = -1;
-  scroll_end.event.data.scrollEnd.synthetic = synthetic;
-  scroll_end.event.data.scrollEnd.inertial =
-      update_event.data.scrollUpdate.inertial;
-  scroll_end.event.data.scrollEnd.deltaUnits =
+  scroll_end.type = WebInputEvent::GestureScrollEnd;
+  scroll_end.resendingPluginId = -1;
+  scroll_end.data.scrollEnd.synthetic = synthetic;
+  scroll_end.data.scrollEnd.inertial = update_event.data.scrollUpdate.inertial;
+  scroll_end.data.scrollEnd.deltaUnits =
       update_event.data.scrollUpdate.deltaUnits;
 
   if (!synthetic) {
@@ -252,30 +253,30 @@
     if (scroll_end_timer_.IsRunning())
       scroll_end_timer_.Reset();
   }
-  client_->SendGestureEvent(scroll_end);
+  client_->ForwardGestureEvent(scroll_end);
 }
 
 void MouseWheelEventQueue::SendScrollBegin(
-    const GestureEventWithLatencyInfo& gesture_update,
+    const WebGestureEvent& gesture_update,
     bool synthetic) {
   DCHECK((synthetic && !needs_scroll_begin_) || needs_scroll_begin_);
 
-  GestureEventWithLatencyInfo scroll_begin(gesture_update);
-  scroll_begin.event.type = WebInputEvent::GestureScrollBegin;
-  scroll_begin.event.data.scrollBegin.synthetic = synthetic;
-  scroll_begin.event.data.scrollBegin.inertial =
-      gesture_update.event.data.scrollUpdate.inertial;
-  scroll_begin.event.data.scrollBegin.deltaXHint =
-      gesture_update.event.data.scrollUpdate.deltaX;
-  scroll_begin.event.data.scrollBegin.deltaYHint =
-      gesture_update.event.data.scrollUpdate.deltaY;
-  scroll_begin.event.data.scrollBegin.targetViewport = false;
-  scroll_begin.event.data.scrollBegin.deltaHintUnits =
-      gesture_update.event.data.scrollUpdate.deltaUnits;
+  WebGestureEvent scroll_begin(gesture_update);
+  scroll_begin.type = WebInputEvent::GestureScrollBegin;
+  scroll_begin.data.scrollBegin.synthetic = synthetic;
+  scroll_begin.data.scrollBegin.inertial =
+      gesture_update.data.scrollUpdate.inertial;
+  scroll_begin.data.scrollBegin.deltaXHint =
+      gesture_update.data.scrollUpdate.deltaX;
+  scroll_begin.data.scrollBegin.deltaYHint =
+      gesture_update.data.scrollUpdate.deltaY;
+  scroll_begin.data.scrollBegin.targetViewport = false;
+  scroll_begin.data.scrollBegin.deltaHintUnits =
+      gesture_update.data.scrollUpdate.deltaUnits;
 
   needs_scroll_begin_ = false;
   needs_scroll_end_ = true;
-  client_->SendGestureEvent(scroll_begin);
+  client_->ForwardGestureEvent(scroll_begin);
 }
 
 }  // namespace content
diff --git a/content/browser/renderer_host/input/mouse_wheel_event_queue.h b/content/browser/renderer_host/input/mouse_wheel_event_queue.h
index a224b9e..c84d5302 100644
--- a/content/browser/renderer_host/input/mouse_wheel_event_queue.h
+++ b/content/browser/renderer_host/input/mouse_wheel_event_queue.h
@@ -31,7 +31,7 @@
 
   virtual void SendMouseWheelEventImmediately(
       const MouseWheelEventWithLatencyInfo& event) = 0;
-  virtual void SendGestureEvent(const GestureEventWithLatencyInfo& event) = 0;
+  virtual void ForwardGestureEvent(const blink::WebGestureEvent& event) = 0;
   virtual void OnMouseWheelEventAck(const MouseWheelEventWithLatencyInfo& event,
                                     InputEventAckState ack_result) = 0;
 };
@@ -79,7 +79,7 @@
  private:
   void TryForwardNextEventToRenderer();
   void SendScrollEnd(blink::WebGestureEvent update_event, bool synthetic);
-  void SendScrollBegin(const GestureEventWithLatencyInfo& gesture_update,
+  void SendScrollBegin(const blink::WebGestureEvent& gesture_update,
                        bool synthetic);
 
   MouseWheelEventQueueClient* client_;
diff --git a/content/browser/renderer_host/input/mouse_wheel_event_queue_unittest.cc b/content/browser/renderer_host/input/mouse_wheel_event_queue_unittest.cc
index d86956b..a877a16f 100644
--- a/content/browser/renderer_host/input/mouse_wheel_event_queue_unittest.cc
+++ b/content/browser/renderer_host/input/mouse_wheel_event_queue_unittest.cc
@@ -135,10 +135,10 @@
     sent_events_.push_back(std::move(cloned_event_holder));
   }
 
-  void SendGestureEvent(const GestureEventWithLatencyInfo& event) override {
+  void ForwardGestureEvent(const blink::WebGestureEvent& event) override {
     WebGestureEvent* cloned_event = new WebGestureEvent();
     scoped_ptr<WebInputEvent> cloned_event_holder(cloned_event);
-    *cloned_event = event.event;
+    *cloned_event = event;
     sent_events_.push_back(std::move(cloned_event_holder));
   }
 
diff --git a/content/browser/renderer_host/pepper/pepper_tcp_server_socket_message_filter.cc b/content/browser/renderer_host/pepper/pepper_tcp_server_socket_message_filter.cc
index 5f9707ad4..080a63a3 100644
--- a/content/browser/renderer_host/pepper/pepper_tcp_server_socket_message_filter.cc
+++ b/content/browser/renderer_host/pepper/pepper_tcp_server_socket_message_filter.cc
@@ -5,6 +5,7 @@
 #include "content/browser/renderer_host/pepper/pepper_tcp_server_socket_message_filter.h"
 
 #include <utility>
+#include <vector>
 
 #include "base/bind.h"
 #include "base/bind_helpers.h"
@@ -15,6 +16,7 @@
 #include "content/browser/renderer_host/pepper/pepper_socket_utils.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/common/socket_permission_request.h"
+#include "net/base/ip_address.h"
 #include "net/base/ip_endpoint.h"
 #include "net/base/net_errors.h"
 #include "ppapi/c/pp_errors.h"
@@ -171,7 +173,7 @@
     int32_t backlog) {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
 
-  net::IPAddressNumber address;
+  std::vector<uint8_t> address;
   uint16_t port;
   if (state_ != STATE_BEFORE_LISTENING ||
       !NetAddressPrivateImpl::NetAddressToIPEndPoint(addr, &address, &port)) {
@@ -185,7 +187,7 @@
   socket_.reset(new net::TCPSocket(NULL, net::NetLog::Source()));
   int net_result = net::OK;
   do {
-    net::IPEndPoint ip_end_point(address, port);
+    net::IPEndPoint ip_end_point(net::IPAddress(address), port);
     net_result = socket_->Open(ip_end_point.GetFamily());
     if (net_result != net::OK)
       break;
diff --git a/content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter.cc b/content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter.cc
index dedc057b..661fdc5 100644
--- a/content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter.cc
+++ b/content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter.cc
@@ -6,6 +6,7 @@
 
 #include <cstring>
 #include <utility>
+#include <vector>
 
 #include "base/bind.h"
 #include "base/location.h"
@@ -23,6 +24,7 @@
 #include "net/base/address_family.h"
 #include "net/base/host_port_pair.h"
 #include "net/base/io_buffer.h"
+#include "net/base/ip_address.h"
 #include "net/base/net_errors.h"
 #include "net/dns/single_request_host_resolver.h"
 #include "net/socket/client_socket_factory.h"
@@ -573,14 +575,14 @@
 
   int pp_result = PP_OK;
   do {
-    net::IPAddressNumber address;
+    std::vector<uint8_t> address;
     uint16_t port;
     if (!NetAddressPrivateImpl::NetAddressToIPEndPoint(
             net_addr, &address, &port)) {
       pp_result = PP_ERROR_ADDRESS_INVALID;
       break;
     }
-    net::IPEndPoint bind_addr(address, port);
+    net::IPEndPoint bind_addr(net::IPAddress(address), port);
 
     DCHECK(!socket_->IsValid());
     pp_result = NetErrorToPepperError(socket_->Open(bind_addr.GetFamily()));
diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc
index d50b558..b7bee6d 100644
--- a/content/browser/renderer_host/render_widget_host_impl.cc
+++ b/content/browser/renderer_host/render_widget_host_impl.cc
@@ -201,7 +201,8 @@
       pending_mouse_lock_request_(false),
       allow_privileged_mouse_lock_(false),
       has_touch_handler_(false),
-      is_in_gesture_scroll_(false),
+      is_in_touchpad_gesture_scroll_(false),
+      is_in_touchscreen_gesture_scroll_(false),
       received_paint_after_load_(false),
       next_browser_snapshot_id_(1),
       owned_by_render_frame_host_(false),
@@ -1027,21 +1028,26 @@
   // TODO(wjmaclean) Remove the code for supporting resending gesture events
   // when WebView transitions to OOPIF and BrowserPlugin is removed.
   // http://crbug.com/533069
+  bool* is_in_gesture_scroll =
+      gesture_event.sourceDevice ==
+              blink::WebGestureDevice::WebGestureDeviceTouchpad
+          ? &is_in_touchpad_gesture_scroll_
+          : &is_in_touchscreen_gesture_scroll_;
   if (gesture_event.type == blink::WebInputEvent::GestureScrollBegin) {
-    DCHECK(!is_in_gesture_scroll_);
-    is_in_gesture_scroll_ = true;
+    DCHECK(!(*is_in_gesture_scroll));
+    *is_in_gesture_scroll = true;
   } else if (gesture_event.type == blink::WebInputEvent::GestureScrollEnd ||
              gesture_event.type == blink::WebInputEvent::GestureFlingStart) {
-    DCHECK(is_in_gesture_scroll_ ||
+    DCHECK(*is_in_gesture_scroll ||
            (gesture_event.type == blink::WebInputEvent::GestureFlingStart &&
             gesture_event.sourceDevice ==
                 blink::WebGestureDevice::WebGestureDeviceTouchpad));
-    is_in_gesture_scroll_ = false;
+    *is_in_gesture_scroll = false;
   }
 
   bool scroll_update_needs_wrapping =
       gesture_event.type == blink::WebInputEvent::GestureScrollUpdate &&
-      gesture_event.resendingPluginId != -1 && !is_in_gesture_scroll_;
+      gesture_event.resendingPluginId != -1 && !(*is_in_gesture_scroll);
 
   if (scroll_update_needs_wrapping) {
     ForwardGestureEventWithLatencyInfo(
diff --git a/content/browser/renderer_host/render_widget_host_impl.h b/content/browser/renderer_host/render_widget_host_impl.h
index 7a079da..f4e94d4 100644
--- a/content/browser/renderer_host/render_widget_host_impl.h
+++ b/content/browser/renderer_host/render_widget_host_impl.h
@@ -769,7 +769,8 @@
   // TODO(wjmaclean) Remove the code for supporting resending gesture events
   // when WebView transitions to OOPIF and BrowserPlugin is removed.
   // http://crbug.com/533069
-  bool is_in_gesture_scroll_;
+  bool is_in_touchpad_gesture_scroll_;
+  bool is_in_touchscreen_gesture_scroll_;
 
   scoped_ptr<SyntheticGestureController> synthetic_gesture_controller_;
 
diff --git a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
index 461f7a1..da44286 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
+++ b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
@@ -3943,11 +3943,14 @@
   // consumed and have triggered a fling animation (as tracked by the router).
   EXPECT_FALSE(parent_host_->input_router()->HasPendingEvents());
 
+  SimulateGestureEvent(WebInputEvent::GestureScrollEnd,
+                       blink::WebGestureDeviceTouchscreen);
+
   SimulateWheelEvent(-5, 0, 0, true);    // sent directly
   SimulateWheelEvent(-60, 0, 0, true);   // enqueued
   SimulateWheelEvent(-100, 0, 0, true);  // coalesced into previous event
   EXPECT_TRUE(ScrollStateIsUnknown());
-  EXPECT_EQ(2U, GetSentMessageCountAndResetSink());
+  EXPECT_EQ(3U, GetSentMessageCountAndResetSink());
 
   // The first wheel scroll did not scroll content. Overscroll should not start
   // yet, since enough hasn't been scrolled.
diff --git a/content/common/common.sb b/content/common/common.sb
index 1d9a8ac1..49c654c3 100644
--- a/content/common/common.sb
+++ b/content/common/common.sb
@@ -16,7 +16,6 @@
 ; Define constants for all of the parameter strings passed in.
 (define disable-sandbox-denial-logging "DISABLE_SANDBOX_DENIAL_LOGGING")
 (define enable-logging "ENABLE_LOGGING")
-(define component-build-workaround "COMPONENT_BUILD_WORKAROUND")
 (define permitted-dir "PERMITTED_DIR")
 (define homedir-as-literal "USER_HOMEDIR_AS_LITERAL")
 (define lion-or-later "LION_OR_LATER")
@@ -50,9 +49,3 @@
 ; Allow direct access to /dev/urandom, similar to Linux/POSIX, to allow
 ; third party code (eg: bits of Adobe Flash and NSS) to function properly.
 (allow file-read-data file-read-metadata (literal "/dev/urandom"))
-
-; Enables reading file metadata for the Chrome bundle and its parent paths.
-; https://crbug.com/127465
-(if (and (param-defined? component-build-workaround)
-         (param-true? component-build-workaround))
-  (allow file-read-metadata ))
diff --git a/content/common/sandbox_mac.mm b/content/common/sandbox_mac.mm
index c422bf7..6a7f2cf 100644
--- a/content/common/sandbox_mac.mm
+++ b/content/common/sandbox_mac.mm
@@ -491,16 +491,6 @@
   if (!compiler.InsertBooleanParam("ELCAP_OR_LATER", elcap_or_later))
     return false;
 
-#if defined(COMPONENT_BUILD)
-  // dlopen() fails without file-read-metadata access if the executable image
-  // contains LC_RPATH load commands. The components build uses those.
-  // See http://crbug.com/127465
-  if (base::mac::IsOSSnowLeopard()) {
-    if (!compiler.InsertBooleanParam("COMPONENT_BUILD_WORKAROUND", true))
-      return false;
-  }
-#endif
-
   // Initialize sandbox.
   std::string error_str;
   bool success = compiler.CompileAndApplyProfile(&error_str);
diff --git a/content/renderer/history_controller.cc b/content/renderer/history_controller.cc
index 0a6cd634..e459d9a 100644
--- a/content/renderer/history_controller.cc
+++ b/content/renderer/history_controller.cc
@@ -187,14 +187,7 @@
     case blink::WebBackForwardCommit:
       if (!provisional_entry_)
         return;
-      // Commit the provisional entry, but only if this back/forward item
-      // matches it.  Otherwise it could be a commit from an earlier attempt to
-      // go back/forward, and we should leave the provisional entry in place.
-      if (HistoryEntry::HistoryNode* node =
-              provisional_entry_->GetHistoryNodeForFrame(frame)) {
-        if (node->item().itemSequenceNumber() == item.itemSequenceNumber())
-          current_entry_.reset(provisional_entry_.release());
-      }
+      current_entry_.reset(provisional_entry_.release());
       if (HistoryEntry::HistoryNode* node =
               current_entry_->GetHistoryNodeForFrame(frame)) {
         node->set_item(item);
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index fb5c2a4..160a42b 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -133,6 +133,7 @@
 #include "gin/modules/module_registry.h"
 #include "media/audio/audio_output_device.h"
 #include "media/base/audio_renderer_mixer_input.h"
+#include "media/base/cdm_factory.h"
 #include "media/base/decoder_factory.h"
 #include "media/base/media.h"
 #include "media/base/media_log.h"
diff --git a/content/shell/renderer/layout_test/blink_test_runner.cc b/content/shell/renderer/layout_test/blink_test_runner.cc
index 067b017..9c145b73 100644
--- a/content/shell/renderer/layout_test/blink_test_runner.cc
+++ b/content/shell/renderer/layout_test/blink_test_runner.cc
@@ -30,6 +30,7 @@
 #include "build/build_config.h"
 #include "components/plugins/renderer/plugin_placeholder.h"
 #include "components/test_runner/gamepad_controller.h"
+#include "components/test_runner/pixel_dump.h"
 #include "components/test_runner/web_test_interfaces.h"
 #include "components/test_runner/web_test_proxy.h"
 #include "components/test_runner/web_test_runner.h"
@@ -728,11 +729,8 @@
   return placeholder->plugin();
 }
 
-blink::WebPoint BlinkTestRunner::ConvertDIPToNative(
-    const blink::WebPoint& point_in_dip) const {
-  float scale = render_view()->GetDeviceScaleFactorForTest();
-  return blink::WebPoint(point_in_dip.x * scale,
-                         point_in_dip.y * scale);
+float BlinkTestRunner::GetDeviceScaleFactorForTest() const {
+  return render_view()->GetDeviceScaleFactorForTest();
 }
 
 bool BlinkTestRunner::AddMediaStreamVideoSourceAndTrack(
@@ -895,8 +893,10 @@
       interfaces->TestRunner()->ShouldGeneratePixelResults() &&
       !interfaces->TestRunner()->ShouldDumpAsAudio()) {
     CHECK(render_view()->GetWebView()->isAcceleratedCompositingActive());
-    proxy()->CapturePixelsAsync(base::Bind(
-        &BlinkTestRunner::OnPixelsDumpCompleted, base::Unretained(this)));
+    interfaces->TestRunner()->DumpPixelsAsync(
+        render_view()->GetWebView(),
+        base::Bind(&BlinkTestRunner::OnPixelsDumpCompleted,
+                   base::Unretained(this)));
     return;
   }
 
diff --git a/content/shell/renderer/layout_test/blink_test_runner.h b/content/shell/renderer/layout_test/blink_test_runner.h
index 5bd9729..2dbb213 100644
--- a/content/shell/renderer/layout_test/blink_test_runner.h
+++ b/content/shell/renderer/layout_test/blink_test_runner.h
@@ -153,8 +153,7 @@
   blink::WebPlugin* CreatePluginPlaceholder(
     blink::WebLocalFrame* frame,
     const blink::WebPluginParams& params) override;
-  blink::WebPoint ConvertDIPToNative(
-      const blink::WebPoint& point_in_dip) const override;
+  float GetDeviceScaleFactorForTest() const override;
 
   // Resets a RenderView to a known state for layout tests. It is used both when
   // a RenderView is created and when reusing an existing RenderView for the
diff --git a/docs/windows_build_instructions.md b/docs/windows_build_instructions.md
index ed06056..f91ebc9 100644
--- a/docs/windows_build_instructions.md
+++ b/docs/windows_build_instructions.md
@@ -19,33 +19,33 @@
 
 ### Open source contributors
 
-####For building with Visual Studio 2015 (default compiler as of March 10, 2016):
+####For building with Visual Studio 2015 (default compiler as of March 11, 2016):
 
-Install Visual Studio 2015 Update 1 or later - Community Edition
-should work if its license is appropriate for you. Use the Custom Install option
-and select:
+> Install Visual Studio 2015 Update 2 or later - Community Edition
+> should work if its license is appropriate for you. Use the Custom Install option
+> and select:
+> 
+> - Visual C++, which will select three sub-categories including MFC
+> - Universal Windows Apps Development Tools > Tools
+> - Universal Windows Apps Development Tools > Windows 10 SDK (10.0.10586)
+> 
+> You must have the 10586 SDK installed or else you will hit compile errors such
+> as redefined macros.
 
-- Visual C++, which will select three sub-categories including MFC
-- Universal Windows Apps Development Tools > Tools (1.2)
-- Universal Windows Apps Development Tools > Windows 10 SDK (10.0.10586)
+#### For building with Visual Studio 2013 (no longer default as of March 11, 2016, and not recommended - requires setting `GYP_MSVS_VERSION=2013`):
 
-You must have the 10586 SDK installed or else you will hit compile errors such
-as redefined macros.
-
-#### For building with Visual Studio 2013 (no longer default as of March 10, 2016, and not recommended - requires setting `GYP_MSVS_VERSION=2013`):
-
-Install [Visual Studio 2013
-Community](http://www.visualstudio.com/products/visual-studio-community-vs)
-or [Visual Studio 2013
-Professional](http://www.visualstudio.com/products/visual-studio-professional-with-msdn-vs)
-depending on which license is appropriate for you. You can deselect
-the default options if you want, but you must make sure to install
-"Microsoft Foundation Classes for C++".
-
-You should also install the [Windows 10
-SDK](https://dev.windows.com/en-us/downloads/windows-10-sdk) to the
-default install location. You must have SDK version 10.0.10586 or
-greater installed.
+> Install [Visual Studio 2013
+> Community](http://www.visualstudio.com/products/visual-studio-community-vs)
+> or [Visual Studio 2013
+> Professional](http://www.visualstudio.com/products/visual-studio-professional-with-msdn-vs)
+> depending on which license is appropriate for you. You can deselect
+> the default options if you want, but you must make sure to install
+> "Microsoft Foundation Classes for C++".
+> 
+> You should also install the [Windows 10
+> SDK](https://dev.windows.com/en-us/downloads/windows-10-sdk) to the
+> default install location. You must have SDK version 10.0.10586 or
+> greater installed.
 
 Run `set DEPOT_TOOLS_WIN_TOOLCHAIN=0`, or set that variable in your
 global environment.
diff --git a/gpu/ipc/client/gpu_memory_buffer_impl_ozone_native_pixmap.cc b/gpu/ipc/client/gpu_memory_buffer_impl_ozone_native_pixmap.cc
index b851066e..7554f3e 100644
--- a/gpu/ipc/client/gpu_memory_buffer_impl_ozone_native_pixmap.cc
+++ b/gpu/ipc/client/gpu_memory_buffer_impl_ozone_native_pixmap.cc
@@ -30,7 +30,8 @@
     const DestructionCallback& callback,
     scoped_ptr<ui::ClientNativePixmap> pixmap)
     : GpuMemoryBufferImpl(id, size, format, callback),
-      pixmap_(std::move(pixmap)) {}
+      pixmap_(std::move(pixmap)),
+      data_(nullptr) {}
 
 GpuMemoryBufferImplOzoneNativePixmap::~GpuMemoryBufferImplOzoneNativePixmap() {}
 
@@ -75,7 +76,9 @@
 
 bool GpuMemoryBufferImplOzoneNativePixmap::Map() {
   DCHECK(!mapped_);
-  if (!pixmap_->Map())
+  DCHECK(!data_);
+  data_ = pixmap_->Map();
+  if (!data_)
     return false;
   mapped_ = true;
   return mapped_;
@@ -84,13 +87,15 @@
 void* GpuMemoryBufferImplOzoneNativePixmap::memory(size_t plane) {
   DCHECK(mapped_);
   DCHECK_LT(plane, gfx::NumberOfPlanesForBufferFormat(format_));
-  return pixmap_->Map();
+  return data_;
 }
 
 void GpuMemoryBufferImplOzoneNativePixmap::Unmap() {
   DCHECK(mapped_);
+  DCHECK(data_);
   pixmap_->Unmap();
   mapped_ = false;
+  data_ = nullptr;
 }
 
 int GpuMemoryBufferImplOzoneNativePixmap::stride(size_t plane) const {
diff --git a/gpu/ipc/client/gpu_memory_buffer_impl_ozone_native_pixmap.h b/gpu/ipc/client/gpu_memory_buffer_impl_ozone_native_pixmap.h
index 29b79a70..3ec59e9 100644
--- a/gpu/ipc/client/gpu_memory_buffer_impl_ozone_native_pixmap.h
+++ b/gpu/ipc/client/gpu_memory_buffer_impl_ozone_native_pixmap.h
@@ -54,6 +54,7 @@
       scoped_ptr<ui::ClientNativePixmap> native_pixmap);
 
   scoped_ptr<ui::ClientNativePixmap> pixmap_;
+  void* data_;
 
   DISALLOW_COPY_AND_ASSIGN(GpuMemoryBufferImplOzoneNativePixmap);
 };
diff --git a/headless/app/headless_shell.cc b/headless/app/headless_shell.cc
index b04d7760..e2d6348 100644
--- a/headless/app/headless_shell.cc
+++ b/headless/app/headless_shell.cc
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include <memory>
+
 #include "base/bind.h"
 #include "base/callback.h"
 #include "base/command_line.h"
@@ -73,7 +75,7 @@
 
  private:
   HeadlessBrowser* browser_;  // Not owned.
-  scoped_ptr<HeadlessWebContents> web_contents_;
+  std::unique_ptr<HeadlessWebContents> web_contents_;
 
   DISALLOW_COPY_AND_ASSIGN(HeadlessShell);
 };
diff --git a/headless/lib/browser/headless_browser_context.cc b/headless/lib/browser/headless_browser_context.cc
index 3ccaef3..13ffced4 100644
--- a/headless/lib/browser/headless_browser_context.cc
+++ b/headless/lib/browser/headless_browser_context.cc
@@ -4,6 +4,8 @@
 
 #include "headless/lib/browser/headless_browser_context.h"
 
+#include <memory>
+
 #include "base/path_service.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/resource_context.h"
@@ -77,10 +79,10 @@
   BrowserContext::Initialize(this, path_);
 }
 
-scoped_ptr<content::ZoomLevelDelegate>
+std::unique_ptr<content::ZoomLevelDelegate>
 HeadlessBrowserContext::CreateZoomLevelDelegate(
     const base::FilePath& partition_path) {
-  return scoped_ptr<content::ZoomLevelDelegate>();
+  return std::unique_ptr<content::ZoomLevelDelegate>();
 }
 
 base::FilePath HeadlessBrowserContext::GetPath() const {
diff --git a/headless/lib/browser/headless_browser_context.h b/headless/lib/browser/headless_browser_context.h
index 022e6ce..d7c7f19 100644
--- a/headless/lib/browser/headless_browser_context.h
+++ b/headless/lib/browser/headless_browser_context.h
@@ -5,6 +5,8 @@
 #ifndef HEADLESS_LIB_BROWSER_HEADLESS_BROWSER_CONTEXT_H_
 #define HEADLESS_LIB_BROWSER_HEADLESS_BROWSER_CONTEXT_H_
 
+#include <memory>
+
 #include "base/files/file_path.h"
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/content_browser_client.h"
@@ -21,7 +23,7 @@
   ~HeadlessBrowserContext() override;
 
   // BrowserContext implementation:
-  scoped_ptr<content::ZoomLevelDelegate> CreateZoomLevelDelegate(
+  std::unique_ptr<content::ZoomLevelDelegate> CreateZoomLevelDelegate(
       const base::FilePath& partition_path) override;
   base::FilePath GetPath() const override;
   bool IsOffTheRecord() const override;
@@ -55,7 +57,7 @@
   void InitWhileIOAllowed();
 
   base::FilePath path_;
-  scoped_ptr<HeadlessResourceContext> resource_context_;
+  std::unique_ptr<HeadlessResourceContext> resource_context_;
   HeadlessBrowser::Options options_;
 
   DISALLOW_COPY_AND_ASSIGN(HeadlessBrowserContext);
diff --git a/headless/lib/browser/headless_browser_impl.cc b/headless/lib/browser/headless_browser_impl.cc
index 90730bb..77f463d 100644
--- a/headless/lib/browser/headless_browser_impl.cc
+++ b/headless/lib/browser/headless_browser_impl.cc
@@ -4,6 +4,7 @@
 
 #include "headless/lib/browser/headless_browser_impl.h"
 
+#include "base/memory/ptr_util.h"
 #include "base/thread_task_runner_handle.h"
 #include "content/public/app/content_main.h"
 #include "content/public/browser/browser_thread.h"
@@ -29,10 +30,10 @@
 
 HeadlessBrowserImpl::~HeadlessBrowserImpl() {}
 
-scoped_ptr<HeadlessWebContents> HeadlessBrowserImpl::CreateWebContents(
+std::unique_ptr<HeadlessWebContents> HeadlessBrowserImpl::CreateWebContents(
     const gfx::Size& size) {
   DCHECK(BrowserMainThread()->BelongsToCurrentThread());
-  return make_scoped_ptr(new HeadlessWebContentsImpl(
+  return base::WrapUnique(new HeadlessWebContentsImpl(
       browser_context(), window_tree_host_->window(), size));
 }
 
@@ -83,7 +84,7 @@
 int HeadlessBrowserMain(
     const HeadlessBrowser::Options& options,
     const base::Callback<void(HeadlessBrowser*)>& on_browser_start_callback) {
-  scoped_ptr<HeadlessBrowserImpl> browser(
+  std::unique_ptr<HeadlessBrowserImpl> browser(
       new HeadlessBrowserImpl(on_browser_start_callback, options));
 
   // TODO(skyostil): Implement custom message pumps.
diff --git a/headless/lib/browser/headless_browser_impl.h b/headless/lib/browser/headless_browser_impl.h
index 86d23a90..3a4abd32 100644
--- a/headless/lib/browser/headless_browser_impl.h
+++ b/headless/lib/browser/headless_browser_impl.h
@@ -7,7 +7,8 @@
 
 #include "headless/public/headless_browser.h"
 
-#include "base/memory/scoped_ptr.h"
+#include <memory>
+
 #include "base/synchronization/lock.h"
 #include "headless/lib/browser/headless_web_contents_impl.h"
 
@@ -28,7 +29,7 @@
   ~HeadlessBrowserImpl() override;
 
   // HeadlessBrowser implementation:
-  scoped_ptr<HeadlessWebContents> CreateWebContents(
+  std::unique_ptr<HeadlessWebContents> CreateWebContents(
       const gfx::Size& size) override;
   scoped_refptr<base::SingleThreadTaskRunner> BrowserMainThread()
       const override;
@@ -53,7 +54,7 @@
   base::Callback<void(HeadlessBrowser*)> on_start_callback_;
   HeadlessBrowser::Options options_;
   HeadlessBrowserMainParts* browser_main_parts_;  // Not owned.
-  scoped_ptr<aura::WindowTreeHost> window_tree_host_;
+  std::unique_ptr<aura::WindowTreeHost> window_tree_host_;
 
   DISALLOW_COPY_AND_ASSIGN(HeadlessBrowserImpl);
 };
diff --git a/headless/lib/browser/headless_browser_main_parts.h b/headless/lib/browser/headless_browser_main_parts.h
index f666065..3b7453e 100644
--- a/headless/lib/browser/headless_browser_main_parts.h
+++ b/headless/lib/browser/headless_browser_main_parts.h
@@ -5,7 +5,8 @@
 #ifndef HEADLESS_LIB_BROWSER_HEADLESS_BROWSER_MAIN_PARTS_H_
 #define HEADLESS_LIB_BROWSER_HEADLESS_BROWSER_MAIN_PARTS_H_
 
-#include "base/memory/scoped_ptr.h"
+#include <memory>
+
 #include "content/public/browser/browser_main_parts.h"
 #include "headless/public/headless_browser.h"
 
@@ -31,8 +32,9 @@
 
  private:
   HeadlessBrowserImpl* browser_;  // Not owned.
-  scoped_ptr<HeadlessBrowserContext> browser_context_;
-  scoped_ptr<devtools_http_handler::DevToolsHttpHandler> devtools_http_handler_;
+  std::unique_ptr<HeadlessBrowserContext> browser_context_;
+  std::unique_ptr<devtools_http_handler::DevToolsHttpHandler>
+      devtools_http_handler_;
 
   DISALLOW_COPY_AND_ASSIGN(HeadlessBrowserMainParts);
 };
diff --git a/headless/lib/browser/headless_content_browser_client.cc b/headless/lib/browser/headless_content_browser_client.cc
index fb718af..0fa3681 100644
--- a/headless/lib/browser/headless_content_browser_client.cc
+++ b/headless/lib/browser/headless_content_browser_client.cc
@@ -4,6 +4,9 @@
 
 #include "headless/lib/browser/headless_content_browser_client.h"
 
+#include <memory>
+
+#include "base/memory/ptr_util.h"
 #include "content/public/browser/browser_thread.h"
 #include "headless/lib/browser/headless_browser_context.h"
 #include "headless/lib/browser/headless_browser_impl.h"
@@ -19,8 +22,8 @@
 
 content::BrowserMainParts* HeadlessContentBrowserClient::CreateBrowserMainParts(
     const content::MainFunctionParams&) {
-  scoped_ptr<HeadlessBrowserMainParts> browser_main_parts =
-      make_scoped_ptr(new HeadlessBrowserMainParts(browser_));
+  std::unique_ptr<HeadlessBrowserMainParts> browser_main_parts =
+      base::WrapUnique(new HeadlessBrowserMainParts(browser_));
   browser_->set_browser_main_parts(browser_main_parts.get());
   return browser_main_parts.release();
 }
diff --git a/headless/lib/browser/headless_devtools.cc b/headless/lib/browser/headless_devtools.cc
index 258e9de2..5945e3dd 100644
--- a/headless/lib/browser/headless_devtools.cc
+++ b/headless/lib/browser/headless_devtools.cc
@@ -5,6 +5,7 @@
 #include "headless/lib/browser/headless_devtools.h"
 
 #include "base/files/file_path.h"
+#include "base/memory/ptr_util.h"
 #include "components/devtools_http_handler/devtools_http_handler.h"
 #include "components/devtools_http_handler/devtools_http_handler_delegate.h"
 #include "content/public/browser/browser_context.h"
@@ -33,11 +34,11 @@
 
  private:
   // DevToolsHttpHandler::ServerSocketFactory implementation:
-  scoped_ptr<net::ServerSocket> CreateForHttpServer() override {
-    scoped_ptr<net::ServerSocket> socket(
+  std::unique_ptr<net::ServerSocket> CreateForHttpServer() override {
+    std::unique_ptr<net::ServerSocket> socket(
         new net::TCPServerSocket(nullptr, net::NetLog::Source()));
     if (socket->Listen(endpoint_, kBackLog) != net::OK)
-      return scoped_ptr<net::ServerSocket>();
+      return std::unique_ptr<net::ServerSocket>();
 
     return socket;
   }
@@ -89,13 +90,13 @@
 
 }  // namespace
 
-scoped_ptr<DevToolsHttpHandler> CreateLocalDevToolsHttpHandler(
+std::unique_ptr<DevToolsHttpHandler> CreateLocalDevToolsHttpHandler(
     HeadlessBrowserContext* browser_context) {
   const net::IPEndPoint& endpoint =
       browser_context->options().devtools_endpoint;
-  scoped_ptr<DevToolsHttpHandler::ServerSocketFactory> socket_factory(
+  std::unique_ptr<DevToolsHttpHandler::ServerSocketFactory> socket_factory(
       new TCPServerSocketFactory(endpoint));
-  return make_scoped_ptr(new DevToolsHttpHandler(
+  return base::WrapUnique(new DevToolsHttpHandler(
       std::move(socket_factory), std::string(), new HeadlessDevToolsDelegate(),
       browser_context->GetPath(), base::FilePath(), std::string(),
       browser_context->options().user_agent));
diff --git a/headless/lib/browser/headless_devtools.h b/headless/lib/browser/headless_devtools.h
index 96f63334..f4f303a4 100644
--- a/headless/lib/browser/headless_devtools.h
+++ b/headless/lib/browser/headless_devtools.h
@@ -5,7 +5,7 @@
 #ifndef HEADLESS_LIB_BROWSER_HEADLESS_DEVTOOLS_H_
 #define HEADLESS_LIB_BROWSER_HEADLESS_DEVTOOLS_H_
 
-#include "base/memory/scoped_ptr.h"
+#include <memory>
 
 namespace devtools_http_handler {
 class DevToolsHttpHandler;
@@ -16,7 +16,7 @@
 
 // Starts a DevTools HTTP handler on the loopback interface on the port
 // configured by HeadlessBrowser::Options.
-scoped_ptr<devtools_http_handler::DevToolsHttpHandler>
+std::unique_ptr<devtools_http_handler::DevToolsHttpHandler>
 CreateLocalDevToolsHttpHandler(HeadlessBrowserContext* browser_context);
 
 }  // namespace content
diff --git a/headless/lib/browser/headless_url_request_context_getter.cc b/headless/lib/browser/headless_url_request_context_getter.cc
index 2527df2e..1a46e10 100644
--- a/headless/lib/browser/headless_url_request_context_getter.cc
+++ b/headless/lib/browser/headless_url_request_context_getter.cc
@@ -4,8 +4,10 @@
 
 #include "headless/lib/browser/headless_url_request_context_getter.h"
 
+#include <memory>
+
 #include "base/command_line.h"
-#include "base/memory/scoped_ptr.h"
+#include "base/memory/ptr_util.h"
 #include "base/single_thread_task_runner.h"
 #include "base/threading/worker_pool.h"
 #include "content/public/browser/browser_thread.h"
@@ -41,7 +43,7 @@
   for (content::ProtocolHandlerMap::iterator it = protocol_handlers->begin();
        it != protocol_handlers->end(); ++it) {
     bool set_protocol = job_factory->SetProtocolHandler(
-        it->first, make_scoped_ptr(it->second.release()));
+        it->first, base::WrapUnique(it->second.release()));
     DCHECK(set_protocol);
   }
   protocol_handlers->clear();
@@ -79,18 +81,18 @@
 
 HeadlessURLRequestContextGetter::~HeadlessURLRequestContextGetter() {}
 
-scoped_ptr<net::NetworkDelegate>
+std::unique_ptr<net::NetworkDelegate>
 HeadlessURLRequestContextGetter::CreateNetworkDelegate() {
   return nullptr;
 }
 
-scoped_ptr<net::ProxyConfigService>
+std::unique_ptr<net::ProxyConfigService>
 HeadlessURLRequestContextGetter::GetProxyConfigService() {
   return net::ProxyService::CreateSystemProxyConfigService(io_task_runner_,
                                                            file_task_runner_);
 }
 
-scoped_ptr<net::ProxyService>
+std::unique_ptr<net::ProxyService>
 HeadlessURLRequestContextGetter::GetProxyService() {
   if (!options_.proxy_server.IsEmpty())
     return net::ProxyService::CreateFixed(options_.proxy_server.ToString());
@@ -114,29 +116,29 @@
         new net::URLRequestContextStorage(url_request_context_.get()));
     storage_->set_cookie_store(
         content::CreateCookieStore(content::CookieStoreConfig()));
-    storage_->set_channel_id_service(make_scoped_ptr(
+    storage_->set_channel_id_service(base::WrapUnique(
         new net::ChannelIDService(new net::DefaultChannelIDStore(nullptr),
                                   base::WorkerPool::GetTaskRunner(true))));
     // TODO(skyostil): Make language settings configurable.
-    storage_->set_http_user_agent_settings(make_scoped_ptr(
+    storage_->set_http_user_agent_settings(base::WrapUnique(
         new net::StaticHttpUserAgentSettings("en-us,en", options_.user_agent)));
 
-    scoped_ptr<net::HostResolver> host_resolver(
+    std::unique_ptr<net::HostResolver> host_resolver(
         net::HostResolver::CreateDefaultResolver(
             url_request_context_->net_log()));
 
     storage_->set_cert_verifier(net::CertVerifier::CreateDefault());
     storage_->set_transport_security_state(
-        make_scoped_ptr(new net::TransportSecurityState));
+        base::WrapUnique(new net::TransportSecurityState));
     storage_->set_proxy_service(GetProxyService());
     storage_->set_ssl_config_service(new net::SSLConfigServiceDefaults);
     storage_->set_http_auth_handler_factory(
         net::HttpAuthHandlerFactory::CreateDefault(host_resolver.get()));
     storage_->set_http_server_properties(
-        make_scoped_ptr(new net::HttpServerPropertiesImpl()));
+        base::WrapUnique(new net::HttpServerPropertiesImpl()));
 
     base::FilePath cache_path = base_path_.Append(FILE_PATH_LITERAL("Cache"));
-    scoped_ptr<net::HttpCache::DefaultBackend> main_backend(
+    std::unique_ptr<net::HttpCache::DefaultBackend> main_backend(
         new net::HttpCache::DefaultBackend(
             net::DISK_CACHE, net::CACHE_BACKEND_DEFAULT, cache_path, 0,
             content::BrowserThread::GetMessageLoopProxyForThread(
@@ -161,7 +163,7 @@
     network_session_params.ignore_certificate_errors =
         ignore_certificate_errors_;
     if (command_line.HasSwitch(switches::kHostResolverRules)) {
-      scoped_ptr<net::MappedHostResolver> mapped_host_resolver(
+      std::unique_ptr<net::MappedHostResolver> mapped_host_resolver(
           new net::MappedHostResolver(std::move(host_resolver)));
       mapped_host_resolver->SetRulesFromString(
           command_line.GetSwitchValueASCII(switches::kHostResolverRules));
@@ -174,21 +176,21 @@
         url_request_context_->host_resolver();
 
     storage_->set_http_network_session(
-        make_scoped_ptr(new net::HttpNetworkSession(network_session_params)));
-    storage_->set_http_transaction_factory(make_scoped_ptr(new net::HttpCache(
+        base::WrapUnique(new net::HttpNetworkSession(network_session_params)));
+    storage_->set_http_transaction_factory(base::WrapUnique(new net::HttpCache(
         storage_->http_network_session(), std::move(main_backend),
         true /* set_up_quic_server_info */)));
 
-    scoped_ptr<net::URLRequestJobFactoryImpl> job_factory(
+    std::unique_ptr<net::URLRequestJobFactoryImpl> job_factory(
         new net::URLRequestJobFactoryImpl());
 
     InstallProtocolHandlers(job_factory.get(), &protocol_handlers_);
     bool set_protocol = job_factory->SetProtocolHandler(
-        url::kDataScheme, make_scoped_ptr(new net::DataProtocolHandler));
+        url::kDataScheme, base::WrapUnique(new net::DataProtocolHandler));
     DCHECK(set_protocol);
     set_protocol = job_factory->SetProtocolHandler(
         url::kFileScheme,
-        make_scoped_ptr(new net::FileProtocolHandler(
+        base::WrapUnique(new net::FileProtocolHandler(
             content::BrowserThread::GetBlockingPool()
                 ->GetTaskRunnerWithShutdownBehavior(
                     base::SequencedWorkerPool::SKIP_ON_SHUTDOWN))));
@@ -196,12 +198,12 @@
 
     // Set up interceptors in the reverse order so that the last inceptor is at
     // the end of the linked list of job factories.
-    scoped_ptr<net::URLRequestJobFactory> top_job_factory =
+    std::unique_ptr<net::URLRequestJobFactory> top_job_factory =
         std::move(job_factory);
     for (auto i = request_interceptors_.rbegin();
          i != request_interceptors_.rend(); ++i) {
       top_job_factory.reset(new net::URLRequestInterceptingJobFactory(
-          std::move(top_job_factory), make_scoped_ptr(*i)));
+          std::move(top_job_factory), base::WrapUnique(*i)));
     }
     request_interceptors_.weak_clear();
     // Save the head of the job factory list at storage_.
diff --git a/headless/lib/browser/headless_url_request_context_getter.h b/headless/lib/browser/headless_url_request_context_getter.h
index cfd927b..0e5912f 100644
--- a/headless/lib/browser/headless_url_request_context_getter.h
+++ b/headless/lib/browser/headless_url_request_context_getter.h
@@ -5,11 +5,12 @@
 #ifndef HEADLESS_LIB_BROWSER_HEADLESS_URL_REQUEST_CONTEXT_GETTER_H_
 #define HEADLESS_LIB_BROWSER_HEADLESS_URL_REQUEST_CONTEXT_GETTER_H_
 
+#include <memory>
+
 #include "base/compiler_specific.h"
 #include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 #include "content/public/browser/content_browser_client.h"
 #include "headless/public/headless_browser.h"
 #include "net/proxy/proxy_config_service.h"
@@ -54,9 +55,9 @@
  protected:
   ~HeadlessURLRequestContextGetter() override;
 
-  scoped_ptr<net::NetworkDelegate> CreateNetworkDelegate();
-  scoped_ptr<net::ProxyConfigService> GetProxyConfigService();
-  scoped_ptr<net::ProxyService> GetProxyService();
+  std::unique_ptr<net::NetworkDelegate> CreateNetworkDelegate();
+  std::unique_ptr<net::ProxyConfigService> GetProxyConfigService();
+  std::unique_ptr<net::ProxyService> GetProxyService();
 
  private:
   bool ignore_certificate_errors_;
@@ -66,10 +67,10 @@
   net::NetLog* net_log_;
   HeadlessBrowser::Options options_;
 
-  scoped_ptr<net::ProxyConfigService> proxy_config_service_;
-  scoped_ptr<net::NetworkDelegate> network_delegate_;
-  scoped_ptr<net::URLRequestContextStorage> storage_;
-  scoped_ptr<net::URLRequestContext> url_request_context_;
+  std::unique_ptr<net::ProxyConfigService> proxy_config_service_;
+  std::unique_ptr<net::NetworkDelegate> network_delegate_;
+  std::unique_ptr<net::URLRequestContextStorage> storage_;
+  std::unique_ptr<net::URLRequestContext> url_request_context_;
   content::ProtocolHandlerMap protocol_handlers_;
   content::URLRequestInterceptorScopedVector request_interceptors_;
 
diff --git a/headless/lib/browser/headless_web_contents_impl.cc b/headless/lib/browser/headless_web_contents_impl.cc
index 1977e7f..04c00e54 100644
--- a/headless/lib/browser/headless_web_contents_impl.cc
+++ b/headless/lib/browser/headless_web_contents_impl.cc
@@ -5,6 +5,7 @@
 #include "headless/lib/browser/headless_web_contents_impl.h"
 
 #include "base/bind.h"
+#include "base/memory/ptr_util.h"
 #include "base/memory/weak_ptr.h"
 #include "base/trace_event/trace_event.h"
 #include "content/public/browser/navigation_handle.h"
@@ -94,7 +95,7 @@
 
 void HeadlessWebContentsImpl::AddObserver(Observer* observer) {
   DCHECK(observer_map_.find(observer) == observer_map_.end());
-  observer_map_[observer] = make_scoped_ptr(
+  observer_map_[observer] = base::WrapUnique(
       new WebContentsObserverAdapter(web_contents_.get(), observer));
 }
 
diff --git a/headless/lib/browser/headless_web_contents_impl.h b/headless/lib/browser/headless_web_contents_impl.h
index b272bfe..2bbaeff 100644
--- a/headless/lib/browser/headless_web_contents_impl.h
+++ b/headless/lib/browser/headless_web_contents_impl.h
@@ -7,6 +7,7 @@
 
 #include "headless/public/headless_web_contents.h"
 
+#include <memory>
 #include <unordered_map>
 
 namespace aura {
@@ -44,12 +45,12 @@
                           const gfx::Size& initial_size);
 
   class Delegate;
-  scoped_ptr<Delegate> web_contents_delegate_;
-  scoped_ptr<content::WebContents> web_contents_;
+  std::unique_ptr<Delegate> web_contents_delegate_;
+  std::unique_ptr<content::WebContents> web_contents_;
 
   using ObserverMap =
       std::unordered_map<HeadlessWebContents::Observer*,
-                         scoped_ptr<WebContentsObserverAdapter>>;
+                         std::unique_ptr<WebContentsObserverAdapter>>;
   ObserverMap observer_map_;
 
   DISALLOW_COPY_AND_ASSIGN(HeadlessWebContentsImpl);
diff --git a/headless/lib/headless_browser_browsertest.cc b/headless/lib/headless_browser_browsertest.cc
index 93c9cbf..be3dffa 100644
--- a/headless/lib/headless_browser_browsertest.cc
+++ b/headless/lib/headless_browser_browsertest.cc
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include <memory>
+
 #include "content/public/test/browser_test.h"
 #include "headless/public/headless_browser.h"
 #include "headless/public/headless_web_contents.h"
@@ -13,7 +15,7 @@
 namespace headless {
 
 IN_PROC_BROWSER_TEST_F(HeadlessBrowserTest, CreateAndDestroyWebContents) {
-  scoped_ptr<HeadlessWebContents> web_contents =
+  std::unique_ptr<HeadlessWebContents> web_contents =
       browser()->CreateWebContents(gfx::Size(800, 600));
   EXPECT_TRUE(web_contents);
   // TODO(skyostil): Verify viewport dimensions once we can.
@@ -49,7 +51,7 @@
   builder.SetProxyServer(proxy_server()->host_port_pair());
   SetBrowserOptions(builder.Build());
 
-  scoped_ptr<HeadlessWebContents> web_contents =
+  std::unique_ptr<HeadlessWebContents> web_contents =
       browser()->CreateWebContents(gfx::Size(800, 600));
 
   // Load a page which doesn't actually exist, but for which the our proxy
diff --git a/headless/lib/headless_content_main_delegate.cc b/headless/lib/headless_content_main_delegate.cc
index 64e91c0..245341f 100644
--- a/headless/lib/headless_content_main_delegate.cc
+++ b/headless/lib/headless_content_main_delegate.cc
@@ -27,7 +27,7 @@
 }  // namespace
 
 HeadlessContentMainDelegate::HeadlessContentMainDelegate(
-    scoped_ptr<HeadlessBrowserImpl> browser)
+    std::unique_ptr<HeadlessBrowserImpl> browser)
     : content_client_(browser->options()), browser_(std::move(browser)) {
   DCHECK(!g_current_headless_content_main_delegate);
   g_current_headless_content_main_delegate = this;
@@ -69,7 +69,7 @@
   base::trace_event::TraceLog::GetInstance()->SetProcessSortIndex(
       kTraceEventBrowserProcessSortIndex);
 
-  scoped_ptr<content::BrowserMainRunner> browser_runner(
+  std::unique_ptr<content::BrowserMainRunner> browser_runner(
       content::BrowserMainRunner::Create());
 
   int exit_code = browser_runner->Initialize(main_function_params);
diff --git a/headless/lib/headless_content_main_delegate.h b/headless/lib/headless_content_main_delegate.h
index b829d0e2..00a20cf 100644
--- a/headless/lib/headless_content_main_delegate.h
+++ b/headless/lib/headless_content_main_delegate.h
@@ -5,9 +5,10 @@
 #ifndef HEADLESS_LIB_HEADLESS_CONTENT_MAIN_DELEGATE_H_
 #define HEADLESS_LIB_HEADLESS_CONTENT_MAIN_DELEGATE_H_
 
+#include <memory>
+
 #include "base/compiler_specific.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "content/public/app/content_main_delegate.h"
 #include "headless/lib/headless_content_client.h"
 
@@ -24,7 +25,8 @@
 
 class HeadlessContentMainDelegate : public content::ContentMainDelegate {
  public:
-  explicit HeadlessContentMainDelegate(scoped_ptr<HeadlessBrowserImpl> browser);
+  explicit HeadlessContentMainDelegate(
+      std::unique_ptr<HeadlessBrowserImpl> browser);
   ~HeadlessContentMainDelegate() override;
 
   // content::ContentMainDelegate implementation:
@@ -47,12 +49,12 @@
 
   static HeadlessContentMainDelegate* GetInstance();
 
-  scoped_ptr<HeadlessContentBrowserClient> browser_client_;
-  scoped_ptr<HeadlessContentRendererClient> renderer_client_;
-  scoped_ptr<HeadlessContentUtilityClient> utility_client_;
+  std::unique_ptr<HeadlessContentBrowserClient> browser_client_;
+  std::unique_ptr<HeadlessContentRendererClient> renderer_client_;
+  std::unique_ptr<HeadlessContentUtilityClient> utility_client_;
   HeadlessContentClient content_client_;
 
-  scoped_ptr<HeadlessBrowserImpl> browser_;
+  std::unique_ptr<HeadlessBrowserImpl> browser_;
 
   DISALLOW_COPY_AND_ASSIGN(HeadlessContentMainDelegate);
 };
diff --git a/headless/lib/headless_web_contents_browsertest.cc b/headless/lib/headless_web_contents_browsertest.cc
index fcef04bc..863bcdc 100644
--- a/headless/lib/headless_web_contents_browsertest.cc
+++ b/headless/lib/headless_web_contents_browsertest.cc
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include <memory>
+
 #include "content/public/test/browser_test.h"
 #include "headless/public/headless_browser.h"
 #include "headless/public/headless_web_contents.h"
@@ -16,14 +18,14 @@
 
 IN_PROC_BROWSER_TEST_F(HeadlessWebContentsTest, Navigation) {
   EXPECT_TRUE(embedded_test_server()->Start());
-  scoped_ptr<HeadlessWebContents> web_contents =
+  std::unique_ptr<HeadlessWebContents> web_contents =
       browser()->CreateWebContents(gfx::Size(800, 600));
   EXPECT_TRUE(NavigateAndWaitForLoad(
       web_contents.get(), embedded_test_server()->GetURL("/hello.html")));
 }
 
 IN_PROC_BROWSER_TEST_F(HeadlessWebContentsTest, NavigationWithBadURL) {
-  scoped_ptr<HeadlessWebContents> web_contents =
+  std::unique_ptr<HeadlessWebContents> web_contents =
       browser()->CreateWebContents(gfx::Size(800, 600));
   GURL bad_url("not_valid");
   EXPECT_FALSE(web_contents->OpenURL(bad_url));
diff --git a/headless/public/headless_browser.h b/headless/public/headless_browser.h
index 8a38a262..7539407 100644
--- a/headless/public/headless_browser.h
+++ b/headless/public/headless_browser.h
@@ -5,12 +5,12 @@
 #ifndef HEADLESS_PUBLIC_HEADLESS_BROWSER_H_
 #define HEADLESS_PUBLIC_HEADLESS_BROWSER_H_
 
+#include <memory>
 #include <string>
 
 #include "base/callback.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 #include "headless/public/headless_export.h"
 #include "net/base/host_port_pair.h"
 #include "net/base/ip_endpoint.h"
@@ -36,7 +36,7 @@
   struct Options;
 
   // Create a new browser tab. |size| is in physical pixels.
-  virtual scoped_ptr<HeadlessWebContents> CreateWebContents(
+  virtual std::unique_ptr<HeadlessWebContents> CreateWebContents(
       const gfx::Size& size) = 0;
 
   // Returns a task runner for submitting work to the browser main thread.
diff --git a/headless/test/headless_test_launcher.cc b/headless/test/headless_test_launcher.cc
index c8ab7163..13e4f6c9 100644
--- a/headless/test/headless_test_launcher.cc
+++ b/headless/test/headless_test_launcher.cc
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include <memory>
+
 #include "base/bind.h"
 #include "base/macros.h"
 #include "base/sys_info.h"
@@ -47,7 +49,7 @@
   content::ContentMainDelegate* CreateContentMainDelegate() override {
     // Use HeadlessBrowserTest::SetBrowserOptions to override these defaults.
     HeadlessBrowser::Options::Builder options_builder;
-    scoped_ptr<HeadlessBrowserImpl> browser(
+    std::unique_ptr<HeadlessBrowserImpl> browser(
         new HeadlessBrowserImplForTest(options_builder.Build()));
     return new HeadlessContentMainDelegate(std::move(browser));
   }
diff --git a/ipc/attachment_broker_mac_unittest.cc b/ipc/attachment_broker_mac_unittest.cc
index 98340fa..61d41d7 100644
--- a/ipc/attachment_broker_mac_unittest.cc
+++ b/ipc/attachment_broker_mac_unittest.cc
@@ -598,10 +598,6 @@
 // it. The SharedMemoryHandle is sent to the privileged process using Chrome
 // IPC. The privileged process checks that it received the same memory region.
 TEST_F(IPCAttachmentBrokerMacTest, SendSharedMemoryHandle) {
-  // Mach-based SharedMemory isn't support on OSX 10.6.
-  if (base::mac::IsOSSnowLeopard())
-    return;
-
   CommonSetUp("SendSharedMemoryHandle");
 
   SendMessage1(kDataBuffer1);
@@ -624,10 +620,6 @@
 // Similar to SendSharedMemoryHandle, but sends a very long shared memory
 // region.
 TEST_F(IPCAttachmentBrokerMacTest, SendSharedMemoryHandleLong) {
-  // Mach-based SharedMemory isn't support on OSX 10.6.
-  if (base::mac::IsOSSnowLeopard())
-    return;
-
   CommonSetUp("SendSharedMemoryHandleLong");
 
   std::string buffer(1 << 23, 'a');
@@ -652,10 +644,6 @@
 // Similar to SendSharedMemoryHandle, but sends two different shared memory
 // regions in two messages.
 TEST_F(IPCAttachmentBrokerMacTest, SendTwoMessagesDifferentSharedMemoryHandle) {
-  // Mach-based SharedMemory isn't support on OSX 10.6.
-  if (base::mac::IsOSSnowLeopard())
-    return;
-
   CommonSetUp("SendTwoMessagesDifferentSharedMemoryHandle");
 
   SendMessage1(kDataBuffer1);
@@ -688,10 +676,6 @@
 // Similar to SendSharedMemoryHandle, but sends the same shared memory region in
 // two messages.
 TEST_F(IPCAttachmentBrokerMacTest, SendTwoMessagesSameSharedMemoryHandle) {
-  // Mach-based SharedMemory isn't support on OSX 10.6.
-  if (base::mac::IsOSSnowLeopard())
-    return;
-
   CommonSetUp("SendTwoMessagesSameSharedMemoryHandle");
 
   {
@@ -738,10 +722,6 @@
 // memory regions.
 TEST_F(IPCAttachmentBrokerMacTest,
        SendOneMessageWithTwoDifferentSharedMemoryHandles) {
-  // Mach-based SharedMemory isn't support on OSX 10.6.
-  if (base::mac::IsOSSnowLeopard())
-    return;
-
   CommonSetUp("SendOneMessageWithTwoDifferentSharedMemoryHandles");
 
   {
@@ -785,10 +765,6 @@
 // same memory region twice.
 TEST_F(IPCAttachmentBrokerMacTest,
        SendOneMessageWithTwoSameSharedMemoryHandles) {
-  // Mach-based SharedMemory isn't support on OSX 10.6.
-  if (base::mac::IsOSSnowLeopard())
-    return;
-
   CommonSetUp("SendOneMessageWithTwoSameSharedMemoryHandles");
 
   {
@@ -828,10 +804,6 @@
 
 // Sends one message with two Posix FDs and two Mach ports.
 TEST_F(IPCAttachmentBrokerMacTest, SendPosixFDAndMachPort) {
-  // Mach-based SharedMemory isn't support on OSX 10.6.
-  if (base::mac::IsOSSnowLeopard())
-    return;
-
   base::ScopedTempDir temp_dir;
   ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
   base::FilePath fp1, fp2;
@@ -896,10 +868,6 @@
 // process. This is an unrealistic scenario, but simulates an unprivileged
 // process sending an attachment to another unprivileged process.
 TEST_F(IPCAttachmentBrokerMacTest, SendSharedMemoryHandleToSelf) {
-  // Mach-based SharedMemory isn't support on OSX 10.6.
-  if (base::mac::IsOSSnowLeopard())
-    return;
-
   SetBroker(new MockBroker);
   CommonSetUp("SendSharedMemoryHandleToSelf");
 
@@ -958,10 +926,6 @@
 // Similar to SendSharedMemoryHandle, but uses a ChannelProxy instead of a
 // Channel.
 TEST_F(IPCAttachmentBrokerMacTest, SendSharedMemoryHandleChannelProxy) {
-  // Mach-based SharedMemory isn't support on OSX 10.6.
-  if (base::mac::IsOSSnowLeopard())
-    return;
-
   Init("SendSharedMemoryHandleChannelProxy");
   MachPreForkSetUp();
 
@@ -1014,10 +978,6 @@
 // Similar to SendSharedMemoryHandle, but first makes a copy of the handle using
 // ShareToProcess().
 TEST_F(IPCAttachmentBrokerMacTest, ShareToProcess) {
-  // Mach-based SharedMemory isn't support on OSX 10.6.
-  if (base::mac::IsOSSnowLeopard())
-    return;
-
   CommonSetUp("ShareToProcess");
 
   {
@@ -1048,10 +1008,6 @@
 // Similar to ShareToProcess, but instead shares the memory object only with
 // read permissions.
 TEST_F(IPCAttachmentBrokerMacTest, ShareReadOnlyToProcess) {
-  // Mach-based SharedMemory isn't support on OSX 10.6.
-  if (base::mac::IsOSSnowLeopard())
-    return;
-
   CommonSetUp("ShareReadOnlyToProcess");
 
   {
@@ -1101,10 +1057,6 @@
 // Similar to SendSharedMemoryHandleToSelf, but the child process pretends to
 // not have the task port for the parent process.
 TEST_F(IPCAttachmentBrokerMacTest, SendSharedMemoryHandleToSelfDelayedPort) {
-  // Mach-based SharedMemory isn't support on OSX 10.6.
-  if (base::mac::IsOSSnowLeopard())
-    return;
-
   SetBroker(new MockBroker);
   CommonSetUp("SendSharedMemoryHandleToSelfDelayedPort");
 
@@ -1201,10 +1153,6 @@
 // resident memory at different points in time, and that measurement is
 // non-deterministic.
 TEST_F(IPCAttachmentBrokerMacTest, MemoryUsageLargeMessage) {
-  // Mach-based SharedMemory isn't support on OSX 10.6.
-  if (base::mac::IsOSSnowLeopard())
-    return;
-
   CommonSetUp("MemoryUsageLargeMessage");
 
   std::string test_string(g_large_message_size, 'a');
@@ -1255,10 +1203,6 @@
 // resident memory at different points in time, and that measurement is
 // non-deterministic.
 TEST_F(IPCAttachmentBrokerMacTest, MemoryUsageManyMessages) {
-  // Mach-based SharedMemory isn't support on OSX 10.6.
-  if (base::mac::IsOSSnowLeopard())
-    return;
-
   CommonSetUp("MemoryUsageManyMessages");
 
   for (int i = 0; i < g_large_message_count; ++i) {
diff --git a/ipc/attachment_broker_privileged_mac_unittest.cc b/ipc/attachment_broker_privileged_mac_unittest.cc
index dbecc73..53981943 100644
--- a/ipc/attachment_broker_privileged_mac_unittest.cc
+++ b/ipc/attachment_broker_privileged_mac_unittest.cc
@@ -182,10 +182,6 @@
 // The attachment broker inserts a right for a memory object into the
 // destination task.
 TEST_F(AttachmentBrokerPrivilegedMacMultiProcessTest, InsertRight) {
-  // Mach-based SharedMemory isn't support on OSX 10.6.
-  if (base::mac::IsOSSnowLeopard())
-    return;
-
   SetUpChild("InsertRightClient");
   mach_msg_type_number_t original_name_count = GetActiveNameCount();
   IPC::AttachmentBrokerPrivilegedMac broker(&port_provider_);
@@ -250,10 +246,6 @@
 // The attachment broker inserts the right for a memory object into the
 // destination task twice.
 TEST_F(AttachmentBrokerPrivilegedMacMultiProcessTest, InsertSameRightTwice) {
-  // Mach-based SharedMemory isn't support on OSX 10.6.
-  if (base::mac::IsOSSnowLeopard())
-    return;
-
   SetUpChild("InsertSameRightTwiceClient");
   mach_msg_type_number_t original_name_count = GetActiveNameCount();
   IPC::AttachmentBrokerPrivilegedMac broker(&port_provider_);
@@ -347,10 +339,6 @@
 // The attachment broker inserts the rights for two memory objects into the
 // destination task.
 TEST_F(AttachmentBrokerPrivilegedMacMultiProcessTest, InsertTwoRights) {
-  // Mach-based SharedMemory isn't support on OSX 10.6.
-  if (base::mac::IsOSSnowLeopard())
-    return;
-
   SetUpChild("InsertTwoRightsClient");
   mach_msg_type_number_t original_name_count = GetActiveNameCount();
   IPC::AttachmentBrokerPrivilegedMac broker(&port_provider_);
diff --git a/mash/browser_driver/browser_driver_application_delegate.h b/mash/browser_driver/browser_driver_application_delegate.h
index 0c05779..f0b7320 100644
--- a/mash/browser_driver/browser_driver_application_delegate.h
+++ b/mash/browser_driver/browser_driver_application_delegate.h
@@ -11,7 +11,6 @@
 
 #include "base/callback.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "components/mus/public/interfaces/accelerator_registrar.mojom.h"
 #include "mojo/public/cpp/bindings/binding.h"
diff --git a/mash/example/common/mus_views_init.h b/mash/example/common/mus_views_init.h
index aff5dc7..04a02ec 100644
--- a/mash/example/common/mus_views_init.h
+++ b/mash/example/common/mus_views_init.h
@@ -5,8 +5,9 @@
 #ifndef MASH_EXAMPLE_COMMON_MUS_VIEWS_INIT_H_
 #define MASH_EXAMPLE_COMMON_MUS_VIEWS_INIT_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/mus/public/cpp/window_tree_delegate.h"
 #include "components/mus/public/interfaces/window_manager.mojom.h"
 #include "ui/views/mus/aura_init.h"
@@ -45,7 +46,7 @@
 #endif
 
   mojo::ShellConnection* app_;
-  scoped_ptr<views::AuraInit> aura_init_;
+  std::unique_ptr<views::AuraInit> aura_init_;
   mus::mojom::WindowManagerPtr window_manager_;
 
   DISALLOW_COPY_AND_ASSIGN(MUSViewsInit);
diff --git a/mash/example/views_examples/views_examples_application_delegate.h b/mash/example/views_examples/views_examples_application_delegate.h
index 3b4fb112..75523102 100644
--- a/mash/example/views_examples/views_examples_application_delegate.h
+++ b/mash/example/views_examples/views_examples_application_delegate.h
@@ -5,8 +5,9 @@
 #ifndef MASH_EXAMPLE_VIEWS_EXAMPLES_APPLICATION_DELEGATE_H_
 #define MASH_EXAMPLE_VIEWS_EXAMPLES_APPLICATION_DELEGATE_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "mojo/services/tracing/public/cpp/tracing_impl.h"
 #include "mojo/shell/public/cpp/shell_client.h"
 
@@ -27,7 +28,7 @@
 
   mojo::TracingImpl tracing_;
 
-  scoped_ptr<views::AuraInit> aura_init_;
+  std::unique_ptr<views::AuraInit> aura_init_;
 
   DISALLOW_COPY_AND_ASSIGN(ViewsExamplesApplicationDelegate);
 };
diff --git a/mash/example/window_type_launcher/main.cc b/mash/example/window_type_launcher/main.cc
index 28750b7..da04745d7 100644
--- a/mash/example/window_type_launcher/main.cc
+++ b/mash/example/window_type_launcher/main.cc
@@ -8,7 +8,6 @@
 #include "base/command_line.h"
 #include "base/debug/stack_trace.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/message_loop/message_loop.h"
 #include "base/process/launch.h"
 #include "base/threading/thread.h"
diff --git a/mash/example/window_type_launcher/window_type_launcher.cc b/mash/example/window_type_launcher/window_type_launcher.cc
index 0547e84..6b65961 100644
--- a/mash/example/window_type_launcher/window_type_launcher.cc
+++ b/mash/example/window_type_launcher/window_type_launcher.cc
@@ -360,7 +360,7 @@
   views::LabelButton* examples_button_;
   views::LabelButton* show_hide_window_button_;
   views::LabelButton* show_web_notification_;
-  scoped_ptr<views::MenuRunner> menu_runner_;
+  std::unique_ptr<views::MenuRunner> menu_runner_;
 
   DISALLOW_COPY_AND_ASSIGN(WindowTypeLauncherView);
 };
diff --git a/mash/example/window_type_launcher/window_type_launcher.h b/mash/example/window_type_launcher/window_type_launcher.h
index fd05874..c712ed4 100644
--- a/mash/example/window_type_launcher/window_type_launcher.h
+++ b/mash/example/window_type_launcher/window_type_launcher.h
@@ -5,8 +5,9 @@
 #ifndef MASH_EXAMPLE_WINDOW_TYPE_LAUNCHER_WINDOW_TYPE_LAUNCHER_H_
 #define MASH_EXAMPLE_WINDOW_TYPE_LAUNCHER_WINDOW_TYPE_LAUNCHER_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "mojo/shell/public/cpp/shell_client.h"
 
 namespace views {
@@ -24,7 +25,7 @@
                   uint32_t id) override;
   bool ShellConnectionLost() override;
 
-  scoped_ptr<views::AuraInit> aura_init_;
+  std::unique_ptr<views::AuraInit> aura_init_;
 
   DISALLOW_COPY_AND_ASSIGN(WindowTypeLauncher);
 };
diff --git a/mash/init/init.cc b/mash/init/init.cc
index 118482a9..a0ecb2e 100644
--- a/mash/init/init.cc
+++ b/mash/init/init.cc
@@ -37,7 +37,7 @@
                         const mojo::String& user_id) {
   if (user_services_.find(user_id) == user_services_.end()) {
     mojo::Connector::ConnectParams params(mojo::Identity(name, user_id));
-    scoped_ptr<mojo::Connection> connection = connector_->Connect(&params);
+    std::unique_ptr<mojo::Connection> connection = connector_->Connect(&params);
     connection->SetConnectionLostClosure(
         base::Bind(&Init::UserServiceQuit, base::Unretained(this), user_id));
     user_services_[user_id] = std::move(connection);
diff --git a/mash/init/init.h b/mash/init/init.h
index 7f27a6d..2905375 100644
--- a/mash/init/init.h
+++ b/mash/init/init.h
@@ -6,10 +6,10 @@
 #define MASH_INIT_INIT_H_
 
 #include <map>
+#include <memory>
 
 #include "base/callback.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "mash/init/public/interfaces/init.mojom.h"
 #include "mojo/public/cpp/bindings/binding_set.h"
 #include "mojo/shell/public/cpp/connector.h"
@@ -51,9 +51,9 @@
   void StartLogin();
 
   mojo::Connector* connector_;
-  scoped_ptr<mojo::Connection> login_connection_;
+  std::unique_ptr<mojo::Connection> login_connection_;
   mojo::BindingSet<mojom::Init> init_bindings_;
-  std::map<std::string, scoped_ptr<mojo::Connection>> user_services_;
+  std::map<std::string, std::unique_ptr<mojo::Connection>> user_services_;
 
   DISALLOW_COPY_AND_ASSIGN(Init);
 };
diff --git a/mash/login/login.cc b/mash/login/login.cc
index 78cddd9..1149493d 100644
--- a/mash/login/login.cc
+++ b/mash/login/login.cc
@@ -5,6 +5,7 @@
 #include "mash/login/login.h"
 
 #include <map>
+#include <memory>
 
 #include "base/guid.h"
 #include "base/macros.h"
@@ -123,7 +124,7 @@
   const std::string user_id_2_;
   views::LabelButton* login_button_1_;
   views::LabelButton* login_button_2_;
-  scoped_ptr<mojo::Connection> window_manager_connection_;
+  std::unique_ptr<mojo::Connection> window_manager_connection_;
 
   DISALLOW_COPY_AND_ASSIGN(UI);
 };
@@ -177,10 +178,10 @@
 
   mojo::Connector* connector_;
   mojo::TracingImpl tracing_;
-  scoped_ptr<views::AuraInit> aura_init_;
+  std::unique_ptr<views::AuraInit> aura_init_;
   mojo::BindingSet<mojom::Login> bindings_;
   mus::mojom::UserAccessManagerPtr user_access_manager_;
-  scoped_ptr<mojo::Connection> window_manager_connection_;
+  std::unique_ptr<mojo::Connection> window_manager_connection_;
 
   DISALLOW_COPY_AND_ASSIGN(Login);
 };
diff --git a/mash/quick_launch/quick_launch_application.cc b/mash/quick_launch/quick_launch_application.cc
index 1fa54e2e..9e26168f 100644
--- a/mash/quick_launch/quick_launch_application.cc
+++ b/mash/quick_launch/quick_launch_application.cc
@@ -130,7 +130,7 @@
 
   mojo::Connector* connector_;
   views::Textfield* prompt_;
-  std::vector<scoped_ptr<mojo::Connection>> connections_;
+  std::vector<std::unique_ptr<mojo::Connection>> connections_;
   catalog::mojom::CatalogPtr catalog_;
   std::set<base::string16> app_names_;
   bool suggestion_rejected_ = false;
diff --git a/mash/quick_launch/quick_launch_application.h b/mash/quick_launch/quick_launch_application.h
index 303e520..0057e9c 100644
--- a/mash/quick_launch/quick_launch_application.h
+++ b/mash/quick_launch/quick_launch_application.h
@@ -5,8 +5,9 @@
 #ifndef MASH_QUICK_LAUNCH_QUICK_LAUNCH_APPLICATION_H_
 #define MASH_QUICK_LAUNCH_QUICK_LAUNCH_APPLICATION_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "mojo/services/catalog/public/interfaces/catalog.mojom.h"
 #include "mojo/services/tracing/public/cpp/tracing_impl.h"
 #include "mojo/shell/public/cpp/shell_client.h"
@@ -30,7 +31,7 @@
                   uint32_t id) override;
 
   mojo::TracingImpl tracing_;
-  scoped_ptr<views::AuraInit> aura_init_;
+  std::unique_ptr<views::AuraInit> aura_init_;
 
   DISALLOW_COPY_AND_ASSIGN(QuickLaunchApplication);
 };
diff --git a/mash/screenlock/screenlock.h b/mash/screenlock/screenlock.h
index 3808f5a..dc2f80f 100644
--- a/mash/screenlock/screenlock.h
+++ b/mash/screenlock/screenlock.h
@@ -6,9 +6,9 @@
 #define MASH_SCREENLOCK_SCREENLOCK_H_
 
 #include <map>
+#include <memory>
 
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "mash/session/public/interfaces/session.mojom.h"
 #include "mojo/public/cpp/bindings/binding_set.h"
 #include "mojo/services/tracing/public/cpp/tracing_impl.h"
@@ -37,7 +37,7 @@
   void ScreenlockStateChanged(bool locked) override;
 
   mojo::TracingImpl tracing_;
-  scoped_ptr<views::AuraInit> aura_init_;
+  std::unique_ptr<views::AuraInit> aura_init_;
   mojo::BindingSet<session::mojom::ScreenlockStateListener> bindings_;
 
   DISALLOW_COPY_AND_ASSIGN(Screenlock);
diff --git a/mash/session/session.cc b/mash/session/session.cc
index c739db0..0e5a142 100644
--- a/mash/session/session.cc
+++ b/mash/session/session.cc
@@ -125,7 +125,7 @@
     const base::Closure& restart_callback) {
   // TODO(beng): This would be the place to insert logic that counted restarts
   //             to avoid infinite crash-restart loops.
-  scoped_ptr<mojo::Connection> connection = connector_->Connect(url);
+  std::unique_ptr<mojo::Connection> connection = connector_->Connect(url);
   // Note: |connection| may be null if we've lost our connection to the shell.
   if (connection) {
     connection->SetConnectionLostClosure(restart_callback);
diff --git a/mash/session/session.h b/mash/session/session.h
index a2a133b..992b7c0 100644
--- a/mash/session/session.h
+++ b/mash/session/session.h
@@ -6,10 +6,10 @@
 #define MASH_SESSION_SESSION_H_
 
 #include <map>
+#include <memory>
 
 #include "base/callback.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "mash/session/public/interfaces/session.mojom.h"
 #include "mojo/public/cpp/bindings/binding_set.h"
 #include "mojo/public/cpp/bindings/interface_ptr_set.h"
@@ -63,7 +63,7 @@
                                const base::Closure& restart_callback);
 
   mojo::Connector* connector_;
-  std::map<std::string, scoped_ptr<mojo::Connection>> connections_;
+  std::map<std::string, std::unique_ptr<mojo::Connection>> connections_;
   bool screen_locked_;
   mojo::BindingSet<mojom::Session> bindings_;
   mojo::InterfacePtrSet<mojom::ScreenlockStateListener> screenlock_listeners_;
diff --git a/mash/task_viewer/task_viewer.cc b/mash/task_viewer/task_viewer.cc
index 6e3b018..754d54e 100644
--- a/mash/task_viewer/task_viewer.cc
+++ b/mash/task_viewer/task_viewer.cc
@@ -9,6 +9,7 @@
 
 #include "base/bind.h"
 #include "base/macros.h"
+#include "base/memory/ptr_util.h"
 #include "base/memory/weak_ptr.h"
 #include "base/process/process.h"
 #include "base/strings/string_number_conversions.h"
@@ -203,7 +204,7 @@
   }
 
   void InsertInstance(uint32_t id, const std::string& url, uint32_t pid) {
-    instances_.push_back(make_scoped_ptr(new InstanceInfo(id, url, pid)));
+    instances_.push_back(base::WrapUnique(new InstanceInfo(id, url, pid)));
   }
 
   void OnGotCatalogEntries(
@@ -258,7 +259,7 @@
   views::LabelButton* kill_button_;
   ui::TableModelObserver* observer_;
 
-  std::vector<scoped_ptr<InstanceInfo>> instances_;
+  std::vector<std::unique_ptr<InstanceInfo>> instances_;
 
   base::WeakPtrFactory<TaskViewerContents> weak_ptr_factory_;
 
diff --git a/mash/task_viewer/task_viewer.h b/mash/task_viewer/task_viewer.h
index e5eeae09..0cc41c1 100644
--- a/mash/task_viewer/task_viewer.h
+++ b/mash/task_viewer/task_viewer.h
@@ -6,10 +6,10 @@
 #define MASH_TASK_VIEWER_TASK_VIEWER_H_
 
 #include <map>
+#include <memory>
 
 #include "base/callback.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "mojo/services/tracing/public/cpp/tracing_impl.h"
 #include "mojo/shell/public/cpp/shell_client.h"
 
@@ -32,7 +32,7 @@
                   uint32_t id) override;
 
   mojo::TracingImpl tracing_;
-  scoped_ptr<views::AuraInit> aura_init_;
+  std::unique_ptr<views::AuraInit> aura_init_;
 
   DISALLOW_COPY_AND_ASSIGN(TaskViewer);
 };
diff --git a/mash/wm/accelerator_registrar_unittest.cc b/mash/wm/accelerator_registrar_unittest.cc
index fa755bc1..6c48d80 100644
--- a/mash/wm/accelerator_registrar_unittest.cc
+++ b/mash/wm/accelerator_registrar_unittest.cc
@@ -4,6 +4,8 @@
 
 #include <stdint.h>
 
+#include <memory>
+
 #include "base/bind.h"
 #include "base/macros.h"
 #include "base/run_loop.h"
@@ -57,7 +59,7 @@
   void OnAccelerator(uint32_t id, mus::mojom::EventPtr event) override {}
 
   std::set<uint32_t> installed_accelerators_;
-  scoped_ptr<base::RunLoop> run_loop_;
+  std::unique_ptr<base::RunLoop> run_loop_;
   mojo::Binding<AcceleratorHandler> binding_;
   AcceleratorRegistrarPtr registrar_;
   bool add_accelerator_result_;
diff --git a/mash/wm/frame/caption_buttons/frame_caption_button.h b/mash/wm/frame/caption_buttons/frame_caption_button.h
index 6708327..9f81607 100644
--- a/mash/wm/frame/caption_buttons/frame_caption_button.h
+++ b/mash/wm/frame/caption_buttons/frame_caption_button.h
@@ -5,8 +5,9 @@
 #ifndef MASH_WM_FRAME_CAPTION_BUTTONS_FRAME_CAPTION_BUTTON_H_
 #define MASH_WM_FRAME_CAPTION_BUTTONS_FRAME_CAPTION_BUTTON_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "mash/wm/frame/caption_buttons/caption_button_types.h"
 #include "ui/gfx/image/image_skia.h"
 #include "ui/views/controls/button/custom_button.h"
@@ -91,7 +92,7 @@
 
   // Crossfade animation started when the button's images are changed by
   // SetImages().
-  scoped_ptr<gfx::SlideAnimation> swap_images_animation_;
+  std::unique_ptr<gfx::SlideAnimation> swap_images_animation_;
 
   DISALLOW_COPY_AND_ASSIGN(FrameCaptionButton);
 };
diff --git a/mash/wm/frame/caption_buttons/frame_caption_button_container_view.h b/mash/wm/frame/caption_buttons/frame_caption_button_container_view.h
index 73ae6a8..45f489e 100644
--- a/mash/wm/frame/caption_buttons/frame_caption_button_container_view.h
+++ b/mash/wm/frame/caption_buttons/frame_caption_button_container_view.h
@@ -6,6 +6,7 @@
 #define MASH_WM_FRAME_CAPTION_BUTTONS_FRAME_CAPTION_BUTTON_CONTAINER_VIEW_H_
 
 #include <map>
+#include <memory>
 
 #include "base/macros.h"
 #include "mash/wm/frame/caption_buttons/caption_button_types.h"
@@ -124,7 +125,7 @@
 
   // Animation that affects the position of |minimize_button_| and the
   // visibility of |size_button_|.
-  scoped_ptr<gfx::SlideAnimation> maximize_mode_animation_;
+  std::unique_ptr<gfx::SlideAnimation> maximize_mode_animation_;
 
   DISALLOW_COPY_AND_ASSIGN(FrameCaptionButtonContainerView);
 };
diff --git a/mash/wm/frame/default_header_painter.h b/mash/wm/frame/default_header_painter.h
index c2763e69..61d2c6e 100644
--- a/mash/wm/frame/default_header_painter.h
+++ b/mash/wm/frame/default_header_painter.h
@@ -5,8 +5,9 @@
 #ifndef MASH_WM_FRAME_DEFAULT_HEADER_PAINTER_H_
 #define MASH_WM_FRAME_DEFAULT_HEADER_PAINTER_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "mash/wm/frame/header_painter.h"
 #include "third_party/skia/include/core/SkColor.h"
 #include "ui/gfx/animation/animation_delegate.h"
@@ -105,7 +106,7 @@
   // Whether the header is painted for the first time.
   bool initial_paint_;
 
-  scoped_ptr<gfx::SlideAnimation> activation_animation_;
+  std::unique_ptr<gfx::SlideAnimation> activation_animation_;
 
   DISALLOW_COPY_AND_ASSIGN(DefaultHeaderPainter);
 };
diff --git a/mash/wm/frame/move_event_handler.cc b/mash/wm/frame/move_event_handler.cc
index 10ab376d..c7165bad 100644
--- a/mash/wm/frame/move_event_handler.cc
+++ b/mash/wm/frame/move_event_handler.cc
@@ -66,7 +66,7 @@
 
   // TODO(moshayedi): no need for this once MoveEventHandler directly receives
   // pointer events.
-  scoped_ptr<ui::PointerEvent> pointer_event;
+  std::unique_ptr<ui::PointerEvent> pointer_event;
   if (event->IsMouseEvent())
     pointer_event.reset(new ui::PointerEvent(*event->AsMouseEvent()));
   else
diff --git a/mash/wm/frame/move_event_handler.h b/mash/wm/frame/move_event_handler.h
index 65851ec..b14017c 100644
--- a/mash/wm/frame/move_event_handler.h
+++ b/mash/wm/frame/move_event_handler.h
@@ -5,8 +5,9 @@
 #ifndef MASH_WM_FRAME_MOVE_EVENT_HANDLER_H_
 #define MASH_WM_FRAME_MOVE_EVENT_HANDLER_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "ui/aura/window_observer.h"
 #include "ui/events/event_handler.h"
 
@@ -51,7 +52,7 @@
   mus::Window* mus_window_;
   aura::Window* aura_window_;
   aura::Window* root_window_;
-  scoped_ptr<MoveLoop> move_loop_;
+  std::unique_ptr<MoveLoop> move_loop_;
 
   DISALLOW_COPY_AND_ASSIGN(MoveEventHandler);
 };
diff --git a/mash/wm/frame/move_loop.cc b/mash/wm/frame/move_loop.cc
index 0645790..5aabff70 100644
--- a/mash/wm/frame/move_loop.cc
+++ b/mash/wm/frame/move_loop.cc
@@ -5,6 +5,7 @@
 #include "mash/wm/frame/move_loop.h"
 
 #include "base/auto_reset.h"
+#include "base/memory/ptr_util.h"
 #include "components/mus/public/cpp/window.h"
 #include "components/mus/public/interfaces/input_event_constants.mojom.h"
 #include "mash/wm/property_util.h"
@@ -31,9 +32,9 @@
 }
 
 // static
-scoped_ptr<MoveLoop> MoveLoop::Create(mus::Window* target,
-                                      int ht_location,
-                                      const ui::PointerEvent& event) {
+std::unique_ptr<MoveLoop> MoveLoop::Create(mus::Window* target,
+                                           int ht_location,
+                                           const ui::PointerEvent& event) {
   DCHECK_EQ(event.type(), ui::ET_POINTER_DOWN);
   // Start a move on left mouse, or any other type of pointer.
   if (event.IsMousePointerEvent() &&
@@ -47,7 +48,7 @@
   if (!DetermineType(ht_location, &type, &h_loc, &v_loc))
     return nullptr;
 
-  return make_scoped_ptr(new MoveLoop(target, event, type, h_loc, v_loc));
+  return base::WrapUnique(new MoveLoop(target, event, type, h_loc, v_loc));
 }
 
 MoveLoop::MoveResult MoveLoop::Move(const ui::PointerEvent& event) {
diff --git a/mash/wm/frame/move_loop.h b/mash/wm/frame/move_loop.h
index 314592b4..13e50f48 100644
--- a/mash/wm/frame/move_loop.h
+++ b/mash/wm/frame/move_loop.h
@@ -7,8 +7,9 @@
 
 #include <stdint.h>
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/mus/public/cpp/window_observer.h"
 #include "components/mus/public/interfaces/input_events.mojom.h"
 #include "ui/gfx/geometry/point.h"
@@ -50,9 +51,9 @@
   // and returns a new MoveLoop. All events should be funneled to the MoveLoop
   // until done (Move()). |ht_location| is one of the constants defined by
   // HitTestCompat.
-  static scoped_ptr<MoveLoop> Create(mus::Window* target,
-                                     int ht_location,
-                                     const ui::PointerEvent& event);
+  static std::unique_ptr<MoveLoop> Create(mus::Window* target,
+                                          int ht_location,
+                                          const ui::PointerEvent& event);
 
   // Processes an event for a move/resize loop.
   MoveResult Move(const ui::PointerEvent& event);
diff --git a/mash/wm/frame/move_loop_unittest.cc b/mash/wm/frame/move_loop_unittest.cc
index 4ddaca6b..387ab8e4d 100644
--- a/mash/wm/frame/move_loop_unittest.cc
+++ b/mash/wm/frame/move_loop_unittest.cc
@@ -49,7 +49,7 @@
     ui::PointerEvent pointer_down_event(
         ui::ET_POINTER_DOWN, ui::EventPointerType::POINTER_TYPE_TOUCH,
         pointer_location, pointer_location, ui::EF_NONE, 1, base::TimeDelta());
-    scoped_ptr<MoveLoop> move_loop =
+    std::unique_ptr<MoveLoop> move_loop =
         MoveLoop::Create(&window, data[i].ht_location, pointer_down_event);
     ASSERT_TRUE(move_loop.get()) << i;
     pointer_location.Offset(data[i].delta_x, data[i].delta_y);
diff --git a/mash/wm/frame/non_client_frame_view_mash.cc b/mash/wm/frame/non_client_frame_view_mash.cc
index a3ebeb1..320d768 100644
--- a/mash/wm/frame/non_client_frame_view_mash.cc
+++ b/mash/wm/frame/non_client_frame_view_mash.cc
@@ -5,6 +5,7 @@
 #include "mash/wm/frame/non_client_frame_view_mash.h"
 
 #include <algorithm>
+#include <memory>
 #include <vector>
 
 #include "base/macros.h"
@@ -70,7 +71,7 @@
   views::Widget* frame_;
 
   // Helper for painting the header.
-  scoped_ptr<DefaultHeaderPainter> header_painter_;
+  std::unique_ptr<DefaultHeaderPainter> header_painter_;
 
   // View which contains the window caption buttons.
   FrameCaptionButtonContainerView* caption_button_container_;
diff --git a/mash/wm/frame/non_client_frame_view_mash.h b/mash/wm/frame/non_client_frame_view_mash.h
index e5f5a94..a8c2f805 100644
--- a/mash/wm/frame/non_client_frame_view_mash.h
+++ b/mash/wm/frame/non_client_frame_view_mash.h
@@ -6,7 +6,6 @@
 #define MASH_WM_FRAME_NON_CLIENT_FRAME_VIEW_MASH_H_
 
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/mus/public/cpp/window_observer.h"
 #include "components/mus/public/cpp/window_tree_connection_observer.h"
 #include "third_party/skia/include/core/SkColor.h"
diff --git a/mash/wm/layout_manager_unittest.cc b/mash/wm/layout_manager_unittest.cc
index 1b6b2d0..1ddbfe3 100644
--- a/mash/wm/layout_manager_unittest.cc
+++ b/mash/wm/layout_manager_unittest.cc
@@ -4,6 +4,8 @@
 
 #include "mash/wm/layout_manager.h"
 
+#include <memory>
+
 #include "base/macros.h"
 #include "components/mus/public/cpp/tests/test_window.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -36,7 +38,7 @@
 
 // Tests that owning window can be destroyed before the layout manager.
 TEST(LayoutManagerTest, OwningWindowDestroyedFirst) {
-  scoped_ptr<mus::TestWindow> parent(new mus::TestWindow(1));
+  std::unique_ptr<mus::TestWindow> parent(new mus::TestWindow(1));
   mus::TestWindow child(2);
   TestLayoutManager layout_manager(parent.get());
   parent->AddChild(&child);
@@ -49,7 +51,8 @@
 TEST(LayoutManagerTest, LayoutManagerDestroyedFirst) {
   mus::TestWindow parent(1);
   mus::TestWindow child(2);
-  scoped_ptr<TestLayoutManager> layout_manager(new TestLayoutManager(&parent));
+  std::unique_ptr<TestLayoutManager> layout_manager(
+      new TestLayoutManager(&parent));
   parent.AddChild(&child);
   EXPECT_TRUE(layout_manager->GetAndResetLayoutCalled());
 
diff --git a/mash/wm/non_client_frame_controller.cc b/mash/wm/non_client_frame_controller.cc
index 157eaf0..f62cb153b 100644
--- a/mash/wm/non_client_frame_controller.cc
+++ b/mash/wm/non_client_frame_controller.cc
@@ -6,6 +6,8 @@
 
 #include <stdint.h>
 
+#include <memory>
+
 #include "base/macros.h"
 #include "components/mus/public/cpp/property_type_converters.h"
 #include "components/mus/public/cpp/window.h"
@@ -140,9 +142,9 @@
 
  private:
   // The shadow, may be null.
-  scoped_ptr<Shadow> shadow_;
+  std::unique_ptr<Shadow> shadow_;
 
-  scoped_ptr<MoveEventHandler> move_event_handler_;
+  std::unique_ptr<MoveEventHandler> move_event_handler_;
 
   DISALLOW_COPY_AND_ASSIGN(WmNativeWidgetMus);
 };
diff --git a/mash/wm/root_window_controller.h b/mash/wm/root_window_controller.h
index c64eb31..655a2b5 100644
--- a/mash/wm/root_window_controller.h
+++ b/mash/wm/root_window_controller.h
@@ -5,6 +5,8 @@
 #ifndef MASH_WM_ROOT_WINDOW_CONTROLLER_H_
 #define MASH_WM_ROOT_WINDOW_CONTROLLER_H_
 
+#include <memory>
+
 #include "components/mus/public/cpp/window_observer.h"
 #include "components/mus/public/cpp/window_tree_delegate.h"
 #include "components/mus/public/interfaces/window_manager_constants.mojom.h"
@@ -86,11 +88,11 @@
   mus::Window* root_;
   int window_count_;
 
-  scoped_ptr<WindowManager> window_manager_;
+  std::unique_ptr<WindowManager> window_manager_;
 
-  std::map<mus::Window*, scoped_ptr<LayoutManager>> layout_manager_;
+  std::map<mus::Window*, std::unique_ptr<LayoutManager>> layout_manager_;
 
-  scoped_ptr<ShadowController> shadow_controller_;
+  std::unique_ptr<ShadowController> shadow_controller_;
 
   mus::mojom::DisplayPtr display_;
 
diff --git a/mash/wm/shadow.h b/mash/wm/shadow.h
index fc2450d7..9d3687b 100644
--- a/mash/wm/shadow.h
+++ b/mash/wm/shadow.h
@@ -5,8 +5,9 @@
 #ifndef MASH_WM_SHADOW_H_
 #define MASH_WM_SHADOW_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/mus/public/cpp/window_observer.h"
 #include "ui/compositor/layer_animation_observer.h"
 #include "ui/gfx/geometry/rect.h"
@@ -83,10 +84,10 @@
 
   // The parent layer of the shadow layer. It serves as a container accessible
   // from the outside to control the visibility of the shadow.
-  scoped_ptr<ui::Layer> layer_;
+  std::unique_ptr<ui::Layer> layer_;
 
   // The actual shadow layer corresponding to a cc::NinePatchLayer.
-  scoped_ptr<ui::Layer> shadow_layer_;
+  std::unique_ptr<ui::Layer> shadow_layer_;
 
   // Size of the current shadow image.
   gfx::Size image_size_;
diff --git a/mash/wm/user_window_controller_impl.h b/mash/wm/user_window_controller_impl.h
index c974f6f..b576273 100644
--- a/mash/wm/user_window_controller_impl.h
+++ b/mash/wm/user_window_controller_impl.h
@@ -7,6 +7,8 @@
 
 #include <stdint.h>
 
+#include <memory>
+
 #include "base/macros.h"
 #include "components/mus/common/types.h"
 #include "components/mus/public/cpp/window_observer.h"
@@ -49,7 +51,7 @@
 
   RootWindowController* root_controller_;
   mojom::UserWindowObserverPtr user_window_observer_;
-  scoped_ptr<WindowPropertyObserver> window_property_observer_;
+  std::unique_ptr<WindowPropertyObserver> window_property_observer_;
 
   DISALLOW_COPY_AND_ASSIGN(UserWindowControllerImpl);
 };
diff --git a/mash/wm/window_manager.cc b/mash/wm/window_manager.cc
index 5bcd15e..fcaaea2 100644
--- a/mash/wm/window_manager.cc
+++ b/mash/wm/window_manager.cc
@@ -5,6 +5,7 @@
 #include "mash/wm/window_manager.h"
 
 #include <stdint.h>
+
 #include <utility>
 
 #include "components/mus/common/types.h"
@@ -146,7 +147,7 @@
 bool WindowManager::OnWmSetProperty(
     mus::Window* window,
     const std::string& name,
-    scoped_ptr<std::vector<uint8_t>>* new_data) {
+    std::unique_ptr<std::vector<uint8_t>>* new_data) {
   // TODO(sky): constrain this to set of keys we know about, and allowed
   // values.
   return name == mus::mojom::WindowManager::kShowState_Property ||
diff --git a/mash/wm/window_manager.h b/mash/wm/window_manager.h
index ffa8919..3c6ade74 100644
--- a/mash/wm/window_manager.h
+++ b/mash/wm/window_manager.h
@@ -7,6 +7,8 @@
 
 #include <stdint.h>
 
+#include <memory>
+
 #include "base/macros.h"
 #include "components/mus/common/types.h"
 #include "components/mus/public/cpp/window_manager_delegate.h"
@@ -48,9 +50,10 @@
   // WindowManagerDelegate:
   void SetWindowManagerClient(mus::WindowManagerClient* client) override;
   bool OnWmSetBounds(mus::Window* window, gfx::Rect* bounds) override;
-  bool OnWmSetProperty(mus::Window* window,
-                       const std::string& name,
-                       scoped_ptr<std::vector<uint8_t>>* new_data) override;
+  bool OnWmSetProperty(
+      mus::Window* window,
+      const std::string& name,
+      std::unique_ptr<std::vector<uint8_t>>* new_data) override;
   mus::Window* OnWmCreateTopLevelWindow(
       std::map<std::string, std::vector<uint8_t>>* properties) override;
   void OnAccelerator(uint32_t id, const ui::Event& event) override;
diff --git a/mash/wm/window_manager_application.cc b/mash/wm/window_manager_application.cc
index 57fb884c..c1b035d 100644
--- a/mash/wm/window_manager_application.cc
+++ b/mash/wm/window_manager_application.cc
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "base/bind.h"
+#include "base/memory/ptr_util.h"
 #include "components/mus/public/cpp/event_matcher.h"
 #include "components/mus/public/cpp/window.h"
 #include "components/mus/public/interfaces/window_manager_factory.mojom.h"
@@ -134,7 +135,7 @@
     user_window_controller_binding_.AddBinding(user_window_controller_.get(),
                                                std::move(request));
   } else {
-    user_window_controller_requests_.push_back(make_scoped_ptr(
+    user_window_controller_requests_.push_back(base::WrapUnique(
         new mojo::InterfaceRequest<mash::wm::mojom::UserWindowController>(
             std::move(request))));
   }
diff --git a/mash/wm/window_manager_application.h b/mash/wm/window_manager_application.h
index b6cd495..46bbdc5b 100644
--- a/mash/wm/window_manager_application.h
+++ b/mash/wm/window_manager_application.h
@@ -7,10 +7,10 @@
 
 #include <stdint.h>
 
+#include <memory>
 #include <set>
 
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/observer_list.h"
 #include "components/mus/common/types.h"
 #include "components/mus/public/interfaces/accelerator_registrar.mojom.h"
@@ -110,16 +110,16 @@
 
   mojo::TracingImpl tracing_;
 
-  scoped_ptr<ui::mojo::UIInit> ui_init_;
-  scoped_ptr<views::AuraInit> aura_init_;
+  std::unique_ptr<ui::mojo::UIInit> ui_init_;
+  std::unique_ptr<views::AuraInit> aura_init_;
 
   // |user_window_controller_| is created once OnEmbed() is called. Until that
   // time |user_window_controller_requests_| stores pending interface requests.
-  scoped_ptr<UserWindowControllerImpl> user_window_controller_;
+  std::unique_ptr<UserWindowControllerImpl> user_window_controller_;
   mojo::BindingSet<mash::wm::mojom::UserWindowController>
       user_window_controller_binding_;
-  std::vector<
-      scoped_ptr<mojo::InterfaceRequest<mash::wm::mojom::UserWindowController>>>
+  std::vector<std::unique_ptr<
+      mojo::InterfaceRequest<mash::wm::mojom::UserWindowController>>>
       user_window_controller_requests_;
 
   std::set<AcceleratorRegistrarImpl*> accelerator_registrars_;
diff --git a/mash/wm/window_manager_unittest.cc b/mash/wm/window_manager_unittest.cc
index 5b9e16d..251c36a3 100644
--- a/mash/wm/window_manager_unittest.cc
+++ b/mash/wm/window_manager_unittest.cc
@@ -3,6 +3,8 @@
 // found in the LICENSE file.
 
 #include <stdint.h>
+
+#include <memory>
 #include <utility>
 
 #include "base/bind.h"
@@ -50,7 +52,7 @@
 
   // Connect to mus and create a new top level window. The request goes to
   // the |desktop_wm|, but is async.
-  scoped_ptr<mus::WindowTreeConnection> connection(
+  std::unique_ptr<mus::WindowTreeConnection> connection(
       mus::WindowTreeConnection::Create(&window_tree_delegate, connector()));
   mus::Window* top_level_window = connection->NewTopLevelWindow(nullptr);
   ASSERT_TRUE(top_level_window);
@@ -63,7 +65,7 @@
   mus::mojom::WindowTreeClientPtr tree_client;
   auto tree_client_request = GetProxy(&tree_client);
   child_window->Embed(std::move(tree_client), base::Bind(&OnEmbed));
-  scoped_ptr<mus::WindowTreeConnection> child_connection(
+  std::unique_ptr<mus::WindowTreeConnection> child_connection(
       mus::WindowTreeConnection::Create(
           &window_tree_delegate, std::move(tree_client_request),
           mus::WindowTreeConnection::CreateType::WAIT_FOR_EMBED));
diff --git a/media/audio/BUILD.gn b/media/audio/BUILD.gn
index 8892e76c..e69dc42 100644
--- a/media/audio/BUILD.gn
+++ b/media/audio/BUILD.gn
@@ -171,7 +171,11 @@
       "win/waveout_output_win.h",
     ]
 
-    libs += [ "dxguid.lib" ]
+    libs += [
+      "dxguid.lib",
+      "setupapi.lib",
+      "winmm.lib",
+    ]
   }
 
   if (is_android) {
diff --git a/media/audio/win/audio_manager_win.cc b/media/audio/win/audio_manager_win.cc
index ba8f6658..a3d5ead 100644
--- a/media/audio/win/audio_manager_win.cc
+++ b/media/audio/win/audio_manager_win.cc
@@ -37,9 +37,6 @@
 #include "media/base/limits.h"
 #include "media/base/media_switches.h"
 
-// Libraries required for the SetupAPI and Wbem APIs used here.
-#pragma comment(lib, "setupapi.lib")
-
 // The following are defined in various DDK headers, and we (re)define them here
 // to avoid adding the DDK as a chrome dependency.
 #define DRV_QUERYDEVICEINTERFACE 0x80c
diff --git a/media/audio/win/wavein_input_win.cc b/media/audio/win/wavein_input_win.cc
index 3d92818b..d67e3a7 100644
--- a/media/audio/win/wavein_input_win.cc
+++ b/media/audio/win/wavein_input_win.cc
@@ -4,8 +4,6 @@
 
 #include "media/audio/win/wavein_input_win.h"
 
-#pragma comment(lib, "winmm.lib")
-
 #include "base/logging.h"
 #include "media/audio/audio_io.h"
 #include "media/audio/win/audio_manager_win.h"
diff --git a/media/audio/win/waveout_output_win.cc b/media/audio/win/waveout_output_win.cc
index 7c76ba8e..3ac72ed 100644
--- a/media/audio/win/waveout_output_win.cc
+++ b/media/audio/win/waveout_output_win.cc
@@ -4,8 +4,6 @@
 
 #include "media/audio/win/waveout_output_win.h"
 
-#pragma comment(lib, "winmm.lib")
-
 #include "base/atomicops.h"
 #include "base/logging.h"
 #include "base/trace_event/trace_event.h"
diff --git a/media/capture.gypi b/media/capture.gypi
index 22ea2d3..554cb25b 100644
--- a/media/capture.gypi
+++ b/media/capture.gypi
@@ -47,7 +47,6 @@
       'capture/video/linux/video_capture_device_factory_linux.h',
       'capture/video/linux/video_capture_device_linux.cc',
       'capture/video/linux/video_capture_device_linux.h',
-      'capture/video/mac/platform_video_capturing_mac.h',
       'capture/video/mac/video_capture_device_avfoundation_mac.h',
       'capture/video/mac/video_capture_device_avfoundation_mac.mm',
       'capture/video/mac/video_capture_device_decklink_mac.h',
diff --git a/media/capture/BUILD.gn b/media/capture/BUILD.gn
index 86ab2f0..af73e90 100644
--- a/media/capture/BUILD.gn
+++ b/media/capture/BUILD.gn
@@ -45,7 +45,6 @@
     "video/linux/video_capture_device_factory_linux.h",
     "video/linux/video_capture_device_linux.cc",
     "video/linux/video_capture_device_linux.h",
-    "video/mac/platform_video_capturing_mac.h",
     "video/mac/video_capture_device_avfoundation_mac.h",
     "video/mac/video_capture_device_avfoundation_mac.mm",
     "video/mac/video_capture_device_decklink_mac.h",
diff --git a/media/capture/video/mac/platform_video_capturing_mac.h b/media/capture/video/mac/platform_video_capturing_mac.h
deleted file mode 100644
index dfcd2bb1..0000000
--- a/media/capture/video/mac/platform_video_capturing_mac.h
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef MEDIA_CAPTURE_VIDEO_MAC_PLATFORM_VIDEO_CAPTURING_MAC_H_
-#define MEDIA_CAPTURE_VIDEO_MAC_PLATFORM_VIDEO_CAPTURING_MAC_H_
-
-#import <Foundation/Foundation.h>
-
-namespace media {
-class VideoCaptureDeviceMac;
-}
-
-// Protocol representing platform-dependent video capture on Mac.
-@protocol PlatformVideoCapturingMac<NSObject>
-
-// This method initializes the instance by calling NSObject |init| and registers
-// internally a frame receiver at the same time. The frame receiver is supposed
-// to be initialised before and outlive the VideoCapturingDeviceMac
-// implementation.
-- (id)initWithFrameReceiver:(media::VideoCaptureDeviceMac*)frameReceiver;
-
-// Sets the frame receiver. This method executes the registration in mutual
-// exclusion.
-// TODO(mcasas): This method and stopCapture() are always called in sequence and
-// this one is only used to clear the frameReceiver, investigate if both can be
-// merged.
-- (void)setFrameReceiver:(media::VideoCaptureDeviceMac*)frameReceiver;
-
-// Sets which capture device to use by name passed as deviceId argument. The
-// device names are usually obtained via VideoCaptureDevice::GetDeviceNames()
-// method. This method will also configure all device properties except those in
-// setCaptureHeight:width:frameRate. If |deviceId| is nil, capture is stopped
-// and all potential configuration is torn down. Returns YES on success, NO
-// otherwise.
-- (BOOL)setCaptureDevice:(NSString*)deviceId;
-
-// Configures the capture properties.
-- (BOOL)setCaptureHeight:(int)height
-                   width:(int)width
-               frameRate:(float)frameRate;
-
-// Starts video capturing, registers observers. Returns YES on success, NO
-// otherwise.
-- (BOOL)startCapture;
-
-// Stops video capturing, unregisters observers.
-- (void)stopCapture;
-
-@end
-
-#endif  // MEDIA_CAPTURE_VIDEO_MAC_PLATFORM_VIDEO_CAPTURING_MAC_H_
diff --git a/media/capture/video/mac/video_capture_device_avfoundation_mac.h b/media/capture/video/mac/video_capture_device_avfoundation_mac.h
index f4d161d..8198bcd 100644
--- a/media/capture/video/mac/video_capture_device_avfoundation_mac.h
+++ b/media/capture/video/mac/video_capture_device_avfoundation_mac.h
@@ -12,7 +12,6 @@
 #include "base/threading/thread_checker.h"
 #import "media/base/mac/avfoundation_glue.h"
 #include "media/base/video_capture_types.h"
-#import "media/capture/video/mac/platform_video_capturing_mac.h"
 #include "media/capture/video/video_capture_device.h"
 
 namespace media {
@@ -56,8 +55,7 @@
 //
 //
 @interface VideoCaptureDeviceAVFoundation
-    : NSObject<CrAVCaptureVideoDataOutputSampleBufferDelegate,
-               PlatformVideoCapturingMac> {
+    : NSObject<CrAVCaptureVideoDataOutputSampleBufferDelegate> {
  @private
   // The following attributes are set via -setCaptureHeight:width:frameRate:.
   int frameWidth_;
@@ -77,7 +75,6 @@
   base::scoped_nsobject<CrAVCaptureVideoDataOutput> captureVideoDataOutput_;
 
   base::ThreadChecker main_thread_checker_;
-  base::ThreadChecker callback_thread_checker_;
 }
 
 // Returns a dictionary of capture devices with friendly name and unique id.
diff --git a/media/capture/video/mac/video_capture_device_avfoundation_mac.mm b/media/capture/video/mac/video_capture_device_avfoundation_mac.mm
index c8b724c..505e465 100644
--- a/media/capture/video/mac/video_capture_device_avfoundation_mac.mm
+++ b/media/capture/video/mac/video_capture_device_avfoundation_mac.mm
@@ -251,12 +251,8 @@
 - (BOOL)setCaptureHeight:(int)height
                    width:(int)width
                frameRate:(float)frameRate {
-  // Check if either of VideoCaptureDeviceMac::AllocateAndStart() or
-  // VideoCaptureDeviceMac::ReceiveFrame() is calling here, depending on the
-  // running state. VCDM::ReceiveFrame() calls here to change aspect ratio.
-  DCHECK((![captureSession_ isRunning] &&
-          main_thread_checker_.CalledOnValidThread()) ||
-         callback_thread_checker_.CalledOnValidThread());
+  DCHECK(![captureSession_ isRunning] &&
+         main_thread_checker_.CalledOnValidThread());
 
   frameWidth_ = width;
   frameHeight_ = height;
@@ -350,14 +346,11 @@
 #pragma mark Private methods
 
 // |captureOutput| is called by the capture device to deliver a new frame.
+// AVFoundation calls from a number of threads, depending on, at least, if
+// Chrome is on foreground or background.
 - (void)captureOutput:(CrAVCaptureOutput*)captureOutput
 didOutputSampleBuffer:(CoreMediaGlue::CMSampleBufferRef)sampleBuffer
        fromConnection:(CrAVCaptureConnection*)connection {
-  // AVFoundation calls from a number of threads, depending on, at least, if
-  // Chrome is on foreground or background. Sample the actual thread here.
-  callback_thread_checker_.DetachFromThread();
-  CHECK(callback_thread_checker_.CalledOnValidThread());
-
   const CoreMediaGlue::CMFormatDescriptionRef formatDescription =
       CoreMediaGlue::CMSampleBufferGetFormatDescription(sampleBuffer);
   const FourCharCode fourcc =
diff --git a/media/capture/video/mac/video_capture_device_mac.h b/media/capture/video/mac/video_capture_device_mac.h
index 2179cda..a12bf4f 100644
--- a/media/capture/video/mac/video_capture_device_mac.h
+++ b/media/capture/video/mac/video_capture_device_mac.h
@@ -22,7 +22,7 @@
 #include "media/base/video_capture_types.h"
 #include "media/capture/video/video_capture_device.h"
 
-@protocol PlatformVideoCapturingMac;
+@class VideoCaptureDeviceAVFoundation;
 
 namespace base {
 class SingleThreadTaskRunner;
@@ -96,7 +96,7 @@
   const scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
   InternalState state_;
 
-  id<PlatformVideoCapturingMac> capture_device_;
+  base::scoped_nsobject<VideoCaptureDeviceAVFoundation> capture_device_;
 
   base::TimeDelta first_timestamp_;
   base::TimeTicks first_aligned_timestamp_;
diff --git a/media/capture/video/mac/video_capture_device_mac.mm b/media/capture/video/mac/video_capture_device_mac.mm
index 39b6a3d..6979a31 100644
--- a/media/capture/video/mac/video_capture_device_mac.mm
+++ b/media/capture/video/mac/video_capture_device_mac.mm
@@ -25,7 +25,6 @@
 #include "base/time/time.h"
 #import "media/base/mac/avfoundation_glue.h"
 #include "media/base/timestamp_constants.h"
-#import "media/capture/video/mac/platform_video_capturing_mac.h"
 #import "media/capture/video/mac/video_capture_device_avfoundation_mac.h"
 #include "ui/gfx/geometry/size.h"
 
@@ -323,7 +322,6 @@
 
 VideoCaptureDeviceMac::~VideoCaptureDeviceMac() {
   DCHECK(task_runner_->BelongsToCurrentThread());
-  [capture_device_ release];
 }
 
 void VideoCaptureDeviceMac::AllocateAndStart(
@@ -356,8 +354,8 @@
   // will be passed to |ReceiveFrame|.
   capture_format_.pixel_format = PIXEL_FORMAT_UNKNOWN;
 
-    if (!UpdateCaptureResolution())
-      return;
+  if (!UpdateCaptureResolution())
+    return;
 
   // Try setting the power line frequency removal (anti-flicker). The built-in
   // cameras are normally suspended so the configuration must happen right
@@ -397,10 +395,11 @@
   DCHECK(task_runner_->BelongsToCurrentThread());
   DCHECK_EQ(state_, kNotInitialized);
 
-  if (capture_api_type == Name::AVFOUNDATION) {
-    capture_device_ =
-        [[VideoCaptureDeviceAVFoundation alloc] initWithFrameReceiver:this];
-  }
+  if (capture_api_type != Name::AVFOUNDATION)
+    return false;
+
+  capture_device_.reset(
+      [[VideoCaptureDeviceAVFoundation alloc] initWithFrameReceiver:this]);
 
   if (!capture_device_)
     return false;
diff --git a/media/media.gyp b/media/media.gyp
index 2f89a98..ee32a6f 100644
--- a/media/media.gyp
+++ b/media/media.gyp
@@ -928,6 +928,8 @@
               '-lmfplat.lib',
               '-lmfreadwrite.lib',
               '-lmfuuid.lib',
+              '-lsetupapi.lib',
+              '-lwinmm.lib',
             ],
           },
           # Specify delayload for media.dll.
diff --git a/net/quic/crypto/quic_compressed_certs_cache.cc b/net/quic/crypto/quic_compressed_certs_cache.cc
index e4dffaf..92d66d2 100644
--- a/net/quic/crypto/quic_compressed_certs_cache.cc
+++ b/net/quic/crypto/quic_compressed_certs_cache.cc
@@ -4,6 +4,8 @@
 
 #include "net/quic/crypto/quic_compressed_certs_cache.h"
 
+using std::string;
+
 namespace net {
 
 namespace {
diff --git a/net/quic/crypto/quic_compressed_certs_cache.h b/net/quic/crypto/quic_compressed_certs_cache.h
index 1a731c8..fe120f6b 100644
--- a/net/quic/crypto/quic_compressed_certs_cache.h
+++ b/net/quic/crypto/quic_compressed_certs_cache.h
@@ -12,8 +12,6 @@
 #include "base/memory/ref_counted.h"
 #include "net/quic/crypto/proof_source.h"
 
-using std::string;
-
 namespace net {
 
 // QuicCompressedCertsCache is a cache to track most recently compressed certs.
@@ -26,10 +24,10 @@
   // |chain, client_common_set_hashes, client_cached_cert_hashes| hits cache.
   // Otherwise, return nullptr.
   // Returned pointer might become invalid on the next call to Insert().
-  const string* GetCompressedCert(
+  const std::string* GetCompressedCert(
       const scoped_refptr<ProofSource::Chain>& chain,
-      const string& client_common_set_hashes,
-      const string& client_cached_cert_hashes);
+      const std::string& client_common_set_hashes,
+      const std::string& client_cached_cert_hashes);
 
   // Inserts the specified
   // |chain, client_common_set_hashes,
@@ -37,9 +35,9 @@
   // If the insertion causes the cache to become overfull, entries will
   // be deleted in an LRU order to make room.
   void Insert(const scoped_refptr<ProofSource::Chain>& chain,
-              const string& client_common_set_hashes,
-              const string& client_cached_cert_hashes,
-              const string& compressed_cert);
+              const std::string& client_common_set_hashes,
+              const std::string& client_cached_cert_hashes,
+              const std::string& compressed_cert);
 
   // Returns max number of cache entries the cache can carry.
   size_t MaxSize();
@@ -57,13 +55,13 @@
   struct UncompressedCerts {
     UncompressedCerts();
     UncompressedCerts(const scoped_refptr<ProofSource::Chain>& chain,
-                      const string* client_common_set_hashes,
-                      const string* client_cached_cert_hashes);
+                      const std::string* client_common_set_hashes,
+                      const std::string* client_cached_cert_hashes);
     ~UncompressedCerts();
 
     const scoped_refptr<ProofSource::Chain> chain;
-    const string* client_common_set_hashes;
-    const string* client_cached_cert_hashes;
+    const std::string* client_common_set_hashes;
+    const std::string* client_cached_cert_hashes;
   };
 
   // Certs stored by QuicCompressedCertsCache where uncompressed certs data is
@@ -73,7 +71,7 @@
    public:
     CachedCerts();
     CachedCerts(const UncompressedCerts& uncompressed_certs,
-                const string& compressed_cert);
+                const std::string& compressed_cert);
     CachedCerts(const CachedCerts& other);
 
     ~CachedCerts();
@@ -83,16 +81,16 @@
     bool MatchesUncompressedCerts(
         const UncompressedCerts& uncompressed_certs) const;
 
-    const string* compressed_cert() const;
+    const std::string* compressed_cert() const;
 
    private:
     // Uncompressed certs data.
     scoped_refptr<ProofSource::Chain> chain_;
-    const string client_common_set_hashes_;
-    const string client_cached_cert_hashes_;
+    const std::string client_common_set_hashes_;
+    const std::string client_cached_cert_hashes_;
 
     // Cached compressed representation derived from uncompressed certs.
-    const string compressed_cert_;
+    const std::string compressed_cert_;
   };
 
   // Computes a uint64_t hash for |uncompressed_certs|.
diff --git a/net/quic/crypto/quic_compressed_certs_cache_test.cc b/net/quic/crypto/quic_compressed_certs_cache_test.cc
index 50247f50..d444c49d 100644
--- a/net/quic/crypto/quic_compressed_certs_cache_test.cc
+++ b/net/quic/crypto/quic_compressed_certs_cache_test.cc
@@ -11,6 +11,7 @@
 #include "net/quic/test_tools/crypto_test_utils.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
+using std::string;
 using std::vector;
 
 namespace net {
diff --git a/net/quic/p2p/quic_p2p_session.cc b/net/quic/p2p/quic_p2p_session.cc
index 0be062b..7b411e02 100644
--- a/net/quic/p2p/quic_p2p_session.cc
+++ b/net/quic/p2p/quic_p2p_session.cc
@@ -69,7 +69,7 @@
 }
 
 void QuicP2PSession::OnConnectionClosed(QuicErrorCode error,
-                                        const string& error_details,
+                                        const std::string& error_details,
                                         ConnectionCloseSource source) {
   QuicSession::OnConnectionClosed(error, error_details, source);
 
diff --git a/net/quic/p2p/quic_p2p_session.h b/net/quic/p2p/quic_p2p_session.h
index 6be1190..ce02958 100644
--- a/net/quic/p2p/quic_p2p_session.h
+++ b/net/quic/p2p/quic_p2p_session.h
@@ -54,7 +54,7 @@
 
   // QuicConnectionVisitorInterface overrides.
   void OnConnectionClosed(QuicErrorCode error,
-                          const string& error_details,
+                          const std::string& error_details,
                           ConnectionCloseSource source) override;
 
   void SetDelegate(Delegate* delegate);
diff --git a/net/quic/quic_chromium_client_session.cc b/net/quic/quic_chromium_client_session.cc
index 82c5bc9ca..8be38c18 100644
--- a/net/quic/quic_chromium_client_session.cc
+++ b/net/quic/quic_chromium_client_session.cc
@@ -812,7 +812,7 @@
 
 void QuicChromiumClientSession::OnConnectionClosed(
     QuicErrorCode error,
-    const string& error_details,
+    const std::string& error_details,
     ConnectionCloseSource source) {
   DCHECK(!connection()->connected());
   logger_->OnConnectionClosed(error, error_details, source);
diff --git a/net/quic/quic_chromium_client_session.h b/net/quic/quic_chromium_client_session.h
index 2a3012cd..7c7ecd7f 100644
--- a/net/quic/quic_chromium_client_session.h
+++ b/net/quic/quic_chromium_client_session.h
@@ -180,7 +180,7 @@
 
   // QuicConnectionVisitorInterface methods:
   void OnConnectionClosed(QuicErrorCode error,
-                          const string& error_details,
+                          const std::string& error_details,
                           ConnectionCloseSource source) override;
   void OnSuccessfulVersionNegotiation(const QuicVersion& version) override;
   void OnPathDegrading() override;
diff --git a/net/quic/quic_chromium_client_stream_test.cc b/net/quic/quic_chromium_client_stream_test.cc
index 2b2532c..94d20a9a 100644
--- a/net/quic/quic_chromium_client_stream_test.cc
+++ b/net/quic/quic_chromium_client_stream_test.cc
@@ -60,7 +60,7 @@
   // From QuicSession.
   MOCK_METHOD3(OnConnectionClosed,
                void(QuicErrorCode error,
-                    const string& error_details,
+                    const std::string& error_details,
                     ConnectionCloseSource source));
   MOCK_METHOD1(CreateIncomingDynamicStream, QuicSpdyStream*(QuicStreamId id));
   MOCK_METHOD1(CreateOutgoingDynamicStream,
diff --git a/net/quic/quic_client_promised_info.cc b/net/quic/quic_client_promised_info.cc
index d3816bf..f4bef0bc 100644
--- a/net/quic/quic_client_promised_info.cc
+++ b/net/quic/quic_client_promised_info.cc
@@ -9,6 +9,7 @@
 
 using net::SpdyHeaderBlock;
 using net::kPushPromiseTimeoutSecs;
+using std::string;
 
 namespace net {
 
diff --git a/net/quic/quic_client_push_promise_index.cc b/net/quic/quic_client_push_promise_index.cc
index d7bbf76..e62f1f0 100644
--- a/net/quic/quic_client_push_promise_index.cc
+++ b/net/quic/quic_client_push_promise_index.cc
@@ -10,6 +10,7 @@
 #include "net/quic/spdy_utils.h"
 
 using net::SpdyHeaderBlock;
+using std::string;
 
 namespace net {
 
diff --git a/net/quic/quic_client_push_promise_index.h b/net/quic/quic_client_push_promise_index.h
index d060182..f8167ae0 100644
--- a/net/quic/quic_client_push_promise_index.h
+++ b/net/quic/quic_client_push_promise_index.h
@@ -5,8 +5,9 @@
 #ifndef NET_QUIC_QUIC_CLIENT_PUSH_PROMISE_INDEX_H_
 #define NET_QUIC_QUIC_CLIENT_PUSH_PROMISE_INDEX_H_
 
-#include "net/quic/quic_client_session_base.h"
+#include <string>
 
+#include "net/quic/quic_client_session_base.h"
 #include "net/quic/quic_types.h"
 
 namespace net {
@@ -23,7 +24,7 @@
   // |Try()|.
   class NET_EXPORT_PRIVATE Delegate {
    public:
-    virtual ~Delegate(){};
+    virtual ~Delegate() {}
 
     // The primary lookup matched request with push promise by URL.  A
     // secondary match is necessary to ensure Vary (RFC 2616, 14.14)
@@ -63,7 +64,7 @@
 
   // Called by client code, used to enforce affinity between requests
   // for promised streams and the session the promise came from.
-  QuicClientPromisedInfo* GetPromised(const string& url);
+  QuicClientPromisedInfo* GetPromised(const std::string& url);
 
   // Called by client code, to initiate rendezvous between a request
   // and a server push stream.  If |request|'s url is in the index,
diff --git a/net/quic/quic_client_push_promise_index_test.cc b/net/quic/quic_client_push_promise_index_test.cc
index 5f4eaa4..85c7f0c 100644
--- a/net/quic/quic_client_push_promise_index_test.cc
+++ b/net/quic/quic_client_push_promise_index_test.cc
@@ -15,6 +15,7 @@
 using testing::_;
 using testing::Return;
 using testing::StrictMock;
+using std::string;
 
 namespace net {
 namespace test {
diff --git a/net/quic/quic_client_session_base.cc b/net/quic/quic_client_session_base.cc
index 6c7ca5c..dd9974a 100644
--- a/net/quic/quic_client_session_base.cc
+++ b/net/quic/quic_client_session_base.cc
@@ -8,6 +8,8 @@
 #include "net/quic/quic_flags.h"
 #include "net/quic/spdy_utils.h"
 
+using std::string;
+
 namespace net {
 
 QuicClientSessionBase::QuicClientSessionBase(
diff --git a/net/quic/quic_connection_logger.h b/net/quic/quic_connection_logger.h
index b5591b4a..ff2c917 100644
--- a/net/quic/quic_connection_logger.h
+++ b/net/quic/quic_connection_logger.h
@@ -70,7 +70,7 @@
   void OnVersionNegotiationPacket(
       const QuicVersionNegotiationPacket& packet) override;
   void OnConnectionClosed(QuicErrorCode error,
-                          const string& error_details,
+                          const std::string& error_details,
                           ConnectionCloseSource source) override;
   void OnSuccessfulVersionNegotiation(const QuicVersion& version) override;
   void OnRttChanged(QuicTime::Delta rtt) const override;
diff --git a/net/quic/quic_frame_list.cc b/net/quic/quic_frame_list.cc
index 50dcdc0..9267074 100644
--- a/net/quic/quic_frame_list.cc
+++ b/net/quic/quic_frame_list.cc
@@ -4,8 +4,13 @@
 
 #include "net/quic/quic_frame_list.h"
 
+#include <algorithm>
+
 #include "base/logging.h"
 
+using std::list;
+using std::string;
+
 namespace net {
 
 QuicFrameList::FrameData::FrameData(QuicStreamOffset offset,
@@ -29,7 +34,7 @@
 }
 
 QuicErrorCode QuicFrameList::OnStreamData(QuicStreamOffset offset,
-                                          StringPiece data,
+                                          base::StringPiece data,
                                           QuicTime timestamp,
                                           size_t* const bytes_buffered) {
   *bytes_buffered = 0;
diff --git a/net/quic/quic_frame_list.h b/net/quic/quic_frame_list.h
index a623597..f529016 100644
--- a/net/quic/quic_frame_list.h
+++ b/net/quic/quic_frame_list.h
@@ -6,14 +6,13 @@
 #define NET_QUIC_QUIC_FRAME_LIST_H_
 
 #include <stddef.h>
+#include <list>
+#include <string>
 
+#include "base/strings/string_piece.h"
 #include "net/quic/quic_protocol.h"
 #include "net/quic/quic_stream_sequencer_buffer_interface.h"
 
-using base::StringPiece;
-using std::string;
-using std::list;
-
 namespace net {
 
 namespace test {
@@ -26,15 +25,15 @@
   // A contiguous segment received by a QUIC stream.
   struct FrameData {
     FrameData(QuicStreamOffset offset,
-              string segment,
+              std::string segment,
               const QuicTime timestamp);
 
     const QuicStreamOffset offset;
-    string segment;
+    std::string segment;
     const QuicTime timestamp;
   };
 
-  explicit QuicFrameList();
+  QuicFrameList();
 
   ~QuicFrameList() override;
 
@@ -42,7 +41,7 @@
   void Clear() override;
   bool Empty() const override;
   QuicErrorCode OnStreamData(QuicStreamOffset offset,
-                             StringPiece data,
+                             base::StringPiece data,
                              QuicTime timestamp,
                              size_t* bytes_buffered) override;
   size_t Readv(const struct iovec* iov, size_t iov_len) override;
@@ -57,19 +56,19 @@
  private:
   friend class test::QuicStreamSequencerPeer;
 
-  list<FrameData>::iterator FindInsertionPoint(QuicStreamOffset offset,
-                                               size_t len);
+  std::list<FrameData>::iterator FindInsertionPoint(QuicStreamOffset offset,
+                                                    size_t len);
 
   bool FrameOverlapsBufferedData(
       QuicStreamOffset offset,
       size_t data_len,
-      list<FrameData>::const_iterator insertion_point) const;
+      std::list<FrameData>::const_iterator insertion_point) const;
 
   bool IsDuplicate(QuicStreamOffset offset,
                    size_t data_len,
-                   list<FrameData>::const_iterator insertion_point) const;
+                   std::list<FrameData>::const_iterator insertion_point) const;
 
-  list<FrameData> frame_list_;
+  std::list<FrameData> frame_list_;
 
   // Number of bytes in buffer.
   size_t num_bytes_buffered_ = 0;
diff --git a/net/quic/quic_http_stream.cc b/net/quic/quic_http_stream.cc
index ca5cb89..591f3ce 100644
--- a/net/quic/quic_http_stream.cc
+++ b/net/quic/quic_http_stream.cc
@@ -153,7 +153,7 @@
   DCHECK(success);
   DCHECK(ssl_info_.cert.get());
 
-  string url(request_info->url.spec());
+  std::string url(request_info->url.spec());
   QuicClientPromisedInfo* promised =
       session_->push_promise_index()->GetPromised(url);
   if (promised) {
diff --git a/net/quic/quic_http_stream.h b/net/quic/quic_http_stream.h
index a88a6e1f..01c07606 100644
--- a/net/quic/quic_http_stream.h
+++ b/net/quic/quic_http_stream.h
@@ -9,6 +9,8 @@
 #include <stdint.h>
 
 #include <list>
+#include <string>
+#include <vector>
 
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
@@ -107,7 +109,7 @@
   void OnIOComplete(int rv);
   void DoCallback(int rv);
 
-  int DoLoop(int);
+  int DoLoop(int rv);
   int DoStreamRequest();
   int DoSetRequestPriority();
   int DoSendHeaders();
diff --git a/net/quic/quic_http_stream_test.cc b/net/quic/quic_http_stream_test.cc
index 4458030..afd0f95 100644
--- a/net/quic/quic_http_stream_test.cc
+++ b/net/quic/quic_http_stream_test.cc
@@ -54,6 +54,7 @@
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
+using std::string;
 using testing::_;
 using testing::AnyNumber;
 using testing::Return;
@@ -191,7 +192,7 @@
         mock_writes_[i] = MockWrite(writes_[i].mode, writes_[i].packet->data(),
                                     writes_[i].packet->length());
       }
-    };
+    }
 
     socket_data_.reset(new StaticSocketDataProvider(
         nullptr, 0, mock_writes_.get(), writes_.size()));
@@ -236,7 +237,8 @@
     session_.reset(new QuicChromiumClientSession(
         connection_, std::move(socket),
         /*stream_factory=*/nullptr, &crypto_client_stream_factory_, &clock_,
-        &transport_security_state_, make_scoped_ptr((QuicServerInfo*)nullptr),
+        &transport_security_state_,
+        make_scoped_ptr(static_cast<QuicServerInfo*>(nullptr)),
         QuicServerId(kDefaultServerHostName, kDefaultServerPort,
                      PRIVACY_MODE_DISABLED),
         kQuicYieldAfterPacketsRead,
@@ -272,13 +274,13 @@
         SpdyUtils::SerializeUncompressedHeaders(push_promise_);
   }
 
-  void SetRequest(const std::string& method,
-                  const std::string& path,
+  void SetRequest(const string& method,
+                  const string& path,
                   RequestPriority priority) {
     request_headers_ = maker_.GetRequestHeaders(method, "http", path);
   }
 
-  void SetResponse(const std::string& status, const std::string& body) {
+  void SetResponse(const string& status, const string& body) {
     response_headers_ = maker_.GetResponseHeaders(status);
     response_data_ = body;
   }
@@ -438,8 +440,8 @@
   scoped_refptr<IOBufferWithSize> read_buffer_;
   SpdyHeaderBlock request_headers_;
   SpdyHeaderBlock response_headers_;
-  std::string request_data_;
-  std::string response_data_;
+  string request_data_;
+  string response_data_;
   QuicClientPushPromiseIndex push_promise_index_;
 
   // For server push testing
@@ -510,7 +512,7 @@
 
   EXPECT_EQ(ERR_IO_PENDING, stream_->ReadResponseHeaders(callback_.callback()));
 
-  SetResponse("404 Not Found", std::string());
+  SetResponse("404 Not Found", string());
   size_t spdy_response_header_frame_length;
   ProcessPacket(ConstructResponseHeadersPacket(
       2, kFin, &spdy_response_header_frame_length));
@@ -564,7 +566,7 @@
 
   EXPECT_EQ(ERR_IO_PENDING, stream_->ReadResponseHeaders(callback_.callback()));
 
-  SetResponse("200 OK", std::string());
+  SetResponse("200 OK", string());
 
   // Send the response headers.
   size_t spdy_response_header_frame_length;
@@ -656,7 +658,7 @@
   headers[":status"] = "200 OK";
   headers[":version"] = "HTTP/1.1";
   headers["content-type"] = "text/plain";
-  headers["big6"] = std::string(1000, 'x');  // Lots of x's.
+  headers["big6"] = string(1000, 'x');  // Lots of x's.
 
   response_headers_ = headers;
   size_t spdy_response_headers_frame_length;
@@ -857,7 +859,7 @@
   ProcessPacket(ConstructAckPacket(1, 0, 0));
 
   // Send the response headers (but not the body).
-  SetResponse("200 OK", std::string());
+  SetResponse("200 OK", string());
   size_t spdy_response_headers_frame_length;
   ProcessPacket(ConstructResponseHeadersPacket(
       2, !kFin, &spdy_response_headers_frame_length));
@@ -924,7 +926,7 @@
   ProcessPacket(ConstructAckPacket(1, 0, 0));
 
   // Send the response headers (but not the body).
-  SetResponse("200 OK", std::string());
+  SetResponse("200 OK", string());
   size_t spdy_response_headers_frame_length;
   ProcessPacket(ConstructResponseHeadersPacket(
       2, !kFin, &spdy_response_headers_frame_length));
@@ -991,7 +993,7 @@
   ProcessPacket(ConstructAckPacket(1, 0, 0));
 
   // Send the response headers (but not the body).
-  SetResponse("200 OK", std::string());
+  SetResponse("200 OK", string());
   size_t spdy_response_headers_frame_length;
   ProcessPacket(ConstructResponseHeadersPacket(
       2, !kFin, &spdy_response_headers_frame_length));
@@ -1054,7 +1056,7 @@
   ProcessPacket(ConstructAckPacket(1, 0, 0));
 
   // Send the response headers (but not the body).
-  SetResponse("200 OK", std::string());
+  SetResponse("200 OK", string());
   size_t spdy_response_headers_frame_length;
   ProcessPacket(ConstructResponseHeadersPacket(
       2, !kFin, &spdy_response_headers_frame_length));
@@ -1648,7 +1650,7 @@
   // Ack the request.
   ProcessPacket(ConstructAckPacket(2, 0, 0));
 
-  SetResponse("404 Not Found", std::string());
+  SetResponse("404 Not Found", string());
   size_t spdy_response_header_frame_length;
   ProcessPacket(InnerConstructResponseHeadersPacket(
       3, stream_id_ + 2, kFin, &spdy_response_header_frame_length));
diff --git a/net/quic/quic_spdy_session.cc b/net/quic/quic_spdy_session.cc
index 4cf0798..af92387 100644
--- a/net/quic/quic_spdy_session.cc
+++ b/net/quic/quic_spdy_session.cc
@@ -7,6 +7,8 @@
 #include "net/quic/quic_bug_tracker.h"
 #include "net/quic/quic_headers_stream.h"
 
+using std::string;
+
 namespace net {
 
 QuicSpdySession::QuicSpdySession(QuicConnection* connection,
diff --git a/net/quic/quic_spdy_stream.cc b/net/quic/quic_spdy_stream.cc
index c52f5016..2e099ca 100644
--- a/net/quic/quic_spdy_stream.cc
+++ b/net/quic/quic_spdy_stream.cc
@@ -13,8 +13,9 @@
 #include "net/quic/spdy_utils.h"
 
 using base::StringPiece;
-using std::min;
 using net::SpdyPriority;
+using std::min;
+using std::string;
 
 namespace net {
 
diff --git a/net/quic/quic_stream_factory.h b/net/quic/quic_stream_factory.h
index 9bbf9957..c2dbfbcf8 100644
--- a/net/quic/quic_stream_factory.h
+++ b/net/quic/quic_stream_factory.h
@@ -8,8 +8,10 @@
 #include <stddef.h>
 #include <stdint.h>
 
+#include <deque>
 #include <list>
 #include <map>
+#include <set>
 #include <string>
 #include <vector>
 
@@ -106,7 +108,7 @@
   QuicStreamFactory* factory_;
   HostPortPair host_port_pair_;
   std::string origin_host_;
-  string url_;
+  std::string url_;
   PrivacyMode privacy_mode_;
   BoundNetLog net_log_;
   CompletionCallback callback_;
diff --git a/net/quic/quic_stream_sequencer.h b/net/quic/quic_stream_sequencer.h
index 5e01f185..3f37a7ec 100644
--- a/net/quic/quic_stream_sequencer.h
+++ b/net/quic/quic_stream_sequencer.h
@@ -13,8 +13,6 @@
 #include "net/quic/quic_protocol.h"
 #include "net/quic/quic_stream_sequencer_buffer.h"
 
-using std::string;
-
 namespace net {
 
 namespace test {
diff --git a/net/quic/quic_stream_sequencer_buffer_test.cc b/net/quic/quic_stream_sequencer_buffer_test.cc
index dd845a3..ce0cb72d 100644
--- a/net/quic/quic_stream_sequencer_buffer_test.cc
+++ b/net/quic/quic_stream_sequencer_buffer_test.cc
@@ -4,6 +4,7 @@
 #include "net/quic/quic_stream_sequencer_buffer.h"
 
 #include <algorithm>
+#include <limits>
 #include <map>
 #include <string>
 #include <utility>
@@ -19,6 +20,7 @@
 #include "testing/gtest/include/gtest/gtest.h"
 
 using std::min;
+using std::string;
 
 namespace net {
 
@@ -204,7 +206,7 @@
 }
 
 TEST_F(QuicStreamSequencerBufferTest, OnStreamDataWithinBlock) {
-  std::string source(1024, 'a');
+  string source(1024, 'a');
   size_t written;
   clock_.AdvanceTime(QuicTime::Delta::FromSeconds(1));
   QuicTime t = clock_.ApproximateNow();
@@ -226,7 +228,7 @@
 }
 
 TEST_F(QuicStreamSequencerBufferTest, OnStreamDataWithOverlap) {
-  std::string source(1024, 'a');
+  string source(1024, 'a');
   // Write something into [800, 1824)
   size_t written;
   clock_.AdvanceTime(QuicTime::Delta::FromSeconds(1));
@@ -248,12 +250,12 @@
 
 TEST_F(QuicStreamSequencerBufferTest,
        OnStreamDataOverlapAndDuplicateCornerCases) {
-  std::string source(1024, 'a');
+  string source(1024, 'a');
   // Write something into [800, 1824)
   size_t written;
   buffer_->OnStreamData(800, source, clock_.ApproximateNow(), &written,
                         &error_details_);
-  source = std::string(800, 'b');
+  source = string(800, 'b');
   // Try to write to [1, 801), but should fail due to overlapping
   EXPECT_EQ(QUIC_OVERLAPPING_STREAM_DATA,
             buffer_->OnStreamData(1, source, clock_.ApproximateNow(), &written,
@@ -263,7 +265,7 @@
             buffer_->OnStreamData(0, source, clock_.ApproximateNow(), &written,
                                   &error_details_));
   // Try to write one byte to [1823, 1824), but should count as duplicate
-  std::string one_byte = "c";
+  string one_byte = "c";
   EXPECT_EQ(QUIC_NO_ERROR,
             buffer_->OnStreamData(1823, one_byte, clock_.ApproximateNow(),
                                   &written, &error_details_));
@@ -278,13 +280,13 @@
 }
 
 TEST_F(QuicStreamSequencerBufferTest, OnStreamDataWithoutOverlap) {
-  std::string source(1024, 'a');
+  string source(1024, 'a');
   // Write something into [800, 1824).
   size_t written;
   EXPECT_EQ(QUIC_NO_ERROR,
             buffer_->OnStreamData(800, source, clock_.ApproximateNow(),
                                   &written, &error_details_));
-  source = std::string(100, 'b');
+  source = string(100, 'b');
   // Write something into [kBlockSizeBytes * 2 - 20, kBlockSizeBytes * 2 + 80).
   EXPECT_EQ(QUIC_NO_ERROR,
             buffer_->OnStreamData(kBlockSizeBytes * 2 - 20, source,
@@ -331,7 +333,7 @@
 TEST_F(QuicStreamSequencerBufferTest, OnStreamDataTillEnd) {
   // Write 50 bytes to the end.
   const size_t kBytesToWrite = 50;
-  std::string source(kBytesToWrite, 'a');
+  string source(kBytesToWrite, 'a');
   size_t written;
   EXPECT_EQ(QUIC_NO_ERROR,
             buffer_->OnStreamData(max_capacity_bytes_ - kBytesToWrite, source,
@@ -344,7 +346,7 @@
 TEST_F(QuicStreamSequencerBufferTest, OnStreamDataTillEndCorner) {
   // Write 1 byte to the end.
   const size_t kBytesToWrite = 1;
-  std::string source(kBytesToWrite, 'a');
+  string source(kBytesToWrite, 'a');
   size_t written;
   EXPECT_EQ(QUIC_NO_ERROR,
             buffer_->OnStreamData(max_capacity_bytes_ - kBytesToWrite, source,
@@ -355,7 +357,7 @@
 }
 
 TEST_F(QuicStreamSequencerBufferTest, OnStreamDataBeyondCapacity) {
-  std::string source(60, 'a');
+  string source(60, 'a');
   size_t written;
   EXPECT_EQ(QUIC_INTERNAL_ERROR,
             buffer_->OnStreamData(max_capacity_bytes_ - 50, source,
@@ -379,14 +381,14 @@
 }
 
 TEST_F(QuicStreamSequencerBufferTest, Readv100Bytes) {
-  std::string source(1024, 'a');
+  string source(1024, 'a');
   clock_.AdvanceTime(QuicTime::Delta::FromSeconds(1));
   QuicTime t1 = clock_.ApproximateNow();
   // Write something into [kBlockSizeBytes, kBlockSizeBytes + 1024).
   size_t written;
   buffer_->OnStreamData(kBlockSizeBytes, source, t1, &written, &error_details_);
   EXPECT_FALSE(buffer_->HasBytesToRead());
-  source = std::string(100, 'b');
+  source = string(100, 'b');
   clock_.AdvanceTime(QuicTime::Delta::FromSeconds(1));
   QuicTime t2 = clock_.ApproximateNow();
   // Write something into [0, 100).
@@ -399,13 +401,13 @@
   size_t read = buffer_->Readv(iovecs, 3);
   EXPECT_EQ(100u, read);
   EXPECT_EQ(100u, buffer_->BytesConsumed());
-  EXPECT_EQ(source, std::string(dest, read));
+  EXPECT_EQ(source, string(dest, read));
   EXPECT_EQ(1u, helper_->frame_arrival_time_map()->size());
   EXPECT_TRUE(helper_->CheckBufferInvariants());
 }
 
 TEST_F(QuicStreamSequencerBufferTest, ReadvAcrossBlocks) {
-  std::string source(kBlockSizeBytes + 50, 'a');
+  string source(kBlockSizeBytes + 50, 'a');
   // Write 1st block to full and extand 50 bytes to next block.
   size_t written;
   buffer_->OnStreamData(0, source, clock_.ApproximateNow(), &written,
@@ -419,7 +421,7 @@
     buffer_->Readv(iovecs, 2);
   }
   // The last read only reads the rest 50 bytes in 2nd block.
-  EXPECT_EQ(std::string(50, 'a'), std::string(dest, 50));
+  EXPECT_EQ(string(50, 'a'), string(dest, 50));
   EXPECT_EQ(0, dest[50]) << "Dest[50] shouln't be filled.";
   EXPECT_EQ(source.size(), buffer_->BytesConsumed());
   EXPECT_TRUE(buffer_->Empty());
@@ -427,7 +429,7 @@
 }
 
 TEST_F(QuicStreamSequencerBufferTest, ClearAfterRead) {
-  std::string source(kBlockSizeBytes + 50, 'a');
+  string source(kBlockSizeBytes + 50, 'a');
   // Write 1st block to full with 'a'.
   size_t written;
   buffer_->OnStreamData(0, source, clock_.ApproximateNow(), &written,
@@ -444,7 +446,7 @@
 
 TEST_F(QuicStreamSequencerBufferTest,
        OnStreamDataAcrossLastBlockAndFillCapacity) {
-  std::string source(kBlockSizeBytes + 50, 'a');
+  string source(kBlockSizeBytes + 50, 'a');
   // Write 1st block to full with 'a'.
   size_t written;
   buffer_->OnStreamData(0, source, clock_.ApproximateNow(), &written,
@@ -457,7 +459,7 @@
 
   // Write more than half block size of bytes in the last block with 'b', which
   // will wrap to the beginning and reaches the full capacity.
-  source = std::string(0.5 * kBlockSizeBytes + 512, 'b');
+  source = string(0.5 * kBlockSizeBytes + 512, 'b');
   EXPECT_EQ(QUIC_NO_ERROR, buffer_->OnStreamData(2 * kBlockSizeBytes, source,
                                                  clock_.ApproximateNow(),
                                                  &written, &error_details_));
@@ -467,7 +469,7 @@
 
 TEST_F(QuicStreamSequencerBufferTest,
        OnStreamDataAcrossLastBlockAndExceedCapacity) {
-  std::string source(kBlockSizeBytes + 50, 'a');
+  string source(kBlockSizeBytes + 50, 'a');
   // Write 1st block to full.
   size_t written;
   buffer_->OnStreamData(0, source, clock_.ApproximateNow(), &written,
@@ -479,7 +481,7 @@
 
   // Try to write from [max_capacity_bytes_ - 0.5 * kBlockSizeBytes,
   // max_capacity_bytes_ +  512 + 1). But last bytes exceeds current capacity.
-  source = std::string(0.5 * kBlockSizeBytes + 512 + 1, 'b');
+  source = string(0.5 * kBlockSizeBytes + 512 + 1, 'b');
   EXPECT_EQ(QUIC_INTERNAL_ERROR,
             buffer_->OnStreamData(2 * kBlockSizeBytes, source,
                                   clock_.ApproximateNow(), &written,
@@ -490,7 +492,7 @@
 TEST_F(QuicStreamSequencerBufferTest, ReadvAcrossLastBlock) {
   // Write to full capacity and read out 512 bytes at beginning and continue
   // appending 256 bytes.
-  std::string source(max_capacity_bytes_, 'a');
+  string source(max_capacity_bytes_, 'a');
   clock_.AdvanceTime(QuicTime::Delta::FromSeconds(1));
   QuicTime t = clock_.ApproximateNow();
   size_t written;
@@ -498,7 +500,7 @@
   char dest[512]{0};
   const iovec iov{dest, 512};
   buffer_->Readv(&iov, 1);
-  source = std::string(256, 'b');
+  source = string(256, 'b');
   clock_.AdvanceTime(QuicTime::Delta::FromSeconds(1));
   QuicTime t2 = clock_.ApproximateNow();
   buffer_->OnStreamData(max_capacity_bytes_, source, t2, &written,
@@ -535,7 +537,7 @@
 
 TEST_F(QuicStreamSequencerBufferTest, GetReadableRegionsBlockedByGap) {
   // Write into [1, 1024).
-  std::string source(1023, 'a');
+  string source(1023, 'a');
   size_t written;
   buffer_->OnStreamData(1, source, clock_.ApproximateNow(), &written,
                         &error_details_);
@@ -548,7 +550,7 @@
 TEST_F(QuicStreamSequencerBufferTest, GetReadableRegionsTillEndOfBlock) {
   // Write first block to full with [0, 256) 'a' and the rest 'b' then read out
   // [0, 256)
-  std::string source(kBlockSizeBytes, 'a');
+  string source(kBlockSizeBytes, 'a');
   size_t written;
   buffer_->OnStreamData(0, source, clock_.ApproximateNow(), &written,
                         &error_details_);
@@ -558,14 +560,14 @@
   iovec iovs[2];
   int iov_count = buffer_->GetReadableRegions(iovs, 2);
   EXPECT_EQ(1, iov_count);
-  EXPECT_EQ(std::string(kBlockSizeBytes - 256, 'a'),
-            std::string(reinterpret_cast<const char*>(iovs[0].iov_base),
-                        iovs[0].iov_len));
+  EXPECT_EQ(
+      string(kBlockSizeBytes - 256, 'a'),
+      string(reinterpret_cast<const char*>(iovs[0].iov_base), iovs[0].iov_len));
 }
 
 TEST_F(QuicStreamSequencerBufferTest, GetReadableRegionsWithinOneBlock) {
   // Write into [0, 1024) and then read out [0, 256)
-  std::string source(1024, 'a');
+  string source(1024, 'a');
   size_t written;
   buffer_->OnStreamData(0, source, clock_.ApproximateNow(), &written,
                         &error_details_);
@@ -575,15 +577,15 @@
   iovec iovs[2];
   int iov_count = buffer_->GetReadableRegions(iovs, 2);
   EXPECT_EQ(1, iov_count);
-  EXPECT_EQ(std::string(1024 - 256, 'a'),
-            std::string(reinterpret_cast<const char*>(iovs[0].iov_base),
-                        iovs[0].iov_len));
+  EXPECT_EQ(
+      string(1024 - 256, 'a'),
+      string(reinterpret_cast<const char*>(iovs[0].iov_base), iovs[0].iov_len));
 }
 
 TEST_F(QuicStreamSequencerBufferTest,
        GetReadableRegionsAcrossBlockWithLongIOV) {
   // Write into [0, 2 * kBlockSizeBytes + 1024) and then read out [0, 1024)
-  std::string source(2 * kBlockSizeBytes + 1024, 'a');
+  string source(2 * kBlockSizeBytes + 1024, 'a');
   size_t written;
   buffer_->OnStreamData(0, source, clock_.ApproximateNow(), &written,
                         &error_details_);
@@ -602,14 +604,14 @@
        GetReadableRegionsWithMultipleIOVsAcrossEnd) {
   // Write into [0, 2 * kBlockSizeBytes + 1024) and then read out [0, 1024)
   // and then append 1024 + 512 bytes.
-  std::string source(2.5 * kBlockSizeBytes - 1024, 'a');
+  string source(2.5 * kBlockSizeBytes - 1024, 'a');
   size_t written;
   buffer_->OnStreamData(0, source, clock_.ApproximateNow(), &written,
                         &error_details_);
   char dest[1024];
   helper_->Read(dest, 1024);
   // Write across the end.
-  source = std::string(1024 + 512, 'b');
+  source = string(1024 + 512, 'b');
   buffer_->OnStreamData(2.5 * kBlockSizeBytes - 1024, source,
                         clock_.ApproximateNow(), &written, &error_details_);
   // Use short iovec's.
@@ -623,9 +625,9 @@
   EXPECT_EQ(4, buffer_->GetReadableRegions(iovs1, 5));
   EXPECT_EQ(0.5 * kBlockSizeBytes, iovs1[2].iov_len);
   EXPECT_EQ(512u, iovs1[3].iov_len);
-  EXPECT_EQ(std::string(512, 'b'),
-            std::string(reinterpret_cast<const char*>(iovs1[3].iov_base),
-                        iovs1[3].iov_len));
+  EXPECT_EQ(string(512, 'b'),
+            string(reinterpret_cast<const char*>(iovs1[3].iov_base),
+                   iovs1[3].iov_len));
 }
 
 TEST_F(QuicStreamSequencerBufferTest, GetReadableRegionEmpty) {
@@ -638,7 +640,7 @@
 
 TEST_F(QuicStreamSequencerBufferTest, GetReadableRegionBeforeGap) {
   // Write into [1, 1024).
-  std::string source(1023, 'a');
+  string source(1023, 'a');
   size_t written;
   buffer_->OnStreamData(1, source, clock_.ApproximateNow(), &written,
                         &error_details_);
@@ -651,7 +653,7 @@
 
 TEST_F(QuicStreamSequencerBufferTest, GetReadableRegionTillEndOfBlock) {
   // Write into [0, kBlockSizeBytes + 1) and then read out [0, 256)
-  std::string source(kBlockSizeBytes + 1, 'a');
+  string source(kBlockSizeBytes + 1, 'a');
   size_t written;
   clock_.AdvanceTime(QuicTime::Delta::FromSeconds(1));
   QuicTime t = clock_.ApproximateNow();
@@ -663,14 +665,13 @@
   QuicTime t2 = QuicTime::Zero();
   EXPECT_TRUE(buffer_->GetReadableRegion(&iov, &t2));
   EXPECT_EQ(t, t2);
-  EXPECT_EQ(
-      std::string(kBlockSizeBytes - 256, 'a'),
-      std::string(reinterpret_cast<const char*>(iov.iov_base), iov.iov_len));
+  EXPECT_EQ(string(kBlockSizeBytes - 256, 'a'),
+            string(reinterpret_cast<const char*>(iov.iov_base), iov.iov_len));
 }
 
 TEST_F(QuicStreamSequencerBufferTest, GetReadableRegionTillGap) {
   // Write into [0, kBlockSizeBytes - 1) and then read out [0, 256)
-  std::string source(kBlockSizeBytes - 1, 'a');
+  string source(kBlockSizeBytes - 1, 'a');
   size_t written;
   clock_.AdvanceTime(QuicTime::Delta::FromSeconds(1));
   QuicTime t = clock_.ApproximateNow();
@@ -682,14 +683,13 @@
   QuicTime t2 = QuicTime::Zero();
   EXPECT_TRUE(buffer_->GetReadableRegion(&iov, &t2));
   EXPECT_EQ(t, t2);
-  EXPECT_EQ(
-      std::string(kBlockSizeBytes - 1 - 256, 'a'),
-      std::string(reinterpret_cast<const char*>(iov.iov_base), iov.iov_len));
+  EXPECT_EQ(string(kBlockSizeBytes - 1 - 256, 'a'),
+            string(reinterpret_cast<const char*>(iov.iov_base), iov.iov_len));
 }
 
 TEST_F(QuicStreamSequencerBufferTest, GetReadableRegionByArrivalTime) {
   // Write into [0, kBlockSizeBytes - 100) and then read out [0, 256)
-  std::string source(kBlockSizeBytes - 100, 'a');
+  string source(kBlockSizeBytes - 100, 'a');
   size_t written;
   clock_.AdvanceTime(QuicTime::Delta::FromSeconds(1));
   QuicTime t = clock_.ApproximateNow();
@@ -697,13 +697,13 @@
   char dest[256];
   helper_->Read(dest, 256);
   // Write into [kBlockSizeBytes - 100, kBlockSizeBytes - 50)] in same time
-  std::string source2(50, 'b');
+  string source2(50, 'b');
   clock_.AdvanceTime(QuicTime::Delta::FromSeconds(1));
   buffer_->OnStreamData(kBlockSizeBytes - 100, source2, t, &written,
                         &error_details_);
 
   // Write into [kBlockSizeBytes - 50, kBlockSizeBytes)] in another time
-  std::string source3(50, 'c');
+  string source3(50, 'c');
   clock_.AdvanceTime(QuicTime::Delta::FromSeconds(1));
   QuicTime t3 = clock_.ApproximateNow();
   buffer_->OnStreamData(kBlockSizeBytes - 50, source3, t3, &written,
@@ -714,14 +714,13 @@
   QuicTime t4 = QuicTime::Zero();
   EXPECT_TRUE(buffer_->GetReadableRegion(&iov, &t4));
   EXPECT_EQ(t, t4);
-  EXPECT_EQ(
-      std::string(kBlockSizeBytes - 100 - 256, 'a') + source2,
-      std::string(reinterpret_cast<const char*>(iov.iov_base), iov.iov_len));
+  EXPECT_EQ(string(kBlockSizeBytes - 100 - 256, 'a') + source2,
+            string(reinterpret_cast<const char*>(iov.iov_base), iov.iov_len));
 }
 
 TEST_F(QuicStreamSequencerBufferTest, MarkConsumedInOneBlock) {
   // Write into [0, 1024) and then read out [0, 256)
-  std::string source(1024, 'a');
+  string source(1024, 'a');
   size_t written;
   buffer_->OnStreamData(0, source, clock_.ApproximateNow(), &written,
                         &error_details_);
@@ -740,7 +739,7 @@
 
 TEST_F(QuicStreamSequencerBufferTest, MarkConsumedNotEnoughBytes) {
   // Write into [0, 1024) and then read out [0, 256)
-  std::string source(1024, 'a');
+  string source(1024, 'a');
   size_t written;
   QuicTime t = clock_.ApproximateNow();
   buffer_->OnStreamData(0, source, t, &written, &error_details_);
@@ -763,7 +762,7 @@
 
 TEST_F(QuicStreamSequencerBufferTest, MarkConsumedAcrossBlock) {
   // Write into [0, 2 * kBlockSizeBytes + 1024) and then read out [0, 1024)
-  std::string source(2 * kBlockSizeBytes + 1024, 'a');
+  string source(2 * kBlockSizeBytes + 1024, 'a');
   size_t written;
   buffer_->OnStreamData(0, source, clock_.ApproximateNow(), &written,
                         &error_details_);
@@ -779,13 +778,13 @@
 TEST_F(QuicStreamSequencerBufferTest, MarkConsumedAcrossEnd) {
   // Write into [0, 2.5 * kBlockSizeBytes - 1024) and then read out [0, 1024)
   // and then append 1024 + 512 bytes.
-  std::string source(2.5 * kBlockSizeBytes - 1024, 'a');
+  string source(2.5 * kBlockSizeBytes - 1024, 'a');
   size_t written;
   buffer_->OnStreamData(0, source, clock_.ApproximateNow(), &written,
                         &error_details_);
   char dest[1024];
   helper_->Read(dest, 1024);
-  source = std::string(1024 + 512, 'b');
+  source = string(1024 + 512, 'b');
   buffer_->OnStreamData(2.5 * kBlockSizeBytes - 1024, source,
                         clock_.ApproximateNow(), &written, &error_details_);
   EXPECT_EQ(1024u, buffer_->BytesConsumed());
@@ -806,7 +805,7 @@
 
 TEST_F(QuicStreamSequencerBufferTest, FlushBufferedFrames) {
   // Write into [0, 2.5 * kBlockSizeBytes - 1024) and then read out [0, 1024).
-  std::string source(max_capacity_bytes_ - 1024, 'a');
+  string source(max_capacity_bytes_ - 1024, 'a');
   size_t written;
   buffer_->OnStreamData(0, source, clock_.ApproximateNow(), &written,
                         &error_details_);
@@ -814,7 +813,7 @@
   helper_->Read(dest, 1024);
   EXPECT_EQ(1024u, buffer_->BytesConsumed());
   // Write [1024, 512) to the physical beginning.
-  source = std::string(512, 'b');
+  source = string(512, 'b');
   buffer_->OnStreamData(max_capacity_bytes_, source, clock_.ApproximateNow(),
                         &written, &error_details_);
   EXPECT_EQ(512u, written);
diff --git a/net/quic/test_tools/mock_quic_client_promised_info.cc b/net/quic/test_tools/mock_quic_client_promised_info.cc
index 3ec0eab..793ed3fd 100644
--- a/net/quic/test_tools/mock_quic_client_promised_info.cc
+++ b/net/quic/test_tools/mock_quic_client_promised_info.cc
@@ -4,6 +4,8 @@
 
 #include "net/quic/test_tools/mock_quic_client_promised_info.h"
 
+using std::string;
+
 namespace net {
 namespace test {
 
diff --git a/net/spdy/spdy_headers_handler_interface.h b/net/spdy/spdy_headers_handler_interface.h
index f15ea8e7..a6861af 100644
--- a/net/spdy/spdy_headers_handler_interface.h
+++ b/net/spdy/spdy_headers_handler_interface.h
@@ -18,7 +18,8 @@
   virtual ~SpdyHeadersHandlerInterface() {}
 
   // A callback method which notifies when the parser starts handling a new
-  // header block fragment.
+  // header block. Will only be called once per block, even if it extends into
+  // CONTINUATION frames.
   virtual void OnHeaderBlockStart() = 0;
 
   // A callback method which notifies on a header key value pair. Multiple
@@ -26,8 +27,8 @@
   virtual void OnHeader(base::StringPiece key, base::StringPiece value) = 0;
 
   // A callback method which notifies when the parser finishes handling a
-  // header block fragment. Also indicates the total number of bytes in this
-  // block.
+  // header block (i.e. the containing frame has the END_STREAM flag set).
+  // Also indicates the total number of bytes in this block.
   virtual void OnHeaderBlockEnd(size_t uncompressed_header_bytes) = 0;
 };
 
diff --git a/net/tools/quic/end_to_end_test.cc b/net/tools/quic/end_to_end_test.cc
index 66bc675..75b5dd5 100644
--- a/net/tools/quic/end_to_end_test.cc
+++ b/net/tools/quic/end_to_end_test.cc
@@ -1674,7 +1674,7 @@
   void OnCompleteResponse(QuicStreamId id,
                           const BalsaHeaders& response_headers,
                           const string& response_body) override {
-    std::string debug_string;
+    string debug_string;
     response_headers.DumpHeadersToString(&debug_string);
     DVLOG(1) << "response for stream " << id << " " << debug_string << "\n"
              << response_body;
@@ -2196,7 +2196,7 @@
       // push response.
       test::GenerateBody(&large_resource, resource_size);
     }
-    list<QuicInMemoryCache::ServerPushInfo> push_resources;
+    std::list<QuicInMemoryCache::ServerPushInfo> push_resources;
     for (size_t i = 0; i < num_resources; ++i) {
       string url = push_urls[i];
       GURL resource_url(url);
diff --git a/net/tools/quic/quic_client_session_test.cc b/net/tools/quic/quic_client_session_test.cc
index 4a3fd13..1619eed 100644
--- a/net/tools/quic/quic_client_session_test.cc
+++ b/net/tools/quic/quic_client_session_test.cc
@@ -38,6 +38,7 @@
 using net::test::kClientDataStreamId1;
 using net::test::kServerDataStreamId1;
 using net::test::kTestPort;
+using std::string;
 using testing::AnyNumber;
 using testing::Invoke;
 using testing::Truly;
diff --git a/net/tools/quic/quic_dispatcher.cc b/net/tools/quic/quic_dispatcher.cc
index 88189e0..6d08fbe2 100644
--- a/net/tools/quic/quic_dispatcher.cc
+++ b/net/tools/quic/quic_dispatcher.cc
@@ -17,10 +17,10 @@
 #include "net/tools/quic/quic_simple_server_session.h"
 #include "net/tools/quic/quic_time_wait_list_manager.h"
 
-namespace net {
-
-using std::make_pair;
 using base::StringPiece;
+using std::string;
+
+namespace net {
 
 namespace {
 
diff --git a/net/tools/quic/quic_in_memory_cache.cc b/net/tools/quic/quic_in_memory_cache.cc
index aa45d2f..4efd73d 100644
--- a/net/tools/quic/quic_in_memory_cache.cc
+++ b/net/tools/quic/quic_in_memory_cache.cc
@@ -18,6 +18,7 @@
 using base::FilePath;
 using base::IntToString;
 using base::StringPiece;
+using std::list;
 using std::string;
 
 namespace net {
@@ -26,7 +27,8 @@
 
 class ResourceFileImpl : public net::QuicInMemoryCache::ResourceFile {
  public:
-  ResourceFileImpl(const base::FilePath& file_name) : ResourceFile(file_name) {}
+  explicit ResourceFileImpl(const base::FilePath& file_name)
+      : ResourceFile(file_name) {}
 
   void Read() override {
     base::ReadFileToString(FilePath(file_name_), &file_contents_);
@@ -53,7 +55,7 @@
     StringPiece x_push_url("X-Push-Url");
     if (http_headers_->HasHeader(x_push_url)) {
       size_t iter = 0;
-      std::unique_ptr<std::string> push_url(new string());
+      std::unique_ptr<string> push_url(new string());
       while (
           http_headers_->EnumerateHeader(&iter, x_push_url, push_url.get())) {
         push_urls_.push_back(StringPiece(*push_url));
@@ -70,8 +72,8 @@
 
  private:
   scoped_refptr<HttpResponseHeaders> http_headers_;
-  std::string url_;
-  std::list<std::unique_ptr<string>> push_url_values_;
+  string url_;
+  list<std::unique_ptr<string>> push_url_values_;
 
   DISALLOW_COPY_AND_ASSIGN(ResourceFileImpl);
 };
diff --git a/net/tools/quic/quic_in_memory_cache.h b/net/tools/quic/quic_in_memory_cache.h
index e3a1324..72b210a 100644
--- a/net/tools/quic/quic_in_memory_cache.h
+++ b/net/tools/quic/quic_in_memory_cache.h
@@ -21,10 +21,6 @@
 #include "net/spdy/spdy_framer.h"
 #include "url/gurl.h"
 
-using base::StringPiece;
-using std::string;
-using std::list;
-
 namespace base {
 
 template <typename Type>
@@ -51,12 +47,12 @@
     ServerPushInfo(GURL request_url,
                    const SpdyHeaderBlock& headers,
                    SpdyPriority priority,
-                   string body);
+                   std::string body);
     ServerPushInfo(const ServerPushInfo& other);
     GURL request_url;
     SpdyHeaderBlock headers;
     SpdyPriority priority;
-    string body;
+    std::string body;
   };
 
   enum SpecialResponseType {
@@ -106,15 +102,15 @@
     virtual void Read() = 0;
     void SetHostPathFromBase(base::StringPiece base);
 
-    StringPiece host() { return host_; }
+    base::StringPiece host() { return host_; }
     void set_host(base::StringPiece host) { host_ = host; }
 
-    StringPiece path() { return path_; }
+    base::StringPiece path() { return path_; }
     void set_path(base::StringPiece path) { path_ = path; }
 
     SpdyHeaderBlock spdy_headers() { return spdy_headers_; }
 
-    StringPiece body() { return body_; }
+    base::StringPiece body() { return body_; }
 
     const std::vector<base::StringPiece>& push_urls() { return push_urls_; }
 
@@ -123,12 +119,12 @@
    protected:
     void HandleXOriginalUrl();
     void HandlePushUrls(const std::vector<base::StringPiece>& push_urls);
-    StringPiece RemoveScheme(base::StringPiece url);
+    base::StringPiece RemoveScheme(base::StringPiece url);
 
-    const string cache_directory_;
+    const std::string cache_directory_;
     const base::FilePath file_name_;
     const std::string file_name_string_;
-    string file_contents_;
+    std::string file_contents_;
     base::StringPiece body_;
     SpdyHeaderBlock spdy_headers_;
     base::StringPiece x_original_url_;
@@ -191,10 +187,10 @@
   void AddDefaultResponse(Response* response);
 
   // |cache_cirectory| can be generated using `wget -p --save-headers <url>`.
-  void InitializeFromDirectory(const string& cache_directory);
+  void InitializeFromDirectory(const std::string& cache_directory);
 
   // Find all the server push resources associated with |request_url|.
-  list<ServerPushInfo> GetServerPushResources(string request_url);
+  std::list<ServerPushInfo> GetServerPushResources(std::string request_url);
 
  private:
   typedef std::unordered_map<std::string, Response*> ResponseMap;
@@ -214,7 +210,7 @@
                        base::StringPiece response_body,
                        const SpdyHeaderBlock& response_trailers);
 
-  string GetKey(base::StringPiece host, base::StringPiece path) const;
+  std::string GetKey(base::StringPiece host, base::StringPiece path) const;
 
   // Add some server push urls with given responses for specified
   // request if these push resources are not associated with this request yet.
@@ -224,7 +220,7 @@
 
   // Check if push resource(push_host/push_path) associated with given request
   // url already exists in server push map.
-  bool PushResourceExistsInCache(string original_request_url,
+  bool PushResourceExistsInCache(std::string original_request_url,
                                  ServerPushInfo resource);
 
   // Cached responses.
@@ -234,7 +230,7 @@
   scoped_ptr<Response> default_response_;
 
   // A map from request URL to associated server push responses (if any).
-  std::multimap<string, ServerPushInfo> server_push_resources_;
+  std::multimap<std::string, ServerPushInfo> server_push_resources_;
 
   DISALLOW_COPY_AND_ASSIGN(QuicInMemoryCache);
 };
diff --git a/net/tools/quic/quic_server_session_base.cc b/net/tools/quic/quic_server_session_base.cc
index 2027ae49..78ddf0f8 100644
--- a/net/tools/quic/quic_server_session_base.cc
+++ b/net/tools/quic/quic_server_session_base.cc
@@ -12,6 +12,8 @@
 #include "net/quic/quic_spdy_session.h"
 #include "net/quic/reliable_quic_stream.h"
 
+using std::string;
+
 namespace net {
 
 QuicServerSessionBase::QuicServerSessionBase(
diff --git a/net/tools/quic/quic_simple_server_session.cc b/net/tools/quic/quic_simple_server_session.cc
index 38dac8e..8a31699e 100644
--- a/net/tools/quic/quic_simple_server_session.cc
+++ b/net/tools/quic/quic_simple_server_session.cc
@@ -14,6 +14,8 @@
 #include "net/tools/quic/quic_simple_server_stream.h"
 #include "url/gurl.h"
 
+using std::string;
+
 namespace net {
 
 QuicSimpleServerSession::QuicSimpleServerSession(
diff --git a/net/tools/quic/quic_simple_server_session.h b/net/tools/quic/quic_simple_server_session.h
index 92c65d60..2754f36 100644
--- a/net/tools/quic/quic_simple_server_session.h
+++ b/net/tools/quic/quic_simple_server_session.h
@@ -113,7 +113,7 @@
   // Copying the rest headers ensures they are the same as the original
   // request, especially cookies.
   SpdyHeaderBlock SynthesizePushRequestHeaders(
-      string request_url,
+      std::string request_url,
       QuicInMemoryCache::ServerPushInfo resource,
       const SpdyHeaderBlock& original_request_headers);
 
@@ -153,4 +153,4 @@
 
 }  // namespace net
 
-#endif  // NET_TOOLS_QUIC_QUIC_SERVER_SESSION_H_
+#endif  // NET_TOOLS_QUIC_QUIC_SIMPLE_SERVER_SESSION_H_
diff --git a/printing/pdf_metafile_cg_mac.cc b/printing/pdf_metafile_cg_mac.cc
index e717c16..c8fe2fd8 100644
--- a/printing/pdf_metafile_cg_mac.cc
+++ b/printing/pdf_metafile_cg_mac.cc
@@ -80,15 +80,7 @@
 namespace printing {
 
 PdfMetafileCg::PdfMetafileCg()
-    : page_is_open_(false),
-      thread_pdf_docs_owned_(false) {
-  if (!thread_pdf_docs.Pointer()->Get() &&
-      base::mac::IsOSSnowLeopard()) {
-    thread_pdf_docs_owned_ = true;
-    thread_pdf_docs.Pointer()->Set(
-        CFSetCreateMutable(kCFAllocatorDefault, 0, &kCFTypeSetCallBacks));
-  }
-}
+    : page_is_open_(false), thread_pdf_docs_owned_(false) {}
 
 PdfMetafileCg::~PdfMetafileCg() {
   DCHECK(thread_checker_.CalledOnValidThread());
diff --git a/remoting/host/desktop_resizer_mac.cc b/remoting/host/desktop_resizer_mac.cc
index 5c84bd5..d3490a7 100644
--- a/remoting/host/desktop_resizer_mac.cc
+++ b/remoting/host/desktop_resizer_mac.cc
@@ -47,7 +47,7 @@
 
 ScreenResolution DesktopResizerMac::GetCurrentResolution() {
   CGDirectDisplayID display;
-  if (!base::mac::IsOSSnowLeopard() && GetSoleDisplayId(&display)) {
+  if (GetSoleDisplayId(&display)) {
     CGRect rect = CGDisplayBounds(display);
     return ScreenResolution(
         webrtc::DesktopSize(rect.size.width, rect.size.height),
@@ -66,7 +66,7 @@
 
 void DesktopResizerMac::SetResolution(const ScreenResolution& resolution) {
   CGDirectDisplayID display;
-  if (base::mac::IsOSSnowLeopard() || !GetSoleDisplayId(&display)) {
+  if (!GetSoleDisplayId(&display)) {
     return;
   }
 
diff --git a/remoting/protocol/webrtc_transport.cc b/remoting/protocol/webrtc_transport.cc
index 6a198d1..fbec3d2 100644
--- a/remoting/protocol/webrtc_transport.cc
+++ b/remoting/protocol/webrtc_transport.cc
@@ -47,6 +47,11 @@
 const char kDisableAuthenticationSwitchName[] = "disable-authentication";
 #endif
 
+bool IsValidSessionDescriptionType(const std::string& type) {
+  return type == webrtc::SessionDescriptionInterface::kOffer ||
+         type == webrtc::SessionDescriptionInterface::kAnswer;
+}
+
 // Normalizes the SDP message to make sure the text used for HMAC signatures
 // verifications is the same that was signed on the sending side. This is
 // necessary because WebRTC generates SDP with CRLF line endings which are
@@ -221,7 +226,7 @@
     std::string type = session_description->Attr(QName(std::string(), "type"));
     std::string sdp =
         NormalizeSessionDescription(session_description->BodyText());
-    if (type.empty() || sdp.empty()) {
+    if (!IsValidSessionDescriptionType(type) || sdp.empty()) {
       LOG(ERROR) << "Incorrect session description format.";
       return false;
     }
@@ -230,7 +235,7 @@
         session_description->Attr(QName(std::string(), "signature"));
     std::string signature;
     if (!base::Base64Decode(signature_base64, &signature) ||
-        !handshake_hmac_.Verify(sdp, signature)) {
+        !handshake_hmac_.Verify(type + " " + sdp, signature)) {
       LOG(WARNING) << "Received session-description with invalid signature.";
       bool ignore_error = false;
 #if !defined(NDEBUG)
@@ -334,7 +339,7 @@
 
   std::string digest;
   digest.resize(handshake_hmac_.DigestLength());
-  CHECK(handshake_hmac_.Sign(description_sdp,
+  CHECK(handshake_hmac_.Sign(description->type() + " " + description_sdp,
                              reinterpret_cast<uint8_t*>(&(digest[0])),
                              digest.size()));
   std::string digest_base64;
diff --git a/sandbox/linux/BUILD.gn b/sandbox/linux/BUILD.gn
index 4b5d1265..e08f42b 100644
--- a/sandbox/linux/BUILD.gn
+++ b/sandbox/linux/BUILD.gn
@@ -192,14 +192,33 @@
       rebase_path(outputs, root_build_dir) + rebase_path(inputs, root_build_dir)
 }
 
-test("sandbox_linux_unittests") {
+# TODO(GYP): Delete these after we've converted everything to GN.
+# The _run targets exist only for compatibility w/ GYP.
+group("sandbox_linux_unittests_run") {
+  testonly = true
+  deps = [
+    ":sandbox_linux_unittests",
+  ]
+}
+
+if (is_android) {
+  group("sandbox_linux_unittests_apk_run") {
+    testonly = true
+    deps = [
+      ":sandbox_linux_unittests",
+    ]
+  }
+}
+
+# The main sandboxing test target. "sandbox_linux_unittests" cannot use the
+# test() template because the test is run as an executable not as an APK on
+# Android.
+executable("sandbox_linux_unittests") {
+  testonly = true
   deps = [
     ":sandbox_linux_unittests_sources",
     "//build/config/sanitizers:deps",
   ]
-  if (is_android) {
-    use_raw_android_executable = true
-  }
 }
 
 component("seccomp_bpf") {
@@ -435,11 +454,23 @@
 }
 
 if (is_android) {
-  # TODO(GYP) Delete this after we've converted everything to GN.
-  group("sandbox_linux_unittests_deps") {
+  create_native_executable_dist("sandbox_linux_unittests_deps") {
     testonly = true
+    dist_dir = "$root_out_dir/sandbox_linux_unittests_deps"
+    binary = "$root_out_dir/sandbox_linux_unittests"
     deps = [
       ":sandbox_linux_unittests",
     ]
+
+    if (is_component_build) {
+      deps += [ "//build/android:cpplib_stripped" ]
+    }
+  }
+
+  test_runner_script("sandbox_linux_unittests__test_runner_script") {
+    test_name = "sandbox_linux_unittests"
+    test_type = "gtest"
+    test_suite = "sandbox_linux_unittests"
+    isolate_file = "//sandbox/sandbox_linux_unittests_android.isolate"
   }
 }
diff --git a/sandbox/mac/bootstrap_sandbox_unittest.mm b/sandbox/mac/bootstrap_sandbox_unittest.mm
index 6ef1937..e4c13e5d 100644
--- a/sandbox/mac/bootstrap_sandbox_unittest.mm
+++ b/sandbox/mac/bootstrap_sandbox_unittest.mm
@@ -92,8 +92,6 @@
   BootstrapSandboxPolicy BaselinePolicy() {
     BootstrapSandboxPolicy policy;
     policy.rules["com.apple.cfprefsd.daemon"] = Rule(POLICY_ALLOW);
-    if (base::mac::IsOSSnowLeopard())
-      policy.rules["com.apple.SecurityServer"] = Rule(POLICY_ALLOW);
     return policy;
   }
 
@@ -341,12 +339,7 @@
   send_rights = 0;
   ASSERT_EQ(KERN_SUCCESS, mach_port_get_refs(task, port, MACH_PORT_RIGHT_SEND,
       &send_rights));
-  // On 10.6, bootstrap_lookup2 may add an extra right to place it in a per-
-  // process cache.
-  if (base::mac::IsOSSnowLeopard())
-    EXPECT_TRUE(send_rights == 3u || send_rights == 2u) << send_rights;
-  else
-    EXPECT_EQ(2u, send_rights);
+  EXPECT_EQ(2u, send_rights);
 }
 
 const char kDefaultRuleTestAllow[] =
diff --git a/skia/config/SkUserConfig.h b/skia/config/SkUserConfig.h
index ee5f08a5..621844f 100644
--- a/skia/config/SkUserConfig.h
+++ b/skia/config/SkUserConfig.h
@@ -258,6 +258,10 @@
 #   define SK_SUPPORT_LEGACY_TYPEFACE_PTR
 #endif
 
+#ifndef    SK_SUPPORT_LEGACY_MASKFILTER_PTR
+#   define SK_SUPPORT_LEGACY_MASKFILTER_PTR
+#endif
+
 ///////////////////////// Imported from BUILD.gn and skia_common.gypi
 
 /* In some places Skia can use static initializers for global initialization,
diff --git a/testing/test.gni b/testing/test.gni
index 4f55c2eb..b438780 100644
--- a/testing/test.gni
+++ b/testing/test.gni
@@ -8,15 +8,76 @@
 
 # Define a test as an executable (or apk on Android) with the "testonly" flag
 # set.
-# Variable:
-#   use_raw_android_executable: Use executable() rather than android_apk().
 template("test") {
   if (is_android) {
     import("//build/config/android/config.gni")
     import("//build/config/android/rules.gni")
 
-    _use_raw_android_executable = defined(invoker.use_raw_android_executable) &&
-                                  invoker.use_raw_android_executable
+    _library_target = "_${target_name}__library"
+    _apk_target = "${target_name}_apk"
+
+    shared_library(_library_target) {
+      # Configs will always be defined since we set_defaults for a component
+      # in the main config. We want to use those rather than whatever came with
+      # the nested shared/static library inside the component.
+      configs = []  # Prevent list overwriting warning.
+      configs = invoker.configs
+
+      testonly = true
+
+      # Don't use "*" to forward all variables since some (like output_name
+      # and isolate_file) apply only to the APK below.
+      deps = []
+      forward_variables_from(invoker,
+                             [
+                               "all_dependent_configs",
+                               "allow_circular_includes_from",
+                               "cflags",
+                               "cflags_c",
+                               "cflags_cc",
+                               "check_includes",
+                               "data",
+                               "data_deps",
+                               "datadeps",
+                               "defines",
+                               "deps",
+                               "include_dirs",
+                               "ldflags",
+                               "lib_dirs",
+                               "libs",
+                               "output_extension",
+                               "output_name",
+                               "public",
+                               "public_configs",
+                               "public_deps",
+                               "sources",
+                               "visibility",
+                             ])
+
+      if (!defined(invoker.use_default_launcher) ||
+          invoker.use_default_launcher) {
+        deps += [ "//testing/android/native_test:native_test_native_code" ]
+      }
+    }
+
+    unittest_apk(_apk_target) {
+      forward_variables_from(invoker,
+                             [
+                               "android_manifest",
+                               "deps",
+                               "enable_multidex",
+                               "use_default_launcher",
+                               "write_asset_list",
+                             ])
+      unittests_dep = ":$_library_target"
+      apk_name = invoker.target_name
+      if (defined(invoker.output_name)) {
+        apk_name = invoker.output_name
+        unittests_binary = "lib${apk_name}.so"
+        install_script_name = "install_${invoker.output_name}"
+      }
+      deps += [ ":$_library_target" ]
+    }
 
     # output_name is used to allow targets with the same name but in different
     # packages to still produce unique runner scripts.
@@ -24,124 +85,46 @@
     if (defined(invoker.output_name)) {
       _output_name = invoker.output_name
     }
-
-    if (_use_raw_android_executable) {
-      _exec_target = "${target_name}__exec"
-      _dist_target = "${target_name}__dist"
-      _exec_output =
-          "$target_out_dir/${invoker.target_name}/${invoker.target_name}"
-
-      executable(_exec_target) {
-        data_deps = []
-        forward_variables_from(invoker, "*")
-        testonly = true
-
-        # Don't output to the root or else conflict with the group() below.
-        output_name = rebase_path(_exec_output, root_out_dir)
-        if (is_component_build || is_asan) {
-          data_deps += [ "//build/android:cpplib_stripped" ]
-        }
-      }
-
-      # TODO(agrieve): This is required for component builds, but it's not
-      # currently used by test_runner.py (and so doesn't work in component
-      # builds).
-      create_native_executable_dist(_dist_target) {
-        testonly = true
-        include_main_binary = true
-        dist_dir = "$root_out_dir/$target_name"
-        binary = _exec_output
-        deps = [
-          ":$_exec_target",
-        ]
-      }
-    } else {
-      _library_target = "_${target_name}__library"
-      _apk_target = "${target_name}_apk"
-      _apk_specific_vars = [
-        "android_manifest",
-        "enable_multidex",
-        "use_default_launcher",
-        "write_asset_list",
-      ]
-      shared_library(_library_target) {
-        # Configs will always be defined since we set_defaults for a component
-        # in the main config. We want to use those rather than whatever came
-        # with the nested shared/static library inside the component.
-        configs = []  # Prevent list overwriting warning.
-        configs = invoker.configs
-        testonly = true
-
-        deps = []
-        forward_variables_from(invoker,
-                               "*",
-                               _apk_specific_vars + [
-                                     "isolate_file",
-                                     "visibility",
-                                   ])
-
-        if (!defined(invoker.use_default_launcher) ||
-            invoker.use_default_launcher) {
-          deps += [ "//testing/android/native_test:native_test_native_code" ]
-        }
-      }
-      unittest_apk(_apk_target) {
-        forward_variables_from(invoker, _apk_specific_vars + [ "deps" ])
-        unittests_dep = ":$_library_target"
-        apk_name = invoker.target_name
-        if (defined(invoker.output_name)) {
-          apk_name = invoker.output_name
-          unittests_binary = "lib${apk_name}.so"
-          install_script_name = "install_${invoker.output_name}"
-        }
-        deps += [ ":$_library_target" ]
-      }
-
-      # Incremental test targets work only for .apks.
-      _incremental_test_runner_target =
-          "${_output_name}_incremental__test_runner_script"
-      test_runner_script(_incremental_test_runner_target) {
-        forward_variables_from(invoker, [ "isolate_file" ])
-        apk_target = ":$_apk_target"
-        test_name = "${_output_name}_incremental"
-        test_type = "gtest"
-        test_suite = _output_name
-        incremental_install = true
-      }
-      group("${target_name}_incremental") {
-        testonly = true
-        datadeps = [
-          ":$_incremental_test_runner_target",
-        ]
-        deps = [
-          ":${_apk_target}_incremental",
-        ]
-      }
-    }
-
     _test_runner_target = "${_output_name}__test_runner_script"
     test_runner_script(_test_runner_target) {
-      forward_variables_from(invoker, [ "isolate_file" ])
-      if (_use_raw_android_executable) {
-        executable = "$root_out_dir/$_dist_target/${invoker.target_name}"
-      } else {
-        apk_target = ":$_apk_target"
-      }
+      apk_target = ":$_apk_target"
       test_name = _output_name
       test_type = "gtest"
       test_suite = _output_name
+      if (defined(invoker.isolate_file)) {
+        isolate_file = invoker.isolate_file
+      }
+    }
+    _incremental_test_runner_target =
+        "${_output_name}_incremental__test_runner_script"
+    test_runner_script(_incremental_test_runner_target) {
+      apk_target = ":$_apk_target"
+      test_name = "${_output_name}_incremental"
+      test_type = "gtest"
+      test_suite = _output_name
+      incremental_install = true
+      if (defined(invoker.isolate_file)) {
+        isolate_file = invoker.isolate_file
+      }
     }
 
     group(target_name) {
       testonly = true
-      deps = [
+      datadeps = [
         ":$_test_runner_target",
       ]
-      if (_use_raw_android_executable) {
-        deps += [ ":$_dist_target" ]
-      } else {
-        deps += [ ":$_apk_target" ]
-      }
+      deps = [
+        ":$_apk_target",
+      ]
+    }
+    group("${target_name}_incremental") {
+      testonly = true
+      datadeps = [
+        ":$_incremental_test_runner_target",
+      ]
+      deps = [
+        ":${_apk_target}_incremental",
+      ]
     }
 
     # TODO(GYP): Delete this after we've converted everything to GN.
diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations
index 2030687..81c87776 100644
--- a/third_party/WebKit/LayoutTests/TestExpectations
+++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -289,7 +289,6 @@
 crbug.com/569139 fast/js/string-replace-2.html [ NeedsManualRebaseline ]
 crbug.com/569139 fast/js/regexp-caching.html [ NeedsManualRebaseline ]
 crbug.com/597221 fast/dom/Window/window-postmessage-clone-deep-array.html [ NeedsManualRebaseline ]
-crbug.com/597221 imported/web-platform-tests/html/semantics/text-level-semantics/the-time-element/001.html [ NeedsManualRebaseline ]
 
 crbug.com/498539 http/tests/inspector/elements/styles/selector-line.html [ Pass Timeout ]
 crbug.com/498539 http/tests/inspector/network/network-datareceived.html [ Pass Timeout ]
@@ -1109,11 +1108,6 @@
 
 crbug.com/464736 http/tests/xmlhttprequest/ontimeout-event-override-after-failure.html [ Pass Failure ]
 
-crbug.com/598549 fast/images/jpeg-yuv-progressive-canvas.html [ NeedsRebaseline ]
-crbug.com/598549 fast/images/jpeg-yuv-progressive-image.html [ NeedsRebaseline ]
-crbug.com/598549 virtual/gpu-rasterization/fast/images/jpeg-yuv-progressive-image.html [ NeedsRebaseline ]
-crbug.com/598549 virtual/gpu-rasterization/fast/images/jpeg-yuv-progressive-canvas.html [ NeedsRebaseline ]
-
 crbug.com/595483 [ Android ] editing/caret/caret-color.html [ Failure Crash ]
 crbug.com/595483 [ Android ] fast/invalid/009.html [ Failure Crash ]
 crbug.com/595483 [ Android ] fast/hidpi/clip-text-in-hidpi.html [ Failure Crash ]
@@ -1320,11 +1314,10 @@
 
 crbug.com/588103 fast/xmlhttprequest/xmlhttprequest-responsetype-arraybuffer.html [ Pass Failure ]
 
-# An upcoming Skia change (https://codereview.chromium.org/1848953002/) will cause minor pixel diffs.
-crbug.com/599933 css3/filters/effect-reference-hw.html [ NeedsManualRebaseline ]
-crbug.com/599933 css3/filters/effect-reference-colorspace-hw.html [ NeedsManualRebaseline ]
-crbug.com/599933 css3/filters/effect-reference-ordering-hw.html [ NeedsManualRebaseline ]
-crbug.com/599933 css3/filters/effect-reference-zoom-hw.html [ NeedsManualRebaseline ]
+crbug.com/599933 css3/filters/effect-reference-hw.html [ NeedsRebaseline ]
+crbug.com/599933 css3/filters/effect-reference-colorspace-hw.html [ NeedsRebaseline ]
+crbug.com/599933 css3/filters/effect-reference-ordering-hw.html [ NeedsRebaseline ]
+crbug.com/599933 css3/filters/effect-reference-zoom-hw.html [ NeedsRebaseline ]
 
 crbug.com/594672 fast/events/iframe-object-onload.html [ Failure Pass ]
 crbug.com/594672 fast/events/scale-and-scroll-iframe-body.html [ Failure Pass ]
diff --git a/third_party/WebKit/LayoutTests/fast/images/jpeg-yuv-progressive-canvas-expected.png b/third_party/WebKit/LayoutTests/fast/images/jpeg-yuv-progressive-canvas-expected.png
new file mode 100644
index 0000000..dca0da4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/images/jpeg-yuv-progressive-canvas-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/fast/images/jpeg-yuv-progressive-canvas-expected.txt b/third_party/WebKit/LayoutTests/fast/images/jpeg-yuv-progressive-canvas-expected.txt
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/images/jpeg-yuv-progressive-canvas-expected.txt
@@ -0,0 +1 @@
+
diff --git a/third_party/WebKit/LayoutTests/fast/images/jpeg-yuv-progressive-image-expected.png b/third_party/WebKit/LayoutTests/fast/images/jpeg-yuv-progressive-image-expected.png
new file mode 100644
index 0000000..23438b0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/images/jpeg-yuv-progressive-image-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/fast/images/jpeg-yuv-progressive-image-expected.txt b/third_party/WebKit/LayoutTests/fast/images/jpeg-yuv-progressive-image-expected.txt
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/images/jpeg-yuv-progressive-image-expected.txt
@@ -0,0 +1 @@
+
diff --git a/third_party/WebKit/LayoutTests/imported/web-platform-tests/html/semantics/text-level-semantics/the-time-element/001-expected.txt b/third_party/WebKit/LayoutTests/imported/web-platform-tests/html/semantics/text-level-semantics/the-time-element/001-expected.txt
index d253fcd9..e8ac5a3 100644
--- a/third_party/WebKit/LayoutTests/imported/web-platform-tests/html/semantics/text-level-semantics/the-time-element/001-expected.txt
+++ b/third_party/WebKit/LayoutTests/imported/web-platform-tests/html/semantics/text-level-semantics/the-time-element/001-expected.txt
@@ -1,7 +1,7 @@
 This is a testharness.js-based test.
 PASS HTML parsing should locate 4 time elements in this document 
 FAIL HTMLTimeElement should be exposed for prototyping assert_true: expected true got false
-FAIL the time elements should be instanceof HTMLTimeElement Expecting a function in instanceof check, but got undefined
+FAIL the time elements should be instanceof HTMLTimeElement Right-hand side of 'instanceof' is not an object
 FAIL the datetime attribute should be reflected by the .dateTime property assert_equals: expected (string) "2000-02-01T03:04:05Z" but got (undefined) undefined
 FAIL the dateTime IDL property should default to an empty string assert_equals: typeof test expected "string" but got "undefined"
 PASS the dateTime property should be read/write 
diff --git a/third_party/WebKit/LayoutTests/platform/android/imported/web-platform-tests/html/semantics/text-level-semantics/the-time-element/001-expected.txt b/third_party/WebKit/LayoutTests/platform/android/imported/web-platform-tests/html/semantics/text-level-semantics/the-time-element/001-expected.txt
new file mode 100644
index 0000000..d253fcd9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/imported/web-platform-tests/html/semantics/text-level-semantics/the-time-element/001-expected.txt
@@ -0,0 +1,11 @@
+This is a testharness.js-based test.
+PASS HTML parsing should locate 4 time elements in this document 
+FAIL HTMLTimeElement should be exposed for prototyping assert_true: expected true got false
+FAIL the time elements should be instanceof HTMLTimeElement Expecting a function in instanceof check, but got undefined
+FAIL the datetime attribute should be reflected by the .dateTime property assert_equals: expected (string) "2000-02-01T03:04:05Z" but got (undefined) undefined
+FAIL the dateTime IDL property should default to an empty string assert_equals: typeof test expected "string" but got "undefined"
+PASS the dateTime property should be read/write 
+FAIL the datetime attribute should be reflected by the .dateTime property even if it is invalid assert_equals: expected (string) "go fish" but got (undefined) undefined
+FAIL the datetime attribute should not reflect the textContent assert_equals: expected (string) "" but got (undefined) undefined
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/fast/images/jpeg-yuv-progressive-image-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/fast/images/jpeg-yuv-progressive-image-expected.png
new file mode 100644
index 0000000..6801b665
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/fast/images/jpeg-yuv-progressive-image-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/gpu-rasterization/fast/images/jpeg-yuv-progressive-image-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/gpu-rasterization/fast/images/jpeg-yuv-progressive-image-expected.png
new file mode 100644
index 0000000..6801b665
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/gpu-rasterization/fast/images/jpeg-yuv-progressive-image-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/gpu-rasterization/fast/images/jpeg-yuv-progressive-image-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/gpu-rasterization/fast/images/jpeg-yuv-progressive-image-expected.png
new file mode 100644
index 0000000..bba0ac2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/gpu-rasterization/fast/images/jpeg-yuv-progressive-image-expected.png
Binary files differ
diff --git a/third_party/WebKit/Source/core/animation/Animation.cpp b/third_party/WebKit/Source/core/animation/Animation.cpp
index b69ad58..bc25939 100644
--- a/third_party/WebKit/Source/core/animation/Animation.cpp
+++ b/third_party/WebKit/Source/core/animation/Animation.cpp
@@ -657,7 +657,7 @@
     m_pendingFinishedEvent = nullptr;
 }
 
-DispatchEventResult Animation::dispatchEventInternal(RawPtr<Event> event)
+DispatchEventResult Animation::dispatchEventInternal(Event* event)
 {
     if (m_pendingFinishedEvent == event)
         m_pendingFinishedEvent = nullptr;
@@ -1053,7 +1053,7 @@
         InspectorInstrumentation::animationPlayStateChanged(m_animation->timeline()->document(), m_animation, oldPlayState, newPlayState);
 }
 
-bool Animation::addEventListenerInternal(const AtomicString& eventType, RawPtr<EventListener> listener, const EventListenerOptions& options)
+bool Animation::addEventListenerInternal(const AtomicString& eventType, EventListener* listener, const EventListenerOptions& options)
 {
     if (eventType == EventTypeNames::finish)
         UseCounter::count(getExecutionContext(), UseCounter::AnimationFinishEvent);
diff --git a/third_party/WebKit/Source/core/animation/Animation.h b/third_party/WebKit/Source/core/animation/Animation.h
index 1929595..ca40fc0b 100644
--- a/third_party/WebKit/Source/core/animation/Animation.h
+++ b/third_party/WebKit/Source/core/animation/Animation.h
@@ -181,8 +181,8 @@
     DECLARE_VIRTUAL_TRACE();
 
 protected:
-    DispatchEventResult dispatchEventInternal(RawPtr<Event>) override;
-    bool addEventListenerInternal(const AtomicString& eventType, RawPtr<EventListener>, const EventListenerOptions&) override;
+    DispatchEventResult dispatchEventInternal(Event*) override;
+    bool addEventListenerInternal(const AtomicString& eventType, EventListener*, const EventListenerOptions&) override;
 
 private:
     Animation(ExecutionContext*, AnimationTimeline&, AnimationEffect*);
diff --git a/third_party/WebKit/Source/core/animation/animatable/AnimatableShapeValue.cpp b/third_party/WebKit/Source/core/animation/animatable/AnimatableShapeValue.cpp
index fdd58dff..2c7833f4 100644
--- a/third_party/WebKit/Source/core/animation/animatable/AnimatableShapeValue.cpp
+++ b/third_party/WebKit/Source/core/animation/animatable/AnimatableShapeValue.cpp
@@ -55,7 +55,7 @@
     const AnimatableShapeValue* shapeValue = toAnimatableShapeValue(value);
     const BasicShape* fromShape = this->m_shape->shape();
     const BasicShape* toShape = shapeValue->m_shape->shape();
-    return AnimatableShapeValue::create(ShapeValue::createShapeValue(toShape->blend(fromShape, fraction), shapeValue->m_shape->cssBox()).get());
+    return AnimatableShapeValue::create(ShapeValue::createShapeValue(toShape->blend(fromShape, fraction), shapeValue->m_shape->cssBox()));
 }
 
 bool AnimatableShapeValue::equalTo(const AnimatableValue* value) const
diff --git a/third_party/WebKit/Source/core/animation/animatable/AnimatableValueTestHelperTest.cpp b/third_party/WebKit/Source/core/animation/animatable/AnimatableValueTestHelperTest.cpp
index 9836062b..fe7541d 100644
--- a/third_party/WebKit/Source/core/animation/animatable/AnimatableValueTestHelperTest.cpp
+++ b/third_party/WebKit/Source/core/animation/animatable/AnimatableValueTestHelperTest.cpp
@@ -66,7 +66,7 @@
         testing::StartsWith("AnimatableNeutral@"));
 
     EXPECT_THAT(
-        PrintToString(AnimatableShapeValue::create(ShapeValue::createShapeValue(BasicShapeCircle::create().get(), ContentBox).get())),
+        PrintToString(AnimatableShapeValue::create(ShapeValue::createShapeValue(BasicShapeCircle::create().get(), ContentBox))),
         testing::StartsWith("AnimatableShapeValue@"));
 
     RefPtr<SVGDashArray> l2 = SVGDashArray::create();
diff --git a/third_party/WebKit/Source/core/css/CSSDefaultStyleSheets.cpp b/third_party/WebKit/Source/core/css/CSSDefaultStyleSheets.cpp
index 70c17aa3..faeb1f5 100644
--- a/third_party/WebKit/Source/core/css/CSSDefaultStyleSheets.cpp
+++ b/third_party/WebKit/Source/core/css/CSSDefaultStyleSheets.cpp
@@ -45,20 +45,20 @@
 
 CSSDefaultStyleSheets& CSSDefaultStyleSheets::instance()
 {
-    DEFINE_STATIC_LOCAL(Persistent<CSSDefaultStyleSheets>, cssDefaultStyleSheets, (new CSSDefaultStyleSheets()));
-    return *cssDefaultStyleSheets;
+    DEFINE_STATIC_LOCAL(CSSDefaultStyleSheets, cssDefaultStyleSheets, (new CSSDefaultStyleSheets));
+    return cssDefaultStyleSheets;
 }
 
 static const MediaQueryEvaluator& screenEval()
 {
-    DEFINE_STATIC_LOCAL(Persistent<MediaQueryEvaluator>, staticScreenEval, (new MediaQueryEvaluator("screen")));
-    return *staticScreenEval;
+    DEFINE_STATIC_LOCAL(MediaQueryEvaluator, staticScreenEval, (new MediaQueryEvaluator("screen")));
+    return staticScreenEval;
 }
 
 static const MediaQueryEvaluator& printEval()
 {
-    DEFINE_STATIC_LOCAL(Persistent<MediaQueryEvaluator>, staticPrintEval, (new MediaQueryEvaluator("print")));
-    return *staticPrintEval;
+    DEFINE_STATIC_LOCAL(MediaQueryEvaluator, staticPrintEval, (new MediaQueryEvaluator("print")));
+    return staticPrintEval;
 }
 
 static RawPtr<StyleSheetContents> parseUASheet(const String& str)
diff --git a/third_party/WebKit/Source/core/css/CSSPathValue.cpp b/third_party/WebKit/Source/core/css/CSSPathValue.cpp
index 8b0bab4f..43421478 100644
--- a/third_party/WebKit/Source/core/css/CSSPathValue.cpp
+++ b/third_party/WebKit/Source/core/css/CSSPathValue.cpp
@@ -39,10 +39,10 @@
 
 } // namespace
 
-CSSPathValue* CSSPathValue::emptyPathValue()
+CSSPathValue& CSSPathValue::emptyPathValue()
 {
-    DEFINE_STATIC_LOCAL(Persistent<CSSPathValue>, empty, (createPathValue()));
-    return empty.get();
+    DEFINE_STATIC_LOCAL(CSSPathValue, empty, (createPathValue()));
+    return empty;
 }
 
 String CSSPathValue::customCSSText() const
diff --git a/third_party/WebKit/Source/core/css/CSSPathValue.h b/third_party/WebKit/Source/core/css/CSSPathValue.h
index ff51d0f..ca1e03c 100644
--- a/third_party/WebKit/Source/core/css/CSSPathValue.h
+++ b/third_party/WebKit/Source/core/css/CSSPathValue.h
@@ -20,7 +20,7 @@
     static RawPtr<CSSPathValue> create(PassRefPtr<StylePath>);
     static RawPtr<CSSPathValue> create(PassOwnPtr<SVGPathByteStream>);
 
-    static CSSPathValue* emptyPathValue();
+    static CSSPathValue& emptyPathValue();
 
     StylePath* stylePath() const { return m_stylePath.get(); }
     String customCSSText() const;
diff --git a/third_party/WebKit/Source/core/css/CSSValuePool.cpp b/third_party/WebKit/Source/core/css/CSSValuePool.cpp
index 49522024b..53dce3f 100644
--- a/third_party/WebKit/Source/core/css/CSSValuePool.cpp
+++ b/third_party/WebKit/Source/core/css/CSSValuePool.cpp
@@ -34,8 +34,8 @@
 
 CSSValuePool& cssValuePool()
 {
-    DEFINE_STATIC_LOCAL(Persistent<CSSValuePool>, pool, (new CSSValuePool()));
-    return *pool;
+    DEFINE_STATIC_LOCAL(CSSValuePool, pool, (new CSSValuePool));
+    return pool;
 }
 
 CSSValuePool::CSSValuePool()
diff --git a/third_party/WebKit/Source/core/css/StylePropertySerializer.cpp b/third_party/WebKit/Source/core/css/StylePropertySerializer.cpp
index 8b25ec01..5988e8e 100644
--- a/third_party/WebKit/Source/core/css/StylePropertySerializer.cpp
+++ b/third_party/WebKit/Source/core/css/StylePropertySerializer.cpp
@@ -27,6 +27,7 @@
 #include "core/css/CSSCustomPropertyDeclaration.h"
 #include "core/css/CSSPropertyMetadata.h"
 #include "core/css/CSSValuePool.h"
+#include "wtf/StdLibExtras.h"
 #include "wtf/text/StringBuilder.h"
 #include <bitset>
 
@@ -856,9 +857,9 @@
 static void appendBackgroundRepeatValue(StringBuilder& builder, const CSSValue& repeatXCSSValue, const CSSValue& repeatYCSSValue)
 {
     // FIXME: Ensure initial values do not appear in CSS_VALUE_LISTS.
-    DEFINE_STATIC_REF_WILL_BE_PERSISTENT(CSSPrimitiveValue, initialRepeatValue, (CSSPrimitiveValue::createIdentifier(CSSValueRepeat)));
-    const CSSPrimitiveValue& repeatX = repeatXCSSValue.isInitialValue() ? *initialRepeatValue : toCSSPrimitiveValue(repeatXCSSValue);
-    const CSSPrimitiveValue& repeatY = repeatYCSSValue.isInitialValue() ? *initialRepeatValue : toCSSPrimitiveValue(repeatYCSSValue);
+    DEFINE_STATIC_LOCAL(CSSPrimitiveValue, initialRepeatValue, (CSSPrimitiveValue::createIdentifier(CSSValueRepeat)));
+    const CSSPrimitiveValue& repeatX = repeatXCSSValue.isInitialValue() ? initialRepeatValue : toCSSPrimitiveValue(repeatXCSSValue);
+    const CSSPrimitiveValue& repeatY = repeatYCSSValue.isInitialValue() ? initialRepeatValue : toCSSPrimitiveValue(repeatYCSSValue);
     CSSValueID repeatXValueId = repeatX.getValueID();
     CSSValueID repeatYValueId = repeatY.getValueID();
     if (repeatXValueId == repeatYValueId) {
diff --git a/third_party/WebKit/Source/core/css/resolver/StyleResolver.cpp b/third_party/WebKit/Source/core/css/resolver/StyleResolver.cpp
index 7bd797a5..1be5fad 100644
--- a/third_party/WebKit/Source/core/css/resolver/StyleResolver.cpp
+++ b/third_party/WebKit/Source/core/css/resolver/StyleResolver.cpp
@@ -141,18 +141,18 @@
 
 static StylePropertySet* leftToRightDeclaration()
 {
-    DEFINE_STATIC_REF_WILL_BE_PERSISTENT(MutableStylePropertySet, leftToRightDecl, (MutableStylePropertySet::create(HTMLQuirksMode)));
-    if (leftToRightDecl->isEmpty())
-        leftToRightDecl->setProperty(CSSPropertyDirection, CSSValueLtr);
-    return leftToRightDecl;
+    DEFINE_STATIC_LOCAL(MutableStylePropertySet, leftToRightDecl, (MutableStylePropertySet::create(HTMLQuirksMode)));
+    if (leftToRightDecl.isEmpty())
+        leftToRightDecl.setProperty(CSSPropertyDirection, CSSValueLtr);
+    return &leftToRightDecl;
 }
 
 static StylePropertySet* rightToLeftDeclaration()
 {
-    DEFINE_STATIC_REF_WILL_BE_PERSISTENT(MutableStylePropertySet, rightToLeftDecl, (MutableStylePropertySet::create(HTMLQuirksMode)));
-    if (rightToLeftDecl->isEmpty())
-        rightToLeftDecl->setProperty(CSSPropertyDirection, CSSValueRtl);
-    return rightToLeftDecl;
+    DEFINE_STATIC_LOCAL(MutableStylePropertySet, rightToLeftDecl, (MutableStylePropertySet::create(HTMLQuirksMode)));
+    if (rightToLeftDecl.isEmpty())
+        rightToLeftDecl.setProperty(CSSPropertyDirection, CSSValueRtl);
+    return &rightToLeftDecl;
 }
 
 static void collectScopedResolversForHostedShadowTrees(const Element& element, HeapVector<Member<ScopedStyleResolver>, 8>& resolvers)
diff --git a/third_party/WebKit/Source/core/css/view-source.css b/third_party/WebKit/Source/core/css/view-source.css
index b56dcd9..314d9df9 100644
--- a/third_party/WebKit/Source/core/css/view-source.css
+++ b/third_party/WebKit/Source/core/css/view-source.css
@@ -19,7 +19,7 @@
  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
 body {
@@ -34,6 +34,7 @@
     word-break: break-word;
     font-size: initial;
     font-family: monospace;
+    tab-size: 4;
 }
 
 td {
diff --git a/third_party/WebKit/Source/core/dom/ChildListMutationScope.cpp b/third_party/WebKit/Source/core/dom/ChildListMutationScope.cpp
index 3b510226..cde42b7 100644
--- a/third_party/WebKit/Source/core/dom/ChildListMutationScope.cpp
+++ b/third_party/WebKit/Source/core/dom/ChildListMutationScope.cpp
@@ -46,8 +46,8 @@
 
 static AccumulatorMap& accumulatorMap()
 {
-    DEFINE_STATIC_LOCAL(Persistent<AccumulatorMap>, map, (new AccumulatorMap()));
-    return *map;
+    DEFINE_STATIC_LOCAL(AccumulatorMap, map, (new AccumulatorMap));
+    return map;
 }
 
 ChildListMutationAccumulator::ChildListMutationAccumulator(RawPtr<Node> target, RawPtr<MutationObserverInterestGroup> observers)
diff --git a/third_party/WebKit/Source/core/dom/ContextFeatures.cpp b/third_party/WebKit/Source/core/dom/ContextFeatures.cpp
index 42b1bc2..69ef135 100644
--- a/third_party/WebKit/Source/core/dom/ContextFeatures.cpp
+++ b/third_party/WebKit/Source/core/dom/ContextFeatures.cpp
@@ -29,6 +29,7 @@
 #include "core/dom/Document.h"
 #include "core/page/Page.h"
 #include "platform/RuntimeEnabledFeatures.h"
+#include "wtf/StdLibExtras.h"
 
 namespace blink {
 
@@ -42,9 +43,9 @@
     return "ContextFeatures";
 }
 
-ContextFeatures* ContextFeatures::defaultSwitch()
+ContextFeatures& ContextFeatures::defaultSwitch()
 {
-    DEFINE_STATIC_REF_WILL_BE_PERSISTENT(ContextFeatures, instance, (ContextFeatures::create(ContextFeaturesClient::empty())));
+    DEFINE_STATIC_LOCAL(ContextFeatures, instance, (ContextFeatures::create(ContextFeaturesClient::empty())));
     return instance;
 }
 
diff --git a/third_party/WebKit/Source/core/dom/ContextFeatures.h b/third_party/WebKit/Source/core/dom/ContextFeatures.h
index 796d763..f2cf28b 100644
--- a/third_party/WebKit/Source/core/dom/ContextFeatures.h
+++ b/third_party/WebKit/Source/core/dom/ContextFeatures.h
@@ -29,6 +29,7 @@
 
 #include "core/CoreExport.h"
 #include "core/page/Page.h"
+#include "platform/heap/Handle.h"
 
 namespace blink {
 
@@ -46,7 +47,7 @@
     };
 
     static const char* supplementName();
-    static ContextFeatures* defaultSwitch();
+    static ContextFeatures& defaultSwitch();
     static RawPtr<ContextFeatures> create(PassOwnPtr<ContextFeaturesClient>);
 
     static bool pagePopupEnabled(Document*);
diff --git a/third_party/WebKit/Source/core/dom/Document.cpp b/third_party/WebKit/Source/core/dom/Document.cpp
index dd206ad..dae347c 100644
--- a/third_party/WebKit/Source/core/dom/Document.cpp
+++ b/third_party/WebKit/Source/core/dom/Document.cpp
@@ -363,8 +363,8 @@
 
 Document::WeakDocumentSet& Document::liveDocumentSet()
 {
-    DEFINE_STATIC_LOCAL(Persistent<WeakDocumentSet>, set, (new WeakDocumentSet()));
-    return *set;
+    DEFINE_STATIC_LOCAL(WeakDocumentSet, set, (new WeakDocumentSet));
+    return set;
 }
 
 // This class doesn't work with non-Document ExecutionContext.
diff --git a/third_party/WebKit/Source/core/dom/DocumentLifecycleNotifier.cpp b/third_party/WebKit/Source/core/dom/DocumentLifecycleNotifier.cpp
index 301aaa02..3bd50ce 100644
--- a/third_party/WebKit/Source/core/dom/DocumentLifecycleNotifier.cpp
+++ b/third_party/WebKit/Source/core/dom/DocumentLifecycleNotifier.cpp
@@ -33,40 +33,8 @@
 void DocumentLifecycleNotifier::notifyDocumentWasDetached()
 {
     TemporaryChange<IterationType> scope(m_iterating, IteratingOverAll);
-#if !ENABLE(OILPAN)
-    // Notifications perform unknown amounts of heap allocations,
-    // which might trigger (conservative) GCs. This will flush out
-    // dead observers, causing the _non-heap_ set be updated. Snapshot
-    // the observers and explicitly check if they're still alive before
-    // notifying.
-    Vector<RawPtr<DocumentLifecycleObserver>> snapshotOfObservers;
-    copyToVector(m_observers, snapshotOfObservers);
-    for (DocumentLifecycleObserver* observer : snapshotOfObservers) {
-        if (m_observers.contains(observer))
-            observer->documentWasDetached();
-    }
-#else
     for (DocumentLifecycleObserver* observer : m_observers)
         observer->documentWasDetached();
-#endif
 }
 
-#if !ENABLE(OILPAN)
-void DocumentLifecycleNotifier::notifyDocumentWasDisposed()
-{
-    TemporaryChange<IterationType> scope(m_iterating, IteratingOverAll);
-    // Notifications perform unknown amounts of heap allocations,
-    // which might trigger (conservative) GCs. This will flush out
-    // dead observers, causing the _non-heap_ set be updated. Snapshot
-    // the observers and explicitly check if they're still alive before
-    // notifying.
-    Vector<RawPtr<DocumentLifecycleObserver>> snapshotOfObservers;
-    copyToVector(m_observers, snapshotOfObservers);
-    for (DocumentLifecycleObserver* observer : snapshotOfObservers) {
-        if (m_observers.contains(observer))
-            observer->documentWasDisposed();
-    }
-}
-#endif
-
 } // namespace blink
diff --git a/third_party/WebKit/Source/core/dom/DocumentLifecycleNotifier.h b/third_party/WebKit/Source/core/dom/DocumentLifecycleNotifier.h
index 4cbdd98c..f684b4b 100644
--- a/third_party/WebKit/Source/core/dom/DocumentLifecycleNotifier.h
+++ b/third_party/WebKit/Source/core/dom/DocumentLifecycleNotifier.h
@@ -37,9 +37,6 @@
 class CORE_EXPORT DocumentLifecycleNotifier : public LifecycleNotifier<Document, DocumentLifecycleObserver> {
 public:
     void notifyDocumentWasDetached();
-#if !ENABLE(OILPAN)
-    void notifyDocumentWasDisposed();
-#endif
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/core/dom/DocumentLifecycleObserver.h b/third_party/WebKit/Source/core/dom/DocumentLifecycleObserver.h
index f71a9030..f66cd36 100644
--- a/third_party/WebKit/Source/core/dom/DocumentLifecycleObserver.h
+++ b/third_party/WebKit/Source/core/dom/DocumentLifecycleObserver.h
@@ -37,9 +37,6 @@
 class CORE_EXPORT DocumentLifecycleObserver : public LifecycleObserver<Document, DocumentLifecycleObserver, DocumentLifecycleNotifier> {
 public:
     virtual void documentWasDetached() { }
-#if !ENABLE(OILPAN)
-    virtual void documentWasDisposed() { }
-#endif
 
 protected:
     explicit DocumentLifecycleObserver(Document* document)
diff --git a/third_party/WebKit/Source/core/dom/DocumentOrderedMap.cpp b/third_party/WebKit/Source/core/dom/DocumentOrderedMap.cpp
index 8ab707e..7e7ed61 100644
--- a/third_party/WebKit/Source/core/dom/DocumentOrderedMap.cpp
+++ b/third_party/WebKit/Source/core/dom/DocumentOrderedMap.cpp
@@ -164,11 +164,11 @@
 {
     ASSERT(key);
     ASSERT(scope);
-    DEFINE_STATIC_LOCAL(Persistent<HeapVector<Member<Element>>>, emptyVector, (new HeapVector<Member<Element>>()));
+    DEFINE_STATIC_LOCAL(HeapVector<Member<Element>>, emptyVector, (new HeapVector<Member<Element>>));
 
     Map::iterator it = m_map.find(key);
     if (it == m_map.end())
-        return *emptyVector;
+        return emptyVector;
 
     Member<MapEntry>& entry = it->value;
     ASSERT(entry->count);
diff --git a/third_party/WebKit/Source/core/dom/Element.cpp b/third_party/WebKit/Source/core/dom/Element.cpp
index 252dd3e..1d8eb54 100644
--- a/third_party/WebKit/Source/core/dom/Element.cpp
+++ b/third_party/WebKit/Source/core/dom/Element.cpp
@@ -148,9 +148,8 @@
 ScrollCustomizationCallbacks& scrollCustomizationCallbacks()
 {
     ASSERT(RuntimeEnabledFeatures::scrollCustomizationEnabled());
-    DEFINE_STATIC_LOCAL(Persistent<ScrollCustomizationCallbacks>,
-        scrollCustomizationCallbacks, (new ScrollCustomizationCallbacks()));
-    return *scrollCustomizationCallbacks;
+    DEFINE_STATIC_LOCAL(ScrollCustomizationCallbacks, scrollCustomizationCallbacks, (new ScrollCustomizationCallbacks));
+    return scrollCustomizationCallbacks;
 }
 
 } // namespace
diff --git a/third_party/WebKit/Source/core/dom/Fullscreen.cpp b/third_party/WebKit/Source/core/dom/Fullscreen.cpp
index ced9568..56cd0441 100644
--- a/third_party/WebKit/Source/core/dom/Fullscreen.cpp
+++ b/third_party/WebKit/Source/core/dom/Fullscreen.cpp
@@ -193,23 +193,11 @@
     if (m_fullScreenLayoutObject)
         m_fullScreenLayoutObject->destroy();
 
-#if ENABLE(OILPAN)
     m_fullScreenElement = nullptr;
     m_fullScreenElementStack.clear();
-#endif
 
 }
 
-#if !ENABLE(OILPAN)
-void Fullscreen::documentWasDisposed()
-{
-    // NOTE: the context dispose phase is not supported in oilpan. Please
-    // consider using the detach phase instead.
-    m_fullScreenElement = nullptr;
-    m_fullScreenElementStack.clear();
-}
-#endif
-
 void Fullscreen::requestFullscreen(Element& element, RequestType requestType)
 {
     if (document()->isSecureContext()) {
diff --git a/third_party/WebKit/Source/core/dom/Fullscreen.h b/third_party/WebKit/Source/core/dom/Fullscreen.h
index f41859f..a87fc118 100644
--- a/third_party/WebKit/Source/core/dom/Fullscreen.h
+++ b/third_party/WebKit/Source/core/dom/Fullscreen.h
@@ -87,9 +87,6 @@
     Element* webkitCurrentFullScreenElement() const { return m_fullScreenElement.get(); }
 
     void documentWasDetached() override;
-#if !ENABLE(OILPAN)
-    void documentWasDisposed() override;
-#endif
 
     DECLARE_VIRTUAL_TRACE();
 
diff --git a/third_party/WebKit/Source/core/dom/MutationObserver.cpp b/third_party/WebKit/Source/core/dom/MutationObserver.cpp
index 9b7a0d9c..5ba305a 100644
--- a/third_party/WebKit/Source/core/dom/MutationObserver.cpp
+++ b/third_party/WebKit/Source/core/dom/MutationObserver.cpp
@@ -166,14 +166,14 @@
 
 static MutationObserverSet& activeMutationObservers()
 {
-    DEFINE_STATIC_LOCAL(Persistent<MutationObserverSet>, activeObservers, (new MutationObserverSet()));
-    return *activeObservers;
+    DEFINE_STATIC_LOCAL(MutationObserverSet, activeObservers, (new MutationObserverSet));
+    return activeObservers;
 }
 
 static MutationObserverSet& suspendedMutationObservers()
 {
-    DEFINE_STATIC_LOCAL(Persistent<MutationObserverSet>, suspendedObservers, (new MutationObserverSet()));
-    return *suspendedObservers;
+    DEFINE_STATIC_LOCAL(MutationObserverSet, suspendedObservers, (new MutationObserverSet));
+    return suspendedObservers;
 }
 
 static void activateObserver(RawPtr<MutationObserver> observer)
diff --git a/third_party/WebKit/Source/core/dom/Node.cpp b/third_party/WebKit/Source/core/dom/Node.cpp
index da9b660..e277ee8 100644
--- a/third_party/WebKit/Source/core/dom/Node.cpp
+++ b/third_party/WebKit/Source/core/dom/Node.cpp
@@ -128,8 +128,8 @@
 using WeakNodeSet = HeapHashSet<WeakMember<Node>>;
 static WeakNodeSet& liveNodeSet()
 {
-    DEFINE_STATIC_LOCAL(Persistent<WeakNodeSet>, set, (new WeakNodeSet()));
-    return *set;
+    DEFINE_STATIC_LOCAL(WeakNodeSet, set, (new WeakNodeSet));
+    return set;
 }
 #endif
 
@@ -1841,7 +1841,7 @@
     }
 }
 
-bool Node::addEventListenerInternal(const AtomicString& eventType, RawPtr<EventListener> listener, const EventListenerOptions& options)
+bool Node::addEventListenerInternal(const AtomicString& eventType, EventListener* listener, const EventListenerOptions& options)
 {
     if (!EventTarget::addEventListenerInternal(eventType, listener, options))
         return false;
@@ -1853,7 +1853,7 @@
     return true;
 }
 
-bool Node::removeEventListenerInternal(const AtomicString& eventType, RawPtr<EventListener> listener, const EventListenerOptions& options)
+bool Node::removeEventListenerInternal(const AtomicString& eventType, EventListener* listener, const EventListenerOptions& options)
 {
     if (!EventTarget::removeEventListenerInternal(eventType, listener, options))
         return false;
@@ -1886,8 +1886,8 @@
 using EventTargetDataMap = HeapHashMap<WeakMember<Node>, Member<EventTargetData>>;
 static EventTargetDataMap& eventTargetDataMap()
 {
-    DEFINE_STATIC_LOCAL(Persistent<EventTargetDataMap>, map, (new EventTargetDataMap()));
-    return *map;
+    DEFINE_STATIC_LOCAL(EventTargetDataMap, map, (new EventTargetDataMap));
+    return map;
 }
 
 EventTargetData* Node::eventTargetData()
@@ -2061,7 +2061,7 @@
     EventDispatcher::dispatchScopedEvent(*this, event->createMediator());
 }
 
-DispatchEventResult Node::dispatchEventInternal(RawPtr<Event> event)
+DispatchEventResult Node::dispatchEventInternal(Event* event)
 {
     return EventDispatcher::dispatchEvent(*this, event->createMediator());
 }
diff --git a/third_party/WebKit/Source/core/dom/Node.h b/third_party/WebKit/Source/core/dom/Node.h
index 44556ef..a2922b8d 100644
--- a/third_party/WebKit/Source/core/dom/Node.h
+++ b/third_party/WebKit/Source/core/dom/Node.h
@@ -757,9 +757,9 @@
 
     virtual void didMoveToNewDocument(Document& oldDocument);
 
-    bool addEventListenerInternal(const AtomicString& eventType, RawPtr<EventListener>, const EventListenerOptions&) override;
-    bool removeEventListenerInternal(const AtomicString& eventType, RawPtr<EventListener>, const EventListenerOptions&) override;
-    DispatchEventResult dispatchEventInternal(RawPtr<Event>) override;
+    bool addEventListenerInternal(const AtomicString& eventType, EventListener*, const EventListenerOptions&) override;
+    bool removeEventListenerInternal(const AtomicString& eventType, EventListener*, const EventListenerOptions&) override;
+    DispatchEventResult dispatchEventInternal(Event*) override;
 
     static void reattachWhitespaceSiblingsIfNeeded(Text* start);
 
diff --git a/third_party/WebKit/Source/core/dom/PresentationAttributeStyle.cpp b/third_party/WebKit/Source/core/dom/PresentationAttributeStyle.cpp
index a158dc9c..9ba0943 100644
--- a/third_party/WebKit/Source/core/dom/PresentationAttributeStyle.cpp
+++ b/third_party/WebKit/Source/core/dom/PresentationAttributeStyle.cpp
@@ -68,8 +68,8 @@
 using PresentationAttributeCache = HeapHashMap<unsigned, Member<PresentationAttributeCacheEntry>, AlreadyHashed>;
 static PresentationAttributeCache& presentationAttributeCache()
 {
-    DEFINE_STATIC_LOCAL(Persistent<PresentationAttributeCache>, cache, (new PresentationAttributeCache()));
-    return *cache;
+    DEFINE_STATIC_LOCAL(PresentationAttributeCache, cache, (new PresentationAttributeCache));
+    return cache;
 }
 
 class PresentationAttributeCacheCleaner {
diff --git a/third_party/WebKit/Source/core/dom/ScriptedAnimationController.cpp b/third_party/WebKit/Source/core/dom/ScriptedAnimationController.cpp
index f40ed58..98339e6 100644
--- a/third_party/WebKit/Source/core/dom/ScriptedAnimationController.cpp
+++ b/third_party/WebKit/Source/core/dom/ScriptedAnimationController.cpp
@@ -170,9 +170,9 @@
     scheduleAnimationIfNeeded();
 }
 
-void ScriptedAnimationController::enqueueEvent(RawPtr<Event> event)
+void ScriptedAnimationController::enqueueEvent(Event* event)
 {
-    InspectorInstrumentation::didEnqueueEvent(event->target(), event.get());
+    InspectorInstrumentation::didEnqueueEvent(event->target(), event);
     m_eventQueue.append(event);
     scheduleAnimationIfNeeded();
 }
diff --git a/third_party/WebKit/Source/core/dom/ScriptedAnimationController.h b/third_party/WebKit/Source/core/dom/ScriptedAnimationController.h
index 1b574f3..fc3537f 100644
--- a/third_party/WebKit/Source/core/dom/ScriptedAnimationController.h
+++ b/third_party/WebKit/Source/core/dom/ScriptedAnimationController.h
@@ -59,7 +59,7 @@
     void cancelCallback(CallbackId);
     void serviceScriptedAnimations(double monotonicTimeNow);
 
-    void enqueueEvent(RawPtr<Event>);
+    void enqueueEvent(Event*);
     void enqueuePerFrameEvent(RawPtr<Event>);
     void enqueueMediaQueryChangeListeners(HeapVector<Member<MediaQueryListListener>>&);
 
diff --git a/third_party/WebKit/Source/core/dom/TreeScope.cpp b/third_party/WebKit/Source/core/dom/TreeScope.cpp
index f69be23..3fde494 100644
--- a/third_party/WebKit/Source/core/dom/TreeScope.cpp
+++ b/third_party/WebKit/Source/core/dom/TreeScope.cpp
@@ -170,11 +170,11 @@
 
 const HeapVector<Member<Element>>& TreeScope::getAllElementsById(const AtomicString& elementId) const
 {
-    DEFINE_STATIC_LOCAL(Persistent<HeapVector<Member<Element>>>, emptyVector, (new HeapVector<Member<Element>>()));
+    DEFINE_STATIC_LOCAL(HeapVector<Member<Element>>, emptyVector, (new HeapVector<Member<Element>>));
     if (elementId.isEmpty())
-        return *emptyVector;
+        return emptyVector;
     if (!m_elementsById)
-        return *emptyVector;
+        return emptyVector;
     return m_elementsById->getAllElementsById(elementId, this);
 }
 
diff --git a/third_party/WebKit/Source/core/dom/WeakIdentifierMap.h b/third_party/WebKit/Source/core/dom/WeakIdentifierMap.h
index b62279e..07599c6 100644
--- a/third_party/WebKit/Source/core/dom/WeakIdentifierMap.h
+++ b/third_party/WebKit/Source/core/dom/WeakIdentifierMap.h
@@ -39,7 +39,6 @@
     USING_FAST_MALLOC(WeakIdentifierMap);
 public:
     using IdentifierType = typename Generator::IdentifierType;
-    using ReferenceType = RawPtr<WeakIdentifierMap<T, Generator, Traits, false>>;
 
     static IdentifierType identifier(T* object)
     {
@@ -93,7 +92,6 @@
     : public GarbageCollected<WeakIdentifierMap<T, Generator, Traits, true>> {
 public:
     using IdentifierType = typename Generator::IdentifierType;
-    using ReferenceType = Persistent<WeakIdentifierMap<T, Generator, Traits, true>>;
 
     static IdentifierType identifier(T* object)
     {
@@ -146,14 +144,15 @@
     template<> WeakIdentifierMap<T, ##__VA_ARGS__>& WeakIdentifierMap<T, ##__VA_ARGS__>::instance(); \
     extern template class WeakIdentifierMap<T, ##__VA_ARGS__>;
 
-#define DEFINE_WEAK_IDENTIFIER_MAP(T, ...) \
+#define DEFINE_WEAK_IDENTIFIER_MAP(T, ...)   \
     template class WeakIdentifierMap<T, ##__VA_ARGS__>; \
     template<> WeakIdentifierMap<T, ##__VA_ARGS__>& WeakIdentifierMap<T, ##__VA_ARGS__>::instance() \
     { \
-        using RefType = WeakIdentifierMap<T, ##__VA_ARGS__>::ReferenceType; \
+        using RefType = WeakIdentifierMap<T, ##__VA_ARGS__>; \
         DEFINE_STATIC_LOCAL(RefType, mapInstance, (new WeakIdentifierMap<T, ##__VA_ARGS__>())); \
-        return *mapInstance; \
+        return mapInstance; \
     }
+
 } // namespace blink
 
 #endif // WeakIdentifierMap_h
diff --git a/third_party/WebKit/Source/core/dom/custom/CustomElementMicrotaskDispatcher.cpp b/third_party/WebKit/Source/core/dom/custom/CustomElementMicrotaskDispatcher.cpp
index 3b1f6e6d..de3b3c8 100644
--- a/third_party/WebKit/Source/core/dom/custom/CustomElementMicrotaskDispatcher.cpp
+++ b/third_party/WebKit/Source/core/dom/custom/CustomElementMicrotaskDispatcher.cpp
@@ -22,8 +22,8 @@
 
 CustomElementMicrotaskDispatcher& CustomElementMicrotaskDispatcher::instance()
 {
-    DEFINE_STATIC_LOCAL(Persistent<CustomElementMicrotaskDispatcher>, instance, (new CustomElementMicrotaskDispatcher()));
-    return *instance;
+    DEFINE_STATIC_LOCAL(CustomElementMicrotaskDispatcher, instance, (new CustomElementMicrotaskDispatcher));
+    return instance;
 }
 
 void CustomElementMicrotaskDispatcher::enqueue(CustomElementCallbackQueue* queue)
diff --git a/third_party/WebKit/Source/core/dom/custom/CustomElementObserver.cpp b/third_party/WebKit/Source/core/dom/custom/CustomElementObserver.cpp
index 139d74d2..ee170ae 100644
--- a/third_party/WebKit/Source/core/dom/custom/CustomElementObserver.cpp
+++ b/third_party/WebKit/Source/core/dom/custom/CustomElementObserver.cpp
@@ -40,8 +40,8 @@
 
 static ElementObserverMap& elementObservers()
 {
-    DEFINE_STATIC_LOCAL(Persistent<ElementObserverMap>, map, (new ElementObserverMap()));
-    return *map;
+    DEFINE_STATIC_LOCAL(ElementObserverMap, map, (new ElementObserverMap));
+    return map;
 }
 
 void CustomElementObserver::notifyElementWasDestroyed(Element* element)
diff --git a/third_party/WebKit/Source/core/dom/custom/CustomElementProcessingStack.cpp b/third_party/WebKit/Source/core/dom/custom/CustomElementProcessingStack.cpp
index b9db2f2..57bc051 100644
--- a/third_party/WebKit/Source/core/dom/custom/CustomElementProcessingStack.cpp
+++ b/third_party/WebKit/Source/core/dom/custom/CustomElementProcessingStack.cpp
@@ -42,8 +42,8 @@
 
 CustomElementProcessingStack& CustomElementProcessingStack::instance()
 {
-    DEFINE_STATIC_LOCAL(Persistent<CustomElementProcessingStack>, instance, (new CustomElementProcessingStack()));
-    return *instance;
+    DEFINE_STATIC_LOCAL(CustomElementProcessingStack, instance, (new CustomElementProcessingStack));
+    return instance;
 }
 
 // Dispatches callbacks when popping the processing stack.
diff --git a/third_party/WebKit/Source/core/dom/custom/CustomElementScheduler.cpp b/third_party/WebKit/Source/core/dom/custom/CustomElementScheduler.cpp
index 7cebedc3..0a6e03c 100644
--- a/third_party/WebKit/Source/core/dom/custom/CustomElementScheduler.cpp
+++ b/third_party/WebKit/Source/core/dom/custom/CustomElementScheduler.cpp
@@ -51,8 +51,8 @@
 
 static ElementCallbackQueueMap& callbackQueues()
 {
-    DEFINE_STATIC_LOCAL(Persistent<ElementCallbackQueueMap>, map, (new ElementCallbackQueueMap()));
-    return *map;
+    DEFINE_STATIC_LOCAL(ElementCallbackQueueMap, map, (new ElementCallbackQueueMap));
+    return map;
 }
 
 static CustomElementCallbackQueue& ensureCallbackQueue(RawPtr<Element> element)
diff --git a/third_party/WebKit/Source/core/dom/shadow/ShadowRoot.cpp b/third_party/WebKit/Source/core/dom/shadow/ShadowRoot.cpp
index 11b24f0..23da88b7 100644
--- a/third_party/WebKit/Source/core/dom/shadow/ShadowRoot.cpp
+++ b/third_party/WebKit/Source/core/dom/shadow/ShadowRoot.cpp
@@ -297,7 +297,7 @@
 
 const HeapVector<Member<InsertionPoint>>& ShadowRoot::descendantInsertionPoints()
 {
-    DEFINE_STATIC_LOCAL(PersistentHeapVector<Member<InsertionPoint>>, emptyList, ());
+    DEFINE_STATIC_LOCAL(HeapVector<Member<InsertionPoint>>, emptyList, (new HeapVector<Member<InsertionPoint>>));
     if (m_shadowRootRareData && m_descendantInsertionPointsIsValid)
         return m_shadowRootRareData->descendantInsertionPoints();
 
@@ -349,7 +349,7 @@
 
 const HeapVector<Member<HTMLSlotElement>>& ShadowRoot::descendantSlots()
 {
-    DEFINE_STATIC_LOCAL(PersistentHeapVector<Member<HTMLSlotElement>>, emptyList, ());
+    DEFINE_STATIC_LOCAL(HeapVector<Member<HTMLSlotElement>>, emptyList, (new HeapVector<Member<HTMLSlotElement>>));
     if (m_descendantSlotsIsValid) {
         ASSERT(m_shadowRootRareData);
         return m_shadowRootRareData->descendantSlots();
diff --git a/third_party/WebKit/Source/core/editing/EditingStyle.cpp b/third_party/WebKit/Source/core/editing/EditingStyle.cpp
index d7489943..b189ce9 100644
--- a/third_party/WebKit/Source/core/editing/EditingStyle.cpp
+++ b/third_party/WebKit/Source/core/editing/EditingStyle.cpp
@@ -57,6 +57,7 @@
 #include "core/layout/LayoutBox.h"
 #include "core/layout/LayoutObject.h"
 #include "core/style/ComputedStyle.h"
+#include "wtf/StdLibExtras.h"
 
 namespace blink {
 
@@ -825,7 +826,7 @@
 
 static const HeapVector<Member<HTMLElementEquivalent>>& htmlElementEquivalents()
 {
-    DEFINE_STATIC_LOCAL(PersistentHeapVector<Member<HTMLElementEquivalent>>, HTMLElementEquivalents, ());
+    DEFINE_STATIC_LOCAL(HeapVector<Member<HTMLElementEquivalent>>, HTMLElementEquivalents, (new HeapVector<Member<HTMLElementEquivalent>>));
     if (!HTMLElementEquivalents.size()) {
         HTMLElementEquivalents.append(HTMLElementEquivalent::create(CSSPropertyFontWeight, CSSValueBold, HTMLNames::bTag));
         HTMLElementEquivalents.append(HTMLElementEquivalent::create(CSSPropertyFontWeight, CSSValueBold, HTMLNames::strongTag));
@@ -863,7 +864,7 @@
 
 static const HeapVector<Member<HTMLAttributeEquivalent>>& htmlAttributeEquivalents()
 {
-    DEFINE_STATIC_LOCAL(PersistentHeapVector<Member<HTMLAttributeEquivalent>>, HTMLAttributeEquivalents, ());
+    DEFINE_STATIC_LOCAL(HeapVector<Member<HTMLAttributeEquivalent>>, HTMLAttributeEquivalents, (new HeapVector<Member<HTMLAttributeEquivalent>>));
     if (!HTMLAttributeEquivalents.size()) {
         // elementIsStyledSpanOrHTMLEquivalent depends on the fact each HTMLAttriuteEquivalent matches exactly one attribute
         // of exactly one element except dirAttr.
@@ -1130,13 +1131,13 @@
 
 static void mergeTextDecorationValues(CSSValueList* mergedValue, const CSSValueList* valueToMerge)
 {
-    DEFINE_STATIC_REF_WILL_BE_PERSISTENT(CSSPrimitiveValue, underline, (CSSPrimitiveValue::createIdentifier(CSSValueUnderline)));
-    DEFINE_STATIC_REF_WILL_BE_PERSISTENT(CSSPrimitiveValue, lineThrough, (CSSPrimitiveValue::createIdentifier(CSSValueLineThrough)));
-    if (valueToMerge->hasValue(underline) && !mergedValue->hasValue(underline))
-        mergedValue->append(underline);
+    DEFINE_STATIC_LOCAL(CSSPrimitiveValue, underline, (CSSPrimitiveValue::createIdentifier(CSSValueUnderline)));
+    DEFINE_STATIC_LOCAL(CSSPrimitiveValue, lineThrough, (CSSPrimitiveValue::createIdentifier(CSSValueLineThrough)));
+    if (valueToMerge->hasValue(&underline) && !mergedValue->hasValue(&underline))
+        mergedValue->append(&underline);
 
-    if (valueToMerge->hasValue(lineThrough) && !mergedValue->hasValue(lineThrough))
-        mergedValue->append(lineThrough);
+    if (valueToMerge->hasValue(&lineThrough) && !mergedValue->hasValue(&lineThrough))
+        mergedValue->append(&lineThrough);
 }
 
 void EditingStyle::mergeStyle(const StylePropertySet* style, CSSPropertyOverrideMode mode)
@@ -1524,12 +1525,12 @@
     // Furthermore, text-decoration: none has been trimmed so that text-decoration property is always a CSSValueList.
     RawPtr<CSSValue> textDecoration = style->getPropertyCSSValue(textDecorationPropertyForEditing());
     if (textDecoration && textDecoration->isValueList()) {
-        DEFINE_STATIC_REF_WILL_BE_PERSISTENT(CSSPrimitiveValue, underline, (CSSPrimitiveValue::createIdentifier(CSSValueUnderline)));
-        DEFINE_STATIC_REF_WILL_BE_PERSISTENT(CSSPrimitiveValue, lineThrough, (CSSPrimitiveValue::createIdentifier(CSSValueLineThrough)));
+        DEFINE_STATIC_LOCAL(CSSPrimitiveValue, underline, (CSSPrimitiveValue::createIdentifier(CSSValueUnderline)));
+        DEFINE_STATIC_LOCAL(CSSPrimitiveValue, lineThrough, (CSSPrimitiveValue::createIdentifier(CSSValueLineThrough)));
         RawPtr<CSSValueList> newTextDecoration = toCSSValueList(textDecoration.get())->copy();
-        if (newTextDecoration->removeAll(underline))
+        if (newTextDecoration->removeAll(&underline))
             m_applyUnderline = true;
-        if (newTextDecoration->removeAll(lineThrough))
+        if (newTextDecoration->removeAll(&lineThrough))
             m_applyLineThrough = true;
 
         // If trimTextDecorations, delete underline and line-through
diff --git a/third_party/WebKit/Source/core/editing/markers/DocumentMarker.cpp b/third_party/WebKit/Source/core/editing/markers/DocumentMarker.cpp
index 1e4c490..eb20de30 100644
--- a/third_party/WebKit/Source/core/editing/markers/DocumentMarker.cpp
+++ b/third_party/WebKit/Source/core/editing/markers/DocumentMarker.cpp
@@ -30,6 +30,8 @@
 
 #include "core/editing/markers/DocumentMarker.h"
 
+#include "wtf/StdLibExtras.h"
+
 namespace blink {
 
 DocumentMarkerDetails::~DocumentMarkerDetails()
@@ -83,9 +85,9 @@
 
 RawPtr<DocumentMarkerTextMatch> DocumentMarkerTextMatch::create(bool match)
 {
-    DEFINE_STATIC_REF_WILL_BE_PERSISTENT(DocumentMarkerTextMatch, trueInstance, (new DocumentMarkerTextMatch(true)));
-    DEFINE_STATIC_REF_WILL_BE_PERSISTENT(DocumentMarkerTextMatch, falseInstance, (new DocumentMarkerTextMatch(false)));
-    return match ? trueInstance : falseInstance;
+    DEFINE_STATIC_LOCAL(DocumentMarkerTextMatch, trueInstance, (new DocumentMarkerTextMatch(true)));
+    DEFINE_STATIC_LOCAL(DocumentMarkerTextMatch, falseInstance, (new DocumentMarkerTextMatch(false)));
+    return match ? &trueInstance : &falseInstance;
 }
 
 inline DocumentMarkerTextMatch* toDocumentMarkerTextMatch(DocumentMarkerDetails* details)
diff --git a/third_party/WebKit/Source/core/events/AnimationEvent.h b/third_party/WebKit/Source/core/events/AnimationEvent.h
index 6b034374..4108bc39 100644
--- a/third_party/WebKit/Source/core/events/AnimationEvent.h
+++ b/third_party/WebKit/Source/core/events/AnimationEvent.h
@@ -34,15 +34,15 @@
 class AnimationEvent final : public Event {
     DEFINE_WRAPPERTYPEINFO();
 public:
-    static RawPtr<AnimationEvent> create()
+    static AnimationEvent* create()
     {
         return new AnimationEvent;
     }
-    static RawPtr<AnimationEvent> create(const AtomicString& type, const String& animationName, double elapsedTime)
+    static AnimationEvent* create(const AtomicString& type, const String& animationName, double elapsedTime)
     {
         return new AnimationEvent(type, animationName, elapsedTime);
     }
-    static RawPtr<AnimationEvent> create(const AtomicString& type, const AnimationEventInit& initializer)
+    static AnimationEvent* create(const AtomicString& type, const AnimationEventInit& initializer)
     {
         return new AnimationEvent(type, initializer);
     }
diff --git a/third_party/WebKit/Source/core/events/AnimationPlayerEvent.h b/third_party/WebKit/Source/core/events/AnimationPlayerEvent.h
index b0c15b5..f5d2287 100644
--- a/third_party/WebKit/Source/core/events/AnimationPlayerEvent.h
+++ b/third_party/WebKit/Source/core/events/AnimationPlayerEvent.h
@@ -13,15 +13,15 @@
 class AnimationPlayerEvent final : public Event {
     DEFINE_WRAPPERTYPEINFO();
 public:
-    static RawPtr<AnimationPlayerEvent> create()
+    static AnimationPlayerEvent* create()
     {
         return new AnimationPlayerEvent;
     }
-    static RawPtr<AnimationPlayerEvent> create(const AtomicString& type, double currentTime, double timelineTime)
+    static AnimationPlayerEvent* create(const AtomicString& type, double currentTime, double timelineTime)
     {
         return new AnimationPlayerEvent(type, currentTime, timelineTime);
     }
-    static RawPtr<AnimationPlayerEvent> create(const AtomicString& type, const AnimationPlayerEventInit& initializer)
+    static AnimationPlayerEvent* create(const AtomicString& type, const AnimationPlayerEventInit& initializer)
     {
         return new AnimationPlayerEvent(type, initializer);
     }
diff --git a/third_party/WebKit/Source/core/events/ApplicationCacheErrorEvent.h b/third_party/WebKit/Source/core/events/ApplicationCacheErrorEvent.h
index 2c6f631..786619c4 100644
--- a/third_party/WebKit/Source/core/events/ApplicationCacheErrorEvent.h
+++ b/third_party/WebKit/Source/core/events/ApplicationCacheErrorEvent.h
@@ -17,17 +17,17 @@
 public:
     ~ApplicationCacheErrorEvent() override;
 
-    static RawPtr<ApplicationCacheErrorEvent> create()
+    static ApplicationCacheErrorEvent* create()
     {
         return new ApplicationCacheErrorEvent;
     }
 
-    static RawPtr<ApplicationCacheErrorEvent> create(WebApplicationCacheHost::ErrorReason reason, const String& url, int status, const String& message)
+    static ApplicationCacheErrorEvent* create(WebApplicationCacheHost::ErrorReason reason, const String& url, int status, const String& message)
     {
         return new ApplicationCacheErrorEvent(reason, url, status, message);
     }
 
-    static RawPtr<ApplicationCacheErrorEvent> create(const AtomicString& eventType, const ApplicationCacheErrorEventInit& initializer)
+    static ApplicationCacheErrorEvent* create(const AtomicString& eventType, const ApplicationCacheErrorEventInit& initializer)
     {
         return new ApplicationCacheErrorEvent(eventType, initializer);
     }
diff --git a/third_party/WebKit/Source/core/events/AutocompleteErrorEvent.h b/third_party/WebKit/Source/core/events/AutocompleteErrorEvent.h
index a2b8de1f..6ba47f2 100644
--- a/third_party/WebKit/Source/core/events/AutocompleteErrorEvent.h
+++ b/third_party/WebKit/Source/core/events/AutocompleteErrorEvent.h
@@ -33,17 +33,17 @@
 class AutocompleteErrorEvent final : public Event {
     DEFINE_WRAPPERTYPEINFO();
 public:
-    static RawPtr<AutocompleteErrorEvent> create()
+    static AutocompleteErrorEvent* create()
     {
         return new AutocompleteErrorEvent;
     }
 
-    static RawPtr<AutocompleteErrorEvent> create(const String& reason)
+    static AutocompleteErrorEvent* create(const String& reason)
     {
         return new AutocompleteErrorEvent(reason);
     }
 
-    static RawPtr<AutocompleteErrorEvent> create(const AtomicString& eventType, const AutocompleteErrorEventInit& initializer)
+    static AutocompleteErrorEvent* create(const AtomicString& eventType, const AutocompleteErrorEventInit& initializer)
     {
         return new AutocompleteErrorEvent(eventType, initializer);
     }
diff --git a/third_party/WebKit/Source/core/events/BeforeTextInsertedEvent.h b/third_party/WebKit/Source/core/events/BeforeTextInsertedEvent.h
index 7171c0d..24495982 100644
--- a/third_party/WebKit/Source/core/events/BeforeTextInsertedEvent.h
+++ b/third_party/WebKit/Source/core/events/BeforeTextInsertedEvent.h
@@ -34,7 +34,7 @@
 public:
     ~BeforeTextInsertedEvent() override;
 
-    static RawPtr<BeforeTextInsertedEvent> create(const String& text)
+    static BeforeTextInsertedEvent* create(const String& text)
     {
         return new BeforeTextInsertedEvent(text);
     }
diff --git a/third_party/WebKit/Source/core/events/BeforeUnloadEvent.h b/third_party/WebKit/Source/core/events/BeforeUnloadEvent.h
index e1b8eac..7e90095 100644
--- a/third_party/WebKit/Source/core/events/BeforeUnloadEvent.h
+++ b/third_party/WebKit/Source/core/events/BeforeUnloadEvent.h
@@ -34,7 +34,7 @@
 public:
     ~BeforeUnloadEvent() override;
 
-    static RawPtr<BeforeUnloadEvent> create()
+    static BeforeUnloadEvent* create()
     {
         return new BeforeUnloadEvent;
     }
diff --git a/third_party/WebKit/Source/core/events/ClipboardEvent.h b/third_party/WebKit/Source/core/events/ClipboardEvent.h
index 1d35eb63..144428de 100644
--- a/third_party/WebKit/Source/core/events/ClipboardEvent.h
+++ b/third_party/WebKit/Source/core/events/ClipboardEvent.h
@@ -33,12 +33,12 @@
     DEFINE_WRAPPERTYPEINFO();
 public:
     ~ClipboardEvent() override;
-    static RawPtr<ClipboardEvent> create()
+    static ClipboardEvent* create()
     {
         return new ClipboardEvent();
     }
 
-    static RawPtr<ClipboardEvent> create(const AtomicString& type, bool canBubble, bool cancelable, DataTransfer* dataTransfer)
+    static ClipboardEvent* create(const AtomicString& type, bool canBubble, bool cancelable, DataTransfer* dataTransfer)
     {
         return new ClipboardEvent(type, canBubble, cancelable, dataTransfer);
     }
diff --git a/third_party/WebKit/Source/core/events/CompositionEvent.cpp b/third_party/WebKit/Source/core/events/CompositionEvent.cpp
index f58fb60..9544626 100644
--- a/third_party/WebKit/Source/core/events/CompositionEvent.cpp
+++ b/third_party/WebKit/Source/core/events/CompositionEvent.cpp
@@ -32,7 +32,7 @@
 {
 }
 
-CompositionEvent::CompositionEvent(const AtomicString& type, RawPtr<AbstractView> view, const String& data)
+CompositionEvent::CompositionEvent(const AtomicString& type, AbstractView* view, const String& data)
     : UIEvent(type, true, true, view, 0, InputDeviceCapabilities::doesntFireTouchEventsSourceCapabilities())
     , m_data(data)
 {
@@ -49,7 +49,7 @@
 {
 }
 
-void CompositionEvent::initCompositionEvent(const AtomicString& type, bool canBubble, bool cancelable, RawPtr<AbstractView> view, const String& data)
+void CompositionEvent::initCompositionEvent(const AtomicString& type, bool canBubble, bool cancelable, AbstractView* view, const String& data)
 {
     if (dispatched())
         return;
diff --git a/third_party/WebKit/Source/core/events/CompositionEvent.h b/third_party/WebKit/Source/core/events/CompositionEvent.h
index cff7f12..7fe29ff 100644
--- a/third_party/WebKit/Source/core/events/CompositionEvent.h
+++ b/third_party/WebKit/Source/core/events/CompositionEvent.h
@@ -35,24 +35,24 @@
 class CompositionEvent final : public UIEvent {
     DEFINE_WRAPPERTYPEINFO();
 public:
-    static RawPtr<CompositionEvent> create()
+    static CompositionEvent* create()
     {
         return new CompositionEvent;
     }
 
-    static RawPtr<CompositionEvent> create(const AtomicString& type, RawPtr<AbstractView> view, const String& data)
+    static CompositionEvent* create(const AtomicString& type, AbstractView* view, const String& data)
     {
         return new CompositionEvent(type, view, data);
     }
 
-    static RawPtr<CompositionEvent> create(const AtomicString& type, const CompositionEventInit& initializer)
+    static CompositionEvent* create(const AtomicString& type, const CompositionEventInit& initializer)
     {
         return new CompositionEvent(type, initializer);
     }
 
     ~CompositionEvent() override;
 
-    void initCompositionEvent(const AtomicString& type, bool canBubble, bool cancelable, RawPtr<AbstractView>, const String& data);
+    void initCompositionEvent(const AtomicString& type, bool canBubble, bool cancelable, AbstractView*, const String& data);
 
     String data() const { return m_data; }
 
@@ -62,7 +62,7 @@
 
 private:
     CompositionEvent();
-    CompositionEvent(const AtomicString& type, RawPtr<AbstractView>, const String&);
+    CompositionEvent(const AtomicString& type, AbstractView*, const String&);
     CompositionEvent(const AtomicString& type, const CompositionEventInit&);
 
     String m_data;
diff --git a/third_party/WebKit/Source/core/events/CustomEvent.h b/third_party/WebKit/Source/core/events/CustomEvent.h
index 5a1a5e38..cd3d3ed0 100644
--- a/third_party/WebKit/Source/core/events/CustomEvent.h
+++ b/third_party/WebKit/Source/core/events/CustomEvent.h
@@ -39,12 +39,12 @@
 public:
     ~CustomEvent() override;
 
-    static RawPtr<CustomEvent> create()
+    static CustomEvent* create()
     {
         return new CustomEvent;
     }
 
-    static RawPtr<CustomEvent> create(const AtomicString& type, const CustomEventInit& initializer)
+    static CustomEvent* create(const AtomicString& type, const CustomEventInit& initializer)
     {
         return new CustomEvent(type, initializer);
     }
diff --git a/third_party/WebKit/Source/core/events/DOMWindowEventQueue.cpp b/third_party/WebKit/Source/core/events/DOMWindowEventQueue.cpp
index f84a1018..072ca42 100644
--- a/third_party/WebKit/Source/core/events/DOMWindowEventQueue.cpp
+++ b/third_party/WebKit/Source/core/events/DOMWindowEventQueue.cpp
@@ -58,7 +58,7 @@
     Member<DOMWindowEventQueue> m_eventQueue;
 };
 
-RawPtr<DOMWindowEventQueue> DOMWindowEventQueue::create(ExecutionContext* context)
+DOMWindowEventQueue* DOMWindowEventQueue::create(ExecutionContext* context)
 {
     return new DOMWindowEventQueue(context);
 }
@@ -83,13 +83,13 @@
     EventQueue::trace(visitor);
 }
 
-bool DOMWindowEventQueue::enqueueEvent(RawPtr<Event> event)
+bool DOMWindowEventQueue::enqueueEvent(Event* event)
 {
     if (m_isClosed)
         return false;
 
     ASSERT(event->target());
-    InspectorInstrumentation::didEnqueueEvent(event->target(), event.get());
+    InspectorInstrumentation::didEnqueueEvent(event->target(), event);
 
     bool wasAdded = m_queuedEvents.add(event).isNewEntry;
     ASSERT_UNUSED(wasAdded, wasAdded); // It should not have already been in the list.
@@ -119,9 +119,9 @@
     m_pendingEventTimer->stop();
     if (InspectorInstrumentation::hasFrontends()) {
         for (const auto& queuedEvent : m_queuedEvents) {
-            RawPtr<Event> event = queuedEvent;
+            Event* event = queuedEvent;
             if (event)
-                InspectorInstrumentation::didRemoveEvent(event->target(), event.get());
+                InspectorInstrumentation::didRemoveEvent(event->target(), event);
         }
     }
     m_queuedEvents.clear();
@@ -137,20 +137,18 @@
     bool wasAdded = m_queuedEvents.add(nullptr).isNewEntry;
     ASSERT_UNUSED(wasAdded, wasAdded); // It should not have already been in the list.
 
-    RawPtr<DOMWindowEventQueue> protector(this);
-
     while (!m_queuedEvents.isEmpty()) {
         HeapListHashSet<Member<Event>, 16>::iterator iter = m_queuedEvents.begin();
-        RawPtr<Event> event = *iter;
+        Event* event = *iter;
         m_queuedEvents.remove(iter);
         if (!event)
             break;
-        dispatchEvent(event.get());
-        InspectorInstrumentation::didRemoveEvent(event->target(), event.get());
+        dispatchEvent(event);
+        InspectorInstrumentation::didRemoveEvent(event->target(), event);
     }
 }
 
-void DOMWindowEventQueue::dispatchEvent(RawPtr<Event> event)
+void DOMWindowEventQueue::dispatchEvent(Event* event)
 {
     EventTarget* eventTarget = event->target();
     if (eventTarget->toDOMWindow())
diff --git a/third_party/WebKit/Source/core/events/DOMWindowEventQueue.h b/third_party/WebKit/Source/core/events/DOMWindowEventQueue.h
index 92caaf6..8c9b16f 100644
--- a/third_party/WebKit/Source/core/events/DOMWindowEventQueue.h
+++ b/third_party/WebKit/Source/core/events/DOMWindowEventQueue.h
@@ -47,12 +47,12 @@
 
 class DOMWindowEventQueue final : DOMWINDOWEVENTQUEUE_BASE_CLASSES {
 public:
-    static RawPtr<DOMWindowEventQueue> create(ExecutionContext*);
+    static DOMWindowEventQueue* create(ExecutionContext*);
     ~DOMWindowEventQueue() override;
 
     // EventQueue
     DECLARE_VIRTUAL_TRACE();
-    bool enqueueEvent(RawPtr<Event>) override;
+    bool enqueueEvent(Event*) override;
     bool cancelEvent(Event*) override;
     void close() override;
 
@@ -60,7 +60,7 @@
     explicit DOMWindowEventQueue(ExecutionContext*);
 
     void pendingEventTimerFired();
-    void dispatchEvent(RawPtr<Event>);
+    void dispatchEvent(Event*);
 
     Member<DOMWindowEventQueueTimer> m_pendingEventTimer;
     HeapListHashSet<Member<Event>, 16> m_queuedEvents;
diff --git a/third_party/WebKit/Source/core/events/DragEvent.cpp b/third_party/WebKit/Source/core/events/DragEvent.cpp
index 0068b92..0d05b9e 100644
--- a/third_party/WebKit/Source/core/events/DragEvent.cpp
+++ b/third_party/WebKit/Source/core/events/DragEvent.cpp
@@ -10,12 +10,12 @@
 
 namespace blink {
 
-RawPtr<DragEvent> DragEvent::create(const AtomicString& type, bool canBubble, bool cancelable, RawPtr<AbstractView> view,
+DragEvent* DragEvent::create(const AtomicString& type, bool canBubble, bool cancelable, AbstractView* view,
     int detail, int screenX, int screenY, int windowX, int windowY,
     int movementX, int movementY,
     PlatformEvent::Modifiers modifiers,
     short button, unsigned short buttons,
-    RawPtr<EventTarget> relatedTarget,
+    EventTarget* relatedTarget,
     double platformTimeStamp, DataTransfer* dataTransfer,
     PlatformMouseEvent::SyntheticEventType syntheticEventType)
 {
@@ -37,11 +37,11 @@
 {
 }
 
-DragEvent::DragEvent(const AtomicString& eventType, bool canBubble, bool cancelable, RawPtr<AbstractView> view,
+DragEvent::DragEvent(const AtomicString& eventType, bool canBubble, bool cancelable, AbstractView* view,
     int detail, int screenX, int screenY, int windowX, int windowY,
     int movementX, int movementY,
     PlatformEvent::Modifiers modifiers,
-    short button, unsigned short buttons, RawPtr<EventTarget> relatedTarget,
+    short button, unsigned short buttons, EventTarget* relatedTarget,
     double platformTimeStamp, DataTransfer* dataTransfer,
     PlatformMouseEvent::SyntheticEventType syntheticEventType)
     : MouseEvent(eventType, canBubble, cancelable, view, detail, screenX, screenY,
@@ -71,7 +71,7 @@
     return false;
 }
 
-RawPtr<EventDispatchMediator> DragEvent::createMediator()
+EventDispatchMediator* DragEvent::createMediator()
 {
     return DragEventDispatchMediator::create(this);
 }
@@ -82,12 +82,12 @@
     MouseEvent::trace(visitor);
 }
 
-RawPtr<DragEventDispatchMediator> DragEventDispatchMediator::create(RawPtr<DragEvent> dragEvent)
+DragEventDispatchMediator* DragEventDispatchMediator::create(DragEvent* dragEvent)
 {
     return new DragEventDispatchMediator(dragEvent);
 }
 
-DragEventDispatchMediator::DragEventDispatchMediator(RawPtr<DragEvent> dragEvent)
+DragEventDispatchMediator::DragEventDispatchMediator(DragEvent* dragEvent)
     : EventDispatchMediator(dragEvent)
 {
 }
diff --git a/third_party/WebKit/Source/core/events/DragEvent.h b/third_party/WebKit/Source/core/events/DragEvent.h
index c447d02..c67f105 100644
--- a/third_party/WebKit/Source/core/events/DragEvent.h
+++ b/third_party/WebKit/Source/core/events/DragEvent.h
@@ -17,25 +17,25 @@
     DEFINE_WRAPPERTYPEINFO();
 
 public:
-    static RawPtr<DragEvent> create()
+    static DragEvent* create()
     {
         return new DragEvent;
     }
 
-    static RawPtr<DragEvent> create(DataTransfer* dataTransfer)
+    static DragEvent* create(DataTransfer* dataTransfer)
     {
         return new DragEvent(dataTransfer);
     }
 
-    static RawPtr<DragEvent> create(const AtomicString& type, bool canBubble, bool cancelable, RawPtr<AbstractView>,
+    static DragEvent* create(const AtomicString& type, bool canBubble, bool cancelable, AbstractView*,
         int detail, int screenX, int screenY, int windowX, int windowY,
         int movementX, int movementY,
         PlatformEvent::Modifiers, short button, unsigned short buttons,
-        RawPtr<EventTarget> relatedTarget,
+        EventTarget* relatedTarget,
         double platformTimeStamp, DataTransfer*,
         PlatformMouseEvent::SyntheticEventType = PlatformMouseEvent::RealOrIndistinguishable);
 
-    static RawPtr<DragEvent> create(const AtomicString& type, const DragEventInit& initializer)
+    static DragEvent* create(const AtomicString& type, const DragEventInit& initializer)
     {
         return new DragEvent(type, initializer);
     }
@@ -45,18 +45,18 @@
     bool isDragEvent() const override;
     bool isMouseEvent() const override;
 
-    RawPtr<EventDispatchMediator> createMediator() override;
+    EventDispatchMediator* createMediator() override;
 
     DECLARE_VIRTUAL_TRACE();
 
 private:
     DragEvent();
     DragEvent(DataTransfer*);
-    DragEvent(const AtomicString& type, bool canBubble, bool cancelable, RawPtr<AbstractView>,
+    DragEvent(const AtomicString& type, bool canBubble, bool cancelable, AbstractView*,
         int detail, int screenX, int screenY, int windowX, int windowY,
         int movementX, int movementY,
         PlatformEvent::Modifiers, short button, unsigned short buttons,
-        RawPtr<EventTarget> relatedTarget,
+        EventTarget* relatedTarget,
         double platformTimeStamp, DataTransfer*,
         PlatformMouseEvent::SyntheticEventType);
 
@@ -67,10 +67,10 @@
 
 class DragEventDispatchMediator final : public EventDispatchMediator {
 public:
-    static RawPtr<DragEventDispatchMediator> create(RawPtr<DragEvent>);
+    static DragEventDispatchMediator* create(DragEvent*);
 
 private:
-    explicit DragEventDispatchMediator(RawPtr<DragEvent>);
+    explicit DragEventDispatchMediator(DragEvent*);
     DragEvent& event() const;
     DispatchEventResult dispatchEvent(EventDispatcher&) const override;
 };
diff --git a/third_party/WebKit/Source/core/events/ErrorEvent.h b/third_party/WebKit/Source/core/events/ErrorEvent.h
index 0be9b0d..bc55ecd 100644
--- a/third_party/WebKit/Source/core/events/ErrorEvent.h
+++ b/third_party/WebKit/Source/core/events/ErrorEvent.h
@@ -42,19 +42,19 @@
 class ErrorEvent final : public Event {
     DEFINE_WRAPPERTYPEINFO();
 public:
-    static RawPtr<ErrorEvent> create()
+    static ErrorEvent* create()
     {
         return new ErrorEvent;
     }
-    static RawPtr<ErrorEvent> create(const String& message, const String& fileName, unsigned lineNumber, unsigned columnNumber, DOMWrapperWorld* world)
+    static ErrorEvent* create(const String& message, const String& fileName, unsigned lineNumber, unsigned columnNumber, DOMWrapperWorld* world)
     {
         return new ErrorEvent(message, fileName, lineNumber, columnNumber, world);
     }
-    static RawPtr<ErrorEvent> create(const AtomicString& type, const ErrorEventInit& initializer)
+    static ErrorEvent* create(const AtomicString& type, const ErrorEventInit& initializer)
     {
         return new ErrorEvent(type, initializer);
     }
-    static RawPtr<ErrorEvent> createSanitizedError(DOMWrapperWorld* world)
+    static ErrorEvent* createSanitizedError(DOMWrapperWorld* world)
     {
         return new ErrorEvent("Script error.", String(), 0, 0, world);
     }
diff --git a/third_party/WebKit/Source/core/events/Event.cpp b/third_party/WebKit/Source/core/events/Event.cpp
index 14ef5bb..9177b507d 100644
--- a/third_party/WebKit/Source/core/events/Event.cpp
+++ b/third_party/WebKit/Source/core/events/Event.cpp
@@ -241,7 +241,7 @@
         m_defaultPrevented = true;
 }
 
-void Event::setTarget(RawPtr<EventTarget> target)
+void Event::setTarget(EventTarget* target)
 {
     if (m_target == target)
         return;
@@ -255,10 +255,10 @@
 {
 }
 
-void Event::setUnderlyingEvent(RawPtr<Event> ue)
+void Event::setUnderlyingEvent(Event* ue)
 {
     // Prohibit creation of a cycle -- just do nothing in that case.
-    for (Event* e = ue.get(); e; e = e->underlyingEvent())
+    for (Event* e = ue; e; e = e->underlyingEvent())
         if (e == this)
             return;
     m_underlyingEvent = ue;
@@ -320,7 +320,7 @@
     return HeapVector<Member<EventTarget>>();
 }
 
-RawPtr<EventDispatchMediator> Event::createMediator()
+EventDispatchMediator* Event::createMediator()
 {
     return EventDispatchMediator::create(this);
 }
diff --git a/third_party/WebKit/Source/core/events/Event.h b/third_party/WebKit/Source/core/events/Event.h
index acffc4e..182d150 100644
--- a/third_party/WebKit/Source/core/events/Event.h
+++ b/third_party/WebKit/Source/core/events/Event.h
@@ -75,7 +75,7 @@
         RailsModeVertical   = 2
     };
 
-    static RawPtr<Event> create()
+    static Event* create()
     {
         return new Event;
     }
@@ -83,24 +83,24 @@
     // A factory for a simple event. The event doesn't bubble, and isn't
     // cancelable.
     // http://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.html#fire-a-simple-event
-    static RawPtr<Event> create(const AtomicString& type)
+    static Event* create(const AtomicString& type)
     {
         return new Event(type, false, false);
     }
-    static RawPtr<Event> createCancelable(const AtomicString& type)
+    static Event* createCancelable(const AtomicString& type)
     {
         return new Event(type, false, true);
     }
-    static RawPtr<Event> createBubble(const AtomicString& type)
+    static Event* createBubble(const AtomicString& type)
     {
         return new Event(type, true, false);
     }
-    static RawPtr<Event> createCancelableBubble(const AtomicString& type)
+    static Event* createCancelableBubble(const AtomicString& type)
     {
         return new Event(type, true, true);
     }
 
-    static RawPtr<Event> create(const AtomicString& type, const EventInit& initializer)
+    static Event* create(const AtomicString& type, const EventInit& initializer)
     {
         return new Event(type, initializer);
     }
@@ -114,7 +114,7 @@
     void setType(const AtomicString& type) { m_type = type; }
 
     EventTarget* target() const { return m_target.get(); }
-    void setTarget(RawPtr<EventTarget>);
+    void setTarget(EventTarget*);
 
     EventTarget* currentTarget() const;
     void setCurrentTarget(EventTarget* currentTarget) { m_currentTarget = currentTarget; }
@@ -183,7 +183,7 @@
     void setCancelBubble(bool cancel) { m_cancelBubble = cancel; }
 
     Event* underlyingEvent() const { return m_underlyingEvent.get(); }
-    void setUnderlyingEvent(RawPtr<Event>);
+    void setUnderlyingEvent(Event*);
 
     EventPath& eventPath() { ASSERT(m_eventPath); return *m_eventPath; }
     void initEventPath(Node&);
@@ -197,7 +197,7 @@
     // ErrorEvent behaves, can override this method.
     virtual bool canBeDispatchedInWorld(const DOMWrapperWorld&) const { return true; }
 
-    virtual RawPtr<EventDispatchMediator> createMediator();
+    virtual EventDispatchMediator* createMediator();
 
     bool isTrusted() const { return m_isTrusted; }
     void setTrusted(bool value) { m_isTrusted = value; }
diff --git a/third_party/WebKit/Source/core/events/EventDispatchMediator.cpp b/third_party/WebKit/Source/core/events/EventDispatchMediator.cpp
index fa817a8..7c6ea4250 100644
--- a/third_party/WebKit/Source/core/events/EventDispatchMediator.cpp
+++ b/third_party/WebKit/Source/core/events/EventDispatchMediator.cpp
@@ -35,12 +35,12 @@
 
 namespace blink {
 
-RawPtr<EventDispatchMediator> EventDispatchMediator::create(RawPtr<Event> event)
+EventDispatchMediator* EventDispatchMediator::create(Event* event)
 {
     return new EventDispatchMediator(event);
 }
 
-EventDispatchMediator::EventDispatchMediator(RawPtr<Event> event)
+EventDispatchMediator::EventDispatchMediator(Event* event)
     : m_event(event)
 {
 }
diff --git a/third_party/WebKit/Source/core/events/EventDispatchMediator.h b/third_party/WebKit/Source/core/events/EventDispatchMediator.h
index a090a63..0799b4a 100644
--- a/third_party/WebKit/Source/core/events/EventDispatchMediator.h
+++ b/third_party/WebKit/Source/core/events/EventDispatchMediator.h
@@ -44,16 +44,16 @@
 
 class EventDispatchMediator : public GarbageCollectedFinalized<EventDispatchMediator> {
 public:
-    static RawPtr<EventDispatchMediator> create(RawPtr<Event>);
+    static EventDispatchMediator* create(Event*);
     virtual ~EventDispatchMediator() { }
     DECLARE_VIRTUAL_TRACE();
     virtual DispatchEventResult dispatchEvent(EventDispatcher&) const;
     Event& event() const { return *m_event; }
 
 protected:
-    explicit EventDispatchMediator(RawPtr<Event>);
+    explicit EventDispatchMediator(Event*);
     EventDispatchMediator() { }
-    void setEvent(RawPtr<Event> event) { ASSERT(event.get()); m_event = event; }
+    void setEvent(Event* event) { ASSERT(event); m_event = event; }
 
 private:
     Member<Event> m_event;
diff --git a/third_party/WebKit/Source/core/events/EventDispatcher.cpp b/third_party/WebKit/Source/core/events/EventDispatcher.cpp
index 5a51d61..974d135 100644
--- a/third_party/WebKit/Source/core/events/EventDispatcher.cpp
+++ b/third_party/WebKit/Source/core/events/EventDispatcher.cpp
@@ -41,7 +41,7 @@
 
 namespace blink {
 
-DispatchEventResult EventDispatcher::dispatchEvent(Node& node, RawPtr<EventDispatchMediator> mediator)
+DispatchEventResult EventDispatcher::dispatchEvent(Node& node, EventDispatchMediator* mediator)
 {
     TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("blink.debug"), "EventDispatcher::dispatchEvent");
     ASSERT(!EventDispatchForbiddenScope::isEventDispatchForbidden());
@@ -49,7 +49,7 @@
     return mediator->dispatchEvent(dispatcher);
 }
 
-EventDispatcher::EventDispatcher(Node& node, RawPtr<Event> event)
+EventDispatcher::EventDispatcher(Node& node, Event* event)
     : m_node(node)
     , m_event(event)
 #if ENABLE(ASSERT)
@@ -61,7 +61,7 @@
     m_event->initEventPath(*m_node);
 }
 
-void EventDispatcher::dispatchScopedEvent(Node& node, RawPtr<EventDispatchMediator> mediator)
+void EventDispatcher::dispatchScopedEvent(Node& node, EventDispatchMediator* mediator)
 {
     // We need to set the target here because it can go away by the time we actually fire the event.
     mediator->event().setTarget(EventPath::eventTargetRespectingTargetRules(node));
@@ -73,15 +73,15 @@
     // This persistent vector doesn't cause leaks, because added Nodes are removed
     // before dispatchSimulatedClick() returns. This vector is here just to prevent
     // the code from running into an infinite recursion of dispatchSimulatedClick().
-    DEFINE_STATIC_LOCAL(Persistent<HeapHashSet<Member<Node>>>, nodesDispatchingSimulatedClicks, (new HeapHashSet<Member<Node>>()));
+    DEFINE_STATIC_LOCAL(HeapHashSet<Member<Node>>, nodesDispatchingSimulatedClicks, (new HeapHashSet<Member<Node>>));
 
     if (isDisabledFormControl(&node))
         return;
 
-    if (nodesDispatchingSimulatedClicks->contains(&node))
+    if (nodesDispatchingSimulatedClicks.contains(&node))
         return;
 
-    nodesDispatchingSimulatedClicks->add(&node);
+    nodesDispatchingSimulatedClicks.add(&node);
 
     if (mouseEventOptions == SendMouseOverUpDownEvents)
         EventDispatcher(node, MouseEvent::create(EventTypeNames::mouseover, node.document().domWindow(), underlyingEvent, creationScope)).dispatch();
@@ -98,7 +98,7 @@
     // always send click
     EventDispatcher(node, MouseEvent::create(EventTypeNames::click, node.document().domWindow(), underlyingEvent, creationScope)).dispatch();
 
-    nodesDispatchingSimulatedClicks->remove(&node);
+    nodesDispatchingSimulatedClicks.remove(&node);
 }
 
 DispatchEventResult EventDispatcher::dispatch()
diff --git a/third_party/WebKit/Source/core/events/EventDispatcher.h b/third_party/WebKit/Source/core/events/EventDispatcher.h
index 5a543fa..fc6368ab 100644
--- a/third_party/WebKit/Source/core/events/EventDispatcher.h
+++ b/third_party/WebKit/Source/core/events/EventDispatcher.h
@@ -49,8 +49,8 @@
 class EventDispatcher {
     STACK_ALLOCATED();
 public:
-    static DispatchEventResult dispatchEvent(Node&, RawPtr<EventDispatchMediator>);
-    static void dispatchScopedEvent(Node&, RawPtr<EventDispatchMediator>);
+    static DispatchEventResult dispatchEvent(Node&, EventDispatchMediator*);
+    static void dispatchScopedEvent(Node&, EventDispatchMediator*);
 
     static void dispatchSimulatedClick(Node&, Event* underlyingEvent, SimulatedClickMouseEventOptions, SimulatedClickCreationScope);
 
@@ -59,7 +59,7 @@
     Event& event() const { return *m_event; }
 
 private:
-    EventDispatcher(Node&, RawPtr<Event>);
+    EventDispatcher(Node&, Event*);
 
     EventDispatchContinuation dispatchEventPreProcess(void*& preDispatchEventHandlerResult);
     EventDispatchContinuation dispatchEventAtCapturing();
diff --git a/third_party/WebKit/Source/core/events/EventListenerMap.cpp b/third_party/WebKit/Source/core/events/EventListenerMap.cpp
index 2473513..5480595c 100644
--- a/third_party/WebKit/Source/core/events/EventListenerMap.cpp
+++ b/third_party/WebKit/Source/core/events/EventListenerMap.cpp
@@ -106,7 +106,7 @@
     return types;
 }
 
-static bool addListenerToVector(EventListenerVector* vector, RawPtr<EventListener> listener, const EventListenerOptions& options)
+static bool addListenerToVector(EventListenerVector* vector, EventListener* listener, const EventListenerOptions& options)
 {
     RegisteredEventListener registeredListener(listener, options);
 
@@ -117,7 +117,7 @@
     return true;
 }
 
-bool EventListenerMap::add(const AtomicString& eventType, RawPtr<EventListener> listener, const EventListenerOptions& options)
+bool EventListenerMap::add(const AtomicString& eventType, EventListener* listener, const EventListenerOptions& options)
 {
     assertNoActiveIterators();
 
diff --git a/third_party/WebKit/Source/core/events/EventListenerMap.h b/third_party/WebKit/Source/core/events/EventListenerMap.h
index bed3e923..ade504d6 100644
--- a/third_party/WebKit/Source/core/events/EventListenerMap.h
+++ b/third_party/WebKit/Source/core/events/EventListenerMap.h
@@ -57,7 +57,7 @@
     bool containsCapturing(const AtomicString& eventType) const;
 
     void clear();
-    bool add(const AtomicString& eventType, RawPtr<EventListener>, const EventListenerOptions&);
+    bool add(const AtomicString& eventType, EventListener*, const EventListenerOptions&);
     bool remove(const AtomicString& eventType, EventListener*, const EventListenerOptions&, size_t& indexOfRemovedListener);
     EventListenerVector* find(const AtomicString& eventType);
     Vector<AtomicString> eventTypes() const;
diff --git a/third_party/WebKit/Source/core/events/EventPath.cpp b/third_party/WebKit/Source/core/events/EventPath.cpp
index 8570112..67d80dd 100644
--- a/third_party/WebKit/Source/core/events/EventPath.cpp
+++ b/third_party/WebKit/Source/core/events/EventPath.cpp
@@ -228,7 +228,7 @@
 
 void EventPath::buildRelatedNodeMap(const Node& relatedNode, RelatedTargetMap& relatedTargetMap)
 {
-    RawPtr<EventPath> relatedTargetEventPath = new EventPath(const_cast<Node&>(relatedNode));
+    EventPath* relatedTargetEventPath = new EventPath(const_cast<Node&>(relatedNode));
     for (size_t i = 0; i < relatedTargetEventPath->m_treeScopeEventContexts.size(); ++i) {
         TreeScopeEventContext* treeScopeEventContext = relatedTargetEventPath->m_treeScopeEventContexts[i].get();
         relatedTargetMap.add(&treeScopeEventContext->treeScope(), treeScopeEventContext->target());
diff --git a/third_party/WebKit/Source/core/events/EventPathTest.cpp b/third_party/WebKit/Source/core/events/EventPathTest.cpp
index 06c5ba10..40ef500 100644
--- a/third_party/WebKit/Source/core/events/EventPathTest.cpp
+++ b/third_party/WebKit/Source/core/events/EventPathTest.cpp
@@ -30,8 +30,8 @@
 
 TEST_F(EventPathTest, ShouldBeEmptyForPseudoElementWithoutParentElement)
 {
-    RawPtr<Element> div = document().createElement(HTMLNames::divTag, false);
-    RawPtr<PseudoElement> pseudo = PseudoElement::create(div.get(), PseudoIdFirstLetter);
+    Element* div = document().createElement(HTMLNames::divTag, false);
+    PseudoElement* pseudo = PseudoElement::create(div, PseudoIdFirstLetter);
     pseudo->dispose();
     EventPath eventPath(*pseudo);
     EXPECT_TRUE(eventPath.isEmpty());
diff --git a/third_party/WebKit/Source/core/events/EventQueue.h b/third_party/WebKit/Source/core/events/EventQueue.h
index fec6b8d..1ac313cd 100644
--- a/third_party/WebKit/Source/core/events/EventQueue.h
+++ b/third_party/WebKit/Source/core/events/EventQueue.h
@@ -41,7 +41,7 @@
 public:
     virtual ~EventQueue() { }
     DEFINE_INLINE_VIRTUAL_TRACE() { }
-    virtual bool enqueueEvent(RawPtr<Event>) = 0;
+    virtual bool enqueueEvent(Event*) = 0;
     virtual bool cancelEvent(Event*) = 0;
     // The accumulated and all the future events will be discarded, no events will be dispatched anymore.
     virtual void close() = 0;
diff --git a/third_party/WebKit/Source/core/events/EventSender.h b/third_party/WebKit/Source/core/events/EventSender.h
index 06a39f5..f9951c9 100644
--- a/third_party/WebKit/Source/core/events/EventSender.h
+++ b/third_party/WebKit/Source/core/events/EventSender.h
@@ -37,7 +37,7 @@
 class EventSender final : public GarbageCollectedFinalized<EventSender<T>> {
     WTF_MAKE_NONCOPYABLE(EventSender);
 public:
-    static RawPtr<EventSender> create(const AtomicString& eventType)
+    static EventSender* create(const AtomicString& eventType)
     {
         return new EventSender(eventType);
     }
diff --git a/third_party/WebKit/Source/core/events/EventTarget.cpp b/third_party/WebKit/Source/core/events/EventTarget.cpp
index 9891ef5..83e7ad4 100644
--- a/third_party/WebKit/Source/core/events/EventTarget.cpp
+++ b/third_party/WebKit/Source/core/events/EventTarget.cpp
@@ -118,14 +118,14 @@
     return nullptr;
 }
 
-bool EventTarget::addEventListener(const AtomicString& eventType, RawPtr<EventListener> listener, bool useCapture)
+bool EventTarget::addEventListener(const AtomicString& eventType, EventListener* listener, bool useCapture)
 {
     EventListenerOptions options;
     setDefaultEventListenerOptionsLegacy(options, useCapture);
     return addEventListenerInternal(eventType, listener, options);
 }
 
-bool EventTarget::addEventListener(const AtomicString& eventType, RawPtr<EventListener> listener, const EventListenerOptionsOrBoolean& optionsUnion)
+bool EventTarget::addEventListener(const AtomicString& eventType, EventListener* listener, const EventListenerOptionsOrBoolean& optionsUnion)
 {
     if (optionsUnion.isBoolean())
         return addEventListener(eventType, listener, optionsUnion.getAsBoolean());
@@ -136,13 +136,13 @@
     return addEventListener(eventType, listener);
 }
 
-bool EventTarget::addEventListener(const AtomicString& eventType, RawPtr<EventListener> listener, EventListenerOptions& options)
+bool EventTarget::addEventListener(const AtomicString& eventType, EventListener* listener, EventListenerOptions& options)
 {
     setDefaultEventListenerOptions(options);
     return addEventListenerInternal(eventType, listener, options);
 }
 
-bool EventTarget::addEventListenerInternal(const AtomicString& eventType, RawPtr<EventListener> listener, const EventListenerOptions& options)
+bool EventTarget::addEventListenerInternal(const AtomicString& eventType, EventListener* listener, const EventListenerOptions& options)
 {
     if (!listener)
         return false;
@@ -158,14 +158,14 @@
     return ensureEventTargetData().eventListenerMap.add(eventType, listener, options);
 }
 
-bool EventTarget::removeEventListener(const AtomicString& eventType, RawPtr<EventListener> listener, bool useCapture)
+bool EventTarget::removeEventListener(const AtomicString& eventType, EventListener* listener, bool useCapture)
 {
     EventListenerOptions options;
     setDefaultEventListenerOptionsLegacy(options, useCapture);
     return removeEventListenerInternal(eventType, listener, options);
 }
 
-bool EventTarget::removeEventListener(const AtomicString& eventType, RawPtr<EventListener> listener, const EventListenerOptionsOrBoolean& optionsUnion)
+bool EventTarget::removeEventListener(const AtomicString& eventType, EventListener* listener, const EventListenerOptionsOrBoolean& optionsUnion)
 {
     if (optionsUnion.isBoolean())
         return removeEventListener(eventType, listener, optionsUnion.getAsBoolean());
@@ -176,13 +176,13 @@
     return removeEventListener(eventType, listener);
 }
 
-bool EventTarget::removeEventListener(const AtomicString& eventType, RawPtr<EventListener> listener, EventListenerOptions& options)
+bool EventTarget::removeEventListener(const AtomicString& eventType, EventListener* listener, EventListenerOptions& options)
 {
     setDefaultEventListenerOptions(options);
     return removeEventListenerInternal(eventType, listener, options);
 }
 
-bool EventTarget::removeEventListenerInternal(const AtomicString& eventType, RawPtr<EventListener> listener, const EventListenerOptions& options)
+bool EventTarget::removeEventListenerInternal(const AtomicString& eventType, EventListener* listener, const EventListenerOptions& options)
 {
     if (!listener)
         return false;
@@ -193,7 +193,7 @@
 
     size_t indexOfRemovedListener;
 
-    if (!d->eventListenerMap.remove(eventType, listener.get(), options, indexOfRemovedListener))
+    if (!d->eventListenerMap.remove(eventType, listener, options, indexOfRemovedListener))
         return false;
 
     // Notify firing events planning to invoke the listener at 'index' that
@@ -220,7 +220,7 @@
     return true;
 }
 
-bool EventTarget::setAttributeEventListener(const AtomicString& eventType, RawPtr<EventListener> listener)
+bool EventTarget::setAttributeEventListener(const AtomicString& eventType, EventListener* listener)
 {
     clearAttributeEventListener(eventType);
     if (!listener)
@@ -249,7 +249,7 @@
     return removeEventListener(eventType, listener, false);
 }
 
-bool EventTarget::dispatchEventForBindings(RawPtr<Event> event, ExceptionState& exceptionState)
+bool EventTarget::dispatchEventForBindings(Event* event, ExceptionState& exceptionState)
 {
     if (event->type().isEmpty()) {
         exceptionState.throwDOMException(InvalidStateError, "The event provided is uninitialized.");
@@ -271,18 +271,18 @@
     return dispatchEventInternal(event) != DispatchEventResult::CanceledByEventHandler;
 }
 
-DispatchEventResult EventTarget::dispatchEvent(RawPtr<Event> event)
+DispatchEventResult EventTarget::dispatchEvent(Event* event)
 {
     event->setTrusted(true);
     return dispatchEventInternal(event);
 }
 
-DispatchEventResult EventTarget::dispatchEventInternal(RawPtr<Event> event)
+DispatchEventResult EventTarget::dispatchEventInternal(Event* event)
 {
     event->setTarget(this);
     event->setCurrentTarget(this);
     event->setEventPhase(Event::AT_TARGET);
-    DispatchEventResult dispatchResult = fireEventListeners(event.get());
+    DispatchEventResult dispatchResult = fireEventListeners(event);
     event->setEventPhase(0);
     return dispatchResult;
 }
@@ -384,8 +384,6 @@
 
 void EventTarget::fireEventListeners(Event* event, EventTargetData* d, EventListenerVector& entry)
 {
-    RawPtr<EventTarget> protect(this);
-
     // Fire all listeners registered for this event. Don't fire listeners removed
     // during event dispatch. Also, don't fire event listeners added during event
     // dispatch. Conveniently, all new event listeners will be added after or at
diff --git a/third_party/WebKit/Source/core/events/EventTarget.h b/third_party/WebKit/Source/core/events/EventTarget.h
index 3ececf98..c5dfe99 100644
--- a/third_party/WebKit/Source/core/events/EventTarget.h
+++ b/third_party/WebKit/Source/core/events/EventTarget.h
@@ -129,25 +129,25 @@
     virtual LocalDOMWindow* toDOMWindow();
     virtual MessagePort* toMessagePort();
 
-    bool addEventListener(const AtomicString& eventType, RawPtr<EventListener>, bool useCapture = false);
-    bool addEventListener(const AtomicString& eventType, RawPtr<EventListener>, const EventListenerOptionsOrBoolean&);
-    bool addEventListener(const AtomicString& eventType, RawPtr<EventListener>, EventListenerOptions&);
+    bool addEventListener(const AtomicString& eventType, EventListener*, bool useCapture = false);
+    bool addEventListener(const AtomicString& eventType, EventListener*, const EventListenerOptionsOrBoolean&);
+    bool addEventListener(const AtomicString& eventType, EventListener*, EventListenerOptions&);
 
-    bool removeEventListener(const AtomicString& eventType, RawPtr<EventListener>, bool useCapture = false);
-    bool removeEventListener(const AtomicString& eventType, RawPtr<EventListener>, const EventListenerOptionsOrBoolean&);
-    bool removeEventListener(const AtomicString& eventType, RawPtr<EventListener>, EventListenerOptions&);
+    bool removeEventListener(const AtomicString& eventType, EventListener*, bool useCapture = false);
+    bool removeEventListener(const AtomicString& eventType, EventListener*, const EventListenerOptionsOrBoolean&);
+    bool removeEventListener(const AtomicString& eventType, EventListener*, EventListenerOptions&);
     virtual void removeAllEventListeners();
 
-    DispatchEventResult dispatchEvent(RawPtr<Event>);
+    DispatchEventResult dispatchEvent(Event*);
 
     // dispatchEventForBindings is intended to only be called from
     // javascript originated calls. This method will validate and may adjust
     // the Event object before dispatching.
-    bool dispatchEventForBindings(RawPtr<Event>, ExceptionState&);
+    bool dispatchEventForBindings(Event*, ExceptionState&);
     virtual void uncaughtExceptionInEventHandler();
 
     // Used for legacy "onEvent" attribute APIs.
-    bool setAttributeEventListener(const AtomicString& eventType, RawPtr<EventListener>);
+    bool setAttributeEventListener(const AtomicString& eventType, EventListener*);
     EventListener* getAttributeEventListener(const AtomicString& eventType);
 
     bool hasEventListeners() const;
@@ -167,9 +167,9 @@
 protected:
     EventTarget();
 
-    virtual bool addEventListenerInternal(const AtomicString& eventType, RawPtr<EventListener>, const EventListenerOptions&);
-    virtual bool removeEventListenerInternal(const AtomicString& eventType, RawPtr<EventListener>, const EventListenerOptions&);
-    virtual DispatchEventResult dispatchEventInternal(RawPtr<Event>);
+    virtual bool addEventListenerInternal(const AtomicString& eventType, EventListener*, const EventListenerOptions&);
+    virtual bool removeEventListenerInternal(const AtomicString& eventType, EventListener*, const EventListenerOptions&);
+    virtual DispatchEventResult dispatchEventInternal(Event*);
 
     // Subclasses should likely not override these themselves; instead, they should subclass EventTargetWithInlineData.
     virtual EventTargetData* eventTargetData() = 0;
@@ -250,15 +250,15 @@
 // macros to avoid causing so many header includes.
 #define DEFINE_ATTRIBUTE_EVENT_LISTENER(attribute) \
     EventListener* on##attribute() { return this->getAttributeEventListener(EventTypeNames::attribute); } \
-    void setOn##attribute(RawPtr<EventListener> listener) { this->setAttributeEventListener(EventTypeNames::attribute, listener); } \
+    void setOn##attribute(EventListener* listener) { this->setAttributeEventListener(EventTypeNames::attribute, listener); } \
 
 #define DEFINE_STATIC_ATTRIBUTE_EVENT_LISTENER(attribute) \
     static EventListener* on##attribute(EventTarget& eventTarget) { return eventTarget.getAttributeEventListener(EventTypeNames::attribute); } \
-    static void setOn##attribute(EventTarget& eventTarget, RawPtr<EventListener> listener) { eventTarget.setAttributeEventListener(EventTypeNames::attribute, listener); } \
+    static void setOn##attribute(EventTarget& eventTarget, EventListener* listener) { eventTarget.setAttributeEventListener(EventTypeNames::attribute, listener); } \
 
 #define DEFINE_WINDOW_ATTRIBUTE_EVENT_LISTENER(attribute) \
     EventListener* on##attribute() { return document().getWindowAttributeEventListener(EventTypeNames::attribute); } \
-    void setOn##attribute(RawPtr<EventListener> listener) { document().setWindowAttributeEventListener(EventTypeNames::attribute, listener); } \
+    void setOn##attribute(EventListener* listener) { document().setWindowAttributeEventListener(EventTypeNames::attribute, listener); } \
 
 #define DEFINE_STATIC_WINDOW_ATTRIBUTE_EVENT_LISTENER(attribute) \
     static EventListener* on##attribute(EventTarget& eventTarget) { \
@@ -267,7 +267,7 @@
         ASSERT(eventTarget.toDOMWindow()); \
         return eventTarget.getAttributeEventListener(EventTypeNames::attribute); \
     } \
-    static void setOn##attribute(EventTarget& eventTarget, RawPtr<EventListener> listener) { \
+    static void setOn##attribute(EventTarget& eventTarget, EventListener* listener) { \
         if (Node* node = eventTarget.toNode()) \
             node->document().setWindowAttributeEventListener(EventTypeNames::attribute, listener); \
         else { \
@@ -278,7 +278,7 @@
 
 #define DEFINE_MAPPED_ATTRIBUTE_EVENT_LISTENER(attribute, eventName) \
     EventListener* on##attribute() { return getAttributeEventListener(EventTypeNames::eventName); } \
-    void setOn##attribute(RawPtr<EventListener> listener) { setAttributeEventListener(EventTypeNames::eventName, listener); } \
+    void setOn##attribute(EventListener* listener) { setAttributeEventListener(EventTypeNames::eventName, listener); } \
 
 inline bool EventTarget::hasEventListeners() const
 {
diff --git a/third_party/WebKit/Source/core/events/FocusEvent.cpp b/third_party/WebKit/Source/core/events/FocusEvent.cpp
index 93d2a5f..91ca17d 100644
--- a/third_party/WebKit/Source/core/events/FocusEvent.cpp
+++ b/third_party/WebKit/Source/core/events/FocusEvent.cpp
@@ -44,7 +44,7 @@
 {
 }
 
-FocusEvent::FocusEvent(const AtomicString& type, bool canBubble, bool cancelable, RawPtr<AbstractView> view, int detail, EventTarget* relatedTarget, InputDeviceCapabilities* sourceCapabilities)
+FocusEvent::FocusEvent(const AtomicString& type, bool canBubble, bool cancelable, AbstractView* view, int detail, EventTarget* relatedTarget, InputDeviceCapabilities* sourceCapabilities)
     : UIEvent(type, canBubble, cancelable, relatedTarget, view, detail, sourceCapabilities)
     , m_relatedTarget(relatedTarget)
 {
@@ -57,7 +57,7 @@
         m_relatedTarget = initializer.relatedTarget();
 }
 
-RawPtr<EventDispatchMediator> FocusEvent::createMediator()
+EventDispatchMediator* FocusEvent::createMediator()
 {
     return FocusEventDispatchMediator::create(this);
 }
@@ -68,12 +68,12 @@
     UIEvent::trace(visitor);
 }
 
-RawPtr<FocusEventDispatchMediator> FocusEventDispatchMediator::create(RawPtr<FocusEvent> focusEvent)
+FocusEventDispatchMediator* FocusEventDispatchMediator::create(FocusEvent* focusEvent)
 {
     return new FocusEventDispatchMediator(focusEvent);
 }
 
-FocusEventDispatchMediator::FocusEventDispatchMediator(RawPtr<FocusEvent> focusEvent)
+FocusEventDispatchMediator::FocusEventDispatchMediator(FocusEvent* focusEvent)
     : EventDispatchMediator(focusEvent)
 {
 }
diff --git a/third_party/WebKit/Source/core/events/FocusEvent.h b/third_party/WebKit/Source/core/events/FocusEvent.h
index 8a623685..2bdf3b5 100644
--- a/third_party/WebKit/Source/core/events/FocusEvent.h
+++ b/third_party/WebKit/Source/core/events/FocusEvent.h
@@ -35,17 +35,17 @@
 class FocusEvent final : public UIEvent {
     DEFINE_WRAPPERTYPEINFO();
 public:
-    static RawPtr<FocusEvent> create()
+    static FocusEvent* create()
     {
         return new FocusEvent;
     }
 
-    static RawPtr<FocusEvent> create(const AtomicString& type, bool canBubble, bool cancelable, RawPtr<AbstractView> view, int detail, EventTarget* relatedTarget, InputDeviceCapabilities* sourceCapabilities)
+    static FocusEvent* create(const AtomicString& type, bool canBubble, bool cancelable, AbstractView* view, int detail, EventTarget* relatedTarget, InputDeviceCapabilities* sourceCapabilities)
     {
         return new FocusEvent(type, canBubble, cancelable, view, detail, relatedTarget, sourceCapabilities);
     }
 
-    static RawPtr<FocusEvent> create(const AtomicString& type, const FocusEventInit& initializer)
+    static FocusEvent* create(const AtomicString& type, const FocusEventInit& initializer)
     {
         return new FocusEvent(type, initializer);
     }
@@ -56,13 +56,13 @@
     const AtomicString& interfaceName() const override;
     bool isFocusEvent() const override;
 
-    RawPtr<EventDispatchMediator> createMediator() override;
+    EventDispatchMediator* createMediator() override;
 
     DECLARE_VIRTUAL_TRACE();
 
 private:
     FocusEvent();
-    FocusEvent(const AtomicString& type, bool canBubble, bool cancelable, RawPtr<AbstractView>, int, EventTarget*, InputDeviceCapabilities*);
+    FocusEvent(const AtomicString& type, bool canBubble, bool cancelable, AbstractView*, int, EventTarget*, InputDeviceCapabilities*);
     FocusEvent(const AtomicString& type, const FocusEventInit&);
 
     Member<EventTarget> m_relatedTarget;
@@ -72,9 +72,9 @@
 
 class FocusEventDispatchMediator final : public EventDispatchMediator {
 public:
-    static RawPtr<FocusEventDispatchMediator> create(RawPtr<FocusEvent>);
+    static FocusEventDispatchMediator* create(FocusEvent*);
 private:
-    explicit FocusEventDispatchMediator(RawPtr<FocusEvent>);
+    explicit FocusEventDispatchMediator(FocusEvent*);
     FocusEvent& event() const { return static_cast<FocusEvent&>(EventDispatchMediator::event()); }
     DispatchEventResult dispatchEvent(EventDispatcher&) const override;
 };
diff --git a/third_party/WebKit/Source/core/events/GenericEventQueue.cpp b/third_party/WebKit/Source/core/events/GenericEventQueue.cpp
index 60274bd..f6298b4 100644
--- a/third_party/WebKit/Source/core/events/GenericEventQueue.cpp
+++ b/third_party/WebKit/Source/core/events/GenericEventQueue.cpp
@@ -31,7 +31,7 @@
 
 namespace blink {
 
-RawPtr<GenericEventQueue> GenericEventQueue::create(EventTarget* owner)
+GenericEventQueue* GenericEventQueue::create(EventTarget* owner)
 {
     return new GenericEventQueue(owner);
 }
@@ -54,7 +54,7 @@
     EventQueue::trace(visitor);
 }
 
-bool GenericEventQueue::enqueueEvent(RawPtr<Event> event)
+bool GenericEventQueue::enqueueEvent(Event* event)
 {
     if (m_isClosed)
         return false;
@@ -62,8 +62,8 @@
     if (event->target() == m_owner)
         event->setTarget(nullptr);
 
-    TRACE_EVENT_ASYNC_BEGIN1("event", "GenericEventQueue:enqueueEvent", event.get(), "type", event->type().ascii());
-    InspectorInstrumentation::didEnqueueEvent(event->target() ? event->target() : m_owner.get(), event.get());
+    TRACE_EVENT_ASYNC_BEGIN1("event", "GenericEventQueue:enqueueEvent", event, "type", event->type().ascii());
+    InspectorInstrumentation::didEnqueueEvent(event->target() ? event->target() : m_owner.get(), event);
     m_pendingEvents.append(event);
 
     if (!m_timer.isActive())
@@ -96,7 +96,6 @@
     HeapVector<Member<Event>> pendingEvents;
     m_pendingEvents.swap(pendingEvents);
 
-    RawPtr<EventTarget> protect(m_owner.get());
     for (const auto& pendingEvent : pendingEvents) {
         Event* event = pendingEvent.get();
         EventTarget* target = event->target() ? event->target() : m_owner.get();
diff --git a/third_party/WebKit/Source/core/events/GenericEventQueue.h b/third_party/WebKit/Source/core/events/GenericEventQueue.h
index 524dece..18fb486 100644
--- a/third_party/WebKit/Source/core/events/GenericEventQueue.h
+++ b/third_party/WebKit/Source/core/events/GenericEventQueue.h
@@ -38,12 +38,12 @@
 
 class CORE_EXPORT GenericEventQueue final : public EventQueue {
 public:
-    static RawPtr<GenericEventQueue> create(EventTarget*);
+    static GenericEventQueue* create(EventTarget*);
     ~GenericEventQueue() override;
 
     // EventQueue
     DECLARE_VIRTUAL_TRACE();
-    bool enqueueEvent(RawPtr<Event>) override;
+    bool enqueueEvent(Event*) override;
     bool cancelEvent(Event*) override;
     void close() override;
 
diff --git a/third_party/WebKit/Source/core/events/GestureEvent.cpp b/third_party/WebKit/Source/core/events/GestureEvent.cpp
index 2acb24b..f4369f9 100644
--- a/third_party/WebKit/Source/core/events/GestureEvent.cpp
+++ b/third_party/WebKit/Source/core/events/GestureEvent.cpp
@@ -30,7 +30,7 @@
 
 namespace blink {
 
-RawPtr<GestureEvent> GestureEvent::create(RawPtr<AbstractView> view, const PlatformGestureEvent& event)
+GestureEvent* GestureEvent::create(AbstractView* view, const PlatformGestureEvent& event)
 {
     AtomicString eventType;
     float deltaX = 0;
@@ -127,7 +127,7 @@
 {
 }
 
-GestureEvent::GestureEvent(const AtomicString& type, RawPtr<AbstractView> view, int screenX, int screenY, int clientX, int clientY, PlatformEvent::Modifiers modifiers, float deltaX, float deltaY, float velocityX, float velocityY, bool inertial, bool synthetic, ScrollGranularity deltaUnits, double platformTimeStamp, int resendingPluginId, GestureSource source)
+GestureEvent::GestureEvent(const AtomicString& type, AbstractView* view, int screenX, int screenY, int clientX, int clientY, PlatformEvent::Modifiers modifiers, float deltaX, float deltaY, float velocityX, float velocityY, bool inertial, bool synthetic, ScrollGranularity deltaUnits, double platformTimeStamp, int resendingPluginId, GestureSource source)
     : MouseRelatedEvent(type, true, true, nullptr, view, 0, IntPoint(screenX, screenY), IntPoint(clientX, clientY), IntPoint(0, 0), modifiers, platformTimeStamp, PositionType::Position)
     , m_deltaX(deltaX)
     , m_deltaY(deltaY)
diff --git a/third_party/WebKit/Source/core/events/GestureEvent.h b/third_party/WebKit/Source/core/events/GestureEvent.h
index 900239c7..5c8dda1 100644
--- a/third_party/WebKit/Source/core/events/GestureEvent.h
+++ b/third_party/WebKit/Source/core/events/GestureEvent.h
@@ -43,7 +43,7 @@
 public:
     ~GestureEvent() override { }
 
-    static RawPtr<GestureEvent> create(RawPtr<AbstractView>, const PlatformGestureEvent&);
+    static GestureEvent* create(AbstractView*, const PlatformGestureEvent&);
 
     bool isGestureEvent() const override;
 
@@ -64,7 +64,7 @@
 
 private:
     GestureEvent();
-    GestureEvent(const AtomicString& type, RawPtr<AbstractView>, int screenX, int screenY, int clientX, int clientY, PlatformEvent::Modifiers, float deltaX, float deltaY, float velocityX, float velocityY, bool inertial, bool synthetic, ScrollGranularity deltaUnits, double platformTimeStamp, int resendingPluginId, GestureSource);
+    GestureEvent(const AtomicString& type, AbstractView*, int screenX, int screenY, int clientX, int clientY, PlatformEvent::Modifiers, float deltaX, float deltaY, float velocityX, float velocityY, bool inertial, bool synthetic, ScrollGranularity deltaUnits, double platformTimeStamp, int resendingPluginId, GestureSource);
 
     float m_deltaX;
     float m_deltaY;
diff --git a/third_party/WebKit/Source/core/events/HashChangeEvent.h b/third_party/WebKit/Source/core/events/HashChangeEvent.h
index c893151..dc3e6cf 100644
--- a/third_party/WebKit/Source/core/events/HashChangeEvent.h
+++ b/third_party/WebKit/Source/core/events/HashChangeEvent.h
@@ -29,17 +29,17 @@
 class HashChangeEvent final : public Event {
     DEFINE_WRAPPERTYPEINFO();
 public:
-    static RawPtr<HashChangeEvent> create()
+    static HashChangeEvent* create()
     {
         return new HashChangeEvent;
     }
 
-    static RawPtr<HashChangeEvent> create(const String& oldURL, const String& newURL)
+    static HashChangeEvent* create(const String& oldURL, const String& newURL)
     {
         return new HashChangeEvent(oldURL, newURL);
     }
 
-    static RawPtr<HashChangeEvent> create(const AtomicString& type, const HashChangeEventInit& initializer)
+    static HashChangeEvent* create(const AtomicString& type, const HashChangeEventInit& initializer)
     {
         return new HashChangeEvent(type, initializer);
     }
diff --git a/third_party/WebKit/Source/core/events/InputEvent.h b/third_party/WebKit/Source/core/events/InputEvent.h
index f29a634c..8bfb45ef 100644
--- a/third_party/WebKit/Source/core/events/InputEvent.h
+++ b/third_party/WebKit/Source/core/events/InputEvent.h
@@ -14,12 +14,12 @@
     DEFINE_WRAPPERTYPEINFO();
 
 public:
-    static RawPtr<InputEvent> create()
+    static InputEvent* create()
     {
         return new InputEvent;
     }
 
-    static RawPtr<InputEvent> create(const AtomicString& type, const InputEventInit& initializer)
+    static InputEvent* create(const AtomicString& type, const InputEventInit& initializer)
     {
         return new InputEvent(type, initializer);
     }
diff --git a/third_party/WebKit/Source/core/events/KeyboardEvent.cpp b/third_party/WebKit/Source/core/events/KeyboardEvent.cpp
index f99d22d..185341f 100644
--- a/third_party/WebKit/Source/core/events/KeyboardEvent.cpp
+++ b/third_party/WebKit/Source/core/events/KeyboardEvent.cpp
@@ -59,7 +59,7 @@
     return KeyboardEvent::DOM_KEY_LOCATION_STANDARD;
 }
 
-RawPtr<KeyboardEvent> KeyboardEvent::create(ScriptState* scriptState, const AtomicString& type, const KeyboardEventInit& initializer)
+KeyboardEvent* KeyboardEvent::create(ScriptState* scriptState, const AtomicString& type, const KeyboardEventInit& initializer)
 {
     if (scriptState->world().isIsolatedWorld())
         UIEventWithKeyState::didCreateEventInIsolatedWorld(initializer.ctrlKey(), initializer.altKey(), initializer.shiftKey(), initializer.metaKey());
diff --git a/third_party/WebKit/Source/core/events/KeyboardEvent.h b/third_party/WebKit/Source/core/events/KeyboardEvent.h
index 59adc56b..e3f075e 100644
--- a/third_party/WebKit/Source/core/events/KeyboardEvent.h
+++ b/third_party/WebKit/Source/core/events/KeyboardEvent.h
@@ -43,19 +43,19 @@
         DOM_KEY_LOCATION_NUMPAD     = 0x03
     };
 
-    static RawPtr<KeyboardEvent> create()
+    static KeyboardEvent* create()
     {
         return new KeyboardEvent;
     }
 
-    static RawPtr<KeyboardEvent> create(const PlatformKeyboardEvent& platformEvent, AbstractView* view)
+    static KeyboardEvent* create(const PlatformKeyboardEvent& platformEvent, AbstractView* view)
     {
         return new KeyboardEvent(platformEvent, view);
     }
 
-    static RawPtr<KeyboardEvent> create(ScriptState*, const AtomicString& type, const KeyboardEventInit&);
+    static KeyboardEvent* create(ScriptState*, const AtomicString& type, const KeyboardEventInit&);
 
-    static RawPtr<KeyboardEvent> create(const AtomicString& type, bool canBubble, bool cancelable, AbstractView* view,
+    static KeyboardEvent* create(const AtomicString& type, bool canBubble, bool cancelable, AbstractView* view,
         const String& keyIdentifier, const String& code, const String& key, unsigned location,
         PlatformEvent::Modifiers modifiers, double platformTimeStamp)
     {
diff --git a/third_party/WebKit/Source/core/events/MessageEvent.cpp b/third_party/WebKit/Source/core/events/MessageEvent.cpp
index 43da489..4c984ac 100644
--- a/third_party/WebKit/Source/core/events/MessageEvent.cpp
+++ b/third_party/WebKit/Source/core/events/MessageEvent.cpp
@@ -61,7 +61,7 @@
     ASSERT(isValidSource(m_source.get()));
 }
 
-MessageEvent::MessageEvent(const String& origin, const String& lastEventId, RawPtr<EventTarget> source, MessagePortArray* ports, const String& suborigin)
+MessageEvent::MessageEvent(const String& origin, const String& lastEventId, EventTarget* source, MessagePortArray* ports, const String& suborigin)
     : Event(EventTypeNames::message, false, false)
     , m_dataType(DataTypeScriptValue)
     , m_origin(origin)
@@ -72,7 +72,7 @@
     ASSERT(isValidSource(m_source.get()));
 }
 
-MessageEvent::MessageEvent(PassRefPtr<SerializedScriptValue> data, const String& origin, const String& lastEventId, RawPtr<EventTarget> source, MessagePortArray* ports, const String& suborigin)
+MessageEvent::MessageEvent(PassRefPtr<SerializedScriptValue> data, const String& origin, const String& lastEventId, EventTarget* source, MessagePortArray* ports, const String& suborigin)
     : Event(EventTypeNames::message, false, false)
     , m_dataType(DataTypeSerializedScriptValue)
     , m_dataAsSerializedScriptValue(data)
@@ -86,7 +86,7 @@
     ASSERT(isValidSource(m_source.get()));
 }
 
-MessageEvent::MessageEvent(PassRefPtr<SerializedScriptValue> data, const String& origin, const String& lastEventId, RawPtr<EventTarget> source, PassOwnPtr<MessagePortChannelArray> channels, const String& suborigin)
+MessageEvent::MessageEvent(PassRefPtr<SerializedScriptValue> data, const String& origin, const String& lastEventId, EventTarget* source, PassOwnPtr<MessagePortChannelArray> channels, const String& suborigin)
     : Event(EventTypeNames::message, false, false)
     , m_dataType(DataTypeSerializedScriptValue)
     , m_dataAsSerializedScriptValue(data)
@@ -129,7 +129,7 @@
 {
 }
 
-RawPtr<MessageEvent> MessageEvent::create(const AtomicString& type, const MessageEventInit& initializer, ExceptionState& exceptionState)
+MessageEvent* MessageEvent::create(const AtomicString& type, const MessageEventInit& initializer, ExceptionState& exceptionState)
 {
     if (initializer.source() && !isValidSource(initializer.source())) {
         exceptionState.throwTypeError("The optional 'source' property is neither a Window nor MessagePort.");
diff --git a/third_party/WebKit/Source/core/events/MessageEvent.h b/third_party/WebKit/Source/core/events/MessageEvent.h
index 1f55c943..673dc97 100644
--- a/third_party/WebKit/Source/core/events/MessageEvent.h
+++ b/third_party/WebKit/Source/core/events/MessageEvent.h
@@ -43,35 +43,35 @@
 class CORE_EXPORT MessageEvent final : public Event {
     DEFINE_WRAPPERTYPEINFO();
 public:
-    static RawPtr<MessageEvent> create()
+    static MessageEvent* create()
     {
         return new MessageEvent;
     }
-    static RawPtr<MessageEvent> create(MessagePortArray* ports, const String& origin = String(), const String& lastEventId = String(), RawPtr<EventTarget> source = nullptr, const String& suborigin = String())
+    static MessageEvent* create(MessagePortArray* ports, const String& origin = String(), const String& lastEventId = String(), EventTarget* source = nullptr, const String& suborigin = String())
     {
         return new MessageEvent(origin, lastEventId, source, ports, suborigin);
     }
-    static RawPtr<MessageEvent> create(MessagePortArray* ports, PassRefPtr<SerializedScriptValue> data, const String& origin = String(), const String& lastEventId = String(), RawPtr<EventTarget> source = nullptr, const String& suborigin = String())
+    static MessageEvent* create(MessagePortArray* ports, PassRefPtr<SerializedScriptValue> data, const String& origin = String(), const String& lastEventId = String(), EventTarget* source = nullptr, const String& suborigin = String())
     {
         return new MessageEvent(data, origin, lastEventId, source, ports, suborigin);
     }
-    static RawPtr<MessageEvent> create(PassOwnPtr<MessagePortChannelArray> channels, PassRefPtr<SerializedScriptValue> data, const String& origin = String(), const String& lastEventId = String(), RawPtr<EventTarget> source = nullptr, const String& suborigin = String())
+    static MessageEvent* create(PassOwnPtr<MessagePortChannelArray> channels, PassRefPtr<SerializedScriptValue> data, const String& origin = String(), const String& lastEventId = String(), EventTarget* source = nullptr, const String& suborigin = String())
     {
         return new MessageEvent(data, origin, lastEventId, source, std::move(channels), suborigin);
     }
-    static RawPtr<MessageEvent> create(const String& data, const String& origin = String(), const String& suborigin = String())
+    static MessageEvent* create(const String& data, const String& origin = String(), const String& suborigin = String())
     {
         return new MessageEvent(data, origin, suborigin);
     }
-    static RawPtr<MessageEvent> create(Blob* data, const String& origin = String(), const String& suborigin = String())
+    static MessageEvent* create(Blob* data, const String& origin = String(), const String& suborigin = String())
     {
         return new MessageEvent(data, origin, suborigin);
     }
-    static RawPtr<MessageEvent> create(PassRefPtr<DOMArrayBuffer> data, const String& origin = String(), const String& suborigin = String())
+    static MessageEvent* create(PassRefPtr<DOMArrayBuffer> data, const String& origin = String(), const String& suborigin = String())
     {
         return new MessageEvent(data, origin, suborigin);
     }
-    static RawPtr<MessageEvent> create(const AtomicString& type, const MessageEventInit& initializer, ExceptionState&);
+    static MessageEvent* create(const AtomicString& type, const MessageEventInit& initializer, ExceptionState&);
     ~MessageEvent() override;
 
     void initMessageEvent(const AtomicString& type, bool canBubble, bool cancelable, ScriptValue data, const String& origin, const String& lastEventId, DOMWindow* source, MessagePortArray*);
@@ -116,9 +116,9 @@
 private:
     MessageEvent();
     MessageEvent(const AtomicString&, const MessageEventInit&);
-    MessageEvent(const String& origin, const String& lastEventId, RawPtr<EventTarget> source, MessagePortArray*, const String& suborigin);
-    MessageEvent(PassRefPtr<SerializedScriptValue> data, const String& origin, const String& lastEventId, RawPtr<EventTarget> source, MessagePortArray*, const String& suborigin);
-    MessageEvent(PassRefPtr<SerializedScriptValue> data, const String& origin, const String& lastEventId, RawPtr<EventTarget> source, PassOwnPtr<MessagePortChannelArray>, const String& suborigin);
+    MessageEvent(const String& origin, const String& lastEventId, EventTarget* source, MessagePortArray*, const String& suborigin);
+    MessageEvent(PassRefPtr<SerializedScriptValue> data, const String& origin, const String& lastEventId, EventTarget* source, MessagePortArray*, const String& suborigin);
+    MessageEvent(PassRefPtr<SerializedScriptValue> data, const String& origin, const String& lastEventId, EventTarget* source, PassOwnPtr<MessagePortChannelArray>, const String& suborigin);
 
     MessageEvent(const String& data, const String& origin, const String& suborigin);
     MessageEvent(Blob* data, const String& origin, const String& suborigin);
diff --git a/third_party/WebKit/Source/core/events/MouseEvent.cpp b/third_party/WebKit/Source/core/events/MouseEvent.cpp
index fe08b37..943a33e 100644
--- a/third_party/WebKit/Source/core/events/MouseEvent.cpp
+++ b/third_party/WebKit/Source/core/events/MouseEvent.cpp
@@ -30,14 +30,14 @@
 
 namespace blink {
 
-RawPtr<MouseEvent> MouseEvent::create(ScriptState* scriptState, const AtomicString& type, const MouseEventInit& initializer)
+MouseEvent* MouseEvent::create(ScriptState* scriptState, const AtomicString& type, const MouseEventInit& initializer)
 {
     if (scriptState && scriptState->world().isIsolatedWorld())
         UIEventWithKeyState::didCreateEventInIsolatedWorld(initializer.ctrlKey(), initializer.altKey(), initializer.shiftKey(), initializer.metaKey());
     return new MouseEvent(type, initializer);
 }
 
-RawPtr<MouseEvent> MouseEvent::create(const AtomicString& eventType, RawPtr<AbstractView> view, const PlatformMouseEvent& event, int detail, RawPtr<Node> relatedTarget)
+MouseEvent* MouseEvent::create(const AtomicString& eventType, AbstractView* view, const PlatformMouseEvent& event, int detail, Node* relatedTarget)
 {
     ASSERT(event.type() == PlatformEvent::MouseMoved || event.button() != NoButton);
 
@@ -54,12 +54,12 @@
         relatedTarget, event.timestamp(), event.getSyntheticEventType(), event.region());
 }
 
-RawPtr<MouseEvent> MouseEvent::create(const AtomicString& type, bool canBubble, bool cancelable, RawPtr<AbstractView> view,
+MouseEvent* MouseEvent::create(const AtomicString& type, bool canBubble, bool cancelable, AbstractView* view,
     int detail, int screenX, int screenY, int windowX, int windowY,
     int movementX, int movementY,
     PlatformEvent::Modifiers modifiers,
     short button, unsigned short buttons,
-    RawPtr<EventTarget> relatedTarget,
+    EventTarget* relatedTarget,
     double platformTimeStamp,
     PlatformMouseEvent::SyntheticEventType syntheticEventType,
     const String& region)
@@ -70,10 +70,10 @@
         modifiers, button, buttons, relatedTarget, platformTimeStamp, syntheticEventType, region);
 }
 
-RawPtr<MouseEvent> MouseEvent::create(const AtomicString& eventType, RawPtr<AbstractView> view, RawPtr<Event> underlyingEvent, SimulatedClickCreationScope creationScope)
+MouseEvent* MouseEvent::create(const AtomicString& eventType, AbstractView* view, Event* underlyingEvent, SimulatedClickCreationScope creationScope)
 {
     PlatformEvent::Modifiers modifiers = PlatformEvent::NoModifiers;
-    if (UIEventWithKeyState* keyStateEvent = findEventWithKeyState(underlyingEvent.get())) {
+    if (UIEventWithKeyState* keyStateEvent = findEventWithKeyState(underlyingEvent)) {
         modifiers = keyStateEvent->modifiers();
     }
 
@@ -82,13 +82,13 @@
     int screenY = 0;
     if (underlyingEvent && underlyingEvent->isMouseEvent()) {
         syntheticType = PlatformMouseEvent::RealOrIndistinguishable;
-        MouseEvent* mouseEvent = toMouseEvent(underlyingEvent.get());
+        MouseEvent* mouseEvent = toMouseEvent(underlyingEvent);
         screenX = mouseEvent->screenLocation().x();
         screenY = mouseEvent->screenLocation().y();
     }
 
     double timestamp = underlyingEvent ? underlyingEvent->platformTimeStamp() : monotonicallyIncreasingTime();
-    RawPtr<MouseEvent> createdEvent = MouseEvent::create(eventType, true, true, view,
+    MouseEvent* createdEvent = MouseEvent::create(eventType, true, true, view,
         0, screenX, screenY, 0, 0, 0, 0, modifiers, 0, 0, nullptr,
         timestamp, syntheticType, String());
 
@@ -99,7 +99,7 @@
         createdEvent->initCoordinates(mouseEvent->clientLocation());
     }
 
-    return createdEvent.release();
+    return createdEvent;
 }
 
 MouseEvent::MouseEvent()
@@ -110,16 +110,16 @@
 {
 }
 
-MouseEvent::MouseEvent(const AtomicString& eventType, bool canBubble, bool cancelable, RawPtr<AbstractView> view,
+MouseEvent::MouseEvent(const AtomicString& eventType, bool canBubble, bool cancelable, AbstractView* view,
     int detail, int screenX, int screenY, int windowX, int windowY,
     int movementX, int movementY,
     PlatformEvent::Modifiers modifiers,
     short button, unsigned short buttons,
-    RawPtr<EventTarget> relatedTarget,
+    EventTarget* relatedTarget,
     double platformTimeStamp,
     PlatformMouseEvent::SyntheticEventType syntheticEventType,
     const String& region)
-    : MouseRelatedEvent(eventType, canBubble, cancelable, relatedTarget.get(), view, detail, IntPoint(screenX, screenY),
+    : MouseRelatedEvent(eventType, canBubble, cancelable, relatedTarget, view, detail, IntPoint(screenX, screenY),
         IntPoint(windowX, windowY), IntPoint(movementX, movementY), modifiers,
         platformTimeStamp,
         syntheticEventType == PlatformMouseEvent::Positionless ? PositionType::Positionless : PositionType::Position,
@@ -176,10 +176,10 @@
     return 0;
 }
 
-void MouseEvent::initMouseEvent(ScriptState* scriptState, const AtomicString& type, bool canBubble, bool cancelable, RawPtr<AbstractView> view,
+void MouseEvent::initMouseEvent(ScriptState* scriptState, const AtomicString& type, bool canBubble, bool cancelable, AbstractView* view,
                                 int detail, int screenX, int screenY, int clientX, int clientY,
                                 bool ctrlKey, bool altKey, bool shiftKey, bool metaKey,
-                                short button, RawPtr<EventTarget> relatedTarget, unsigned short buttons)
+                                short button, EventTarget* relatedTarget, unsigned short buttons)
 {
     if (dispatched())
         return;
@@ -191,11 +191,11 @@
     initMouseEventInternal(type, canBubble, cancelable, view, detail, screenX, screenY, clientX, clientY, modifiers(), button, relatedTarget, nullptr, buttons);
 }
 
-void MouseEvent::initMouseEventInternal(const AtomicString& type, bool canBubble, bool cancelable, RawPtr<AbstractView> view,
+void MouseEvent::initMouseEventInternal(const AtomicString& type, bool canBubble, bool cancelable, AbstractView* view,
     int detail, int screenX, int screenY, int clientX, int clientY, PlatformEvent::Modifiers modifiers,
-    short button, RawPtr<EventTarget> relatedTarget, InputDeviceCapabilities* sourceCapabilities, unsigned short buttons)
+    short button, EventTarget* relatedTarget, InputDeviceCapabilities* sourceCapabilities, unsigned short buttons)
 {
-    initUIEventInternal(type, canBubble, cancelable, relatedTarget.get(), view, detail, sourceCapabilities);
+    initUIEventInternal(type, canBubble, cancelable, relatedTarget, view, detail, sourceCapabilities);
 
     m_screenLocation = IntPoint(screenX, screenY);
     m_button = button;
@@ -250,17 +250,17 @@
     MouseRelatedEvent::trace(visitor);
 }
 
-RawPtr<EventDispatchMediator> MouseEvent::createMediator()
+EventDispatchMediator* MouseEvent::createMediator()
 {
     return MouseEventDispatchMediator::create(this);
 }
 
-RawPtr<MouseEventDispatchMediator> MouseEventDispatchMediator::create(RawPtr<MouseEvent> mouseEvent)
+MouseEventDispatchMediator* MouseEventDispatchMediator::create(MouseEvent* mouseEvent)
 {
     return new MouseEventDispatchMediator(mouseEvent);
 }
 
-MouseEventDispatchMediator::MouseEventDispatchMediator(RawPtr<MouseEvent> mouseEvent)
+MouseEventDispatchMediator::MouseEventDispatchMediator(MouseEvent* mouseEvent)
     : EventDispatchMediator(mouseEvent)
 {
 }
@@ -297,7 +297,7 @@
     // Special case: If it's a double click event, we also send the dblclick event. This is not part
     // of the DOM specs, but is used for compatibility with the ondblclick="" attribute. This is treated
     // as a separate event in other DOM-compliant browsers like Firefox, and so we do the same.
-    RawPtr<MouseEvent> doubleClickEvent = MouseEvent::create();
+    MouseEvent* doubleClickEvent = MouseEvent::create();
     doubleClickEvent->initMouseEventInternal(EventTypeNames::dblclick, mouseEvent.bubbles(), mouseEvent.cancelable(), mouseEvent.view(),
         mouseEvent.detail(), mouseEvent.screenX(), mouseEvent.screenY(), mouseEvent.clientX(), mouseEvent.clientY(),
         mouseEvent.modifiers(), mouseEvent.button(), relatedTarget, mouseEvent.sourceCapabilities(), mouseEvent.buttons());
diff --git a/third_party/WebKit/Source/core/events/MouseEvent.h b/third_party/WebKit/Source/core/events/MouseEvent.h
index b25fdcd..2f9041e 100644
--- a/third_party/WebKit/Source/core/events/MouseEvent.h
+++ b/third_party/WebKit/Source/core/events/MouseEvent.h
@@ -37,36 +37,36 @@
 class CORE_EXPORT MouseEvent : public MouseRelatedEvent {
     DEFINE_WRAPPERTYPEINFO();
 public:
-    static RawPtr<MouseEvent> create()
+    static MouseEvent* create()
     {
         return new MouseEvent;
     }
 
     // TODO(mustaq): Should replace most/all of these params with a MouseEventInit.
-    static RawPtr<MouseEvent> create(const AtomicString& type, bool canBubble, bool cancelable, RawPtr<AbstractView>,
+    static MouseEvent* create(const AtomicString& type, bool canBubble, bool cancelable, AbstractView*,
         int detail, int screenX, int screenY, int windowX, int windowY,
         int movementX, int movementY, PlatformEvent::Modifiers,
         short button, unsigned short buttons,
-        RawPtr<EventTarget> relatedTarget,
+        EventTarget* relatedTarget,
         double platformTimeStamp,
         PlatformMouseEvent::SyntheticEventType,
         const String& region);
 
-    static RawPtr<MouseEvent> create(const AtomicString& eventType, RawPtr<AbstractView>, const PlatformMouseEvent&, int detail, RawPtr<Node> relatedTarget);
+    static MouseEvent* create(const AtomicString& eventType, AbstractView*, const PlatformMouseEvent&, int detail, Node* relatedTarget);
 
-    static RawPtr<MouseEvent> create(ScriptState*, const AtomicString& eventType, const MouseEventInit&);
+    static MouseEvent* create(ScriptState*, const AtomicString& eventType, const MouseEventInit&);
 
-    static RawPtr<MouseEvent> create(const AtomicString& eventType, RawPtr<AbstractView>, RawPtr<Event> underlyingEvent, SimulatedClickCreationScope);
+    static MouseEvent* create(const AtomicString& eventType, AbstractView*, Event* underlyingEvent, SimulatedClickCreationScope);
 
     ~MouseEvent() override;
 
     static unsigned short platformModifiersToButtons(unsigned modifiers);
     static unsigned short buttonToButtons(short button);
 
-    void initMouseEvent(ScriptState*, const AtomicString& type, bool canBubble, bool cancelable, RawPtr<AbstractView>,
+    void initMouseEvent(ScriptState*, const AtomicString& type, bool canBubble, bool cancelable, AbstractView*,
         int detail, int screenX, int screenY, int clientX, int clientY,
         bool ctrlKey, bool altKey, bool shiftKey, bool metaKey,
-        short button, RawPtr<EventTarget> relatedTarget, unsigned short buttons = 0);
+        short button, EventTarget* relatedTarget, unsigned short buttons = 0);
 
     // WinIE uses 1,4,2 for left/middle/right but not for click (just for mousedown/up, maybe others),
     // but we will match the standard DOM.
@@ -74,7 +74,7 @@
     unsigned short buttons() const { return m_buttons; }
     bool buttonDown() const { return m_button != -1; }
     EventTarget* relatedTarget() const { return m_relatedTarget.get(); }
-    void setRelatedTarget(RawPtr<EventTarget> relatedTarget) { m_relatedTarget = relatedTarget; }
+    void setRelatedTarget(EventTarget* relatedTarget) { m_relatedTarget = relatedTarget; }
     PlatformMouseEvent::SyntheticEventType getSyntheticEventType() const { return m_syntheticEventType; }
     const String& region() const { return m_region; }
     void setRegion(const String& region) { m_region = region; }
@@ -91,7 +91,7 @@
     bool isMouseEvent() const override;
     int which() const final;
 
-    RawPtr<EventDispatchMediator> createMediator() override;
+    EventDispatchMediator* createMediator() override;
 
     enum class Buttons : unsigned {
         None = 0,
@@ -103,11 +103,11 @@
     DECLARE_VIRTUAL_TRACE();
 
 protected:
-    MouseEvent(const AtomicString& type, bool canBubble, bool cancelable, RawPtr<AbstractView>,
+    MouseEvent(const AtomicString& type, bool canBubble, bool cancelable, AbstractView*,
         int detail, int screenX, int screenY, int windowX, int windowY,
         int movementX, int movementY,
         PlatformEvent::Modifiers, short button, unsigned short buttons,
-        RawPtr<EventTarget> relatedTarget,
+        EventTarget* relatedTarget,
         double platformTimeStamp,
         PlatformMouseEvent::SyntheticEventType,
         const String& region);
@@ -120,10 +120,10 @@
 
 private:
     friend class MouseEventDispatchMediator;
-    void initMouseEventInternal(const AtomicString& type, bool canBubble, bool cancelable, RawPtr<AbstractView>,
+    void initMouseEventInternal(const AtomicString& type, bool canBubble, bool cancelable, AbstractView*,
         int detail, int screenX, int screenY, int clientX, int clientY,
         PlatformEvent::Modifiers,
-        short button, RawPtr<EventTarget> relatedTarget, InputDeviceCapabilities* sourceCapabilities, unsigned short buttons = 0);
+        short button, EventTarget* relatedTarget, InputDeviceCapabilities* sourceCapabilities, unsigned short buttons = 0);
 
     short m_button;
     unsigned short m_buttons;
@@ -134,10 +134,10 @@
 
 class MouseEventDispatchMediator final : public EventDispatchMediator {
 public:
-    static RawPtr<MouseEventDispatchMediator> create(RawPtr<MouseEvent>);
+    static MouseEventDispatchMediator* create(MouseEvent*);
 
 private:
-    explicit MouseEventDispatchMediator(RawPtr<MouseEvent>);
+    explicit MouseEventDispatchMediator(MouseEvent*);
     MouseEvent& event() const;
 
     DispatchEventResult dispatchEvent(EventDispatcher&) const override;
diff --git a/third_party/WebKit/Source/core/events/MouseRelatedEvent.cpp b/third_party/WebKit/Source/core/events/MouseRelatedEvent.cpp
index 8d4f8c22..e9b6c348 100644
--- a/third_party/WebKit/Source/core/events/MouseRelatedEvent.cpp
+++ b/third_party/WebKit/Source/core/events/MouseRelatedEvent.cpp
@@ -52,7 +52,7 @@
 }
 
 MouseRelatedEvent::MouseRelatedEvent(const AtomicString& eventType, bool canBubble, bool cancelable, EventTarget* relatedTarget,
-    RawPtr<AbstractView> abstractView, int detail, const IntPoint& screenLocation,
+    AbstractView* abstractView, int detail, const IntPoint& screenLocation,
     const IntPoint& rootFrameLocation, const IntPoint& movementDelta, PlatformEvent::Modifiers modifiers,
     double platformTimeStamp, PositionType positionType, InputDeviceCapabilities* sourceCapabilities)
     : UIEventWithKeyState(eventType, canBubble, cancelable, relatedTarget, abstractView, detail, modifiers, platformTimeStamp, sourceCapabilities)
diff --git a/third_party/WebKit/Source/core/events/MouseRelatedEvent.h b/third_party/WebKit/Source/core/events/MouseRelatedEvent.h
index e1cf28e1..3c1acc8 100644
--- a/third_party/WebKit/Source/core/events/MouseRelatedEvent.h
+++ b/third_party/WebKit/Source/core/events/MouseRelatedEvent.h
@@ -72,7 +72,7 @@
     // TODO(lanwei): Will make this argument non-optional and all the callers need to provide
     // sourceCapabilities even when it is null, see https://crbug.com/476530.
     MouseRelatedEvent(const AtomicString& type, bool canBubble, bool cancelable, EventTarget* relatedTarget,
-        RawPtr<AbstractView>, int detail, const IntPoint& screenLocation,
+        AbstractView*, int detail, const IntPoint& screenLocation,
         const IntPoint& rootFrameLocation, const IntPoint& movementDelta, PlatformEvent::Modifiers,
         double platformTimeStamp, PositionType, InputDeviceCapabilities* sourceCapabilities = nullptr);
 
diff --git a/third_party/WebKit/Source/core/events/MutationEvent.cpp b/third_party/WebKit/Source/core/events/MutationEvent.cpp
index dab65d4..1a9b917 100644
--- a/third_party/WebKit/Source/core/events/MutationEvent.cpp
+++ b/third_party/WebKit/Source/core/events/MutationEvent.cpp
@@ -29,7 +29,7 @@
 {
 }
 
-MutationEvent::MutationEvent(const AtomicString& type, bool canBubble, bool cancelable, RawPtr<Node> relatedNode,
+MutationEvent::MutationEvent(const AtomicString& type, bool canBubble, bool cancelable, Node* relatedNode,
                              const String& prevValue, const String& newValue,
                              const String& attrName, unsigned short attrChange)
     : Event(type, canBubble, cancelable)
@@ -45,7 +45,7 @@
 {
 }
 
-void MutationEvent::initMutationEvent(const AtomicString& type, bool canBubble, bool cancelable, RawPtr<Node> relatedNode,
+void MutationEvent::initMutationEvent(const AtomicString& type, bool canBubble, bool cancelable, Node* relatedNode,
                                       const String& prevValue, const String& newValue,
                                       const String& attrName, unsigned short attrChange)
 {
diff --git a/third_party/WebKit/Source/core/events/MutationEvent.h b/third_party/WebKit/Source/core/events/MutationEvent.h
index dad446e..c117311 100644
--- a/third_party/WebKit/Source/core/events/MutationEvent.h
+++ b/third_party/WebKit/Source/core/events/MutationEvent.h
@@ -40,19 +40,19 @@
         REMOVAL         = 3  // NOLINT
     };
 
-    static RawPtr<MutationEvent> create()
+    static MutationEvent* create()
     {
         return new MutationEvent;
     }
 
-    static RawPtr<MutationEvent> create(
-        const AtomicString& type, bool canBubble, RawPtr<Node> relatedNode = nullptr,
+    static MutationEvent* create(
+        const AtomicString& type, bool canBubble, Node* relatedNode = nullptr,
         const String& prevValue = String(), const String& newValue = String(), const String& attrName = String(), unsigned short attrChange = 0)
     {
         return new MutationEvent(type, canBubble, false, relatedNode, prevValue, newValue, attrName, attrChange);
     }
 
-    void initMutationEvent(const AtomicString& type, bool canBubble, bool cancelable, RawPtr<Node> relatedNode, const String& prevValue, const String& newValue, const String& attrName, unsigned short attrChange);
+    void initMutationEvent(const AtomicString& type, bool canBubble, bool cancelable, Node* relatedNode, const String& prevValue, const String& newValue, const String& attrName, unsigned short attrChange);
 
     Node* relatedNode() const { return m_relatedNode.get(); }
     String prevValue() const { return m_prevValue; }
@@ -66,7 +66,7 @@
 
 private:
     MutationEvent();
-    MutationEvent(const AtomicString& type, bool canBubble, bool cancelable, RawPtr<Node> relatedNode, const String& prevValue, const String& newValue, const String& attrName, unsigned short attrChange);
+    MutationEvent(const AtomicString& type, bool canBubble, bool cancelable, Node* relatedNode, const String& prevValue, const String& newValue, const String& attrName, unsigned short attrChange);
 
     Member<Node> m_relatedNode;
     String m_prevValue;
diff --git a/third_party/WebKit/Source/core/events/NodeEventContext.cpp b/third_party/WebKit/Source/core/events/NodeEventContext.cpp
index f142958..318569f 100644
--- a/third_party/WebKit/Source/core/events/NodeEventContext.cpp
+++ b/third_party/WebKit/Source/core/events/NodeEventContext.cpp
@@ -34,7 +34,7 @@
 
 namespace blink {
 
-NodeEventContext::NodeEventContext(RawPtr<Node> node, RawPtr<EventTarget> currentTarget)
+NodeEventContext::NodeEventContext(Node* node, EventTarget* currentTarget)
     : m_node(node)
     , m_currentTarget(currentTarget)
 {
diff --git a/third_party/WebKit/Source/core/events/NodeEventContext.h b/third_party/WebKit/Source/core/events/NodeEventContext.h
index 29bdf640..41794aa 100644
--- a/third_party/WebKit/Source/core/events/NodeEventContext.h
+++ b/third_party/WebKit/Source/core/events/NodeEventContext.h
@@ -42,12 +42,12 @@
     DISALLOW_NEW_EXCEPT_PLACEMENT_NEW();
 public:
     // FIXME: Use ContainerNode instead of Node.
-    NodeEventContext(RawPtr<Node>, RawPtr<EventTarget> currentTarget);
+    NodeEventContext(Node*, EventTarget* currentTarget);
     DECLARE_TRACE();
 
     Node* node() const { return m_node.get(); }
 
-    void setTreeScopeEventContext(RawPtr<TreeScopeEventContext> prpTreeScopeEventContext) { m_treeScopeEventContext = prpTreeScopeEventContext; }
+    void setTreeScopeEventContext(TreeScopeEventContext* treeScopeEventContext) { m_treeScopeEventContext = treeScopeEventContext; }
     TreeScopeEventContext& treeScopeEventContext() { ASSERT(m_treeScopeEventContext); return *m_treeScopeEventContext; }
 
     EventTarget* target() const { return m_treeScopeEventContext->target(); }
diff --git a/third_party/WebKit/Source/core/events/PageTransitionEvent.h b/third_party/WebKit/Source/core/events/PageTransitionEvent.h
index cb18a53..2e9cd82 100644
--- a/third_party/WebKit/Source/core/events/PageTransitionEvent.h
+++ b/third_party/WebKit/Source/core/events/PageTransitionEvent.h
@@ -34,15 +34,15 @@
 class PageTransitionEvent final : public Event {
     DEFINE_WRAPPERTYPEINFO();
 public:
-    static RawPtr<PageTransitionEvent> create()
+    static PageTransitionEvent* create()
     {
         return new PageTransitionEvent;
     }
-    static RawPtr<PageTransitionEvent> create(const AtomicString& type, bool persisted)
+    static PageTransitionEvent* create(const AtomicString& type, bool persisted)
     {
         return new PageTransitionEvent(type, persisted);
     }
-    static RawPtr<PageTransitionEvent> create(const AtomicString& type, const PageTransitionEventInit& initializer)
+    static PageTransitionEvent* create(const AtomicString& type, const PageTransitionEventInit& initializer)
     {
         return new PageTransitionEvent(type, initializer);
     }
diff --git a/third_party/WebKit/Source/core/events/PointerEvent.cpp b/third_party/WebKit/Source/core/events/PointerEvent.cpp
index c13aaee..a922c699 100644
--- a/third_party/WebKit/Source/core/events/PointerEvent.cpp
+++ b/third_party/WebKit/Source/core/events/PointerEvent.cpp
@@ -58,7 +58,7 @@
     return true;
 }
 
-RawPtr<EventDispatchMediator> PointerEvent::createMediator()
+EventDispatchMediator* PointerEvent::createMediator()
 {
     return PointerEventDispatchMediator::create(this);
 }
@@ -68,12 +68,12 @@
     MouseEvent::trace(visitor);
 }
 
-RawPtr<PointerEventDispatchMediator> PointerEventDispatchMediator::create(RawPtr<PointerEvent> pointerEvent)
+PointerEventDispatchMediator* PointerEventDispatchMediator::create(PointerEvent* pointerEvent)
 {
     return new PointerEventDispatchMediator(pointerEvent);
 }
 
-PointerEventDispatchMediator::PointerEventDispatchMediator(RawPtr<PointerEvent> pointerEvent)
+PointerEventDispatchMediator::PointerEventDispatchMediator(PointerEvent* pointerEvent)
     : EventDispatchMediator(pointerEvent)
 {
 }
diff --git a/third_party/WebKit/Source/core/events/PointerEvent.h b/third_party/WebKit/Source/core/events/PointerEvent.h
index a73900e..2ca02ba6 100644
--- a/third_party/WebKit/Source/core/events/PointerEvent.h
+++ b/third_party/WebKit/Source/core/events/PointerEvent.h
@@ -15,12 +15,12 @@
     DEFINE_WRAPPERTYPEINFO();
 
 public:
-    static RawPtr<PointerEvent> create()
+    static PointerEvent* create()
     {
         return new PointerEvent;
     }
 
-    static RawPtr<PointerEvent> create(const AtomicString& type, const PointerEventInit& initializer)
+    static PointerEvent* create(const AtomicString& type, const PointerEventInit& initializer)
     {
         return new PointerEvent(type, initializer);
     }
@@ -38,7 +38,7 @@
     bool isMouseEvent() const override;
     bool isPointerEvent() const override;
 
-    RawPtr<EventDispatchMediator> createMediator() override;
+    EventDispatchMediator* createMediator() override;
 
     DECLARE_VIRTUAL_TRACE();
 
@@ -59,10 +59,10 @@
 
 class PointerEventDispatchMediator final : public EventDispatchMediator {
 public:
-    static RawPtr<PointerEventDispatchMediator> create(RawPtr<PointerEvent>);
+    static PointerEventDispatchMediator* create(PointerEvent*);
 
 private:
-    explicit PointerEventDispatchMediator(RawPtr<PointerEvent>);
+    explicit PointerEventDispatchMediator(PointerEvent*);
     PointerEvent& event() const;
     DispatchEventResult dispatchEvent(EventDispatcher&) const override;
 };
diff --git a/third_party/WebKit/Source/core/events/PointerEventFactory.cpp b/third_party/WebKit/Source/core/events/PointerEventFactory.cpp
index b9da846..51eb9c0f 100644
--- a/third_party/WebKit/Source/core/events/PointerEventFactory.cpp
+++ b/third_party/WebKit/Source/core/events/PointerEventFactory.cpp
@@ -75,10 +75,10 @@
     pointerEventInit.setIsPrimary(isPrimary(pointerId));
 }
 
-RawPtr<PointerEvent> PointerEventFactory::create(
+PointerEvent* PointerEventFactory::create(
     const AtomicString& mouseEventName, const PlatformMouseEvent& mouseEvent,
-    RawPtr<EventTarget> relatedTarget,
-    RawPtr<AbstractView> view)
+    EventTarget* relatedTarget,
+    AbstractView* view)
 {
     AtomicString pointerEventName = pointerEventNameForMouseEventName(mouseEventName);
     unsigned buttons = MouseEvent::platformModifiersToButtons(mouseEvent.getModifiers());
@@ -125,7 +125,7 @@
     return PointerEvent::create(pointerEventName, pointerEventInit);
 }
 
-RawPtr<PointerEvent> PointerEventFactory::create(const AtomicString& type,
+PointerEvent* PointerEventFactory::create(const AtomicString& type,
     const PlatformTouchPoint& touchPoint, PlatformEvent::Modifiers modifiers,
     const double width, const double height,
     const double clientX, const double clientY)
@@ -167,7 +167,7 @@
 }
 
 
-RawPtr<PointerEvent> PointerEventFactory::createPointerCancelEvent(const PlatformTouchPoint& touchPoint)
+PointerEvent* PointerEventFactory::createPointerCancelEvent(const PlatformTouchPoint& touchPoint)
 {
     PointerEventInit pointerEventInit;
 
@@ -179,8 +179,8 @@
     return PointerEvent::create(EventTypeNames::pointercancel, pointerEventInit);
 }
 
-RawPtr<PointerEvent> PointerEventFactory::createPointerCaptureEvent(
-    RawPtr<PointerEvent> pointerEvent,
+PointerEvent* PointerEventFactory::createPointerCaptureEvent(
+    PointerEvent* pointerEvent,
     const AtomicString& type)
 {
     ASSERT(type == EventTypeNames::gotpointercapture
@@ -196,10 +196,10 @@
     return PointerEvent::create(type, pointerEventInit);
 }
 
-RawPtr<PointerEvent> PointerEventFactory::createPointerTransitionEvent(
-    RawPtr<PointerEvent> pointerEvent,
+PointerEvent* PointerEventFactory::createPointerTransitionEvent(
+    PointerEvent* pointerEvent,
     const AtomicString& type,
-    RawPtr<EventTarget> relatedTarget)
+    EventTarget* relatedTarget)
 {
     ASSERT(type == EventTypeNames::pointerout
         || type == EventTypeNames::pointerleave
@@ -290,7 +290,7 @@
 }
 
 bool PointerEventFactory::remove(
-    const RawPtr<PointerEvent> pointerEvent)
+    const PointerEvent* pointerEvent)
 {
     int mappedId = pointerEvent->pointerId();
     // Do not remove mouse pointer id as it should always be there
diff --git a/third_party/WebKit/Source/core/events/PointerEventFactory.h b/third_party/WebKit/Source/core/events/PointerEventFactory.h
index accfd063..e0025ff1 100644
--- a/third_party/WebKit/Source/core/events/PointerEventFactory.h
+++ b/third_party/WebKit/Source/core/events/PointerEventFactory.h
@@ -29,29 +29,29 @@
     PointerEventFactory();
     ~PointerEventFactory();
 
-    RawPtr<PointerEvent> create(
+    PointerEvent* create(
         const AtomicString& mouseEventName, const PlatformMouseEvent&,
-        RawPtr<EventTarget> relatedTarget,
-        RawPtr<AbstractView>);
+        EventTarget* relatedTarget,
+        AbstractView*);
 
-    RawPtr<PointerEvent> create(const AtomicString& type,
+    PointerEvent* create(const AtomicString& type,
         const PlatformTouchPoint&, PlatformEvent::Modifiers,
         const double width, const double height,
         const double clientX, const double clientY);
 
-    RawPtr<PointerEvent> createPointerCancelEvent(
+    PointerEvent* createPointerCancelEvent(
         const PlatformTouchPoint&);
 
     // For creating capture events (i.e got/lostpointercapture)
-    RawPtr<PointerEvent> createPointerCaptureEvent(
-        RawPtr<PointerEvent>,
+    PointerEvent* createPointerCaptureEvent(
+        PointerEvent*,
         const AtomicString&);
 
     // For creating transition events (i.e pointerout/leave/over/enter)
-    RawPtr<PointerEvent> createPointerTransitionEvent(
-        RawPtr<PointerEvent>,
+    PointerEvent* createPointerTransitionEvent(
+        PointerEvent*,
         const AtomicString&,
-        RawPtr<EventTarget>);
+        EventTarget*);
 
     // Clear all the existing ids.
     void clear();
@@ -60,7 +60,7 @@
     // particular id is removed that id is considered free even though there
     // might have been other PointerEvents that were generated with the same id
     // before.
-    bool remove(const RawPtr<PointerEvent>);
+    bool remove(const PointerEvent*);
 
     // Returns whether a pointer id exists and active
     bool isActive(const int);
diff --git a/third_party/WebKit/Source/core/events/PointerEventFactoryTest.cpp b/third_party/WebKit/Source/core/events/PointerEventFactoryTest.cpp
index 48339d7..286b5d83 100644
--- a/third_party/WebKit/Source/core/events/PointerEventFactoryTest.cpp
+++ b/third_party/WebKit/Source/core/events/PointerEventFactoryTest.cpp
@@ -15,20 +15,20 @@
 class PointerEventFactoryTest : public ::testing::Test {
 protected:
     void SetUp() override;
-    RawPtr<PointerEvent> createAndCheckTouchCancel(
+    PointerEvent* createAndCheckTouchCancel(
         WebPointerProperties::PointerType, int rawId,
         int uniqueId, bool isPrimary,
         PlatformTouchPoint::TouchState = PlatformTouchPoint::TouchReleased);
-    RawPtr<PointerEvent> createAndCheckTouchEvent(
+    PointerEvent* createAndCheckTouchEvent(
         WebPointerProperties::PointerType, int rawId,
         int uniqueId, bool isPrimary,
         PlatformTouchPoint::TouchState = PlatformTouchPoint::TouchPressed);
-    RawPtr<PointerEvent> createAndCheckMouseEvent(
+    PointerEvent* createAndCheckMouseEvent(
         WebPointerProperties::PointerType, int rawId,
         int uniqueId, bool isPrimary,
         PlatformEvent::Modifiers = PlatformEvent::NoModifiers);
     void createAndCheckPointerTransitionEvent(
-        RawPtr<PointerEvent>,
+        PointerEvent*,
         const AtomicString&);
 
     PointerEventFactory m_pointerEventFactory;
@@ -73,12 +73,12 @@
     m_modifiers = modifiers;
 }
 
-RawPtr<PointerEvent> PointerEventFactoryTest::createAndCheckTouchCancel(
+PointerEvent* PointerEventFactoryTest::createAndCheckTouchCancel(
     WebPointerProperties::PointerType pointerType, int rawId,
     int uniqueId, bool isPrimary,
     PlatformTouchPoint::TouchState state)
 {
-    RawPtr<PointerEvent> pointerEvent = m_pointerEventFactory.createPointerCancelEvent(
+    PointerEvent* pointerEvent = m_pointerEventFactory.createPointerCancelEvent(
         PointerEventFactoryTest::PlatformTouchPointBuilder(pointerType, rawId, state));
     EXPECT_EQ(uniqueId, pointerEvent->pointerId());
     EXPECT_EQ(isPrimary, pointerEvent->isPrimary());
@@ -86,11 +86,10 @@
 }
 
 void PointerEventFactoryTest::createAndCheckPointerTransitionEvent(
-    RawPtr<PointerEvent> prpPointerEvent,
+    PointerEvent* pointerEvent,
     const AtomicString& type)
 {
-    RawPtr<PointerEvent> pointerEvent = prpPointerEvent;
-    RawPtr<PointerEvent> clonePointerEvent = m_pointerEventFactory.
+    PointerEvent* clonePointerEvent = m_pointerEventFactory.
         createPointerTransitionEvent(pointerEvent, type, nullptr);
     EXPECT_EQ(clonePointerEvent->pointerType(), pointerEvent->pointerType());
     EXPECT_EQ(clonePointerEvent->pointerId(), pointerEvent->pointerId());
@@ -98,24 +97,24 @@
     EXPECT_EQ(clonePointerEvent->type(), type);
 }
 
-RawPtr<PointerEvent> PointerEventFactoryTest::createAndCheckTouchEvent(
+PointerEvent* PointerEventFactoryTest::createAndCheckTouchEvent(
     WebPointerProperties::PointerType pointerType,
     int rawId, int uniqueId, bool isPrimary,
     PlatformTouchPoint::TouchState state)
 {
-    RawPtr<PointerEvent> pointerEvent = m_pointerEventFactory.create(
+    PointerEvent* pointerEvent = m_pointerEventFactory.create(
         EventTypeNames::pointerdown, PointerEventFactoryTest::PlatformTouchPointBuilder(pointerType, rawId, state), PlatformEvent::NoModifiers, 0, 0, 0, 0);
     EXPECT_EQ(uniqueId, pointerEvent->pointerId());
     EXPECT_EQ(isPrimary, pointerEvent->isPrimary());
     return pointerEvent;
 }
 
-RawPtr<PointerEvent> PointerEventFactoryTest::createAndCheckMouseEvent(
+PointerEvent* PointerEventFactoryTest::createAndCheckMouseEvent(
     WebPointerProperties::PointerType pointerType,
     int rawId, int uniqueId, bool isPrimary,
     PlatformEvent::Modifiers modifiers)
 {
-    RawPtr<PointerEvent> pointerEvent = m_pointerEventFactory.create(
+    PointerEvent* pointerEvent = m_pointerEventFactory.create(
         EventTypeNames::mouseenter, PlatformMouseEventBuilder(pointerType, rawId, modifiers), nullptr, nullptr);
     EXPECT_EQ(uniqueId, pointerEvent->pointerId());
     EXPECT_EQ(isPrimary, pointerEvent->isPrimary());
@@ -127,8 +126,8 @@
     EXPECT_TRUE(m_pointerEventFactory.isActive(m_expectedMouseId));
     EXPECT_FALSE(m_pointerEventFactory.isActiveButtonsState(m_expectedMouseId));
 
-    RawPtr<PointerEvent> pointerEvent1 = createAndCheckMouseEvent(WebPointerProperties::PointerType::Mouse, 0, m_expectedMouseId, true);
-    RawPtr<PointerEvent> pointerEvent2 = createAndCheckMouseEvent(WebPointerProperties::PointerType::Mouse, 0, m_expectedMouseId, true, PlatformEvent::LeftButtonDown);
+    PointerEvent* pointerEvent1 = createAndCheckMouseEvent(WebPointerProperties::PointerType::Mouse, 0, m_expectedMouseId, true);
+    PointerEvent* pointerEvent2 = createAndCheckMouseEvent(WebPointerProperties::PointerType::Mouse, 0, m_expectedMouseId, true, PlatformEvent::LeftButtonDown);
 
     createAndCheckPointerTransitionEvent(pointerEvent1, EventTypeNames::pointerout);
 
@@ -155,7 +154,7 @@
 
 TEST_F(PointerEventFactoryTest, TouchPointerPrimaryRemovedWhileAnotherIsThere)
 {
-    RawPtr<PointerEvent> pointerEvent1 = createAndCheckTouchEvent(WebPointerProperties::PointerType::Touch, 0, m_mappedIdStart, true);
+    PointerEvent* pointerEvent1 = createAndCheckTouchEvent(WebPointerProperties::PointerType::Touch, 0, m_mappedIdStart, true);
     createAndCheckTouchEvent(WebPointerProperties::PointerType::Touch, 1, m_mappedIdStart+1, false);
 
     m_pointerEventFactory.remove(pointerEvent1);
@@ -171,8 +170,8 @@
     EXPECT_FALSE(m_pointerEventFactory.isActiveButtonsState(m_mappedIdStart));
     EXPECT_FALSE(m_pointerEventFactory.isActiveButtonsState(m_mappedIdStart+1));
 
-    RawPtr<PointerEvent> pointerEvent1 = createAndCheckTouchEvent(WebPointerProperties::PointerType::Touch, 0, m_mappedIdStart, true);
-    RawPtr<PointerEvent> pointerEvent2 = createAndCheckTouchEvent(WebPointerProperties::PointerType::Touch, 1, m_mappedIdStart+1, false);
+    PointerEvent* pointerEvent1 = createAndCheckTouchEvent(WebPointerProperties::PointerType::Touch, 0, m_mappedIdStart, true);
+    PointerEvent* pointerEvent2 = createAndCheckTouchEvent(WebPointerProperties::PointerType::Touch, 1, m_mappedIdStart+1, false);
 
     createAndCheckPointerTransitionEvent(pointerEvent1, EventTypeNames::pointerleave);
     createAndCheckPointerTransitionEvent(pointerEvent2, EventTypeNames::pointerenter);
@@ -203,8 +202,8 @@
     EXPECT_FALSE(m_pointerEventFactory.isActive(m_mappedIdStart));
     EXPECT_FALSE(m_pointerEventFactory.isActiveButtonsState(m_mappedIdStart));
 
-    RawPtr<PointerEvent> pointerEvent1 = createAndCheckTouchEvent(WebPointerProperties::PointerType::Touch, 0, m_mappedIdStart, true);
-    RawPtr<PointerEvent> pointerEvent2 = createAndCheckTouchEvent(WebPointerProperties::PointerType::Touch, 0, m_mappedIdStart, true);
+    PointerEvent* pointerEvent1 = createAndCheckTouchEvent(WebPointerProperties::PointerType::Touch, 0, m_mappedIdStart, true);
+    PointerEvent* pointerEvent2 = createAndCheckTouchEvent(WebPointerProperties::PointerType::Touch, 0, m_mappedIdStart, true);
 
     EXPECT_TRUE(m_pointerEventFactory.isActive(m_mappedIdStart));
     EXPECT_TRUE(m_pointerEventFactory.isActiveButtonsState(m_mappedIdStart));
@@ -248,11 +247,11 @@
 TEST_F(PointerEventFactoryTest, MouseAndTouchAndPen)
 {
     createAndCheckMouseEvent(WebPointerProperties::PointerType::Mouse, 0, m_expectedMouseId, true);
-    RawPtr<PointerEvent> pointerEvent1 = createAndCheckTouchEvent(WebPointerProperties::PointerType::Touch, 0, m_mappedIdStart, true);
+    PointerEvent* pointerEvent1 = createAndCheckTouchEvent(WebPointerProperties::PointerType::Touch, 0, m_mappedIdStart, true);
     createAndCheckTouchEvent(WebPointerProperties::PointerType::Pen, 0, m_mappedIdStart+1, true);
 
-    RawPtr<PointerEvent> pointerEvent2 = createAndCheckTouchEvent(WebPointerProperties::PointerType::Touch, 1, m_mappedIdStart+2, false);
-    RawPtr<PointerEvent> pointerEvent3 = createAndCheckTouchEvent(WebPointerProperties::PointerType::Touch, 2, m_mappedIdStart+3, false);
+    PointerEvent* pointerEvent2 = createAndCheckTouchEvent(WebPointerProperties::PointerType::Touch, 1, m_mappedIdStart+2, false);
+    PointerEvent* pointerEvent3 = createAndCheckTouchEvent(WebPointerProperties::PointerType::Touch, 2, m_mappedIdStart+3, false);
     createAndCheckTouchEvent(WebPointerProperties::PointerType::Pen, 0, m_mappedIdStart+1, true);
     createAndCheckTouchEvent(WebPointerProperties::PointerType::Pen, 47213, m_mappedIdStart+4, false);
 
@@ -271,7 +270,7 @@
 
 TEST_F(PointerEventFactoryTest, PenAsTouchAndMouseEvent)
 {
-    RawPtr<PointerEvent> pointerEvent1 = createAndCheckMouseEvent(WebPointerProperties::PointerType::Pen, 0, m_mappedIdStart, true);
+    PointerEvent* pointerEvent1 = createAndCheckMouseEvent(WebPointerProperties::PointerType::Pen, 0, m_mappedIdStart, true);
     createAndCheckMouseEvent(WebPointerProperties::PointerType::Pen, 1, m_mappedIdStart+1, false);
     createAndCheckMouseEvent(WebPointerProperties::PointerType::Pen, 2, m_mappedIdStart+2, false);
     createAndCheckMouseEvent(WebPointerProperties::PointerType::Pen, 0, m_mappedIdStart, true);
@@ -298,7 +297,7 @@
 
 TEST_F(PointerEventFactoryTest, OutOfRange)
 {
-    RawPtr<PointerEvent> pointerEvent1 = createAndCheckMouseEvent(WebPointerProperties::PointerType::Unknown, 0, m_mappedIdStart, true);
+    PointerEvent* pointerEvent1 = createAndCheckMouseEvent(WebPointerProperties::PointerType::Unknown, 0, m_mappedIdStart, true);
     createAndCheckMouseEvent(WebPointerProperties::PointerType::Unknown, 1, m_mappedIdStart+1, false);
     createAndCheckMouseEvent(WebPointerProperties::PointerType::Unknown, 2, m_mappedIdStart+2, false);
     createAndCheckTouchEvent(WebPointerProperties::PointerType::Unknown, 0, m_mappedIdStart, true);
diff --git a/third_party/WebKit/Source/core/events/PopStateEvent.cpp b/third_party/WebKit/Source/core/events/PopStateEvent.cpp
index c088d1ff..f5e955f 100644
--- a/third_party/WebKit/Source/core/events/PopStateEvent.cpp
+++ b/third_party/WebKit/Source/core/events/PopStateEvent.cpp
@@ -57,17 +57,17 @@
 {
 }
 
-RawPtr<PopStateEvent> PopStateEvent::create()
+PopStateEvent* PopStateEvent::create()
 {
     return new PopStateEvent;
 }
 
-RawPtr<PopStateEvent> PopStateEvent::create(PassRefPtr<SerializedScriptValue> serializedState, History* history)
+PopStateEvent* PopStateEvent::create(PassRefPtr<SerializedScriptValue> serializedState, History* history)
 {
     return new PopStateEvent(serializedState, history);
 }
 
-RawPtr<PopStateEvent> PopStateEvent::create(const AtomicString& type, const PopStateEventInit& initializer)
+PopStateEvent* PopStateEvent::create(const AtomicString& type, const PopStateEventInit& initializer)
 {
     return new PopStateEvent(type, initializer);
 }
diff --git a/third_party/WebKit/Source/core/events/PopStateEvent.h b/third_party/WebKit/Source/core/events/PopStateEvent.h
index 6049251..1a2e100 100644
--- a/third_party/WebKit/Source/core/events/PopStateEvent.h
+++ b/third_party/WebKit/Source/core/events/PopStateEvent.h
@@ -40,9 +40,9 @@
     DEFINE_WRAPPERTYPEINFO();
 public:
     ~PopStateEvent() override;
-    static RawPtr<PopStateEvent> create();
-    static RawPtr<PopStateEvent> create(PassRefPtr<SerializedScriptValue>, History*);
-    static RawPtr<PopStateEvent> create(const AtomicString&, const PopStateEventInit&);
+    static PopStateEvent* create();
+    static PopStateEvent* create(PassRefPtr<SerializedScriptValue>, History*);
+    static PopStateEvent* create(const AtomicString&, const PopStateEventInit&);
 
     ScriptValue state() const { return m_state; }
     SerializedScriptValue* serializedState() const { return m_serializedState.get(); }
diff --git a/third_party/WebKit/Source/core/events/ProgressEvent.h b/third_party/WebKit/Source/core/events/ProgressEvent.h
index 6342d08e..ddb53c3e 100644
--- a/third_party/WebKit/Source/core/events/ProgressEvent.h
+++ b/third_party/WebKit/Source/core/events/ProgressEvent.h
@@ -35,15 +35,15 @@
 class CORE_EXPORT ProgressEvent : public Event {
     DEFINE_WRAPPERTYPEINFO();
 public:
-    static RawPtr<ProgressEvent> create()
+    static ProgressEvent* create()
     {
         return new ProgressEvent;
     }
-    static RawPtr<ProgressEvent> create(const AtomicString& type, bool lengthComputable, unsigned long long loaded, unsigned long long total)
+    static ProgressEvent* create(const AtomicString& type, bool lengthComputable, unsigned long long loaded, unsigned long long total)
     {
         return new ProgressEvent(type, lengthComputable, loaded, total);
     }
-    static RawPtr<ProgressEvent> create(const AtomicString& type, const ProgressEventInit& initializer)
+    static ProgressEvent* create(const AtomicString& type, const ProgressEventInit& initializer)
     {
         return new ProgressEvent(type, initializer);
     }
diff --git a/third_party/WebKit/Source/core/events/PromiseRejectionEvent.h b/third_party/WebKit/Source/core/events/PromiseRejectionEvent.h
index 418a26b..9ef117f 100644
--- a/third_party/WebKit/Source/core/events/PromiseRejectionEvent.h
+++ b/third_party/WebKit/Source/core/events/PromiseRejectionEvent.h
@@ -19,11 +19,11 @@
 class CORE_EXPORT PromiseRejectionEvent final : public Event {
     DEFINE_WRAPPERTYPEINFO();
 public:
-    static RawPtr<PromiseRejectionEvent> create()
+    static PromiseRejectionEvent* create()
     {
         return new PromiseRejectionEvent;
     }
-    static RawPtr<PromiseRejectionEvent> create(ScriptState* state, const AtomicString& type, const PromiseRejectionEventInit& initializer)
+    static PromiseRejectionEvent* create(ScriptState* state, const AtomicString& type, const PromiseRejectionEventInit& initializer)
     {
         return new PromiseRejectionEvent(state, type, initializer);
     }
diff --git a/third_party/WebKit/Source/core/events/RegisteredEventListener.h b/third_party/WebKit/Source/core/events/RegisteredEventListener.h
index 048779cf..03b3f90 100644
--- a/third_party/WebKit/Source/core/events/RegisteredEventListener.h
+++ b/third_party/WebKit/Source/core/events/RegisteredEventListener.h
@@ -32,7 +32,7 @@
 class RegisteredEventListener {
     DISALLOW_NEW_EXCEPT_PLACEMENT_NEW();
 public:
-    RegisteredEventListener(RawPtr<EventListener> listener, const EventListenerOptions& options)
+    RegisteredEventListener(EventListener* listener, const EventListenerOptions& options)
         : listener(listener)
         , useCapture(options.capture())
         , passive(options.passive())
diff --git a/third_party/WebKit/Source/core/events/RelatedEvent.cpp b/third_party/WebKit/Source/core/events/RelatedEvent.cpp
index 2f27c7a..1285141b 100644
--- a/third_party/WebKit/Source/core/events/RelatedEvent.cpp
+++ b/third_party/WebKit/Source/core/events/RelatedEvent.cpp
@@ -10,17 +10,17 @@
 {
 }
 
-RawPtr<RelatedEvent> RelatedEvent::create()
+RelatedEvent* RelatedEvent::create()
 {
     return new RelatedEvent;
 }
 
-RawPtr<RelatedEvent> RelatedEvent::create(const AtomicString& type, bool canBubble, bool cancelable, EventTarget* relatedTarget)
+RelatedEvent* RelatedEvent::create(const AtomicString& type, bool canBubble, bool cancelable, EventTarget* relatedTarget)
 {
     return new RelatedEvent(type, canBubble, cancelable, relatedTarget);
 }
 
-RawPtr<RelatedEvent> RelatedEvent::create(const AtomicString& type, const RelatedEventInit& initializer)
+RelatedEvent* RelatedEvent::create(const AtomicString& type, const RelatedEventInit& initializer)
 {
     return new RelatedEvent(type, initializer);
 }
diff --git a/third_party/WebKit/Source/core/events/RelatedEvent.h b/third_party/WebKit/Source/core/events/RelatedEvent.h
index eed825c..f590a52 100644
--- a/third_party/WebKit/Source/core/events/RelatedEvent.h
+++ b/third_party/WebKit/Source/core/events/RelatedEvent.h
@@ -13,9 +13,9 @@
 class RelatedEvent final : public Event {
     DEFINE_WRAPPERTYPEINFO();
 public:
-    static RawPtr<RelatedEvent> create();
-    static RawPtr<RelatedEvent> create(const AtomicString& type, bool canBubble, bool cancelable, EventTarget* relatedTarget);
-    static RawPtr<RelatedEvent> create(const AtomicString& eventType, const RelatedEventInit&);
+    static RelatedEvent* create();
+    static RelatedEvent* create(const AtomicString& type, bool canBubble, bool cancelable, EventTarget* relatedTarget);
+    static RelatedEvent* create(const AtomicString& eventType, const RelatedEventInit&);
 
     ~RelatedEvent() override;
 
diff --git a/third_party/WebKit/Source/core/events/ResourceProgressEvent.h b/third_party/WebKit/Source/core/events/ResourceProgressEvent.h
index 22d4256..b6b41ce 100644
--- a/third_party/WebKit/Source/core/events/ResourceProgressEvent.h
+++ b/third_party/WebKit/Source/core/events/ResourceProgressEvent.h
@@ -46,11 +46,11 @@
 class CORE_EXPORT ResourceProgressEvent final : public ProgressEvent {
     DEFINE_WRAPPERTYPEINFO();
 public:
-    static RawPtr<ResourceProgressEvent> create()
+    static ResourceProgressEvent* create()
     {
         return new ResourceProgressEvent;
     }
-    static RawPtr<ResourceProgressEvent> create(const AtomicString& type, bool lengthComputable, unsigned long long loaded, unsigned long long total, const String& url)
+    static ResourceProgressEvent* create(const AtomicString& type, bool lengthComputable, unsigned long long loaded, unsigned long long total, const String& url)
     {
         return new ResourceProgressEvent(type, lengthComputable, loaded, total, url);
     }
diff --git a/third_party/WebKit/Source/core/events/ScopedEventQueue.cpp b/third_party/WebKit/Source/core/events/ScopedEventQueue.cpp
index 9f1ce8a5..c514ec67 100644
--- a/third_party/WebKit/Source/core/events/ScopedEventQueue.cpp
+++ b/third_party/WebKit/Source/core/events/ScopedEventQueue.cpp
@@ -58,7 +58,7 @@
     s_instance = instance.leakPtr();
 }
 
-void ScopedEventQueue::enqueueEventDispatchMediator(RawPtr<EventDispatchMediator> mediator)
+void ScopedEventQueue::enqueueEventDispatchMediator(EventDispatchMediator* mediator)
 {
     if (shouldQueueEvents())
         m_queuedEventDispatchMediators.append(mediator);
@@ -75,7 +75,7 @@
         dispatchEvent(queuedEventDispatchMediators[i].release());
 }
 
-void ScopedEventQueue::dispatchEvent(RawPtr<EventDispatchMediator> mediator) const
+void ScopedEventQueue::dispatchEvent(EventDispatchMediator* mediator) const
 {
     ASSERT(mediator->event().target());
     Node* node = mediator->event().target()->toNode();
diff --git a/third_party/WebKit/Source/core/events/ScopedEventQueue.h b/third_party/WebKit/Source/core/events/ScopedEventQueue.h
index df33df03..62fa235 100644
--- a/third_party/WebKit/Source/core/events/ScopedEventQueue.h
+++ b/third_party/WebKit/Source/core/events/ScopedEventQueue.h
@@ -47,7 +47,7 @@
 public:
     ~ScopedEventQueue();
 
-    void enqueueEventDispatchMediator(RawPtr<EventDispatchMediator>);
+    void enqueueEventDispatchMediator(EventDispatchMediator*);
     void dispatchAllEvents();
     static ScopedEventQueue* instance();
 
@@ -58,7 +58,7 @@
 private:
     ScopedEventQueue();
     static void initialize();
-    void dispatchEvent(RawPtr<EventDispatchMediator>) const;
+    void dispatchEvent(EventDispatchMediator*) const;
 
     PersistentHeapVector<Member<EventDispatchMediator>> m_queuedEventDispatchMediators;
     unsigned m_scopingLevel;
diff --git a/third_party/WebKit/Source/core/events/SecurityPolicyViolationEvent.h b/third_party/WebKit/Source/core/events/SecurityPolicyViolationEvent.h
index f1d151c..dd1595e 100644
--- a/third_party/WebKit/Source/core/events/SecurityPolicyViolationEvent.h
+++ b/third_party/WebKit/Source/core/events/SecurityPolicyViolationEvent.h
@@ -33,12 +33,12 @@
 class SecurityPolicyViolationEvent final : public Event {
     DEFINE_WRAPPERTYPEINFO();
 public:
-    static RawPtr<SecurityPolicyViolationEvent> create()
+    static SecurityPolicyViolationEvent* create()
     {
         return new SecurityPolicyViolationEvent();
     }
 
-    static RawPtr<SecurityPolicyViolationEvent> create(const AtomicString& type, const SecurityPolicyViolationEventInit& initializer)
+    static SecurityPolicyViolationEvent* create(const AtomicString& type, const SecurityPolicyViolationEventInit& initializer)
     {
         return new SecurityPolicyViolationEvent(type, initializer);
     }
diff --git a/third_party/WebKit/Source/core/events/TextEvent.cpp b/third_party/WebKit/Source/core/events/TextEvent.cpp
index 738c253f..0cca759d 100644
--- a/third_party/WebKit/Source/core/events/TextEvent.cpp
+++ b/third_party/WebKit/Source/core/events/TextEvent.cpp
@@ -30,27 +30,27 @@
 
 namespace blink {
 
-RawPtr<TextEvent> TextEvent::create()
+TextEvent* TextEvent::create()
 {
     return new TextEvent;
 }
 
-RawPtr<TextEvent> TextEvent::create(RawPtr<AbstractView> view, const String& data, TextEventInputType inputType)
+TextEvent* TextEvent::create(AbstractView* view, const String& data, TextEventInputType inputType)
 {
     return new TextEvent(view, data, inputType);
 }
 
-RawPtr<TextEvent> TextEvent::createForPlainTextPaste(RawPtr<AbstractView> view, const String& data, bool shouldSmartReplace)
+TextEvent* TextEvent::createForPlainTextPaste(AbstractView* view, const String& data, bool shouldSmartReplace)
 {
     return new TextEvent(view, data, nullptr, shouldSmartReplace, false);
 }
 
-RawPtr<TextEvent> TextEvent::createForFragmentPaste(RawPtr<AbstractView> view, RawPtr<DocumentFragment> data, bool shouldSmartReplace, bool shouldMatchStyle)
+TextEvent* TextEvent::createForFragmentPaste(AbstractView* view, DocumentFragment* data, bool shouldSmartReplace, bool shouldMatchStyle)
 {
     return new TextEvent(view, "", data, shouldSmartReplace, shouldMatchStyle);
 }
 
-RawPtr<TextEvent> TextEvent::createForDrop(RawPtr<AbstractView> view, const String& data)
+TextEvent* TextEvent::createForDrop(AbstractView* view, const String& data)
 {
     return new TextEvent(view, data, TextEventInputDrop);
 }
@@ -62,7 +62,7 @@
 {
 }
 
-TextEvent::TextEvent(RawPtr<AbstractView> view, const String& data, TextEventInputType inputType)
+TextEvent::TextEvent(AbstractView* view, const String& data, TextEventInputType inputType)
     : UIEvent(EventTypeNames::textInput, true, true, view, 0)
     , m_inputType(inputType)
     , m_data(data)
@@ -72,7 +72,7 @@
 {
 }
 
-TextEvent::TextEvent(RawPtr<AbstractView> view, const String& data, RawPtr<DocumentFragment> pastingFragment,
+TextEvent::TextEvent(AbstractView* view, const String& data, DocumentFragment* pastingFragment,
                      bool shouldSmartReplace, bool shouldMatchStyle)
     : UIEvent(EventTypeNames::textInput, true, true, view, 0)
     , m_inputType(TextEventInputPaste)
@@ -87,7 +87,7 @@
 {
 }
 
-void TextEvent::initTextEvent(const AtomicString& type, bool canBubble, bool cancelable, RawPtr<AbstractView> view, const String& data)
+void TextEvent::initTextEvent(const AtomicString& type, bool canBubble, bool cancelable, AbstractView* view, const String& data)
 {
     if (dispatched())
         return;
diff --git a/third_party/WebKit/Source/core/events/TextEvent.h b/third_party/WebKit/Source/core/events/TextEvent.h
index c19dd84..e75c2fb8 100644
--- a/third_party/WebKit/Source/core/events/TextEvent.h
+++ b/third_party/WebKit/Source/core/events/TextEvent.h
@@ -37,15 +37,15 @@
 class TextEvent final : public UIEvent {
     DEFINE_WRAPPERTYPEINFO();
 public:
-    static RawPtr<TextEvent> create();
-    static RawPtr<TextEvent> create(RawPtr<AbstractView>, const String& data, TextEventInputType = TextEventInputKeyboard);
-    static RawPtr<TextEvent> createForPlainTextPaste(RawPtr<AbstractView>, const String& data, bool shouldSmartReplace);
-    static RawPtr<TextEvent> createForFragmentPaste(RawPtr<AbstractView>, RawPtr<DocumentFragment> data, bool shouldSmartReplace, bool shouldMatchStyle);
-    static RawPtr<TextEvent> createForDrop(RawPtr<AbstractView>, const String& data);
+    static TextEvent* create();
+    static TextEvent* create(AbstractView*, const String& data, TextEventInputType = TextEventInputKeyboard);
+    static TextEvent* createForPlainTextPaste(AbstractView*, const String& data, bool shouldSmartReplace);
+    static TextEvent* createForFragmentPaste(AbstractView*, DocumentFragment* data, bool shouldSmartReplace, bool shouldMatchStyle);
+    static TextEvent* createForDrop(AbstractView*, const String& data);
 
     ~TextEvent() override;
 
-    void initTextEvent(const AtomicString& type, bool canBubble, bool cancelable, RawPtr<AbstractView>, const String& data);
+    void initTextEvent(const AtomicString& type, bool canBubble, bool cancelable, AbstractView*, const String& data);
 
     String data() const { return m_data; }
 
@@ -65,8 +65,8 @@
 private:
     TextEvent();
 
-    TextEvent(RawPtr<AbstractView>, const String& data, TextEventInputType = TextEventInputKeyboard);
-    TextEvent(RawPtr<AbstractView>, const String& data, RawPtr<DocumentFragment>, bool shouldSmartReplace, bool shouldMatchStyle);
+    TextEvent(AbstractView*, const String& data, TextEventInputType = TextEventInputKeyboard);
+    TextEvent(AbstractView*, const String& data, DocumentFragment*, bool shouldSmartReplace, bool shouldMatchStyle);
 
     TextEventInputType m_inputType;
     String m_data;
diff --git a/third_party/WebKit/Source/core/events/TouchEvent.cpp b/third_party/WebKit/Source/core/events/TouchEvent.cpp
index c9efe11..085c275c 100644
--- a/third_party/WebKit/Source/core/events/TouchEvent.cpp
+++ b/third_party/WebKit/Source/core/events/TouchEvent.cpp
@@ -41,7 +41,7 @@
 
 TouchEvent::TouchEvent(TouchList* touches, TouchList* targetTouches,
     TouchList* changedTouches, const AtomicString& type,
-    RawPtr<AbstractView> view,
+    AbstractView* view,
     PlatformEvent::Modifiers modifiers, bool cancelable, bool causesScrollingIfUncanceled,
     double platformTimeStamp)
     // Pass a sourceCapabilities including the ability to fire touchevents when creating this touchevent, which is always created from input device capabilities from EventHandler.
@@ -64,7 +64,7 @@
 
 void TouchEvent::initTouchEvent(ScriptState* scriptState, TouchList* touches, TouchList* targetTouches,
     TouchList* changedTouches, const AtomicString& type,
-    RawPtr<AbstractView> view,
+    AbstractView* view,
     int, int, int, int,
     bool ctrlKey, bool altKey, bool shiftKey, bool metaKey)
 {
@@ -109,7 +109,7 @@
     }
 }
 
-RawPtr<EventDispatchMediator> TouchEvent::createMediator()
+EventDispatchMediator* TouchEvent::createMediator()
 {
     return TouchEventDispatchMediator::create(this);
 }
@@ -122,12 +122,12 @@
     UIEventWithKeyState::trace(visitor);
 }
 
-RawPtr<TouchEventDispatchMediator> TouchEventDispatchMediator::create(RawPtr<TouchEvent> touchEvent)
+TouchEventDispatchMediator* TouchEventDispatchMediator::create(TouchEvent* touchEvent)
 {
     return new TouchEventDispatchMediator(touchEvent);
 }
 
-TouchEventDispatchMediator::TouchEventDispatchMediator(RawPtr<TouchEvent> touchEvent)
+TouchEventDispatchMediator::TouchEventDispatchMediator(TouchEvent* touchEvent)
     : EventDispatchMediator(touchEvent)
 {
 }
diff --git a/third_party/WebKit/Source/core/events/TouchEvent.h b/third_party/WebKit/Source/core/events/TouchEvent.h
index d31ca1e..4bb598dc 100644
--- a/third_party/WebKit/Source/core/events/TouchEvent.h
+++ b/third_party/WebKit/Source/core/events/TouchEvent.h
@@ -41,13 +41,13 @@
     ~TouchEvent() override;
 
     // We only initialize sourceCapabilities when we create TouchEvent from EventHandler, null if it is from JavaScript.
-    static RawPtr<TouchEvent> create()
+    static TouchEvent* create()
     {
         return new TouchEvent;
     }
-    static RawPtr<TouchEvent> create(TouchList* touches,
+    static TouchEvent* create(TouchList* touches,
         TouchList* targetTouches, TouchList* changedTouches,
-        const AtomicString& type, RawPtr<AbstractView> view,
+        const AtomicString& type, AbstractView* view,
         PlatformEvent::Modifiers modifiers, bool cancelable, bool causesScrollingIfUncanceled,
         double platformTimeStamp)
     {
@@ -55,14 +55,14 @@
             modifiers, cancelable, causesScrollingIfUncanceled, platformTimeStamp);
     }
 
-    static RawPtr<TouchEvent> create(const AtomicString& type, const TouchEventInit& initializer)
+    static TouchEvent* create(const AtomicString& type, const TouchEventInit& initializer)
     {
         return new TouchEvent(type, initializer);
     }
 
     void initTouchEvent(ScriptState*, TouchList* touches, TouchList* targetTouches,
         TouchList* changedTouches, const AtomicString& type,
-        RawPtr<AbstractView>,
+        AbstractView*,
         int, int, int, int, // unused useless members of web exposed API
         bool ctrlKey, bool altKey, bool shiftKey, bool metaKey);
 
@@ -70,9 +70,9 @@
     TouchList* targetTouches() const { return m_targetTouches.get(); }
     TouchList* changedTouches() const { return m_changedTouches.get(); }
 
-    void setTouches(RawPtr<TouchList> touches) { m_touches = touches; }
-    void setTargetTouches(RawPtr<TouchList> targetTouches) { m_targetTouches = targetTouches; }
-    void setChangedTouches(RawPtr<TouchList> changedTouches) { m_changedTouches = changedTouches; }
+    void setTouches(TouchList* touches) { m_touches = touches; }
+    void setTargetTouches(TouchList* targetTouches) { m_targetTouches = targetTouches; }
+    void setChangedTouches(TouchList* changedTouches) { m_changedTouches = changedTouches; }
 
     bool causesScrollingIfUncanceled() const { return m_causesScrollingIfUncanceled; }
 
@@ -82,7 +82,7 @@
 
     void preventDefault() override;
 
-    RawPtr<EventDispatchMediator> createMediator() override;
+    EventDispatchMediator* createMediator() override;
 
     DECLARE_VIRTUAL_TRACE();
 
@@ -90,7 +90,7 @@
     TouchEvent();
     TouchEvent(TouchList* touches, TouchList* targetTouches,
         TouchList* changedTouches, const AtomicString& type,
-        RawPtr<AbstractView>, PlatformEvent::Modifiers,
+        AbstractView*, PlatformEvent::Modifiers,
         bool cancelable, bool causesScrollingIfUncanceled,
         double platformTimeStamp);
     TouchEvent(const AtomicString&, const TouchEventInit&);
@@ -103,10 +103,10 @@
 
 class TouchEventDispatchMediator final : public EventDispatchMediator {
 public:
-    static RawPtr<TouchEventDispatchMediator> create(RawPtr<TouchEvent>);
+    static TouchEventDispatchMediator* create(TouchEvent*);
 
 private:
-    explicit TouchEventDispatchMediator(RawPtr<TouchEvent>);
+    explicit TouchEventDispatchMediator(TouchEvent*);
     TouchEvent& event() const;
     DispatchEventResult dispatchEvent(EventDispatcher&) const override;
 };
diff --git a/third_party/WebKit/Source/core/events/TouchEventContext.cpp b/third_party/WebKit/Source/core/events/TouchEventContext.cpp
index bf6b428e..ed60f82c 100644
--- a/third_party/WebKit/Source/core/events/TouchEventContext.cpp
+++ b/third_party/WebKit/Source/core/events/TouchEventContext.cpp
@@ -32,7 +32,7 @@
 
 namespace blink {
 
-RawPtr<TouchEventContext> TouchEventContext::create()
+TouchEventContext* TouchEventContext::create()
 {
     return new TouchEventContext;
 }
diff --git a/third_party/WebKit/Source/core/events/TouchEventContext.h b/third_party/WebKit/Source/core/events/TouchEventContext.h
index 2f0ca07a..5bacd693 100644
--- a/third_party/WebKit/Source/core/events/TouchEventContext.h
+++ b/third_party/WebKit/Source/core/events/TouchEventContext.h
@@ -39,7 +39,7 @@
 
 class TouchEventContext : public GarbageCollected<TouchEventContext> {
 public:
-    static RawPtr<TouchEventContext> create();
+    static TouchEventContext* create();
     void handleLocalEvents(Event&) const;
     TouchList& touches() { return *m_touches; }
     TouchList& targetTouches() { return *m_targetTouches; }
diff --git a/third_party/WebKit/Source/core/events/TransitionEvent.h b/third_party/WebKit/Source/core/events/TransitionEvent.h
index a68f8c2..8e5dd26 100644
--- a/third_party/WebKit/Source/core/events/TransitionEvent.h
+++ b/third_party/WebKit/Source/core/events/TransitionEvent.h
@@ -35,15 +35,15 @@
 class TransitionEvent final : public Event {
     DEFINE_WRAPPERTYPEINFO();
 public:
-    static RawPtr<TransitionEvent> create()
+    static TransitionEvent* create()
     {
         return new TransitionEvent;
     }
-    static RawPtr<TransitionEvent> create(const AtomicString& type, const String& propertyName, double elapsedTime, const String& pseudoElement)
+    static TransitionEvent* create(const AtomicString& type, const String& propertyName, double elapsedTime, const String& pseudoElement)
     {
         return new TransitionEvent(type, propertyName, elapsedTime, pseudoElement);
     }
-    static RawPtr<TransitionEvent> create(const AtomicString& type, const TransitionEventInit& initializer)
+    static TransitionEvent* create(const AtomicString& type, const TransitionEventInit& initializer)
     {
         return new TransitionEvent(type, initializer);
     }
diff --git a/third_party/WebKit/Source/core/events/TreeScopeEventContext.cpp b/third_party/WebKit/Source/core/events/TreeScopeEventContext.cpp
index 0f71ae4..d0d7482 100644
--- a/third_party/WebKit/Source/core/events/TreeScopeEventContext.cpp
+++ b/third_party/WebKit/Source/core/events/TreeScopeEventContext.cpp
@@ -81,7 +81,7 @@
     return m_touchEventContext.get();
 }
 
-RawPtr<TreeScopeEventContext> TreeScopeEventContext::create(TreeScope& treeScope)
+TreeScopeEventContext* TreeScopeEventContext::create(TreeScope& treeScope)
 {
     return new TreeScopeEventContext(treeScope);
 }
diff --git a/third_party/WebKit/Source/core/events/TreeScopeEventContext.h b/third_party/WebKit/Source/core/events/TreeScopeEventContext.h
index bbdfe51..217292a7 100644
--- a/third_party/WebKit/Source/core/events/TreeScopeEventContext.h
+++ b/third_party/WebKit/Source/core/events/TreeScopeEventContext.h
@@ -47,17 +47,17 @@
 
 class CORE_EXPORT TreeScopeEventContext final : public GarbageCollected<TreeScopeEventContext> {
 public:
-    static RawPtr<TreeScopeEventContext> create(TreeScope&);
+    static TreeScopeEventContext* create(TreeScope&);
     DECLARE_TRACE();
 
     TreeScope& treeScope() const { return *m_treeScope; }
     Node& rootNode() const { return *m_rootNode; }
 
     EventTarget* target() const { return m_target.get(); }
-    void setTarget(RawPtr<EventTarget>);
+    void setTarget(EventTarget*);
 
     EventTarget* relatedTarget() const { return m_relatedTarget.get(); }
-    void setRelatedTarget(RawPtr<EventTarget>);
+    void setRelatedTarget(EventTarget*);
 
     TouchEventContext* touchEventContext() const { return m_touchEventContext.get(); }
     TouchEventContext* ensureTouchEventContext();
@@ -107,14 +107,14 @@
 }
 #endif
 
-inline void TreeScopeEventContext::setTarget(RawPtr<EventTarget> target)
+inline void TreeScopeEventContext::setTarget(EventTarget* target)
 {
     ASSERT(target);
     ASSERT(!isUnreachableNode(*target));
     m_target = target;
 }
 
-inline void TreeScopeEventContext::setRelatedTarget(RawPtr<EventTarget> relatedTarget)
+inline void TreeScopeEventContext::setRelatedTarget(EventTarget* relatedTarget)
 {
     ASSERT(relatedTarget);
     ASSERT(!isUnreachableNode(*relatedTarget));
diff --git a/third_party/WebKit/Source/core/events/UIEvent.cpp b/third_party/WebKit/Source/core/events/UIEvent.cpp
index ff5695c3..5194710 100644
--- a/third_party/WebKit/Source/core/events/UIEvent.cpp
+++ b/third_party/WebKit/Source/core/events/UIEvent.cpp
@@ -32,7 +32,7 @@
 }
 
 // TODO(lanwei): Will add sourceCapabilities to all the subclass of UIEvent later, see https://crbug.com/476530.
-UIEvent::UIEvent(const AtomicString& eventType, bool canBubbleArg, bool cancelableArg, RawPtr<AbstractView> viewArg, int detailArg, InputDeviceCapabilities* sourceCapabilitiesArg)
+UIEvent::UIEvent(const AtomicString& eventType, bool canBubbleArg, bool cancelableArg, AbstractView* viewArg, int detailArg, InputDeviceCapabilities* sourceCapabilitiesArg)
     : Event(eventType, canBubbleArg, cancelableArg)
     , m_view(viewArg)
     , m_detail(detailArg)
@@ -40,7 +40,7 @@
 {
 }
 
-UIEvent::UIEvent(const AtomicString& eventType, bool canBubbleArg, bool cancelableArg, EventTarget* relatedTarget, RawPtr<AbstractView> viewArg, int detailArg, InputDeviceCapabilities* sourceCapabilitiesArg)
+UIEvent::UIEvent(const AtomicString& eventType, bool canBubbleArg, bool cancelableArg, EventTarget* relatedTarget, AbstractView* viewArg, int detailArg, InputDeviceCapabilities* sourceCapabilitiesArg)
     : Event(eventType, canBubbleArg, cancelableArg, relatedTarget)
     , m_view(viewArg)
     , m_detail(detailArg)
@@ -48,7 +48,7 @@
 {
 }
 
-UIEvent::UIEvent(const AtomicString& eventType, bool canBubbleArg, bool cancelableArg, double platformTimeStamp, RawPtr<AbstractView> viewArg, int detailArg, InputDeviceCapabilities* sourceCapabilitiesArg)
+UIEvent::UIEvent(const AtomicString& eventType, bool canBubbleArg, bool cancelableArg, double platformTimeStamp, AbstractView* viewArg, int detailArg, InputDeviceCapabilities* sourceCapabilitiesArg)
     : Event(eventType, canBubbleArg, cancelableArg, platformTimeStamp)
     , m_view(viewArg)
     , m_detail(detailArg)
@@ -56,7 +56,7 @@
 {
 }
 
-UIEvent::UIEvent(const AtomicString& eventType, bool canBubbleArg, bool cancelableArg, EventTarget* relatedTarget, double platformTimeStamp, RawPtr<AbstractView> viewArg, int detailArg, InputDeviceCapabilities* sourceCapabilitiesArg)
+UIEvent::UIEvent(const AtomicString& eventType, bool canBubbleArg, bool cancelableArg, EventTarget* relatedTarget, double platformTimeStamp, AbstractView* viewArg, int detailArg, InputDeviceCapabilities* sourceCapabilitiesArg)
     : Event(eventType, canBubbleArg, cancelableArg, relatedTarget, platformTimeStamp)
     , m_view(viewArg)
     , m_detail(detailArg)
@@ -76,12 +76,12 @@
 {
 }
 
-void UIEvent::initUIEvent(const AtomicString& typeArg, bool canBubbleArg, bool cancelableArg, RawPtr<AbstractView> viewArg, int detailArg)
+void UIEvent::initUIEvent(const AtomicString& typeArg, bool canBubbleArg, bool cancelableArg, AbstractView* viewArg, int detailArg)
 {
     initUIEventInternal(typeArg, canBubbleArg, cancelableArg, nullptr, viewArg, detailArg, nullptr);
 }
 
-void UIEvent::initUIEventInternal(const AtomicString& typeArg, bool canBubbleArg, bool cancelableArg, EventTarget* relatedTarget, RawPtr<AbstractView> viewArg, int detailArg, InputDeviceCapabilities* sourceCapabilitiesArg)
+void UIEvent::initUIEventInternal(const AtomicString& typeArg, bool canBubbleArg, bool cancelableArg, EventTarget* relatedTarget, AbstractView* viewArg, int detailArg, InputDeviceCapabilities* sourceCapabilitiesArg)
 {
     if (dispatched())
         return;
diff --git a/third_party/WebKit/Source/core/events/UIEvent.h b/third_party/WebKit/Source/core/events/UIEvent.h
index 92f088f0..4c743285 100644
--- a/third_party/WebKit/Source/core/events/UIEvent.h
+++ b/third_party/WebKit/Source/core/events/UIEvent.h
@@ -39,22 +39,22 @@
 class CORE_EXPORT UIEvent : public Event {
     DEFINE_WRAPPERTYPEINFO();
 public:
-    static RawPtr<UIEvent> create()
+    static UIEvent* create()
     {
         return new UIEvent;
     }
-    static RawPtr<UIEvent> create(const AtomicString& type, bool canBubble, bool cancelable, RawPtr<AbstractView> view, int detail)
+    static UIEvent* create(const AtomicString& type, bool canBubble, bool cancelable, AbstractView* view, int detail)
     {
         return new UIEvent(type, canBubble, cancelable, view, detail);
     }
-    static RawPtr<UIEvent> create(const AtomicString& type, const UIEventInit& initializer)
+    static UIEvent* create(const AtomicString& type, const UIEventInit& initializer)
     {
         return new UIEvent(type, initializer);
     }
     ~UIEvent() override;
 
-    void initUIEvent(const AtomicString& type, bool canBubble, bool cancelable, RawPtr<AbstractView>, int detail);
-    void initUIEventInternal(const AtomicString& type, bool canBubble, bool cancelable, EventTarget* relatedTarget, RawPtr<AbstractView>, int detail, InputDeviceCapabilities* sourceCapabilities);
+    void initUIEvent(const AtomicString& type, bool canBubble, bool cancelable, AbstractView*, int detail);
+    void initUIEventInternal(const AtomicString& type, bool canBubble, bool cancelable, EventTarget* relatedTarget, AbstractView*, int detail, InputDeviceCapabilities* sourceCapabilities);
 
     AbstractView* view() const { return m_view.get(); }
     int detail() const { return m_detail; }
@@ -70,10 +70,10 @@
 protected:
     UIEvent();
     // TODO(crbug.com/563542): Remove of this ctor in favor of making platformTimeStamp (and perhaps sourceCapabilities) required in all constructions sites
-    UIEvent(const AtomicString& type, bool canBubble, bool cancelable, RawPtr<AbstractView>, int detail, InputDeviceCapabilities* sourceCapabilities = nullptr);
-    UIEvent(const AtomicString& type, bool canBubble, bool cancelable, EventTarget* relatedTarget, RawPtr<AbstractView>, int detail, InputDeviceCapabilities* sourceCapabilities = nullptr);
-    UIEvent(const AtomicString& type, bool canBubble, bool cancelable, double platformTimeStamp, RawPtr<AbstractView>, int detail, InputDeviceCapabilities* sourceCapabilities);
-    UIEvent(const AtomicString& eventType, bool canBubbleArg, bool cancelableArg, EventTarget* relatedTarget, double platformTimeStamp, RawPtr<AbstractView> viewArg, int detailArg, InputDeviceCapabilities* sourceCapabilitiesArg);
+    UIEvent(const AtomicString& type, bool canBubble, bool cancelable, AbstractView*, int detail, InputDeviceCapabilities* sourceCapabilities = nullptr);
+    UIEvent(const AtomicString& type, bool canBubble, bool cancelable, EventTarget* relatedTarget, AbstractView*, int detail, InputDeviceCapabilities* sourceCapabilities = nullptr);
+    UIEvent(const AtomicString& type, bool canBubble, bool cancelable, double platformTimeStamp, AbstractView*, int detail, InputDeviceCapabilities* sourceCapabilities);
+    UIEvent(const AtomicString& eventType, bool canBubbleArg, bool cancelableArg, EventTarget* relatedTarget, double platformTimeStamp, AbstractView* viewArg, int detailArg, InputDeviceCapabilities* sourceCapabilitiesArg);
     UIEvent(const AtomicString&, const UIEventInit&);
 
 private:
diff --git a/third_party/WebKit/Source/core/events/UIEventWithKeyState.cpp b/third_party/WebKit/Source/core/events/UIEventWithKeyState.cpp
index ad02a57..114c3626 100644
--- a/third_party/WebKit/Source/core/events/UIEventWithKeyState.cpp
+++ b/third_party/WebKit/Source/core/events/UIEventWithKeyState.cpp
@@ -22,14 +22,14 @@
 
 namespace blink {
 
-UIEventWithKeyState::UIEventWithKeyState(const AtomicString& type, bool canBubble, bool cancelable, RawPtr<AbstractView> view,
+UIEventWithKeyState::UIEventWithKeyState(const AtomicString& type, bool canBubble, bool cancelable, AbstractView* view,
     int detail, PlatformEvent::Modifiers modifiers, double platformTimeStamp, InputDeviceCapabilities* sourceCapabilities)
     : UIEvent(type, canBubble, cancelable, platformTimeStamp, view, detail, sourceCapabilities)
     , m_modifiers(modifiers)
 {
 }
 
-UIEventWithKeyState::UIEventWithKeyState(const AtomicString& type, bool canBubble, bool cancelable, EventTarget* relatedTarget, RawPtr<AbstractView> view,
+UIEventWithKeyState::UIEventWithKeyState(const AtomicString& type, bool canBubble, bool cancelable, EventTarget* relatedTarget, AbstractView* view,
     int detail, PlatformEvent::Modifiers modifiers, double platformTimeStamp, InputDeviceCapabilities* sourceCapabilities)
     : UIEvent(type, canBubble, cancelable, relatedTarget, platformTimeStamp, view, detail, sourceCapabilities)
     , m_modifiers(modifiers)
diff --git a/third_party/WebKit/Source/core/events/UIEventWithKeyState.h b/third_party/WebKit/Source/core/events/UIEventWithKeyState.h
index afbc42b..80c88ee 100644
--- a/third_party/WebKit/Source/core/events/UIEventWithKeyState.h
+++ b/third_party/WebKit/Source/core/events/UIEventWithKeyState.h
@@ -55,9 +55,9 @@
     {
     }
 
-    UIEventWithKeyState(const AtomicString& type, bool canBubble, bool cancelable, RawPtr<AbstractView>,
+    UIEventWithKeyState(const AtomicString& type, bool canBubble, bool cancelable, AbstractView*,
         int detail, PlatformEvent::Modifiers, double platformTimeStamp, InputDeviceCapabilities* sourceCapabilities = nullptr);
-    UIEventWithKeyState(const AtomicString& type, bool canBubble, bool cancelable, EventTarget* relatedTarget, RawPtr<AbstractView>,
+    UIEventWithKeyState(const AtomicString& type, bool canBubble, bool cancelable, EventTarget* relatedTarget, AbstractView*,
         int detail, PlatformEvent::Modifiers, double platformTimeStamp, InputDeviceCapabilities* sourceCapabilities = nullptr);
     UIEventWithKeyState(const AtomicString& type, const EventModifierInit& initializer);
     void initModifiers(bool ctrlKey, bool altKey, bool shiftKey, bool metaKey);
diff --git a/third_party/WebKit/Source/core/events/WheelEvent.cpp b/third_party/WebKit/Source/core/events/WheelEvent.cpp
index 0573da8..50d33cd600 100644
--- a/third_party/WebKit/Source/core/events/WheelEvent.cpp
+++ b/third_party/WebKit/Source/core/events/WheelEvent.cpp
@@ -34,7 +34,7 @@
     return event.granularity() == ScrollByPageWheelEvent ? WheelEvent::DOM_DELTA_PAGE : WheelEvent::DOM_DELTA_PIXEL;
 }
 
-RawPtr<WheelEvent> WheelEvent::create(const PlatformWheelEvent& event, RawPtr<AbstractView> view)
+WheelEvent* WheelEvent::create(const PlatformWheelEvent& event, AbstractView* view)
 {
     return new WheelEvent(FloatPoint(event.wheelTicksX(), event.wheelTicksY()), FloatPoint(event.deltaX(), event.deltaY()),
         convertDeltaMode(event), view, event.globalPosition(), event.position(),
@@ -71,7 +71,7 @@
 }
 
 WheelEvent::WheelEvent(const FloatPoint& wheelTicks, const FloatPoint& rawDelta, unsigned deltaMode,
-    RawPtr<AbstractView> view, const IntPoint& screenLocation, const IntPoint& windowLocation,
+    AbstractView* view, const IntPoint& screenLocation, const IntPoint& windowLocation,
     PlatformEvent::Modifiers modifiers, unsigned short buttons, double platformTimeStamp,
     bool canScroll, int resendingPluginId, bool hasPreciseScrollingDeltas, RailsMode railsMode)
     : MouseEvent(EventTypeNames::wheel, true, true, view, 0, screenLocation.x(), screenLocation.y(),
@@ -107,7 +107,7 @@
     return true;
 }
 
-RawPtr<EventDispatchMediator> WheelEvent::createMediator()
+EventDispatchMediator* WheelEvent::createMediator()
 {
     return EventDispatchMediator::create(this);
 }
diff --git a/third_party/WebKit/Source/core/events/WheelEvent.h b/third_party/WebKit/Source/core/events/WheelEvent.h
index 9083d43..a3ec834 100644
--- a/third_party/WebKit/Source/core/events/WheelEvent.h
+++ b/third_party/WebKit/Source/core/events/WheelEvent.h
@@ -45,20 +45,20 @@
         DOM_DELTA_PAGE
     };
 
-    static RawPtr<WheelEvent> create()
+    static WheelEvent* create()
     {
         return new WheelEvent;
     }
 
-    static RawPtr<WheelEvent> create(const PlatformWheelEvent& platformEvent, RawPtr<AbstractView>);
+    static WheelEvent* create(const PlatformWheelEvent& platformEvent, AbstractView*);
 
-    static RawPtr<WheelEvent> create(const AtomicString& type, const WheelEventInit& initializer)
+    static WheelEvent* create(const AtomicString& type, const WheelEventInit& initializer)
     {
         return new WheelEvent(type, initializer);
     }
 
-    static RawPtr<WheelEvent> create(const FloatPoint& wheelTicks,
-        const FloatPoint& rawDelta, unsigned deltaMode, RawPtr<AbstractView> view,
+    static WheelEvent* create(const FloatPoint& wheelTicks,
+        const FloatPoint& rawDelta, unsigned deltaMode, AbstractView* view,
         const IntPoint& screenLocation, const IntPoint& windowLocation,
         PlatformEvent::Modifiers modifiers, unsigned short buttons, double platformTimeStamp,
         bool canScroll, int resendingPluginId, bool hasPreciseScrollingDeltas, RailsMode railsMode)
@@ -86,7 +86,7 @@
     bool isMouseEvent() const override;
     bool isWheelEvent() const override;
 
-    RawPtr<EventDispatchMediator> createMediator() override;
+    EventDispatchMediator* createMediator() override;
 
     DECLARE_VIRTUAL_TRACE();
 
@@ -94,7 +94,7 @@
     WheelEvent();
     WheelEvent(const AtomicString&, const WheelEventInit&);
     WheelEvent(const FloatPoint& wheelTicks, const FloatPoint& rawDelta,
-        unsigned, RawPtr<AbstractView>, const IntPoint& screenLocation, const IntPoint& windowLocation,
+        unsigned, AbstractView*, const IntPoint& screenLocation, const IntPoint& windowLocation,
         PlatformEvent::Modifiers, unsigned short buttons, double platformTimeStamp,
         bool canScroll, int resendingPluginId, bool hasPreciseScrollingDeltas, RailsMode);
 
diff --git a/third_party/WebKit/Source/core/fetch/FetchContext.cpp b/third_party/WebKit/Source/core/fetch/FetchContext.cpp
index 61b81633..c05c409 100644
--- a/third_party/WebKit/Source/core/fetch/FetchContext.cpp
+++ b/third_party/WebKit/Source/core/fetch/FetchContext.cpp
@@ -35,8 +35,8 @@
 
 FetchContext& FetchContext::nullInstance()
 {
-    DEFINE_STATIC_LOCAL(Persistent<FetchContext>, instance, (new FetchContext));
-    return *instance;
+    DEFINE_STATIC_LOCAL(FetchContext, instance, (new FetchContext));
+    return instance;
 }
 
 void FetchContext::dispatchDidChangeResourcePriority(unsigned long, ResourceLoadPriority, int)
diff --git a/third_party/WebKit/Source/core/fetch/Resource.cpp b/third_party/WebKit/Source/core/fetch/Resource.cpp
index 9dc8f188..ed78f21 100644
--- a/third_party/WebKit/Source/core/fetch/Resource.cpp
+++ b/third_party/WebKit/Source/core/fetch/Resource.cpp
@@ -144,6 +144,73 @@
     return m_resource->encoding();
 }
 
+class Resource::ResourceCallback final : public GarbageCollectedFinalized<ResourceCallback> {
+public:
+    static ResourceCallback& callbackHandler();
+    DECLARE_TRACE();
+    void schedule(Resource*);
+    void cancel(Resource*);
+    bool isScheduled(Resource*) const;
+private:
+    ResourceCallback();
+
+    void runTask();
+    OwnPtr<CancellableTaskFactory> m_callbackTaskFactory;
+    HeapHashSet<Member<Resource>> m_resourcesWithPendingClients;
+};
+
+Resource::ResourceCallback& Resource::ResourceCallback::callbackHandler()
+{
+    // Oilpan + LSan: as the callbackHandler() singleton is used by Resource
+    // and ResourcePtr finalizers, it cannot be released upon shutdown in
+    // preparation for leak detection.
+    //
+    // Keep it out of LSan's reach instead.
+    LEAK_SANITIZER_DISABLED_SCOPE;
+    DEFINE_STATIC_LOCAL(ResourceCallback, callbackHandler, (new ResourceCallback));
+    return callbackHandler;
+}
+
+DEFINE_TRACE(Resource::ResourceCallback)
+{
+    visitor->trace(m_resourcesWithPendingClients);
+}
+
+Resource::ResourceCallback::ResourceCallback()
+    : m_callbackTaskFactory(CancellableTaskFactory::create(this, &ResourceCallback::runTask))
+{
+}
+
+void Resource::ResourceCallback::schedule(Resource* resource)
+{
+    if (!m_callbackTaskFactory->isPending())
+        Platform::current()->currentThread()->scheduler()->loadingTaskRunner()->postTask(BLINK_FROM_HERE, m_callbackTaskFactory->cancelAndCreate());
+    m_resourcesWithPendingClients.add(resource);
+}
+
+void Resource::ResourceCallback::cancel(Resource* resource)
+{
+    m_resourcesWithPendingClients.remove(resource);
+    if (m_callbackTaskFactory->isPending() && m_resourcesWithPendingClients.isEmpty())
+        m_callbackTaskFactory->cancel();
+}
+
+bool Resource::ResourceCallback::isScheduled(Resource* resource) const
+{
+    return m_resourcesWithPendingClients.contains(resource);
+}
+
+void Resource::ResourceCallback::runTask()
+{
+    HeapVector<Member<Resource>> resources;
+    for (const Member<Resource>& resource : m_resourcesWithPendingClients)
+        resources.append(resource.get());
+    m_resourcesWithPendingClients.clear();
+
+    for (const auto& resource : resources)
+        resource->finishPendingClients();
+}
+
 Resource::Resource(const ResourceRequest& request, Type type, const ResourceLoaderOptions& options)
     : m_resourceRequest(request)
     , m_options(options)
@@ -609,7 +676,7 @@
     // If we have existing data to send to the new client and the resource type supprts it, send it asynchronously.
     if (!m_response.isNull() && !shouldSendCachedDataSynchronouslyForType(getType()) && !m_needsSynchronousCacheHit) {
         m_clientsAwaitingCallback.add(client);
-        ResourceCallback::callbackHandler()->schedule(this);
+        ResourceCallback::callbackHandler().schedule(this);
         return;
     }
 
@@ -629,7 +696,7 @@
         m_clients.remove(client);
 
     if (m_clientsAwaitingCallback.isEmpty())
-        ResourceCallback::callbackHandler()->cancel(this);
+        ResourceCallback::callbackHandler().cancel(this);
 
     didRemoveClientOrObserver();
     // This object may be dead here.
@@ -727,9 +794,9 @@
 
     // It is still possible for the above loop to finish a new client synchronously.
     // If there's no client waiting we should deschedule.
-    bool scheduled = ResourceCallback::callbackHandler()->isScheduled(this);
+    bool scheduled = ResourceCallback::callbackHandler().isScheduled(this);
     if (scheduled && m_clientsAwaitingCallback.isEmpty())
-        ResourceCallback::callbackHandler()->cancel(this);
+        ResourceCallback::callbackHandler().cancel(this);
 
     // Prevent the case when there are clients waiting but no callback scheduled.
     ASSERT(m_clientsAwaitingCallback.isEmpty() || scheduled);
@@ -912,60 +979,6 @@
         m_loader->didChangePriority(loadPriority, intraPriorityValue);
 }
 
-Resource::ResourceCallback* Resource::ResourceCallback::callbackHandler()
-{
-    // Oilpan + LSan: as the callbackHandler() singleton is used by Resource
-    // and ResourcePtr finalizers, it cannot be released upon shutdown in
-    // preparation for leak detection.
-    //
-    // Keep it out of LSan's reach instead.
-    LEAK_SANITIZER_DISABLED_SCOPE;
-    DEFINE_STATIC_LOCAL(Persistent<ResourceCallback>, callbackHandler, (new ResourceCallback));
-    return callbackHandler.get();
-}
-
-DEFINE_TRACE(Resource::ResourceCallback)
-{
-#if ENABLE(OILPAN)
-    visitor->trace(m_resourcesWithPendingClients);
-#endif
-}
-
-Resource::ResourceCallback::ResourceCallback()
-    : m_callbackTaskFactory(CancellableTaskFactory::create(this, &ResourceCallback::runTask))
-{
-}
-
-void Resource::ResourceCallback::schedule(Resource* resource)
-{
-    if (!m_callbackTaskFactory->isPending())
-        Platform::current()->currentThread()->scheduler()->loadingTaskRunner()->postTask(BLINK_FROM_HERE, m_callbackTaskFactory->cancelAndCreate());
-    m_resourcesWithPendingClients.add(resource);
-}
-
-void Resource::ResourceCallback::cancel(Resource* resource)
-{
-    m_resourcesWithPendingClients.remove(resource);
-    if (m_callbackTaskFactory->isPending() && m_resourcesWithPendingClients.isEmpty())
-        m_callbackTaskFactory->cancel();
-}
-
-bool Resource::ResourceCallback::isScheduled(Resource* resource) const
-{
-    return m_resourcesWithPendingClients.contains(resource);
-}
-
-void Resource::ResourceCallback::runTask()
-{
-    HeapVector<Member<Resource>> resources;
-    for (const Member<Resource>& resource : m_resourcesWithPendingClients)
-        resources.append(resource.get());
-    m_resourcesWithPendingClients.clear();
-
-    for (const auto& resource : resources)
-        resource->finishPendingClients();
-}
-
 static const char* initatorTypeNameToString(const AtomicString& initiatorTypeName)
 {
     if (initiatorTypeName == FetchInitiatorTypeNames::css)
diff --git a/third_party/WebKit/Source/core/fetch/Resource.h b/third_party/WebKit/Source/core/fetch/Resource.h
index 9242658..121252f 100644
--- a/third_party/WebKit/Source/core/fetch/Resource.h
+++ b/third_party/WebKit/Source/core/fetch/Resource.h
@@ -272,20 +272,6 @@
     HashCountedSet<ResourceClient*> m_clientsAwaitingCallback;
     HashCountedSet<ResourceClient*> m_finishedClients;
 
-    class ResourceCallback : public GarbageCollectedFinalized<ResourceCallback> {
-    public:
-        static ResourceCallback* callbackHandler();
-        DECLARE_TRACE();
-        void schedule(Resource*);
-        void cancel(Resource*);
-        bool isScheduled(Resource*) const;
-    private:
-        ResourceCallback();
-        void runTask();
-        OwnPtr<CancellableTaskFactory> m_callbackTaskFactory;
-        HeapHashSet<Member<Resource>> m_resourcesWithPendingClients;
-    };
-
     bool hasClient(ResourceClient* client) { return m_clients.contains(client) || m_clientsAwaitingCallback.contains(client) || m_finishedClients.contains(client); }
 
     struct RedirectPair {
@@ -324,6 +310,8 @@
 
 private:
     class CacheHandler;
+    class ResourceCallback;
+
     void cancelTimerFired(Timer<Resource>*);
 
     void revalidationSucceeded(const ResourceResponse&);
diff --git a/third_party/WebKit/Source/core/frame/DOMWindowLifecycleNotifier.cpp b/third_party/WebKit/Source/core/frame/DOMWindowLifecycleNotifier.cpp
index b0c5080f..3c24d90 100644
--- a/third_party/WebKit/Source/core/frame/DOMWindowLifecycleNotifier.cpp
+++ b/third_party/WebKit/Source/core/frame/DOMWindowLifecycleNotifier.cpp
@@ -32,64 +32,22 @@
 void DOMWindowLifecycleNotifier::notifyAddEventListener(LocalDOMWindow* window, const AtomicString& eventType)
 {
     TemporaryChange<IterationType> scope(m_iterating, IteratingOverAll);
-#if !ENABLE(OILPAN)
-    // Notifications perform unknown amounts of heap allocations,
-    // which might trigger (conservative) GCs. This will flush out
-    // dead observers, causing the _non-heap_ set be updated. Snapshot
-    // the observers and explicitly check if they're still alive before
-    // notifying.
-    Vector<RawPtr<DOMWindowLifecycleObserver>> snapshotOfObservers;
-    copyToVector(m_observers, snapshotOfObservers);
-    for (DOMWindowLifecycleObserver* observer : snapshotOfObservers) {
-        if (m_observers.contains(observer))
-            observer->didAddEventListener(window, eventType);
-    }
-#else
     for (DOMWindowLifecycleObserver* observer : m_observers)
         observer->didAddEventListener(window, eventType);
-#endif
 }
 
 void DOMWindowLifecycleNotifier::notifyRemoveEventListener(LocalDOMWindow* window, const AtomicString& eventType)
 {
     TemporaryChange<IterationType> scope(m_iterating, IteratingOverAll);
-#if !ENABLE(OILPAN)
-    // Notifications perform unknown amounts of heap allocations,
-    // which might trigger (conservative) GCs. This will flush out
-    // dead observers, causing the _non-heap_ set be updated. Snapshot
-    // the observers and explicitly check if they're still alive before
-    // notifying.
-    Vector<RawPtr<DOMWindowLifecycleObserver>> snapshotOfObservers;
-    copyToVector(m_observers, snapshotOfObservers);
-    for (DOMWindowLifecycleObserver* observer : snapshotOfObservers) {
-        if (m_observers.contains(observer))
-            observer->didRemoveEventListener(window, eventType);
-    }
-#else
     for (DOMWindowLifecycleObserver* observer : m_observers)
         observer->didRemoveEventListener(window, eventType);
-#endif
 }
 
 void DOMWindowLifecycleNotifier::notifyRemoveAllEventListeners(LocalDOMWindow* window)
 {
     TemporaryChange<IterationType> scope(m_iterating, IteratingOverAll);
-#if !ENABLE(OILPAN)
-    // Notifications perform unknown amounts of heap allocations,
-    // which might trigger (conservative) GCs. This will flush out
-    // dead observers, causing the _non-heap_ set be updated. Snapshot
-    // the observers and explicitly check if they're still alive before
-    // notifying.
-    Vector<RawPtr<DOMWindowLifecycleObserver>> snapshotOfObservers;
-    copyToVector(m_observers, snapshotOfObservers);
-    for (DOMWindowLifecycleObserver* observer : snapshotOfObservers) {
-        if (m_observers.contains(observer))
-            observer->didRemoveAllEventListeners(window);
-    }
-#else
     for (DOMWindowLifecycleObserver* observer : m_observers)
         observer->didRemoveAllEventListeners(window);
-#endif
 }
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/core/frame/Frame.cpp b/third_party/WebKit/Source/core/frame/Frame.cpp
index a7bda7e6..ebb92b8e 100644
--- a/third_party/WebKit/Source/core/frame/Frame.cpp
+++ b/third_party/WebKit/Source/core/frame/Frame.cpp
@@ -154,8 +154,8 @@
 
 static ChromeClient& emptyChromeClient()
 {
-    DEFINE_STATIC_LOCAL(Persistent<EmptyChromeClient>, client, (EmptyChromeClient::create()));
-    return *client;
+    DEFINE_STATIC_LOCAL(EmptyChromeClient, client, (EmptyChromeClient::create()));
+    return client;
 }
 
 ChromeClient& Frame::chromeClient() const
diff --git a/third_party/WebKit/Source/core/frame/FrameView.cpp b/third_party/WebKit/Source/core/frame/FrameView.cpp
index c427ff3a..99641926 100644
--- a/third_party/WebKit/Source/core/frame/FrameView.cpp
+++ b/third_party/WebKit/Source/core/frame/FrameView.cpp
@@ -354,8 +354,6 @@
             toFrameView(widget)->invalidateAllCustomScrollbarsOnActiveChanged();
         else if (usesWindowInactiveSelector && widget->isScrollbar() && toScrollbar(widget)->isCustomScrollbar())
             toScrollbar(widget)->styleChanged();
-        if (widget->isScrollbar())
-            toScrollbar(widget)->windowActiveChangedForSnowLeopardOnly();
     }
     if (usesWindowInactiveSelector)
         recalculateCustomScrollbarStyle();
diff --git a/third_party/WebKit/Source/core/frame/LocalDOMWindow.cpp b/third_party/WebKit/Source/core/frame/LocalDOMWindow.cpp
index 1cf63e1..c874421 100644
--- a/third_party/WebKit/Source/core/frame/LocalDOMWindow.cpp
+++ b/third_party/WebKit/Source/core/frame/LocalDOMWindow.cpp
@@ -712,7 +712,7 @@
     m_postMessageTimers.remove(timer);
 }
 
-void LocalDOMWindow::dispatchMessageEventWithOriginCheck(SecurityOrigin* intendedTargetOrigin, RawPtr<Event> event, PassRefPtr<ScriptCallStack> stackTrace)
+void LocalDOMWindow::dispatchMessageEventWithOriginCheck(SecurityOrigin* intendedTargetOrigin, Event* event, PassRefPtr<ScriptCallStack> stackTrace)
 {
     if (intendedTargetOrigin) {
         // Check target origin now since the target document may have changed since the timer was scheduled.
@@ -1312,9 +1312,8 @@
         document->cancelIdleCallback(id);
 }
 
-bool LocalDOMWindow::addEventListenerInternal(const AtomicString& eventType, RawPtr<EventListener> prpListener, const EventListenerOptions& options)
+bool LocalDOMWindow::addEventListenerInternal(const AtomicString& eventType, EventListener* listener, const EventListenerOptions& options)
 {
-    RawPtr<EventListener> listener = prpListener;
     if (!EventTarget::addEventListenerInternal(eventType, listener, options))
         return false;
 
@@ -1346,7 +1345,7 @@
     return true;
 }
 
-bool LocalDOMWindow::removeEventListenerInternal(const AtomicString& eventType, RawPtr<EventListener> listener, const EventListenerOptions& options)
+bool LocalDOMWindow::removeEventListenerInternal(const AtomicString& eventType, EventListener* listener, const EventListenerOptions& options)
 {
     if (!EventTarget::removeEventListenerInternal(eventType, listener, options))
         return false;
diff --git a/third_party/WebKit/Source/core/frame/LocalDOMWindow.h b/third_party/WebKit/Source/core/frame/LocalDOMWindow.h
index 347186a..daf07d8 100644
--- a/third_party/WebKit/Source/core/frame/LocalDOMWindow.h
+++ b/third_party/WebKit/Source/core/frame/LocalDOMWindow.h
@@ -168,7 +168,7 @@
 
     void postMessageTimerFired(PostMessageTimer*);
     void removePostMessageTimer(PostMessageTimer*);
-    void dispatchMessageEventWithOriginCheck(SecurityOrigin* intendedTargetOrigin, RawPtr<Event>, PassRefPtr<ScriptCallStack>);
+    void dispatchMessageEventWithOriginCheck(SecurityOrigin* intendedTargetOrigin, Event*, PassRefPtr<ScriptCallStack>);
 
     // Events
     // EventTarget API
@@ -202,8 +202,8 @@
 
 protected:
     // EventTarget overrides.
-    bool addEventListenerInternal(const AtomicString& eventType, RawPtr<EventListener>, const EventListenerOptions&) override;
-    bool removeEventListenerInternal(const AtomicString& eventType, RawPtr<EventListener>, const EventListenerOptions&) override;
+    bool addEventListenerInternal(const AtomicString& eventType, EventListener*, const EventListenerOptions&) override;
+    bool removeEventListenerInternal(const AtomicString& eventType, EventListener*, const EventListenerOptions&) override;
 
 private:
     // Rather than simply inheriting LocalFrameLifecycleObserver like most other
diff --git a/third_party/WebKit/Source/core/frame/LocalFrameLifecycleNotifier.cpp b/third_party/WebKit/Source/core/frame/LocalFrameLifecycleNotifier.cpp
index 000ab13..008e0971 100644
--- a/third_party/WebKit/Source/core/frame/LocalFrameLifecycleNotifier.cpp
+++ b/third_party/WebKit/Source/core/frame/LocalFrameLifecycleNotifier.cpp
@@ -11,22 +11,8 @@
 void LocalFrameLifecycleNotifier::notifyWillDetachFrameHost()
 {
     TemporaryChange<IterationType> scope(m_iterating, IteratingOverAll);
-#if !ENABLE(OILPAN)
-    // Notifications perform unknown amounts of heap allocations,
-    // which might trigger (conservative) GCs. This will flush out
-    // dead observers, causing the _non-heap_ set be updated. Snapshot
-    // the observers and explicitly check if they're still alive before
-    // notifying.
-    Vector<RawPtr<LocalFrameLifecycleObserver>> snapshotOfObservers;
-    copyToVector(m_observers, snapshotOfObservers);
-    for (LocalFrameLifecycleObserver* observer : snapshotOfObservers) {
-        if (m_observers.contains(observer))
-            observer->willDetachFrameHost();
-    }
-#else
     for (LocalFrameLifecycleObserver* observer : m_observers)
         observer->willDetachFrameHost();
-#endif
 }
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/core/html/HTMLDetailsElement.cpp b/third_party/WebKit/Source/core/html/HTMLDetailsElement.cpp
index a61f912..98ade4a 100644
--- a/third_party/WebKit/Source/core/html/HTMLDetailsElement.cpp
+++ b/third_party/WebKit/Source/core/html/HTMLDetailsElement.cpp
@@ -73,8 +73,8 @@
 
 static DetailsEventSender& detailsToggleEventSender()
 {
-    DEFINE_STATIC_LOCAL(Persistent<DetailsEventSender>, sharedToggleEventSender, (DetailsEventSender::create(EventTypeNames::toggle)));
-    return *sharedToggleEventSender;
+    DEFINE_STATIC_LOCAL(DetailsEventSender, sharedToggleEventSender, (DetailsEventSender::create(EventTypeNames::toggle)));
+    return sharedToggleEventSender;
 }
 
 RawPtr<HTMLDetailsElement> HTMLDetailsElement::create(Document& document)
diff --git a/third_party/WebKit/Source/core/html/HTMLFrameOwnerElement.cpp b/third_party/WebKit/Source/core/html/HTMLFrameOwnerElement.cpp
index 03cc78f..95fdf87 100644
--- a/third_party/WebKit/Source/core/html/HTMLFrameOwnerElement.cpp
+++ b/third_party/WebKit/Source/core/html/HTMLFrameOwnerElement.cpp
@@ -41,8 +41,8 @@
 typedef HeapHashMap<Member<Widget>, Member<FrameView>> WidgetToParentMap;
 static WidgetToParentMap& widgetNewParentMap()
 {
-    DEFINE_STATIC_LOCAL(Persistent<WidgetToParentMap>, map, (new WidgetToParentMap()));
-    return *map;
+    DEFINE_STATIC_LOCAL(WidgetToParentMap, map, (new WidgetToParentMap));
+    return map;
 }
 
 typedef HeapHashSet<Member<Widget>> WidgetSet;
@@ -50,14 +50,14 @@
 {
     // Widgets in this set will not leak because it will be cleared in
     // HTMLFrameOwnerElement::UpdateSuspendScope::performDeferredWidgetTreeOperations.
-    DEFINE_STATIC_LOCAL(Persistent<WidgetSet>, set, (new WidgetSet()));
-    return *set;
+    DEFINE_STATIC_LOCAL(WidgetSet, set, (new WidgetSet));
+    return set;
 }
 
 HeapHashCountedSet<Member<Node>>& SubframeLoadingDisabler::disabledSubtreeRoots()
 {
-    DEFINE_STATIC_LOCAL(Persistent<HeapHashCountedSet<Member<Node>>>, nodes, (new HeapHashCountedSet<Member<Node>>()));
-    return *nodes;
+    DEFINE_STATIC_LOCAL(HeapHashCountedSet<Member<Node>>, nodes, (new HeapHashCountedSet<Member<Node>>));
+    return nodes;
 }
 
 static unsigned s_updateSuspendCount = 0;
diff --git a/third_party/WebKit/Source/core/html/HTMLLinkElement.cpp b/third_party/WebKit/Source/core/html/HTMLLinkElement.cpp
index 9c5c7735..3bae4fa3 100644
--- a/third_party/WebKit/Source/core/html/HTMLLinkElement.cpp
+++ b/third_party/WebKit/Source/core/html/HTMLLinkElement.cpp
@@ -124,8 +124,8 @@
 
 static LinkEventSender& linkLoadEventSender()
 {
-    DEFINE_STATIC_LOCAL(Persistent<LinkEventSender>, sharedLoadEventSender, (LinkEventSender::create(EventTypeNames::load)));
-    return *sharedLoadEventSender;
+    DEFINE_STATIC_LOCAL(LinkEventSender, sharedLoadEventSender, (LinkEventSender::create(EventTypeNames::load)));
+    return sharedLoadEventSender;
 }
 
 static bool styleSheetTypeIsSupported(const String& type)
diff --git a/third_party/WebKit/Source/core/html/HTMLMediaElement.cpp b/third_party/WebKit/Source/core/html/HTMLMediaElement.cpp
index c1819813..0e2c06a 100644
--- a/third_party/WebKit/Source/core/html/HTMLMediaElement.cpp
+++ b/third_party/WebKit/Source/core/html/HTMLMediaElement.cpp
@@ -140,8 +140,8 @@
 
 DocumentElementSetMap& documentToElementSetMap()
 {
-    DEFINE_STATIC_LOCAL(Persistent<DocumentElementSetMap>, map, (new DocumentElementSetMap()));
-    return *map;
+    DEFINE_STATIC_LOCAL(DocumentElementSetMap, map, (new DocumentElementSetMap));
+    return map;
 }
 
 void addElementToDocumentMap(HTMLMediaElement* element, Document* document)
diff --git a/third_party/WebKit/Source/core/html/HTMLSourceElement.cpp b/third_party/WebKit/Source/core/html/HTMLSourceElement.cpp
index a84c285..2b34692 100644
--- a/third_party/WebKit/Source/core/html/HTMLSourceElement.cpp
+++ b/third_party/WebKit/Source/core/html/HTMLSourceElement.cpp
@@ -42,8 +42,8 @@
 
 static SourceEventSender& sourceErrorEventSender()
 {
-    DEFINE_STATIC_LOCAL(Persistent<SourceEventSender>, sharedErrorEventSender, (SourceEventSender::create(EventTypeNames::error)));
-    return *sharedErrorEventSender;
+    DEFINE_STATIC_LOCAL(SourceEventSender, sharedErrorEventSender, (SourceEventSender::create(EventTypeNames::error)));
+    return sharedErrorEventSender;
 }
 
 class HTMLSourceElement::Listener final : public MediaQueryListListener {
diff --git a/third_party/WebKit/Source/core/html/HTMLStyleElement.cpp b/third_party/WebKit/Source/core/html/HTMLStyleElement.cpp
index 030990a..439c342 100644
--- a/third_party/WebKit/Source/core/html/HTMLStyleElement.cpp
+++ b/third_party/WebKit/Source/core/html/HTMLStyleElement.cpp
@@ -37,8 +37,8 @@
 
 static StyleEventSender& styleLoadEventSender()
 {
-    DEFINE_STATIC_LOCAL(Persistent<StyleEventSender>, sharedLoadEventSender, (StyleEventSender::create(EventTypeNames::load)));
-    return *sharedLoadEventSender;
+    DEFINE_STATIC_LOCAL(StyleEventSender, sharedLoadEventSender, (StyleEventSender::create(EventTypeNames::load)));
+    return sharedLoadEventSender;
 }
 
 inline HTMLStyleElement::HTMLStyleElement(Document& document, bool createdByParser)
diff --git a/third_party/WebKit/Source/core/html/HTMLTableElement.cpp b/third_party/WebKit/Source/core/html/HTMLTableElement.cpp
index 95f52894..693c3941 100644
--- a/third_party/WebKit/Source/core/html/HTMLTableElement.cpp
+++ b/third_party/WebKit/Source/core/html/HTMLTableElement.cpp
@@ -410,18 +410,18 @@
         // Setting the border to 'hidden' allows it to win over any border
         // set on the table's cells during border-conflict resolution.
         if (m_rulesAttr != UnsetRules) {
-            DEFINE_STATIC_REF_WILL_BE_PERSISTENT(StylePropertySet, solidBorderStyle, (createBorderStyle(CSSValueHidden)));
-            return solidBorderStyle;
+            DEFINE_STATIC_LOCAL(StylePropertySet, solidBorderStyle, (createBorderStyle(CSSValueHidden)));
+            return &solidBorderStyle;
         }
         return nullptr;
     }
 
     if (m_borderColorAttr) {
-        DEFINE_STATIC_REF_WILL_BE_PERSISTENT(StylePropertySet, solidBorderStyle, (createBorderStyle(CSSValueSolid)));
-        return solidBorderStyle;
+        DEFINE_STATIC_LOCAL(StylePropertySet, solidBorderStyle, (createBorderStyle(CSSValueSolid)));
+        return &solidBorderStyle;
     }
-    DEFINE_STATIC_REF_WILL_BE_PERSISTENT(StylePropertySet, outsetBorderStyle, (createBorderStyle(CSSValueOutset)));
-    return outsetBorderStyle;
+    DEFINE_STATIC_LOCAL(StylePropertySet, outsetBorderStyle, (createBorderStyle(CSSValueOutset)));
+    return &outsetBorderStyle;
 }
 
 HTMLTableElement::CellBorders HTMLTableElement::getCellBorders() const
@@ -517,11 +517,11 @@
         return nullptr;
 
     if (rows) {
-        DEFINE_STATIC_REF_WILL_BE_PERSISTENT(StylePropertySet, rowBorderStyle, (createGroupBorderStyle(true)));
-        return rowBorderStyle;
+        DEFINE_STATIC_LOCAL(StylePropertySet, rowBorderStyle, (createGroupBorderStyle(true)));
+        return &rowBorderStyle;
     }
-    DEFINE_STATIC_REF_WILL_BE_PERSISTENT(StylePropertySet, columnBorderStyle, (createGroupBorderStyle(false)));
-    return columnBorderStyle;
+    DEFINE_STATIC_LOCAL(StylePropertySet, columnBorderStyle, (createGroupBorderStyle(false)));
+    return &columnBorderStyle;
 }
 
 bool HTMLTableElement::isURLAttribute(const Attribute& attribute) const
diff --git a/third_party/WebKit/Source/core/html/track/TextTrackCue.cpp b/third_party/WebKit/Source/core/html/track/TextTrackCue.cpp
index 50397c0..ece1cde 100644
--- a/third_party/WebKit/Source/core/html/track/TextTrackCue.cpp
+++ b/third_party/WebKit/Source/core/html/track/TextTrackCue.cpp
@@ -136,7 +136,7 @@
     return m_cueIndex;
 }
 
-DispatchEventResult TextTrackCue::dispatchEventInternal(RawPtr<Event> event)
+DispatchEventResult TextTrackCue::dispatchEventInternal(Event* event)
 {
     // When a TextTrack's mode is disabled: no cues are active, no events fired.
     if (!track() || track()->mode() == TextTrack::disabledKeyword())
diff --git a/third_party/WebKit/Source/core/html/track/TextTrackCue.h b/third_party/WebKit/Source/core/html/track/TextTrackCue.h
index 4dc1aa4..0b58eb5 100644
--- a/third_party/WebKit/Source/core/html/track/TextTrackCue.h
+++ b/third_party/WebKit/Source/core/html/track/TextTrackCue.h
@@ -109,7 +109,7 @@
 
     void cueWillChange();
     virtual void cueDidChange();
-    DispatchEventResult dispatchEventInternal(RawPtr<Event>) override;
+    DispatchEventResult dispatchEventInternal(Event*) override;
 
 private:
     AtomicString m_id;
diff --git a/third_party/WebKit/Source/core/input/EventHandler.cpp b/third_party/WebKit/Source/core/input/EventHandler.cpp
index b403fec..ae2dd983 100644
--- a/third_party/WebKit/Source/core/input/EventHandler.cpp
+++ b/third_party/WebKit/Source/core/input/EventHandler.cpp
@@ -301,8 +301,8 @@
 
 DragState& EventHandler::dragState()
 {
-    DEFINE_STATIC_LOCAL(Persistent<DragState>, state, (new DragState()));
-    return *state;
+    DEFINE_STATIC_LOCAL(DragState, state, (new DragState));
+    return state;
 }
 
 void EventHandler::clear()
diff --git a/third_party/WebKit/Source/core/input/InputDeviceCapabilities.cpp b/third_party/WebKit/Source/core/input/InputDeviceCapabilities.cpp
index 5c60e53..50f8f95 100644
--- a/third_party/WebKit/Source/core/input/InputDeviceCapabilities.cpp
+++ b/third_party/WebKit/Source/core/input/InputDeviceCapabilities.cpp
@@ -22,14 +22,14 @@
 
 InputDeviceCapabilities* InputDeviceCapabilities::firesTouchEventsSourceCapabilities()
 {
-    DEFINE_STATIC_LOCAL(Persistent<InputDeviceCapabilities>, instance, (InputDeviceCapabilities::create(true)));
-    return instance;
+    DEFINE_STATIC_LOCAL(InputDeviceCapabilities, instance, (InputDeviceCapabilities::create(true)));
+    return &instance;
 }
 
 InputDeviceCapabilities* InputDeviceCapabilities::doesntFireTouchEventsSourceCapabilities()
 {
-    DEFINE_STATIC_LOCAL(Persistent<InputDeviceCapabilities>, instance, (InputDeviceCapabilities::create(false)));
-    return instance;
+    DEFINE_STATIC_LOCAL(InputDeviceCapabilities, instance, (InputDeviceCapabilities::create(false)));
+    return &instance;
 }
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/core/layout/LayoutTestHelper.cpp b/third_party/WebKit/Source/core/layout/LayoutTestHelper.cpp
index 8935433..0ea264d 100644
--- a/third_party/WebKit/Source/core/layout/LayoutTestHelper.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutTestHelper.cpp
@@ -17,8 +17,8 @@
 {
     Page::PageClients pageClients;
     fillWithEmptyClients(pageClients);
-    DEFINE_STATIC_LOCAL(Persistent<EmptyChromeClient>, chromeClient, (EmptyChromeClient::create()));
-    pageClients.chromeClient = chromeClient.get();
+    DEFINE_STATIC_LOCAL(EmptyChromeClient, chromeClient, (EmptyChromeClient::create()));
+    pageClients.chromeClient = &chromeClient;
     m_pageHolder = DummyPageHolder::create(IntSize(800, 600), &pageClients, m_frameLoaderClient.release(), settingOverrider());
 
     Settings::setMockScrollbarsEnabled(true);
diff --git a/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceContainer.cpp b/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceContainer.cpp
index 176e2f4b..2a69263 100644
--- a/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceContainer.cpp
+++ b/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceContainer.cpp
@@ -289,17 +289,17 @@
     // reference graph adjustments on changes, so we need to break possible cycles here.
     // This strong reference is safe, as it is guaranteed that this set will be emptied
     // at the end of recursion.
-    DEFINE_STATIC_LOCAL(Persistent<SVGElementSet>, invalidatingDependencies, (new SVGElementSet));
+    DEFINE_STATIC_LOCAL(SVGElementSet, invalidatingDependencies, (new SVGElementSet));
 
     for (SVGElement* element : *dependencies) {
         if (LayoutObject* layoutObject = element->layoutObject()) {
-            if (UNLIKELY(!invalidatingDependencies->add(element).isNewEntry)) {
+            if (UNLIKELY(!invalidatingDependencies.add(element).isNewEntry)) {
                 // Reference cycle: we are in process of invalidating this dependant.
                 continue;
             }
 
             LayoutSVGResourceContainer::markForLayoutAndParentResourceInvalidation(layoutObject, needsLayout);
-            invalidatingDependencies->remove(element);
+            invalidatingDependencies.remove(element);
         }
     }
 }
diff --git a/third_party/WebKit/Source/core/loader/EmptyClients.cpp b/third_party/WebKit/Source/core/loader/EmptyClients.cpp
index decc957..94e8e6c 100644
--- a/third_party/WebKit/Source/core/loader/EmptyClients.cpp
+++ b/third_party/WebKit/Source/core/loader/EmptyClients.cpp
@@ -45,8 +45,8 @@
 
 void fillWithEmptyClients(Page::PageClients& pageClients)
 {
-    DEFINE_STATIC_LOCAL(Persistent<ChromeClient>, dummyChromeClient, (EmptyChromeClient::create()));
-    pageClients.chromeClient = dummyChromeClient.get();
+    DEFINE_STATIC_LOCAL(ChromeClient, dummyChromeClient, (EmptyChromeClient::create()));
+    pageClients.chromeClient = &dummyChromeClient;
 
     DEFINE_STATIC_LOCAL(EmptyContextMenuClient, dummyContextMenuClient, ());
     pageClients.contextMenuClient = &dummyContextMenuClient;
diff --git a/third_party/WebKit/Source/core/loader/ImageLoader.cpp b/third_party/WebKit/Source/core/loader/ImageLoader.cpp
index 5c9ed3d..542f881 100644
--- a/third_party/WebKit/Source/core/loader/ImageLoader.cpp
+++ b/third_party/WebKit/Source/core/loader/ImageLoader.cpp
@@ -54,14 +54,14 @@
 
 static ImageEventSender& loadEventSender()
 {
-    DEFINE_STATIC_LOCAL(Persistent<ImageEventSender>, sender, (ImageEventSender::create(EventTypeNames::load)));
-    return *sender;
+    DEFINE_STATIC_LOCAL(ImageEventSender, sender, (ImageEventSender::create(EventTypeNames::load)));
+    return sender;
 }
 
 static ImageEventSender& errorEventSender()
 {
-    DEFINE_STATIC_LOCAL(Persistent<ImageEventSender>, sender, (ImageEventSender::create(EventTypeNames::error)));
-    return *sender;
+    DEFINE_STATIC_LOCAL(ImageEventSender, sender, (ImageEventSender::create(EventTypeNames::error)));
+    return sender;
 }
 
 static inline bool pageIsBeingDismissed(Document* document)
diff --git a/third_party/WebKit/Source/core/page/PageLifecycleNotifier.cpp b/third_party/WebKit/Source/core/page/PageLifecycleNotifier.cpp
index 0a623e1..5a6db288 100644
--- a/third_party/WebKit/Source/core/page/PageLifecycleNotifier.cpp
+++ b/third_party/WebKit/Source/core/page/PageLifecycleNotifier.cpp
@@ -33,43 +33,15 @@
 void PageLifecycleNotifier::notifyPageVisibilityChanged()
 {
     TemporaryChange<IterationType> scope(m_iterating, IteratingOverAll);
-#if !ENABLE(OILPAN)
-    // Notifications perform unknown amounts of heap allocations,
-    // which might trigger (conservative) GCs. This will flush out
-    // dead observers, causing the _non-heap_ set be updated. Snapshot
-    // the observers and explicitly check if they're still alive before
-    // notifying.
-    Vector<RawPtr<PageLifecycleObserver>> snapshotOfObservers;
-    copyToVector(m_observers, snapshotOfObservers);
-    for (PageLifecycleObserver* observer : snapshotOfObservers) {
-        if (m_observers.contains(observer))
-            observer->pageVisibilityChanged();
-    }
-#else
     for (PageLifecycleObserver* observer : m_observers)
         observer->pageVisibilityChanged();
-#endif
 }
 
 void PageLifecycleNotifier::notifyDidCommitLoad(LocalFrame* frame)
 {
     TemporaryChange<IterationType> scope(m_iterating, IteratingOverAll);
-#if !ENABLE(OILPAN)
-    // Notifications perform unknown amounts of heap allocations,
-    // which might trigger (conservative) GCs. This will flush out
-    // dead observers, causing the _non-heap_ set be updated. Snapshot
-    // the observers and explicitly check if they're still alive before
-    // notifying.
-    Vector<RawPtr<PageLifecycleObserver>> snapshotOfObservers;
-    copyToVector(m_observers, snapshotOfObservers);
-    for (PageLifecycleObserver* observer : snapshotOfObservers) {
-        if (m_observers.contains(observer))
-            observer->didCommitLoad(frame);
-    }
-#else
     for (PageLifecycleObserver* observer : m_observers)
         observer->didCommitLoad(frame);
-#endif
 }
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/core/paint/FilterEffectBuilder.cpp b/third_party/WebKit/Source/core/paint/FilterEffectBuilder.cpp
index 1f2020e8..8d231ac 100644
--- a/third_party/WebKit/Source/core/paint/FilterEffectBuilder.cpp
+++ b/third_party/WebKit/Source/core/paint/FilterEffectBuilder.cpp
@@ -134,14 +134,14 @@
 bool FilterEffectBuilder::build(Element* element, const FilterOperations& operations, float zoom, const FloatSize* referenceBoxSize, const SkPaint* fillPaint, const SkPaint* strokePaint)
 {
     // Create a parent filter for shorthand filters. These have already been scaled by the CSS code for page zoom, so scale is 1.0 here.
-    RawPtr<Filter> parentFilter = Filter::create(1.0f);
-    RawPtr<FilterEffect> previousEffect = parentFilter->getSourceGraphic();
+    Filter* parentFilter = Filter::create(1.0f);
+    FilterEffect* previousEffect = parentFilter->getSourceGraphic();
     for (size_t i = 0; i < operations.operations().size(); ++i) {
-        RawPtr<FilterEffect> effect = nullptr;
+        FilterEffect* effect = nullptr;
         FilterOperation* filterOperation = operations.operations().at(i).get();
         switch (filterOperation->type()) {
         case FilterOperation::REFERENCE: {
-            RawPtr<Filter> referenceFilter = ReferenceFilterBuilder::build(zoom, element, previousEffect.get(), toReferenceFilterOperation(*filterOperation), referenceBoxSize, fillPaint, strokePaint);
+            Filter* referenceFilter = ReferenceFilterBuilder::build(zoom, element, previousEffect, toReferenceFilterOperation(*filterOperation), referenceBoxSize, fillPaint, strokePaint);
             if (referenceFilter) {
                 effect = referenceFilter->lastEffect();
                 m_referenceFilters.append(referenceFilter);
@@ -150,24 +150,24 @@
         }
         case FilterOperation::GRAYSCALE: {
             Vector<float> inputParameters = grayscaleMatrix(toBasicColorMatrixFilterOperation(filterOperation)->amount());
-            effect = FEColorMatrix::create(parentFilter.get(), FECOLORMATRIX_TYPE_MATRIX, inputParameters);
+            effect = FEColorMatrix::create(parentFilter, FECOLORMATRIX_TYPE_MATRIX, inputParameters);
             break;
         }
         case FilterOperation::SEPIA: {
             Vector<float> inputParameters = sepiaMatrix(toBasicColorMatrixFilterOperation(filterOperation)->amount());
-            effect = FEColorMatrix::create(parentFilter.get(), FECOLORMATRIX_TYPE_MATRIX, inputParameters);
+            effect = FEColorMatrix::create(parentFilter, FECOLORMATRIX_TYPE_MATRIX, inputParameters);
             break;
         }
         case FilterOperation::SATURATE: {
             Vector<float> inputParameters;
             inputParameters.append(narrowPrecisionToFloat(toBasicColorMatrixFilterOperation(filterOperation)->amount()));
-            effect = FEColorMatrix::create(parentFilter.get(), FECOLORMATRIX_TYPE_SATURATE, inputParameters);
+            effect = FEColorMatrix::create(parentFilter, FECOLORMATRIX_TYPE_SATURATE, inputParameters);
             break;
         }
         case FilterOperation::HUE_ROTATE: {
             Vector<float> inputParameters;
             inputParameters.append(narrowPrecisionToFloat(toBasicColorMatrixFilterOperation(filterOperation)->amount()));
-            effect = FEColorMatrix::create(parentFilter.get(), FECOLORMATRIX_TYPE_HUEROTATE, inputParameters);
+            effect = FEColorMatrix::create(parentFilter, FECOLORMATRIX_TYPE_HUEROTATE, inputParameters);
             break;
         }
         case FilterOperation::INVERT: {
@@ -180,7 +180,7 @@
             transferFunction.tableValues = transferParameters;
 
             ComponentTransferFunction nullFunction;
-            effect = FEComponentTransfer::create(parentFilter.get(), transferFunction, transferFunction, transferFunction, nullFunction);
+            effect = FEComponentTransfer::create(parentFilter, transferFunction, transferFunction, transferFunction, nullFunction);
             break;
         }
         case FilterOperation::OPACITY: {
@@ -192,7 +192,7 @@
             transferFunction.tableValues = transferParameters;
 
             ComponentTransferFunction nullFunction;
-            effect = FEComponentTransfer::create(parentFilter.get(), nullFunction, nullFunction, nullFunction, transferFunction);
+            effect = FEComponentTransfer::create(parentFilter, nullFunction, nullFunction, nullFunction, transferFunction);
             break;
         }
         case FilterOperation::BRIGHTNESS: {
@@ -202,7 +202,7 @@
             transferFunction.intercept = 0;
 
             ComponentTransferFunction nullFunction;
-            effect = FEComponentTransfer::create(parentFilter.get(), transferFunction, transferFunction, transferFunction, nullFunction);
+            effect = FEComponentTransfer::create(parentFilter, transferFunction, transferFunction, transferFunction, nullFunction);
             break;
         }
         case FilterOperation::CONTRAST: {
@@ -213,12 +213,12 @@
             transferFunction.intercept = -0.5 * amount + 0.5;
 
             ComponentTransferFunction nullFunction;
-            effect = FEComponentTransfer::create(parentFilter.get(), transferFunction, transferFunction, transferFunction, nullFunction);
+            effect = FEComponentTransfer::create(parentFilter, transferFunction, transferFunction, transferFunction, nullFunction);
             break;
         }
         case FilterOperation::BLUR: {
             float stdDeviation = floatValueForLength(toBlurFilterOperation(filterOperation)->stdDeviation(), 0);
-            effect = FEGaussianBlur::create(parentFilter.get(), stdDeviation, stdDeviation);
+            effect = FEGaussianBlur::create(parentFilter, stdDeviation, stdDeviation);
             break;
         }
         case FilterOperation::DROP_SHADOW: {
@@ -226,12 +226,12 @@
             float stdDeviation = dropShadowOperation->stdDeviation();
             float x = dropShadowOperation->x();
             float y = dropShadowOperation->y();
-            effect = FEDropShadow::create(parentFilter.get(), stdDeviation, stdDeviation, x, y, dropShadowOperation->getColor(), 1);
+            effect = FEDropShadow::create(parentFilter, stdDeviation, stdDeviation, x, y, dropShadowOperation->getColor(), 1);
             break;
         }
         case FilterOperation::BOX_REFLECT: {
             BoxReflectFilterOperation* boxReflectOperation = toBoxReflectFilterOperation(filterOperation);
-            effect = FEBoxReflect::create(parentFilter.get(), boxReflectOperation->direction(), boxReflectOperation->offset());
+            effect = FEBoxReflect::create(parentFilter, boxReflectOperation->direction(), boxReflectOperation->offset());
             break;
         }
         default:
@@ -247,7 +247,7 @@
             }
             if (previousEffect->originTainted())
                 effect->setOriginTainted();
-            previousEffect = effect.release();
+            previousEffect = effect;
         }
     }
 
diff --git a/third_party/WebKit/Source/core/paint/FilterEffectBuilder.h b/third_party/WebKit/Source/core/paint/FilterEffectBuilder.h
index 0b9e1c4e..783c8b4 100644
--- a/third_party/WebKit/Source/core/paint/FilterEffectBuilder.h
+++ b/third_party/WebKit/Source/core/paint/FilterEffectBuilder.h
@@ -44,7 +44,7 @@
 
 class CORE_EXPORT FilterEffectBuilder final : public GarbageCollectedFinalized<FilterEffectBuilder> {
 public:
-    static RawPtr<FilterEffectBuilder> create()
+    static FilterEffectBuilder* create()
     {
         return new FilterEffectBuilder();
     }
@@ -54,7 +54,7 @@
 
     bool build(Element*, const FilterOperations&, float zoom, const FloatSize* referenceBoxSize = nullptr, const SkPaint* fillPaint = nullptr, const SkPaint* strokePaint = nullptr);
 
-    RawPtr<FilterEffect> lastEffect() const
+    FilterEffect* lastEffect() const
     {
         return m_lastEffect;
     }
diff --git a/third_party/WebKit/Source/core/paint/FilterPainter.cpp b/third_party/WebKit/Source/core/paint/FilterPainter.cpp
index 6e0ceeba..7665a1ff 100644
--- a/third_party/WebKit/Source/core/paint/FilterPainter.cpp
+++ b/third_party/WebKit/Source/core/paint/FilterPainter.cpp
@@ -30,7 +30,7 @@
     if (!layer.paintsWithFilters())
         return;
 
-    RawPtr<FilterEffect> lastEffect = layer.lastFilterEffect();
+    FilterEffect* lastEffect = layer.lastFilterEffect();
     if (!lastEffect)
         return;
 
@@ -38,7 +38,7 @@
 
     SkiaImageFilterBuilder builder;
     lastEffect->determineFilterPrimitiveSubregion(MapRectForward);
-    RefPtr<SkImageFilter> imageFilter = builder.build(lastEffect.get(), ColorSpaceDeviceRGB);
+    RefPtr<SkImageFilter> imageFilter = builder.build(lastEffect, ColorSpaceDeviceRGB);
     if (!imageFilter)
         return;
 
diff --git a/third_party/WebKit/Source/core/paint/NinePieceImageGridTest.cpp b/third_party/WebKit/Source/core/paint/NinePieceImageGridTest.cpp
index e479595..5244aab8 100644
--- a/third_party/WebKit/Source/core/paint/NinePieceImageGridTest.cpp
+++ b/third_party/WebKit/Source/core/paint/NinePieceImageGridTest.cpp
@@ -18,9 +18,9 @@
 public:
     NinePieceImageGridTest() { }
 
-    RawPtr<StyleImage> generatedImage()
+    StyleImage* generatedImage()
     {
-        RawPtr<CSSLinearGradientValue> gradient = CSSLinearGradientValue::create(Repeating);
+        CSSLinearGradientValue* gradient = CSSLinearGradientValue::create(Repeating);
         return StyleGeneratedImage::create(*gradient);
     }
 
diff --git a/third_party/WebKit/Source/core/paint/PaintLayer.cpp b/third_party/WebKit/Source/core/paint/PaintLayer.cpp
index 598e148..06181e6d 100644
--- a/third_party/WebKit/Source/core/paint/PaintLayer.cpp
+++ b/third_party/WebKit/Source/core/paint/PaintLayer.cpp
@@ -2600,8 +2600,8 @@
                 continue;
             ReferenceFilterOperation& referenceOperation = toReferenceFilterOperation(*filterOperation);
             // FIXME: Cache the Filter if it didn't change.
-            RawPtr<Filter> referenceFilter = ReferenceFilterBuilder::build(effectiveZoom, toElement(enclosingNode), nullptr, referenceOperation);
-            referenceOperation.setFilter(referenceFilter.release());
+            Filter* referenceFilter = ReferenceFilterBuilder::build(effectiveZoom, toElement(enclosingNode), nullptr, referenceOperation);
+            referenceOperation.setFilter(referenceFilter);
         }
     }
 
@@ -2705,7 +2705,7 @@
     FilterEffectBuilder* builder = updateFilterEffectBuilder();
     if (!builder)
         return nullptr;
-    return builder->lastEffect().get();
+    return builder->lastEffect();
 }
 
 bool PaintLayer::hasFilterOutsets() const
diff --git a/third_party/WebKit/Source/core/paint/PaintLayerFilterInfo.cpp b/third_party/WebKit/Source/core/paint/PaintLayerFilterInfo.cpp
index ff4f036..8bc4351e 100644
--- a/third_party/WebKit/Source/core/paint/PaintLayerFilterInfo.cpp
+++ b/third_party/WebKit/Source/core/paint/PaintLayerFilterInfo.cpp
@@ -45,7 +45,7 @@
     clearFilterReferences();
 }
 
-void PaintLayerFilterInfo::setBuilder(RawPtr<FilterEffectBuilder> builder)
+void PaintLayerFilterInfo::setBuilder(FilterEffectBuilder* builder)
 {
     m_builder = builder;
 }
diff --git a/third_party/WebKit/Source/core/paint/PaintLayerFilterInfo.h b/third_party/WebKit/Source/core/paint/PaintLayerFilterInfo.h
index bbf317e..2ab332a 100644
--- a/third_party/WebKit/Source/core/paint/PaintLayerFilterInfo.h
+++ b/third_party/WebKit/Source/core/paint/PaintLayerFilterInfo.h
@@ -59,7 +59,7 @@
     ~PaintLayerFilterInfo() override;
 
     FilterEffectBuilder* builder() const { return m_builder.get(); }
-    void setBuilder(RawPtr<FilterEffectBuilder>);
+    void setBuilder(FilterEffectBuilder*);
 
     void updateReferenceFilterClients(const FilterOperations&);
 
diff --git a/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp b/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp
index 44b2e81d..1d7e4bb 100644
--- a/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp
+++ b/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp
@@ -344,7 +344,7 @@
     LocalFrame* frame = box().frame();
     ASSERT(frame);
 
-    RawPtr<FrameView> frameView = box().frameView();
+    FrameView* frameView = box().frameView();
 
     TRACE_EVENT1("devtools.timeline", "ScrollLayer", "data", InspectorScrollLayerEvent::data(&box()));
 
@@ -1545,10 +1545,10 @@
     }
 }
 
-RawPtr<Scrollbar> PaintLayerScrollableArea::ScrollbarManager::createScrollbar(ScrollbarOrientation orientation)
+Scrollbar* PaintLayerScrollableArea::ScrollbarManager::createScrollbar(ScrollbarOrientation orientation)
 {
     ASSERT(orientation == HorizontalScrollbar ? !m_hBarIsAttached : !m_vBarIsAttached);
-    RawPtr<Scrollbar> scrollbar = nullptr;
+    Scrollbar* scrollbar = nullptr;
     const LayoutObject& actualLayoutObject = layoutObjectForScrollbar(m_scrollableArea->box());
     bool hasCustomScrollbarStyle = actualLayoutObject.isBox() && actualLayoutObject.styleRef().hasPseudoStyle(PseudoIdScrollbar);
     if (hasCustomScrollbarStyle) {
@@ -1559,8 +1559,8 @@
             scrollbarSize = LayoutTheme::theme().scrollbarControlSizeForPart(actualLayoutObject.styleRef().appearance());
         scrollbar = Scrollbar::create(m_scrollableArea.get(), orientation, scrollbarSize, &m_scrollableArea->box().frame()->page()->chromeClient());
     }
-    m_scrollableArea->box().document().view()->addChild(scrollbar.get());
-    return scrollbar.release();
+    m_scrollableArea->box().document().view()->addChild(scrollbar);
+    return scrollbar;
 }
 
 void PaintLayerScrollableArea::ScrollbarManager::destroyScrollbar(ScrollbarOrientation orientation)
diff --git a/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.h b/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.h
index bca49031..ba390ad0 100644
--- a/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.h
+++ b/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.h
@@ -139,7 +139,7 @@
         DECLARE_TRACE();
 
     private:
-        RawPtr<Scrollbar> createScrollbar(ScrollbarOrientation);
+        Scrollbar* createScrollbar(ScrollbarOrientation);
         void destroyScrollbar(ScrollbarOrientation);
 
     private:
@@ -157,7 +157,7 @@
 public:
     // FIXME: We should pass in the LayoutBox but this opens a window
     // for crashers during PaintLayer setup (see crbug.com/368062).
-    static RawPtr<PaintLayerScrollableArea> create(PaintLayer& layer)
+    static PaintLayerScrollableArea* create(PaintLayer& layer)
     {
         return new PaintLayerScrollableArea(layer);
     }
diff --git a/third_party/WebKit/Source/core/paint/SVGFilterPainter.cpp b/third_party/WebKit/Source/core/paint/SVGFilterPainter.cpp
index f4fe2b7..9472e62 100644
--- a/third_party/WebKit/Source/core/paint/SVGFilterPainter.cpp
+++ b/third_party/WebKit/Source/core/paint/SVGFilterPainter.cpp
@@ -118,7 +118,7 @@
         return nullptr;
     }
 
-    RawPtr<FilterData> filterData = FilterData::create();
+    FilterData* filterData = FilterData::create();
     FloatRect referenceBox = object.objectBoundingBox();
 
     SVGFilterElement* filterElement = toSVGFilterElement(m_filter.element());
@@ -146,10 +146,9 @@
     lastEffect->determineFilterPrimitiveSubregion(ClipToFilterRegion);
     filterData->filter->setLastEffect(lastEffect);
 
-    FilterData* data = filterData.get();
     // TODO(pdr): Can this be moved out of painter?
-    m_filter.setFilterDataForLayoutObject(const_cast<LayoutObject*>(&object), filterData.release());
-    return recordingContext.beginContent(data);
+    m_filter.setFilterDataForLayoutObject(const_cast<LayoutObject*>(&object), filterData);
+    return recordingContext.beginContent(filterData);
 }
 
 void SVGFilterPainter::finishEffect(const LayoutObject& object, SVGFilterRecordingContext& recordingContext)
diff --git a/third_party/WebKit/Source/core/paint/ThemePainter.cpp b/third_party/WebKit/Source/core/paint/ThemePainter.cpp
index 4e9180c..111873c4 100644
--- a/third_party/WebKit/Source/core/paint/ThemePainter.cpp
+++ b/third_party/WebKit/Source/core/paint/ThemePainter.cpp
@@ -282,7 +282,7 @@
         tickRegionSideMargin = trackBounds.y() + (thumbSize.width() - tickSize.width() * zoomFactor) / 2.0;
         tickRegionWidth = trackBounds.height() - thumbSize.width();
     }
-    RawPtr<HTMLDataListOptionsCollection> options = dataList->options();
+    HTMLDataListOptionsCollection* options = dataList->options();
     for (unsigned i = 0; HTMLOptionElement* optionElement = options->item(i); i++) {
         String value = optionElement->value();
         if (!input->isValidValue(value))
diff --git a/third_party/WebKit/Source/core/style/ComputedStyle.cpp b/third_party/WebKit/Source/core/style/ComputedStyle.cpp
index 9e0fa545..49e5bca 100644
--- a/third_party/WebKit/Source/core/style/ComputedStyle.cpp
+++ b/third_party/WebKit/Source/core/style/ComputedStyle.cpp
@@ -816,19 +816,14 @@
     }
 }
 
-void ComputedStyle::addCursor(RawPtr<StyleImage> image, bool hotSpotSpecified, const IntPoint& hotSpot)
+void ComputedStyle::addCursor(StyleImage* image, bool hotSpotSpecified, const IntPoint& hotSpot)
 {
-    if (!rareInheritedData.access()->cursorData) {
-#if ENABLE(OILPAN)
+    if (!rareInheritedData.access()->cursorData)
         rareInheritedData.access()->cursorData = new CursorList;
-#else
-        rareInheritedData.access()->cursorData = CursorList::create();
-#endif
-    }
     rareInheritedData.access()->cursorData->append(CursorData(image, hotSpotSpecified, hotSpot));
 }
 
-void ComputedStyle::setCursorList(RawPtr<CursorList> other)
+void ComputedStyle::setCursorList(CursorList* other)
 {
     rareInheritedData.access()->cursorData = other;
 }
@@ -856,7 +851,7 @@
         rareNonInheritedData.access()->m_content = nullptr;
 }
 
-void ComputedStyle::appendContent(RawPtr<ContentData> contentData)
+void ComputedStyle::appendContent(ContentData* contentData)
 {
     Persistent<ContentData>& content = rareNonInheritedData.access()->m_content;
     if (!content) {
@@ -869,7 +864,7 @@
     lastContent->setNext(contentData);
 }
 
-void ComputedStyle::setContent(RawPtr<StyleImage> image)
+void ComputedStyle::setContent(StyleImage* image)
 {
     appendContent(ContentData::create(image));
 }
@@ -1065,7 +1060,7 @@
 }
 
 StyleImage* ComputedStyle::listStyleImage() const { return rareInheritedData->listStyleImage.get(); }
-void ComputedStyle::setListStyleImage(RawPtr<StyleImage> v)
+void ComputedStyle::setListStyleImage(StyleImage* v)
 {
     if (rareInheritedData->listStyleImage != v)
         rareInheritedData.access()->listStyleImage = v;
@@ -1744,19 +1739,17 @@
     return LayoutTheme::tapHighlightColor();
 }
 
-#if ENABLE(OILPAN)
 const FilterOperations& ComputedStyle::initialFilter()
 {
-    DEFINE_STATIC_LOCAL(Persistent<FilterOperationsWrapper>, ops, (FilterOperationsWrapper::create()));
-    return ops->operations();
+    DEFINE_STATIC_LOCAL(FilterOperationsWrapper, ops, (FilterOperationsWrapper::create()));
+    return ops.operations();
 }
 
 const FilterOperations& ComputedStyle::initialBackdropFilter()
 {
-    DEFINE_STATIC_LOCAL(Persistent<FilterOperationsWrapper>, ops, (FilterOperationsWrapper::create()));
-    return ops->operations();
+    DEFINE_STATIC_LOCAL(FilterOperationsWrapper, ops, (FilterOperationsWrapper::create()));
+    return ops.operations();
 }
-#endif
 
 LayoutRectOutsets ComputedStyle::imageOutsets(const NinePieceImage& image) const
 {
@@ -1767,9 +1760,9 @@
         NinePieceImage::computeOutset(image.outset().left(), borderLeftWidth()));
 }
 
-void ComputedStyle::setBorderImageSource(RawPtr<StyleImage> image)
+void ComputedStyle::setBorderImageSource(StyleImage* image)
 {
-    if (surround->border.m_image.image() == image.get())
+    if (surround->border.m_image.image() == image)
         return;
     surround.access()->border.m_image.setImage(image);
 }
diff --git a/third_party/WebKit/Source/core/style/ComputedStyle.h b/third_party/WebKit/Source/core/style/ComputedStyle.h
index b6b95349..e8cfa48 100644
--- a/third_party/WebKit/Source/core/style/ComputedStyle.h
+++ b/third_party/WebKit/Source/core/style/ComputedStyle.h
@@ -1102,7 +1102,7 @@
     void setBackgroundColor(const StyleColor& v) { SET_VAR(m_background, m_color, v); }
 
     void setBorderImage(const NinePieceImage& b) { SET_VAR(surround, border.m_image, b); }
-    void setBorderImageSource(RawPtr<StyleImage>);
+    void setBorderImageSource(StyleImage*);
     void setBorderImageSlices(const LengthBox&);
     void setBorderImageSlicesFill(bool);
     void setBorderImageWidth(const BorderImageLengthBox&);
@@ -1226,7 +1226,7 @@
     }
 
     void setMaskBoxImage(const NinePieceImage& b) { SET_VAR(rareNonInheritedData, m_maskBoxImage, b); }
-    void setMaskBoxImageSource(RawPtr<StyleImage> v) { rareNonInheritedData.access()->m_maskBoxImage.setImage(v); }
+    void setMaskBoxImageSource(StyleImage* v) { rareNonInheritedData.access()->m_maskBoxImage.setImage(v); }
     void setMaskBoxImageSlices(const LengthBox& slices)
     {
         rareNonInheritedData.access()->m_maskBoxImage.setImageSlices(slices);
@@ -1251,7 +1251,7 @@
     void setCaptionSide(ECaptionSide v) { inherited_flags._caption_side = v; }
 
     void setListStyleType(EListStyleType v) { inherited_flags._list_style_type = v; }
-    void setListStyleImage(RawPtr<StyleImage>);
+    void setListStyleImage(StyleImage*);
     void setListStylePosition(EListStylePosition v) { inherited_flags._list_style_position = v; }
 
     void setMarginTop(const Length& v) { SET_VAR(surround, margin.m_top, v); }
@@ -1269,8 +1269,8 @@
     void setPaddingRight(const Length& v) { SET_VAR(surround, padding.m_right, v); }
 
     void setCursor(ECursor c) { inherited_flags._cursor_style = c; }
-    void addCursor(RawPtr<StyleImage>, bool hotSpotSpecified, const IntPoint& hotSpot = IntPoint());
-    void setCursorList(RawPtr<CursorList>);
+    void addCursor(StyleImage*, bool hotSpotSpecified, const IntPoint& hotSpot = IntPoint());
+    void setCursorList(CursorList*);
     void clearCursorList();
 
     void setInsideLink(EInsideLink insideLink) { inherited_flags._insideLink = insideLink; }
@@ -1555,7 +1555,7 @@
         svgStyle.setBaselineShiftValue(value);
     }
 
-    void setShapeOutside(RawPtr<ShapeValue> value)
+    void setShapeOutside(ShapeValue* value)
     {
         if (rareNonInheritedData->m_shapeOutside == value)
             return;
@@ -1591,7 +1591,7 @@
     bool contentDataEquivalent(const ComputedStyle* otherStyle) const { return const_cast<ComputedStyle*>(this)->rareNonInheritedData->contentDataEquivalent(*const_cast<ComputedStyle*>(otherStyle)->rareNonInheritedData); }
     void clearContent();
     void setContent(const String&);
-    void setContent(RawPtr<StyleImage>);
+    void setContent(StyleImage*);
     void setContent(PassOwnPtr<CounterContent>);
     void setContent(QuoteType);
 
@@ -1852,13 +1852,8 @@
     static LineClampValue initialLineClamp() { return LineClampValue(); }
     static ETextSecurity initialTextSecurity() { return TSNONE; }
     static Color initialTapHighlightColor();
-#if ENABLE(OILPAN)
     static const FilterOperations& initialFilter();
     static const FilterOperations& initialBackdropFilter();
-#else
-    static const FilterOperations& initialFilter() { DEFINE_STATIC_LOCAL(FilterOperations, ops, ()); return ops; }
-    static const FilterOperations& initialBackdropFilter() { DEFINE_STATIC_LOCAL(FilterOperations, ops, ()); return ops; }
-#endif
     static WebBlendMode initialBlendMode() { return WebBlendModeNormal; }
     static EIsolation initialIsolation() { return IsolationAuto; }
 private:
@@ -1931,7 +1926,7 @@
     Color floodColor() const { return svgStyle().floodColor(); }
     Color lightingColor() const { return svgStyle().lightingColor(); }
 
-    void appendContent(RawPtr<ContentData>);
+    void appendContent(ContentData*);
     void addAppliedTextDecoration(const AppliedTextDecoration&);
     void applyMotionPathTransform(float originX, float originY, TransformationMatrix&) const;
 
diff --git a/third_party/WebKit/Source/core/style/ComputedStyleTest.cpp b/third_party/WebKit/Source/core/style/ComputedStyleTest.cpp
index 5ae2f3c..410807c 100644
--- a/third_party/WebKit/Source/core/style/ComputedStyleTest.cpp
+++ b/third_party/WebKit/Source/core/style/ComputedStyleTest.cpp
@@ -12,8 +12,8 @@
 
 TEST(ComputedStyleTest, ShapeOutsideBoxEqual)
 {
-    RawPtr<ShapeValue> shape1 = ShapeValue::createBoxShapeValue(ContentBox);
-    RawPtr<ShapeValue> shape2 = ShapeValue::createBoxShapeValue(ContentBox);
+    ShapeValue* shape1 = ShapeValue::createBoxShapeValue(ContentBox);
+    ShapeValue* shape2 = ShapeValue::createBoxShapeValue(ContentBox);
     RefPtr<ComputedStyle> style1 = ComputedStyle::create();
     RefPtr<ComputedStyle> style2 = ComputedStyle::create();
     style1->setShapeOutside(shape1);
@@ -25,8 +25,8 @@
 {
     RefPtr<BasicShapeCircle> circle1 = BasicShapeCircle::create();
     RefPtr<BasicShapeCircle> circle2 = BasicShapeCircle::create();
-    RawPtr<ShapeValue> shape1 = ShapeValue::createShapeValue(circle1, ContentBox);
-    RawPtr<ShapeValue> shape2 = ShapeValue::createShapeValue(circle2, ContentBox);
+    ShapeValue* shape1 = ShapeValue::createShapeValue(circle1, ContentBox);
+    ShapeValue* shape2 = ShapeValue::createShapeValue(circle2, ContentBox);
     RefPtr<ComputedStyle> style1 = ComputedStyle::create();
     RefPtr<ComputedStyle> style2 = ComputedStyle::create();
     style1->setShapeOutside(shape1);
diff --git a/third_party/WebKit/Source/core/style/ContentData.cpp b/third_party/WebKit/Source/core/style/ContentData.cpp
index 236adfa..75ae859 100644
--- a/third_party/WebKit/Source/core/style/ContentData.cpp
+++ b/third_party/WebKit/Source/core/style/ContentData.cpp
@@ -31,38 +31,38 @@
 
 namespace blink {
 
-RawPtr<ContentData> ContentData::create(RawPtr<StyleImage> image)
+ContentData* ContentData::create(StyleImage* image)
 {
     return new ImageContentData(image);
 }
 
-RawPtr<ContentData> ContentData::create(const String& text)
+ContentData* ContentData::create(const String& text)
 {
     return new TextContentData(text);
 }
 
-RawPtr<ContentData> ContentData::create(PassOwnPtr<CounterContent> counter)
+ContentData* ContentData::create(PassOwnPtr<CounterContent> counter)
 {
     return new CounterContentData(counter);
 }
 
-RawPtr<ContentData> ContentData::create(QuoteType quote)
+ContentData* ContentData::create(QuoteType quote)
 {
     return new QuoteContentData(quote);
 }
 
-RawPtr<ContentData> ContentData::clone() const
+ContentData* ContentData::clone() const
 {
-    RawPtr<ContentData> result = cloneInternal();
+    ContentData* result = cloneInternal();
 
-    ContentData* lastNewData = result.get();
+    ContentData* lastNewData = result;
     for (const ContentData* contentData = next(); contentData; contentData = contentData->next()) {
-        RawPtr<ContentData> newData = contentData->cloneInternal();
-        lastNewData->setNext(newData.release());
+        ContentData* newData = contentData->cloneInternal();
+        lastNewData->setNext(newData);
         lastNewData = lastNewData->next();
     }
 
-    return result.release();
+    return result;
 }
 
 DEFINE_TRACE(ContentData)
diff --git a/third_party/WebKit/Source/core/style/ContentData.h b/third_party/WebKit/Source/core/style/ContentData.h
index 71c0b6d..4bd1781 100644
--- a/third_party/WebKit/Source/core/style/ContentData.h
+++ b/third_party/WebKit/Source/core/style/ContentData.h
@@ -38,10 +38,10 @@
 
 class ContentData : public GarbageCollectedFinalized<ContentData> {
 public:
-    static RawPtr<ContentData> create(RawPtr<StyleImage>);
-    static RawPtr<ContentData> create(const String&);
-    static RawPtr<ContentData> create(PassOwnPtr<CounterContent>);
-    static RawPtr<ContentData> create(QuoteType);
+    static ContentData* create(StyleImage*);
+    static ContentData* create(const String&);
+    static ContentData* create(PassOwnPtr<CounterContent>);
+    static ContentData* create(QuoteType);
 
     virtual ~ContentData() { }
 
@@ -52,17 +52,17 @@
 
     virtual LayoutObject* createLayoutObject(Document&, ComputedStyle&) const = 0;
 
-    virtual RawPtr<ContentData> clone() const;
+    virtual ContentData* clone() const;
 
     ContentData* next() const { return m_next.get(); }
-    void setNext(RawPtr<ContentData> next) { m_next = next; }
+    void setNext(ContentData* next) { m_next = next; }
 
     virtual bool equals(const ContentData&) const = 0;
 
     DECLARE_VIRTUAL_TRACE();
 
 private:
-    virtual RawPtr<ContentData> cloneInternal() const = 0;
+    virtual ContentData* cloneInternal() const = 0;
 
     Member<ContentData> m_next;
 };
@@ -75,7 +75,7 @@
 public:
     const StyleImage* image() const { return m_image.get(); }
     StyleImage* image() { return m_image.get(); }
-    void setImage(RawPtr<StyleImage> image) { ASSERT(image); m_image = image; }
+    void setImage(StyleImage* image) { ASSERT(image); m_image = image; }
 
     bool isImage() const override { return true; }
     LayoutObject* createLayoutObject(Document&, ComputedStyle&) const override;
@@ -90,16 +90,16 @@
     DECLARE_VIRTUAL_TRACE();
 
 private:
-    ImageContentData(RawPtr<StyleImage> image)
+    ImageContentData(StyleImage* image)
         : m_image(image)
     {
         ASSERT(m_image);
     }
 
-    RawPtr<ContentData> cloneInternal() const override
+    ContentData* cloneInternal() const override
     {
-        RawPtr<StyleImage> image = const_cast<StyleImage*>(this->image());
-        return create(image.release());
+        StyleImage* image = const_cast<StyleImage*>(this->image());
+        return create(image);
     }
 
     Member<StyleImage> m_image;
@@ -129,7 +129,7 @@
     {
     }
 
-    RawPtr<ContentData> cloneInternal() const override { return create(text()); }
+    ContentData* cloneInternal() const override { return create(text()); }
 
     String m_text;
 };
@@ -151,7 +151,7 @@
     {
     }
 
-    RawPtr<ContentData> cloneInternal() const override
+    ContentData* cloneInternal() const override
     {
         OwnPtr<CounterContent> counterData = adoptPtr(new CounterContent(*counter()));
         return create(counterData.release());
@@ -191,7 +191,7 @@
     {
     }
 
-    RawPtr<ContentData> cloneInternal() const override { return create(quote()); }
+    ContentData* cloneInternal() const override { return create(quote()); }
 
     QuoteType m_quote;
 };
diff --git a/third_party/WebKit/Source/core/style/CursorData.h b/third_party/WebKit/Source/core/style/CursorData.h
index b727789..8208a9f0 100644
--- a/third_party/WebKit/Source/core/style/CursorData.h
+++ b/third_party/WebKit/Source/core/style/CursorData.h
@@ -33,7 +33,7 @@
 class CursorData {
     DISALLOW_NEW_EXCEPT_PLACEMENT_NEW();
 public:
-    CursorData(RawPtr<StyleImage> image, bool hotSpotSpecified, const IntPoint& hotSpot)
+    CursorData(StyleImage* image, bool hotSpotSpecified, const IntPoint& hotSpot)
         : m_image(image)
         , m_hotSpotSpecified(hotSpotSpecified)
         , m_hotSpot(hotSpot)
@@ -51,7 +51,7 @@
     }
 
     StyleImage* image() const { return m_image.get(); }
-    void setImage(RawPtr<StyleImage> image) { m_image = image; }
+    void setImage(StyleImage* image) { m_image = image; }
 
     bool hotSpotSpecified() const { return m_hotSpotSpecified; }
 
diff --git a/third_party/WebKit/Source/core/style/FillLayer.h b/third_party/WebKit/Source/core/style/FillLayer.h
index f58bd11..23d52fc 100644
--- a/third_party/WebKit/Source/core/style/FillLayer.h
+++ b/third_party/WebKit/Source/core/style/FillLayer.h
@@ -110,7 +110,7 @@
     bool isSizeSet() const { return m_sizeType != SizeNone; }
     bool isMaskSourceTypeSet() const { return m_maskSourceTypeSet; }
 
-    void setImage(RawPtr<StyleImage> i) { m_image = i; m_imageSet = true; }
+    void setImage(StyleImage* i) { m_image = i; m_imageSet = true; }
     void setXPosition(const Length& position) { m_xPosition = position; m_xPosSet = true; m_backgroundXOriginSet = false; m_backgroundXOrigin = LeftEdge; }
     void setYPosition(const Length& position) { m_yPosition = position; m_yPosSet = true; m_backgroundYOriginSet = false; m_backgroundYOrigin = TopEdge; }
     void setBackgroundXOrigin(BackgroundEdgeOrigin origin) { m_backgroundXOrigin = origin; m_backgroundXOriginSet = true; }
diff --git a/third_party/WebKit/Source/core/style/NinePieceImage.cpp b/third_party/WebKit/Source/core/style/NinePieceImage.cpp
index a293fa4..c6f11ac 100644
--- a/third_party/WebKit/Source/core/style/NinePieceImage.cpp
+++ b/third_party/WebKit/Source/core/style/NinePieceImage.cpp
@@ -40,7 +40,7 @@
 {
 }
 
-NinePieceImage::NinePieceImage(RawPtr<StyleImage> image, LengthBox imageSlices, bool fill, const BorderImageLengthBox& borderSlices, const BorderImageLengthBox& outset, ENinePieceImageRule horizontalRule, ENinePieceImageRule verticalRule)
+NinePieceImage::NinePieceImage(StyleImage* image, LengthBox imageSlices, bool fill, const BorderImageLengthBox& borderSlices, const BorderImageLengthBox& outset, ENinePieceImageRule horizontalRule, ENinePieceImageRule verticalRule)
 {
     m_data.init();
     m_data.access()->image = image;
diff --git a/third_party/WebKit/Source/core/style/NinePieceImage.h b/third_party/WebKit/Source/core/style/NinePieceImage.h
index 42023a9..9c31b7b 100644
--- a/third_party/WebKit/Source/core/style/NinePieceImage.h
+++ b/third_party/WebKit/Source/core/style/NinePieceImage.h
@@ -63,7 +63,7 @@
     DISALLOW_NEW();
 public:
     NinePieceImage();
-    NinePieceImage(RawPtr<StyleImage>, LengthBox imageSlices, bool fill, const BorderImageLengthBox& borderSlices,
+    NinePieceImage(StyleImage*, LengthBox imageSlices, bool fill, const BorderImageLengthBox& borderSlices,
         const BorderImageLengthBox& outset, ENinePieceImageRule horizontalRule, ENinePieceImageRule verticalRule);
 
     bool operator==(const NinePieceImage& other) const { return m_data == other.m_data; }
@@ -71,7 +71,7 @@
 
     bool hasImage() const { return m_data->image; }
     StyleImage* image() const { return m_data->image.get(); }
-    void setImage(RawPtr<StyleImage> image) { m_data.access()->image = image; }
+    void setImage(StyleImage* image) { m_data.access()->image = image; }
 
     const LengthBox& imageSlices() const { return m_data->imageSlices; }
     void setImageSlices(const LengthBox& slices) { m_data.access()->imageSlices = slices; }
diff --git a/third_party/WebKit/Source/core/style/ShapeValue.h b/third_party/WebKit/Source/core/style/ShapeValue.h
index fde0b4e..3d156c5c 100644
--- a/third_party/WebKit/Source/core/style/ShapeValue.h
+++ b/third_party/WebKit/Source/core/style/ShapeValue.h
@@ -48,17 +48,17 @@
         Image
     };
 
-    static RawPtr<ShapeValue> createShapeValue(PassRefPtr<BasicShape> shape, CSSBoxType cssBox)
+    static ShapeValue* createShapeValue(PassRefPtr<BasicShape> shape, CSSBoxType cssBox)
     {
         return new ShapeValue(shape, cssBox);
     }
 
-    static RawPtr<ShapeValue> createBoxShapeValue(CSSBoxType cssBox)
+    static ShapeValue* createBoxShapeValue(CSSBoxType cssBox)
     {
         return new ShapeValue(cssBox);
     }
 
-    static RawPtr<ShapeValue> createImageValue(RawPtr<StyleImage> image)
+    static ShapeValue* createImageValue(StyleImage* image)
     {
         return new ShapeValue(image);
     }
@@ -75,7 +75,7 @@
             return image()->cachedImage() && image()->cachedImage()->hasImage();
         return image()->isGeneratedImage();
     }
-    void setImage(RawPtr<StyleImage> image)
+    void setImage(StyleImage* image)
     {
         ASSERT(type() == Image);
         if (m_image != image)
@@ -102,7 +102,7 @@
         , m_cssBox(BoxMissing)
     {
     }
-    ShapeValue(RawPtr<StyleImage> image)
+    ShapeValue(StyleImage* image)
         : m_type(Image)
         , m_image(image)
         , m_cssBox(ContentBox)
diff --git a/third_party/WebKit/Source/core/style/StyleFetchedImage.cpp b/third_party/WebKit/Source/core/style/StyleFetchedImage.cpp
index d5fc293..a105620 100644
--- a/third_party/WebKit/Source/core/style/StyleFetchedImage.cpp
+++ b/third_party/WebKit/Source/core/style/StyleFetchedImage.cpp
@@ -66,12 +66,12 @@
     return m_image.get();
 }
 
-RawPtr<CSSValue> StyleFetchedImage::cssValue() const
+CSSValue* StyleFetchedImage::cssValue() const
 {
     return CSSImageValue::create(m_image->url(), const_cast<StyleFetchedImage*>(this));
 }
 
-RawPtr<CSSValue> StyleFetchedImage::computedCSSValue() const
+CSSValue* StyleFetchedImage::computedCSSValue() const
 {
     return cssValue();
 }
diff --git a/third_party/WebKit/Source/core/style/StyleFetchedImage.h b/third_party/WebKit/Source/core/style/StyleFetchedImage.h
index ddca8a3d..4bc7d9e 100644
--- a/third_party/WebKit/Source/core/style/StyleFetchedImage.h
+++ b/third_party/WebKit/Source/core/style/StyleFetchedImage.h
@@ -35,7 +35,7 @@
 class StyleFetchedImage final : public StyleImage, private ResourceClient {
     USING_PRE_FINALIZER(StyleFetchedImage, dispose);
 public:
-    static RawPtr<StyleFetchedImage> create(ImageResource* image, Document* document, const KURL& url)
+    static StyleFetchedImage* create(ImageResource* image, Document* document, const KURL& url)
     {
         return new StyleFetchedImage(image, document, url);
     }
@@ -43,8 +43,8 @@
 
     WrappedImagePtr data() const override;
 
-    RawPtr<CSSValue> cssValue() const override;
-    RawPtr<CSSValue> computedCSSValue() const override;
+    CSSValue* cssValue() const override;
+    CSSValue* computedCSSValue() const override;
 
     bool canRender() const override;
     bool isLoaded() const override;
diff --git a/third_party/WebKit/Source/core/style/StyleFetchedImageSet.cpp b/third_party/WebKit/Source/core/style/StyleFetchedImageSet.cpp
index 9328673..6fccc1e 100644
--- a/third_party/WebKit/Source/core/style/StyleFetchedImageSet.cpp
+++ b/third_party/WebKit/Source/core/style/StyleFetchedImageSet.cpp
@@ -68,12 +68,12 @@
     return m_bestFitImage.get();
 }
 
-RawPtr<CSSValue> StyleFetchedImageSet::cssValue() const
+CSSValue* StyleFetchedImageSet::cssValue() const
 {
     return m_imageSetValue;
 }
 
-RawPtr<CSSValue> StyleFetchedImageSet::computedCSSValue() const
+CSSValue* StyleFetchedImageSet::computedCSSValue() const
 {
     return m_imageSetValue->valueWithURLsMadeAbsolute();
 }
diff --git a/third_party/WebKit/Source/core/style/StyleFetchedImageSet.h b/third_party/WebKit/Source/core/style/StyleFetchedImageSet.h
index 37dfe5d..e2235dd 100644
--- a/third_party/WebKit/Source/core/style/StyleFetchedImageSet.h
+++ b/third_party/WebKit/Source/core/style/StyleFetchedImageSet.h
@@ -40,14 +40,14 @@
 class StyleFetchedImageSet final : public StyleImage, private ResourceClient {
     USING_PRE_FINALIZER(StyleFetchedImageSet, dispose);
 public:
-    static RawPtr<StyleFetchedImageSet> create(ImageResource* image, float imageScaleFactor, CSSImageSetValue* value, const KURL& url)
+    static StyleFetchedImageSet* create(ImageResource* image, float imageScaleFactor, CSSImageSetValue* value, const KURL& url)
     {
         return new StyleFetchedImageSet(image, imageScaleFactor, value, url);
     }
     ~StyleFetchedImageSet() override;
 
-    RawPtr<CSSValue> cssValue() const override;
-    RawPtr<CSSValue> computedCSSValue() const override;
+    CSSValue* cssValue() const override;
+    CSSValue* computedCSSValue() const override;
 
     // FIXME: This is used by StyleImage for equals comparison, but this implementation
     // only looks at the image from the set that we have loaded. I'm not sure if that is
diff --git a/third_party/WebKit/Source/core/style/StyleFilterData.h b/third_party/WebKit/Source/core/style/StyleFilterData.h
index 5e47af51..e6f254c3 100644
--- a/third_party/WebKit/Source/core/style/StyleFilterData.h
+++ b/third_party/WebKit/Source/core/style/StyleFilterData.h
@@ -38,12 +38,12 @@
 // relying on RefPtr<>, switch to GarbageCollected<>.
 class StyleFilterData final : public RefCountedGarbageCollected<StyleFilterData> {
 public:
-    static RawPtr<StyleFilterData> create()
+    static StyleFilterData* create()
     {
         return new StyleFilterData;
     }
 
-    RawPtr<StyleFilterData> copy() const
+    StyleFilterData* copy() const
     {
         return new StyleFilterData(*this);
     }
diff --git a/third_party/WebKit/Source/core/style/StyleGeneratedImage.cpp b/third_party/WebKit/Source/core/style/StyleGeneratedImage.cpp
index df17c7e3..c1d53ca 100644
--- a/third_party/WebKit/Source/core/style/StyleGeneratedImage.cpp
+++ b/third_party/WebKit/Source/core/style/StyleGeneratedImage.cpp
@@ -36,12 +36,12 @@
     m_isGeneratedImage = true;
 }
 
-RawPtr<CSSValue> StyleGeneratedImage::cssValue() const
+CSSValue* StyleGeneratedImage::cssValue() const
 {
     return m_imageGeneratorValue.get();
 }
 
-RawPtr<CSSValue> StyleGeneratedImage::computedCSSValue() const
+CSSValue* StyleGeneratedImage::computedCSSValue() const
 {
     return m_imageGeneratorValue->valueWithURLsMadeAbsolute();
 }
diff --git a/third_party/WebKit/Source/core/style/StyleGeneratedImage.h b/third_party/WebKit/Source/core/style/StyleGeneratedImage.h
index 3c8ceee..1280617 100644
--- a/third_party/WebKit/Source/core/style/StyleGeneratedImage.h
+++ b/third_party/WebKit/Source/core/style/StyleGeneratedImage.h
@@ -34,15 +34,15 @@
 
 class CORE_EXPORT StyleGeneratedImage final : public StyleImage {
 public:
-    static RawPtr<StyleGeneratedImage> create(const CSSImageGeneratorValue& value)
+    static StyleGeneratedImage* create(const CSSImageGeneratorValue& value)
     {
         return new StyleGeneratedImage(value);
     }
 
     WrappedImagePtr data() const override { return m_imageGeneratorValue.get(); }
 
-    RawPtr<CSSValue> cssValue() const override;
-    RawPtr<CSSValue> computedCSSValue() const override;
+    CSSValue* cssValue() const override;
+    CSSValue* computedCSSValue() const override;
 
     LayoutSize imageSize(const LayoutObject&, float multiplier, const LayoutSize& defaultObjectSize) const override;
     bool imageHasRelativeSize() const override { return !m_fixedSize; }
diff --git a/third_party/WebKit/Source/core/style/StyleImage.h b/third_party/WebKit/Source/core/style/StyleImage.h
index 3ca01b0..abd8663 100644
--- a/third_party/WebKit/Source/core/style/StyleImage.h
+++ b/third_party/WebKit/Source/core/style/StyleImage.h
@@ -51,8 +51,8 @@
         return data() == other.data();
     }
 
-    virtual RawPtr<CSSValue> cssValue() const = 0;
-    virtual RawPtr<CSSValue> computedCSSValue() const = 0;
+    virtual CSSValue* cssValue() const = 0;
+    virtual CSSValue* computedCSSValue() const = 0;
 
     virtual bool canRender() const { return true; }
     virtual bool isLoaded() const { return true; }
diff --git a/third_party/WebKit/Source/core/style/StyleInvalidImage.h b/third_party/WebKit/Source/core/style/StyleInvalidImage.h
index c2854cf..a2d9df9 100644
--- a/third_party/WebKit/Source/core/style/StyleInvalidImage.h
+++ b/third_party/WebKit/Source/core/style/StyleInvalidImage.h
@@ -12,16 +12,16 @@
 
 class StyleInvalidImage final : public StyleImage {
 public:
-    static RawPtr<StyleInvalidImage> create(const String& url)
+    static StyleInvalidImage* create(const String& url)
     {
         return new StyleInvalidImage(url);
     }
 
     WrappedImagePtr data() const override { return m_url.impl(); }
 
-    RawPtr<CSSValue> cssValue() const override { return CSSImageValue::create(AtomicString(m_url)); }
+    CSSValue* cssValue() const override { return CSSImageValue::create(AtomicString(m_url)); }
 
-    RawPtr<CSSValue> computedCSSValue() const override { return cssValue(); }
+    CSSValue* computedCSSValue() const override { return cssValue(); }
 
     LayoutSize imageSize(const LayoutObject&, float /*multiplier*/, const LayoutSize& /*defaultObjectSize*/) const override { return LayoutSize(); }
     bool imageHasRelativeSize() const override { return false; }
diff --git a/third_party/WebKit/Source/core/style/StylePath.cpp b/third_party/WebKit/Source/core/style/StylePath.cpp
index e7d9361..6ef3008c2 100644
--- a/third_party/WebKit/Source/core/style/StylePath.cpp
+++ b/third_party/WebKit/Source/core/style/StylePath.cpp
@@ -54,7 +54,7 @@
     return path().isClosed();
 }
 
-RawPtr<CSSValue> StylePath::computedCSSValue() const
+CSSValue* StylePath::computedCSSValue() const
 {
     return CSSPathValue::create(const_cast<StylePath*>(this));
 }
diff --git a/third_party/WebKit/Source/core/style/StylePath.h b/third_party/WebKit/Source/core/style/StylePath.h
index fe61851..763caab 100644
--- a/third_party/WebKit/Source/core/style/StylePath.h
+++ b/third_party/WebKit/Source/core/style/StylePath.h
@@ -30,7 +30,7 @@
 
     const SVGPathByteStream& byteStream() const { return *m_byteStream; }
 
-    RawPtr<CSSValue> computedCSSValue() const;
+    CSSValue* computedCSSValue() const;
 
     bool operator==(const StylePath&) const;
 
diff --git a/third_party/WebKit/Source/core/style/StylePendingImage.h b/third_party/WebKit/Source/core/style/StylePendingImage.h
index 0412f63..6396150c 100644
--- a/third_party/WebKit/Source/core/style/StylePendingImage.h
+++ b/third_party/WebKit/Source/core/style/StylePendingImage.h
@@ -41,16 +41,16 @@
 
 class StylePendingImage final : public StyleImage {
 public:
-    static RawPtr<StylePendingImage> create(const CSSValue& value)
+    static StylePendingImage* create(const CSSValue& value)
     {
         return new StylePendingImage(value);
     }
 
     WrappedImagePtr data() const override { return m_value.get(); }
 
-    RawPtr<CSSValue> cssValue() const override { return m_value; }
+    CSSValue* cssValue() const override { return m_value; }
 
-    RawPtr<CSSValue> computedCSSValue() const override
+    CSSValue* computedCSSValue() const override
     {
         ASSERT_NOT_REACHED();
         return nullptr;
diff --git a/third_party/WebKit/Source/core/svg/SVGElement.cpp b/third_party/WebKit/Source/core/svg/SVGElement.cpp
index 40e8a0e..50909a34 100644
--- a/third_party/WebKit/Source/core/svg/SVGElement.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGElement.cpp
@@ -538,8 +538,8 @@
 
 static HeapHashSet<WeakMember<SVGElement>>& emptyInstances()
 {
-    DEFINE_STATIC_LOCAL(Persistent<HeapHashSet<WeakMember<SVGElement>>>, emptyInstances, (new HeapHashSet<WeakMember<SVGElement>>()));
-    return *emptyInstances;
+    DEFINE_STATIC_LOCAL(HeapHashSet<WeakMember<SVGElement>>, emptyInstances, (new HeapHashSet<WeakMember<SVGElement>>));
+    return emptyInstances;
 }
 
 const HeapHashSet<WeakMember<SVGElement>>& SVGElement::instancesForElement() const
@@ -767,10 +767,8 @@
     instances = element->instancesForElement();
 }
 
-bool SVGElement::addEventListenerInternal(const AtomicString& eventType, RawPtr<EventListener> prpListener, const EventListenerOptions& options)
+bool SVGElement::addEventListenerInternal(const AtomicString& eventType, EventListener* listener, const EventListenerOptions& options)
 {
-    EventListener* listener = prpListener;
-
     // Add event listener to regular DOM element
     if (!Node::addEventListenerInternal(eventType, listener, options))
         return false;
@@ -786,10 +784,8 @@
     return true;
 }
 
-bool SVGElement::removeEventListenerInternal(const AtomicString& eventType, RawPtr<EventListener> prpListener, const EventListenerOptions& options)
+bool SVGElement::removeEventListenerInternal(const AtomicString& eventType, EventListener* listener, const EventListenerOptions& options)
 {
-    EventListener* listener = prpListener;
-
     // Remove event listener from regular DOM element
     if (!Node::removeEventListenerInternal(eventType, listener, options))
         return false;
diff --git a/third_party/WebKit/Source/core/svg/SVGElement.h b/third_party/WebKit/Source/core/svg/SVGElement.h
index e3ce9b15..028174e0 100644
--- a/third_party/WebKit/Source/core/svg/SVGElement.h
+++ b/third_party/WebKit/Source/core/svg/SVGElement.h
@@ -227,8 +227,8 @@
     void reportAttributeParsingError(SVGParsingError, const QualifiedName&, const AtomicString&);
     bool hasFocusEventListeners() const;
 
-    bool addEventListenerInternal(const AtomicString& eventType, RawPtr<EventListener>, const EventListenerOptions&) final;
-    bool removeEventListenerInternal(const AtomicString& eventType, RawPtr<EventListener>, const EventListenerOptions&) final;
+    bool addEventListenerInternal(const AtomicString& eventType, EventListener*, const EventListenerOptions&) final;
+    bool removeEventListenerInternal(const AtomicString& eventType, EventListener*, const EventListenerOptions&) final;
 
 private:
     bool isSVGElement() const = delete; // This will catch anyone doing an unnecessary check.
diff --git a/third_party/WebKit/Source/core/svg/SVGStyleElement.cpp b/third_party/WebKit/Source/core/svg/SVGStyleElement.cpp
index 29971da..05b2820 100644
--- a/third_party/WebKit/Source/core/svg/SVGStyleElement.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGStyleElement.cpp
@@ -31,8 +31,8 @@
 
 static SVGStyleEventSender& styleErrorEventSender()
 {
-    DEFINE_STATIC_LOCAL(Persistent<SVGStyleEventSender>, sharedErrorEventSender, (SVGStyleEventSender::create(EventTypeNames::error)));
-    return *sharedErrorEventSender;
+    DEFINE_STATIC_LOCAL(SVGStyleEventSender, sharedErrorEventSender, (SVGStyleEventSender::create(EventTypeNames::error)));
+    return sharedErrorEventSender;
 }
 
 inline SVGStyleElement::SVGStyleElement(Document& document, bool createdByParser)
diff --git a/third_party/WebKit/Source/core/svg/SVGUseElement.cpp b/third_party/WebKit/Source/core/svg/SVGUseElement.cpp
index 8cc69124..dc8abfc2 100644
--- a/third_party/WebKit/Source/core/svg/SVGUseElement.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGUseElement.cpp
@@ -48,8 +48,8 @@
 
 static SVGUseEventSender& svgUseLoadEventSender()
 {
-    DEFINE_STATIC_LOCAL(Persistent<SVGUseEventSender>, sharedLoadEventSender, (SVGUseEventSender::create(EventTypeNames::load)));
-    return *sharedLoadEventSender;
+    DEFINE_STATIC_LOCAL(SVGUseEventSender, sharedLoadEventSender, (SVGUseEventSender::create(EventTypeNames::load)));
+    return sharedLoadEventSender;
 }
 
 inline SVGUseElement::SVGUseElement(Document& document)
diff --git a/third_party/WebKit/Source/core/svg/animation/SVGSMILElement.cpp b/third_party/WebKit/Source/core/svg/animation/SVGSMILElement.cpp
index 8208b740..0df9aad 100644
--- a/third_party/WebKit/Source/core/svg/animation/SVGSMILElement.cpp
+++ b/third_party/WebKit/Source/core/svg/animation/SVGSMILElement.cpp
@@ -81,26 +81,26 @@
 
 static SMILEventSender& smilEndEventSender()
 {
-    DEFINE_STATIC_LOCAL(Persistent<SMILEventSender>, sender, (SMILEventSender::create(EventTypeNames::endEvent)));
-    return *sender;
+    DEFINE_STATIC_LOCAL(SMILEventSender, sender, (SMILEventSender::create(EventTypeNames::endEvent)));
+    return sender;
 }
 
 static SMILEventSender& smilBeginEventSender()
 {
-    DEFINE_STATIC_LOCAL(Persistent<SMILEventSender>, sender, (SMILEventSender::create(EventTypeNames::beginEvent)));
-    return *sender;
+    DEFINE_STATIC_LOCAL(SMILEventSender, sender, (SMILEventSender::create(EventTypeNames::beginEvent)));
+    return sender;
 }
 
 static SMILEventSender& smilRepeatEventSender()
 {
-    DEFINE_STATIC_LOCAL(Persistent<SMILEventSender>, sender, (SMILEventSender::create(EventTypeNames::repeatEvent)));
-    return *sender;
+    DEFINE_STATIC_LOCAL(SMILEventSender, sender, (SMILEventSender::create(EventTypeNames::repeatEvent)));
+    return sender;
 }
 
 static SMILEventSender& smilRepeatNEventSender()
 {
-    DEFINE_STATIC_LOCAL(Persistent<SMILEventSender>, sender, (SMILEventSender::create(AtomicString("repeatn"))));
-    return *sender;
+    DEFINE_STATIC_LOCAL(SMILEventSender, sender, (SMILEventSender::create(AtomicString("repeatn"))));
+    return sender;
 }
 
 // This is used for duration type time values that can't be negative.
@@ -1233,14 +1233,14 @@
     // |loopBreaker| is used to avoid infinite recursions which may be caused from:
     // |notifyDependentsIntervalChanged| -> |createInstanceTimesFromSyncbase| -> |add{Begin,End}Time| -> |{begin,end}TimeChanged| -> |notifyDependentsIntervalChanged|
     // |loopBreaker| is defined as a Persistent<HeapHashSet<Member<SVGSMILElement>>>. This won't cause leaks because it is guaranteed to be empty after the root |notifyDependentsIntervalChanged| has exited.
-    DEFINE_STATIC_LOCAL(Persistent<HeapHashSet<Member<SVGSMILElement>>>, loopBreaker, (new HeapHashSet<Member<SVGSMILElement>>()));
-    if (!loopBreaker->add(this).isNewEntry)
+    DEFINE_STATIC_LOCAL(HeapHashSet<Member<SVGSMILElement>>, loopBreaker, (new HeapHashSet<Member<SVGSMILElement>>));
+    if (!loopBreaker.add(this).isNewEntry)
         return;
 
     for (SVGSMILElement* element : m_syncBaseDependents)
         element->createInstanceTimesFromSyncbase(this);
 
-    loopBreaker->remove(this);
+    loopBreaker.remove(this);
 }
 
 void SVGSMILElement::createInstanceTimesFromSyncbase(SVGSMILElement* syncBase)
diff --git a/third_party/WebKit/Source/core/svg/graphics/SVGImage.cpp b/third_party/WebKit/Source/core/svg/graphics/SVGImage.cpp
index 2cc9f14..445d9462 100644
--- a/third_party/WebKit/Source/core/svg/graphics/SVGImage.cpp
+++ b/third_party/WebKit/Source/core/svg/graphics/SVGImage.cpp
@@ -469,7 +469,7 @@
         // types.
         EventDispatchForbiddenScope::AllowUserAgentEvents allowUserAgentEvents;
 
-        DEFINE_STATIC_LOCAL(Persistent<FrameLoaderClient>, dummyFrameLoaderClient, (EmptyFrameLoaderClient::create()));
+        DEFINE_STATIC_LOCAL(FrameLoaderClient, dummyFrameLoaderClient, (EmptyFrameLoaderClient::create()));
 
         if (m_page) {
             toLocalFrame(m_page->mainFrame())->loader().load(FrameLoadRequest(0, blankURL(), SubstituteData(data(), AtomicString("image/svg+xml"),
@@ -512,7 +512,7 @@
         LocalFrame* frame = nullptr;
         {
             TRACE_EVENT0("blink", "SVGImage::dataChanged::createFrame");
-            frame = LocalFrame::create(dummyFrameLoaderClient.get(), &page->frameHost(), 0);
+            frame = LocalFrame::create(&dummyFrameLoaderClient, &page->frameHost(), 0);
             frame->setView(FrameView::create(frame));
             frame->init();
         }
diff --git a/third_party/WebKit/Source/core/testing/NullExecutionContext.cpp b/third_party/WebKit/Source/core/testing/NullExecutionContext.cpp
index 4d31ecf..b5424e76 100644
--- a/third_party/WebKit/Source/core/testing/NullExecutionContext.cpp
+++ b/third_party/WebKit/Source/core/testing/NullExecutionContext.cpp
@@ -16,7 +16,7 @@
 public:
     NullEventQueue() { }
     ~NullEventQueue() override { }
-    bool enqueueEvent(RawPtr<Event>) override { return true; }
+    bool enqueueEvent(Event*) override { return true; }
     bool cancelEvent(Event*) override { return true; }
     void close() override { }
 };
diff --git a/third_party/WebKit/Source/core/workers/WorkerEventQueue.cpp b/third_party/WebKit/Source/core/workers/WorkerEventQueue.cpp
index 8d17b745..bba58e3 100644
--- a/third_party/WebKit/Source/core/workers/WorkerEventQueue.cpp
+++ b/third_party/WebKit/Source/core/workers/WorkerEventQueue.cpp
@@ -115,14 +115,13 @@
     m_eventTaskMap.remove(event);
 }
 
-bool WorkerEventQueue::enqueueEvent(RawPtr<Event> prpEvent)
+bool WorkerEventQueue::enqueueEvent(Event* event)
 {
     if (m_isClosed)
         return false;
-    RawPtr<Event> event = prpEvent;
-    InspectorInstrumentation::didEnqueueEvent(event->target(), event.get());
+    InspectorInstrumentation::didEnqueueEvent(event->target(), event);
     OwnPtr<EventDispatcherTask> task = EventDispatcherTask::create(event, this);
-    m_eventTaskMap.add(event.release(), task.get());
+    m_eventTaskMap.add(event, task.get());
     m_executionContext->postTask(BLINK_FROM_HERE, task.release());
     return true;
 }
diff --git a/third_party/WebKit/Source/core/workers/WorkerEventQueue.h b/third_party/WebKit/Source/core/workers/WorkerEventQueue.h
index 74755ad..f82efed 100644
--- a/third_party/WebKit/Source/core/workers/WorkerEventQueue.h
+++ b/third_party/WebKit/Source/core/workers/WorkerEventQueue.h
@@ -46,7 +46,7 @@
     DECLARE_TRACE();
 
     // EventQueue
-    bool enqueueEvent(RawPtr<Event>) override;
+    bool enqueueEvent(Event*) override;
     bool cancelEvent(Event*) override;
     void close() override;
 
diff --git a/third_party/WebKit/Source/core/xml/XPathValue.cpp b/third_party/WebKit/Source/core/xml/XPathValue.cpp
index af8836e..06d27401 100644
--- a/third_party/WebKit/Source/core/xml/XPathValue.cpp
+++ b/third_party/WebKit/Source/core/xml/XPathValue.cpp
@@ -53,8 +53,8 @@
         context->hadTypeConversionError = true;
 
     if (!m_data) {
-        DEFINE_STATIC_LOCAL(Persistent<NodeSet>, emptyNodeSet, (NodeSet::create()));
-        return *emptyNodeSet;
+        DEFINE_STATIC_LOCAL(NodeSet, emptyNodeSet, (NodeSet::create()));
+        return emptyNodeSet;
     }
 
     return m_data->nodeSet();
diff --git a/third_party/WebKit/Source/modules/battery/BatteryDispatcher.cpp b/third_party/WebKit/Source/modules/battery/BatteryDispatcher.cpp
index a039bd4..b2e3b0f 100644
--- a/third_party/WebKit/Source/modules/battery/BatteryDispatcher.cpp
+++ b/third_party/WebKit/Source/modules/battery/BatteryDispatcher.cpp
@@ -13,8 +13,8 @@
 
 BatteryDispatcher& BatteryDispatcher::instance()
 {
-    DEFINE_STATIC_LOCAL(Persistent<BatteryDispatcher>, batteryDispatcher, (new BatteryDispatcher()));
-    return *batteryDispatcher;
+    DEFINE_STATIC_LOCAL(BatteryDispatcher, batteryDispatcher, (new BatteryDispatcher));
+    return batteryDispatcher;
 }
 
 BatteryDispatcher::BatteryDispatcher()
diff --git a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTCharacteristic.cpp b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTCharacteristic.cpp
index 944d96b..1a34791f 100644
--- a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTCharacteristic.cpp
+++ b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTCharacteristic.cpp
@@ -95,7 +95,7 @@
     return ActiveDOMObject::getExecutionContext();
 }
 
-bool BluetoothRemoteGATTCharacteristic::addEventListenerInternal(const AtomicString& eventType, RawPtr<EventListener> listener, const EventListenerOptions& options)
+bool BluetoothRemoteGATTCharacteristic::addEventListenerInternal(const AtomicString& eventType, EventListener* listener, const EventListenerOptions& options)
 {
     // We will also need to unregister a characteristic once all the event
     // listeners have been removed. See http://crbug.com/541390
diff --git a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTCharacteristic.h b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTCharacteristic.h
index 04d58cb9e..70bb9fc 100644
--- a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTCharacteristic.h
+++ b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTCharacteristic.h
@@ -86,7 +86,7 @@
 
 protected:
     // EventTarget overrides.
-    bool addEventListenerInternal(const AtomicString& eventType, RawPtr<EventListener>, const EventListenerOptions&) override;
+    bool addEventListenerInternal(const AtomicString& eventType, EventListener*, const EventListenerOptions&) override;
 
 private:
     OwnPtr<WebBluetoothRemoteGATTCharacteristicInit> m_webCharacteristic;
diff --git a/third_party/WebKit/Source/modules/device_light/DeviceLightDispatcher.cpp b/third_party/WebKit/Source/modules/device_light/DeviceLightDispatcher.cpp
index 1b8b8c0..87fbe5b 100644
--- a/third_party/WebKit/Source/modules/device_light/DeviceLightDispatcher.cpp
+++ b/third_party/WebKit/Source/modules/device_light/DeviceLightDispatcher.cpp
@@ -11,8 +11,8 @@
 
 DeviceLightDispatcher& DeviceLightDispatcher::instance()
 {
-    DEFINE_STATIC_LOCAL(Persistent<DeviceLightDispatcher>, deviceLightDispatcher, (new DeviceLightDispatcher()));
-    return *deviceLightDispatcher;
+    DEFINE_STATIC_LOCAL(DeviceLightDispatcher, deviceLightDispatcher, (new DeviceLightDispatcher));
+    return deviceLightDispatcher;
 }
 
 DeviceLightDispatcher::DeviceLightDispatcher()
diff --git a/third_party/WebKit/Source/modules/device_orientation/DeviceMotionDispatcher.cpp b/third_party/WebKit/Source/modules/device_orientation/DeviceMotionDispatcher.cpp
index aee9b19..1c3e1d7c3 100644
--- a/third_party/WebKit/Source/modules/device_orientation/DeviceMotionDispatcher.cpp
+++ b/third_party/WebKit/Source/modules/device_orientation/DeviceMotionDispatcher.cpp
@@ -38,8 +38,8 @@
 
 DeviceMotionDispatcher& DeviceMotionDispatcher::instance()
 {
-    DEFINE_STATIC_LOCAL(Persistent<DeviceMotionDispatcher>, deviceMotionDispatcher, (new DeviceMotionDispatcher()));
-    return *deviceMotionDispatcher;
+    DEFINE_STATIC_LOCAL(DeviceMotionDispatcher, deviceMotionDispatcher, (new DeviceMotionDispatcher));
+    return deviceMotionDispatcher;
 }
 
 DeviceMotionDispatcher::DeviceMotionDispatcher()
diff --git a/third_party/WebKit/Source/modules/device_orientation/DeviceOrientationDispatcher.cpp b/third_party/WebKit/Source/modules/device_orientation/DeviceOrientationDispatcher.cpp
index d1b3d5a..6a9da88 100644
--- a/third_party/WebKit/Source/modules/device_orientation/DeviceOrientationDispatcher.cpp
+++ b/third_party/WebKit/Source/modules/device_orientation/DeviceOrientationDispatcher.cpp
@@ -39,11 +39,11 @@
 DeviceOrientationDispatcher& DeviceOrientationDispatcher::instance(bool absolute)
 {
     if (absolute) {
-        DEFINE_STATIC_LOCAL(Persistent<DeviceOrientationDispatcher>, deviceOrientationAbsoluteDispatcher, (new DeviceOrientationDispatcher(absolute)));
-        return *deviceOrientationAbsoluteDispatcher;
+        DEFINE_STATIC_LOCAL(DeviceOrientationDispatcher, deviceOrientationAbsoluteDispatcher, (new DeviceOrientationDispatcher(absolute)));
+        return deviceOrientationAbsoluteDispatcher;
     }
-    DEFINE_STATIC_LOCAL(Persistent<DeviceOrientationDispatcher>, deviceOrientationDispatcher, (new DeviceOrientationDispatcher(absolute)));
-    return *deviceOrientationDispatcher;
+    DEFINE_STATIC_LOCAL(DeviceOrientationDispatcher, deviceOrientationDispatcher, (new DeviceOrientationDispatcher(absolute)));
+    return deviceOrientationDispatcher;
 }
 
 DeviceOrientationDispatcher::DeviceOrientationDispatcher(bool absolute) : m_absolute(absolute)
diff --git a/third_party/WebKit/Source/modules/gamepad/GamepadDispatcher.cpp b/third_party/WebKit/Source/modules/gamepad/GamepadDispatcher.cpp
index b2e7dbe..6cc4cfb 100644
--- a/third_party/WebKit/Source/modules/gamepad/GamepadDispatcher.cpp
+++ b/third_party/WebKit/Source/modules/gamepad/GamepadDispatcher.cpp
@@ -12,8 +12,8 @@
 
 GamepadDispatcher& GamepadDispatcher::instance()
 {
-    DEFINE_STATIC_LOCAL(Persistent<GamepadDispatcher>, gamepadDispatcher, (new GamepadDispatcher()));
-    return *gamepadDispatcher;
+    DEFINE_STATIC_LOCAL(GamepadDispatcher, gamepadDispatcher, (new GamepadDispatcher));
+    return gamepadDispatcher;
 }
 
 void GamepadDispatcher::sampleGamepads(WebGamepads& gamepads)
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBDatabase.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBDatabase.cpp
index 7d8dda6..48bdaad 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBDatabase.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBDatabase.cpp
@@ -378,28 +378,28 @@
     enqueueEvent(IDBVersionChangeEvent::create(EventTypeNames::versionchange, oldVersion, newVersionNullable));
 }
 
-void IDBDatabase::enqueueEvent(RawPtr<Event> event)
+void IDBDatabase::enqueueEvent(Event* event)
 {
     ASSERT(!m_contextStopped);
     ASSERT(getExecutionContext());
     EventQueue* eventQueue = getExecutionContext()->getEventQueue();
     event->setTarget(this);
-    eventQueue->enqueueEvent(event.get());
+    eventQueue->enqueueEvent(event);
     m_enqueuedEvents.append(event);
 }
 
-DispatchEventResult IDBDatabase::dispatchEventInternal(RawPtr<Event> event)
+DispatchEventResult IDBDatabase::dispatchEventInternal(Event* event)
 {
     IDB_TRACE("IDBDatabase::dispatchEvent");
     if (m_contextStopped || !getExecutionContext())
         return DispatchEventResult::CanceledBeforeDispatch;
     ASSERT(event->type() == EventTypeNames::versionchange || event->type() == EventTypeNames::close);
     for (size_t i = 0; i < m_enqueuedEvents.size(); ++i) {
-        if (m_enqueuedEvents[i].get() == event.get())
+        if (m_enqueuedEvents[i].get() == event)
             m_enqueuedEvents.remove(i);
     }
 
-    DispatchEventResult dispatchResult = EventTarget::dispatchEventInternal(event.get());
+    DispatchEventResult dispatchResult = EventTarget::dispatchEventInternal(event);
     if (event->type() == EventTypeNames::versionchange && !m_closePending && m_backend)
         m_backend->versionChangeIgnored();
     return dispatchResult;
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBDatabase.h b/third_party/WebKit/Source/modules/indexeddb/IDBDatabase.h
index d589d36..8f501d64 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBDatabase.h
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBDatabase.h
@@ -105,7 +105,7 @@
     bool isClosePending() const { return m_closePending; }
     void forceClose();
     const IDBDatabaseMetadata& metadata() const { return m_metadata; }
-    void enqueueEvent(RawPtr<Event>);
+    void enqueueEvent(Event*);
 
     int64_t findObjectStoreId(const String& name) const;
     bool containsObjectStore(const String& name) const
@@ -138,7 +138,7 @@
 
 protected:
     // EventTarget
-    DispatchEventResult dispatchEventInternal(RawPtr<Event>) override;
+    DispatchEventResult dispatchEventInternal(Event*) override;
 
 private:
     IDBDatabase(ExecutionContext*, PassOwnPtr<WebIDBDatabase>, IDBDatabaseCallbacks*);
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBOpenDBRequest.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBOpenDBRequest.cpp
index 322d973..a65d9de0 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBOpenDBRequest.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBOpenDBRequest.cpp
@@ -162,12 +162,12 @@
     return true;
 }
 
-DispatchEventResult IDBOpenDBRequest::dispatchEventInternal(RawPtr<Event> event)
+DispatchEventResult IDBOpenDBRequest::dispatchEventInternal(Event* event)
 {
     // If the connection closed between onUpgradeNeeded and the delivery of the "success" event,
     // an "error" event should be fired instead.
     if (event->type() == EventTypeNames::success && resultAsAny()->getType() == IDBAny::IDBDatabaseType && resultAsAny()->idbDatabase()->isClosePending()) {
-        dequeueEvent(event.get());
+        dequeueEvent(event);
         setResult(nullptr);
         onError(DOMException::create(AbortError, "The connection was closed."));
         return DispatchEventResult::CanceledBeforeDispatch;
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBOpenDBRequest.h b/third_party/WebKit/Source/modules/indexeddb/IDBOpenDBRequest.h
index 510f960..8347cb6 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBOpenDBRequest.h
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBOpenDBRequest.h
@@ -58,7 +58,7 @@
     bool shouldEnqueueEvent() const override;
 
     // EventTarget
-    DispatchEventResult dispatchEventInternal(RawPtr<Event>) override;
+    DispatchEventResult dispatchEventInternal(Event*) override;
 
 private:
     IDBOpenDBRequest(ScriptState*, IDBDatabaseCallbacks*, int64_t transactionId, int64_t version);
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBRequest.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBRequest.cpp
index 37011949..ba00da9 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBRequest.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBRequest.cpp
@@ -411,7 +411,7 @@
     return ActiveDOMObject::getExecutionContext();
 }
 
-DispatchEventResult IDBRequest::dispatchEventInternal(RawPtr<Event> event)
+DispatchEventResult IDBRequest::dispatchEventInternal(Event* event)
 {
     IDB_TRACE("IDBRequest::dispatchEvent");
     if (m_contextStopped || !getExecutionContext())
@@ -425,7 +425,7 @@
 
     if (event->type() != EventTypeNames::blocked)
         m_readyState = DONE;
-    dequeueEvent(event.get());
+    dequeueEvent(event);
 
     HeapVector<Member<EventTarget>> targets;
     targets.append(this);
@@ -458,7 +458,7 @@
     if (setTransactionActive)
         m_transaction->setActive(true);
 
-    DispatchEventResult dispatchResult = IDBEventDispatcher::dispatch(event.get(), targets);
+    DispatchEventResult dispatchResult = IDBEventDispatcher::dispatch(event, targets);
 
     if (m_transaction) {
         if (m_readyState == DONE)
@@ -510,7 +510,7 @@
     m_readyState = PENDING;
 }
 
-void IDBRequest::enqueueEvent(RawPtr<Event> event)
+void IDBRequest::enqueueEvent(Event* event)
 {
     ASSERT(m_readyState == PENDING || m_readyState == DONE);
 
@@ -525,7 +525,7 @@
     // Keep track of enqueued events in case we need to abort prior to dispatch,
     // in which case these must be cancelled. If the events not dispatched for
     // other reasons they must be removed from this list via dequeueEvent().
-    if (eventQueue->enqueueEvent(event.get()))
+    if (eventQueue->enqueueEvent(event))
         m_enqueuedEvents.append(event);
 }
 
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBRequest.h b/third_party/WebKit/Source/modules/indexeddb/IDBRequest.h
index 225122a..2480a03 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBRequest.h
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBRequest.h
@@ -131,14 +131,14 @@
 
 protected:
     IDBRequest(ScriptState*, IDBAny* source, IDBTransaction*);
-    void enqueueEvent(RawPtr<Event>);
+    void enqueueEvent(Event*);
     void dequeueEvent(Event*);
     virtual bool shouldEnqueueEvent() const;
     void onSuccessInternal(IDBAny*);
     void setResult(IDBAny*);
 
     // EventTarget
-    DispatchEventResult dispatchEventInternal(RawPtr<Event>) override;
+    DispatchEventResult dispatchEventInternal(Event*) override;
 
     bool m_contextStopped = false;
     Member<IDBTransaction> m_transaction;
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBTransaction.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBTransaction.cpp
index 0add9ce..754034c 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBTransaction.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBTransaction.cpp
@@ -361,7 +361,7 @@
     return ActiveDOMObject::getExecutionContext();
 }
 
-DispatchEventResult IDBTransaction::dispatchEventInternal(RawPtr<Event> event)
+DispatchEventResult IDBTransaction::dispatchEventInternal(Event* event)
 {
     IDB_TRACE("IDBTransaction::dispatchEvent");
     if (m_contextStopped || !getExecutionContext()) {
@@ -390,7 +390,7 @@
 
     // FIXME: When we allow custom event dispatching, this will probably need to change.
     ASSERT(event->type() == EventTypeNames::complete || event->type() == EventTypeNames::abort);
-    DispatchEventResult dispatchResult = IDBEventDispatcher::dispatch(event.get(), targets);
+    DispatchEventResult dispatchResult = IDBEventDispatcher::dispatch(event, targets);
     // FIXME: Try to construct a test where |this| outlives openDBRequest and we
     // get a crash.
     if (m_openDBRequest) {
@@ -411,7 +411,7 @@
     abort(IGNORE_EXCEPTION);
 }
 
-void IDBTransaction::enqueueEvent(RawPtr<Event> event)
+void IDBTransaction::enqueueEvent(Event* event)
 {
     DCHECK_NE(m_state, Finished) << "A finished transaction tried to enqueue an event of type " << event->type() << ".";
     if (m_contextStopped || !getExecutionContext())
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBTransaction.h b/third_party/WebKit/Source/modules/indexeddb/IDBTransaction.h
index b0f77bc..cc545aa 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBTransaction.h
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBTransaction.h
@@ -108,12 +108,12 @@
 
 protected:
     // EventTarget
-    DispatchEventResult dispatchEventInternal(RawPtr<Event>) override;
+    DispatchEventResult dispatchEventInternal(Event*) override;
 
 private:
     IDBTransaction(ScriptState*, int64_t, const HashSet<String>&, WebIDBTransactionMode, IDBDatabase*, IDBOpenDBRequest*, const IDBDatabaseMetadata&);
 
-    void enqueueEvent(RawPtr<Event>);
+    void enqueueEvent(Event*);
 
     enum State {
         Inactive, // Created or started, but not in an event callback
diff --git a/third_party/WebKit/Source/modules/netinfo/NetworkInformation.cpp b/third_party/WebKit/Source/modules/netinfo/NetworkInformation.cpp
index 5e413f2..d812b43 100644
--- a/third_party/WebKit/Source/modules/netinfo/NetworkInformation.cpp
+++ b/third_party/WebKit/Source/modules/netinfo/NetworkInformation.cpp
@@ -103,7 +103,7 @@
     return ActiveDOMObject::getExecutionContext();
 }
 
-bool NetworkInformation::addEventListenerInternal(const AtomicString& eventType, RawPtr<EventListener> listener, const EventListenerOptions& options)
+bool NetworkInformation::addEventListenerInternal(const AtomicString& eventType, EventListener* listener, const EventListenerOptions& options)
 {
     if (!EventTargetWithInlineData::addEventListenerInternal(eventType, listener, options))
         return false;
@@ -111,7 +111,7 @@
     return true;
 }
 
-bool NetworkInformation::removeEventListenerInternal(const AtomicString& eventType, RawPtr<EventListener> listener, const EventListenerOptions& options)
+bool NetworkInformation::removeEventListenerInternal(const AtomicString& eventType, EventListener* listener, const EventListenerOptions& options)
 {
     if (!EventTargetWithInlineData::removeEventListenerInternal(eventType, listener, options))
         return false;
diff --git a/third_party/WebKit/Source/modules/netinfo/NetworkInformation.h b/third_party/WebKit/Source/modules/netinfo/NetworkInformation.h
index 7a1055c1..7e60034 100644
--- a/third_party/WebKit/Source/modules/netinfo/NetworkInformation.h
+++ b/third_party/WebKit/Source/modules/netinfo/NetworkInformation.h
@@ -51,8 +51,8 @@
 
 protected:
     // EventTarget overrides.
-    bool addEventListenerInternal(const AtomicString& eventType, RawPtr<EventListener>, const EventListenerOptions&) override;
-    bool removeEventListenerInternal(const AtomicString& eventType, RawPtr<EventListener>, const EventListenerOptions&) override;
+    bool addEventListenerInternal(const AtomicString& eventType, EventListener*, const EventListenerOptions&) override;
+    bool removeEventListenerInternal(const AtomicString& eventType, EventListener*, const EventListenerOptions&) override;
 
 private:
     explicit NetworkInformation(ExecutionContext*);
diff --git a/third_party/WebKit/Source/modules/notifications/Notification.cpp b/third_party/WebKit/Source/modules/notifications/Notification.cpp
index b22dbe35..bd780fb 100644
--- a/third_party/WebKit/Source/modules/notifications/Notification.cpp
+++ b/third_party/WebKit/Source/modules/notifications/Notification.cpp
@@ -358,7 +358,7 @@
     return notificationManager()->maxActions();
 }
 
-DispatchEventResult Notification::dispatchEventInternal(RawPtr<Event> event)
+DispatchEventResult Notification::dispatchEventInternal(Event* event)
 {
     ASSERT(getExecutionContext()->isContextThread());
     return EventTarget::dispatchEventInternal(event);
diff --git a/third_party/WebKit/Source/modules/notifications/Notification.h b/third_party/WebKit/Source/modules/notifications/Notification.h
index bb224c2..b0a466a 100644
--- a/third_party/WebKit/Source/modules/notifications/Notification.h
+++ b/third_party/WebKit/Source/modules/notifications/Notification.h
@@ -122,7 +122,7 @@
 
 protected:
     // EventTarget interface.
-    DispatchEventResult dispatchEventInternal(RawPtr<Event>) final;
+    DispatchEventResult dispatchEventInternal(Event*) final;
 
 private:
     Notification(ExecutionContext*, const WebNotificationData&);
diff --git a/third_party/WebKit/Source/modules/presentation/PresentationAvailability.cpp b/third_party/WebKit/Source/modules/presentation/PresentationAvailability.cpp
index b3e9295..b3f6027e 100644
--- a/third_party/WebKit/Source/modules/presentation/PresentationAvailability.cpp
+++ b/third_party/WebKit/Source/modules/presentation/PresentationAvailability.cpp
@@ -64,7 +64,7 @@
     return ActiveDOMObject::getExecutionContext();
 }
 
-bool PresentationAvailability::addEventListenerInternal(const AtomicString& eventType, RawPtr<EventListener> listener, const EventListenerOptions& options)
+bool PresentationAvailability::addEventListenerInternal(const AtomicString& eventType, EventListener* listener, const EventListenerOptions& options)
 {
     if (eventType == EventTypeNames::change)
         UseCounter::count(getExecutionContext(), UseCounter::PresentationAvailabilityChangeEventListener);
diff --git a/third_party/WebKit/Source/modules/presentation/PresentationAvailability.h b/third_party/WebKit/Source/modules/presentation/PresentationAvailability.h
index e57c764..1c75d336 100644
--- a/third_party/WebKit/Source/modules/presentation/PresentationAvailability.h
+++ b/third_party/WebKit/Source/modules/presentation/PresentationAvailability.h
@@ -63,7 +63,7 @@
 
 protected:
     // EventTarget implementation.
-    bool addEventListenerInternal(const AtomicString& eventType, RawPtr<EventListener>, const EventListenerOptions&) override;
+    bool addEventListenerInternal(const AtomicString& eventType, EventListener*, const EventListenerOptions&) override;
 
 private:
     // Current state of the ActiveDOMObject. It is Active when created. It
diff --git a/third_party/WebKit/Source/modules/presentation/PresentationConnection.cpp b/third_party/WebKit/Source/modules/presentation/PresentationConnection.cpp
index 9a3a45b2..84da834 100644
--- a/third_party/WebKit/Source/modules/presentation/PresentationConnection.cpp
+++ b/third_party/WebKit/Source/modules/presentation/PresentationConnection.cpp
@@ -183,7 +183,7 @@
     return frame()->document();
 }
 
-bool PresentationConnection::addEventListenerInternal(const AtomicString& eventType, RawPtr<EventListener> listener, const EventListenerOptions& options)
+bool PresentationConnection::addEventListenerInternal(const AtomicString& eventType, EventListener* listener, const EventListenerOptions& options)
 {
     if (eventType == EventTypeNames::statechange)
         Deprecation::countDeprecation(getExecutionContext(), UseCounter::PresentationConnectionStateChangeEventListener);
diff --git a/third_party/WebKit/Source/modules/presentation/PresentationConnection.h b/third_party/WebKit/Source/modules/presentation/PresentationConnection.h
index 1e2ada0..2a94422b 100644
--- a/third_party/WebKit/Source/modules/presentation/PresentationConnection.h
+++ b/third_party/WebKit/Source/modules/presentation/PresentationConnection.h
@@ -79,7 +79,7 @@
 
 protected:
     // EventTarget implementation.
-    bool addEventListenerInternal(const AtomicString& eventType, RawPtr<EventListener>, const EventListenerOptions&) override;
+    bool addEventListenerInternal(const AtomicString& eventType, EventListener*, const EventListenerOptions&) override;
 
 private:
     class BlobLoader;
diff --git a/third_party/WebKit/Source/modules/presentation/PresentationRequest.cpp b/third_party/WebKit/Source/modules/presentation/PresentationRequest.cpp
index b62a56c..17981fea 100644
--- a/third_party/WebKit/Source/modules/presentation/PresentationRequest.cpp
+++ b/third_party/WebKit/Source/modules/presentation/PresentationRequest.cpp
@@ -71,7 +71,7 @@
     return ActiveDOMObject::getExecutionContext();
 }
 
-bool PresentationRequest::addEventListenerInternal(const AtomicString& eventType, RawPtr<EventListener> listener, const EventListenerOptions& options)
+bool PresentationRequest::addEventListenerInternal(const AtomicString& eventType, EventListener* listener, const EventListenerOptions& options)
 {
     if (eventType == EventTypeNames::connectionavailable)
         UseCounter::count(getExecutionContext(), UseCounter::PresentationRequestConnectionAvailableEventListener);
diff --git a/third_party/WebKit/Source/modules/presentation/PresentationRequest.h b/third_party/WebKit/Source/modules/presentation/PresentationRequest.h
index b2e80616..5890cf5 100644
--- a/third_party/WebKit/Source/modules/presentation/PresentationRequest.h
+++ b/third_party/WebKit/Source/modules/presentation/PresentationRequest.h
@@ -48,7 +48,7 @@
 
 protected:
     // EventTarget implementation.
-    bool addEventListenerInternal(const AtomicString& eventType, RawPtr<EventListener>, const EventListenerOptions&) override;
+    bool addEventListenerInternal(const AtomicString& eventType, EventListener*, const EventListenerOptions&) override;
 
 private:
     PresentationRequest(ExecutionContext*, const KURL&);
diff --git a/third_party/WebKit/Source/modules/screen_orientation/ScreenOrientationDispatcher.cpp b/third_party/WebKit/Source/modules/screen_orientation/ScreenOrientationDispatcher.cpp
index 60ff40462..d8eca516 100644
--- a/third_party/WebKit/Source/modules/screen_orientation/ScreenOrientationDispatcher.cpp
+++ b/third_party/WebKit/Source/modules/screen_orientation/ScreenOrientationDispatcher.cpp
@@ -10,8 +10,8 @@
 
 ScreenOrientationDispatcher& ScreenOrientationDispatcher::instance()
 {
-    DEFINE_STATIC_LOCAL(Persistent<ScreenOrientationDispatcher>, screenOrientationDispatcher, (new ScreenOrientationDispatcher()));
-    return *screenOrientationDispatcher;
+    DEFINE_STATIC_LOCAL(ScreenOrientationDispatcher, screenOrientationDispatcher, (new ScreenOrientationDispatcher));
+    return screenOrientationDispatcher;
 }
 
 ScreenOrientationDispatcher::ScreenOrientationDispatcher()
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScope.cpp b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScope.cpp
index 4d033a14..b0acf10 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScope.cpp
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScope.cpp
@@ -148,7 +148,7 @@
     m_registration = ServiceWorkerRegistration::getOrCreate(getExecutionContext(), handle.release());
 }
 
-bool ServiceWorkerGlobalScope::addEventListenerInternal(const AtomicString& eventType, RawPtr<EventListener> listener, const EventListenerOptions& options)
+bool ServiceWorkerGlobalScope::addEventListenerInternal(const AtomicString& eventType, EventListener* listener, const EventListenerOptions& options)
 {
     if (m_didEvaluateScript) {
         if (eventType == EventTypeNames::install) {
@@ -167,10 +167,10 @@
     return EventTargetNames::ServiceWorkerGlobalScope;
 }
 
-DispatchEventResult ServiceWorkerGlobalScope::dispatchEventInternal(RawPtr<Event> event)
+DispatchEventResult ServiceWorkerGlobalScope::dispatchEventInternal(Event* event)
 {
     m_eventNestingLevel++;
-    DispatchEventResult dispatchResult = WorkerGlobalScope::dispatchEventInternal(event.get());
+    DispatchEventResult dispatchResult = WorkerGlobalScope::dispatchEventInternal(event);
     if (event->interfaceName() == EventNames::ErrorEvent && m_eventNestingLevel == 2)
         m_hadErrorInTopLevelEventHandler = true;
     m_eventNestingLevel--;
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScope.h b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScope.h
index d3d8263..e074129 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScope.h
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScope.h
@@ -91,8 +91,8 @@
 
 protected:
     // EventTarget
-    DispatchEventResult dispatchEventInternal(RawPtr<Event>) override;
-    bool addEventListenerInternal(const AtomicString& eventType, RawPtr<EventListener>, const EventListenerOptions&) override;
+    DispatchEventResult dispatchEventInternal(Event*) override;
+    bool addEventListenerInternal(const AtomicString& eventType, EventListener*, const EventListenerOptions&) override;
 
 private:
     ServiceWorkerGlobalScope(const KURL&, const String& userAgent, ServiceWorkerThread*, double timeOrigin, PassOwnPtr<SecurityOrigin::PrivilegeData>, RawPtr<WorkerClients>);
diff --git a/third_party/WebKit/Source/modules/webmidi/MIDIInput.cpp b/third_party/WebKit/Source/modules/webmidi/MIDIInput.cpp
index 1a51b25..8983576 100644
--- a/third_party/WebKit/Source/modules/webmidi/MIDIInput.cpp
+++ b/third_party/WebKit/Source/modules/webmidi/MIDIInput.cpp
@@ -65,7 +65,7 @@
     setAttributeEventListener(EventTypeNames::midimessage, listener);
 }
 
-bool MIDIInput::addEventListenerInternal(const AtomicString& eventType, RawPtr<EventListener> listener, const EventListenerOptions& options)
+bool MIDIInput::addEventListenerInternal(const AtomicString& eventType, EventListener* listener, const EventListenerOptions& options)
 {
     if (eventType == EventTypeNames::midimessage) {
         // Implicit open. See setOnmidimessage().
diff --git a/third_party/WebKit/Source/modules/webmidi/MIDIInput.h b/third_party/WebKit/Source/modules/webmidi/MIDIInput.h
index abfdff3..32bddee 100644
--- a/third_party/WebKit/Source/modules/webmidi/MIDIInput.h
+++ b/third_party/WebKit/Source/modules/webmidi/MIDIInput.h
@@ -57,7 +57,7 @@
     DECLARE_VIRTUAL_TRACE();
 
 protected:
-    bool addEventListenerInternal(const AtomicString& eventType, RawPtr<EventListener>, const EventListenerOptions&) override;
+    bool addEventListenerInternal(const AtomicString& eventType, EventListener*, const EventListenerOptions&) override;
 
 private:
     MIDIInput(MIDIAccess*, const String& id, const String& manufacturer, const String& name, const String& version, MIDIAccessor::MIDIPortState);
diff --git a/third_party/WebKit/Source/platform/LifecycleContextTest.cpp b/third_party/WebKit/Source/platform/LifecycleContextTest.cpp
index 50c1e10..7dcbd72 100644
--- a/third_party/WebKit/Source/platform/LifecycleContextTest.cpp
+++ b/third_party/WebKit/Source/platform/LifecycleContextTest.cpp
@@ -36,9 +36,9 @@
 class DummyContext final : public GarbageCollectedFinalized<DummyContext>, public LifecycleNotifier<DummyContext, TestingObserver> {
     USING_GARBAGE_COLLECTED_MIXIN(DummyContext);
 public:
-    static RawPtr<DummyContext> create()
+    static DummyContext* create()
     {
-        return new DummyContext();
+        return new DummyContext;
     }
 
     DEFINE_INLINE_TRACE()
@@ -50,7 +50,7 @@
 class TestingObserver final : public GarbageCollectedFinalized<TestingObserver>, public LifecycleObserver<DummyContext, TestingObserver, DummyContext> {
     USING_GARBAGE_COLLECTED_MIXIN(TestingObserver);
 public:
-    static RawPtr<TestingObserver> create(DummyContext* context)
+    static TestingObserver* create(DummyContext* context)
     {
         return new TestingObserver(context);
     }
@@ -59,7 +59,7 @@
     {
         LifecycleObserver::contextDestroyed();
         if (m_observerToRemoveOnDestruct) {
-            lifecycleContext()->removeObserver(m_observerToRemoveOnDestruct.get());
+            lifecycleContext()->removeObserver(m_observerToRemoveOnDestruct);
             m_observerToRemoveOnDestruct.clear();
         }
         m_contextDestroyedCalled = true;
@@ -73,13 +73,13 @@
 
     void unobserve() { setContext(nullptr); }
 
-    void setObserverToRemoveAndDestroy(RawPtr<TestingObserver> observerToRemoveOnDestruct)
+    void setObserverToRemoveAndDestroy(TestingObserver* observerToRemoveOnDestruct)
     {
         ASSERT(!m_observerToRemoveOnDestruct);
         m_observerToRemoveOnDestruct = observerToRemoveOnDestruct;
     }
 
-    TestingObserver* innerObserver() const { return m_observerToRemoveOnDestruct.get(); }
+    TestingObserver* innerObserver() const { return m_observerToRemoveOnDestruct; }
     bool contextDestroyedCalled() const { return m_contextDestroyedCalled; }
 
 private:
@@ -95,10 +95,10 @@
 
 TEST(LifecycleContextTest, shouldObserveContextDestroyed)
 {
-    RawPtr<DummyContext> context = DummyContext::create();
-    Persistent<TestingObserver> observer = TestingObserver::create(context.get());
+    DummyContext* context = DummyContext::create();
+    Persistent<TestingObserver> observer = TestingObserver::create(context);
 
-    EXPECT_EQ(observer->lifecycleContext(), context.get());
+    EXPECT_EQ(observer->lifecycleContext(), context);
     EXPECT_FALSE(observer->contextDestroyedCalled());
     context->notifyContextDestroyed();
     context = nullptr;
@@ -109,8 +109,8 @@
 
 TEST(LifecycleContextTest, shouldNotObserveContextDestroyedIfUnobserve)
 {
-    RawPtr<DummyContext> context = DummyContext::create();
-    Persistent<TestingObserver> observer = TestingObserver::create(context.get());
+    DummyContext* context = DummyContext::create();
+    Persistent<TestingObserver> observer = TestingObserver::create(context);
     observer->unobserve();
     context->notifyContextDestroyed();
     context = nullptr;
@@ -121,17 +121,15 @@
 
 TEST(LifecycleContextTest, observerRemovedDuringNotifyDestroyed)
 {
-    // FIXME: Oilpan: this test can be removed when the LifecycleNotifier<T>::m_observers
-    // hash set is on the heap and membership is handled implicitly by the garbage collector.
-    RawPtr<DummyContext> context = DummyContext::create();
-    Persistent<TestingObserver> observer = TestingObserver::create(context.get());
-    RawPtr<TestingObserver> innerObserver = TestingObserver::create(context.get());
+    DummyContext* context = DummyContext::create();
+    Persistent<TestingObserver> observer = TestingObserver::create(context);
+    TestingObserver* innerObserver = TestingObserver::create(context);
     // Attach the observer to the other. When 'observer' is notified
     // of destruction, it will remove & destroy 'innerObserver'.
-    observer->setObserverToRemoveAndDestroy(innerObserver.release());
+    observer->setObserverToRemoveAndDestroy(innerObserver);
 
-    EXPECT_EQ(observer->lifecycleContext(), context.get());
-    EXPECT_EQ(observer->innerObserver()->lifecycleContext(), context.get());
+    EXPECT_EQ(observer->lifecycleContext(), context);
+    EXPECT_EQ(observer->innerObserver()->lifecycleContext(), context);
     EXPECT_FALSE(observer->contextDestroyedCalled());
     EXPECT_FALSE(observer->innerObserver()->contextDestroyedCalled());
 
diff --git a/third_party/WebKit/Source/platform/LifecycleNotifier.h b/third_party/WebKit/Source/platform/LifecycleNotifier.h
index 7e654cf..79710d9b 100644
--- a/third_party/WebKit/Source/platform/LifecycleNotifier.h
+++ b/third_party/WebKit/Source/platform/LifecycleNotifier.h
@@ -50,9 +50,7 @@
 
     DEFINE_INLINE_VIRTUAL_TRACE()
     {
-#if ENABLE(OILPAN)
         visitor->trace(m_observers);
-#endif
     }
 
     bool isIteratingOverObservers() const { return m_iterating != IteratingNone; }
@@ -89,13 +87,6 @@
 {
     // FIXME: Enable the following ASSERT. Also see a FIXME in Document::detach().
     // ASSERT(!m_observers.size() || m_didCallContextDestroyed);
-
-#if !ENABLE(OILPAN)
-    TemporaryChange<IterationType> scope(m_iterating, IteratingOverAll);
-    for (Observer* observer : m_observers) {
-        observer->clearLifecycleContext();
-    }
-#endif
 }
 
 template<typename T, typename Observer>
@@ -109,17 +100,11 @@
     Vector<UntracedMember<Observer>> snapshotOfObservers;
     copyToVector(m_observers, snapshotOfObservers);
     for (Observer* observer : snapshotOfObservers) {
-        // FIXME: Oilpan: At the moment, it's possible that the Observer is
-        // destructed during the iteration.
-        // Once we enable Oilpan by default for Observers *and*
-        // Observer::contextDestroyed() does not call removeObserver(),
-        // we can remove the hack by making m_observers
-        // a HeapHashSet<WeakMember<Observers>>. (i.e., we can just iterate
-        // m_observers without taking a snapshot).
-        if (m_observers.contains(observer)) {
-            ASSERT(observer->lifecycleContext() == context());
-            observer->contextDestroyed();
-        }
+        if (!m_observers.contains(observer))
+            continue;
+
+        ASSERT(observer->lifecycleContext() == context());
+        observer->contextDestroyed();
     }
 
     m_didCallContextDestroyed = true;
diff --git a/third_party/WebKit/Source/platform/LifecycleObserver.h b/third_party/WebKit/Source/platform/LifecycleObserver.h
index 09a9b3d..93a364a 100644
--- a/third_party/WebKit/Source/platform/LifecycleObserver.h
+++ b/third_party/WebKit/Source/platform/LifecycleObserver.h
@@ -28,7 +28,6 @@
 #define LifecycleObserver_h
 
 #include "platform/heap/Handle.h"
-#include "wtf/Assertions.h"
 
 namespace blink {
 
@@ -37,13 +36,6 @@
 public:
     using Context = T;
 
-#if !ENABLE(OILPAN)
-    virtual ~LifecycleObserver()
-    {
-        clearContext();
-    }
-#endif
-
     DEFINE_INLINE_VIRTUAL_TRACE()
     {
         visitor->trace(m_lifecycleContext);
@@ -52,7 +44,6 @@
     virtual void contextDestroyed() { }
 
     Context* lifecycleContext() const { return m_lifecycleContext; }
-    void clearLifecycleContext() { m_lifecycleContext = nullptr; }
 
 protected:
     explicit LifecycleObserver(Context* context)
diff --git a/third_party/WebKit/Source/platform/fonts/FontCache.cpp b/third_party/WebKit/Source/platform/fonts/FontCache.cpp
index 0600609..f2ab8a1 100644
--- a/third_party/WebKit/Source/platform/fonts/FontCache.cpp
+++ b/third_party/WebKit/Source/platform/fonts/FontCache.cpp
@@ -297,9 +297,9 @@
 
 HeapHashSet<WeakMember<FontCacheClient>>& fontCacheClients()
 {
-    DEFINE_STATIC_LOCAL(Persistent<HeapHashSet<WeakMember<FontCacheClient>>>, clients, (new HeapHashSet<WeakMember<FontCacheClient>>()));
+    DEFINE_STATIC_LOCAL(HeapHashSet<WeakMember<FontCacheClient>>, clients, (new HeapHashSet<WeakMember<FontCacheClient>>));
     invalidateFontCache = true;
-    return *clients;
+    return clients;
 }
 
 void FontCache::addClient(FontCacheClient* client)
diff --git a/third_party/WebKit/Source/platform/heap/BlinkGCAPIReference.md b/third_party/WebKit/Source/platform/heap/BlinkGCAPIReference.md
index e93446ba..1881237 100644
--- a/third_party/WebKit/Source/platform/heap/BlinkGCAPIReference.md
+++ b/third_party/WebKit/Source/platform/heap/BlinkGCAPIReference.md
@@ -234,13 +234,8 @@
 *** aside
 *Transitional only*
 
-`RawPtr<T>` is a simple wrapper of a raw pointer `T*` equipped with common member functions defined in other smart
-pointer templates, such as `get()` or `clear()`. `RawPtr<T>` is only meant to be used during the transition period;
-it is only used in the forms like `OwnPtrWillBeRawPtr<T>` or `RefPtrWillBeRawPtr<T>` so you can share as much code
-as possible in both pre- and post-Oilpan worlds.
-
-`RawPtr<T>` is declared and defined in `wtf/RawPtr.h`.
-***
+`RawPtr<T>` is a simple wrapper of a raw pointer `T*` used in the transitional period.
+Most`RawPtr<T>`s will be replaced with raw pointers.
 
 ### Member, WeakMember
 
diff --git a/third_party/WebKit/Source/platform/heap/GarbageCollected.h b/third_party/WebKit/Source/platform/heap/GarbageCollected.h
index 26d4039..34be299 100644
--- a/third_party/WebKit/Source/platform/heap/GarbageCollected.h
+++ b/third_party/WebKit/Source/platform/heap/GarbageCollected.h
@@ -208,12 +208,6 @@
     }                                                                   \
 private:
 
-#if ENABLE(OILPAN)
-#define WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(TYPE) USING_GARBAGE_COLLECTED_MIXIN(TYPE)
-#else
-#define WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(TYPE)
-#endif
-
 // An empty class with a constructor that's arranged invoked when all derived constructors
 // of a mixin instance have completed and it is safe to allow GCs again. See
 // AllocateObjectTrait<> comment for more.
diff --git a/third_party/WebKit/Source/platform/heap/Handle.h b/third_party/WebKit/Source/platform/heap/Handle.h
index 78cd8f1..fb28042 100644
--- a/third_party/WebKit/Source/platform/heap/Handle.h
+++ b/third_party/WebKit/Source/platform/heap/Handle.h
@@ -1005,116 +1005,6 @@
 template<typename T, typename U> inline bool operator==(const Persistent<T>& a, const Member<U>& b) { return a.get() == b.get(); }
 template<typename T, typename U> inline bool operator!=(const Persistent<T>& a, const Member<U>& b) { return a.get() != b.get(); }
 
-template<typename T>
-class DummyBase {
-public:
-    DummyBase() { }
-    ~DummyBase() { }
-};
-
-// We need this explicit instantiation for component build on Windows.
-template<>
-class PLATFORM_EXPORT DummyBase<void> { };
-
-// CPP-defined type names for the transition period where we want to
-// support both reference counting and garbage collection based on a
-// compile-time flag.
-//
-// C++11 template aliases were initially used (with clang only, not
-// with GCC nor MSVC.) However, supporting both CPP defines and
-// template aliases is problematic from outside a WebCore namespace
-// when Oilpan is disabled: e.g.,
-// blink::RefCountedWillBeGarbageCollected as a template alias would
-// uniquely resolve from within any namespace, but if it is backed by
-// a CPP #define, it would expand to blink::RefCounted, and not the
-// required WTF::RefCounted.
-//
-// Having the CPP expansion instead be fully namespace qualified, and the
-// transition type be unqualified, would dually not work for template
-// aliases. So, slightly unfortunately, fall back/down to the lowest
-// commmon denominator of using CPP macros only.
-#if ENABLE(OILPAN)
-#define PassRefPtrWillBeRawPtr WTF::RawPtr
-#define RefCountedWillBeGarbageCollected blink::GarbageCollected
-#define RefCountedWillBeGarbageCollectedFinalized blink::GarbageCollectedFinalized
-#define RefCountedWillBeRefCountedGarbageCollected blink::RefCountedGarbageCollected
-#define RefCountedGarbageCollectedWillBeGarbageCollectedFinalized blink::GarbageCollectedFinalized
-#define RefCountedWillBeNoBase blink::DummyBase
-#define RefCountedGarbageCollectedWillBeNoBase blink::DummyBase
-#define ThreadSafeRefCountedWillBeGarbageCollected blink::GarbageCollected
-#define ThreadSafeRefCountedWillBeGarbageCollectedFinalized blink::GarbageCollectedFinalized
-#define PersistentWillBeMember blink::Member
-#define CrossThreadPersistentWillBeMember blink::Member
-#define RefPtrWillBePersistent blink::Persistent
-#define RefPtrWillBeRawPtr WTF::RawPtr
-#define RefPtrWillBeMember blink::Member
-#define RefPtrWillBeWeakMember blink::WeakMember
-#define RefPtrWillBeWeakPersistent blink::WeakPersistent
-#define RefPtrWillBeCrossThreadPersistent blink::CrossThreadPersistent
-#define RawPtrWillBeMember blink::Member
-#define RawPtrWillBePersistent blink::Persistent
-#define RawPtrWillBeWeakMember blink::WeakMember
-#define RawPtrWillBeWeakPersistent blink::WeakPersistent
-#define RawPtrWillBeUntracedMember blink::UntracedMember
-#define OwnPtrWillBeCrossThreadPersistent blink::CrossThreadPersistent
-#define OwnPtrWillBeMember blink::Member
-#define OwnPtrWillBePersistent blink::Persistent
-#define OwnPtrWillBeRawPtr WTF::RawPtr
-#define PassOwnPtrWillBeRawPtr WTF::RawPtr
-#define WeakPtrWillBeCrossThreadWeakPersistent blink::CrossThreadWeakPersistent
-#define WeakPtrWillBeMember blink::Member
-#define WeakPtrWillBeRawPtr WTF::RawPtr
-#define WeakPtrWillBeWeakMember blink::WeakMember
-#define WeakPtrWillBeWeakPersistent blink::WeakPersistent
-#define NoBaseWillBeGarbageCollected blink::GarbageCollected
-#define NoBaseWillBeGarbageCollectedFinalized blink::GarbageCollectedFinalized
-#define NoBaseWillBeRefCountedGarbageCollected blink::RefCountedGarbageCollected
-#define WillBeHeapHashMap blink::HeapHashMap
-#define WillBePersistentHeapHashMap blink::PersistentHeapHashMap
-#define WillBeHeapHashSet blink::HeapHashSet
-#define WillBePersistentHeapHashSet blink::PersistentHeapHashSet
-#define WillBeHeapLinkedHashSet blink::HeapLinkedHashSet
-#define WillBePersistentHeapLinkedHashSet blink::PersistentHeapLinkedHashSet
-#define WillBeHeapListHashSet blink::HeapListHashSet
-#define WillBePersistentHeapListHashSet blink::PersistentHeapListHashSet
-#define WillBeHeapVector blink::HeapVector
-#define WillBePersistentHeapVector blink::PersistentHeapVector
-#define WillBeHeapDeque blink::HeapDeque
-#define WillBePersistentHeapDeque blink::PersistentHeapDeque
-#define WillBeHeapHashCountedSet blink::HeapHashCountedSet
-#define WillBePersistentHeapHashCountedSet blink::PersistentHeapHashCountedSet
-#define WillBeGarbageCollectedMixin blink::GarbageCollectedMixin
-#define WillBeHeapSupplement blink::HeapSupplement
-#define WillBeHeapSupplementable blink::HeapSupplementable
-#define WillBeHeapTerminatedArray blink::HeapTerminatedArray
-#define WillBeHeapTerminatedArrayBuilder blink::HeapTerminatedArrayBuilder
-#define WillBeHeapLinkedStack blink::HeapLinkedStack
-#define PersistentHeapHashMapWillBeHeapHashMap blink::HeapHashMap
-#define PersistentHeapHashSetWillBeHeapHashSet blink::HeapHashSet
-#define PersistentHeapDequeWillBeHeapDeque blink::HeapDeque
-#define PersistentHeapVectorWillBeHeapVector blink::HeapVector
-
-template<typename T> T* adoptRefWillBeNoop(T* ptr)
-{
-    static const bool isGarbageCollected = IsGarbageCollectedType<T>::value;
-    static const bool isRefCounted = WTF::IsSubclassOfTemplate<typename std::remove_const<T>::type, RefCounted>::value;
-    static_assert(isGarbageCollected && !isRefCounted, "T needs to be a non-refcounted, garbage collected type.");
-    return ptr;
-}
-
-template<typename T> T* adoptPtrWillBeNoop(T* ptr)
-{
-    static const bool isGarbageCollected = IsGarbageCollectedType<T>::value;
-    static_assert(isGarbageCollected, "T needs to be a garbage collected type.");
-    return ptr;
-}
-
-#define USING_FAST_MALLOC_WILL_BE_REMOVED(type) // do nothing when oilpan is enabled.
-#define USING_FAST_MALLOC_WITH_TYPE_NAME_WILL_BE_REMOVED(type)
-#define DECLARE_EMPTY_DESTRUCTOR_WILL_BE_REMOVED(type) // do nothing
-#define DECLARE_EMPTY_VIRTUAL_DESTRUCTOR_WILL_BE_REMOVED(type) // do nothing
-#define DEFINE_EMPTY_DESTRUCTOR_WILL_BE_REMOVED(type) // do nothing
-
 #if defined(LEAK_SANITIZER)
 #define DEFINE_STATIC_REF_WILL_BE_PERSISTENT(type, name, arguments) \
     static type* name = *(new Persistent<type>(arguments))->registerAsStaticReference()
@@ -1123,90 +1013,6 @@
     static type* name = *(new Persistent<type>(arguments))
 #endif
 
-#else // !ENABLE(OILPAN)
-
-#define PassRefPtrWillBeRawPtr WTF::PassRefPtr
-#define RefCountedWillBeGarbageCollected WTF::RefCounted
-#define RefCountedWillBeGarbageCollectedFinalized WTF::RefCounted
-#define RefCountedWillBeRefCountedGarbageCollected WTF::RefCounted
-#define RefCountedGarbageCollectedWillBeGarbageCollectedFinalized blink::RefCountedGarbageCollected
-#define RefCountedWillBeNoBase WTF::RefCounted
-#define RefCountedGarbageCollectedWillBeNoBase blink::RefCountedGarbageCollected
-#define ThreadSafeRefCountedWillBeGarbageCollected WTF::ThreadSafeRefCounted
-#define ThreadSafeRefCountedWillBeGarbageCollectedFinalized WTF::ThreadSafeRefCounted
-#define PersistentWillBeMember blink::Persistent
-#define CrossThreadPersistentWillBeMember blink::CrossThreadPersistent
-#define RefPtrWillBePersistent WTF::RefPtr
-#define RefPtrWillBeRawPtr WTF::RefPtr
-#define RefPtrWillBeMember WTF::RefPtr
-#define RefPtrWillBeWeakMember WTF::RefPtr
-#define RefPtrWillBeWeakPersistent WTF::RefPtr
-#define RefPtrWillBeCrossThreadPersistent WTF::RefPtr
-#define RawPtrWillBeMember WTF::RawPtr
-#define RawPtrWillBePersistent WTF::RawPtr
-#define RawPtrWillBeWeakMember WTF::RawPtr
-#define RawPtrWillBeWeakPersistent WTF::RawPtr
-#define RawPtrWillBeUntracedMember WTF::RawPtr
-#define OwnPtrWillBeCrossThreadPersistent WTF::OwnPtr
-#define OwnPtrWillBeMember WTF::OwnPtr
-#define OwnPtrWillBePersistent WTF::OwnPtr
-#define OwnPtrWillBeRawPtr WTF::OwnPtr
-#define PassOwnPtrWillBeRawPtr WTF::PassOwnPtr
-#define WeakPtrWillBeCrossThreadWeakPersistent WTF::WeakPtr
-#define WeakPtrWillBeMember WTF::WeakPtr
-#define WeakPtrWillBeRawPtr WTF::WeakPtr
-#define WeakPtrWillBeWeakMember WTF::WeakPtr
-#define WeakPtrWillBeWeakPersistent WTF::WeakPtr
-#define NoBaseWillBeGarbageCollected blink::DummyBase
-#define NoBaseWillBeGarbageCollectedFinalized blink::DummyBase
-#define NoBaseWillBeRefCountedGarbageCollected blink::DummyBase
-#define WillBeHeapHashMap WTF::HashMap
-#define WillBePersistentHeapHashMap WTF::HashMap
-#define WillBeHeapHashSet WTF::HashSet
-#define WillBePersistentHeapHashSet WTF::HashSet
-#define WillBeHeapLinkedHashSet WTF::LinkedHashSet
-#define WillBePersistentLinkedHeapHashSet WTF::LinkedHashSet
-#define WillBeHeapListHashSet WTF::ListHashSet
-#define WillBePersistentListHeapHashSet WTF::ListHashSet
-#define WillBeHeapVector WTF::Vector
-#define WillBePersistentHeapVector WTF::Vector
-#define WillBeHeapDeque WTF::Deque
-#define WillBePersistentHeapDeque WTF::Deque
-#define WillBeHeapHashCountedSet WTF::HashCountedSet
-#define WillBePersistentHeapHashCountedSet WTF::HashCountedSet
-#define WillBeGarbageCollectedMixin blink::DummyBase<void>
-#define WillBeHeapSupplement blink::Supplement
-#define WillBeHeapSupplementable blink::Supplementable
-#define WillBeHeapTerminatedArray WTF::TerminatedArray
-#define WillBeHeapTerminatedArrayBuilder WTF::TerminatedArrayBuilder
-#define WillBeHeapLinkedStack WTF::LinkedStack
-#define PersistentHeapHashMapWillBeHeapHashMap blink::PersistentHeapHashMap
-#define PersistentHeapHashSetWillBeHeapHashSet blink::PersistentHeapHashSet
-#define PersistentHeapDequeWillBeHeapDeque blink::PersistentHeapDeque
-#define PersistentHeapVectorWillBeHeapVector blink::PersistentHeapVector
-
-template<typename T> PassRefPtrWillBeRawPtr<T> adoptRefWillBeNoop(T* ptr) { return adoptRef(ptr); }
-template<typename T> PassOwnPtrWillBeRawPtr<T> adoptPtrWillBeNoop(T* ptr) { return adoptPtr(ptr); }
-
-#define USING_FAST_MALLOC_WILL_BE_REMOVED(type) USING_FAST_MALLOC(type)
-#define USING_FAST_MALLOC_WITH_TYPE_NAME_WILL_BE_REMOVED(type) USING_FAST_MALLOC_WITH_TYPE_NAME(type)
-#define DECLARE_EMPTY_DESTRUCTOR_WILL_BE_REMOVED(type) \
-    public:                                            \
-        ~type();                                       \
-    private:
-#define DECLARE_EMPTY_VIRTUAL_DESTRUCTOR_WILL_BE_REMOVED(type) \
-    public:                                                    \
-        virtual ~type();                                       \
-    private:
-
-#define DEFINE_EMPTY_DESTRUCTOR_WILL_BE_REMOVED(type) \
-    type::~type() { }
-
-#define DEFINE_STATIC_REF_WILL_BE_PERSISTENT(type, name, arguments) \
-    DEFINE_STATIC_REF(type, name, arguments)
-
-#endif // ENABLE(OILPAN)
-
 template<typename T, bool = IsGarbageCollectedType<T>::value>
 class RawPtrOrMemberTrait {
     STATIC_ONLY(RawPtrOrMemberTrait)
diff --git a/third_party/WebKit/Source/platform/heap/Heap.h b/third_party/WebKit/Source/platform/heap/Heap.h
index e096b69..14c091ab 100644
--- a/third_party/WebKit/Source/platform/heap/Heap.h
+++ b/third_party/WebKit/Source/platform/heap/Heap.h
@@ -492,12 +492,6 @@
 #define EAGERLY_FINALIZE() typedef int IsEagerlyFinalizedMarker
 #endif
 
-#if !ENABLE(OILPAN)
-#define EAGERLY_FINALIZE_WILL_BE_REMOVED() EAGERLY_FINALIZE()
-#else
-#define EAGERLY_FINALIZE_WILL_BE_REMOVED()
-#endif
-
 inline Address Heap::allocateOnArenaIndex(ThreadState* state, size_t size, int arenaIndex, size_t gcInfoIndex, const char* typeName)
 {
     ASSERT(state->isAllocationAllowed());
diff --git a/third_party/WebKit/Source/platform/heap/HeapTest.cpp b/third_party/WebKit/Source/platform/heap/HeapTest.cpp
index 301efe4..f2ef207 100644
--- a/third_party/WebKit/Source/platform/heap/HeapTest.cpp
+++ b/third_party/WebKit/Source/platform/heap/HeapTest.cpp
@@ -2432,18 +2432,6 @@
     Member<IntWrapper> m_wrapper;
 };
 
-// These class definitions test compile-time asserts with transition
-// types. They are therefore unused in test code and just need to
-// compile. This is intentional; do not delete the A and B classes below.
-class A : public GarbageCollectedMixin {
-};
-
-class B : public GarbageCollected<B>, public A {
-    WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(B);
-public:
-    DEFINE_INLINE_TRACE() { }
-};
-
 TEST(HeapTest, HeapVectorFilledWithValue)
 {
     IntWrapper* val = IntWrapper::create(1);
@@ -6509,4 +6497,25 @@
 #endif
 }
 
+TEST(HeapTest, TestStaticLocals)
+{
+    // Sanity check DEFINE_STATIC_LOCAL()s over heap allocated objects and collections.
+
+    DEFINE_STATIC_LOCAL(IntWrapper, intWrapper, (new IntWrapper(33)));
+    DEFINE_STATIC_LOCAL(PersistentHeapVector<Member<IntWrapper>>, persistentHeapVectorIntWrapper, ());
+    DEFINE_STATIC_LOCAL(HeapVector<Member<IntWrapper>>, heapVectorIntWrapper, (new HeapVector<Member<IntWrapper>>));
+
+    EXPECT_EQ(33, intWrapper.value());
+    EXPECT_EQ(0u, persistentHeapVectorIntWrapper.size());
+    EXPECT_EQ(0u, heapVectorIntWrapper.size());
+
+    persistentHeapVectorIntWrapper.append(&intWrapper);
+    heapVectorIntWrapper.append(&intWrapper);
+    EXPECT_EQ(1u, persistentHeapVectorIntWrapper.size());
+    EXPECT_EQ(1u, heapVectorIntWrapper.size());
+
+    EXPECT_EQ(persistentHeapVectorIntWrapper[0], heapVectorIntWrapper[0]);
+    EXPECT_EQ(33, heapVectorIntWrapper[0]->value());
+}
+
 } // namespace blink
diff --git a/third_party/WebKit/Source/platform/heap/ThreadState.h b/third_party/WebKit/Source/platform/heap/ThreadState.h
index ee9d569..6d3bd0a 100644
--- a/third_party/WebKit/Source/platform/heap/ThreadState.h
+++ b/third_party/WebKit/Source/platform/heap/ThreadState.h
@@ -113,12 +113,6 @@
 }                                                   \
 using UsingPreFinalizerMacroNeedsTrailingSemiColon = char
 
-#if ENABLE(OILPAN)
-#define WILL_BE_USING_PRE_FINALIZER(Class, method) USING_PRE_FINALIZER(Class, method)
-#else
-#define WILL_BE_USING_PRE_FINALIZER(Class, method)
-#endif
-
 class PLATFORM_EXPORT ThreadState {
     USING_FAST_MALLOC(ThreadState);
     WTF_MAKE_NONCOPYABLE(ThreadState);
diff --git a/third_party/WebKit/Source/platform/mac/VersionUtilMac.h b/third_party/WebKit/Source/platform/mac/VersionUtilMac.h
index 67784250..fececb1 100644
--- a/third_party/WebKit/Source/platform/mac/VersionUtilMac.h
+++ b/third_party/WebKit/Source/platform/mac/VersionUtilMac.h
@@ -9,9 +9,6 @@
 
 namespace blink {
 
-// Snow Leopard is Mac OS X 10.6, Darwin 10.
-PLATFORM_EXPORT bool IsOSSnowLeopard();
-
 // Lion is Mac OS X 10.7, Darwin 11.
 PLATFORM_EXPORT bool IsOSLionOrEarlier();
 
diff --git a/third_party/WebKit/Source/platform/mac/VersionUtilMac.mm b/third_party/WebKit/Source/platform/mac/VersionUtilMac.mm
index d91f04492..6567430b 100644
--- a/third_party/WebKit/Source/platform/mac/VersionUtilMac.mm
+++ b/third_party/WebKit/Source/platform/mac/VersionUtilMac.mm
@@ -57,7 +57,6 @@
 }
 
 enum {
-    SNOW_LEOPARD_MINOR_VERSION = 6,
     LION_MINOR_VERSION = 7,
     MAVERICKS_MINOR_VERSION = 9,
     YOSEMITE_MINOR_VERSION = 10,
@@ -68,11 +67,6 @@
 
 namespace blink {
 
-bool IsOSSnowLeopard()
-{
-    return MacOSXMinorVersion() == SNOW_LEOPARD_MINOR_VERSION;
-}
-
 bool IsOSLionOrEarlier()
 {
     return MacOSXMinorVersion() <= LION_MINOR_VERSION;
diff --git a/third_party/WebKit/Source/platform/scroll/Scrollbar.cpp b/third_party/WebKit/Source/platform/scroll/Scrollbar.cpp
index 25516fd..eb2e484 100644
--- a/third_party/WebKit/Source/platform/scroll/Scrollbar.cpp
+++ b/third_party/WebKit/Source/platform/scroll/Scrollbar.cpp
@@ -31,11 +31,6 @@
 #include "platform/PlatformMouseEvent.h"
 #include "platform/geometry/FloatRect.h"
 #include "platform/graphics/paint/CullRect.h"
-// See windowActiveChangedForSnowLeopardOnly() below.
-// TODO(ellyjones): remove this when Snow Leopard support is gone.
-#if OS(MACOSX)
-#include "platform/mac/VersionUtilMac.h"
-#endif
 #include "platform/scroll/ScrollAnimatorBase.h"
 #include "platform/scroll/ScrollableArea.h"
 #include "platform/scroll/ScrollbarTheme.h"
@@ -535,21 +530,6 @@
     return m_scrollableArea->scrollAnimator().shouldScrollbarParticipateInHitTesting(*this);
 }
 
-// Don't use this method. It will be removed later.
-// TODO(ellyjones): remove this method after Snow Leopard support drops.
-void Scrollbar::windowActiveChangedForSnowLeopardOnly()
-{
-#if OS(MACOSX)
-    // On Snow Leopard, scrollbars need to be invalidated when the window
-    // activity changes so that they take on the "inactive" scrollbar
-    // appearance. Later OS X releases do not have such an appearance.
-    if (m_theme.invalidateOnWindowActiveChange()) {
-        ASSERT(IsOSSnowLeopard());
-        invalidate();
-    }
-#endif
-}
-
 bool Scrollbar::isWindowActive() const
 {
     return m_scrollableArea && m_scrollableArea->isActive();
diff --git a/third_party/WebKit/Source/platform/scroll/Scrollbar.h b/third_party/WebKit/Source/platform/scroll/Scrollbar.h
index 2556f104..2024d62 100644
--- a/third_party/WebKit/Source/platform/scroll/Scrollbar.h
+++ b/third_party/WebKit/Source/platform/scroll/Scrollbar.h
@@ -116,7 +116,6 @@
     bool isOverlayScrollbar() const override;
     bool shouldParticipateInHitTesting();
 
-    void windowActiveChangedForSnowLeopardOnly();
     bool isWindowActive() const;
 
     // Return if the gesture event was handled. |shouldUpdateCapture|
diff --git a/third_party/WebKit/Source/web/InspectorOverlay.cpp b/third_party/WebKit/Source/web/InspectorOverlay.cpp
index cff0af0..7a944723 100644
--- a/third_party/WebKit/Source/web/InspectorOverlay.cpp
+++ b/third_party/WebKit/Source/web/InspectorOverlay.cpp
@@ -468,7 +468,7 @@
 
     ScriptForbiddenScope::AllowUserAgentScript allowScript;
 
-    DEFINE_STATIC_LOCAL(Persistent<FrameLoaderClient>, dummyFrameLoaderClient, (EmptyFrameLoaderClient::create()));
+    DEFINE_STATIC_LOCAL(FrameLoaderClient, dummyFrameLoaderClient, (EmptyFrameLoaderClient::create()));
     Page::PageClients pageClients;
     fillWithEmptyClients(pageClients);
     DCHECK(!m_overlayChromeClient);
@@ -495,7 +495,7 @@
     // through some non-composited paint function.
     overlaySettings.setAcceleratedCompositingEnabled(false);
 
-    RawPtr<LocalFrame> frame = LocalFrame::create(dummyFrameLoaderClient.get(), &m_overlayPage->frameHost(), 0);
+    RawPtr<LocalFrame> frame = LocalFrame::create(&dummyFrameLoaderClient, &m_overlayPage->frameHost(), 0);
     frame->setView(FrameView::create(frame.get()));
     frame->init();
     FrameLoader& loader = frame->loader();
diff --git a/third_party/WebKit/Source/web/WebDOMEvent.cpp b/third_party/WebKit/Source/web/WebDOMEvent.cpp
index fba00fff..43502ff 100644
--- a/third_party/WebKit/Source/web/WebDOMEvent.cpp
+++ b/third_party/WebKit/Source/web/WebDOMEvent.cpp
@@ -55,7 +55,7 @@
 {
 }
 
-WebDOMEvent::operator RawPtr<Event>() const
+WebDOMEvent::operator Event*() const
 {
     return m_private.get();
 }
diff --git a/third_party/WebKit/Source/web/WebPagePopupImpl.cpp b/third_party/WebKit/Source/web/WebPagePopupImpl.cpp
index 6c16c2f..19679ad6 100644
--- a/third_party/WebKit/Source/web/WebPagePopupImpl.cpp
+++ b/third_party/WebKit/Source/web/WebPagePopupImpl.cpp
@@ -277,8 +277,8 @@
     m_page->settings().setScrollAnimatorEnabled(m_webView->page()->settings().scrollAnimatorEnabled());
 
     provideContextFeaturesTo(*m_page, adoptPtr(new PagePopupFeaturesClient()));
-    DEFINE_STATIC_LOCAL(Persistent<FrameLoaderClient>, emptyFrameLoaderClient, (EmptyFrameLoaderClient::create()));
-    RawPtr<LocalFrame> frame = LocalFrame::create(emptyFrameLoaderClient.get(), &m_page->frameHost(), 0);
+    DEFINE_STATIC_LOCAL(FrameLoaderClient, emptyFrameLoaderClient, (EmptyFrameLoaderClient::create()));
+    RawPtr<LocalFrame> frame = LocalFrame::create(&emptyFrameLoaderClient, &m_page->frameHost(), 0);
     frame->setPagePopupOwner(m_popupClient->ownerElement());
     frame->setView(FrameView::create(frame.get()));
     frame->init();
diff --git a/third_party/WebKit/Source/wtf/ArrayBuffer.h b/third_party/WebKit/Source/wtf/ArrayBuffer.h
index 89a1198..38e2a00 100644
--- a/third_party/WebKit/Source/wtf/ArrayBuffer.h
+++ b/third_party/WebKit/Source/wtf/ArrayBuffer.h
@@ -114,7 +114,7 @@
 PassRefPtr<ArrayBuffer> ArrayBuffer::create(const void* source, unsigned byteLength)
 {
     ArrayBufferContents contents(byteLength, 1, ArrayBufferContents::NotShared, ArrayBufferContents::ZeroInitialize);
-    CHECK(contents.data());
+    RELEASE_ASSERT(contents.data());
     RefPtr<ArrayBuffer> buffer = adoptRef(new ArrayBuffer(contents));
     memcpy(buffer->data(), source, byteLength);
     return buffer.release();
@@ -122,7 +122,7 @@
 
 PassRefPtr<ArrayBuffer> ArrayBuffer::create(ArrayBufferContents& contents)
 {
-    CHECK(contents.data());
+    RELEASE_ASSERT(contents.data());
     return adoptRef(new ArrayBuffer(contents));
 }
 
@@ -139,7 +139,7 @@
 PassRefPtr<ArrayBuffer> ArrayBuffer::create(unsigned numElements, unsigned elementByteSize, ArrayBufferContents::InitializationPolicy policy)
 {
     ArrayBufferContents contents(numElements, elementByteSize, ArrayBufferContents::NotShared, policy);
-    CHECK(contents.data());
+    RELEASE_ASSERT(contents.data());
     return adoptRef(new ArrayBuffer(contents));
 }
 
@@ -159,7 +159,7 @@
 PassRefPtr<ArrayBuffer> ArrayBuffer::createShared(const void* source, unsigned byteLength)
 {
     ArrayBufferContents contents(byteLength, 1, ArrayBufferContents::Shared, ArrayBufferContents::ZeroInitialize);
-    CHECK(contents.data());
+    RELEASE_ASSERT(contents.data());
     RefPtr<ArrayBuffer> buffer = adoptRef(new ArrayBuffer(contents));
     memcpy(buffer->data(), source, byteLength);
     return buffer.release();
@@ -168,7 +168,7 @@
 PassRefPtr<ArrayBuffer> ArrayBuffer::createShared(unsigned numElements, unsigned elementByteSize, ArrayBufferContents::InitializationPolicy policy)
 {
     ArrayBufferContents contents(numElements, elementByteSize, ArrayBufferContents::Shared, policy);
-    CHECK(contents.data());
+    RELEASE_ASSERT(contents.data());
     return adoptRef(new ArrayBuffer(contents));
 }
 
diff --git a/third_party/WebKit/Source/wtf/Deque.h b/third_party/WebKit/Source/wtf/Deque.h
index 38c8a3e..4074907 100644
--- a/third_party/WebKit/Source/wtf/Deque.h
+++ b/third_party/WebKit/Source/wtf/Deque.h
@@ -84,13 +84,13 @@
 
     T& at(size_t i)
     {
-        CHECK_LT(i, size());
+        RELEASE_ASSERT(i < size());
         size_t right = m_buffer.capacity() - m_start;
         return i < right ? m_buffer.buffer()[m_start + i] : m_buffer.buffer()[i - right];
     }
     const T& at(size_t i) const
     {
-        CHECK_LT(i, size());
+        RELEASE_ASSERT(i < size());
         size_t right = m_buffer.capacity() - m_start;
         return i < right ? m_buffer.buffer()[m_start + i] : m_buffer.buffer()[i - right];
     }
@@ -576,14 +576,14 @@
 template <typename T, size_t inlineCapacity, typename Allocator>
 inline T* DequeIteratorBase<T, inlineCapacity, Allocator>::after() const
 {
-    CHECK_NE(m_index, m_deque->m_end);
+    RELEASE_ASSERT(m_index != m_deque->m_end);
     return &m_deque->m_buffer.buffer()[m_index];
 }
 
 template <typename T, size_t inlineCapacity, typename Allocator>
 inline T* DequeIteratorBase<T, inlineCapacity, Allocator>::before() const
 {
-    CHECK_NE(m_index, m_deque->m_start);
+    RELEASE_ASSERT(m_index != m_deque->m_start);
     if (!m_index)
         return &m_deque->m_buffer.buffer()[m_deque->m_buffer.capacity() - 1];
     return &m_deque->m_buffer.buffer()[m_index - 1];
diff --git a/third_party/WebKit/Source/wtf/Functional.h b/third_party/WebKit/Source/wtf/Functional.h
index 159fbb9..b56188d 100644
--- a/third_party/WebKit/Source/wtf/Functional.h
+++ b/third_party/WebKit/Source/wtf/Functional.h
@@ -240,7 +240,7 @@
         // must be called and destructed on the thread where it is created.
         // If it is intended to be used cross-thread, use
         // blink::threadSafeBind() or blink::createCrossThreadTask() instead.
-        CHECK_EQ(m_createdThread, currentThread());
+        RELEASE_ASSERT(m_createdThread == currentThread());
     }
 
 private:
diff --git a/third_party/WebKit/Source/wtf/HashTable.h b/third_party/WebKit/Source/wtf/HashTable.h
index 155ad734..aad25e7c 100644
--- a/third_party/WebKit/Source/wtf/HashTable.h
+++ b/third_party/WebKit/Source/wtf/HashTable.h
@@ -631,7 +631,7 @@
         newCapacity = KeyTraits::minimumTableSize;
 
     if (newCapacity > capacity()) {
-        CHECK(!static_cast<int>(newCapacity >> 31)); // HashTable capacity should not overflow 32bit int.
+        RELEASE_ASSERT(!static_cast<int>(newCapacity >> 31)); // HashTable capacity should not overflow 32bit int.
         rehash(newCapacity, 0);
     }
 }
@@ -1057,7 +1057,7 @@
         newSize = m_tableSize;
     } else {
         newSize = m_tableSize * 2;
-        CHECK_GT(newSize, m_tableSize);
+        RELEASE_ASSERT(newSize > m_tableSize);
     }
 
     return rehash(newSize, entry);
diff --git a/third_party/WebKit/Source/wtf/Optional.h b/third_party/WebKit/Source/wtf/Optional.h
index 3d8ac18..1c2e422f 100644
--- a/third_party/WebKit/Source/wtf/Optional.h
+++ b/third_party/WebKit/Source/wtf/Optional.h
@@ -54,7 +54,7 @@
     template <typename... Args>
     void emplace(Args&&... args)
     {
-        CHECK(!m_ptr);
+        RELEASE_ASSERT(!m_ptr);
         m_ptr = reinterpret_cast_ptr<T*>(&m_storage.buffer);
         new (m_ptr) T(std::forward<Args>(args)...);
     }
diff --git a/third_party/WebKit/Source/wtf/PageAllocator.cpp b/third_party/WebKit/Source/wtf/PageAllocator.cpp
index 1ccb5c3..d9b96f1 100644
--- a/third_party/WebKit/Source/wtf/PageAllocator.cpp
+++ b/third_party/WebKit/Source/wtf/PageAllocator.cpp
@@ -108,12 +108,12 @@
     (void) pageAccessibility;
     if (preSlack) {
         int res = munmap(base, preSlack);
-        CHECK(!res);
+        RELEASE_ASSERT(!res);
         ret = reinterpret_cast<char*>(base) + preSlack;
     }
     if (postSlack) {
         int res = munmap(reinterpret_cast<char*>(ret) + trimLen, postSlack);
-        CHECK(!res);
+        RELEASE_ASSERT(!res);
     }
 #else // On Windows we can't resize the allocation run.
     if (preSlack || postSlack) {
@@ -171,7 +171,7 @@
 
     // Map a larger allocation so we can force alignment, but continue randomizing only on 64-bit POSIX.
     size_t tryLen = len + (align - kPageAllocationGranularity);
-    CHECK_GE(tryLen, len);
+    RELEASE_ASSERT(tryLen >= len);
     void* ret;
 
     do {
@@ -190,10 +190,10 @@
     ASSERT(!(len & kPageAllocationGranularityOffsetMask));
 #if OS(POSIX)
     int ret = munmap(addr, len);
-    CHECK(!ret);
+    RELEASE_ASSERT(!ret);
 #else
     BOOL ret = VirtualFree(addr, 0, MEM_RELEASE);
-    CHECK(ret);
+    RELEASE_ASSERT(ret);
 #endif
 }
 
@@ -202,10 +202,10 @@
     ASSERT(!(len & kSystemPageOffsetMask));
 #if OS(POSIX)
     int ret = mprotect(addr, len, PROT_NONE);
-    CHECK(!ret);
+    RELEASE_ASSERT(!ret);
 #else
     BOOL ret = VirtualFree(addr, len, MEM_DECOMMIT);
-    CHECK(ret);
+    RELEASE_ASSERT(ret);
 #endif
 }
 
@@ -224,7 +224,7 @@
     ASSERT(!(len & kSystemPageOffsetMask));
 #if OS(POSIX)
     int ret = madvise(addr, len, MADV_FREE);
-    CHECK(!ret);
+    RELEASE_ASSERT(!ret);
 #else
     setSystemPagesInaccessible(addr, len);
 #endif
@@ -236,7 +236,7 @@
 #if OS(POSIX)
     (void) addr;
 #else
-    CHECK(setSystemPagesAccessible(addr, len));
+    RELEASE_ASSERT(setSystemPagesAccessible(addr, len));
 #endif
 }
 
@@ -263,7 +263,7 @@
     // DiscardVirtualMemory is buggy in Win10 SP0, so fall back to MEM_RESET on failure.
     if (ret) {
         void* ret = VirtualAlloc(addr, len, MEM_RESET, PAGE_READWRITE);
-        CHECK(ret);
+        RELEASE_ASSERT(ret);
     }
 #endif
 }
diff --git a/third_party/WebKit/Source/wtf/PartitionAlloc.cpp b/third_party/WebKit/Source/wtf/PartitionAlloc.cpp
index cbcc03a0..a26147ab 100644
--- a/third_party/WebKit/Source/wtf/PartitionAlloc.cpp
+++ b/third_party/WebKit/Source/wtf/PartitionAlloc.cpp
@@ -80,7 +80,7 @@
     if (size > kMaxSystemPagesPerSlotSpan * kSystemPageSize) {
         ASSERT(!(size % kSystemPageSize));
         bestPages = static_cast<uint16_t>(size / kSystemPageSize);
-        CHECK_LT(bestPages, (1 << 8));
+        RELEASE_ASSERT(bestPages < (1 << 8));
         return static_cast<uint8_t>(bestPages);
     }
     ASSERT(size <= kMaxSystemPagesPerSlotSpan * kSystemPageSize);
@@ -100,7 +100,7 @@
         }
     }
     ASSERT(bestPages > 0);
-    CHECK_LE(bestPages, kMaxSystemPagesPerSlotSpan);
+    RELEASE_ASSERT(bestPages <= kMaxSystemPagesPerSlotSpan);
     return static_cast<uint8_t>(bestPages);
 }
 
@@ -1009,7 +1009,7 @@
         // pages accessible again.
         size_t recommitSize = newSize - currentSize;
         bool ret = setSystemPagesAccessible(charPtr + currentSize, recommitSize);
-        CHECK(ret);
+        RELEASE_ASSERT(ret);
         partitionRecommitSystemPages(root, charPtr + currentSize, recommitSize);
 
 #if ENABLE(ASSERT)
diff --git a/third_party/WebKit/Source/wtf/PartitionAlloc.h b/third_party/WebKit/Source/wtf/PartitionAlloc.h
index 9b9493e..218484e 100644
--- a/third_party/WebKit/Source/wtf/PartitionAlloc.h
+++ b/third_party/WebKit/Source/wtf/PartitionAlloc.h
@@ -658,7 +658,7 @@
 {
 #if defined(MEMORY_TOOL_REPLACES_ALLOCATOR)
     void* result = malloc(size);
-    CHECK(result);
+    RELEASE_ASSERT(result);
     return result;
 #else
     size_t requestedSize = size;
@@ -734,7 +734,7 @@
 {
 #if defined(MEMORY_TOOL_REPLACES_ALLOCATOR)
     void* result = malloc(size);
-    CHECK(result);
+    RELEASE_ASSERT(result);
     return result;
 #else
     ASSERT(root->initialized);
@@ -747,9 +747,9 @@
         // TODO(bashi): Remove following RELEAE_ASSERT()s once we find the cause of
         // http://crbug.com/514141
 #if OS(ANDROID)
-        CHECK(bucket >= &root->buckets[0] || bucket == &PartitionRootGeneric::gPagedBucket);
-        CHECK(bucket <= &root->buckets[kGenericNumBuckets - 1] || bucket == &PartitionRootGeneric::gPagedBucket);
-        CHECK(root->initialized);
+        RELEASE_ASSERT(bucket >= &root->buckets[0] || bucket == &PartitionRootGeneric::gPagedBucket);
+        RELEASE_ASSERT(bucket <= &root->buckets[kGenericNumBuckets - 1] || bucket == &PartitionRootGeneric::gPagedBucket);
+        RELEASE_ASSERT(root->initialized);
 #endif
         ret = partitionBucketAlloc(root, flags, size, bucket);
     }
diff --git a/third_party/WebKit/Source/wtf/PartitionAllocator.h b/third_party/WebKit/Source/wtf/PartitionAllocator.h
index 37cad84..e3b57e5 100644
--- a/third_party/WebKit/Source/wtf/PartitionAllocator.h
+++ b/third_party/WebKit/Source/wtf/PartitionAllocator.h
@@ -54,7 +54,7 @@
     template<typename T>
     static size_t quantizedSize(size_t count)
     {
-        CHECK_LE(count, kGenericMaxDirectMapped / sizeof(T));
+        RELEASE_ASSERT(count <= kGenericMaxDirectMapped / sizeof(T));
         return partitionAllocActualSize(Partitions::bufferPartition(), count * sizeof(T));
     }
     template <typename T>
diff --git a/third_party/WebKit/Source/wtf/Partitions.cpp b/third_party/WebKit/Source/wtf/Partitions.cpp
index 137d521..0fe349ce 100644
--- a/third_party/WebKit/Source/wtf/Partitions.cpp
+++ b/third_party/WebKit/Source/wtf/Partitions.cpp
@@ -84,7 +84,7 @@
 
 void Partitions::decommitFreeableMemory()
 {
-    CHECK(isMainThread());
+    RELEASE_ASSERT(isMainThread());
     if (!s_initialized)
         return;
 
diff --git a/third_party/WebKit/Source/wtf/StdLibExtras.h b/third_party/WebKit/Source/wtf/StdLibExtras.h
index 5475d3f..0a61369 100644
--- a/third_party/WebKit/Source/wtf/StdLibExtras.h
+++ b/third_party/WebKit/Source/wtf/StdLibExtras.h
@@ -30,6 +30,7 @@
 #include "wtf/Assertions.h"
 #include "wtf/CPU.h"
 #include "wtf/LeakAnnotations.h"
+#include "wtf/TypeTraits.h"
 #include <cstddef>
 
 #if ENABLE(ASSERT)
@@ -59,34 +60,63 @@
 };
 #endif
 
-// A direct static local to a Blink garbage collected objects isn't allowed;
-// must be wrapped up with a persistent reference.
-#define STATIC_ASSERT_FOR_LOCAL_WITH_GARBAGE_COLLECTED_TYPE(Name, Type) \
-    using Name##NoConstType = std::remove_const<Type>::type; \
-    using Name##NoPointerType = std::remove_pointer<Name##NoConstType>::type; \
-    using Name##NoReferenceType = std::remove_reference<Name##NoPointerType>::type; \
-    static_assert(!WTF::IsGarbageCollectedType<Name##NoReferenceType>::value || WTF::IsPersistentReferenceType<Name##NoReferenceType>::value, "Garbage collected static local needs to be wrapped up with a persistent reference")
+namespace blink {
+template<typename T>class Persistent;
+};
 
-// Use DEFINE_STATIC_LOCAL() to declare and define a static local variable (static T;)
-// so that it is leaked and its destructors are not called at exit.
-//
-// To cooperate with leak detection, the objects held onto by these local statics
-// will in some cases have to be finalized prior to leak checking. This only applies
-// to static references to Oilpan heap objects and what they transitively hold on to.
-// LEAK_SANITIZER_REGISTER_STATIC_LOCAL() takes care of the details.
-//
+template<typename T, bool = WTF::IsGarbageCollectedType<T>::value && !WTF::IsPersistentReferenceType<T>::value>
+class StaticLocalWrapper {
+public:
+    using WrapType = T;
+
+    static T& unwrap(T* singleton)
+    {
+        return *singleton;
+    }
+};
+
+template<typename T>
+class StaticLocalWrapper<T, true> {
+public:
+    using WrapType = blink::Persistent<T>;
+
+    static T& unwrap(blink::Persistent<T>* singleton)
+    {
+        ASSERT(singleton);
+        // If this assert triggers, you're supplying an empty ("()") 'Arguments' argument
+        // to DEFINE_STATIC_LOCAL() - it must be the heap object you wish to create
+        // as a static singleton and wrapped up with a Persistent reference.
+        ASSERT(*singleton);
+        return **singleton;
+    }
+};
+
 #if ENABLE(ASSERT)
-#define DEFINE_STATIC_LOCAL(Type, Name, Arguments)        \
-    STATIC_ASSERT_FOR_LOCAL_WITH_GARBAGE_COLLECTED_TYPE(Name, Type); \
+#define DEFINE_STATIC_LOCAL_CHECK_THREADSAFE_ACCESS(Name) \
     static StaticLocalVerifier Name##StaticLocalVerifier; \
-    ASSERT(Name##StaticLocalVerifier.isNotRacy());        \
-    static Type& Name = *LEAK_SANITIZER_REGISTER_STATIC_LOCAL(Type, new Type Arguments)
+    ASSERT(Name##StaticLocalVerifier.isNotRacy())
 #else
-#define DEFINE_STATIC_LOCAL(Type, Name, Arguments) \
-    STATIC_ASSERT_FOR_LOCAL_WITH_GARBAGE_COLLECTED_TYPE(Name, Type); \
-    static Type& Name = *LEAK_SANITIZER_REGISTER_STATIC_LOCAL(Type, new Type Arguments)
+#define DEFINE_STATIC_LOCAL_CHECK_THREADSAFE_ACCESS(Name)
 #endif
 
+// Use DEFINE_STATIC_LOCAL() to declare and define a static local variable
+// (static T;) so that it is leaked and its destructors are not called at exit.
+// T may also be a Blink garbage collected object, in which case it is
+// wrapped up by an off-heap Persistent<T> reference to the object, keeping
+// it alive across GCs.
+//
+// To cooperate with leak detection(LSan) for Blink garbage collected objects,
+// the objects owned by persistent local statics will in some cases have to be
+// finalized prior to leak checking. This only applies to static references to
+// Blink heap objects and what they transitively hold on to. Hence the
+// LEAK_SANITIZER_REGISTER_STATIC_LOCAL() use, it taking care of the grungy
+// details.
+//
+#define DEFINE_STATIC_LOCAL(Type, Name, Arguments)                    \
+    DEFINE_STATIC_LOCAL_CHECK_THREADSAFE_ACCESS(Name);                \
+    using WrappedTypeFor##Name = StaticLocalWrapper<Type>::WrapType;  \
+    static Type& Name = StaticLocalWrapper<Type>::unwrap(LEAK_SANITIZER_REGISTER_STATIC_LOCAL(WrappedTypeFor##Name, new WrappedTypeFor##Name Arguments))
+
 // Use this to declare and define a static local pointer to a ref-counted object so that
 // it is leaked so that the object's destructors are not called at exit.
 // This macro should be used with ref-counted objects rather than DEFINE_STATIC_LOCAL macro,
diff --git a/third_party/WebKit/Source/wtf/TerminatedArrayBuilder.h b/third_party/WebKit/Source/wtf/TerminatedArrayBuilder.h
index 4c4a962..eec01310 100644
--- a/third_party/WebKit/Source/wtf/TerminatedArrayBuilder.h
+++ b/third_party/WebKit/Source/wtf/TerminatedArrayBuilder.h
@@ -43,7 +43,7 @@
 
     void append(const T& item)
     {
-        CHECK_LT(m_count, m_capacity);
+        RELEASE_ASSERT(m_count < m_capacity);
         ASSERT(!item.isLastInArray());
         m_array->at(m_count++) = item;
         if (m_count == m_capacity)
@@ -52,7 +52,7 @@
 
     typename ArrayType<T>::Allocator::PassPtr release()
     {
-        CHECK_EQ(m_count, m_capacity);
+        RELEASE_ASSERT(m_count == m_capacity);
         assertValid();
         return m_array.release();
     }
diff --git a/third_party/WebKit/Source/wtf/TypedArrayBase.h b/third_party/WebKit/Source/wtf/TypedArrayBase.h
index 32c7f9a..d1dd854 100644
--- a/third_party/WebKit/Source/wtf/TypedArrayBase.h
+++ b/third_party/WebKit/Source/wtf/TypedArrayBase.h
@@ -93,7 +93,7 @@
     static PassRefPtr<Subclass> create(PassRefPtr<ArrayBuffer> buffer, unsigned byteOffset, unsigned length)
     {
         RefPtr<ArrayBuffer> buf(buffer);
-        CHECK(verifySubRange<T>(buf, byteOffset, length));
+        RELEASE_ASSERT(verifySubRange<T>(buf, byteOffset, length));
         return adoptRef(new Subclass(buf.release(), byteOffset, length));
     }
 
diff --git a/third_party/WebKit/Source/wtf/Vector.h b/third_party/WebKit/Source/wtf/Vector.h
index f65d9a6..c6c0f98 100644
--- a/third_party/WebKit/Source/wtf/Vector.h
+++ b/third_party/WebKit/Source/wtf/Vector.h
@@ -841,12 +841,12 @@
 
     T& at(size_t i)
     {
-        CHECK_LT(i, size());
+        RELEASE_ASSERT(i < size());
         return Base::buffer()[i];
     }
     const T& at(size_t i) const
     {
-        CHECK_LT(i, size());
+        RELEASE_ASSERT(i < size());
         return Base::buffer()[i];
     }
 
@@ -1125,7 +1125,7 @@
     if (INLINE_CAPACITY) {
         expandedCapacity *= 2;
         // Check for integer overflow, which could happen in the 32-bit build.
-        CHECK_GT(expandedCapacity, oldCapacity);
+        RELEASE_ASSERT(expandedCapacity > oldCapacity);
     } else {
         // This cannot integer overflow.
         // On 64-bit, the "expanded" integer is 32-bit, and any encroachment
@@ -1291,7 +1291,7 @@
         data = expandCapacity(newSize, data);
         ASSERT(begin());
     }
-    CHECK_GE(newSize, m_size);
+    RELEASE_ASSERT(newSize >= m_size);
     T* dest = end();
     ANNOTATE_CHANGE_SIZE(begin(), capacity(), m_size, newSize);
     VectorCopier<VectorTraits<T>::canCopyWithMemcpy, T>::uninitializedCopy(data, &data[dataSize], dest);
@@ -1358,13 +1358,13 @@
 void Vector<T, inlineCapacity, Allocator>::insert(size_t position, const U* data, size_t dataSize)
 {
     ASSERT(Allocator::isAllocationAllowed());
-    CHECK_LE(position, size());
+    RELEASE_ASSERT(position <= size());
     size_t newSize = m_size + dataSize;
     if (newSize > capacity()) {
         data = expandCapacity(newSize, data);
         ASSERT(begin());
     }
-    CHECK_GE(newSize, m_size);
+    RELEASE_ASSERT(newSize >= m_size);
     ANNOTATE_CHANGE_SIZE(begin(), capacity(), m_size, newSize);
     T* spot = begin() + position;
     TypeOperations::moveOverlapping(spot, end(), spot + dataSize);
@@ -1377,7 +1377,7 @@
 inline void Vector<T, inlineCapacity, Allocator>::insert(size_t position, U&& val)
 {
     ASSERT(Allocator::isAllocationAllowed());
-    CHECK_LE(position, size());
+    RELEASE_ASSERT(position <= size());
     typename std::remove_reference<U>::type* data = &val;
     if (size() == capacity()) {
         data = expandCapacity(size() + 1, data);
@@ -1421,7 +1421,7 @@
 template <typename T, size_t inlineCapacity, typename Allocator>
 inline void Vector<T, inlineCapacity, Allocator>::remove(size_t position)
 {
-    CHECK_LT(position, size());
+    RELEASE_ASSERT(position < size());
     T* spot = begin() + position;
     spot->~T();
     TypeOperations::moveOverlapping(spot + 1, end(), spot);
@@ -1436,7 +1436,7 @@
     ASSERT_WITH_SECURITY_IMPLICATION(position <= size());
     if (!length)
         return;
-    CHECK_LE(position + length, size());
+    RELEASE_ASSERT(position + length <= size());
     T* beginSpot = begin() + position;
     T* endSpot = beginSpot + length;
     TypeOperations::destruct(beginSpot, endSpot);
diff --git a/third_party/WebKit/Source/wtf/WTF.cpp b/third_party/WebKit/Source/wtf/WTF.cpp
index 94200be..6129847 100644
--- a/third_party/WebKit/Source/wtf/WTF.cpp
+++ b/third_party/WebKit/Source/wtf/WTF.cpp
@@ -65,8 +65,8 @@
 {
     // WTF, and Blink in general, cannot handle being re-initialized, even if shutdown first.
     // Make that explicit here.
-    CHECK(!s_initialized);
-    CHECK(!s_shutdown);
+    RELEASE_ASSERT(!s_initialized);
+    RELEASE_ASSERT(!s_shutdown);
     s_initialized = true;
     initializeThreading();
 
@@ -78,8 +78,8 @@
 
 void shutdown()
 {
-    CHECK(s_initialized);
-    CHECK(!s_shutdown);
+    RELEASE_ASSERT(s_initialized);
+    RELEASE_ASSERT(!s_shutdown);
     s_shutdown = true;
 }
 
diff --git a/third_party/WebKit/Source/wtf/dtoa/utils.h b/third_party/WebKit/Source/wtf/dtoa/utils.h
index ef6bcf84..dcc433f 100644
--- a/third_party/WebKit/Source/wtf/dtoa/utils.h
+++ b/third_party/WebKit/Source/wtf/dtoa/utils.h
@@ -165,7 +165,7 @@
 
         // Access individual vector elements.
         T& operator[](int index) const {
-            CHECK(0 <= index && index < length_);
+            RELEASE_ASSERT(0 <= index && index < length_);
             return start_[index];
         }
 
diff --git a/third_party/WebKit/Source/wtf/text/AtomicString.cpp b/third_party/WebKit/Source/wtf/text/AtomicString.cpp
index 17e6c44..63d7abdad 100644
--- a/third_party/WebKit/Source/wtf/text/AtomicString.cpp
+++ b/third_party/WebKit/Source/wtf/text/AtomicString.cpp
@@ -406,7 +406,7 @@
         iterator = findString<LChar>(r);
     else
         iterator = findString<UChar>(r);
-    CHECK(iterator != atomicStrings().end());
+    RELEASE_ASSERT(iterator != atomicStrings().end());
     atomicStrings().remove(iterator);
 }
 
diff --git a/third_party/WebKit/Source/wtf/text/CString.cpp b/third_party/WebKit/Source/wtf/text/CString.cpp
index 12035ba..b3af14c 100644
--- a/third_party/WebKit/Source/wtf/text/CString.cpp
+++ b/third_party/WebKit/Source/wtf/text/CString.cpp
@@ -36,7 +36,7 @@
 
 PassRefPtr<CStringBuffer> CStringBuffer::createUninitialized(size_t length)
 {
-    CHECK_LT(length, numeric_limits<unsigned>::max() - sizeof(CStringBuffer));
+    RELEASE_ASSERT(length < (numeric_limits<unsigned>::max() - sizeof(CStringBuffer)));
 
     // The +1 is for the terminating NUL character.
     size_t size = sizeof(CStringBuffer) + length + 1;
diff --git a/third_party/WebKit/Source/wtf/text/StringConcatenate.cpp b/third_party/WebKit/Source/wtf/text/StringConcatenate.cpp
index 5ddaf20..7da90e9 100644
--- a/third_party/WebKit/Source/wtf/text/StringConcatenate.cpp
+++ b/third_party/WebKit/Source/wtf/text/StringConcatenate.cpp
@@ -49,7 +49,7 @@
     while (m_buffer[len] != UChar(0))
         ++len;
 
-    CHECK_LE(len, std::numeric_limits<unsigned>::max());
+    RELEASE_ASSERT(len <= std::numeric_limits<unsigned>::max());
 
     m_length = len;
 }
diff --git a/third_party/WebKit/Source/wtf/text/StringConcatenate.h b/third_party/WebKit/Source/wtf/text/StringConcatenate.h
index 41e6c09..63a7c4e 100644
--- a/third_party/WebKit/Source/wtf/text/StringConcatenate.h
+++ b/third_party/WebKit/Source/wtf/text/StringConcatenate.h
@@ -171,9 +171,9 @@
 
     bool is8Bit() { return false; }
 
-    void writeTo(LChar*)
+    NO_RETURN_DUE_TO_CRASH void writeTo(LChar*)
     {
-        CHECK(false);
+        RELEASE_ASSERT(false);
     }
 
     void writeTo(UChar* destination);
diff --git a/third_party/WebKit/Source/wtf/text/StringImpl.cpp b/third_party/WebKit/Source/wtf/text/StringImpl.cpp
index 17b0e6d..558beb8 100644
--- a/third_party/WebKit/Source/wtf/text/StringImpl.cpp
+++ b/third_party/WebKit/Source/wtf/text/StringImpl.cpp
@@ -357,7 +357,7 @@
     // Allocate a single buffer large enough to contain the StringImpl
     // struct as well as the data which it contains. This removes one
     // heap allocation from this call.
-    CHECK_LE(length, (std::numeric_limits<unsigned>::max() - sizeof(StringImpl)) / sizeof(LChar));
+    RELEASE_ASSERT(length <= ((std::numeric_limits<unsigned>::max() - sizeof(StringImpl)) / sizeof(LChar)));
     size_t size = sizeof(StringImpl) + length * sizeof(LChar);
 
     WTF_INTERNAL_LEAK_SANITIZER_DISABLED_SCOPE;
@@ -429,7 +429,7 @@
     if (!string)
         return empty();
     size_t length = strlen(reinterpret_cast<const char*>(string));
-    CHECK_LE(length, numeric_limits<unsigned>::max());
+    RELEASE_ASSERT(length <= numeric_limits<unsigned>::max());
     return create(string, length);
 }
 
@@ -525,7 +525,7 @@
     if (noUpper && !(ored & ~0x7F))
         return this;
 
-    CHECK_LE(m_length, static_cast<unsigned>(numeric_limits<unsigned>::max()));
+    RELEASE_ASSERT(m_length <= static_cast<unsigned>(numeric_limits<unsigned>::max()));
     unsigned length = m_length;
 
     UChar* data16;
@@ -584,7 +584,7 @@
     if (noUpper && !(ored & ~0x7F))
         return this;
 
-    CHECK_LE(m_length, static_cast<unsigned>(numeric_limits<int32_t>::max()));
+    RELEASE_ASSERT(m_length <= static_cast<unsigned>(numeric_limits<int32_t>::max()));
     int32_t length = m_length;
 
     if (!(ored & ~0x7F)) {
@@ -620,7 +620,7 @@
     // but in empirical testing, few actual calls to upper() are no-ops, so
     // it wouldn't be worth the extra time for pre-scanning.
 
-    CHECK_LE(m_length, static_cast<unsigned>(numeric_limits<int32_t>::max()));
+    RELEASE_ASSERT(m_length <= static_cast<unsigned>(numeric_limits<int32_t>::max()));
     int32_t length = m_length;
 
     if (is8Bit()) {
@@ -708,7 +708,7 @@
 static inline bool localeIdMatchesLang(const AtomicString& localeId, const char* lang)
 {
     size_t langLength = strlen(lang);
-    CHECK(langLength >= 2 && langLength <= 3);
+    RELEASE_ASSERT(langLength >= 2 && langLength <= 3);
     if (!localeId.impl() || !localeId.impl()->startsWithIgnoringCase(lang, langLength))
         return false;
     if (localeId.impl()->length() == langLength)
@@ -822,7 +822,7 @@
 
 PassRefPtr<StringImpl> StringImpl::foldCase()
 {
-    CHECK_LE(m_length, static_cast<unsigned>(numeric_limits<int32_t>::max()));
+    RELEASE_ASSERT(m_length <= static_cast<unsigned>(numeric_limits<int32_t>::max()));
     int32_t length = m_length;
 
     if (is8Bit()) {
@@ -1156,7 +1156,7 @@
     if (!matchString)
         return kNotFound;
     size_t matchStringLength = strlen(reinterpret_cast<const char*>(matchString));
-    CHECK_LE(matchStringLength, numeric_limits<unsigned>::max());
+    RELEASE_ASSERT(matchStringLength <= numeric_limits<unsigned>::max());
     unsigned matchLength = matchStringLength;
     if (!matchLength)
         return min(index, length());
@@ -1218,7 +1218,7 @@
     if (!matchString)
         return kNotFound;
     size_t matchStringLength = strlen(reinterpret_cast<const char*>(matchString));
-    CHECK_LE(matchStringLength, numeric_limits<unsigned>::max());
+    RELEASE_ASSERT(matchStringLength <= numeric_limits<unsigned>::max());
     unsigned matchLength = matchStringLength;
     if (!matchLength)
         return min(index, length());
@@ -1764,7 +1764,7 @@
     if (!lengthToReplace && !lengthToInsert)
         return this;
 
-    CHECK_LT(length() - lengthToReplace, numeric_limits<unsigned>::max() - lengthToInsert);
+    RELEASE_ASSERT((length() - lengthToReplace) < (numeric_limits<unsigned>::max() - lengthToInsert));
 
     if (is8Bit() && (!str || str->is8Bit())) {
         LChar* data;
@@ -1830,11 +1830,11 @@
     if (!matchCount)
         return this;
 
-    CHECK(!repStrLength || matchCount <= numeric_limits<unsigned>::max() / repStrLength);
+    RELEASE_ASSERT(!repStrLength || matchCount <= numeric_limits<unsigned>::max() / repStrLength);
 
     unsigned replaceSize = matchCount * repStrLength;
     unsigned newSize = m_length - matchCount;
-    CHECK_LT(newSize, numeric_limits<unsigned>::max() - replaceSize);
+    RELEASE_ASSERT(newSize < (numeric_limits<unsigned>::max() - replaceSize));
 
     newSize += replaceSize;
 
@@ -1905,11 +1905,11 @@
     if (!matchCount)
         return this;
 
-    CHECK(!repStrLength || matchCount <= numeric_limits<unsigned>::max() / repStrLength);
+    RELEASE_ASSERT(!repStrLength || matchCount <= numeric_limits<unsigned>::max() / repStrLength);
 
     unsigned replaceSize = matchCount * repStrLength;
     unsigned newSize = m_length - matchCount;
-    CHECK_LT(newSize, numeric_limits<unsigned>::max() - replaceSize);
+    RELEASE_ASSERT(newSize < (numeric_limits<unsigned>::max() - replaceSize));
 
     newSize += replaceSize;
 
@@ -1990,9 +1990,9 @@
         return this;
 
     unsigned newSize = m_length - matchCount * patternLength;
-    CHECK(!repStrLength || matchCount <= numeric_limits<unsigned>::max() / repStrLength);
+    RELEASE_ASSERT(!repStrLength || matchCount <= numeric_limits<unsigned>::max() / repStrLength);
 
-    CHECK_LE(newSize, numeric_limits<unsigned>::max() - matchCount * repStrLength);
+    RELEASE_ASSERT(newSize <= (numeric_limits<unsigned>::max() - matchCount * repStrLength));
 
     newSize += matchCount * repStrLength;
 
@@ -2297,7 +2297,7 @@
     if (!a || !b)
         return !a == !b;
     size_t length = strlen(reinterpret_cast<const char*>(b));
-    CHECK_LE(length, numeric_limits<unsigned>::max());
+    RELEASE_ASSERT(length <= numeric_limits<unsigned>::max());
     if (length != a->length())
         return false;
     return equalSubstringIgnoringASCIICase(a, 0, b, length);
diff --git a/third_party/WebKit/Source/wtf/text/StringImpl.h b/third_party/WebKit/Source/wtf/text/StringImpl.h
index efab636..90b8c9b 100644
--- a/third_party/WebKit/Source/wtf/text/StringImpl.h
+++ b/third_party/WebKit/Source/wtf/text/StringImpl.h
@@ -424,7 +424,7 @@
 private:
     template<typename CharType> static size_t allocationSize(unsigned length)
     {
-        CHECK_LE(length, (std::numeric_limits<unsigned>::max() - sizeof(StringImpl)) / sizeof(CharType));
+        RELEASE_ASSERT(length <= ((std::numeric_limits<unsigned>::max() - sizeof(StringImpl)) / sizeof(CharType)));
         return sizeof(StringImpl) + length * sizeof(CharType);
     }
 
@@ -656,7 +656,7 @@
     size_t length = 0;
     while (string[length] != UChar(0))
         ++length;
-    CHECK_LE(length, std::numeric_limits<unsigned>::max());
+    RELEASE_ASSERT(length <= std::numeric_limits<unsigned>::max());
     return static_cast<unsigned>(length);
 }
 
diff --git a/third_party/WebKit/Source/wtf/text/TextCodecUTF16.cpp b/third_party/WebKit/Source/wtf/text/TextCodecUTF16.cpp
index 7e63eb0..6fc1f15a 100644
--- a/third_party/WebKit/Source/wtf/text/TextCodecUTF16.cpp
+++ b/third_party/WebKit/Source/wtf/text/TextCodecUTF16.cpp
@@ -166,7 +166,7 @@
 CString TextCodecUTF16::encode(const LChar* characters, size_t length, UnencodableHandling)
 {
     // In the LChar case, we do actually need to perform this check in release.  :)
-    CHECK_LE(length, numeric_limits<size_t>::max() / 2);
+    RELEASE_ASSERT(length <= numeric_limits<size_t>::max() / 2);
 
     char* bytes;
     CString result = CString::newUninitialized(length * 2, bytes);
diff --git a/third_party/WebKit/Source/wtf/text/WTFString.cpp b/third_party/WebKit/Source/wtf/text/WTFString.cpp
index c69d61aec..269f943c 100644
--- a/third_party/WebKit/Source/wtf/text/WTFString.cpp
+++ b/third_party/WebKit/Source/wtf/text/WTFString.cpp
@@ -92,7 +92,7 @@
 
     if (m_impl->is8Bit() && string.m_impl->is8Bit()) {
         LChar* data;
-        CHECK_LE(string.length(), std::numeric_limits<unsigned>::max() - m_impl->length());
+        RELEASE_ASSERT(string.length() <= std::numeric_limits<unsigned>::max() - m_impl->length());
         RefPtr<StringImpl> newImpl = StringImpl::createUninitialized(m_impl->length() + string.length(), data);
         memcpy(data, m_impl->characters8(), m_impl->length() * sizeof(LChar));
         memcpy(data + m_impl->length(), string.characters8(), string.length() * sizeof(LChar));
@@ -101,7 +101,7 @@
     }
 
     UChar* data;
-    CHECK_LE(string.length(), std::numeric_limits<unsigned>::max() - m_impl->length());
+    RELEASE_ASSERT(string.length() <= std::numeric_limits<unsigned>::max() - m_impl->length());
     RefPtr<StringImpl> newImpl = StringImpl::createUninitialized(m_impl->length() + string.length(), data);
 
     if (m_impl->is8Bit())
@@ -131,7 +131,7 @@
 
     // FIXME: We should be able to create an 8 bit string via this code path.
     UChar* data;
-    CHECK_LT(m_impl->length(), std::numeric_limits<unsigned>::max());
+    RELEASE_ASSERT(m_impl->length() < std::numeric_limits<unsigned>::max());
     RefPtr<StringImpl> newImpl = StringImpl::createUninitialized(m_impl->length() + 1, data);
     if (m_impl->is8Bit())
         StringImpl::copyChars(data, m_impl->characters8(), m_impl->length());
@@ -189,7 +189,7 @@
     unsigned strLength = m_impl->length();
 
     if (m_impl->is8Bit()) {
-        CHECK_LE(lengthToAppend, std::numeric_limits<unsigned>::max() - strLength);
+        RELEASE_ASSERT(lengthToAppend <= std::numeric_limits<unsigned>::max() - strLength);
         LChar* data;
         RefPtr<StringImpl> newImpl = StringImpl::createUninitialized(strLength + lengthToAppend, data);
         StringImpl::copyChars(data, m_impl->characters8(), strLength);
@@ -198,7 +198,7 @@
         return;
     }
 
-    CHECK_LE(lengthToAppend, std::numeric_limits<unsigned>::max() - strLength);
+    RELEASE_ASSERT(lengthToAppend <= std::numeric_limits<unsigned>::max() - strLength);
     UChar* data;
     RefPtr<StringImpl> newImpl = StringImpl::createUninitialized(length() + lengthToAppend, data);
     StringImpl::copyChars(data, m_impl->characters16(), strLength);
@@ -221,7 +221,7 @@
     unsigned strLength = m_impl->length();
 
     ASSERT(charactersToAppend);
-    CHECK_LE(lengthToAppend, std::numeric_limits<unsigned>::max() - strLength);
+    RELEASE_ASSERT(lengthToAppend <= std::numeric_limits<unsigned>::max() - strLength);
     UChar* data;
     RefPtr<StringImpl> newImpl = StringImpl::createUninitialized(strLength + lengthToAppend, data);
     if (m_impl->is8Bit())
@@ -240,7 +240,7 @@
 
     ASSERT(charactersToInsert);
     UChar* data; // FIXME: We should be able to create an 8 bit string here.
-    CHECK_LE(lengthToInsert, std::numeric_limits<unsigned>::max() - impl->length());
+    RELEASE_ASSERT(lengthToInsert <= std::numeric_limits<unsigned>::max() - impl->length());
     RefPtr<StringImpl> newImpl = StringImpl::createUninitialized(impl->length() + lengthToInsert, data);
 
     if (impl->is8Bit())
@@ -432,7 +432,7 @@
 unsigned String::copyTo(UChar* buffer, unsigned pos, unsigned maxLength) const
 {
     unsigned length = this->length();
-    CHECK_LE(pos, length);
+    RELEASE_ASSERT(pos <= length);
     unsigned numCharacters = std::min(length - pos, maxLength);
     if (!numCharacters)
         return 0;
@@ -871,7 +871,7 @@
 
 String String::fromUTF8(const LChar* stringStart, size_t length)
 {
-    CHECK_LE(length, std::numeric_limits<unsigned>::max());
+    RELEASE_ASSERT(length <= std::numeric_limits<unsigned>::max());
 
     if (!stringStart)
         return String();
diff --git a/third_party/WebKit/public/web/WebDOMEvent.h b/third_party/WebKit/public/web/WebDOMEvent.h
index 857229af..57d0bd0 100644
--- a/third_party/WebKit/public/web/WebDOMEvent.h
+++ b/third_party/WebKit/public/web/WebDOMEvent.h
@@ -57,7 +57,7 @@
 
 #if BLINK_IMPLEMENTATION
     WebDOMEvent(const RawPtr<Event>&);
-    operator RawPtr<Event>() const;
+    operator Event*() const;
 #endif
 
     template<typename T> T to()
diff --git a/third_party/apple_apsl/CFBase.h b/third_party/apple_apsl/CFBase.h
index d74360a..b3fbd179 100644
--- a/third_party/apple_apsl/CFBase.h
+++ b/third_party/apple_apsl/CFBase.h
@@ -30,26 +30,6 @@
 
 #include "CFRuntime.h"
 
-struct ChromeCFAllocatorLeopards {
-    ChromeCFRuntimeBase _base;
-#if DEPLOYMENT_TARGET_MACOSX || DEPLOYMENT_TARGET_EMBEDDED
-    size_t (*size)(struct _malloc_zone_t *zone, const void *ptr); /* returns the size of a block or 0 if not in this zone; must be fast, especially for negative answers */
-    void *(*malloc)(struct _malloc_zone_t *zone, size_t size);
-    void *(*calloc)(struct _malloc_zone_t *zone, size_t num_items, size_t size); /* same as malloc, but block returned is set to zero */
-    void *(*valloc)(struct _malloc_zone_t *zone, size_t size); /* same as malloc, but block returned is set to zero and is guaranteed to be page aligned */
-    void (*free)(struct _malloc_zone_t *zone, void *ptr);
-    void *(*realloc)(struct _malloc_zone_t *zone, void *ptr, size_t size);
-    void (*destroy)(struct _malloc_zone_t *zone); /* zone is destroyed and all memory reclaimed */
-    const char	*zone_name;
-    unsigned (*batch_malloc)(struct _malloc_zone_t *zone, size_t size, void **results, unsigned num_requested); /* given a size, returns pointers capable of holding that size; returns the number of pointers allocated (maybe 0 or less than num_requested) */
-    void (*batch_free)(struct _malloc_zone_t *zone, void **to_be_freed, unsigned num_to_be_freed); /* frees all the pointers in to_be_freed; note that to_be_freed may be overwritten during the process */
-    struct malloc_introspection_t	*introspect;
-    void	*reserved5;
-#endif
-    CFAllocatorRef _allocator;
-    CFAllocatorContext _context;
-};
-
 struct ChromeCFAllocatorLions {
     ChromeCFRuntimeBase _base;
 #if DEPLOYMENT_TARGET_MACOSX || DEPLOYMENT_TARGET_EMBEDDED
diff --git a/third_party/mesa/BUILD.gn b/third_party/mesa/BUILD.gn
index 5108af19..c127808 100644
--- a/third_party/mesa/BUILD.gn
+++ b/third_party/mesa/BUILD.gn
@@ -28,8 +28,8 @@
     "PACKAGE_NAME=\"Mesa\"",
     "PACKAGE_TARNAME=\"mesa\"",
     "PACKAGE_VERSION=\"9.0.3\"",
-    "PACKAGE_STRING=\"Mesa\ 9.0.3\"",
-    "PACKAGE_BUGREPORT=\"https://bugs.freedesktop.org/enter_bug.cgi\?product=Mesa\"",
+    "PACKAGE_STRING=\"Mesa 9.0.3\"",
+    "PACKAGE_BUGREPORT=\"https://bugs.freedesktop.org/enter_bug.cgi?product=Mesa\"",
     "PACKAGE_URL=\"\"",
     "PACKAGE=\"mesa\"",
     "VERSION=\"9.0.3\"",
diff --git a/third_party/polymer/README.chromium b/third_party/polymer/README.chromium
index b7f8f5d..ec29ef86 100644
--- a/third_party/polymer/README.chromium
+++ b/third_party/polymer/README.chromium
@@ -34,6 +34,7 @@
 - Removed executable bit from some files.
 - Resolved encoding issues.
 - Replaced CRLF line endings with LF line endings in text files.
+- Removed files that are not needed by Chromium, see v1_0/rsync_exclude.txt.
 
 To restore a content of the 'components-chromium' directory from scratch, run
 ./v1_0/reproduce.sh on a Linux machine.
diff --git a/third_party/polymer/v1_0/components-chromium/font-roboto/.bower.json b/third_party/polymer/v1_0/components-chromium/font-roboto/.bower.json
deleted file mode 100644
index e3f7de6..0000000
--- a/third_party/polymer/v1_0/components-chromium/font-roboto/.bower.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
-  "name": "font-roboto",
-  "version": "1.0.1",
-  "description": "An HTML import for Roboto",
-  "authors": [
-    "The Polymer Authors"
-  ],
-  "keywords": [
-    "font",
-    "roboto"
-  ],
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/font-roboto.git"
-  },
-  "main": "roboto.html",
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "homepage": "https://github.com/PolymerElements/font-roboto/",
-  "ignore": [
-    "/.*"
-  ],
-  "_release": "1.0.1",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.0.1",
-    "commit": "21ce9b51a417fa9995cf6606e886aba0728f70a1"
-  },
-  "_source": "git://github.com/PolymerElements/font-roboto.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/font-roboto"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/font-roboto/README.md b/third_party/polymer/v1_0/components-chromium/font-roboto/README.md
deleted file mode 100644
index 61c6394..0000000
--- a/third_party/polymer/v1_0/components-chromium/font-roboto/README.md
+++ /dev/null
@@ -1 +0,0 @@
-# font-roboto
diff --git a/third_party/polymer/v1_0/components-chromium/iron-a11y-keys-behavior/.bower.json b/third_party/polymer/v1_0/components-chromium/iron-a11y-keys-behavior/.bower.json
deleted file mode 100644
index 9604c48..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-a11y-keys-behavior/.bower.json
+++ /dev/null
@@ -1,43 +0,0 @@
-{
-  "name": "iron-a11y-keys-behavior",
-  "version": "1.1.2",
-  "description": "A behavior that enables keybindings for greater a11y.",
-  "keywords": [
-    "web-components",
-    "web-component",
-    "polymer",
-    "a11y",
-    "input"
-  ],
-  "authors": [
-    "The Polymer Authors"
-  ],
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/iron-a11y-keys-behavior.git"
-  },
-  "main": "iron-a11y-keys-behavior.html",
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "dependencies": {
-    "polymer": "Polymer/polymer#^1.0.0"
-  },
-  "devDependencies": {
-    "paper-styles": "PolymerElements/paper-styles#^1.0.2",
-    "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
-    "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
-    "test-fixture": "PolymerElements/test-fixture#^1.0.0",
-    "web-component-tester": "^4.0.0",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
-  },
-  "ignore": [],
-  "homepage": "https://github.com/PolymerElements/iron-a11y-keys-behavior",
-  "_release": "1.1.2",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.1.2",
-    "commit": "0c2330c229a6fd3d200e2b84147ec6f94f17c22d"
-  },
-  "_source": "git://github.com/PolymerElements/iron-a11y-keys-behavior.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/iron-a11y-keys-behavior"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/iron-a11y-keys-behavior/.gitignore b/third_party/polymer/v1_0/components-chromium/iron-a11y-keys-behavior/.gitignore
deleted file mode 100644
index 8d4ae25..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-a11y-keys-behavior/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components
diff --git a/third_party/polymer/v1_0/components-chromium/iron-a11y-keys-behavior/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/iron-a11y-keys-behavior/CONTRIBUTING.md
deleted file mode 100644
index f147978a..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-a11y-keys-behavior/CONTRIBUTING.md
+++ /dev/null
@@ -1,77 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
-
-You can however override the jsbin link with one that's customized to this
-specific element:
-
-jsbin=https://jsbin.com/cagaye/edit?html,output
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, fixes #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/iron-a11y-keys-behavior/README.md b/third_party/polymer/v1_0/components-chromium/iron-a11y-keys-behavior/README.md
deleted file mode 100644
index 30ab211..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-a11y-keys-behavior/README.md
+++ /dev/null
@@ -1,35 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-iron-a11y-keys-behavior.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
-The bot does some handling of markdown. Please file a bug if it does the wrong
-thing! https://github.com/PolymerLabs/tedium/issues
-
--->
-
-[![Build status](https://travis-ci.org/PolymerElements/iron-a11y-keys-behavior.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-a11y-keys-behavior)
-
-_[Demo and API docs](https://elements.polymer-project.org/elements/iron-a11y-keys-behavior)_
-
-
-##Polymer.IronA11yKeysBehavior
-
-`Polymer.IronA11yKeysBehavior` provides a normalized interface for processing
-keyboard commands that pertain to [WAI-ARIA best practices](http://www.w3.org/TR/wai-aria-practices/#kbd_general_binding).
-The element takes care of browser differences with respect to Keyboard events
-and uses an expressive syntax to filter key presses.
-
-Use the `keyBindings` prototype property to express what combination of keys
-will trigger the event to fire.
-
-Use the `key-event-target` attribute to set up event handlers on a specific
-node.
-The `keys-pressed` event will fire when one of the key combinations set with the
-`keys` property is pressed.
-
-
diff --git a/third_party/polymer/v1_0/components-chromium/iron-a11y-keys-behavior/index.html b/third_party/polymer/v1_0/components-chromium/iron-a11y-keys-behavior/index.html
deleted file mode 100644
index c53ba6c..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-a11y-keys-behavior/index.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-<html>
-<head>
-
-  <title>iron-a11y-keys-behavior</title>
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-</head>
-<body>
-
-  <iron-component-page></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/iron-a11y-keys/.bower.json b/third_party/polymer/v1_0/components-chromium/iron-a11y-keys/.bower.json
deleted file mode 100644
index 4362023..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-a11y-keys/.bower.json
+++ /dev/null
@@ -1,44 +0,0 @@
-{
-  "name": "iron-a11y-keys",
-  "version": "1.0.4",
-  "description": "A basic element implementation of iron-a11y-keys-behavior, matching the legacy core-a11y-keys.",
-  "keywords": [
-    "web-components",
-    "web-component",
-    "polymer",
-    "a11y",
-    "input"
-  ],
-  "authors": [
-    "The Polymer Authors"
-  ],
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/iron-a11y-keys.git"
-  },
-  "main": "iron-a11y-keys.html",
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "dependencies": {
-    "polymer": "polymer/polymer#^1.0.0",
-    "iron-a11y-keys-behavior": "polymerelements/iron-a11y-keys-behavior#^1.0.0"
-  },
-  "devDependencies": {
-    "paper-styles": "PolymerElements/paper-styles#^1.0.2",
-    "iron-component-page": "polymerelements/iron-component-page#^1.0.0",
-    "test-fixture": "polymerelements/test-fixture#^1.0.0",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
-    "web-component-tester": "polymer/web-component-tester#^3.4.0",
-    "iron-test-helpers": "polymerelements/iron-test-helpers#^1.0.0"
-  },
-  "ignore": [],
-  "homepage": "https://github.com/PolymerElements/iron-a11y-keys",
-  "_release": "1.0.4",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.0.4",
-    "commit": "51a34396a392bcfb45592900973c35eceb11f0d7"
-  },
-  "_source": "git://github.com/PolymerElements/iron-a11y-keys.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/iron-a11y-keys"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/iron-a11y-keys/.gitignore b/third_party/polymer/v1_0/components-chromium/iron-a11y-keys/.gitignore
deleted file mode 100644
index 1eb1fa5..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-a11y-keys/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-bower_components
-
diff --git a/third_party/polymer/v1_0/components-chromium/iron-a11y-keys/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/iron-a11y-keys/CONTRIBUTING.md
deleted file mode 100644
index 7b101415..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-a11y-keys/CONTRIBUTING.md
+++ /dev/null
@@ -1,72 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [http://jsbin.com/cagaye](http://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/iron-a11y-keys/README.md b/third_party/polymer/v1_0/components-chromium/iron-a11y-keys/README.md
deleted file mode 100644
index 426c46d8..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-a11y-keys/README.md
+++ /dev/null
@@ -1,130 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-iron-a11y-keys.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
--->
-
-[![Build Status](https://travis-ci.org/PolymerElements/iron-a11y-keys.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-a11y-keys)
-
-_[Demo and API Docs](https://elements.polymer-project.org/elements/iron-a11y-keys)_
-
-
-##&lt;iron-a11y-keys&gt;
-
-
-`iron-a11y-keys` provides a cross-browser interface for processing 
-keyboard commands. The interface adheres to [WAI-ARIA best 
-practices](http://www.w3.org/TR/wai-aria-practices/#kbd_general_binding). 
-It uses an expressive syntax to filter key presses.
-
-## Basic usage
-
-The sample code below is a portion of a custom element. The goal is to call
-the `onEnter` method whenever the `paper-input` element is in focus and 
-the `Enter` key is pressed.
-
-    <iron-a11y-keys id="a11y" target="[[target]]" keys="enter"
-                        on-keys-pressed="onEnter"></iron-a11y-keys>
-    <paper-input id="input"
-                 placeholder="Type something. Press enter. Check console."
-                 value="{{userInput::input}}"></paper-input>
-
-The custom element declares an `iron-a11y-keys` element that is bound to a 
-property called `target`. The `target` property
-needs to evaluate to the `paper-input` node. `iron-a11y-keys` registers 
-an event handler for the target node using Polymer's [annotated event handler
-syntax](https://www.polymer-project.org/1.0/docs/devguide/events.html#annotated-listeners). `{{userInput::input}}` sets the `userInput` property to the 
-user's input on each keystroke. 
-
-The last step is to link the two elements within the custom element's 
-registration.
-
-    ...
-    properties: {
-      userInput: {
-        type: String,
-        notify: true,
-      },
-      target: {
-        type: Object,
-        value: function() {
-          return this.$.input;
-        }
-      },
-    },
-    onEnter: function() {
-      console.log(this.userInput);
-    }
-    ...
-
-## The `keys` attribute
-
-The `keys` attribute expresses what combination of keys triggers the event.
-
-The attribute accepts a space-separated, plus-sign-concatenated 
-set of modifier keys and some common keyboard keys.
-
-The common keys are: `a-z`, `0-9` (top row and number pad), `*` (shift 8 and 
-number pad), `F1-F12`, `Page Up`, `Page Down`, `Left Arrow`, `Right Arrow`,
-`Down Arrow`, `Up Arrow`, `Home`, `End`, `Escape`, `Space`, `Tab`, `Enter`.
-
-The modifier keys are: `Shift`, `Control`, `Alt`.
-
-All keys are expected to be lowercase and shortened. E.g.
-`Left Arrow` is `left`, `Page Down` is `pagedown`, `Control` is `ctrl`, 
-`F1` is `f1`, `Escape` is `esc`, etc.
-
-### Grammar
-
-Below is the [EBNF](http://en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_Form) 
-Grammar of the `keys` attribute.
-
-    modifier = "shift" | "ctrl" | "alt";
-    ascii = ? /[a-z0-9]/ ? ;
-    fnkey = ? f1 through f12 ? ;
-    arrow = "up" | "down" | "left" | "right" ;
-    key = "tab" | "esc" | "space" | "*" | "pageup" | "pagedown" | 
-          "home" | "end" | arrow | ascii | fnkey;
-    keycombo = { modifier, "+" }, key ;
-    keys = keycombo, { " ", keycombo } ;
-
-### Example
-
-Given the following value for `keys`: 
-
-`ctrl+shift+f7 up pagedown esc space alt+m`
-
-The event is fired if any of the following key combinations are fired: 
-`Control` and `Shift` and `F7` keys, `Up Arrow` key, `Page Down` key, 
-`Escape` key, `Space` key, `Alt` and `M` keys.
-
-### WAI-ARIA Slider Example
-
-The following is an example of the set of keys that fulfills WAI-ARIA's 
-"slider" role [best
-practices](http://www.w3.org/TR/wai-aria-practices/#slider):
-
-    <iron-a11y-keys target="[[target]]" keys="left pagedown down" 
-                    on-keys-pressed="decrement"></iron-a11y-keys>
-    <iron-a11y-keys target=""[[target]] keys="right pageup up" 
-                    on-keys-pressed="increment"></iron-a11y-keys>
-    <iron-a11y-keys target="[[target]]" keys="home" 
-                    on-keys-pressed="setMin"></iron-a11y-keys>
-    <iron-a11y-keys target=""[[target]] keys="end" 
-                    on-keys-pressed="setMax"></iron-a11y-keys>
-
-The `target` properties must evaluate to a node. See the basic usage 
-example above.
-
-Each of the values for the `on-keys-pressed` attributes must evalute
-to methods. The `increment` method should move the slider a set amount 
-toward the maximum value. `decrement` should move the slider a set amount 
-toward the minimum value. `setMin` should move the slider to the minimum 
-value. `setMax` should move the slider to the maximum value.
-
-
diff --git a/third_party/polymer/v1_0/components-chromium/iron-a11y-keys/index.html b/third_party/polymer/v1_0/components-chromium/iron-a11y-keys/index.html
deleted file mode 100644
index 02c5182..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-a11y-keys/index.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE
-The complete set of authors may be found at http://polymer.github.io/AUTHORS
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS
--->
-<html>
-<head>
-
-  <title>iron-a11y-keys</title>
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-</head>
-<body>
-
-  <iron-component-page></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/iron-autogrow-textarea/.bower.json b/third_party/polymer/v1_0/components-chromium/iron-autogrow-textarea/.bower.json
deleted file mode 100644
index e6d37e62..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-autogrow-textarea/.bower.json
+++ /dev/null
@@ -1,48 +0,0 @@
-{
-  "name": "iron-autogrow-textarea",
-  "version": "1.0.12",
-  "description": "A textarea element that automatically grows with input",
-  "authors": [
-    "The Polymer Authors"
-  ],
-  "keywords": [
-    "web-components",
-    "polymer",
-    "input",
-    "textarea"
-  ],
-  "main": "iron-autogrow-textarea.html",
-  "private": true,
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/iron-autogrow-textarea.git"
-  },
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "homepage": "https://github.com/PolymerElements/iron-autogrow-textarea",
-  "ignore": [],
-  "dependencies": {
-    "iron-behaviors": "PolymerElements/iron-behaviors#^1.0.0",
-    "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
-    "iron-validatable-behavior": "PolymerElements/iron-validatable-behavior#^1.0.0",
-    "iron-form-element-behavior": "PolymerElements/iron-form-element-behavior#^1.0.0",
-    "polymer": "Polymer/polymer#^1.0.0"
-  },
-  "devDependencies": {
-    "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
-    "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
-    "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
-    "test-fixture": "PolymerElements/test-fixture#^1.0.0",
-    "web-component-tester": "^4.0.0",
-    "paper-styles": "PolymerElements/paper-styles#^1.0.0",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
-  },
-  "_release": "1.0.12",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.0.12",
-    "commit": "86f8fd61b412bcea6bc7b8feaee9b24bc2ad48ea"
-  },
-  "_source": "git://github.com/PolymerElements/iron-autogrow-textarea.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/iron-autogrow-textarea"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/iron-autogrow-textarea/.gitignore b/third_party/polymer/v1_0/components-chromium/iron-autogrow-textarea/.gitignore
deleted file mode 100644
index 8d4ae25..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-autogrow-textarea/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components
diff --git a/third_party/polymer/v1_0/components-chromium/iron-autogrow-textarea/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/iron-autogrow-textarea/CONTRIBUTING.md
deleted file mode 100644
index f147978a..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-autogrow-textarea/CONTRIBUTING.md
+++ /dev/null
@@ -1,77 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
-
-You can however override the jsbin link with one that's customized to this
-specific element:
-
-jsbin=https://jsbin.com/cagaye/edit?html,output
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, fixes #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/iron-autogrow-textarea/README.md b/third_party/polymer/v1_0/components-chromium/iron-autogrow-textarea/README.md
deleted file mode 100644
index b207d330..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-autogrow-textarea/README.md
+++ /dev/null
@@ -1,44 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-iron-autogrow-textarea.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
-The bot does some handling of markdown. Please file a bug if it does the wrong
-thing! https://github.com/PolymerLabs/tedium/issues
-
--->
-
-[![Build status](https://travis-ci.org/PolymerElements/iron-autogrow-textarea.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-autogrow-textarea)
-
-_[Demo and API docs](https://elements.polymer-project.org/elements/iron-autogrow-textarea)_
-
-
-##&lt;iron-autogrow-textarea&gt;
-
-`iron-autogrow-textarea` is an element containing a textarea that grows in height as more
-lines of input are entered. Unless an explicit height or the `maxRows` property is set, it will
-never scroll.
-
-Example:
-
-```html
-<iron-autogrow-textarea></iron-autogrow-textarea>
-```
-
-Because the `textarea`'s `value` property is not observable, you should use
-this element's `bind-value` instead for imperative updates.
-
-### Styling
-
-The following custom properties and mixins are available for styling:
-
-| Custom property | Description | Default |
-| --- | --- | --- |
-| `--iron-autogrow-textarea` | Mixin applied to the textarea | `{}` |
-| `--iron-autogrow-textarea-placeholder` | Mixin applied to the textarea placeholder | `{}` |
-
-
diff --git a/third_party/polymer/v1_0/components-chromium/iron-autogrow-textarea/hero.svg b/third_party/polymer/v1_0/components-chromium/iron-autogrow-textarea/hero.svg
deleted file mode 100644
index 19ec70a..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-autogrow-textarea/hero.svg
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 225 126" enable-background="new 0 0 225 126" xml:space="preserve">
-<g id="background" display="none">
-	<rect display="inline" fill="#B0BEC5" width="225" height="126"/>
-</g>
-<g id="label">
-</g>
-<g id="art">
-	<path d="M140,47c-3,0-4.7-2.4-6.2-4.4c-1.3-1.9-2.4-3.6-4.7-3.6c-2.3,0-3.4,1.7-4.7,3.6c-1.5,2.1-3.1,4.4-6.4,4.4
-		c-3.3,0-4.9-2.4-6.4-4.4c-1.3-1.9-2.5-3.6-4.8-3.6c-2.3,0-3.4,1.7-4.8,3.6c-1.5,2.1-3.1,4.4-6.4,4.4s-5.2-2.4-6.7-4.4
-		c-1.3-1.9-2-3.6-5-3.6v-2c4,0,5.2,2.4,6.7,4.4c1.3,1.9,2.6,3.6,4.9,3.6c2.3,0,3.5-1.7,4.8-3.6c1.5-2.1,3.1-4.4,6.5-4.4
-		s5,2.4,6.4,4.4c1.3,1.9,2.5,3.6,4.8,3.6c2.3,0,3.4-1.7,4.8-3.6c1.5-2.1,3.1-4.4,6.4-4.4c3.3,0,4.7,2.4,6.2,4.4
-		c1.3,1.9,2.5,3.6,4.5,3.6V47z"/>
-	<path d="M140,65c-3,0-4.7-2.4-6.2-4.4c-1.3-1.9-2.4-3.6-4.7-3.6c-2.3,0-3.4,1.7-4.7,3.6c-1.5,2.1-3.1,4.4-6.4,4.4
-		c-3.3,0-4.9-2.4-6.4-4.4c-1.3-1.9-2.5-3.6-4.8-3.6c-2.3,0-3.4,1.7-4.8,3.6c-1.5,2.1-3.1,4.4-6.4,4.4s-5.2-2.4-6.7-4.4
-		c-1.3-1.9-2-3.6-5-3.6v-2c4,0,5.2,2.4,6.7,4.4c1.3,1.9,2.6,3.6,4.9,3.6c2.3,0,3.5-1.7,4.8-3.6c1.5-2.1,3.1-4.4,6.5-4.4
-		s5,2.4,6.4,4.4c1.3,1.9,2.5,3.6,4.8,3.6c2.3,0,3.4-1.7,4.8-3.6c1.5-2.1,3.1-4.4,6.4-4.4c3.3,0,4.7,2.4,6.2,4.4
-		c1.3,1.9,2.5,3.6,4.5,3.6V65z"/>
-	<path d="M140,83c-3,0-4.7-2.4-6.2-4.4c-1.3-1.9-2.4-3.6-4.7-3.6c-2.3,0-3.4,1.7-4.7,3.6c-1.5,2.1-3.1,4.4-6.4,4.4
-		c-3.3,0-4.9-2.4-6.4-4.4c-1.3-1.9-2.5-3.6-4.8-3.6c-2.3,0-3.4,1.7-4.8,3.6c-1.5,2.1-3.1,4.4-6.4,4.4s-5.2-2.4-6.7-4.4
-		c-1.3-1.9-2-3.6-5-3.6v-2c4,0,5.2,2.4,6.7,4.4c1.3,1.9,2.6,3.6,4.9,3.6c2.3,0,3.5-1.7,4.8-3.6c1.5-2.1,3.1-4.4,6.5-4.4
-		s5,2.4,6.4,4.4c1.3,1.9,2.5,3.6,4.8,3.6c2.3,0,3.4-1.7,4.8-3.6c1.5-2.1,3.1-4.4,6.4-4.4c3.3,0,4.7,2.4,6.2,4.4
-		c1.3,1.9,2.5,3.6,4.5,3.6V83z"/>
-	<g id="ic_x5F_add_x0D_">
-	</g>
-	<path d="M151,102H73V24h78V102z M75,100h74V26H75V100z"/>
-</g>
-<g id="Guides">
-</g>
-</svg>
diff --git a/third_party/polymer/v1_0/components-chromium/iron-autogrow-textarea/index.html b/third_party/polymer/v1_0/components-chromium/iron-autogrow-textarea/index.html
deleted file mode 100644
index 3be2964..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-autogrow-textarea/index.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-<html>
-  <head>
-
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
-
-    <title>iron-autogrow-textarea</title>
-
-    <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-
-    <link rel="import" href="../polymer/polymer.html">
-    <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-  </head>
-  <body>
-
-    <iron-component-page></iron-component-page>
-
-  </body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/iron-behaviors/.bower.json b/third_party/polymer/v1_0/components-chromium/iron-behaviors/.bower.json
deleted file mode 100644
index 85e8252b..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-behaviors/.bower.json
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-  "name": "iron-behaviors",
-  "version": "1.0.13",
-  "description": "Provides a set of behaviors for the iron elements",
-  "private": true,
-  "authors": [
-    "The Polymer Authors"
-  ],
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/iron-behaviors.git"
-  },
-  "main": [
-    "iron-button-state.html",
-    "iron-control-state.html"
-  ],
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "dependencies": {
-    "polymer": "Polymer/polymer#^1.2.0",
-    "iron-a11y-keys-behavior": "PolymerElements/iron-a11y-keys-behavior#^1.0.0"
-  },
-  "devDependencies": {
-    "paper-styles": "polymerelements/paper-styles#^1.0.2",
-    "paper-input": "polymerelements/paper-input#^1.0.0",
-    "iron-test-helpers": "polymerelements/iron-test-helpers#^1.0.0",
-    "iron-component-page": "polymerelements/iron-component-page#^1.0.0",
-    "test-fixture": "polymerelements/test-fixture#^1.0.0",
-    "web-component-tester": "^4.0.0",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
-  },
-  "ignore": [],
-  "homepage": "https://github.com/PolymerElements/iron-behaviors",
-  "_release": "1.0.13",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.0.13",
-    "commit": "a7bc3428a6da2beed21987b3a8028206826a12bc"
-  },
-  "_source": "git://github.com/PolymerElements/iron-behaviors.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/iron-behaviors"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/iron-behaviors/.gitignore b/third_party/polymer/v1_0/components-chromium/iron-behaviors/.gitignore
deleted file mode 100644
index 8d4ae25..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-behaviors/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components
diff --git a/third_party/polymer/v1_0/components-chromium/iron-behaviors/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/iron-behaviors/CONTRIBUTING.md
deleted file mode 100644
index f147978a..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-behaviors/CONTRIBUTING.md
+++ /dev/null
@@ -1,77 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
-
-You can however override the jsbin link with one that's customized to this
-specific element:
-
-jsbin=https://jsbin.com/cagaye/edit?html,output
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, fixes #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/iron-behaviors/README.md b/third_party/polymer/v1_0/components-chromium/iron-behaviors/README.md
deleted file mode 100644
index 0a0629ec..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-behaviors/README.md
+++ /dev/null
@@ -1,22 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-iron-button-state.html  iron-control-state.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
-The bot does some handling of markdown. Please file a bug if it does the wrong
-thing! https://github.com/PolymerLabs/tedium/issues
-
--->
-
-[![Build status](https://travis-ci.org/PolymerElements/iron-behaviors.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-behaviors)
-
-_[Demo and API docs](https://elements.polymer-project.org/elements/iron-behaviors)_
-
-
-<!-- No docs for Polymer.IronButtonState found. -->
-
-<!-- No docs for Polymer.IronControlState found. -->
diff --git a/third_party/polymer/v1_0/components-chromium/iron-behaviors/index.html b/third_party/polymer/v1_0/components-chromium/iron-behaviors/index.html
deleted file mode 100644
index 220deb0..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-behaviors/index.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-<html>
-<head>
-
-  <title>Iron Behaviors</title>
-  <meta charset="utf-8">
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-</head>
-<body>
-
-  <iron-component-page src="iron-button-state.html"></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/iron-checked-element-behavior/.bower.json b/third_party/polymer/v1_0/components-chromium/iron-checked-element-behavior/.bower.json
deleted file mode 100644
index 31b32b0..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-checked-element-behavior/.bower.json
+++ /dev/null
@@ -1,43 +0,0 @@
-{
-  "name": "iron-checked-element-behavior",
-  "version": "1.0.4",
-  "description": "Implements an element that has a checked attribute and can be added to a form",
-  "authors": "The Polymer Authors",
-  "keywords": [
-    "web-components",
-    "polymer",
-    "iron",
-    "behavior"
-  ],
-  "main": "iron-checked-element-behavior.html",
-  "private": true,
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/iron-checked-element-behavior.git"
-  },
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "homepage": "https://github.com/PolymerElements/iron-checked-element-behavior",
-  "ignore": [],
-  "dependencies": {
-    "polymer": "Polymer/polymer#^1.0.0",
-    "iron-validatable-behavior": "PolymerElements/iron-validatable-behavior#^1.0.0",
-    "iron-form-element-behavior": "PolymerElements/iron-form-element-behavior#^1.0.0"
-  },
-  "devDependencies": {
-    "paper-styles": "PolymerElements/paper-styles#^1.0.0",
-    "paper-button": "PolymerElements/paper-button#^1.0.0",
-    "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
-    "test-fixture": "PolymerElements/test-fixture#^1.0.0",
-    "web-component-tester": "*",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
-  },
-  "_release": "1.0.4",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.0.4",
-    "commit": "cc30263ec2871ae8f8f944948f44299d3f3cdf0d"
-  },
-  "_source": "git://github.com/PolymerElements/iron-checked-element-behavior.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/iron-checked-element-behavior"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/iron-checked-element-behavior/.gitignore b/third_party/polymer/v1_0/components-chromium/iron-checked-element-behavior/.gitignore
deleted file mode 100644
index 8d4ae25..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-checked-element-behavior/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components
diff --git a/third_party/polymer/v1_0/components-chromium/iron-checked-element-behavior/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/iron-checked-element-behavior/CONTRIBUTING.md
deleted file mode 100644
index 7b101415..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-checked-element-behavior/CONTRIBUTING.md
+++ /dev/null
@@ -1,72 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [http://jsbin.com/cagaye](http://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/iron-checked-element-behavior/README.md b/third_party/polymer/v1_0/components-chromium/iron-checked-element-behavior/README.md
deleted file mode 100644
index fc570916..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-checked-element-behavior/README.md
+++ /dev/null
@@ -1,25 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-iron-checked-element-behavior.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
--->
-
-[![Build Status](https://travis-ci.org/PolymerElements/iron-checked-element-behavior.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-checked-element-behavior)
-
-_[Demo and API Docs](https://elements.polymer-project.org/elements/iron-checked-element-behavior)_
-
-
-##Polymer.IronCheckedElementBehavior
-
-
-Use `Polymer.IronCheckedElementBehavior` to implement a custom element
-that has a `checked` property, which can be used for validation if the
-element is also `required`. Element instances implementing this behavior
-will also be registered for use in an `iron-form` element.
-
-
diff --git a/third_party/polymer/v1_0/components-chromium/iron-checked-element-behavior/index.html b/third_party/polymer/v1_0/components-chromium/iron-checked-element-behavior/index.html
deleted file mode 100644
index 1975dc5..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-checked-element-behavior/index.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-<html>
-<head>
-
-  <meta charset="utf-8">
-  <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
-
-  <title>iron-checked-element-behavior</title>
-
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-
-  <link rel="import" href="../polymer/polymer.html">
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-</head>
-<body>
-
-  <iron-component-page></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/iron-collapse/.bower.json b/third_party/polymer/v1_0/components-chromium/iron-collapse/.bower.json
deleted file mode 100644
index 23797e9..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-collapse/.bower.json
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-  "name": "iron-collapse",
-  "version": "1.0.6",
-  "description": "Provides a collapsable container",
-  "authors": [
-    "The Polymer Authors"
-  ],
-  "keywords": [
-    "web-components",
-    "polymer",
-    "container"
-  ],
-  "private": true,
-  "repository": {
-    "type": "git",
-    "url": "https://github.com/PolymerElements/iron-collapse"
-  },
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "homepage": "https://github.com/PolymerElements/iron-collapse",
-  "ignore": [],
-  "dependencies": {
-    "iron-resizable-behavior": "PolymerElements/iron-resizable-behavior#^1.0.0",
-    "polymer": "Polymer/polymer#^1.0.0"
-  },
-  "devDependencies": {
-    "web-component-tester": "^4.0.0",
-    "test-fixture": "PolymerElements/test-fixture#^1.0.0",
-    "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
-    "paper-styles": "PolymerElements/paper-styles#^1.0.0",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
-  },
-  "main": "iron-collapse.html",
-  "_release": "1.0.6",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.0.6",
-    "commit": "afd2b928c84fb1a1d6069b05a36c37b269f25209"
-  },
-  "_source": "git://github.com/PolymerElements/iron-collapse.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/iron-collapse"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/iron-collapse/.gitignore b/third_party/polymer/v1_0/components-chromium/iron-collapse/.gitignore
deleted file mode 100644
index 8d4ae25..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-collapse/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components
diff --git a/third_party/polymer/v1_0/components-chromium/iron-collapse/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/iron-collapse/CONTRIBUTING.md
deleted file mode 100644
index 7b101415..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-collapse/CONTRIBUTING.md
+++ /dev/null
@@ -1,72 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [http://jsbin.com/cagaye](http://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/iron-collapse/README.md b/third_party/polymer/v1_0/components-chromium/iron-collapse/README.md
deleted file mode 100644
index bc56527..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-collapse/README.md
+++ /dev/null
@@ -1,58 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-iron-collapse.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
-The bot does some handling of markdown. Please file a bug if it does the wrong
-thing! https://github.com/PolymerLabs/tedium/issues
-
--->
-
-[![Build Status](https://travis-ci.org/PolymerElements/iron-collapse.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-collapse)
-
-_[Demo and API Docs](https://elements.polymer-project.org/elements/iron-collapse)_
-
-
-##&lt;iron-collapse&gt;
-
-`iron-collapse` creates a collapsible block of content.  By default, the content
-will be collapsed.  Use `opened` or `toggle()` to show/hide the content.
-
-```html
-<button on-click="toggle">toggle collapse</button>
-
-<iron-collapse id="collapse">
-  <div>Content goes here...</div>
-</iron-collapse>
-
-...
-
-toggle: function() {
-  this.$.collapse.toggle();
-}
-```
-
-`iron-collapse` adjusts the height/width of the collapsible element to show/hide
-the content.  So avoid putting padding/margin/border on the collapsible directly,
-and instead put a div inside and style that.
-
-```html
-<style>
-  .collapse-content {
-    padding: 15px;
-    border: 1px solid #dedede;
-  }
-</style>
-
-<iron-collapse>
-  <div class="collapse-content">
-    <div>Content goes here...</div>
-  </div>
-</iron-collapse>
-```
-
-
diff --git a/third_party/polymer/v1_0/components-chromium/iron-collapse/hero.svg b/third_party/polymer/v1_0/components-chromium/iron-collapse/hero.svg
deleted file mode 100644
index ae1a49e..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-collapse/hero.svg
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 225 126" enable-background="new 0 0 225 126" xml:space="preserve">
-<g id="background" display="none">
-	<rect display="inline" fill="#B0BEC5" width="225" height="126"/>
-	<path display="inline" fill="none" d="M167.5,51.7c3.7-0.8,6.9,2.4,6.1,6.1c-0.4,1.9-1.9,3.4-3.8,3.8c-3.7,0.8-6.9-2.4-6.1-6.1
-		C164.2,53.6,165.7,52.1,167.5,51.7z"/>
-</g>
-<g id="label">
-</g>
-<g id="art">
-	<path d="M151,102H73V52h78V102z M75,100h74V54H75V100z"/>
-	<path d="M151,38H73V24h78V38z M75,36h74V26H75V36z"/>
-	<circle cx="171" cy="51" r="4"/>
-	<path d="M151,72v-2c10.5,0,19-8.5,19-19s-8.5-19-19-19v-2c11.6,0,21,9.4,21,21S162.6,72,151,72z"/>
-	<g id="ic_x5F_add_x0D_">
-	</g>
-</g>
-<g id="Guides">
-</g>
-</svg>
diff --git a/third_party/polymer/v1_0/components-chromium/iron-collapse/index.html b/third_party/polymer/v1_0/components-chromium/iron-collapse/index.html
deleted file mode 100644
index b5d20077..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-collapse/index.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-
-<html>
-  <head>
-
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
-
-    <title>iron-collapse</title>
-
-    <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-
-    <link rel="import" href="../polymer/polymer.html">
-    <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-  </head>
-  <body>
-
-    <iron-component-page></iron-component-page>
-
-  </body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/iron-dropdown/.bower.json b/third_party/polymer/v1_0/components-chromium/iron-dropdown/.bower.json
deleted file mode 100644
index d6b62b1..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-dropdown/.bower.json
+++ /dev/null
@@ -1,48 +0,0 @@
-{
-  "name": "iron-dropdown",
-  "version": "1.2.0",
-  "description": "An unstyled element that works similarly to a native browser select",
-  "authors": [
-    "The Polymer Authors"
-  ],
-  "keywords": [
-    "web-components",
-    "web-component",
-    "polymer"
-  ],
-  "main": "iron-dropdown.html",
-  "private": true,
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/iron-dropdown"
-  },
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "homepage": "https://github.com/PolymerElements/iron-dropdown",
-  "dependencies": {
-    "polymer": "polymer/polymer#^1.0.0",
-    "iron-behaviors": "polymerelements/iron-behaviors#^1.0.0",
-    "iron-overlay-behavior": "polymerelements/iron-overlay-behavior#^1.0.0",
-    "iron-resizable-behavior": "polymerelements/iron-resizable-behavior#^1.0.0",
-    "neon-animation": "polymerelements/neon-animation#^1.0.0",
-    "iron-a11y-keys-behavior": "polymerelements/iron-a11y-keys-behavior#^1.0.0"
-  },
-  "devDependencies": {
-    "iron-component-page": "polymerelements/iron-component-page#^1.0.0",
-    "test-fixture": "polymerelements/test-fixture#^1.0.0",
-    "iron-test-helpers": "polymerelements/iron-test-helpers#^1.0.0",
-    "paper-styles": "polymerelements/paper-styles#^1.0.0",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
-    "web-component-tester": "^4.0.0",
-    "iron-image": "polymerelements/iron-image#^1.0.0"
-  },
-  "ignore": [],
-  "_release": "1.2.0",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.2.0",
-    "commit": "f864191c6ffbd3aaddea8102102ab40137046327"
-  },
-  "_source": "git://github.com/PolymerElements/iron-dropdown.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/iron-dropdown"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/iron-dropdown/.gitignore b/third_party/polymer/v1_0/components-chromium/iron-dropdown/.gitignore
deleted file mode 100644
index 8d4ae25..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-dropdown/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components
diff --git a/third_party/polymer/v1_0/components-chromium/iron-dropdown/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/iron-dropdown/CONTRIBUTING.md
deleted file mode 100644
index f147978a..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-dropdown/CONTRIBUTING.md
+++ /dev/null
@@ -1,77 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
-
-You can however override the jsbin link with one that's customized to this
-specific element:
-
-jsbin=https://jsbin.com/cagaye/edit?html,output
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, fixes #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/iron-dropdown/README.md b/third_party/polymer/v1_0/components-chromium/iron-dropdown/README.md
deleted file mode 100644
index 6440ec6..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-dropdown/README.md
+++ /dev/null
@@ -1,46 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-iron-dropdown.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
-The bot does some handling of markdown. Please file a bug if it does the wrong
-thing! https://github.com/PolymerLabs/tedium/issues
-
--->
-
-[![Build status](https://travis-ci.org/PolymerElements/iron-dropdown.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-dropdown)
-
-_[Demo and API docs](https://elements.polymer-project.org/elements/iron-dropdown)_
-
-
-##&lt;iron-dropdown&gt;
-
-`<iron-dropdown>` is a generalized element that is useful when you have
-hidden content (`.dropdown-content`) that is revealed due to some change in
-state that should cause it to do so.
-
-Note that this is a low-level element intended to be used as part of other
-composite elements that cause dropdowns to be revealed.
-
-Examples of elements that might be implemented using an `iron-dropdown`
-include comboboxes, menubuttons, selects. The list goes on.
-
-The `<iron-dropdown>` element exposes attributes that allow the position
-of the `.dropdown-content` relative to the `.dropdown-trigger` to be
-configured.
-
-```html
-<iron-dropdown horizontal-align="right" vertical-align="top">
-  <div class="dropdown-content">Hello!</div>
-</iron-dropdown>
-```
-
-In the above example, the `<div>` with class `.dropdown-content` will be
-hidden until the dropdown element has `opened` set to true, or when the `open`
-method is called on the element.
-
-
diff --git a/third_party/polymer/v1_0/components-chromium/iron-dropdown/index.html b/third_party/polymer/v1_0/components-chromium/iron-dropdown/index.html
deleted file mode 100644
index 1d3d6cad..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-dropdown/index.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE
-The complete set of authors may be found at http://polymer.github.io/AUTHORS
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS
--->
-<html>
-<head>
-
-  <title>iron-dropdown</title>
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-</head>
-<body>
-
-  <iron-component-page></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/iron-fit-behavior/.bower.json b/third_party/polymer/v1_0/components-chromium/iron-fit-behavior/.bower.json
deleted file mode 100644
index 1318aaf..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-fit-behavior/.bower.json
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "name": "iron-fit-behavior",
-  "version": "1.0.6",
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "description": "Fits an element inside another element",
-  "private": true,
-  "main": "iron-fit-behavior.html",
-  "keywords": [
-    "web-components",
-    "polymer",
-    "behavior"
-  ],
-  "authors": [
-    "The Polymer Authors"
-  ],
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/iron-fit-behavior.git"
-  },
-  "dependencies": {
-    "polymer": "Polymer/polymer#^1.0.0"
-  },
-  "devDependencies": {
-    "paper-styles": "polymerelements/paper-styles#^1.0.2",
-    "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
-    "test-fixture": "PolymerElements/test-fixture#^1.0.0",
-    "web-component-tester": "^4.0.0",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
-  },
-  "ignore": [],
-  "homepage": "https://github.com/PolymerElements/iron-fit-behavior",
-  "_release": "1.0.6",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.0.6",
-    "commit": "f2e868af4fad643ffb7fea3501e1429acc4ec0f0"
-  },
-  "_source": "git://github.com/PolymerElements/iron-fit-behavior.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/iron-fit-behavior"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/iron-fit-behavior/.gitignore b/third_party/polymer/v1_0/components-chromium/iron-fit-behavior/.gitignore
deleted file mode 100644
index 8d4ae25..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-fit-behavior/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components
diff --git a/third_party/polymer/v1_0/components-chromium/iron-fit-behavior/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/iron-fit-behavior/CONTRIBUTING.md
deleted file mode 100644
index f147978a..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-fit-behavior/CONTRIBUTING.md
+++ /dev/null
@@ -1,77 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
-
-You can however override the jsbin link with one that's customized to this
-specific element:
-
-jsbin=https://jsbin.com/cagaye/edit?html,output
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, fixes #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/iron-fit-behavior/README.md b/third_party/polymer/v1_0/components-chromium/iron-fit-behavior/README.md
deleted file mode 100644
index ed1b72f..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-fit-behavior/README.md
+++ /dev/null
@@ -1,36 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-iron-fit-behavior.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
-The bot does some handling of markdown. Please file a bug if it does the wrong
-thing! https://github.com/PolymerLabs/tedium/issues
-
--->
-
-[![Build status](https://travis-ci.org/PolymerElements/iron-fit-behavior.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-fit-behavior)
-
-_[Demo and API docs](https://elements.polymer-project.org/elements/iron-fit-behavior)_
-
-
-##Polymer.IronFitBehavior
-
-Polymer.IronFitBehavior fits an element in another element using `max-height` and `max-width`, and
-optionally centers it in the window or another element.
-
-The element will only be sized and/or positioned if it has not already been sized and/or positioned
-by CSS.
-
-| CSS properties | Action |
-| --- | --- |
-| `position` set | Element is not centered horizontally or vertically |
-| `top` or `bottom` set | Element is not vertically centered |
-| `left` or `right` set | Element is not horizontally centered |
-| `max-height` or `height` set | Element respects `max-height` or `height` |
-| `max-width` or `width` set | Element respects `max-width` or `width` |
-
-
diff --git a/third_party/polymer/v1_0/components-chromium/iron-fit-behavior/index.html b/third_party/polymer/v1_0/components-chromium/iron-fit-behavior/index.html
deleted file mode 100644
index 5ffa7d61..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-fit-behavior/index.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-<html>
-<head>
-
-  <meta charset="utf-8">
-  <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
-
-  <title>iron-fit-behavior</title>
-
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-
-  <link rel="import" href="../polymer/polymer.html">
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-</head>
-<body>
-
-  <iron-component-page></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/iron-flex-layout/.bower.json b/third_party/polymer/v1_0/components-chromium/iron-flex-layout/.bower.json
deleted file mode 100644
index 3d6c4f44e..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-flex-layout/.bower.json
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "name": "iron-flex-layout",
-  "version": "1.3.0",
-  "description": "Provide flexbox-based layouts",
-  "keywords": [
-    "web-components",
-    "polymer",
-    "layout"
-  ],
-  "main": "iron-flex-layout.html",
-  "private": true,
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "authors": [
-    "The Polymer Authors"
-  ],
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/iron-flex-layout.git"
-  },
-  "dependencies": {
-    "polymer": "Polymer/polymer#^1.1.0"
-  },
-  "devDependencies": {
-    "iron-component-page": "polymerelements/iron-component-page#^1.0.0",
-    "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
-    "test-fixture": "PolymerElements/test-fixture#^1.0.0",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
-    "web-component-tester": "^4.0.0"
-  },
-  "ignore": [],
-  "homepage": "https://github.com/PolymerElements/iron-flex-layout",
-  "_release": "1.3.0",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.3.0",
-    "commit": "434224c8cf63cb4bb1b66edb0dc58e4484f7c5b2"
-  },
-  "_source": "git://github.com/PolymerElements/iron-flex-layout.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/iron-flex-layout"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/iron-flex-layout/.gitignore b/third_party/polymer/v1_0/components-chromium/iron-flex-layout/.gitignore
deleted file mode 100644
index 1eb1fa5..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-flex-layout/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-bower_components
-
diff --git a/third_party/polymer/v1_0/components-chromium/iron-flex-layout/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/iron-flex-layout/CONTRIBUTING.md
deleted file mode 100644
index f147978a..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-flex-layout/CONTRIBUTING.md
+++ /dev/null
@@ -1,77 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
-
-You can however override the jsbin link with one that's customized to this
-specific element:
-
-jsbin=https://jsbin.com/cagaye/edit?html,output
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, fixes #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/iron-flex-layout/README.md b/third_party/polymer/v1_0/components-chromium/iron-flex-layout/README.md
deleted file mode 100644
index 804099f..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-flex-layout/README.md
+++ /dev/null
@@ -1,33 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-iron-flex-layout.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
-The bot does some handling of markdown. Please file a bug if it does the wrong
-thing! https://github.com/PolymerLabs/tedium/issues
-
--->
-
-[![Build status](https://travis-ci.org/PolymerElements/iron-flex-layout.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-flex-layout)
-
-_[Demo and API docs](https://elements.polymer-project.org/elements/iron-flex-layout)_
-
-
-##&lt;iron-flex-layout&gt;
-
-The `<iron-flex-layout>` component provides simple ways to use [CSS flexible box layout](https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Flexible_boxes), also known as flexbox. This component provides two different ways to use flexbox:
-
-1. [Layout classes](https://github.com/PolymerElements/iron-flex-layout/tree/master/classes). The layout class stylesheet provides a simple set of class-based flexbox rules. Layout classes let you specify layout properties directly in markup.
-
-
-1. [Custom CSS mixins](https://github.com/PolymerElements/iron-flex-layout/blob/master/iron-flex-layout.html). The mixin stylesheet includes custom CSS mixins that can be applied inside a CSS rule using the `@apply` function.
-
-
-
-A complete [guide](https://elements.polymer-project.org/guides/flex-layout) to `<iron-flex-layout>` is available.
-
-
diff --git a/third_party/polymer/v1_0/components-chromium/iron-flex-layout/index.html b/third_party/polymer/v1_0/components-chromium/iron-flex-layout/index.html
deleted file mode 100644
index 7d3b088..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-flex-layout/index.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-<html>
-<head>
-
-  <title>iron-flex-layout</title>
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-</head>
-<body>
-
-  <iron-component-page></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/iron-form-element-behavior/.bower.json b/third_party/polymer/v1_0/components-chromium/iron-form-element-behavior/.bower.json
deleted file mode 100644
index e09f62a..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-form-element-behavior/.bower.json
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "name": "iron-form-element-behavior",
-  "version": "1.0.6",
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "private": true,
-  "main": "iron-form-element-behavior.html",
-  "authors": [
-    "The Polymer Authors"
-  ],
-  "description": "Enables a custom element to be included in an iron-form",
-  "keywords": [
-    "web-components",
-    "polymer",
-    "form"
-  ],
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/iron-form-element-behavior.git"
-  },
-  "dependencies": {
-    "polymer": "Polymer/polymer#^1.0.0"
-  },
-  "devDependencies": {
-    "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
-    "paper-styles": "PolymerElements/paper-styles#^1.0.0",
-    "test-fixture": "PolymerElements/test-fixture#^1.0.0",
-    "web-component-tester": "polymer/web-component-tester#^3.4.0",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
-  },
-  "ignore": [],
-  "homepage": "https://github.com/PolymerElements/iron-form-element-behavior",
-  "_release": "1.0.6",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.0.6",
-    "commit": "cf9e09ded62daf3363852ce98260aaad1ed0fae1"
-  },
-  "_source": "git://github.com/PolymerElements/iron-form-element-behavior.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/iron-form-element-behavior"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/iron-form-element-behavior/.gitignore b/third_party/polymer/v1_0/components-chromium/iron-form-element-behavior/.gitignore
deleted file mode 100644
index 8d4ae25..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-form-element-behavior/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components
diff --git a/third_party/polymer/v1_0/components-chromium/iron-form-element-behavior/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/iron-form-element-behavior/CONTRIBUTING.md
deleted file mode 100644
index 7b101415..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-form-element-behavior/CONTRIBUTING.md
+++ /dev/null
@@ -1,72 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [http://jsbin.com/cagaye](http://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/iron-form-element-behavior/README.md b/third_party/polymer/v1_0/components-chromium/iron-form-element-behavior/README.md
deleted file mode 100644
index b68d08fb..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-form-element-behavior/README.md
+++ /dev/null
@@ -1,23 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-iron-form-element-behavior.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
--->
-
-[![Build Status](https://travis-ci.org/PolymerElements/iron-form-element-behavior.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-form-element-behavior)
-
-_[Demo and API Docs](https://elements.polymer-project.org/elements/iron-form-element-behavior)_
-
-
-##Polymer.IronFormElementBehavior
-
-
-  Polymer.IronFormElementBehavior enables a custom element to be included
-  in an `iron-form`.
-
-  
diff --git a/third_party/polymer/v1_0/components-chromium/iron-form-element-behavior/index.html b/third_party/polymer/v1_0/components-chromium/iron-form-element-behavior/index.html
deleted file mode 100644
index 8d748c05..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-form-element-behavior/index.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-<html>
-<head>
-
-  <meta charset="utf-8">
-  <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
-
-  <title>iron-form-element-behavior</title>
-
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-
-  <link rel="import" href="../polymer/polymer.html">
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-</head>
-<body>
-
-  <iron-component-page></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/iron-icon/.bower.json b/third_party/polymer/v1_0/components-chromium/iron-icon/.bower.json
deleted file mode 100644
index 9784e3a3..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-icon/.bower.json
+++ /dev/null
@@ -1,45 +0,0 @@
-{
-  "name": "iron-icon",
-  "private": true,
-  "version": "1.0.8",
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "description": "An element that supports displaying an icon",
-  "main": "iron-icon.html",
-  "author": [
-    "The Polymer Authors"
-  ],
-  "keywords": [
-    "web-components",
-    "polymer",
-    "icon"
-  ],
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/iron-icon.git"
-  },
-  "ignore": [],
-  "dependencies": {
-    "iron-flex-layout": "polymerelements/iron-flex-layout#^1.0.0",
-    "iron-meta": "polymerelements/iron-meta#^1.0.0",
-    "polymer": "Polymer/polymer#^1.0.0"
-  },
-  "devDependencies": {
-    "test-fixture": "polymerelements/test-fixture#^1.0.0",
-    "promise-polyfill": "polymerlabs/promise-polyfill#^1.0.0",
-    "iron-iconset": "polymerelements/iron-iconset#^1.0.0",
-    "iron-icons": "polymerelements/iron-icons#^1.0.0",
-    "iron-component-page": "polymerelements/iron-component-page#^1.0.0",
-    "web-component-tester": "^4.0.0",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
-  },
-  "homepage": "https://github.com/PolymerElements/iron-icon",
-  "_release": "1.0.8",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.0.8",
-    "commit": "f36b38928849ef3853db727faa8c9ef104d611eb"
-  },
-  "_source": "git://github.com/PolymerElements/iron-icon.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/iron-icon"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/iron-icon/.gitignore b/third_party/polymer/v1_0/components-chromium/iron-icon/.gitignore
deleted file mode 100644
index 8d4ae25..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-icon/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components
diff --git a/third_party/polymer/v1_0/components-chromium/iron-icon/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/iron-icon/CONTRIBUTING.md
deleted file mode 100644
index f147978a..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-icon/CONTRIBUTING.md
+++ /dev/null
@@ -1,77 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
-
-You can however override the jsbin link with one that's customized to this
-specific element:
-
-jsbin=https://jsbin.com/cagaye/edit?html,output
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, fixes #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/iron-icon/README.md b/third_party/polymer/v1_0/components-chromium/iron-icon/README.md
deleted file mode 100644
index a08298f..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-icon/README.md
+++ /dev/null
@@ -1,92 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-iron-icon.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
-The bot does some handling of markdown. Please file a bug if it does the wrong
-thing! https://github.com/PolymerLabs/tedium/issues
-
--->
-
-[![Build status](https://travis-ci.org/PolymerElements/iron-icon.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-icon)
-
-_[Demo and API docs](https://elements.polymer-project.org/elements/iron-icon)_
-
-
-##&lt;iron-icon&gt;
-
-The `iron-icon` element displays an icon. By default an icon renders as a 24px square.
-
-Example using src:
-
-```html
-<iron-icon src="star.png"></iron-icon>
-```
-
-Example setting size to 32px x 32px:
-
-```html
-<iron-icon class="big" src="big_star.png"></iron-icon>
-
-<style is="custom-style">
-  .big {
-    --iron-icon-height: 32px;
-    --iron-icon-width: 32px;
-  }
-</style>
-```
-
-The iron elements include several sets of icons.
-To use the default set of icons, import `iron-icons.html` and use the `icon` attribute to specify an icon:
-
-```html
-<link rel="import" href="/components/iron-icons/iron-icons.html">
-
-<iron-icon icon="menu"></iron-icon>
-```
-
-To use a different built-in set of icons, import the specific `iron-icons/<iconset>-icons.html`, and
-specify the icon as `<iconset>:<icon>`. For example, to use a communication icon, you would
-use:
-
-```html
-<link rel="import" href="/components/iron-icons/communication-icons.html">
-
-<iron-icon icon="communication:email"></iron-icon>
-```
-
-You can also create custom icon sets of bitmap or SVG icons.
-
-Example of using an icon named `cherry` from a custom iconset with the ID `fruit`:
-
-```html
-<iron-icon icon="fruit:cherry"></iron-icon>
-```
-
-See [iron-iconset](iron-iconset) and [iron-iconset-svg](iron-iconset-svg) for more information about
-how to create a custom iconset.
-
-See the [iron-icons demo](iron-icons?view=demo:demo/index.html) to see the icons available
-in the various iconsets.
-
-To load a subset of icons from one of the default `iron-icons` sets, you can
-use the [poly-icon](https://poly-icon.appspot.com/) tool. It allows you
-to select individual icons, and creates an iconset from them that you can
-use directly in your elements.
-
-### Styling
-
-The following custom properties are available for styling:
-
-| Custom property | Description | Default |
-| --- | --- | --- |
-| `--iron-icon-width` | Width of the icon | `24px` |
-| `--iron-icon-height` | Height of the icon | `24px` |
-| `--iron-icon-fill-color` | Fill color of the svg icon | `currentcolor` |
-| `--iron-icon-stroke-color` | Stroke color of the svg icon | none |
-
-
diff --git a/third_party/polymer/v1_0/components-chromium/iron-icon/hero.svg b/third_party/polymer/v1_0/components-chromium/iron-icon/hero.svg
deleted file mode 100644
index f0f5853..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-icon/hero.svg
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 225 126" enable-background="new 0 0 225 126" xml:space="preserve">
-<g id="background" display="none">
-	<rect display="inline" fill="#B0BEC5" width="225" height="126"/>
-</g>
-<g id="label">
-</g>
-<g id="art">
-	<circle cx="112" cy="61" r="8"/>
-	<path d="M129,78H95V44h34V78z M97,76h30V46H97V76z"/>
-	<g id="ic_x5F_add_x0D_">
-	</g>
-</g>
-<g id="Guides">
-</g>
-</svg>
diff --git a/third_party/polymer/v1_0/components-chromium/iron-icon/index.html b/third_party/polymer/v1_0/components-chromium/iron-icon/index.html
deleted file mode 100644
index 487bb5c..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-icon/index.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-<html>
-<head>
-
-  <meta charset="utf-8">
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-</head>
-<body>
-
-  <iron-component-page></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/iron-icons/.bower.json b/third_party/polymer/v1_0/components-chromium/iron-icons/.bower.json
deleted file mode 100644
index be52e7b..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-icons/.bower.json
+++ /dev/null
@@ -1,47 +0,0 @@
-{
-  "name": "iron-icons",
-  "version": "1.1.3",
-  "description": "A set of icons for use with iron-icon",
-  "authors": [
-    "The Polymer Authors"
-  ],
-  "keywords": [
-    "web-components",
-    "polymer",
-    "icon"
-  ],
-  "main": "iron-icons.html",
-  "private": true,
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/iron-icons"
-  },
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "homepage": "https://github.com/PolymerElements/paper-icons",
-  "dependencies": {
-    "iron-icon": "polymerelements/iron-icon#^1.0.0",
-    "iron-iconset-svg": "polymerelements/iron-iconset-svg#^1.0.0",
-    "polymer": "Polymer/polymer#^1.0.0"
-  },
-  "devDependencies": {
-    "paper-styles": "polymerelements/paper-styles#^1.0.2",
-    "iron-component-page": "polymerelements/iron-component-page#1.0.0",
-    "iron-flex-layout": "polymerelements/iron-flex-layout#^1.0.0",
-    "iron-meta": "polymerelements/iron-meta#^1.0.0",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
-    "web-component-tester": "^4.0.0"
-  },
-  "ignore": [
-    "util",
-    "update-icons.sh"
-  ],
-  "_release": "1.1.3",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.1.3",
-    "commit": "c13869b57a9464dfc3a1f26e89858f8be37e7441"
-  },
-  "_source": "git://github.com/PolymerElements/iron-icons.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/iron-icons"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/iron-icons/.gitignore b/third_party/polymer/v1_0/components-chromium/iron-icons/.gitignore
deleted file mode 100644
index bb1944ea..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-icons/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-util/node_modules
-material-design-icons
-bower_components
diff --git a/third_party/polymer/v1_0/components-chromium/iron-icons/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/iron-icons/CONTRIBUTING.md
deleted file mode 100644
index 7b101415..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-icons/CONTRIBUTING.md
+++ /dev/null
@@ -1,72 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [http://jsbin.com/cagaye](http://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/iron-icons/README.md b/third_party/polymer/v1_0/components-chromium/iron-icons/README.md
deleted file mode 100644
index bd11ba7..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-icons/README.md
+++ /dev/null
@@ -1,44 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-iron-icons.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
-The bot does some handling of markdown. Please file a bug if it does the wrong
-thing! https://github.com/PolymerLabs/tedium/issues
-
--->
-
-[![Build Status](https://travis-ci.org/PolymerElements/iron-icons.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-icons)
-
-_[Demo and API Docs](https://elements.polymer-project.org/elements/iron-icons)_
-
-
-##&lt;iron-icons&gt;
-
-`iron-icons` is a utility import that includes the definition for the `iron-icon` element, `iron-iconset-svg` element, as well as an import for the default icon set.
-
-The `iron-icons` directory also includes imports for additional icon sets that can be loaded into your project.
-
-Example loading icon set:
-
-```html
-<link rel="import" href="../iron-icons/maps-icons.html">
-```
-
-To use an icon from one of these sets, first prefix your `iron-icon` with the icon set name, followed by a colon, ":", and then the icon id.
-
-Example using the directions-bus icon from the maps icon set:
-
-```html
-<iron-icon icon="maps:directions-bus"></iron-icon>
-```
-
-See [iron-icon](#iron-icon) for more information about working with icons.
-
-See [iron-iconset](#iron-iconset) and [iron-iconset-svg](#iron-iconset-svg) for more information about how to create a custom iconset.
-
-
diff --git a/third_party/polymer/v1_0/components-chromium/iron-icons/hero.svg b/third_party/polymer/v1_0/components-chromium/iron-icons/hero.svg
deleted file mode 100644
index 167321c9..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-icons/hero.svg
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 225 126" enable-background="new 0 0 225 126" xml:space="preserve">
-<g id="background" display="none">
-	<rect display="inline" fill="#B0BEC5" width="225" height="126"/>
-</g>
-<g id="label">
-</g>
-<g id="art">
-	<circle cx="73" cy="24" r="4"/>
-	<path d="M82,33H64V15h18V33z M66,31h14V17H66V31z"/>
-	<circle cx="112.5" cy="24" r="4"/>
-	<circle cx="151" cy="24" r="4"/>
-	<path d="M121,33h-18V15h18V33z M105,31h14V17h-14V31z"/>
-	<path d="M160,33h-18V15h18V33z M144,31h14V17h-14V31z"/>
-	<circle cx="73" cy="62" r="4"/>
-	<path d="M82,71H64V53h18V71z M66,69h14V55H66V69z"/>
-	<circle cx="112.5" cy="62" r="4"/>
-	<path d="M121,71h-18V53h18V71z M105,69h14V55h-14V69z"/>
-	<circle cx="151" cy="62" r="4"/>
-	<path d="M160,71h-18V53h18V71z M144,69h14V55h-14V69z"/>
-	<circle cx="73" cy="102" r="4"/>
-	<path d="M82,111H64V93h18V111z M66,109h14V95H66V109z"/>
-	<circle cx="112.5" cy="102" r="4"/>
-	<path d="M121,111h-18V93h18V111z M105,109h14V95h-14V109z"/>
-	<circle cx="151" cy="102" r="4"/>
-	<path d="M160,111h-18V93h18V111z M144,109h14V95h-14V109z"/>
-	<g id="ic_x5F_add_x0D_">
-	</g>
-</g>
-<g id="Guides">
-</g>
-</svg>
diff --git a/third_party/polymer/v1_0/components-chromium/iron-icons/index.html b/third_party/polymer/v1_0/components-chromium/iron-icons/index.html
deleted file mode 100644
index cea02f9..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-icons/index.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<!doctype html>
-<!--
-Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-<html>
-<head>
-
-  <meta charset="utf-8">
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-</head>
-<body>
-
-  <iron-component-page></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/iron-iconset-svg/.bower.json b/third_party/polymer/v1_0/components-chromium/iron-iconset-svg/.bower.json
deleted file mode 100644
index 37c716fe..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-iconset-svg/.bower.json
+++ /dev/null
@@ -1,43 +0,0 @@
-{
-  "name": "iron-iconset-svg",
-  "description": "Manages a set of svg icons",
-  "version": "1.0.9",
-  "keywords": [
-    "web-components",
-    "polymer",
-    "icon"
-  ],
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "private": true,
-  "authors": [
-    "The Polymer Authors"
-  ],
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/iron-iconset-svg.git"
-  },
-  "dependencies": {
-    "polymer": "polymer/polymer#^1.0.0",
-    "iron-meta": "polymerelements/iron-meta#^1.0.0"
-  },
-  "devDependencies": {
-    "paper-styles": "polymerelements/paper-styles#^1.0.2",
-    "iron-component-page": "polymerelements/iron-component-page#^1.0.0",
-    "iron-icon": "polymerelements/iron-icon#^1.0.0",
-    "promise-polyfill": "polymerlabs/promise-polyfill#^1.0.0",
-    "test-fixture": "polymerelements/test-fixture#^1.0.0",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
-    "web-component-tester": "*"
-  },
-  "main": "iron-iconset-svg.html",
-  "homepage": "https://github.com/PolymerElements/iron-iconset-svg",
-  "_release": "1.0.9",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.0.9",
-    "commit": "ce9b2ea1f73d936cffdd05f3fe34b1f69d1d32db"
-  },
-  "_source": "git://github.com/PolymerElements/iron-iconset-svg.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/iron-iconset-svg"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/iron-iconset-svg/.gitignore b/third_party/polymer/v1_0/components-chromium/iron-iconset-svg/.gitignore
deleted file mode 100644
index 8d4ae25..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-iconset-svg/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components
diff --git a/third_party/polymer/v1_0/components-chromium/iron-iconset-svg/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/iron-iconset-svg/CONTRIBUTING.md
deleted file mode 100644
index 7b101415..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-iconset-svg/CONTRIBUTING.md
+++ /dev/null
@@ -1,72 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [http://jsbin.com/cagaye](http://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/iron-iconset-svg/README.md b/third_party/polymer/v1_0/components-chromium/iron-iconset-svg/README.md
deleted file mode 100644
index f5b7e56..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-iconset-svg/README.md
+++ /dev/null
@@ -1,50 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-iron-iconset-svg.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
--->
-
-[![Build Status](https://travis-ci.org/PolymerElements/iron-iconset-svg.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-iconset-svg)
-
-_[Demo and API Docs](https://elements.polymer-project.org/elements/iron-iconset-svg)_
-
-
-##&lt;iron-iconset-svg&gt;
-
-
-The `iron-iconset-svg` element allows users to define their own icon sets
-that contain svg icons. The svg icon elements should be children of the
-`iron-iconset-svg` element. Multiple icons should be given distinct id's.
-
-Using svg elements to create icons has a few advantages over traditional
-bitmap graphics like jpg or png. Icons that use svg are vector based so
-they are resolution independent and should look good on any device. They
-are stylable via css. Icons can be themed, colorized, and even animated.
-
-Example:
-
-    <iron-iconset-svg name="my-svg-icons" size="24">
-      <svg>
-        <defs>
-          <g id="shape">
-            <rect x="50" y="50" width="50" height="50" />
-            <circle cx="50" cy="50" r="50" />
-          </g>
-        </defs>
-      </svg>
-    </iron-iconset-svg>
-
-This will automatically register the icon set "my-svg-icons" to the iconset
-database.  To use these icons from within another element, make a
-`iron-iconset` element and call the `byId` method
-to retrieve a given iconset. To apply a particular icon inside an
-element use the `applyIcon` method. For example:
-
-    iconset.applyIcon(iconNode, 'car');
-
-
diff --git a/third_party/polymer/v1_0/components-chromium/iron-iconset-svg/index.html b/third_party/polymer/v1_0/components-chromium/iron-iconset-svg/index.html
deleted file mode 100644
index e871f17d..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-iconset-svg/index.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE
-The complete set of authors may be found at http://polymer.github.io/AUTHORS
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS
--->
-<html>
-<head>
-
-  <meta charset="utf-8">
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-</head>
-<body>
-
-  <iron-component-page></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/iron-image/.bower.json b/third_party/polymer/v1_0/components-chromium/iron-image/.bower.json
deleted file mode 100644
index 6c28880..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-image/.bower.json
+++ /dev/null
@@ -1,43 +0,0 @@
-{
-  "name": "iron-image",
-  "version": "1.2.2",
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "description": "An image-displaying element with lots of convenient features",
-  "private": true,
-  "authors": [
-    "The Polymer Authors"
-  ],
-  "keywords": [
-    "web-components",
-    "polymer",
-    "media"
-  ],
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/iron-image.git"
-  },
-  "dependencies": {
-    "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
-    "polymer": "Polymer/polymer#^1.1.0"
-  },
-  "devDependencies": {
-    "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
-    "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
-    "paper-styles": "PolymerElements/paper-styles#^1.0.4",
-    "test-fixture": "PolymerElements/test-fixture#^1.0.0",
-    "web-component-tester": "^4.0.0",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
-  },
-  "main": "iron-image.html",
-  "ignore": [],
-  "homepage": "https://github.com/PolymerElements/iron-image",
-  "_release": "1.2.2",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.2.2",
-    "commit": "2b9e5466ce0809a8503c369c9c500ec487dee224"
-  },
-  "_source": "git://github.com/PolymerElements/iron-image.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/iron-image"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/iron-image/.gitignore b/third_party/polymer/v1_0/components-chromium/iron-image/.gitignore
deleted file mode 100644
index 8d4ae25..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-image/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components
diff --git a/third_party/polymer/v1_0/components-chromium/iron-image/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/iron-image/CONTRIBUTING.md
deleted file mode 100644
index f147978a..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-image/CONTRIBUTING.md
+++ /dev/null
@@ -1,77 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
-
-You can however override the jsbin link with one that's customized to this
-specific element:
-
-jsbin=https://jsbin.com/cagaye/edit?html,output
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, fixes #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/iron-image/README.md b/third_party/polymer/v1_0/components-chromium/iron-image/README.md
deleted file mode 100644
index 379796269f..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-image/README.md
+++ /dev/null
@@ -1,86 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-iron-image.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
-The bot does some handling of markdown. Please file a bug if it does the wrong
-thing! https://github.com/PolymerLabs/tedium/issues
-
--->
-
-[![Build status](https://travis-ci.org/PolymerElements/iron-image.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-image)
-
-_[Demo and API docs](https://elements.polymer-project.org/elements/iron-image)_
-
-
-##&lt;iron-image&gt;
-
-`iron-image` is an element for displaying an image that provides useful sizing and
-preloading options not found on the standard `<img>` tag.
-
-The `sizing` option allows the image to be either cropped (`cover`) or
-letterboxed (`contain`) to fill a fixed user-size placed on the element.
-
-The `preload` option prevents the browser from rendering the image until the
-image is fully loaded.  In the interim, either the element's CSS `background-color`
-can be be used as the placeholder, or the `placeholder` property can be
-set to a URL (preferably a data-URI, for instant rendering) for an
-placeholder image.
-
-The `fade` option (only valid when `preload` is set) will cause the placeholder
-image/color to be faded out once the image is rendered.
-
-Examples:
-
-  Basically identical to `<img src="...">` tag:
-
-```html
-<iron-image src="http://lorempixel.com/400/400"></iron-image>
-```
-
-  Will letterbox the image to fit:
-
-```html
-<iron-image style="width:400px; height:400px;" sizing="contain"
-  src="http://lorempixel.com/600/400"></iron-image>
-```
-
-  Will crop the image to fit:
-
-```html
-<iron-image style="width:400px; height:400px;" sizing="cover"
-  src="http://lorempixel.com/600/400"></iron-image>
-```
-
-  Will show light-gray background until the image loads:
-
-```html
-<iron-image style="width:400px; height:400px; background-color: lightgray;"
-  sizing="cover" preload src="http://lorempixel.com/600/400"></iron-image>
-```
-
-  Will show a base-64 encoded placeholder image until the image loads:
-
-```html
-<iron-image style="width:400px; height:400px;" placeholder="data:image/gif;base64,..."
-  sizing="cover" preload src="http://lorempixel.com/600/400"></iron-image>
-```
-
-  Will fade the light-gray background out once the image is loaded:
-
-```html
-<iron-image style="width:400px; height:400px; background-color: lightgray;"
-  sizing="cover" preload fade src="http://lorempixel.com/600/400"></iron-image>
-```
-
-| Custom property | Description | Default |
-| --- | --- | --- |
-| `--iron-image-placeholder` | Mixin applied to #placeholder | `{}` |
-| `--iron-image-width` | Sets the width of the wrapped image | `auto` |
-| `--iron-image-height` | Sets the height of the wrapped image | `auto` |
-
-
diff --git a/third_party/polymer/v1_0/components-chromium/iron-image/index.html b/third_party/polymer/v1_0/components-chromium/iron-image/index.html
deleted file mode 100644
index bb7da82..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-image/index.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-<html>
-<head>
-
-  <title>iron-image</title>
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-</head>
-<body>
-
-  <iron-component-page></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/iron-input/.bower.json b/third_party/polymer/v1_0/components-chromium/iron-input/.bower.json
deleted file mode 100644
index cbafbec95..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-input/.bower.json
+++ /dev/null
@@ -1,43 +0,0 @@
-{
-  "name": "iron-input",
-  "version": "1.0.8",
-  "description": "An input element with data binding",
-  "authors": [
-    "The Polymer Authors"
-  ],
-  "keywords": [
-    "web-components",
-    "polymer",
-    "input"
-  ],
-  "main": "iron-input.html",
-  "private": true,
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/iron-input.git"
-  },
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "homepage": "https://github.com/PolymerElements/iron-input",
-  "ignore": [],
-  "dependencies": {
-    "iron-validatable-behavior": "PolymerElements/iron-validatable-behavior#^1.0.0",
-    "polymer": "Polymer/polymer#^1.0.0"
-  },
-  "devDependencies": {
-    "paper-styles": "polymerelements/paper-styles#^1.0.2",
-    "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
-    "iron-validator-behavior": "PolymerElements/iron-validator-behavior#^1.0.0",
-    "test-fixture": "PolymerElements/test-fixture#^1.0.0",
-    "web-component-tester": "polymer/web-component-tester#^3.4.0",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
-  },
-  "_release": "1.0.8",
-  "_resolution": {
-    "type": "version",
-    "tag": "1.0.8",
-    "commit": "55d2b39ead32b8d90da538daa1a6681fd9ae89d9"
-  },
-  "_source": "git://github.com/PolymerElements/iron-input.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/iron-input"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/iron-input/.gitignore b/third_party/polymer/v1_0/components-chromium/iron-input/.gitignore
deleted file mode 100644
index 8d4ae25..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-input/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components
diff --git a/third_party/polymer/v1_0/components-chromium/iron-input/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/iron-input/CONTRIBUTING.md
deleted file mode 100644
index 7b101415..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-input/CONTRIBUTING.md
+++ /dev/null
@@ -1,72 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [http://jsbin.com/cagaye](http://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/iron-input/README.md b/third_party/polymer/v1_0/components-chromium/iron-input/README.md
deleted file mode 100644
index 70a74e9..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-input/README.md
+++ /dev/null
@@ -1,49 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-iron-input.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
--->
-
-[![Build Status](https://travis-ci.org/PolymerElements/iron-input.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-input)
-
-_[Demo and API Docs](https://elements.polymer-project.org/elements/iron-input)_
-
-
-##&lt;iron-input&gt;
-
-
-`<iron-input>` adds two-way binding and custom validators using `Polymer.IronValidatorBehavior`
-to `<input>`.
-
-### Two-way binding
-
-By default you can only get notified of changes to an `input`'s `value` due to user input:
-
-    <input value="{{myValue::input}}">
-
-`iron-input` adds the `bind-value` property that mirrors the `value` property, and can be used
-for two-way data binding. `bind-value` will notify if it is changed either by user input or by script.
-
-    <input is="iron-input" bind-value="{{myValue}}">
-
-### Custom validators
-
-You can use custom validators that implement `Polymer.IronValidatorBehavior` with `<iron-input>`.
-
-    <input is="iron-input" validator="my-custom-validator">
-
-### Stopping invalid input
-
-It may be desirable to only allow users to enter certain characters. You can use the
-`prevent-invalid-input` and `allowed-pattern` attributes together to accomplish this. This feature
-is separate from validation, and `allowed-pattern` does not affect how the input is validated.
-
-    <!-- only allow characters that match [0-9] -->
-    <input is="iron-input" prevent-invalid-input allowed-pattern="[0-9]">
-
-
diff --git a/third_party/polymer/v1_0/components-chromium/iron-input/hero.svg b/third_party/polymer/v1_0/components-chromium/iron-input/hero.svg
deleted file mode 100644
index 146ffea..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-input/hero.svg
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 225 126" enable-background="new 0 0 225 126" xml:space="preserve">
-<g id="background" display="none">
-	<rect display="inline" fill="#B0BEC5" width="225" height="126"/>
-</g>
-<g id="label">
-</g>
-<g id="art">
-	<rect x="49" y="53" width="2" height="18"/>
-	<path d="M188,78H37V44h151V78z M39,76h147V46H39V76z"/>
-	<g id="ic_x5F_add_x0D_">
-	</g>
-</g>
-<g id="Guides">
-</g>
-</svg>
diff --git a/third_party/polymer/v1_0/components-chromium/iron-input/index.html b/third_party/polymer/v1_0/components-chromium/iron-input/index.html
deleted file mode 100644
index ca0dac0..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-input/index.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-<html>
-<head>
-
-  <meta charset="utf-8">
-  <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
-
-  <title>iron-input</title>
-
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-
-  <link rel="import" href="../polymer/polymer.html">
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-</head>
-<body>
-
-  <iron-component-page></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/iron-list/.bower.json b/third_party/polymer/v1_0/components-chromium/iron-list/.bower.json
deleted file mode 100644
index 1217d66..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-list/.bower.json
+++ /dev/null
@@ -1,57 +0,0 @@
-{
-  "name": "iron-list",
-  "description": "Displays a virtual, 'infinite' scrolling list of items",
-  "keywords": [
-    "web-components",
-    "polymer",
-    "list",
-    "virtual-list"
-  ],
-  "version": "1.2.7",
-  "homepage": "https://github.com/PolymerElements/iron-list",
-  "authors": [
-    "The Polymer Authors"
-  ],
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/iron-list"
-  },
-  "main": "iron-list.html",
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "ignore": [],
-  "dependencies": {
-    "polymer": "Polymer/polymer#^1.1.0",
-    "iron-resizable-behavior": "polymerelements/iron-resizable-behavior#^1.0.0",
-    "iron-a11y-keys-behavior": "polymerelements/iron-a11y-keys-behavior#^1.0.0",
-    "iron-scroll-target-behavior": "PolymerElements/iron-scroll-target-behavior#^1.0.0"
-  },
-  "devDependencies": {
-    "app-layout": "PolymerLabs/app-layout#master",
-    "iron-flex-layout": "polymerelements/iron-flex-layout#^1.0.0",
-    "iron-component-page": "polymerelements/iron-component-page#^1.0.0",
-    "iron-ajax": "polymerelements/iron-ajax#^1.0.0",
-    "iron-icon": "polymerelements/iron-icon#^1.0.0",
-    "iron-icons": "polymerelements/iron-icons#^1.0.0",
-    "iron-scroll-threshold": "polymerelements/iron-scroll-threshold#^1.0.0",
-    "iron-image": "polymerelements/iron-image#^1.0.0",
-    "paper-menu": "polymerelements/paper-menu#^1.0.0",
-    "paper-item": "polymerelements/paper-item#^1.0.0",
-    "paper-icon-button": "polymerelements/paper-icon-button#^1.0.0",
-    "paper-button": "polymerelements/paper-button#^1.0.0",
-    "paper-badge": "polymerelements/paper-badge#^1.0.0",
-    "paper-spinner": "polymerelements/paper-spinner#^1.0.0",
-    "test-fixture": "polymerelements/test-fixture#^1.0.0",
-    "iron-test-helpers": "polymerelements/iron-test-helpers#^1.0.0",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.2",
-    "web-component-tester": "^4.0.0"
-  },
-  "_release": "1.2.7",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.2.7",
-    "commit": "3de2382811553456af4cc8fc9772dac9fbdff41b"
-  },
-  "_source": "git://github.com/PolymerElements/iron-list.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/iron-list"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/iron-list/.gitignore b/third_party/polymer/v1_0/components-chromium/iron-list/.gitignore
deleted file mode 100644
index 8d4ae25..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-list/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components
diff --git a/third_party/polymer/v1_0/components-chromium/iron-list/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/iron-list/CONTRIBUTING.md
deleted file mode 100644
index f147978a..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-list/CONTRIBUTING.md
+++ /dev/null
@@ -1,77 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
-
-You can however override the jsbin link with one that's customized to this
-specific element:
-
-jsbin=https://jsbin.com/cagaye/edit?html,output
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, fixes #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/iron-list/README.md b/third_party/polymer/v1_0/components-chromium/iron-list/README.md
deleted file mode 100644
index a4386c1a..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-list/README.md
+++ /dev/null
@@ -1,139 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-iron-list.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
-The bot does some handling of markdown. Please file a bug if it does the wrong
-thing! https://github.com/PolymerLabs/tedium/issues
-
--->
-
-[![Build status](https://travis-ci.org/PolymerElements/iron-list.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-list)
-
-_[Demo and API docs](https://elements.polymer-project.org/elements/iron-list)_
-
-
-##&lt;iron-list&gt;
-
-`iron-list` displays a virtual, 'infinite' list. The template inside
-the iron-list element represents the DOM to create for each list item.
-The `items` property specifies an array of list item data.
-
-For performance reasons, not every item in the list is rendered at once;
-instead a small subset of actual template elements *(enough to fill the viewport)*
-are rendered and reused as the user scrolls. As such, it is important that all
-state of the list template be bound to the model driving it, since the view may
-be reused with a new model at any time. Particularly, any state that may change
-as the result of a user interaction with the list item must be bound to the model
-to avoid view state inconsistency.
-
-__Important:__ `iron-list` must either be explicitly sized, or delegate scrolling to an
-explicitly sized parent. By "explicitly sized", we mean it either has an explicit
-CSS `height` property set via a class or inline style, or else is sized by other
-layout means (e.g. the `flex` or `fit` classes).
-
-### Template model
-
-List item templates should bind to template models of the following structure:
-
-```js
-{
-  index: 0,        // index in the item array
-  selected: false, // true if the current item is selected
-  tabIndex: -1,    // a dynamically generated tabIndex for focus management
-  item: {}         // user data corresponding to items[index]
-}
-```
-
-Alternatively, you can change the property name used as data index by changing the
-`indexAs` property. The `as` property defines the name of the variable to add to the binding
-scope for the array.
-
-For example, given the following `data` array:
-
-##### data.json
-
-```js
-[
-  {"name": "Bob"},
-  {"name": "Tim"},
-  {"name": "Mike"}
-]
-```
-
-The following code would render the list (note the name and checked properties are
-bound from the model object provided to the template scope):
-
-```html
-<template is="dom-bind">
-  <iron-ajax url="data.json" last-response="{{data}}" auto></iron-ajax>
-  <iron-list items="[[data]]" as="item">
-    <template>
-      <div>
-        Name: [[item.name]]
-      </div>
-    </template>
-  </iron-list>
-</template>
-```
-
-### Accessibility
-
-`iron-list` automatically manages the focus state for the items. It also provides
-a `tabIndex` property within the template scope that can be used for keyboard navigation.
-For example, users can press the up and down keys to move to previous and next
-items in the list:
-
-```html
-<iron-list items="[[data]]" as="item">
-  <template>
-    <div tabindex$="[[tabIndex]]">
-      Name: [[item.name]]
-    </div>
-  </template>
-</iron-list>
-```
-
-### Styling
-
-You can use the `--iron-list-items-container` mixin to style the container of items:
-
-```css
-iron-list {
- --iron-list-items-container: {
-    margin: auto;
-  };
-}
-```
-
-### Resizing
-
-`iron-list` lays out the items when it receives a notification via the `iron-resize` event.
-This event is fired by any element that implements `IronResizableBehavior`.
-
-By default, elements such as `iron-pages`, `paper-tabs` or `paper-dialog` will trigger
-this event automatically. If you hide the list manually (e.g. you use `display: none`)
-you might want to implement `IronResizableBehavior` or fire this event manually right
-after the list became visible again. For example:
-
-```js
-document.querySelector('iron-list').fire('iron-resize');
-```
-
-### When should `<iron-list>` be used?
-
-`iron-list` should be used when a page has significantly more DOM nodes than the ones
-visible on the screen. e.g. the page has 500 nodes, but only 20 are visible at the time.
-This is why we refer to it as a `virtual` list. In this case, a `dom-repeat` will still
-create 500 nodes which could slow down the web app, but `iron-list` will only create 20.
-
-However, having an `iron-list` does not mean that you can load all the data at once.
-Say, you have a million records in the database, you want to split the data into pages
-so you can bring a page at the time. The page could contain 500 items, and iron-list
-will only render 20.
-
-
diff --git a/third_party/polymer/v1_0/components-chromium/iron-list/index.html b/third_party/polymer/v1_0/components-chromium/iron-list/index.html
deleted file mode 100644
index 536371c..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-list/index.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!doctype html>
-<!--
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE
-The complete set of authors may be found at http://polymer.github.io/AUTHORS
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS
--->
-<html>
-<head>
-
-  <title>iron-list</title>
-  <meta charset="utf-8">
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-</head>
-<body>
-
-  <iron-component-page></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/iron-media-query/.bower.json b/third_party/polymer/v1_0/components-chromium/iron-media-query/.bower.json
deleted file mode 100644
index d9ad827..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-media-query/.bower.json
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "name": "iron-media-query",
-  "version": "1.0.8",
-  "description": "Lets you bind to a CSS media query",
-  "authors": [
-    "The Polymer Authors"
-  ],
-  "keywords": [
-    "web-components",
-    "polymer",
-    "media"
-  ],
-  "private": true,
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/iron-media-query"
-  },
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "homepage": "https://github.com/PolymerElements/iron-media-query",
-  "ignore": [],
-  "dependencies": {
-    "polymer": "Polymer/polymer#^1.0.0"
-  },
-  "devDependencies": {
-    "paper-styles": "polymerelements/paper-styles#^1.0.2",
-    "web-component-tester": "polymer/web-component-tester#^3.4.0",
-    "test-fixture": "PolymerElements/test-fixture#^1.0.0",
-    "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
-  },
-  "main": "iron-media-query.html",
-  "_release": "1.0.8",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.0.8",
-    "commit": "3f916be171af7a3e03eb019acdfea71055d3c744"
-  },
-  "_source": "git://github.com/PolymerElements/iron-media-query.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/iron-media-query"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/iron-media-query/.gitignore b/third_party/polymer/v1_0/components-chromium/iron-media-query/.gitignore
deleted file mode 100644
index 8d4ae25..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-media-query/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components
diff --git a/third_party/polymer/v1_0/components-chromium/iron-media-query/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/iron-media-query/CONTRIBUTING.md
deleted file mode 100644
index 7b101415..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-media-query/CONTRIBUTING.md
+++ /dev/null
@@ -1,72 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [http://jsbin.com/cagaye](http://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/iron-media-query/README.md b/third_party/polymer/v1_0/components-chromium/iron-media-query/README.md
deleted file mode 100644
index a2c553d..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-media-query/README.md
+++ /dev/null
@@ -1,28 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-iron-media-query.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
--->
-
-[![Build Status](https://travis-ci.org/PolymerElements/iron-media-query.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-media-query)
-
-_[Demo and API Docs](https://elements.polymer-project.org/elements/iron-media-query)_
-
-
-##&lt;iron-media-query&gt;
-
-
-`iron-media-query` can be used to data bind to a CSS media query.
-The `query` property is a bare CSS media query.
-The `query-matches` property is a boolean representing whether the page matches that media query.
-
-Example:
-
-    <iron-media-query query="(min-width: 600px)" query-matches="{{queryMatches}}"></iron-media-query>
-
-
diff --git a/third_party/polymer/v1_0/components-chromium/iron-media-query/hero.svg b/third_party/polymer/v1_0/components-chromium/iron-media-query/hero.svg
deleted file mode 100644
index 9b5e2a6..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-media-query/hero.svg
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 225 126" enable-background="new 0 0 225 126" xml:space="preserve">
-<g id="background" display="none">
-	<rect display="inline" fill="#B0BEC5" width="225" height="126"/>
-</g>
-<g id="label">
-</g>
-<g id="art">
-	<path d="M173,99H91V41h82V99z M93,97h78V43H93V97z"/>
-	<path d="M77,89H51V42h26V89z M53,87h22V44H53V87z"/>
-	<rect x="52" y="56" width="24" height="2"/>
-	<rect x="92" y="58" width="80" height="2"/>
-	<path d="M65.3,42h-2c0-10,8.7-18.7,18.7-18.7v2C73,25.3,65.3,33,65.3,42z"/>
-	<path d="M105.3,42h-2c0-9-7.3-16.7-16.3-16.7v-2C97,23.3,105.3,32,105.3,42z"/>
-	<circle cx="84.3" cy="24.3" r="4"/>
-	<circle cx="69.3" cy="80.3" r="4"/>
-	<circle cx="160.3" cy="59.3" r="4"/>
-	<path d="M49,41v49c0,1.1,0.9,2,2,2h26c1.1,0,2-0.9,2-2V41c0-1.1-0.9-2-2-2H51C49.9,39,49,39.9,49,41z M76,88H52V43h24V88z"/>
-	<path d="M88.9,40.7v59c0,1.1,0.9,2,2,2h82c1.1,0,2-0.9,2-2v-59c0-1.1-0.9-2-2-2h-82C89.8,38.7,88.9,39.6,88.9,40.7z M172,98H93V42
-		h79V98z"/>
-	<g id="ic_x5F_add_x0D_">
-	</g>
-</g>
-<g id="Guides">
-</g>
-</svg>
diff --git a/third_party/polymer/v1_0/components-chromium/iron-media-query/index.html b/third_party/polymer/v1_0/components-chromium/iron-media-query/index.html
deleted file mode 100644
index 174afb5..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-media-query/index.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<!doctype html>
-<!--
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-<html>
-  <head>
-
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
-
-    <title>iron-media-query</title>
-
-    <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-
-    <link rel="import" href="../polymer/polymer.html">
-    <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-  </head>
-  <body>
-
-    <iron-component-page></iron-component-page>
-
-  </body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/iron-menu-behavior/.bower.json b/third_party/polymer/v1_0/components-chromium/iron-menu-behavior/.bower.json
deleted file mode 100644
index 751cfcc..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-menu-behavior/.bower.json
+++ /dev/null
@@ -1,46 +0,0 @@
-{
-  "name": "iron-menu-behavior",
-  "version": "1.1.4",
-  "description": "Provides accessible menu behavior",
-  "authors": "The Polymer Authors",
-  "keywords": [
-    "web-components",
-    "polymer",
-    "behavior",
-    "menu"
-  ],
-  "main": [
-    "iron-menu-behavior.html",
-    "iron-menubar-behavior.html"
-  ],
-  "private": true,
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/iron-menu-behavior"
-  },
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "homepage": "https://github.com/PolymerElements/iron-menu-behavior",
-  "ignore": [],
-  "dependencies": {
-    "iron-selector": "PolymerElements/iron-selector#^1.0.0",
-    "polymer": "Polymer/polymer#^1.2.4",
-    "iron-a11y-keys-behavior": "polymerelements/iron-a11y-keys-behavior#^1.0.0"
-  },
-  "devDependencies": {
-    "paper-styles": "polymerelements/paper-styles#^1.0.2",
-    "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
-    "iron-test-helpers": "polymerelements/iron-test-helpers#^1.0.0",
-    "test-fixture": "PolymerElements/test-fixture#^1.0.0",
-    "web-component-tester": "^4.0.0",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
-  },
-  "_release": "1.1.4",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.1.4",
-    "commit": "637c4ae4654b53d4ca29ba97239c1ffba13cfc93"
-  },
-  "_source": "git://github.com/PolymerElements/iron-menu-behavior.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/iron-menu-behavior"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/iron-menu-behavior/.gitignore b/third_party/polymer/v1_0/components-chromium/iron-menu-behavior/.gitignore
deleted file mode 100644
index 8d4ae25..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-menu-behavior/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components
diff --git a/third_party/polymer/v1_0/components-chromium/iron-menu-behavior/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/iron-menu-behavior/CONTRIBUTING.md
deleted file mode 100644
index f147978a..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-menu-behavior/CONTRIBUTING.md
+++ /dev/null
@@ -1,77 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
-
-You can however override the jsbin link with one that's customized to this
-specific element:
-
-jsbin=https://jsbin.com/cagaye/edit?html,output
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, fixes #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/iron-menu-behavior/README.md b/third_party/polymer/v1_0/components-chromium/iron-menu-behavior/README.md
deleted file mode 100644
index f8d90c65..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-menu-behavior/README.md
+++ /dev/null
@@ -1,30 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-iron-menu-behavior.html  iron-menubar-behavior.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
-The bot does some handling of markdown. Please file a bug if it does the wrong
-thing! https://github.com/PolymerLabs/tedium/issues
-
--->
-
-[![Build status](https://travis-ci.org/PolymerElements/iron-menu-behavior.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-menu-behavior)
-
-_[Demo and API docs](https://elements.polymer-project.org/elements/iron-menu-behavior)_
-
-
-##Polymer.IronMenuBehavior
-
-`Polymer.IronMenuBehavior` implements accessible menu behavior.
-
-
-
-##Polymer.IronMenubarBehavior
-
-`Polymer.IronMenubarBehavior` implements accessible menubar behavior.
-
-
diff --git a/third_party/polymer/v1_0/components-chromium/iron-menu-behavior/index.html b/third_party/polymer/v1_0/components-chromium/iron-menu-behavior/index.html
deleted file mode 100644
index 2c643c4a..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-menu-behavior/index.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-<html>
-<head>
-
-  <meta charset="utf-8">
-  <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
-
-  <title>iron-menu-behavior</title>
-
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-
-  <link rel="import" href="../polymer/polymer.html">
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-</head>
-<body>
-
-  <iron-component-page src="iron-menubar-behavior.html"></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/iron-meta/.bower.json b/third_party/polymer/v1_0/components-chromium/iron-meta/.bower.json
deleted file mode 100644
index e1304d17..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-meta/.bower.json
+++ /dev/null
@@ -1,39 +0,0 @@
-{
-  "name": "iron-meta",
-  "version": "1.1.1",
-  "keywords": [
-    "web-components",
-    "polymer"
-  ],
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "description": "Useful for sharing information across a DOM tree",
-  "private": true,
-  "authors": [
-    "The Polymer Authors"
-  ],
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/iron-meta.git"
-  },
-  "dependencies": {
-    "polymer": "Polymer/polymer#^1.0.0"
-  },
-  "devDependencies": {
-    "paper-styles": "polymerelements/paper-styles#^1.0.4",
-    "iron-component-page": "polymerelements/iron-component-page#^1.0.0",
-    "test-fixture": "polymerelements/test-fixture#^1.0.0",
-    "web-component-tester": "*",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
-  },
-  "main": "iron-meta.html",
-  "homepage": "https://github.com/PolymerElements/iron-meta",
-  "_release": "1.1.1",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.1.1",
-    "commit": "e171ee234b482219c9514e6f9551df48ef48bd9f"
-  },
-  "_source": "git://github.com/PolymerElements/iron-meta.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/iron-meta"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/iron-meta/.gitignore b/third_party/polymer/v1_0/components-chromium/iron-meta/.gitignore
deleted file mode 100644
index 8d4ae25..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-meta/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components
diff --git a/third_party/polymer/v1_0/components-chromium/iron-meta/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/iron-meta/CONTRIBUTING.md
deleted file mode 100644
index 7b101415..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-meta/CONTRIBUTING.md
+++ /dev/null
@@ -1,72 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [http://jsbin.com/cagaye](http://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/iron-meta/README.md b/third_party/polymer/v1_0/components-chromium/iron-meta/README.md
deleted file mode 100644
index 615c85b..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-meta/README.md
+++ /dev/null
@@ -1,93 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-iron-meta.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
--->
-
-[![Build Status](https://travis-ci.org/PolymerElements/iron-meta.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-meta)
-
-_[Demo and API Docs](https://elements.polymer-project.org/elements/iron-meta)_
-
-
-##&lt;iron-meta&gt;
-
-
-`iron-meta` is a generic element you can use for sharing information across the DOM tree.
-It uses [monostate pattern](http://c2.com/cgi/wiki?MonostatePattern) such that any
-instance of iron-meta has access to the shared
-information. You can use `iron-meta` to share whatever you want (or create an extension
-[like x-meta] for enhancements).
-
-The `iron-meta` instances containing your actual data can be loaded in an import,
-or constructed in any way you see fit. The only requirement is that you create them
-before you try to access them.
-
-Examples:
-
-If I create an instance like this:
-
-    <iron-meta key="info" value="foo/bar"></iron-meta>
-
-Note that value="foo/bar" is the metadata I've defined. I could define more
-attributes or use child nodes to define additional metadata.
-
-Now I can access that element (and it's metadata) from any iron-meta instance
-via the byKey method, e.g.
-
-    meta.byKey('info').getAttribute('value');
-
-Pure imperative form would be like:
-
-    document.createElement('iron-meta').byKey('info').getAttribute('value');
-
-Or, in a Polymer element, you can include a meta in your template:
-
-    <iron-meta id="meta"></iron-meta>
-    ...
-    this.$.meta.byKey('info').getAttribute('value');
-
-
-
-##&lt;iron-meta-query&gt;
-
-
-`iron-meta` is a generic element you can use for sharing information across the DOM tree.
-It uses [monostate pattern](http://c2.com/cgi/wiki?MonostatePattern) such that any
-instance of iron-meta has access to the shared
-information. You can use `iron-meta` to share whatever you want (or create an extension
-[like x-meta] for enhancements).
-
-The `iron-meta` instances containing your actual data can be loaded in an import,
-or constructed in any way you see fit. The only requirement is that you create them
-before you try to access them.
-
-Examples:
-
-If I create an instance like this:
-
-    <iron-meta key="info" value="foo/bar"></iron-meta>
-
-Note that value="foo/bar" is the metadata I've defined. I could define more
-attributes or use child nodes to define additional metadata.
-
-Now I can access that element (and it's metadata) from any iron-meta instance
-via the byKey method, e.g.
-
-    meta.byKey('info').getAttribute('value');
-
-Pure imperative form would be like:
-
-    document.createElement('iron-meta').byKey('info').getAttribute('value');
-
-Or, in a Polymer element, you can include a meta in your template:
-
-    <iron-meta id="meta"></iron-meta>
-    ...
-    this.$.meta.byKey('info').getAttribute('value');
-
-
diff --git a/third_party/polymer/v1_0/components-chromium/iron-meta/hero.svg b/third_party/polymer/v1_0/components-chromium/iron-meta/hero.svg
deleted file mode 100644
index ea8548d..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-meta/hero.svg
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 225 126" enable-background="new 0 0 225 126" xml:space="preserve">
-<g id="background" display="none">
-	<rect display="inline" fill="#B0BEC5" width="225" height="126"/>
-</g>
-<g id="label">
-</g>
-<g id="art">
-	<circle cx="22" cy="85" r="4"/>
-	<circle cx="88" cy="98" r="4"/>
-	<path d="M87.5,100c-3.8-0.3-5.5-2.8-7-5c-1.4-2.1-2.7-3.9-5.5-4.2c-2.8-0.3-4.4,1.3-6.2,3.1c-1.9,1.9-4,4-7.8,3.7
-		c-3.8-0.3-5.5-2.8-7-5c-1.4-2.1-2.7-3.9-5.5-4.2c-2.8-0.3-4.4,1.3-6.2,3.1c-1.9,1.9-4,4-7.8,3.7c-3.8-0.3-5.5-2.8-7-5
-		c-1.4-2.1-2.7-3.9-5.5-4.2l0.2-2c3.8,0.3,5.5,2.8,7,5c1.4,2.1,2.7,3.9,5.5,4.2c2.8,0.3,4.4-1.3,6.2-3.1c1.9-1.9,4-4,7.8-3.7
-		c3.8,0.3,5.5,2.8,7,5c1.4,2.1,2.7,3.9,5.5,4.2c2.8,0.3,4.4-1.3,6.2-3.1c1.9-1.9,4-4,7.8-3.7c3.8,0.3,5.5,2.8,7,5
-		c1.4,2.1,2.7,3.9,5.5,4.2L87.5,100z"/>
-	<circle cx="96" cy="86" r="4"/>
-	<circle cx="162" cy="98" r="4"/>
-	<rect x="95.5" y="91" transform="matrix(0.9839 0.1789 -0.1789 0.9839 18.5382 -21.5923)" width="67.1" height="2"/>
-	<g>
-		<path d="M27,41.5l4.5,13.4l4.9-13.4h5.4v32h-4.4V61l0.4-13.4l-5.4,14.5h-2L25.6,48L26,61v12.5h-4.4v-32H27z"/>
-		<path d="M67.5,58.7H53.4V70h16.4v3.5H49v-32h20.6V45H53.4v10.2h14.2V58.7z"/>
-		<path d="M98.5,45H88.3v28.5h-4.4V45H73.6v-3.5h24.9V45z"/>
-		<path d="M116.2,65.3H105l-2.6,8.2h-4.5l10.9-32h3.8l10.6,32h-4.5L116.2,65.3z M106.2,61.6h8.9l-4.4-14.2L106.2,61.6z"/>
-	</g>
-	<g id="ic_x5F_add_x0D_">
-	</g>
-</g>
-<g id="Guides">
-</g>
-</svg>
diff --git a/third_party/polymer/v1_0/components-chromium/iron-meta/index.html b/third_party/polymer/v1_0/components-chromium/iron-meta/index.html
deleted file mode 100644
index c70dc6e5..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-meta/index.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE
-The complete set of authors may be found at http://polymer.github.io/AUTHORS
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS
--->
-<html>
-<head>
-
-  <meta charset="utf-8">
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  <title>iron-meta</title>
-
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-</head>
-<body>
-
-  <iron-component-page></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/.bower.json b/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/.bower.json
deleted file mode 100644
index b71ee8d..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/.bower.json
+++ /dev/null
@@ -1,47 +0,0 @@
-{
-  "name": "iron-overlay-behavior",
-  "version": "1.4.1",
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "description": "Provides a behavior for making an element an overlay",
-  "private": true,
-  "main": "iron-overlay-behavior.html",
-  "keywords": [
-    "web-components",
-    "polymer",
-    "behavior",
-    "overlay"
-  ],
-  "authors": [
-    "The Polymer Authors"
-  ],
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/iron-overlay-behavior.git"
-  },
-  "dependencies": {
-    "iron-a11y-keys-behavior": "PolymerElements/iron-a11y-keys-behavior#^1.0.0",
-    "iron-fit-behavior": "PolymerElements/iron-fit-behavior#^1.0.0",
-    "iron-resizable-behavior": "PolymerElements/iron-resizable-behavior#^1.0.0",
-    "polymer": "Polymer/polymer#^1.0.0"
-  },
-  "devDependencies": {
-    "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
-    "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
-    "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
-    "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
-    "paper-styles": "PolymerElements/paper-styles#^1.0.2",
-    "web-component-tester": "^4.0.0",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
-  },
-  "ignore": [],
-  "homepage": "https://github.com/PolymerElements/iron-overlay-behavior",
-  "_release": "1.4.1",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.4.1",
-    "commit": "4aefb7bc41aecef69022d6435133c430fc52d3ba"
-  },
-  "_source": "git://github.com/PolymerElements/iron-overlay-behavior.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/iron-overlay-behavior"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/.gitignore b/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/.gitignore
deleted file mode 100644
index 8d4ae25..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components
diff --git a/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/CONTRIBUTING.md
deleted file mode 100644
index f147978a..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/CONTRIBUTING.md
+++ /dev/null
@@ -1,77 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
-
-You can however override the jsbin link with one that's customized to this
-specific element:
-
-jsbin=https://jsbin.com/cagaye/edit?html,output
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, fixes #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/README.md b/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/README.md
deleted file mode 100644
index 2c5efa8..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/README.md
+++ /dev/null
@@ -1,71 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-iron-overlay-backdrop.html  iron-overlay-behavior.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
-The bot does some handling of markdown. Please file a bug if it does the wrong
-thing! https://github.com/PolymerLabs/tedium/issues
-
--->
-
-[![Build status](https://travis-ci.org/PolymerElements/iron-overlay-behavior.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-overlay-behavior)
-
-_[Demo and API docs](https://elements.polymer-project.org/elements/iron-overlay-behavior)_
-
-
-##&lt;iron-overlay-backdrop&gt;
-
-`iron-overlay-backdrop` is a backdrop used by `Polymer.IronOverlayBehavior`. It should be a
-singleton.
-
-### Styling
-
-The following custom properties and mixins are available for styling.
-
-| Custom property | Description | Default |
-| --- | --- | --- |
-| `--iron-overlay-backdrop-background-color` | Backdrop background color | #000 |
-| `--iron-overlay-backdrop-opacity` | Backdrop opacity | 0.6 |
-| `--iron-overlay-backdrop` | Mixin applied to `iron-overlay-backdrop`. | {} |
-| `--iron-overlay-backdrop-opened` | Mixin applied to `iron-overlay-backdrop` when it is displayed | {} |
-
-
-
-##Polymer.IronOverlayBehavior
-
-Use `Polymer.IronOverlayBehavior` to implement an element that can be hidden or shown, and displays
-on top of other content. It includes an optional backdrop, and can be used to implement a variety
-of UI controls including dialogs and drop downs. Multiple overlays may be displayed at once.
-
-### Closing and canceling
-
-A dialog may be hidden by closing or canceling. The difference between close and cancel is user
-intent. Closing generally implies that the user acknowledged the content on the overlay. By default,
-it will cancel whenever the user taps outside it or presses the escape key. This behavior is
-configurable with the `no-cancel-on-esc-key` and the `no-cancel-on-outside-click` properties.
-`close()` should be called explicitly by the implementer when the user interacts with a control
-in the overlay element. When the dialog is canceled, the overlay fires an 'iron-overlay-canceled'
-event. Call `preventDefault` on this event to prevent the overlay from closing.
-
-### Positioning
-
-By default the element is sized and positioned to fit and centered inside the window. You can
-position and size it manually using CSS. See `Polymer.IronFitBehavior`.
-
-### Backdrop
-
-Set the `with-backdrop` attribute to display a backdrop behind the overlay. The backdrop is
-appended to `<body>` and is of type `<iron-overlay-backdrop>`. See its doc page for styling
-options.
-
-### Limitations
-
-The element is styled to appear on top of other content by setting its `z-index` property. You
-must ensure no element has a stacking context with a higher `z-index` than its parent stacking
-context. You should place this element as a child of `<body>` whenever possible.
-
-
diff --git a/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/index.html b/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/index.html
deleted file mode 100644
index d69e3044..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/index.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-<html>
-<head>
-
-  <meta charset="utf-8">
-  <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
-
-  <title>iron-overlay-behavior</title>
-
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-
-  <link rel="import" href="../polymer/polymer.html">
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-</head>
-<body>
-
-  <iron-component-page></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/iron-pages/.bower.json b/third_party/polymer/v1_0/components-chromium/iron-pages/.bower.json
deleted file mode 100644
index 17fa616a..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-pages/.bower.json
+++ /dev/null
@@ -1,44 +0,0 @@
-{
-  "name": "iron-pages",
-  "version": "1.0.7",
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "description": "Organizes a set of pages and shows one at a time",
-  "main": "iron-pages.html",
-  "private": true,
-  "authors": [
-    "The Polymer Authors"
-  ],
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/iron-pages.git"
-  },
-  "keywords": [
-    "web-components",
-    "polymer",
-    "container"
-  ],
-  "dependencies": {
-    "iron-resizable-behavior": "polymerelements/iron-resizable-behavior#^1.0.0",
-    "iron-selector": "polymerelements/iron-selector#^1.0.0",
-    "polymer": "Polymer/polymer#^1.1.0"
-  },
-  "devDependencies": {
-    "iron-component-page": "polymerelements/iron-component-page#^1.0.0",
-    "iron-demo-helpers": "polymerelements/iron-demo-helpers#^1.0.0",
-    "paper-styles": "polymerelements/paper-styles#^1.0.2",
-    "test-fixture": "polymerelements/test-fixture#^1.0.0",
-    "web-component-tester": "^4.0.0",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
-  },
-  "ignore": [],
-  "homepage": "https://github.com/PolymerElements/iron-pages",
-  "_release": "1.0.7",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.0.7",
-    "commit": "357acb8508da5093b22887a85cb785919c20cfde"
-  },
-  "_source": "git://github.com/PolymerElements/iron-pages.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/iron-pages"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/iron-pages/.gitignore b/third_party/polymer/v1_0/components-chromium/iron-pages/.gitignore
deleted file mode 100644
index 8d4ae25..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-pages/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components
diff --git a/third_party/polymer/v1_0/components-chromium/iron-pages/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/iron-pages/CONTRIBUTING.md
deleted file mode 100644
index 7b101415..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-pages/CONTRIBUTING.md
+++ /dev/null
@@ -1,72 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [http://jsbin.com/cagaye](http://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/iron-pages/README.md b/third_party/polymer/v1_0/components-chromium/iron-pages/README.md
deleted file mode 100644
index fed222d..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-pages/README.md
+++ /dev/null
@@ -1,42 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-iron-pages.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
-The bot does some handling of markdown. Please file a bug if it does the wrong
-thing! https://github.com/PolymerLabs/tedium/issues
-
--->
-
-[![Build Status](https://travis-ci.org/PolymerElements/iron-pages.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-pages)
-
-_[Demo and API Docs](https://elements.polymer-project.org/elements/iron-pages)_
-
-
-##&lt;iron-pages&gt;
-
-`iron-pages` is used to select one of its children to show. One use is to cycle through a list of
-children "pages".
-
-Example:
-
-```html
-<iron-pages selected="0">
-  <div>One</div>
-  <div>Two</div>
-  <div>Three</div>
-</iron-pages>
-
-<script>
-  document.addEventListener('click', function(e) {
-    var pages = document.querySelector('iron-pages');
-    pages.selectNext();
-  });
-</script>
-```
-
-
diff --git a/third_party/polymer/v1_0/components-chromium/iron-pages/hero.svg b/third_party/polymer/v1_0/components-chromium/iron-pages/hero.svg
deleted file mode 100644
index fa12783..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-pages/hero.svg
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 225 126" enable-background="new 0 0 225 126" xml:space="preserve">
-<g id="background" display="none">
-	<rect display="inline" fill="#B0BEC5" width="225" height="126"/>
-</g>
-<g id="label">
-</g>
-<g id="art">
-	<path d="M143.3,73.6H51.7V26.7h91.6V73.6z M53.7,71.6h87.6V28.7H53.7V71.6z"/>
-	<path d="M158.3,85.4H66.7V38.6h91.6V85.4z M68.7,83.4h87.6V40.6H68.7V83.4z"/>
-	<path d="M172,99H80.4V52.1H172V99z M82.4,97H170V54.1H82.4V97z"/>
-	<circle cx="53" cy="28" r="4"/>
-	<circle cx="171" cy="98" r="4"/>
-	<g id="ic_x5F_add_x0D_">
-	</g>
-</g>
-<g id="Guides">
-</g>
-</svg>
diff --git a/third_party/polymer/v1_0/components-chromium/iron-pages/index.html b/third_party/polymer/v1_0/components-chromium/iron-pages/index.html
deleted file mode 100644
index 67ae088..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-pages/index.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-
-<html>
-<head>
-  <title>iron-pages</title>
-  <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-</head>
-<body>
-
-  <iron-component-page></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/iron-range-behavior/.bower.json b/third_party/polymer/v1_0/components-chromium/iron-range-behavior/.bower.json
deleted file mode 100644
index cb6b1b3..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-range-behavior/.bower.json
+++ /dev/null
@@ -1,40 +0,0 @@
-{
-  "name": "iron-range-behavior",
-  "version": "1.0.4",
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "description": "Provides a behavior for something with a minimum and maximum value",
-  "authors": "The Polymer Authors",
-  "keywords": [
-    "web-components",
-    "polymer",
-    "behavior"
-  ],
-  "main": [
-    "iron-range-behavior.html"
-  ],
-  "private": true,
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/iron-range-behavior.git"
-  },
-  "dependencies": {
-    "polymer": "Polymer/polymer#^1.0.0"
-  },
-  "devDependencies": {
-    "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
-    "iron-input": "PolymerElements/iron-input#^1.0.0",
-    "test-fixture": "PolymerElements/test-fixture#^1.0.0",
-    "web-component-tester": "*",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
-  },
-  "homepage": "https://github.com/PolymerElements/iron-range-behavior",
-  "_release": "1.0.4",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.0.4",
-    "commit": "71774a7d8a8c377496bfe05e60b754e91216e0b9"
-  },
-  "_source": "git://github.com/PolymerElements/iron-range-behavior.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/iron-range-behavior"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/iron-range-behavior/.gitignore b/third_party/polymer/v1_0/components-chromium/iron-range-behavior/.gitignore
deleted file mode 100644
index 8d4ae25..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-range-behavior/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components
diff --git a/third_party/polymer/v1_0/components-chromium/iron-range-behavior/README.md b/third_party/polymer/v1_0/components-chromium/iron-range-behavior/README.md
deleted file mode 100644
index 8d523bc..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-range-behavior/README.md
+++ /dev/null
@@ -1,4 +0,0 @@
-iron-range-behavior
-==========
-
-`Polymer.IronRangeBehavior` provides the behavior for something with a minimum to maximum range.
diff --git a/third_party/polymer/v1_0/components-chromium/iron-range-behavior/index.html b/third_party/polymer/v1_0/components-chromium/iron-range-behavior/index.html
deleted file mode 100644
index cc77788..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-range-behavior/index.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-<html>
-<head>
-  <meta charset="utf-8">
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-</head>
-<body>
-
-  <iron-component-page></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/iron-resizable-behavior/.bower.json b/third_party/polymer/v1_0/components-chromium/iron-resizable-behavior/.bower.json
deleted file mode 100644
index 2e765b93..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-resizable-behavior/.bower.json
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "name": "iron-resizable-behavior",
-  "version": "1.0.3",
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "description": "Coordinates the flow of resizeable elements",
-  "private": true,
-  "main": "iron-resizable-behavior.html",
-  "authors": [
-    "The Polymer Authors"
-  ],
-  "keywords": [
-    "web-components",
-    "polymer",
-    "iron",
-    "behavior"
-  ],
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/iron-resizable-behavior.git"
-  },
-  "dependencies": {
-    "polymer": "Polymer/polymer#^1.0.0"
-  },
-  "devDependencies": {
-    "iron-component-page": "polymerelements/iron-component-page#^1.0.0",
-    "test-fixture": "polymerelements/test-fixture#^1.0.0",
-    "web-component-tester": "^4.0.0",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
-  },
-  "ignore": [],
-  "homepage": "https://github.com/PolymerElements/iron-resizable-behavior",
-  "_release": "1.0.3",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.0.3",
-    "commit": "dda1df6aaf452aedf3e52ff0cf69e72439452216"
-  },
-  "_source": "git://github.com/PolymerElements/iron-resizable-behavior.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/iron-resizable-behavior"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/iron-resizable-behavior/.gitignore b/third_party/polymer/v1_0/components-chromium/iron-resizable-behavior/.gitignore
deleted file mode 100644
index 8d4ae25..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-resizable-behavior/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components
diff --git a/third_party/polymer/v1_0/components-chromium/iron-resizable-behavior/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/iron-resizable-behavior/CONTRIBUTING.md
deleted file mode 100644
index f147978a..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-resizable-behavior/CONTRIBUTING.md
+++ /dev/null
@@ -1,77 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
-
-You can however override the jsbin link with one that's customized to this
-specific element:
-
-jsbin=https://jsbin.com/cagaye/edit?html,output
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, fixes #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/iron-resizable-behavior/README.md b/third_party/polymer/v1_0/components-chromium/iron-resizable-behavior/README.md
deleted file mode 100644
index 2f37628..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-resizable-behavior/README.md
+++ /dev/null
@@ -1,36 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-iron-resizable-behavior.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
-The bot does some handling of markdown. Please file a bug if it does the wrong
-thing! https://github.com/PolymerLabs/tedium/issues
-
--->
-
-[![Build status](https://travis-ci.org/PolymerElements/iron-resizable-behavior.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-resizable-behavior)
-
-_[Demo and API docs](https://elements.polymer-project.org/elements/iron-resizable-behavior)_
-
-
-##Polymer.IronResizableBehavior
-
-`IronResizableBehavior` is a behavior that can be used in Polymer elements to
-coordinate the flow of resize events between "resizers" (elements that control the
-size or hidden state of their children) and "resizables" (elements that need to be
-notified when they are resized or un-hidden by their parents in order to take
-action on their new measurements).
-
-Elements that perform measurement should add the `IronResizableBehavior` behavior to
-their element definition and listen for the `iron-resize` event on themselves.
-This event will be fired when they become showing after having been hidden,
-when they are resized explicitly by another resizable, or when the window has been
-resized.
-
-Note, the `iron-resize` event is non-bubbling.
-
-
diff --git a/third_party/polymer/v1_0/components-chromium/iron-resizable-behavior/index.html b/third_party/polymer/v1_0/components-chromium/iron-resizable-behavior/index.html
deleted file mode 100644
index b9b8809..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-resizable-behavior/index.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-
-<html>
-<head>
-
-  <title>iron-resizable-behavior</title>
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-</head>
-<body>
-
-  <iron-component-page></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/iron-scroll-target-behavior/.bower.json b/third_party/polymer/v1_0/components-chromium/iron-scroll-target-behavior/.bower.json
deleted file mode 100644
index 47f79f2..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-scroll-target-behavior/.bower.json
+++ /dev/null
@@ -1,40 +0,0 @@
-{
-  "name": "iron-scroll-target-behavior",
-  "version": "1.0.4",
-  "description": "Allows to define a scroller target",
-  "private": true,
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "main": "iron-scroll-target-behavior.html",
-  "authors": [
-    "The Polymer Authors"
-  ],
-  "keywords": [
-    "web-components",
-    "polymer",
-    "scroll"
-  ],
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/iron-scroll-target-behavior.git"
-  },
-  "homepage": "https://github.com/PolymerElements/iron-scroll-target-behavior",
-  "ignore": [],
-  "dependencies": {
-    "polymer": "Polymer/polymer#^1.0.0"
-  },
-  "devDependencies": {
-    "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
-    "iron-test-helpers": "polymerelements/iron-test-helpers#^1.0.0",
-    "web-component-tester": "^4.0.0",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
-  },
-  "_release": "1.0.4",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.0.4",
-    "commit": "77870593ace034696a83e0190914861633196e6d"
-  },
-  "_source": "git://github.com/PolymerElements/iron-scroll-target-behavior.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/iron-scroll-target-behavior"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/iron-scroll-target-behavior/.gitignore b/third_party/polymer/v1_0/components-chromium/iron-scroll-target-behavior/.gitignore
deleted file mode 100644
index 1eb1fa5..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-scroll-target-behavior/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-bower_components
-
diff --git a/third_party/polymer/v1_0/components-chromium/iron-scroll-target-behavior/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/iron-scroll-target-behavior/CONTRIBUTING.md
deleted file mode 100644
index f147978a..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-scroll-target-behavior/CONTRIBUTING.md
+++ /dev/null
@@ -1,77 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
-
-You can however override the jsbin link with one that's customized to this
-specific element:
-
-jsbin=https://jsbin.com/cagaye/edit?html,output
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, fixes #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/iron-scroll-target-behavior/README.md b/third_party/polymer/v1_0/components-chromium/iron-scroll-target-behavior/README.md
deleted file mode 100644
index d7861f80..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-scroll-target-behavior/README.md
+++ /dev/null
@@ -1,28 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-iron-scroll-target-behavior.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
-The bot does some handling of markdown. Please file a bug if it does the wrong
-thing! https://github.com/PolymerLabs/tedium/issues
-
--->
-
-[![Build status](https://travis-ci.org/PolymerElements/iron-scroll-target-behavior.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-scroll-target-behavior)
-
-_[Demo and API docs](https://elements.polymer-project.org/elements/iron-scroll-target-behavior)_
-
-
-##Polymer.IronScrollTargetBehavior
-
-`Polymer.IronScrollTargetBehavior` allows an element to respond to scroll events from a
-designated scroll target.
-
-Elements that consume this behavior can override the `_scrollHandler`
-method to add logic on the scroll event.
-
-
diff --git a/third_party/polymer/v1_0/components-chromium/iron-scroll-target-behavior/index.html b/third_party/polymer/v1_0/components-chromium/iron-scroll-target-behavior/index.html
deleted file mode 100644
index e48685a..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-scroll-target-behavior/index.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-
-<html>
-<head>
-
-  <title>iron-scroll-target-behavior</title>
-  <meta charset="utf-8">
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-</head>
-<body>
-
-  <iron-component-page></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/iron-selector/.bower.json b/third_party/polymer/v1_0/components-chromium/iron-selector/.bower.json
deleted file mode 100644
index fedc850..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-selector/.bower.json
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-  "name": "iron-selector",
-  "version": "1.2.4",
-  "description": "Manages a set of elements that can be selected",
-  "private": true,
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "main": "iron-selector.html",
-  "authors": [
-    "The Polymer Authors"
-  ],
-  "keywords": [
-    "web-components",
-    "polymer",
-    "selector"
-  ],
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/iron-selector.git"
-  },
-  "homepage": "https://github.com/PolymerElements/iron-selector",
-  "ignore": [],
-  "dependencies": {
-    "polymer": "Polymer/polymer#^1.2.0"
-  },
-  "devDependencies": {
-    "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
-    "iron-test-helpers": "polymerelements/iron-test-helpers#^1.0.0",
-    "paper-styles": "PolymerElements/paper-styles#^1.0.4",
-    "test-fixture": "PolymerElements/test-fixture#^1.0.0",
-    "web-component-tester": "^4.0.0",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
-  },
-  "_release": "1.2.4",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.2.4",
-    "commit": "1ee4e2e11a9e5118320987d93fc2c03ae9a489f4"
-  },
-  "_source": "git://github.com/PolymerElements/iron-selector.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/iron-selector"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/iron-selector/.gitignore b/third_party/polymer/v1_0/components-chromium/iron-selector/.gitignore
deleted file mode 100644
index b13058c..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-selector/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-bower_components
-.DS_Store
diff --git a/third_party/polymer/v1_0/components-chromium/iron-selector/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/iron-selector/CONTRIBUTING.md
deleted file mode 100644
index f147978a..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-selector/CONTRIBUTING.md
+++ /dev/null
@@ -1,77 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
-
-You can however override the jsbin link with one that's customized to this
-specific element:
-
-jsbin=https://jsbin.com/cagaye/edit?html,output
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, fixes #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/iron-selector/README.md b/third_party/polymer/v1_0/components-chromium/iron-selector/README.md
deleted file mode 100644
index 237133b7..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-selector/README.md
+++ /dev/null
@@ -1,74 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-iron-multi-selectable.html  iron-selectable.html  iron-selector.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
-The bot does some handling of markdown. Please file a bug if it does the wrong
-thing! https://github.com/PolymerLabs/tedium/issues
-
--->
-
-[![Build status](https://travis-ci.org/PolymerElements/iron-selector.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-selector)
-
-_[Demo and API docs](https://elements.polymer-project.org/elements/iron-selector)_
-
-
-##&lt;iron-selector&gt;
-
-  `iron-selector` is an element which can be used to manage a list of elements
-  that can be selected.  Tapping on the item will make the item selected.  The `selected` indicates
-  which item is being selected.  The default is to use the index of the item.
-
-  Example:
-
-```html
-  <iron-selector selected="0">
-    <div>Item 1</div>
-    <div>Item 2</div>
-    <div>Item 3</div>
-  </iron-selector>
-```
-
-  If you want to use the attribute value of an element for `selected` instead of the index,
-  set `attrForSelected` to the name of the attribute.  For example, if you want to select item by
-  `name`, set `attrForSelected` to `name`.
-
-  Example:
-
-```html
-  <iron-selector attr-for-selected="name" selected="foo">
-    <div name="foo">Foo</div>
-    <div name="bar">Bar</div>
-    <div name="zot">Zot</div>
-  </iron-selector>
-```
-
-  `iron-selector` is not styled. Use the `iron-selected` CSS class to style the selected element.
-
-  Example:
-
-```html
-  <style>
-    .iron-selected {
-      background: #eee;
-    }
-  </style>
-
-  ...
-
-  <iron-selector selected="0">
-    <div>Item 1</div>
-    <div>Item 2</div>
-    <div>Item 3</div>
-  </iron-selector>
-```
-
-
-
-<!-- No docs for Polymer.IronMultiSelectableBehavior found. -->
-
-<!-- No docs for Polymer.IronSelectableBehavior found. -->
diff --git a/third_party/polymer/v1_0/components-chromium/iron-selector/index.html b/third_party/polymer/v1_0/components-chromium/iron-selector/index.html
deleted file mode 100644
index 741693c..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-selector/index.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-
-<html>
-<head>
-
-  <title>iron-selector</title>
-  <meta charset="utf-8">
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-</head>
-<body>
-
-  <iron-component-page></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/iron-test-helpers/.bower.json b/third_party/polymer/v1_0/components-chromium/iron-test-helpers/.bower.json
deleted file mode 100644
index 5a77596..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-test-helpers/.bower.json
+++ /dev/null
@@ -1,40 +0,0 @@
-{
-  "name": "iron-test-helpers",
-  "version": "1.2.3",
-  "authors": [
-    "The Polymer Authors"
-  ],
-  "description": "Utility classes to help make testing easier",
-  "keywords": [
-    "web-components",
-    "web-component",
-    "polymer",
-    "test"
-  ],
-  "private": true,
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/iron-test-helpers"
-  },
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "homepage": "https://github.com/PolymerElements/iron-test-helpers",
-  "ignore": [],
-  "dependencies": {
-    "polymer": "Polymer/polymer#^1.0.0"
-  },
-  "devDependencies": {
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
-    "web-component-tester": "^4.0.0",
-    "paper-button": "^1.0.0"
-  },
-  "main": "iron-test-helpers.html",
-  "_release": "1.2.3",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.2.3",
-    "commit": "5a35c20860d7e476bf6dfd85fd1ef20ef05b21a9"
-  },
-  "_source": "git://github.com/PolymerElements/iron-test-helpers.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/iron-test-helpers"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/iron-test-helpers/.gitignore b/third_party/polymer/v1_0/components-chromium/iron-test-helpers/.gitignore
deleted file mode 100644
index 8d4ae25..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-test-helpers/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components
diff --git a/third_party/polymer/v1_0/components-chromium/iron-test-helpers/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/iron-test-helpers/CONTRIBUTING.md
deleted file mode 100644
index f147978a..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-test-helpers/CONTRIBUTING.md
+++ /dev/null
@@ -1,77 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
-
-You can however override the jsbin link with one that's customized to this
-specific element:
-
-jsbin=https://jsbin.com/cagaye/edit?html,output
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, fixes #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/iron-test-helpers/README.md b/third_party/polymer/v1_0/components-chromium/iron-test-helpers/README.md
deleted file mode 100644
index cb2d8a2..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-test-helpers/README.md
+++ /dev/null
@@ -1,27 +0,0 @@
-[![Build status](https://travis-ci.org/PolymerElements/iron-test-helpers.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-test-helpers)
-
-# iron-test-helpers
-
-A set of utility classes to make testing easier. For more details on the methods
-available, please check the documentation of `mock-interactions.js` and
-`test-helpers.js`
-
-## Mock Interactions
-
-This is a set of methods to simulate mouse or keyboard interaction with an element. Include `mock-interactions.js` and then use them like so:
-
-```javascript
-test('can be triggered with space', function(done) {
-  button.addEventListener('keydown', function() {
-    done();
-  });
-  MockInteractions.pressSpace(button);
-});
-
-test('can be clicked', function(done) {
-  button.addEventListener('click', function() {
-    done();
-  });
-  MockInteractions.tap(button);
-});
-```
diff --git a/third_party/polymer/v1_0/components-chromium/iron-validatable-behavior/.bower.json b/third_party/polymer/v1_0/components-chromium/iron-validatable-behavior/.bower.json
deleted file mode 100644
index 62842a49..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-validatable-behavior/.bower.json
+++ /dev/null
@@ -1,44 +0,0 @@
-{
-  "name": "iron-validatable-behavior",
-  "version": "1.0.5",
-  "description": "Provides a behavior for an element that validates user input",
-  "authors": "The Polymer Authors",
-  "keywords": [
-    "web-components",
-    "polymer",
-    "iron",
-    "behavior"
-  ],
-  "main": [
-    "iron-validatable-behavior.html"
-  ],
-  "private": true,
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/iron-validatable-behavior.git"
-  },
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "homepage": "https://github.com/PolymerElements/iron-validatable-behavior",
-  "ignore": [],
-  "dependencies": {
-    "iron-meta": "PolymerElements/iron-meta#^1.0.0",
-    "polymer": "Polymer/polymer#^1.0.0"
-  },
-  "devDependencies": {
-    "paper-styles": "PolymerElements/paper-styles#^1.0.4",
-    "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
-    "iron-validator-behavior": "PolymerElements/iron-validator-behavior#^1.0.0",
-    "test-fixture": "PolymerElements/test-fixture#^1.0.0",
-    "web-component-tester": "*",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
-  },
-  "_release": "1.0.5",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.0.5",
-    "commit": "c1334b835892b3d7a329a8e6b8741d4be3a8d99c"
-  },
-  "_source": "git://github.com/PolymerElements/iron-validatable-behavior.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/iron-validatable-behavior"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/iron-validatable-behavior/.gitignore b/third_party/polymer/v1_0/components-chromium/iron-validatable-behavior/.gitignore
deleted file mode 100644
index 8d4ae25..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-validatable-behavior/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components
diff --git a/third_party/polymer/v1_0/components-chromium/iron-validatable-behavior/README.md b/third_party/polymer/v1_0/components-chromium/iron-validatable-behavior/README.md
deleted file mode 100644
index 48f7fb2d..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-validatable-behavior/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# iron-validatable-behavior
-Implements an element validated with Polymer.IronValidatorBehavior
-
diff --git a/third_party/polymer/v1_0/components-chromium/iron-validatable-behavior/index.html b/third_party/polymer/v1_0/components-chromium/iron-validatable-behavior/index.html
deleted file mode 100644
index cfaa5b17..0000000
--- a/third_party/polymer/v1_0/components-chromium/iron-validatable-behavior/index.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-<html>
-<head>
-
-  <meta charset="utf-8">
-  <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
-
-  <title>iron-validatable-behavior</title>
-
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-
-  <link rel="import" href="../polymer/polymer.html">
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-</head>
-<body>
-
-  <iron-component-page></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/neon-animation/.bower.json b/third_party/polymer/v1_0/components-chromium/neon-animation/.bower.json
deleted file mode 100644
index 73f7961..0000000
--- a/third_party/polymer/v1_0/components-chromium/neon-animation/.bower.json
+++ /dev/null
@@ -1,61 +0,0 @@
-{
-  "name": "neon-animation",
-  "description": "A system for animating Polymer-based web components",
-  "version": "1.1.0",
-  "authors": [
-    "The Polymer Authors"
-  ],
-  "keywords": [
-    "web-components",
-    "web-component",
-    "polymer",
-    "web-animations"
-  ],
-  "main": [
-    "neon-animated-pages.html",
-    "neon-animatable-behavior.html",
-    "neon-animation-behavior.html",
-    "neon-animation-runner-behavior.html",
-    "neon-shared-element-animatable-behavior.html",
-    "neon-shared-element-animation-behavior.html",
-    "neon-animatable.html",
-    "neon-animations.html"
-  ],
-  "private": true,
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/neon-animation"
-  },
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "homepage": "https://github.com/PolymerElements/neon-animation",
-  "ignore": [],
-  "dependencies": {
-    "polymer": "Polymer/polymer#^1.1.0",
-    "iron-meta": "PolymerElements/iron-meta#^1.0.0",
-    "iron-resizable-behavior": "PolymerElements/iron-resizable-behavior#^1.0.0",
-    "iron-selector": "PolymerElements/iron-selector#^1.0.0",
-    "web-animations-js": "web-animations/web-animations-js#2.1.3"
-  },
-  "devDependencies": {
-    "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
-    "paper-toolbar": "PolymerElements/paper-toolbar#^1.0.0",
-    "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
-    "test-fixture": "PolymerElements/test-fixture#^1.0.0",
-    "web-component-tester": "^4.0.0",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
-    "paper-item": "PolymerElements/paper-item#^1.0.0",
-    "paper-styles": "PolymerElements/paper-styles#^1.0.0",
-    "iron-icon": "PolymerElements/iron-icon#^1.0.0",
-    "iron-icons": "PolymerElements/iron-icons#^1.0.0",
-    "paper-icon-button": "PolymerElements/paper-icon-button#^1.0.0"
-  },
-  "_release": "1.1.0",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.1.0",
-    "commit": "564e0dc92724f2bc0bf0f76bf2ac392d4905b2ff"
-  },
-  "_source": "git://github.com/PolymerElements/neon-animation.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/neon-animation"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/neon-animation/.gitignore b/third_party/polymer/v1_0/components-chromium/neon-animation/.gitignore
deleted file mode 100644
index 8d4ae25..0000000
--- a/third_party/polymer/v1_0/components-chromium/neon-animation/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components
diff --git a/third_party/polymer/v1_0/components-chromium/neon-animation/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/neon-animation/CONTRIBUTING.md
deleted file mode 100644
index 7b101415..0000000
--- a/third_party/polymer/v1_0/components-chromium/neon-animation/CONTRIBUTING.md
+++ /dev/null
@@ -1,72 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [http://jsbin.com/cagaye](http://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/neon-animation/README.md b/third_party/polymer/v1_0/components-chromium/neon-animation/README.md
deleted file mode 100644
index 811e81a4..0000000
--- a/third_party/polymer/v1_0/components-chromium/neon-animation/README.md
+++ /dev/null
@@ -1,306 +0,0 @@
-# neon-animation
-
-`neon-animation` is a suite of elements and behaviors to implement pluggable animated transitions for Polymer Elements using [Web Animations](https://w3c.github.io/web-animations/).
-
-*Warning: The API may change.*
-
-* [A basic animatable element](#basic)
-* [Animation configuration](#configuration)
-  * [Animation types](#configuration-types)
-  * [Configuration properties](#configuration-properties)
-  * [Using multiple animations](#configuration-multiple)
-  * [Running animations encapsulated in children nodes](#configuration-encapsulation)
-* [Page transitions](#page-transitions)
-  * [Shared element animations](#shared-element)
-  * [Declarative page transitions](#declarative-page)
-* [Included animations](#animations)
-* [Demos](#demos)
-
-<a name="basic"></a>
-## A basic animatable element
-
-Elements that can be animated should implement the `Polymer.NeonAnimatableBehavior` behavior, or `Polymer.NeonAnimationRunnerBehavior` if they're also responsible for running an animation.
-
-```js
-Polymer({
-  is: 'my-animatable',
-  behaviors: [
-    Polymer.NeonAnimationRunnerBehavior
-  ],
-  properties: {
-    animationConfig: {
-      value: function() {
-        return {
-          // provided by neon-animation/animations/scale-down-animation.html
-          name: 'scale-down-animation',
-          node: this
-        }
-      }
-    }
-  },
-  listeners: {
-    // this event is fired when the animation finishes
-    'neon-animation-finish': '_onNeonAnimationFinish'
-  },
-  animate: function() {
-    // run scale-down-animation
-    this.playAnimation();
-  },
-  _onNeonAnimationFinish: function() {
-    console.log('animation done!');
-  }
-});
-```
-
-[Live demo](http://morethanreal.github.io/neon-animation-demo/bower_components/neon-animation/demo/doc/basic.html)
-
-<a name="configuration"></a>
-## Animation configuration
-
-<a name="configuration-types"></a>
-### Animation types
-
-An element might run different animations, for example it might do something different when it enters the view and when it exits from view. You can set the `animationConfig` property to a map from an animation type to configuration.
-
-```js
-Polymer({
-  is: 'my-dialog',
-  behaviors: [
-    Polymer.NeonAnimationRunnerBehavior
-  ],
-  properties: {
-    opened: {
-      type: Boolean
-    },
-    animationConfig: {
-      value: function() {
-        return {
-          'entry': {
-            // provided by neon-animation/animations/scale-up-animation.html
-            name: 'scale-up-animation',
-            node: this
-          },
-          'exit': {
-            // provided by neon-animation/animations/fade-out-animation.html
-            name: 'fade-out-animation',
-            node: this
-          }
-        }
-      }
-    }
-  },
-  listeners: {
-    'neon-animation-finish': '_onNeonAnimationFinish'
-  },
-  show: function() {
-    this.opened = true;
-    this.style.display = 'inline-block';
-    // run scale-up-animation
-    this.playAnimation('entry');
-  },
-  hide: function() {
-    this.opened = false;
-    // run fade-out-animation
-    this.playAnimation('exit');
-  },
-  _onNeonAnimationFinish: function() {
-    if (!this.opened) {
-      this.style.display = 'none';
-    }
-  }
-});
-```
-
-[Live demo](http://morethanreal.github.io/neon-animation-demo/bower_components/neon-animation/demo/doc/types.html)
-
-You can also use the convenience properties `entryAnimation` and `exitAnimation` to set `entry` and `exit` animations:
-
-```js
-properties: {
-  entryAnimation: {
-    value: 'scale-up-animation'
-  },
-  exitAnimation: {
-    value: 'fade-out-animation'
-  }
-}
-```
-
-<a name="configuration-properties"></a>
-### Configuration properties
-
-You can pass additional parameters to configure an animation in the animation configuration object.
-All animations should accept the following properties:
-
- * `name`: The name of an animation, ie. an element implementing `Polymer.NeonAnimationBehavior`.
- * `node`: The target node to apply the animation to. Defaults to `this`.
- * `timing`: Timing properties to use in this animation. They match the [Web Animations Animation Effect Timing interface](https://w3c.github.io/web-animations/#the-animationeffecttiming-interface). The
- properties include the following:
-     * `duration`: The duration of the animation in milliseconds.
-     * `delay`: The delay before the start of the animation in milliseconds.
-     * `easing`: A timing function for the animation. Matches the CSS timing function values.
-
-Animations may define additional configuration properties and they are listed in their documentation.
-
-<a name="configuration-multiple"></a>
-### Using multiple animations
-
-Set the animation configuration to an array to combine animations, like this:
-
-```js
-animationConfig: {
-  value: function() {
-    return {
-      // fade-in-animation is run with a 50ms delay from slide-down-animation
-      'entry': [{
-        name: 'slide-down-animation',
-        node: this
-      }, {
-        name: 'fade-in-animation',
-        node: this,
-        timing: {delay: 50}
-      }]
-    }
-  }
-}
-```
-
-<a name="configuration-encapsulation"></a>
-### Running animations encapsulated in children nodes
-
-You can include animations in the configuration that are encapsulated in a child element that implement `Polymer.NeonAnimatableBehavior` with the `animatable` property.
-
-```js
-animationConfig: {
-  value: function() {
-    return {
-      // run fade-in-animation on this, and the entry animation on this.$.myAnimatable
-      'entry': [
-        {name: 'fade-in-animation', node: this},
-        {animatable: this.$.myAnimatable, type: 'entry'}
-      ]
-    }
-  }
-}
-```
-
-<a name="page-transitions"></a>
-## Page transitions
-
-*The artist formerly known as `<core-animated-pages>`*
-
-The `neon-animated-pages` element manages a set of pages to switch between, and runs animations between the page transitions. It implements the `Polymer.IronSelectableBehavior` behavior. Each child node should implement `Polymer.NeonAnimatableBehavior` and define the `entry` and `exit` animations. During a page transition, the `entry` animation is run on the new page and the `exit` animation is run on the old page.
-
-<a name="shared-element"></a>
-### Shared element animations
-
-Shared element animations work on multiple nodes. For example, a "hero" animation is used during a page transition to make two elements from separate pages appear to animate as a single element. Shared element animation configurations have an `id` property that identify they belong in the same animation. Elements containing shared elements also have a `sharedElements` property defines a map from `id` to element, the element involved with the animation.
-
-In the incoming page:
-
-```js
-properties: {
-  animationConfig: {
-    value: function() {
-      return {
-        // the incoming page defines the 'entry' animation
-        'entry': {
-          name: 'hero-animation',
-          id: 'hero',
-          toPage: this
-        }
-      }
-    }
-  },
-  sharedElements: {
-    value: function() {
-      return {
-        'hero': this.$.hero
-      }
-    }
-  }
-}
-```
-
-In the outgoing page:
-
-```js
-properties: {
-  animationConfig: {
-    value: function() {
-      return {
-        // the outgoing page defines the 'exit' animation
-        'exit': {
-          name: 'hero-animation',
-          id: 'hero',
-          fromPage: this
-        }
-      }
-    }
-  },
-  sharedElements: {
-    value: function() {
-      return {
-        'hero': this.$.otherHero
-      }
-    }
-  }
-}
-```
-
-<a name="declarative-page"></a>
-### Declarative page transitions
-
-For convenience, if you define the `entry-animation` and `exit-animation` attributes on `<neon-animated-pages>`, those animations will apply for all page transitions.
-
-For example:
-
-```js
-<neon-animated-pages id="pages" class="flex" selected="[[selected]]" entry-animation="slide-from-right-animation" exit-animation="slide-left-animation">
-  <neon-animatable>1</neon-animatable>
-  <neon-animatable>2</neon-animatable>
-  <neon-animatable>3</neon-animatable>
-  <neon-animatable>4</neon-animatable>
-  <neon-animatable>5</neon-animatable>
-</neon-animated-pages>
-```
-
-The new page will slide in from the right, and the old page slide away to the left.
-
-<a name="animations"></a>
-## Included animations
-
-Single element animations:
-
- * `fade-in-animation` Animates opacity from `0` to `1`;
- * `fade-out-animation` Animates opacity from `1` to `0`;
- * `scale-down-animation` Animates transform from `scale(1)` to `scale(0)`;
- * `scale-up-animation` Animates transform from `scale(0)` to `scale(1)`;
- * `slide-down-animation` Animates transform from `translateY(-100%)` to `none`;
- * `slide-up-animation` Animates transform from `none` to `translateY(-100%)`;
- * `slide-from-top-animation` Animates transform from `translateY(-100%)` to `none`;
- * `slide-from-bottom-animation` Animates transform from `translateY(100%)` to `none`;
- * `slide-left-animation` Animates transform from `none` to `translateX(-100%)`;
- * `slide-right-animation` Animates transform from `none` to `translateX(100%)`;
- * `slide-from-left-animation` Animates transform from `translateX(-100%)` to `none`;
- * `slide-from-right-animation` Animates transform from `translateX(100%)` to `none`;
- * `transform-animation` Animates a custom transform.
-
-Note that there is a restriction that only one transform animation can be applied on the same element at a time. Use the custom `transform-animation` to combine transform properties.
-
-Shared element animations
-
- * `hero-animation` Animates an element such that it looks like it scales and transforms from another element.
- * `ripple-animation` Animates an element to full screen such that it looks like it ripples from another element.
-
-Group animations
- * `cascaded-animation` Applys an animation to an array of elements with a delay between each.
-
-<a name="demos"></a>
-## Demos
-
- * [Grid to full screen](http://morethanreal.github.io/neon-animation-demo/bower_components/neon-animation/demo/grid/index.html)
- * [Animation on load](http://morethanreal.github.io/neon-animation-demo/bower_components/neon-animation/demo/load/index.html)
- * [List item to detail](http://morethanreal.github.io/neon-animation-demo/bower_components/neon-animation/demo/list/index.html) (For narrow width)
- * [Dots to squares](http://morethanreal.github.io/neon-animation-demo/bower_components/neon-animation/demo/tiles/index.html)
- * [Declarative](http://morethanreal.github.io/neon-animation-demo/bower_components/neon-animation/demo/declarative/index.html)
diff --git a/third_party/polymer/v1_0/components-chromium/neon-animation/guides/neon-animation.md b/third_party/polymer/v1_0/components-chromium/neon-animation/guides/neon-animation.md
deleted file mode 100644
index ff0ddce..0000000
--- a/third_party/polymer/v1_0/components-chromium/neon-animation/guides/neon-animation.md
+++ /dev/null
@@ -1,315 +0,0 @@
----
-title: neon-animation
-summary: "A short guide to neon-animation and neon-animated-pages"
-tags: ['animation','core-animated-pages']
-elements: ['neon-animation','neon-animated-pages']
-updated: 2015-05-26
----
-
-# neon-animation
-
-`neon-animation` is a suite of elements and behaviors to implement pluggable animated transitions for Polymer Elements using [Web Animations](https://w3c.github.io/web-animations/).
-
-*Warning: The API may change.*
-
-* [A basic animatable element](#basic)
-* [Animation configuration](#configuration)
-  * [Animation types](#configuration-types)
-  * [Configuration properties](#configuration-properties)
-  * [Using multiple animations](#configuration-multiple)
-  * [Running animations encapsulated in children nodes](#configuration-encapsulation)
-* [Page transitions](#page-transitions)
-  * [Shared element animations](#shared-element)
-  * [Declarative page transitions](#declarative-page)
-* [Included animations](#animations)
-* [Demos](#demos)
-
-<a name="basic"></a>
-## A basic animatable element
-
-Elements that can be animated should implement the `Polymer.NeonAnimatableBehavior` behavior, or `Polymer.NeonAnimationRunnerBehavior` if they're also responsible for running an animation.
-
-```js
-Polymer({
-  is: 'my-animatable',
-  behaviors: [
-    Polymer.NeonAnimationRunnerBehavior
-  ],
-  properties: {
-    animationConfig: {
-      value: function() {
-        return {
-          // provided by neon-animation/animations/scale-down-animation.html
-          name: 'scale-down-animation',
-          node: this
-        }
-      }
-    }
-  },
-  listeners: {
-    // this event is fired when the animation finishes
-    'neon-animation-finish': '_onNeonAnimationFinish'
-  },
-  animate: function() {
-    // run scale-down-animation
-    this.playAnimation();
-  },
-  _onNeonAnimationFinish: function() {
-    console.log('animation done!');
-  }
-});
-```
-
-[Live demo](http://morethanreal.github.io/neon-animation-demo/bower_components/neon-animation/demo/doc/basic.html)
-
-<a name="configuration"></a>
-## Animation configuration
-
-<a name="configuration-types"></a>
-### Animation types
-
-An element might run different animations, for example it might do something different when it enters the view and when it exits from view. You can set the `animationConfig` property to a map from an animation type to configuration.
-
-```js
-Polymer({
-  is: 'my-dialog',
-  behaviors: [
-    Polymer.NeonAnimationRunnerBehavior
-  ],
-  properties: {
-    opened: {
-      type: Boolean
-    },
-    animationConfig: {
-      value: function() {
-        return {
-          'entry': {
-            // provided by neon-animation/animations/scale-up-animation.html
-            name: 'scale-up-animation',
-            node: this
-          },
-          'exit': {
-            // provided by neon-animation-animations/fade-out-animation.html
-            name: 'fade-out-animation',
-            node: this
-          }
-        }
-      }
-    }
-  },
-  listeners: {
-    'neon-animation-finish': '_onNeonAnimationFinish'
-  },
-  show: function() {
-    this.opened = true;
-    this.style.display = 'inline-block';
-    // run scale-up-animation
-    this.playAnimation('entry');
-  },
-  hide: function() {
-    this.opened = false;
-    // run fade-out-animation
-    this.playAnimation('fade-out-animation');
-  },
-  _onNeonAnimationFinish: function() {
-    if (!this.opened) {
-      this.style.display = 'none';
-    }
-  }
-});
-```
-
-[Live demo](http://morethanreal.github.io/neon-animation-demo/bower_components/neon-animation/demo/doc/types.html)
-
-You can also use the convenience properties `entryAnimation` and `exitAnimation` to set `entry` and `exit` animations:
-
-```js
-properties: {
-  entryAnimation: {
-    value: 'scale-up-animation'
-  },
-  exitAnimation: {
-    value: 'fade-out-animation'
-  }
-}
-```
-
-<a name="configuration-properties"></a>
-### Configuration properties
-
-You can pass additional parameters to configure an animation in the animation configuration object.
-All animations should accept the following properties:
-
- * `name`: The name of an animation, ie. an element implementing `Polymer.NeonAnimationBehavior`.
- * `node`: The target node to apply the animation to. Defaults to `this`.
- * `timing`: Timing properties to use in this animation. They match the [Web Animations Animation Effect Timing interface](https://w3c.github.io/web-animations/#the-animationeffecttiming-interface). The
- properties include the following:
-     * `duration`: The duration of the animation in milliseconds.
-     * `delay`: The delay before the start of the animation in milliseconds.
-     * `easing`: A timing function for the animation. Matches the CSS timing function values.
-
-Animations may define additional configuration properties and they are listed in their documentation.
-
-<a name="configuration-multiple"></a>
-### Using multiple animations
-
-Set the animation configuration to an array to combine animations, like this:
-
-```js
-animationConfig: {
-  value: function() {
-    return {
-      // fade-in-animation is run with a 50ms delay from slide-down-animation
-      'entry': [{
-        name: 'slide-down-animation',
-        node: this
-      }, {
-        name: 'fade-in-animation',
-        node: this,
-        timing: {delay: 50}
-      }]
-    }
-  }
-}
-```
-
-<a name="configuration-encapsulation"></a>
-### Running animations encapsulated in children nodes
-
-You can include animations in the configuration that are encapsulated in a child element that implement `Polymer.NeonAnimatableBehavior` with the `animatable` property.
-
-```js
-animationConfig: {
-  value: function() {
-    return {
-      // run fade-in-animation on this, and the entry animation on this.$.myAnimatable
-      'entry': [
-        {name: 'fade-in-animation', node: this},
-        {animatable: this.$.myAnimatable, type: 'entry'}
-      ]
-    }
-  }
-}
-```
-
-<a name="page-transitions"></a>
-## Page transitions
-
-*The artist formerly known as `<core-animated-pages>`*
-
-The `neon-animated-pages` element manages a set of pages to switch between, and runs animations between the page transitions. It implements the `Polymer.IronSelectableBehavior` behavior. Each child node should implement `Polymer.NeonAnimatableBehavior` and define the `entry` and `exit` animations. During a page transition, the `entry` animation is run on the new page and the `exit` animation is run on the old page.
-
-<a name="shared-element"></a>
-### Shared element animations
-
-Shared element animations work on multiple nodes. For example, a "hero" animation is used during a page transition to make two elements from separate pages appear to animate as a single element. Shared element animation configurations have an `id` property that identify they belong in the same animation. Elements containing shared elements also have a `sharedElements` property defines a map from `id` to element, the element involved with the animation.
-
-In the incoming page:
-
-```js
-properties: {
-  animationConfig: {
-    value: function() {
-      return {
-        // the incoming page defines the 'entry' animation
-        'entry': {
-          name: 'hero-animation',
-          id: 'hero',
-          toPage: this
-        }
-      }
-    }
-  },
-  sharedElements: {
-    value: function() {
-      return {
-        'hero': this.$.hero
-      }
-    }
-  }
-}
-```
-
-In the outgoing page:
-
-```js
-properties: {
-  animationConfig: {
-    value: function() {
-      return {
-        // the outgoing page defines the 'exit' animation
-        'exit': {
-          name: 'hero-animation',
-          id: 'hero',
-          fromPage: this
-        }
-      }
-    }
-  },
-  sharedElements: {
-    value: function() {
-      return {
-        'hero': this.$.otherHero
-      }
-    }
-  }
-}
-```
-
-<a name="declarative-page"></a>
-### Declarative page transitions
-
-For convenience, if you define the `entry-animation` and `exit-animation` attributes on `<neon-animated-pages>`, those animations will apply for all page transitions.
-
-For example:
-
-```js
-<neon-animated-pages id="pages" class="flex" selected="[[selected]]" entry-animation="slide-from-right-animation" exit-animation="slide-left-animation">
-  <neon-animatable>1</neon-animatable>
-  <neon-animatable>2</neon-animatable>
-  <neon-animatable>3</neon-animatable>
-  <neon-animatable>4</neon-animatable>
-  <neon-animatable>5</neon-animatable>
-</neon-animated-pages>
-```
-
-The new page will slide in from the right, and the old page slide away to the left.
-
-<a name="animations"></a>
-## Included animations
-
-Single element animations:
-
- * `fade-in-animation` Animates opacity from `0` to `1`;
- * `fade-out-animation` Animates opacity from `1` to `0`;
- * `scale-down-animation` Animates transform from `scale(1)` to `scale(0)`;
- * `scale-up-animation` Animates transform from `scale(0)` to `scale(1)`;
- * `slide-down-animation` Animates transform from `none` to `translateY(100%)`;
- * `slide-up-animation` Animates transform from `none` to `translateY(-100%)`;
- * `slide-from-top-animation` Animates transform from `translateY(-100%)` to `none`;
- * `slide-from-bottom-animation` Animates transform from `translateY(100%)` to `none`;
- * `slide-left-animation` Animates transform from `none` to `translateX(-100%)`;
- * `slide-right-animation` Animates transform from `none` to `translateX(100%)`;
- * `slide-from-left-animation` Animates transform from `translateX(-100%)` to `none`;
- * `slide-from-right-animation` Animates transform from `translateX(100%)` to `none`;
-
- * `transform-animation` Animates a custom transform.
-
-Note that there is a restriction that only one transform animation can be applied on the same element at a time. Use the custom `transform-animation` to combine transform properties.
-
-Shared element animations
-
- * `hero-animation` Animates an element such that it looks like it scales and transforms from another element.
- * `ripple-animation` Animates an element to full screen such that it looks like it ripples from another element.
-
-Group animations
- * `cascaded-animation` Applys an animation to an array of elements with a delay between each.
-
-<a name="demos"></a>
-## Demos
-
- * [Grid to full screen](http://morethanreal.github.io/neon-animation-demo/bower_components/neon-animation/demo/grid/index.html)
- * [Animation on load](http://morethanreal.github.io/neon-animation-demo/bower_components/neon-animation/demo/load/index.html)
- * [List item to detail](http://morethanreal.github.io/neon-animation-demo/bower_components/neon-animation/demo/list/index.html) (For narrow width)
- * [Dots to squares](http://morethanreal.github.io/neon-animation-demo/bower_components/neon-animation/demo/tiles/index.html)
- * [Declarative](http://morethanreal.github.io/neon-animation-demo/bower_components/neon-animation/demo/declarative/index.html)
diff --git a/third_party/polymer/v1_0/components-chromium/neon-animation/index.html b/third_party/polymer/v1_0/components-chromium/neon-animation/index.html
deleted file mode 100644
index 6f5feedf4..0000000
--- a/third_party/polymer/v1_0/components-chromium/neon-animation/index.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-<html>
-<head>
-
-  <meta charset="utf-8">
-  <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
-
-  <title>neon-animation</title>
-
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-
-  <link rel="import" href="../polymer/polymer.html">
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-</head>
-<body>
-
-  <iron-component-page></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-behaviors/.bower.json b/third_party/polymer/v1_0/components-chromium/paper-behaviors/.bower.json
deleted file mode 100644
index 2b04bf9..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-behaviors/.bower.json
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "name": "paper-behaviors",
-  "version": "1.0.11",
-  "description": "Common behaviors across the paper elements",
-  "authors": [
-    "The Polymer Authors"
-  ],
-  "main": [
-    "paper-button-behavior.html",
-    "paper-checked-element-behavior.html",
-    "paper-inky-focus-behavior.html"
-  ],
-  "keywords": [
-    "web-components",
-    "web-component",
-    "polymer",
-    "paper",
-    "behavior"
-  ],
-  "private": true,
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/paper-behaviors"
-  },
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "homepage": "https://github.com/PolymerElements/paper-behaviors",
-  "dependencies": {
-    "iron-behaviors": "PolymerElements/iron-behaviors#^1.0.0",
-    "iron-checked-element-behavior": "PolymerElements/iron-checked-element-behavior#^1.0.0",
-    "paper-ripple": "PolymerElements/paper-ripple#^1.0.0",
-    "polymer": "Polymer/polymer#^1.2.1"
-  },
-  "devDependencies": {
-    "iron-component-page": "polymerelements/iron-component-page#^1.0.0",
-    "iron-test-helpers": "polymerelements/iron-test-helpers#^1.0.0",
-    "paper-material": "PolymerElements/paper-material#^1.0.0",
-    "test-fixture": "PolymerElements/test-fixture#^1.0.0",
-    "web-component-tester": "^4.0.0",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
-  },
-  "ignore": [],
-  "_release": "1.0.11",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.0.11",
-    "commit": "e3c1ab0c72905b58fb4d9adc2921ea73b5c085a5"
-  },
-  "_source": "git://github.com/PolymerElements/paper-behaviors.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/paper-behaviors"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/paper-behaviors/.gitignore b/third_party/polymer/v1_0/components-chromium/paper-behaviors/.gitignore
deleted file mode 100644
index 8d4ae25..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-behaviors/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components
diff --git a/third_party/polymer/v1_0/components-chromium/paper-behaviors/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/paper-behaviors/CONTRIBUTING.md
deleted file mode 100644
index 7b101415..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-behaviors/CONTRIBUTING.md
+++ /dev/null
@@ -1,72 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [http://jsbin.com/cagaye](http://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/paper-behaviors/README.md b/third_party/polymer/v1_0/components-chromium/paper-behaviors/README.md
deleted file mode 100644
index 969e796..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-behaviors/README.md
+++ /dev/null
@@ -1,44 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-paper-button-behavior.html  paper-checked-element-behavior.html  paper-inky-focus-behavior.html  paper-ripple-behavior.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
-The bot does some handling of markdown. Please file a bug if it does the wrong
-thing! https://github.com/PolymerLabs/tedium/issues
-
--->
-
-[![Build Status](https://travis-ci.org/PolymerElements/paper-behaviors.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-behaviors)
-
-_[Demo and API Docs](https://elements.polymer-project.org/elements/paper-behaviors)_
-
-
-<!-- No docs for Polymer.PaperButtonBehavior found. -->
-
-##Polymer.PaperCheckedElementBehavior
-
-Use `Polymer.PaperCheckedElementBehavior` to implement a custom element
-that has a `checked` property similar to `Polymer.IronCheckedElementBehavior`
-and is compatible with having a ripple effect.
-
-
-
-##Polymer.PaperInkyFocusBehavior
-
-`Polymer.PaperInkyFocusBehavior` implements a ripple when the element has keyboard focus.
-
-
-
-##Polymer.PaperRippleBehavior
-
-`Polymer.PaperRippleBehavior` dynamically implements a ripple
-when the element has focus via pointer or keyboard.
-
-NOTE: This behavior is intended to be used in conjunction with and after
-`Polymer.IronButtonState` and `Polymer.IronControlState`.
-
-
diff --git a/third_party/polymer/v1_0/components-chromium/paper-behaviors/index.html b/third_party/polymer/v1_0/components-chromium/paper-behaviors/index.html
deleted file mode 100644
index 37184eaa..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-behaviors/index.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-<html>
-<head>
-
-  <meta charset="utf-8">
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-</head>
-<body>
-
-  <iron-component-page src="paper-button-behavior.html"></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-button/.bower.json b/third_party/polymer/v1_0/components-chromium/paper-button/.bower.json
deleted file mode 100644
index 3a4aa67..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-button/.bower.json
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "name": "paper-button",
-  "version": "1.0.11",
-  "description": "Material design button",
-  "authors": [
-    "The Polymer Authors"
-  ],
-  "keywords": [
-    "web-components",
-    "web-component",
-    "polymer",
-    "paper",
-    "button"
-  ],
-  "main": "paper-button.html",
-  "private": true,
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/paper-button"
-  },
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "homepage": "https://github.com/PolymerElements/paper-button",
-  "dependencies": {
-    "polymer": "Polymer/polymer#^1.1.0",
-    "paper-ripple": "polymerelements/paper-ripple#^1.0.0",
-    "paper-material": "polymerelements/paper-material#^1.0.0",
-    "paper-behaviors": "polymerelements/paper-behaviors#^1.0.0",
-    "iron-flex-layout": "polymerelements/iron-flex-layout#^1.0.0"
-  },
-  "devDependencies": {
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
-    "web-component-tester": "polymer/web-component-tester#^3.4.0",
-    "test-fixture": "polymerelements/test-fixture#^1.0.0",
-    "iron-component-page": "polymerelements/iron-component-page#^1.0.0",
-    "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
-    "iron-icon": "polymerelements/iron-icon#^1.0.0",
-    "iron-icons": "polymerelements/iron-icons#^1.0.0",
-    "iron-test-helpers": "polymerelements/iron-test-helpers#^1.0.0",
-    "paper-styles": "polymerelements/paper-styles#^1.0.0"
-  },
-  "ignore": [],
-  "_release": "1.0.11",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.0.11",
-    "commit": "7d0f75300372d91835ae7298593d50987d4a610f"
-  },
-  "_source": "git://github.com/PolymerElements/paper-button.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/paper-button"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/paper-button/.gitignore b/third_party/polymer/v1_0/components-chromium/paper-button/.gitignore
deleted file mode 100644
index 8d4ae25..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-button/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components
diff --git a/third_party/polymer/v1_0/components-chromium/paper-button/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/paper-button/CONTRIBUTING.md
deleted file mode 100644
index 7b101415..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-button/CONTRIBUTING.md
+++ /dev/null
@@ -1,72 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [http://jsbin.com/cagaye](http://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/paper-button/README.md b/third_party/polymer/v1_0/components-chromium/paper-button/README.md
deleted file mode 100644
index 9e6a0cdc..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-button/README.md
+++ /dev/null
@@ -1,76 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-paper-button.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
--->
-
-[![Build Status](https://travis-ci.org/PolymerElements/paper-button.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-button)
-
-_[Demo and API Docs](https://elements.polymer-project.org/elements/paper-button)_
-
-
-##&lt;paper-button&gt;
-
-
-Material design: [Buttons](https://www.google.com/design/spec/components/buttons.html)
-
-`paper-button` is a button. When the user touches the button, a ripple effect emanates
-from the point of contact. It may be flat or raised. A raised button is styled with a
-shadow.
-
-Example:
-
-    <paper-button>Flat button</paper-button>
-    <paper-button raised>Raised button</paper-button>
-    <paper-button noink>No ripple effect</paper-button>
-    <paper-button toggles>Toggle-able button</paper-button>
-
-A button that has `toggles` true will remain `active` after being clicked (and
-will have an `active` attribute set). For more information, see the `Polymer.IronButtonState`
-behavior.
-
-You may use custom DOM in the button body to create a variety of buttons. For example, to
-create a button with an icon and some text:
-
-    <paper-button>
-      <iron-icon icon="favorite"></iron-icon>
-      custom button content
-    </paper-button>
-
-### Styling
-
-Style the button with CSS as you would a normal DOM element.
-
-    paper-button.fancy {
-      background: green;
-      color: yellow;
-    }
-
-    paper-button.fancy:hover {
-      background: lime;
-    }
-
-    paper-button[disabled],
-    paper-button[toggles][active] {
-      background: red;
-    }
-
-By default, the ripple is the same color as the foreground at 25% opacity. You may
-customize the color using the `--paper-button-ink-color` custom property.
-
-The following custom properties and mixins are also available for styling:
-
-Custom property | Description | Default
-----------------|-------------|----------
-`--paper-button-ink-color` | Background color of the ripple | `Based on the button's color`
-`--paper-button` | Mixin applied to the button | `{}`
-`--paper-button-disabled` | Mixin applied to the disabled button. Note that you can also use the `paper-button[disabled]` selector | `{}`
-`--paper-button-flat-keyboard-focus` | Mixin applied to a flat button after it's been focused using the keyboard | `{}`
-`--paper-button-raised-keyboard-focus` | Mixin applied to a raised button after it's been focused using the keyboard | `{}`
-
-
diff --git a/third_party/polymer/v1_0/components-chromium/paper-button/index.html b/third_party/polymer/v1_0/components-chromium/paper-button/index.html
deleted file mode 100644
index 487bb5c..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-button/index.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-<html>
-<head>
-
-  <meta charset="utf-8">
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-</head>
-<body>
-
-  <iron-component-page></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-card/.bower.json b/third_party/polymer/v1_0/components-chromium/paper-card/.bower.json
deleted file mode 100644
index 21630b0f..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-card/.bower.json
+++ /dev/null
@@ -1,50 +0,0 @@
-{
-  "name": "paper-card",
-  "version": "1.1.1",
-  "description": "Material design piece of paper with unique related data",
-  "authors": [
-    "The Polymer Authors"
-  ],
-  "keywords": [
-    "web-components",
-    "polymer",
-    "card"
-  ],
-  "main": "paper-card.html",
-  "private": true,
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/paper-card.git"
-  },
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "homepage": "https://github.com/PolymerElements/paper-card",
-  "ignore": [],
-  "dependencies": {
-    "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
-    "iron-image": "PolymerElements/iron-image#^1.2.0",
-    "paper-material": "PolymerElements/paper-material#^1.0.0",
-    "paper-styles": "PolymerElements/paper-styles#^1.1.0",
-    "polymer": "Polymer/polymer#^1.1.0"
-  },
-  "devDependencies": {
-    "iron-collapse": "PolymerElements/iron-collapse#^1.0.0",
-    "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
-    "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
-    "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
-    "paper-button": "PolymerElements/paper-button#^1.0.0",
-    "paper-checkbox": "PolymerElements/paper-checkbox#^1.0.0",
-    "paper-icon-button": "PolymerElements/paper-icon-button#^1.0.0",
-    "test-fixture": "PolymerElements/test-fixture#^1.0.0",
-    "web-component-tester": "^4.0.0",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
-  },
-  "_release": "1.1.1",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.1.1",
-    "commit": "8ddd91424414ad32147c4c0c6812aff348da6114"
-  },
-  "_source": "git://github.com/PolymerElements/paper-card.git",
-  "_target": "*",
-  "_originalSource": "PolymerElements/paper-card"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/paper-card/.gitignore b/third_party/polymer/v1_0/components-chromium/paper-card/.gitignore
deleted file mode 100644
index fbe05fc..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-card/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components/
diff --git a/third_party/polymer/v1_0/components-chromium/paper-card/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/paper-card/CONTRIBUTING.md
deleted file mode 100644
index 7b101415..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-card/CONTRIBUTING.md
+++ /dev/null
@@ -1,72 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [http://jsbin.com/cagaye](http://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/paper-card/README.md b/third_party/polymer/v1_0/components-chromium/paper-card/README.md
deleted file mode 100644
index 7662b9e7..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-card/README.md
+++ /dev/null
@@ -1,65 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-paper-card.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
-The bot does some handling of markdown. Please file a bug if it does the wrong
-thing! https://github.com/PolymerLabs/tedium/issues
-
--->
-
-[![Build Status](https://travis-ci.org/PolymerElements/paper-card.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-card)
-
-_[Demo and API Docs](https://elements.polymer-project.org/elements/paper-card)_
-
-
-##&lt;paper-card&gt;
-
-Material design: [Cards](https://www.google.com/design/spec/components/cards.html)
-
-`paper-card` is a container with a drop shadow.
-
-Example:
-
-```html
-<paper-card heading="Card Title">
-  <div class="card-content">Some content</div>
-  <div class="card-actions">
-    <paper-button>Some action</paper-button>
-  </div>
-</paper-card>
-```
-
-Example - top card image:
-
-```html
-<paper-card heading="Card Title" image="/path/to/image.png">
-  ...
-</paper-card>
-```
-
-### Accessibility
-
-By default, the `aria-label` will be set to the value of the `heading` attribute.
-
-### Styling
-
-The following custom properties and mixins are available for styling:
-
-| Custom property | Description | Default |
-| --- | --- | --- |
-| `--paper-card-background-color` | The background color of the card | `--primary-background-color` |
-| `--paper-card-header-color` | The color of the header text | `#000` |
-| `--paper-card-header` | Mixin applied to the card header section | `{}` |
-| `--paper-card-header-text` | Mixin applied to the title in the card header section | `{}` |
-| `--paper-card-header-image` | Mixin applied to the image in the card header section | `{}` |
-| `--paper-card-header-image-text` | Mixin applied to the text overlapping the image in the card header section | `{}` |
-| `--paper-card-content` | Mixin applied to the card content section | `{}` |
-| `--paper-card-actions` | Mixin applied to the card action section | `{}` |
-| `--paper-card` | Mixin applied to the card | `{}` |
-
-
diff --git a/third_party/polymer/v1_0/components-chromium/paper-card/index.html b/third_party/polymer/v1_0/components-chromium/paper-card/index.html
deleted file mode 100644
index fab428a..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-card/index.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-<html>
-<head>
-
-  <meta charset="utf-8">
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-
-  <title>paper-card</title>
-
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-</head>
-<body>
-
-<iron-component-page></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-checkbox/.bower.json b/third_party/polymer/v1_0/components-chromium/paper-checkbox/.bower.json
deleted file mode 100644
index dca95e8..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-checkbox/.bower.json
+++ /dev/null
@@ -1,49 +0,0 @@
-{
-  "name": "paper-checkbox",
-  "version": "1.1.3",
-  "description": "A material design checkbox",
-  "authors": [
-    "The Polymer Authors"
-  ],
-  "keywords": [
-    "web-components",
-    "polymer",
-    "paper",
-    "checkbox",
-    "control"
-  ],
-  "private": true,
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/paper-checkbox"
-  },
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "homepage": "https://github.com/PolymerElements/paper-checkbox",
-  "ignore": [],
-  "dependencies": {
-    "polymer": "Polymer/polymer#^1.1.0",
-    "iron-checked-element-behavior": "PolymerElements/iron-checked-element-behavior#^1.0.0",
-    "paper-behaviors": "PolymerElements/paper-behaviors#^1.0.0",
-    "paper-ripple": "PolymerElements/paper-ripple#^1.0.0",
-    "paper-styles": "PolymerElements/paper-styles#^1.1.0"
-  },
-  "devDependencies": {
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
-    "web-component-tester": "^4.0.0",
-    "test-fixture": "PolymerElements/test-fixture#^1.0.0",
-    "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
-    "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
-    "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
-    "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0"
-  },
-  "main": "paper-checkbox.html",
-  "_release": "1.1.3",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.1.3",
-    "commit": "b2698fd0d34153e89369f116f306bc8e8203a460"
-  },
-  "_source": "git://github.com/PolymerElements/paper-checkbox.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/paper-checkbox"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/paper-checkbox/.gitignore b/third_party/polymer/v1_0/components-chromium/paper-checkbox/.gitignore
deleted file mode 100644
index 8d4ae25..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-checkbox/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components
diff --git a/third_party/polymer/v1_0/components-chromium/paper-checkbox/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/paper-checkbox/CONTRIBUTING.md
deleted file mode 100644
index f147978a..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-checkbox/CONTRIBUTING.md
+++ /dev/null
@@ -1,77 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
-
-You can however override the jsbin link with one that's customized to this
-specific element:
-
-jsbin=https://jsbin.com/cagaye/edit?html,output
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, fixes #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/paper-checkbox/README.md b/third_party/polymer/v1_0/components-chromium/paper-checkbox/README.md
deleted file mode 100644
index 033675e..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-checkbox/README.md
+++ /dev/null
@@ -1,58 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-paper-checkbox.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
-The bot does some handling of markdown. Please file a bug if it does the wrong
-thing! https://github.com/PolymerLabs/tedium/issues
-
--->
-
-[![Build status](https://travis-ci.org/PolymerElements/paper-checkbox.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-checkbox)
-
-_[Demo and API docs](https://elements.polymer-project.org/elements/paper-checkbox)_
-
-
-##&lt;paper-checkbox&gt;
-
-Material design: [Checkbox](https://www.google.com/design/spec/components/selection-controls.html#selection-controls-checkbox)
-
-`paper-checkbox` is a button that can be either checked or unchecked.  User
-can tap the checkbox to check or uncheck it.  Usually you use checkboxes
-to allow user to select multiple options from a set.  If you have a single
-ON/OFF option, avoid using a single checkbox and use `paper-toggle-button`
-instead.
-
-Example:
-
-```html
-<paper-checkbox>label</paper-checkbox>
-
-<paper-checkbox checked> label</paper-checkbox>
-```
-
-### Styling
-
-The following custom properties and mixins are available for styling:
-
-| Custom property | Description | Default |
-| --- | --- | --- |
-| `--paper-checkbox-unchecked-background-color` | Checkbox background color when the input is not checked | `transparent` |
-| `--paper-checkbox-unchecked-color` | Checkbox border color when the input is not checked | `--primary-text-color` |
-| `--paper-checkbox-unchecked-ink-color` | Selected/focus ripple color when the input is not checked | `--primary-text-color` |
-| `--paper-checkbox-checked-color` | Checkbox color when the input is checked | `--primary-color` |
-| `--paper-checkbox-checked-ink-color` | Selected/focus ripple color when the input is checked | `--primary-color` |
-| `--paper-checkbox-checkmark-color` | Checkmark color | `white` |
-| `--paper-checkbox-label-color` | Label color | `--primary-text-color` |
-| `--paper-checkbox-label-spacing` | Spacing between the label and the checkbox | `8px` |
-| `--paper-checkbox-error-color` | Checkbox color when invalid | `--error-color` |
-| `--paper-checkbox-size` | Size of the checkbox | `18px` |
-
-This element applies the mixin `--paper-font-common-base` but does not import `paper-styles/typography.html`.
-In order to apply the `Roboto` font to this element, make sure you've imported `paper-styles/typography.html`.
-
-
diff --git a/third_party/polymer/v1_0/components-chromium/paper-checkbox/index.html b/third_party/polymer/v1_0/components-chromium/paper-checkbox/index.html
deleted file mode 100644
index b368797b..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-checkbox/index.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-<html>
-  <head>
-
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
-
-    <title>paper-checkbox</title>
-
-    <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-
-    <link rel="import" href="../polymer/polymer.html">
-    <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-  </head>
-  <body>
-
-    <iron-component-page></iron-component-page>
-
-  </body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-checkbox/metadata.html b/third_party/polymer/v1_0/components-chromium/paper-checkbox/metadata.html
deleted file mode 100644
index 4d068e8..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-checkbox/metadata.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-    @license
-    Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
-    This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-    The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-    The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-    Code distributed by Google as part of the polymer project is also
-    subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-<x-meta id="paper-checkbox" label="Checkbox" group="Paper">
-  <template>
-    <paper-checkbox label="click me"></paper-checkbox>
-  </template>
-  <template id="imports">
-    <link rel="import" href="paper-checkbox.html">
-  </template>
-</x-meta>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-dialog-behavior/.bower.json b/third_party/polymer/v1_0/components-chromium/paper-dialog-behavior/.bower.json
deleted file mode 100644
index 6bb6ad4..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-dialog-behavior/.bower.json
+++ /dev/null
@@ -1,46 +0,0 @@
-{
-  "name": "paper-dialog-behavior",
-  "version": "1.2.0",
-  "description": "Implements a behavior used for material design dialogs",
-  "authors": "The Polymer Authors",
-  "keywords": [
-    "web-components",
-    "polymer",
-    "dialog",
-    "overlay",
-    "behavior"
-  ],
-  "main": "paper-dialog-behavior.html",
-  "private": true,
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/paper-dialog-behavior"
-  },
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "homepage": "https://github.com/PolymerElements/paper-dialog-behavior",
-  "ignore": [],
-  "dependencies": {
-    "iron-overlay-behavior": "PolymerElements/iron-overlay-behavior#^1.0.0",
-    "paper-styles": "PolymerElements/paper-styles#^1.1.0",
-    "polymer": "Polymer/polymer#^1.1.0"
-  },
-  "devDependencies": {
-    "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
-    "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
-    "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
-    "paper-button": "PolymerElements/paper-button#^1.0.0",
-    "paper-dialog-scrollable": "PolymerElements/paper-dialog-scrollable#^1.0.0",
-    "paper-icon-button": "PolymerElements/paper-icon-button#^1.0.0",
-    "web-component-tester": "^4.0.0",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
-  },
-  "_release": "1.2.0",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.2.0",
-    "commit": "a3be07d2784073d5e9e5175fb7d13f7b1f2a5558"
-  },
-  "_source": "git://github.com/PolymerElements/paper-dialog-behavior.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/paper-dialog-behavior"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/paper-dialog-behavior/.gitignore b/third_party/polymer/v1_0/components-chromium/paper-dialog-behavior/.gitignore
deleted file mode 100644
index 8d4ae25..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-dialog-behavior/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components
diff --git a/third_party/polymer/v1_0/components-chromium/paper-dialog-behavior/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/paper-dialog-behavior/CONTRIBUTING.md
deleted file mode 100644
index f147978a..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-dialog-behavior/CONTRIBUTING.md
+++ /dev/null
@@ -1,77 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
-
-You can however override the jsbin link with one that's customized to this
-specific element:
-
-jsbin=https://jsbin.com/cagaye/edit?html,output
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, fixes #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/paper-dialog-behavior/README.md b/third_party/polymer/v1_0/components-chromium/paper-dialog-behavior/README.md
deleted file mode 100644
index d67e047..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-dialog-behavior/README.md
+++ /dev/null
@@ -1,68 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-paper-dialog-behavior.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
-The bot does some handling of markdown. Please file a bug if it does the wrong
-thing! https://github.com/PolymerLabs/tedium/issues
-
--->
-
-[![Build status](https://travis-ci.org/PolymerElements/paper-dialog-behavior.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-dialog-behavior)
-
-_[Demo and API docs](https://elements.polymer-project.org/elements/paper-dialog-behavior)_
-
-
-##Polymer.PaperDialogBehavior
-
-Use `Polymer.PaperDialogBehavior` and `paper-dialog-shared-styles.html` to implement a Material Design
-dialog.
-
-For example, if `<paper-dialog-impl>` implements this behavior:
-
-```html
-<paper-dialog-impl>
-    <h2>Header</h2>
-    <div>Dialog body</div>
-    <div class="buttons">
-        <paper-button dialog-dismiss>Cancel</paper-button>
-        <paper-button dialog-confirm>Accept</paper-button>
-    </div>
-</paper-dialog-impl>
-```
-
-`paper-dialog-shared-styles.html` provide styles for a header, content area, and an action area for buttons.
-Use the `<h2>` tag for the header and the `buttons` class for the action area. You can use the
-`paper-dialog-scrollable` element (in its own repository) if you need a scrolling content area.
-
-Use the `dialog-dismiss` and `dialog-confirm` attributes on interactive controls to close the
-dialog. If the user dismisses the dialog with `dialog-confirm`, the `closingReason` will update
-to include `confirmed: true`.
-
-### Styling
-
-The following custom properties and mixins are available for styling.
-
-| Custom property | Description | Default |
-| --- | --- | --- |
-| `--paper-dialog-background-color` | Dialog background color | `--primary-background-color` |
-| `--paper-dialog-color` | Dialog foreground color | `--primary-text-color` |
-| `--paper-dialog` | Mixin applied to the dialog | `{}` |
-| `--paper-dialog-title` | Mixin applied to the title (`<h2>`) element | `{}` |
-| `--paper-dialog-button-color` | Button area foreground color | `--default-primary-color` |
-
-### Accessibility
-
-This element has `role="dialog"` by default. Depending on the context, it may be more appropriate
-to override this attribute with `role="alertdialog"`.
-
-If `modal` is set, the element will set `aria-modal` and prevent the focus from exiting the element.
-It will also ensure that focus remains in the dialog.
-
-The `aria-labelledby` attribute will be set to the header element, if one exists.
-
-
diff --git a/third_party/polymer/v1_0/components-chromium/paper-dialog-behavior/hero.svg b/third_party/polymer/v1_0/components-chromium/paper-dialog-behavior/hero.svg
deleted file mode 100644
index d473816..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-dialog-behavior/hero.svg
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 225 126" enable-background="new 0 0 225 126" xml:space="preserve">
-<g id="background" display="none">
-	<rect display="inline" fill="#B0BEC5" width="225" height="126"/>
-</g>
-<g id="label">
-</g>
-<g id="art">
-	<g>
-		<polygon points="76.7,98 79.2,98 74,91.1 74,94.4 		"/>
-		<polygon points="74,81.4 74,84.7 84.1,98 86.6,98 		"/>
-		<polygon points="74,71.7 74,75 91.5,98 94,98 		"/>
-		<polygon points="74,62 74,65.3 98.9,98 101.4,98 		"/>
-		<polygon points="94.3,79 92,79 92,76 74,52.3 74,55.6 106.2,98 108.7,98 		"/>
-		<polygon points="92,69.6 92,66.3 74,42.6 74,45.9 		"/>
-		<polygon points="101.7,79 99.2,79 113.6,98 116.1,98 		"/>
-		<polygon points="92,59.9 92,56.6 74,32.9 74,36.2 		"/>
-		<polygon points="109.1,79 106.5,79 121,98 123.5,98 		"/>
-		<polygon points="92,50.2 92,47 92.1,47 77.7,28 75.2,28 		"/>
-		<polygon points="116.4,79 113.9,79 128.4,98 130.9,98 		"/>
-		<polygon points="97,47 99.5,47 85,28 82.5,28 		"/>
-		<polygon points="123.8,79 121.3,79 135.7,98 138.2,98 		"/>
-		<polygon points="104.4,47 106.9,47 92.4,28 89.9,28 		"/>
-		<polygon points="131.2,79 128.7,79 143.1,98 145.6,98 		"/>
-		<polygon points="132,70.4 132,73.7 150,97.4 150,94.1 		"/>
-		<polygon points="111.7,47 114.2,47 99.8,28 97.3,28 		"/>
-		<polygon points="132,60.7 132,64 150,87.7 150,84.3 		"/>
-		<polygon points="119.1,47 121.6,47 107.2,28 104.7,28 		"/>
-		<polygon points="132,51 132,54.3 150,77.9 150,74.6 		"/>
-		<polygon points="114.6,28 112,28 126.5,47 129,47 		"/>
-		<polygon points="121.9,28 119.4,28 150,68.2 150,64.9 		"/>
-		<polygon points="129.3,28 126.8,28 150,58.5 150,55.2 		"/>
-		<polygon points="136.7,28 134.2,28 150,48.8 150,45.5 		"/>
-		<polygon points="144.1,28 141.5,28 150,39.1 150,35.8 		"/>
-		<polygon points="150,29.4 150,28 148.9,28 		"/>
-	</g>
-	<path d="M133,80H91V46h42V80z M93,78h38V48H93V78z"/>
-	<path d="M151,99H73V27h78V99z M75,97h74V29H75V97z"/>
-	<circle cx="74" cy="28" r="4"/>
-	<circle cx="150" cy="28" r="4"/>
-	<circle cx="150" cy="98" r="4"/>
-	<circle cx="74" cy="98" r="4"/>
-	<g id="ic_x5F_add_x0D_">
-	</g>
-</g>
-<g id="Guides">
-</g>
-</svg>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-dialog-behavior/index.html b/third_party/polymer/v1_0/components-chromium/paper-dialog-behavior/index.html
deleted file mode 100644
index af98b85..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-dialog-behavior/index.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-<html>
-<head>
-
-  <meta charset="utf-8">
-  <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
-
-  <title>paper-dialog-behavior</title>
-
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-
-  <link rel="import" href="../polymer/polymer.html">
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-</head>
-<body>
-
-  <iron-component-page></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-dialog/.bower.json b/third_party/polymer/v1_0/components-chromium/paper-dialog/.bower.json
deleted file mode 100644
index 2882e47..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-dialog/.bower.json
+++ /dev/null
@@ -1,47 +0,0 @@
-{
-  "name": "paper-dialog",
-  "description": "A Material Design dialog",
-  "version": "1.0.4",
-  "authors": "The Polymer Authors",
-  "keywords": [
-    "web-components",
-    "polymer",
-    "dialog",
-    "overlay"
-  ],
-  "main": "paper-dialog.html",
-  "private": true,
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/paper-dialog"
-  },
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "homepage": "https://github.com/PolymerElements/paper-dialog",
-  "ignore": [],
-  "dependencies": {
-    "neon-animation": "PolymerElements/neon-animation#^1.0.0",
-    "paper-dialog-behavior": "PolymerElements/paper-dialog-behavior#^1.0.0",
-    "paper-styles": "PolymerElements/paper-styles#^1.0.0",
-    "polymer": "Polymer/polymer#^1.1.0"
-  },
-  "devDependencies": {
-    "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
-    "paper-button": "PolymerElements/paper-button#^1.0.0",
-    "paper-dialog-scrollable": "PolymerElements/paper-dialog-scrollable#^1.0.0",
-    "paper-dropdown-menu": "PolymerElements/paper-dropdown-menu#^1.0.0",
-    "paper-item": "PolymerElements/paper-item#^1.0.0",
-    "paper-menu": "PolymerElements/paper-menu#^1.0.0",
-    "test-fixture": "PolymerElements/test-fixture#^1.0.0",
-    "web-component-tester": "^4.0.0",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
-  },
-  "_release": "1.0.4",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.0.4",
-    "commit": "53b099bed06bbbab7cb0f82c8209328c1a82aee6"
-  },
-  "_source": "git://github.com/PolymerElements/paper-dialog.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/paper-dialog"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/paper-dialog/.gitignore b/third_party/polymer/v1_0/components-chromium/paper-dialog/.gitignore
deleted file mode 100644
index 8d4ae25..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-dialog/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components
diff --git a/third_party/polymer/v1_0/components-chromium/paper-dialog/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/paper-dialog/CONTRIBUTING.md
deleted file mode 100644
index f147978a..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-dialog/CONTRIBUTING.md
+++ /dev/null
@@ -1,77 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
-
-You can however override the jsbin link with one that's customized to this
-specific element:
-
-jsbin=https://jsbin.com/cagaye/edit?html,output
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, fixes #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/paper-dialog/README.md b/third_party/polymer/v1_0/components-chromium/paper-dialog/README.md
deleted file mode 100644
index 787cb7e..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-dialog/README.md
+++ /dev/null
@@ -1,74 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-paper-dialog.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
-The bot does some handling of markdown. Please file a bug if it does the wrong
-thing! https://github.com/PolymerLabs/tedium/issues
-
--->
-
-[![Build status](https://travis-ci.org/PolymerElements/paper-dialog.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-dialog)
-
-_[Demo and API docs](https://elements.polymer-project.org/elements/paper-dialog)_
-
-
-##&lt;paper-dialog&gt;
-
-Material design: [Dialogs](https://www.google.com/design/spec/components/dialogs.html)
-
-`<paper-dialog>` is a dialog with Material Design styling and optional animations when it is
-opened or closed. It provides styles for a header, content area, and an action area for buttons.
-You can use the `<paper-dialog-scrollable>` element (in its own repository) if you need a scrolling
-content area. See `Polymer.PaperDialogBehavior` for specifics.
-
-For example, the following code implements a dialog with a header, scrolling content area and
-buttons.
-
-```html
-<paper-dialog>
-  <h2>Header</h2>
-  <paper-dialog-scrollable>
-    Lorem ipsum...
-  </paper-dialog-scrollable>
-  <div class="buttons">
-    <paper-button dialog-dismiss>Cancel</paper-button>
-    <paper-button dialog-confirm>Accept</paper-button>
-  </div>
-</paper-dialog>
-```
-
-### Styling
-
-See the docs for `Polymer.PaperDialogBehavior` for the custom properties available for styling
-this element.
-
-### Animations
-
-Set the `entry-animation` and/or `exit-animation` attributes to add an animation when the dialog
-is opened or closed. See the documentation in
-[PolymerElements/neon-animation](https://github.com/PolymerElements/neon-animation) for more info.
-
-For example:
-
-```html
-<link rel="import" href="components/neon-animation/animations/scale-up-animation.html">
-<link rel="import" href="components/neon-animation/animations/fade-out-animation.html">
-
-<paper-dialog entry-animation="scale-up-animation"
-              exit-animation="fade-out-animation">
-  <h2>Header</h2>
-  <div>Dialog body</div>
-</paper-dialog>
-```
-
-### Accessibility
-
-See the docs for `Polymer.PaperDialogBehavior` for accessibility features implemented by this
-element.
-
-
diff --git a/third_party/polymer/v1_0/components-chromium/paper-dialog/hero.svg b/third_party/polymer/v1_0/components-chromium/paper-dialog/hero.svg
deleted file mode 100644
index 713329b8..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-dialog/hero.svg
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 225 126" enable-background="new 0 0 225 126" xml:space="preserve">
-<g id="background" display="none">
-	<rect display="inline" fill="#B0BEC5" width="225" height="126"/>
-</g>
-<g id="label">
-</g>
-<g id="art">
-	<g>
-		<polygon points="0,124 0,126 2,126 		"/>
-		<polygon points="0,111.6 0,114.4 11.6,126 14.4,126 		"/>
-		<polygon points="0,99.1 0,101.9 24.1,126 26.9,126 		"/>
-		<polygon points="0,86.6 0,89.5 36.5,126 39.4,126 		"/>
-		<polygon points="0,74.2 0,77 49,126 51.8,126 		"/>
-		<polygon points="0,61.7 0,64.5 61.5,126 64.3,126 		"/>
-		<polygon points="0,49.2 0,52.1 73.9,126 76.8,126 		"/>
-		<polygon points="0,36.8 0,39.6 86.4,126 89.2,126 		"/>
-		<polygon points="0,24.3 0,27.1 98.9,126 101.7,126 		"/>
-		<polygon points="75.2,87 74,87 74,85.8 0,11.8 0,14.7 111.3,126 114.2,126 		"/>
-		<polygon points="87.6,87 84.8,87 123.8,126 126.6,126 		"/>
-		<polygon points="74,76.2 74,73.4 0.6,0 0,0 0,2.2 		"/>
-		<polygon points="74,63.7 74,60.9 13.1,0 10.3,0 		"/>
-		<polygon points="100.1,87 97.3,87 136.3,126 139.1,126 		"/>
-		<polygon points="112.6,87 109.7,87 148.7,126 151.6,126 		"/>
-		<polygon points="74,51.3 74,48.4 25.6,0 22.7,0 		"/>
-		<polygon points="125,87 122.2,87 161.2,126 164,126 		"/>
-		<polygon points="74.2,39 77,39 38,0 35.2,0 		"/>
-		<polygon points="86.7,39 89.5,39 50.5,0 47.7,0 		"/>
-		<polygon points="137.5,87 134.7,87 173.7,126 176.5,126 		"/>
-		<polygon points="150,87 147.1,87 186.1,126 189,126 		"/>
-		<polygon points="99.1,39 102,39 63,0 60.1,0 		"/>
-		<polygon points="150,74.6 150,77.4 198.6,126 201.4,126 		"/>
-		<polygon points="111.6,39 114.4,39 75.4,0 72.6,0 		"/>
-		<polygon points="150,62.1 150,64.9 211.1,126 213.9,126 		"/>
-		<polygon points="124.1,39 126.9,39 87.9,0 85.1,0 		"/>
-		<polygon points="100.3,0 97.5,0 136.5,39 139.3,39 		"/>
-		<polygon points="150,49.7 150,52.5 223.5,126 225,126 225,124.7 		"/>
-		<polygon points="112.8,0 110,0 149,39 150,39 150,40 225,115 225,112.2 		"/>
-		<polygon points="125.3,0 122.5,0 225,102.5 225,99.7 		"/>
-		<polygon points="137.7,0 134.9,0 225,90.1 225,87.3 		"/>
-		<polygon points="150.2,0 147.4,0 225,77.6 225,74.8 		"/>
-		<polygon points="162.7,0 159.8,0 225,65.2 225,62.3 		"/>
-		<polygon points="175.1,0 172.3,0 225,52.7 225,49.9 		"/>
-		<polygon points="187.6,0 184.8,0 225,40.2 225,37.4 		"/>
-		<polygon points="200.1,0 197.2,0 225,27.8 225,24.9 		"/>
-		<polygon points="212.5,0 209.7,0 225,15.3 225,12.5 		"/>
-		<polygon points="225,0 222.2,0 225,2.8 225,0 		"/>
-	</g>
-	<g id="ic_x5F_add_x0D_">
-	</g>
-	<path d="M151,88H73V38h78V88z M75,86h74V40H75V86z"/>
-</g>
-<g id="Guides">
-</g>
-</svg>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-dialog/index.html b/third_party/polymer/v1_0/components-chromium/paper-dialog/index.html
deleted file mode 100644
index 6304b8dc..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-dialog/index.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-<html>
-<head>
-
-  <meta charset="utf-8">
-  <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
-
-  <title>paper-dialog</title>
-
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-
-  <link rel="import" href="../polymer/polymer.html">
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-</head>
-<body>
-
-  <iron-component-page></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-drawer-panel/.bower.json b/third_party/polymer/v1_0/components-chromium/paper-drawer-panel/.bower.json
deleted file mode 100644
index 9bb503e..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-drawer-panel/.bower.json
+++ /dev/null
@@ -1,47 +0,0 @@
-{
-  "name": "paper-drawer-panel",
-  "version": "1.0.7",
-  "description": "A responsive drawer panel",
-  "authors": [
-    "The Polymer Authors"
-  ],
-  "keywords": [
-    "web-components",
-    "polymer",
-    "drawer",
-    "responsive",
-    "layout"
-  ],
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/paper-drawer-panel.git"
-  },
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "homepage": "https://github.com/PolymerElements/paper-drawer-panel",
-  "dependencies": {
-    "iron-media-query": "PolymerElements/iron-media-query#^1.0.0",
-    "iron-resizable-behavior": "PolymerElements/iron-resizable-behavior#^1.0.0",
-    "iron-selector": "PolymerElements/iron-selector#^1.0.0",
-    "polymer": "Polymer/polymer#^1.1.0"
-  },
-  "devDependencies": {
-    "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
-    "paper-button": "PolymerElements/paper-button#^1.0.0",
-    "paper-styles": "PolymerElements/paper-styles#^1.0.0",
-    "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
-    "test-fixture": "PolymerElements/test-fixture#^1.0.0",
-    "web-component-tester": "^4.0.0",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
-  },
-  "main": "paper-drawer-panel.html",
-  "ignore": [],
-  "_release": "1.0.7",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.0.7",
-    "commit": "1d791255c062c0c4c4fd9f6f2b2c1ef16b533721"
-  },
-  "_source": "git://github.com/PolymerElements/paper-drawer-panel.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/paper-drawer-panel"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/paper-drawer-panel/.gitignore b/third_party/polymer/v1_0/components-chromium/paper-drawer-panel/.gitignore
deleted file mode 100644
index fbe05fc..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-drawer-panel/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components/
diff --git a/third_party/polymer/v1_0/components-chromium/paper-drawer-panel/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/paper-drawer-panel/CONTRIBUTING.md
deleted file mode 100644
index f147978a..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-drawer-panel/CONTRIBUTING.md
+++ /dev/null
@@ -1,77 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
-
-You can however override the jsbin link with one that's customized to this
-specific element:
-
-jsbin=https://jsbin.com/cagaye/edit?html,output
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, fixes #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/paper-drawer-panel/README.md b/third_party/polymer/v1_0/components-chromium/paper-drawer-panel/README.md
deleted file mode 100644
index 78ada9e..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-drawer-panel/README.md
+++ /dev/null
@@ -1,147 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-paper-drawer-panel.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
-The bot does some handling of markdown. Please file a bug if it does the wrong
-thing! https://github.com/PolymerLabs/tedium/issues
-
--->
-
-[![Build status](https://travis-ci.org/PolymerElements/paper-drawer-panel.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-drawer-panel)
-
-_[Demo and API docs](https://elements.polymer-project.org/elements/paper-drawer-panel)_
-
-
-##&lt;paper-drawer-panel&gt;
-
-Material design: [Navigation drawer](https://www.google.com/design/spec/patterns/navigation-drawer.html)
-
-`paper-drawer-panel` contains a drawer panel and a main panel.  The drawer
-and the main panel are side-by-side with drawer on the left.  When the browser
-window size is smaller than the `responsiveWidth`, `paper-drawer-panel`
-changes to narrow layout.  In narrow layout, the drawer will be stacked on top
-of the main panel.  The drawer will slide in/out to hide/reveal the main
-panel.
-
-Use the attribute `drawer` to indicate that the element is the drawer panel and
-`main` to indicate that the element is the main panel.
-
-Example:
-
-```html
-<paper-drawer-panel>
-  <div drawer> Drawer panel... </div>
-  <div main> Main panel... </div>
-</paper-drawer-panel>
-```
-
-The drawer and the main panels are not scrollable.  You can set CSS overflow
-property on the elements to make them scrollable or use `paper-header-panel`.
-
-Example:
-
-```html
-<paper-drawer-panel>
-  <paper-header-panel drawer>
-    <paper-toolbar></paper-toolbar>
-    <div> Drawer content... </div>
-  </paper-header-panel>
-  <paper-header-panel main>
-    <paper-toolbar></paper-toolbar>
-    <div> Main content... </div>
-  </paper-header-panel>
-</paper-drawer-panel>
-```
-
-An element that should toggle the drawer will automatically do so if it's
-given the `paper-drawer-toggle` attribute.  Also this element will automatically
-be hidden in wide layout.
-
-Example:
-
-```html
-<paper-drawer-panel>
-  <paper-header-panel drawer>
-    <paper-toolbar>
-      <div>Application</div>
-    </paper-toolbar>
-    <div> Drawer content... </div>
-  </paper-header-panel>
-  <paper-header-panel main>
-    <paper-toolbar>
-      <paper-icon-button icon="menu" paper-drawer-toggle></paper-icon-button>
-      <div>Title</div>
-    </paper-toolbar>
-    <div> Main content... </div>
-  </paper-header-panel>
-</paper-drawer-panel>
-```
-
-To position the drawer to the right, add `right-drawer` attribute.
-
-```html
-<paper-drawer-panel right-drawer>
-  <div drawer> Drawer panel... </div>
-  <div main> Main panel... </div>
-</paper-drawer-panel>
-```
-
-### Styling
-
-To change the main container:
-
-```css
-paper-drawer-panel {
-  --paper-drawer-panel-main-container: {
-    background-color: gray;
-  };
-}
-```
-
-To change the drawer container when it's in the left side:
-
-```css
-paper-drawer-panel {
-  --paper-drawer-panel-left-drawer-container: {
-    background-color: white;
-  };
-}
-```
-
-To change the drawer container when it's in the right side:
-
-```css
-paper-drawer-panel {
-  --paper-drawer-panel-right-drawer-container: {
-    background-color: white;
-  };
-}
-```
-
-To customize the scrim:
-
-```css
-paper-drawer-panel {
-  --paper-drawer-panel-scrim: {
-    background-color: red;
-  };
-}
-```
-
-The following custom properties and mixins are available for styling:
-
-| Custom property | Description | Default |
-| --- | --- | --- |
-| `--paper-drawer-panel-scrim-opacity` | Scrim opacity | 1 |
-| `--paper-drawer-panel-drawer-container` | Mixin applied to drawer container | {} |
-| `--paper-drawer-panel-left-drawer-container` | Mixin applied to container when it's in the left side | {} |
-| `--paper-drawer-panel-main-container` | Mixin applied to main container | {} |
-| `--paper-drawer-panel-right-drawer-container` | Mixin applied to container when it's in the right side | {} |
-| `--paper-drawer-panel-scrim` | Mixin applied to scrim | {} |
-
-
diff --git a/third_party/polymer/v1_0/components-chromium/paper-drawer-panel/hero.svg b/third_party/polymer/v1_0/components-chromium/paper-drawer-panel/hero.svg
deleted file mode 100644
index 5dfef36..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-drawer-panel/hero.svg
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 225 126" enable-background="new 0 0 225 126" xml:space="preserve">
-<g id="background" display="none">
-	<rect display="inline" fill="#B0BEC5" width="225" height="126"/>
-</g>
-<g id="label">
-</g>
-<g id="art">
-	<path d="M175,102H61V24h114V102z M63,100h110V26H63V100z"/>
-	<path d="M91,102H61V24h30V102z M63,100h26V26H63V100z"/>
-	<circle cx="123" cy="63" r="4"/>
-	<rect x="90" y="62" width="33" height="2"/>
-	<g id="ic_x5F_add_x0D_">
-	</g>
-</g>
-<g id="Guides">
-</g>
-</svg>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-drawer-panel/index.html b/third_party/polymer/v1_0/components-chromium/paper-drawer-panel/index.html
deleted file mode 100644
index 1390eccf..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-drawer-panel/index.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<!doctype html>
-<!--
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-<html>
-<head>
-
-  <meta charset="utf-8">
-  <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
-
-  <title>paper-drawer-panel</title>
-
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-
-  <link rel="import" href="../polymer/polymer.html">
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-</head>
-<body>
-
-  <iron-component-page></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-dropdown-menu/.bower.json b/third_party/polymer/v1_0/components-chromium/paper-dropdown-menu/.bower.json
deleted file mode 100644
index 660d0f7..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-dropdown-menu/.bower.json
+++ /dev/null
@@ -1,56 +0,0 @@
-{
-  "name": "paper-dropdown-menu",
-  "version": "1.1.3",
-  "description": "An element that works similarly to a native browser select",
-  "authors": [
-    "The Polymer Authors"
-  ],
-  "keywords": [
-    "web-components",
-    "web-component",
-    "polymer",
-    "dropdown",
-    "select"
-  ],
-  "main": "paper-dropdown-menu.html",
-  "private": true,
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/paper-dropdown-menu"
-  },
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "homepage": "https://github.com/PolymerElements/paper-dropdown-menu",
-  "dependencies": {
-    "polymer": "polymer/polymer#^1.1.0",
-    "iron-a11y-keys-behavior": "polymerelements/iron-a11y-keys-behavior#^1.0.0",
-    "iron-icon": "polymerelements/iron-icon#^1.0.0",
-    "iron-icons": "polymerelements/iron-icons#^1.0.0",
-    "paper-input": "polymerelements/paper-input#^1.0.9",
-    "paper-menu-button": "polymerelements/paper-menu-button#^1.0.0",
-    "paper-ripple": "polymerelements/paper-ripple#^1.0.0",
-    "paper-styles": "polymerelements/paper-styles#^1.0.0",
-    "iron-form-element-behavior": "PolymerElements/iron-form-element-behavior#^1.0.0",
-    "iron-validatable-behavior": "PolymerElements/iron-validatable-behavior#^1.0.0"
-  },
-  "devDependencies": {
-    "iron-component-page": "polymerelements/iron-component-page#^1.0.0",
-    "iron-demo-helpers": "polymerelements/iron-demo-helpers#^1.0.0",
-    "test-fixture": "polymerelements/test-fixture#^1.0.0",
-    "iron-test-helpers": "polymerelements/iron-test-helpers#^1.0.0",
-    "paper-item": "polymerelements/paper-item#^1.0.0",
-    "paper-listbox": "polymerelements/paper-listbox#^1.0.0",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
-    "web-component-tester": "^4.0.0",
-    "paper-tabs": "polymerelements/paper-tabs#^1.0.0"
-  },
-  "ignore": [],
-  "_release": "1.1.3",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.1.3",
-    "commit": "1ca32e3eeb568f1ae356a205c1812744fdd65950"
-  },
-  "_source": "git://github.com/PolymerElements/paper-dropdown-menu.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/paper-dropdown-menu"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/paper-dropdown-menu/.gitignore b/third_party/polymer/v1_0/components-chromium/paper-dropdown-menu/.gitignore
deleted file mode 100644
index 8d4ae25..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-dropdown-menu/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components
diff --git a/third_party/polymer/v1_0/components-chromium/paper-dropdown-menu/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/paper-dropdown-menu/CONTRIBUTING.md
deleted file mode 100644
index 7b101415..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-dropdown-menu/CONTRIBUTING.md
+++ /dev/null
@@ -1,72 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [http://jsbin.com/cagaye](http://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/paper-dropdown-menu/README.md b/third_party/polymer/v1_0/components-chromium/paper-dropdown-menu/README.md
deleted file mode 100644
index 64b4b97b..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-dropdown-menu/README.md
+++ /dev/null
@@ -1,68 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-paper-dropdown-menu.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
-The bot does some handling of markdown. Please file a bug if it does the wrong
-thing! https://github.com/PolymerLabs/tedium/issues
-
--->
-
-[![Build Status](https://travis-ci.org/PolymerElements/paper-dropdown-menu.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-dropdown-menu)
-
-_[Demo and API Docs](https://elements.polymer-project.org/elements/paper-dropdown-menu)_
-
-
-##&lt;paper-dropdown-menu&gt;
-
-Material design: [Dropdown menus](https://www.google.com/design/spec/components/buttons.html#buttons-dropdown-buttons)
-
-`paper-dropdown-menu` is similar to a native browser select element.
-`paper-dropdown-menu` works with selectable content. The currently selected
-item is displayed in the control. If no item is selected, the `label` is
-displayed instead.
-
-The child element with the class `dropdown-content` will be used as the dropdown
-menu. It could be a `paper-menu` or element that triggers `iron-select` when
-selecting its children.
-
-Example:
-
-```html
-<paper-dropdown-menu label="Your favourite pastry">
-  <paper-menu class="dropdown-content">
-    <paper-item>Croissant</paper-item>
-    <paper-item>Donut</paper-item>
-    <paper-item>Financier</paper-item>
-    <paper-item>Madeleine</paper-item>
-  </paper-menu>
-</paper-dropdown-menu>
-```
-
-This example renders a dropdown menu with 4 options.
-
-Similarly to using `iron-select`, `iron-deselect` events will cause the
-current selection of the `paper-dropdown-menu` to be cleared.
-
-### Styling
-
-The following custom properties and mixins are also available for styling:
-
-| Custom property | Description | Default |
-| --- | --- | --- |
-| `--paper-dropdown-menu` | A mixin that is applied to the element host | `{}` |
-| `--paper-dropdown-menu-disabled` | A mixin that is applied to the element host when disabled | `{}` |
-| `--paper-dropdown-menu-ripple` | A mixin that is applied to the internal ripple | `{}` |
-| `--paper-dropdown-menu-button` | A mixin that is applied to the internal menu button | `{}` |
-| `--paper-dropdown-menu-input` | A mixin that is applied to the internal paper input | `{}` |
-| `--paper-dropdown-menu-icon` | A mixin that is applied to the internal icon | `{}` |
-
-You can also use any of the `paper-input-container` and `paper-menu-button`
-style mixins and custom properties to style the internal input and menu button
-respectively.
-
-
diff --git a/third_party/polymer/v1_0/components-chromium/paper-dropdown-menu/index.html b/third_party/polymer/v1_0/components-chromium/paper-dropdown-menu/index.html
deleted file mode 100644
index b8053bf..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-dropdown-menu/index.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-<html>
-<head>
-
-  <title>paper-dropdown-menu</title>
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-</head>
-<body>
-
-  <iron-component-page></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-fab/.bower.json b/third_party/polymer/v1_0/components-chromium/paper-fab/.bower.json
deleted file mode 100644
index 80ab078..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-fab/.bower.json
+++ /dev/null
@@ -1,48 +0,0 @@
-{
-  "name": "paper-fab",
-  "version": "1.2.0",
-  "description": "A material design floating action button",
-  "authors": [
-    "The Polymer Authors"
-  ],
-  "keywords": [
-    "web-components",
-    "polymer",
-    "button"
-  ],
-  "main": "paper-fab.html",
-  "ignore": [],
-  "private": true,
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/paper-fab.git"
-  },
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "homepage": "https://github.com/PolymerElements/paper-fab",
-  "dependencies": {
-    "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
-    "iron-icon": "PolymerElements/iron-icon#^1.0.0",
-    "iron-icons": "PolymerElements/iron-icons#^1.0.0",
-    "paper-behaviors": "PolymerElements/paper-behaviors#^1.0.0",
-    "paper-material": "PolymerElements/paper-material#^1.0.5",
-    "paper-styles": "PolymerElements/paper-styles#^1.0.0",
-    "polymer": "Polymer/polymer#^1.0.0"
-  },
-  "devDependencies": {
-    "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
-    "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
-    "paper-styles": "PolymerElements/paper-styles#^1.0.0",
-    "test-fixture": "PolymerElements/test-fixture#^1.0.0",
-    "web-component-tester": "^4.0.0",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
-  },
-  "_release": "1.2.0",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.2.0",
-    "commit": "691638ca9b922411926b916a592f01a5f25c1af8"
-  },
-  "_source": "git://github.com/PolymerElements/paper-fab.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/paper-fab"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/paper-fab/.gitignore b/third_party/polymer/v1_0/components-chromium/paper-fab/.gitignore
deleted file mode 100644
index 8d4ae25..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-fab/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components
diff --git a/third_party/polymer/v1_0/components-chromium/paper-fab/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/paper-fab/CONTRIBUTING.md
deleted file mode 100644
index f147978a..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-fab/CONTRIBUTING.md
+++ /dev/null
@@ -1,77 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
-
-You can however override the jsbin link with one that's customized to this
-specific element:
-
-jsbin=https://jsbin.com/cagaye/edit?html,output
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, fixes #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/paper-fab/README.md b/third_party/polymer/v1_0/components-chromium/paper-fab/README.md
deleted file mode 100644
index a1fb4bab..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-fab/README.md
+++ /dev/null
@@ -1,56 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-paper-fab.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
-The bot does some handling of markdown. Please file a bug if it does the wrong
-thing! https://github.com/PolymerLabs/tedium/issues
-
--->
-
-[![Build status](https://travis-ci.org/PolymerElements/paper-fab.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-fab)
-
-_[Demo and API docs](https://elements.polymer-project.org/elements/paper-fab)_
-
-
-##&lt;paper-fab&gt;
-
-Material design: [Floating Action Button](https://www.google.com/design/spec/components/buttons-floating-action-button.html)
-
-`paper-fab` is a floating action button. It contains an image placed in the center and
-comes in two sizes: regular size and a smaller size by applying the attribute `mini`. When
-the user touches the button, a ripple effect emanates from the center of the button.
-
-You may import `iron-icons` to use with this element, or provide a URL to a custom icon.
-See `iron-iconset` for more information about how to use a custom icon set.
-
-Example:
-
-```html
-<link href="path/to/iron-icons/iron-icons.html" rel="import">
-
-<paper-fab icon="add"></paper-fab>
-<paper-fab mini icon="favorite"></paper-fab>
-<paper-fab src="star.png"></paper-fab>
-```
-
-### Styling
-
-The following custom properties and mixins are available for styling:
-
-| Custom property | Description | Default |
-| --- | --- | --- |
-| `--paper-fab-background` | The background color of the button | `--accent-color` |
-| `--paper-fab-keyboard-focus-background` | The background color of the button when focused | `--paper-pink-900` |
-| `--paper-fab-disabled-background` | The background color of the button when it's disabled | `--paper-grey-300` |
-| `--paper-fab-disabled-text` | The text color of the button when it's disabled | `--paper-grey-500` |
-| `--paper-fab` | Mixin applied to the button | `{}` |
-| `--paper-fab-mini` | Mixin applied to a mini button | `{}` |
-| `--paper-fab-disabled` | Mixin applied to a disabled button | `{}` |
-| `--paper-fab-iron-icon` | Mixin applied to the iron-icon within the button | `{}` |
-
-
diff --git a/third_party/polymer/v1_0/components-chromium/paper-fab/index.html b/third_party/polymer/v1_0/components-chromium/paper-fab/index.html
deleted file mode 100644
index b0ced26a..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-fab/index.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-<html>
-<head>
-
-  <title>paper-fab</title>
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-</head>
-<body>
-
-  <iron-component-page></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-header-panel/.bower.json b/third_party/polymer/v1_0/components-chromium/paper-header-panel/.bower.json
deleted file mode 100644
index b21c460..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-header-panel/.bower.json
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-  "name": "paper-header-panel",
-  "version": "1.1.4",
-  "description": "A header and content wrapper for layout with headers",
-  "authors": [
-    "The Polymer Authors"
-  ],
-  "keywords": [
-    "web-components",
-    "polymer",
-    "layout"
-  ],
-  "main": "paper-header-panel.html",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/paper-header-panel.git"
-  },
-  "private": true,
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "homepage": "https://github.com/PolymerElements/paper-header-panel",
-  "ignore": [],
-  "dependencies": {
-    "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
-    "polymer": "Polymer/polymer#^1.1.0"
-  },
-  "devDependencies": {
-    "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
-    "paper-styles": "PolymerElements/paper-styles#^1.0.0",
-    "test-fixture": "PolymerElements/test-fixture#^1.0.0",
-    "web-component-tester": "^4.0.0",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
-  },
-  "_release": "1.1.4",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.1.4",
-    "commit": "46e0a6218b3f984855dde6e52c2177157801718a"
-  },
-  "_source": "git://github.com/PolymerElements/paper-header-panel.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/paper-header-panel"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/paper-header-panel/.gitignore b/third_party/polymer/v1_0/components-chromium/paper-header-panel/.gitignore
deleted file mode 100644
index fbe05fc..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-header-panel/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components/
diff --git a/third_party/polymer/v1_0/components-chromium/paper-header-panel/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/paper-header-panel/CONTRIBUTING.md
deleted file mode 100644
index f147978a..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-header-panel/CONTRIBUTING.md
+++ /dev/null
@@ -1,77 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
-
-You can however override the jsbin link with one that's customized to this
-specific element:
-
-jsbin=https://jsbin.com/cagaye/edit?html,output
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, fixes #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/paper-header-panel/README.md b/third_party/polymer/v1_0/components-chromium/paper-header-panel/README.md
deleted file mode 100644
index f86c112..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-header-panel/README.md
+++ /dev/null
@@ -1,151 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-paper-header-panel.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
-The bot does some handling of markdown. Please file a bug if it does the wrong
-thing! https://github.com/PolymerLabs/tedium/issues
-
--->
-
-[![Build status](https://travis-ci.org/PolymerElements/paper-header-panel.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-header-panel)
-
-_[Demo and API docs](https://elements.polymer-project.org/elements/paper-header-panel)_
-
-
-##&lt;paper-header-panel&gt;
-
-`paper-header-panel` contains a header section and a content panel section.
-
-__Important:__ The `paper-header-panel` will not display if its parent does not have a height.
-
-Using layout classes, you can make the `paper-header-panel` fill the screen
-
-```html
-<body class="fullbleed layout vertical">
-  <paper-header-panel class="flex">
-    <paper-toolbar>
-      <div>Hello World!</div>
-    </paper-toolbar>
-  </paper-header-panel>
-</body>
-```
-
-Special support is provided for scrolling modes when one uses a paper-toolbar or equivalent for the
-header section.
-
-Example:
-
-```html
-<paper-header-panel>
-  <paper-toolbar>Header</paper-toolbar>
-  <div>Content goes here...</div>
-</paper-header-panel>
-```
-
-If you want to use other than `paper-toolbar` for the header, add `paper-header` class to that
-element.
-
-Example:
-
-```html
-<paper-header-panel>
-  <div class="paper-header">Header</div>
-  <div>Content goes here...</div>
-</paper-header-panel>
-```
-
-To have the content fit to the main area, use the `fit` class.
-
-```html
-<paper-header-panel>
-  <div class="paper-header">standard</div>
-  <div class="fit">content fits 100% below the header</div>
-</paper-header-panel>
-```
-
-### Modes
-
-Controls header and scrolling behavior. Options are `standard`, `seamed`, `waterfall`, `waterfall-tall`, `scroll` and
-`cover`. Default is `standard`.
-
-| Mode | Description |
-| --- | --- |
-| `standard` | The header is a step above the panel. The header will consume the panel at the point of entry, preventing it from passing through to the opposite side. |
-| `seamed` | The header is presented as seamed with the panel. |
-| `waterfall` | Similar to standard mode, but header is initially presented as seamed with panel, but then separates to form the step. |
-| `waterfall-tall` | The header is initially taller (`tall` class is added to the header). As the user scrolls, the header separates (forming an edge) while condensing (`tall` class is removed from the header). |
-| `scroll` | The header keeps its seam with the panel, and is pushed off screen. |
-| `cover` | The panel covers the whole `paper-header-panel` including the header. This allows user to style the panel in such a way that the panel is partially covering the header. |
-
-Example:
-
-```html
-<paper-header-panel mode="waterfall">
-  <div class="paper-header">standard</div>
-  <div class="content fit">content fits 100% below the header</div>
-</paper-header-panel>
-```
-
-### Styling
-
-To change the shadow that shows up underneath the header:
-
-```css
-paper-header-panel {
-  --paper-header-panel-shadow: {
-      height: 6px;
-      bottom: -6px;
-      box-shadow: inset 0px 5px 6px -3px rgba(0, 0, 0, 0.4);
-  };
-}
-```
-
-To change the panel container in different modes:
-
-```css
-paper-header-panel {
-  --paper-header-panel-standard-container: {
-    border: 1px solid gray;
-  };
-
-  --paper-header-panel-seamed-container: {
-    border: 1px solid gray;
-  };
-
-  --paper-header-panel-waterfall-container: {
-    border: 1px solid gray;
-  };
-
-  --paper-header-panel-waterfall-tall-container: {
-    border: 1px solid gray;
-  };
-
-  --paper-header-panel-scroll-container: {
-    border: 1px solid gray;
-  };
-
-  --paper-header-panel-cover-container: {
-    border: 1px solid gray;
-  };
-}
-```
-
-The following custom properties and mixins are available for styling:
-
-| Custom property | Description | Default |
-| --- | --- | --- |
-| `--paper-header-panel` | Mixin applied to the element | `{}` |
-| `--paper-header-panel-body` | Mixin applied to the element's body (i.e. everything below the toolbar) | `{}` |
-| `--paper-header-panel-scroll-container` | Mixin applied to the container when in scroll mode | `{}` |
-| `--paper-header-panel-cover-container` | Mixin applied to the container when in cover mode | `{}` |
-| `--paper-header-panel-standard-container` | Mixin applied to the container when in standard mode | `{}` |
-| `--paper-header-panel-seamed-container` | Mixin applied to the container when in seamed mode | `{}` |
-| `--paper-header-panel-waterfall-container` | Mixin applied to the container when in waterfall mode | `{}` |
-| `--paper-header-panel-waterfall-tall-container` | Mixin applied to the container when in tall waterfall mode | `{}` |
-
-
diff --git a/third_party/polymer/v1_0/components-chromium/paper-header-panel/hero.svg b/third_party/polymer/v1_0/components-chromium/paper-header-panel/hero.svg
deleted file mode 100644
index 60c7488..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-header-panel/hero.svg
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 225 126" enable-background="new 0 0 225 126" xml:space="preserve">
-<g id="background" display="none">
-	<rect display="inline" fill="#B0BEC5" width="225" height="126"/>
-</g>
-<g id="label">
-</g>
-<g id="art">
-	<path d="M163,102H73V24h90V102z M75,100h86V26H75V100z"/>
-	<g>
-		<polygon points="74,59.6 74,62.5 74.5,63 77.4,63 		"/>
-		<polygon points="74,51.9 74,54.7 82.3,63 85.1,63 		"/>
-		<polygon points="74,44.1 74,46.9 90.1,63 92.9,63 		"/>
-		<polygon points="74,36.3 74,39.2 97.8,63 100.7,63 		"/>
-		<polygon points="74,28.6 74,31.4 105.6,63 108.4,63 		"/>
-		<polygon points="78.2,25 75.4,25 113.4,63 116.2,63 		"/>
-		<polygon points="86,25 83.1,25 121.1,63 124,63 		"/>
-		<polygon points="93.7,25 90.9,25 128.9,63 131.7,63 		"/>
-		<polygon points="101.5,25 98.7,25 136.7,63 139.5,63 		"/>
-		<polygon points="109.2,25 106.4,25 144.4,63 147.2,63 		"/>
-		<polygon points="117,25 114.2,25 152.2,63 155,63 		"/>
-		<polygon points="124.8,25 122,25 160,63 162,63 162,62.2 		"/>
-		<polygon points="132.5,25 129.7,25 162,57.3 162,54.5 		"/>
-		<polygon points="140.3,25 137.5,25 162,49.5 162,46.7 		"/>
-		<polygon points="148.1,25 145.2,25 162,41.8 162,38.9 		"/>
-		<polygon points="155.8,25 153,25 162,34 162,31.2 		"/>
-		<polygon points="162,26.2 162,25 160.8,25 		"/>
-	</g>
-	<rect x="74" y="62" width="88" height="2"/>
-	<g id="ic_x5F_add_x0D_">
-	</g>
-</g>
-<g id="Guides">
-</g>
-</svg>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-header-panel/index.html b/third_party/polymer/v1_0/components-chromium/paper-header-panel/index.html
deleted file mode 100644
index 8d0771c5..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-header-panel/index.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-<html>
-  <head>
-
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
-
-    <title>paper-header-panel</title>
-
-    <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-
-    <link rel="import" href="../polymer/polymer.html">
-    <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-    <style>
-      body {
-        margin: 16px;
-      }
-    </style>
-
-  </head>
-  <body>
-
-    <iron-component-page></iron-component-page>
-
-  </body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-icon-button/.bower.json b/third_party/polymer/v1_0/components-chromium/paper-icon-button/.bower.json
deleted file mode 100644
index 42e403d..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-icon-button/.bower.json
+++ /dev/null
@@ -1,49 +0,0 @@
-{
-  "name": "paper-icon-button",
-  "private": true,
-  "version": "1.0.6",
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "description": "A material design icon button",
-  "main": "paper-icon-button.html",
-  "author": [
-    "The Polymer Authors"
-  ],
-  "keywords": [
-    "web-components",
-    "polymer",
-    "button",
-    "icon",
-    "control"
-  ],
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/paper-icon-button.git"
-  },
-  "dependencies": {
-    "polymer": "Polymer/polymer#^1.1.0",
-    "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
-    "iron-icon": "PolymerElements/iron-icon#^1.0.0",
-    "iron-icons": "PolymerElements/iron-icons#^1.0.0",
-    "paper-behaviors": "PolymerElements/paper-behaviors#^1.0.0",
-    "paper-ripple": "PolymerElements/paper-ripple#^1.0.0",
-    "paper-styles": "PolymerElements/paper-styles#^1.0.0"
-  },
-  "devDependencies": {
-    "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
-    "web-component-tester": "polymer/web-component-tester#^3.4.0",
-    "test-fixture": "PolymerElements/test-fixture#^1.0.0",
-    "iron-component-page": "PolymerElements/iron-component-page#^1.0.0"
-  },
-  "ignore": [],
-  "homepage": "https://github.com/PolymerElements/paper-icon-button",
-  "_release": "1.0.6",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.0.6",
-    "commit": "35347d81939093cd2abe2783ac1b17fa57b7b303"
-  },
-  "_source": "git://github.com/PolymerElements/paper-icon-button.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/paper-icon-button"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/paper-icon-button/.gitignore b/third_party/polymer/v1_0/components-chromium/paper-icon-button/.gitignore
deleted file mode 100644
index 8d4ae25..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-icon-button/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components
diff --git a/third_party/polymer/v1_0/components-chromium/paper-icon-button/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/paper-icon-button/CONTRIBUTING.md
deleted file mode 100644
index 7b101415..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-icon-button/CONTRIBUTING.md
+++ /dev/null
@@ -1,72 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [http://jsbin.com/cagaye](http://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/paper-icon-button/README.md b/third_party/polymer/v1_0/components-chromium/paper-icon-button/README.md
deleted file mode 100644
index 1288853..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-icon-button/README.md
+++ /dev/null
@@ -1,61 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-paper-icon-button.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
--->
-
-[![Build Status](https://travis-ci.org/PolymerElements/paper-icon-button.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-icon-button)
-
-_[Demo and API Docs](https://elements.polymer-project.org/elements/paper-icon-button)_
-
-
-##&lt;paper-icon-button&gt;
-
-
-Material design: [Icon toggles](https://www.google.com/design/spec/components/buttons.html#buttons-toggle-buttons)
-
-`paper-icon-button` is a button with an image placed at the center. When the user touches
-the button, a ripple effect emanates from the center of the button.
-
-`paper-icon-button` includes a default icon set.  Use `icon` to specify which icon
-from the icon set to use.
-
-    <paper-icon-button icon="menu"></paper-icon-button>
-
-See [`iron-iconset`](#iron-iconset) for more information about
-how to use a custom icon set.
-
-Example:
-
-    <link href="path/to/iron-icons/iron-icons.html" rel="import">
-
-    <paper-icon-button icon="favorite"></paper-icon-button>
-    <paper-icon-button src="star.png"></paper-icon-button>
-
-### Styling
-
-Style the button with CSS as you would a normal DOM element. If you are using the icons
-provided by `iron-icons`, they will inherit the foreground color of the button.
-
-    /* make a red "favorite" button */
-    <paper-icon-button icon="favorite" style="color: red;"></paper-icon-button>
-
-By default, the ripple is the same color as the foreground at 25% opacity. You may
-customize the color using the `--paper-icon-button-ink-color` custom property.
-
-The following custom properties and mixins are available for styling:
-
-Custom property | Description | Default
-----------------|-------------|----------
-`--paper-icon-button-disabled-text` | The color of the disabled button | `--disabled-text-color`
-`--paper-icon-button-ink-color` | Selected/focus ripple color | `--primary-text-color`
-`--paper-icon-button` | Mixin for a button | `{}`
-`--paper-icon-button-disabled` | Mixin for a disabled button | `{}`
-`--paper-icon-button-hover` | Mixin for button on hover | `{}`
-
-
diff --git a/third_party/polymer/v1_0/components-chromium/paper-icon-button/index.html b/third_party/polymer/v1_0/components-chromium/paper-icon-button/index.html
deleted file mode 100644
index 78f963c..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-icon-button/index.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-<html>
-<head>
-
-  <script src="../webcomponentsjs/webcomponents.js"></script>
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-</head>
-<body>
-
-  <iron-component-page></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-input/.bower.json b/third_party/polymer/v1_0/components-chromium/paper-input/.bower.json
deleted file mode 100644
index 2da92b9..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-input/.bower.json
+++ /dev/null
@@ -1,59 +0,0 @@
-{
-  "name": "paper-input",
-  "version": "1.1.8",
-  "description": "Material design text fields",
-  "authors": [
-    "The Polymer Authors"
-  ],
-  "keywords": [
-    "web-components",
-    "polymer",
-    "input"
-  ],
-  "main": [
-    "paper-input.html",
-    "paper-textarea.html",
-    "paper-input-behavior.html",
-    "paper-input-container.html",
-    "paper-input-error.html",
-    "paper-input-addon-behavior.html",
-    "paper-input-char-counter.html"
-  ],
-  "private": true,
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/paper-input.git"
-  },
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "homepage": "https://github.com/PolymerElements/paper-input",
-  "ignore": [],
-  "dependencies": {
-    "polymer": "Polymer/polymer#^1.2.0",
-    "iron-autogrow-textarea": "PolymerElements/iron-autogrow-textarea#^1.0.0",
-    "iron-behaviors": "PolymerElements/iron-behaviors#^1.0.0",
-    "iron-form-element-behavior": "PolymerElements/iron-form-element-behavior#^1.0.0",
-    "iron-input": "PolymerElements/iron-input#^1.0.0",
-    "paper-styles": "PolymerElements/paper-styles#^1.1.0",
-    "iron-a11y-keys-behavior": "PolymerElements/iron-a11y-keys-behavior#^1.0.0"
-  },
-  "devDependencies": {
-    "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
-    "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
-    "iron-icon": "PolymerElements/iron-icon#^1.0.0",
-    "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
-    "iron-validator-behavior": "PolymerElements/iron-validator-behavior#^1.0.0",
-    "paper-icon-button": "PolymerElements/paper-icon-button#^1.0.0",
-    "test-fixture": "PolymerElements/test-fixture#^1.0.0",
-    "web-component-tester": "^4.0.0",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
-  },
-  "_release": "1.1.8",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.1.8",
-    "commit": "96efaa0f707870d5a5999120467d67b8da806704"
-  },
-  "_source": "git://github.com/PolymerElements/paper-input.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/paper-input"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/paper-input/.gitignore b/third_party/polymer/v1_0/components-chromium/paper-input/.gitignore
deleted file mode 100644
index 8d4ae25..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-input/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components
diff --git a/third_party/polymer/v1_0/components-chromium/paper-input/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/paper-input/CONTRIBUTING.md
deleted file mode 100644
index f147978a..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-input/CONTRIBUTING.md
+++ /dev/null
@@ -1,77 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
-
-You can however override the jsbin link with one that's customized to this
-specific element:
-
-jsbin=https://jsbin.com/cagaye/edit?html,output
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, fixes #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/paper-input/README.md b/third_party/polymer/v1_0/components-chromium/paper-input/README.md
deleted file mode 100644
index 099d2a3..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-input/README.md
+++ /dev/null
@@ -1,247 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-paper-input-addon-behavior.html  paper-input-behavior.html  paper-input-char-counter.html  paper-input-container.html  paper-input-error.html  paper-input.html  paper-textarea.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
-The bot does some handling of markdown. Please file a bug if it does the wrong
-thing! https://github.com/PolymerLabs/tedium/issues
-
--->
-
-[![Build status](https://travis-ci.org/PolymerElements/paper-input.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-input)
-
-_[Demo and API docs](https://elements.polymer-project.org/elements/paper-input)_
-
-
-##&lt;paper-input&gt;
-
-Material design: [Text fields](https://www.google.com/design/spec/components/text-fields.html)
-
-`<paper-input>` is a single-line text field with Material Design styling.
-
-```html
-<paper-input label="Input label"></paper-input>
-```
-
-It may include an optional error message or character counter.
-
-```html
-<paper-input error-message="Invalid input!" label="Input label"></paper-input>
-<paper-input char-counter label="Input label"></paper-input>
-```
-
-It can also include custom prefix or suffix elements, which are displayed
-before or after the text input itself. In order for an element to be
-considered as a prefix, it must have the `prefix` attribute (and similarly
-for `suffix`).
-
-```html
-<paper-input label="total">
-  <div prefix>$</div>
-  <paper-icon-button suffix icon="clear"></paper-icon-button>
-</paper-input>
-```
-
-A `paper-input` can use the native `type=search` or `type=file` features.
-However, since we can't control the native styling of the input (search icon,
-file button, date placeholder, etc.), in these cases the label will be
-automatically floated. The `placeholder` attribute can still be used for
-additional informational text.
-
-```html
-<paper-input label="search!" type="search"
-    placeholder="search for cats" autosave="test" results="5">
-</paper-input>
-```
-
-See `Polymer.PaperInputBehavior` for more API docs.
-
-### Focus
-
-To focus a paper-input, you can call the native `focus()` method as long as the
-paper input has a tab index.
-
-### Styling
-
-See `Polymer.PaperInputContainer` for a list of custom properties used to
-style this element.
-
-
-
-##&lt;paper-input-char-counter&gt;
-
-`<paper-input-char-counter>` is a character counter for use with `<paper-input-container>`. It
-shows the number of characters entered in the input and the max length if it is specified.
-
-```html
-<paper-input-container>
-  <input is="iron-input" maxlength="20">
-  <paper-input-char-counter></paper-input-char-counter>
-</paper-input-container>
-```
-
-### Styling
-
-The following mixin is available for styling:
-
-| Custom property | Description | Default |
-| --- | --- | --- |
-| `--paper-input-char-counter` | Mixin applied to the element | `{}` |
-
-
-
-##&lt;paper-input-container&gt;
-
-`<paper-input-container>` is a container for a `<label>`, an `<input is="iron-input">` or
-`<iron-autogrow-textarea>` and optional add-on elements such as an error message or character
-counter, used to implement Material Design text fields.
-
-For example:
-
-```html
-<paper-input-container>
-  <label>Your name</label>
-  <input is="iron-input">
-</paper-input-container>
-```
-
-### Listening for input changes
-
-By default, it listens for changes on the `bind-value` attribute on its children nodes and perform
-tasks such as auto-validating and label styling when the `bind-value` changes. You can configure
-the attribute it listens to with the `attr-for-value` attribute.
-
-### Using a custom input element
-
-You can use a custom input element in a `<paper-input-container>`, for example to implement a
-compound input field like a social security number input. The custom input element should have the
-`paper-input-input` class, have a `notify:true` value property and optionally implements
-`Polymer.IronValidatableBehavior` if it is validatable.
-
-```html
-<paper-input-container attr-for-value="ssn-value">
-  <label>Social security number</label>
-  <ssn-input class="paper-input-input"></ssn-input>
-</paper-input-container>
-```
-
-### Validation
-
-If the `auto-validate` attribute is set, the input container will validate the input and update
-the container styling when the input value changes.
-
-### Add-ons
-
-Add-ons are child elements of a `<paper-input-container>` with the `add-on` attribute and
-implements the `Polymer.PaperInputAddonBehavior` behavior. They are notified when the input value
-or validity changes, and may implement functionality such as error messages or character counters.
-They appear at the bottom of the input.
-
-### Prefixes and suffixes
-
-These are child elements of a `<paper-input-container>` with the `prefix`
-or `suffix` attribute, and are displayed inline with the input, before or after.
-
-```html
-<paper-input-container>
-  <div prefix>$</div>
-  <label>Total</label>
-  <input is="iron-input">
-  <paper-icon-button suffix icon="clear"></paper-icon-button>
-</paper-input-container>
-```
-
-### Styling
-
-The following custom properties and mixins are available for styling:
-
-| Custom property | Description | Default |
-| --- | --- | --- |
-| `--paper-input-container-color` | Label and underline color when the input is not focused | `--secondary-text-color` |
-| `--paper-input-container-focus-color` | Label and underline color when the input is focused | `--primary-color` |
-| `--paper-input-container-invalid-color` | Label and underline color when the input is is invalid | `--error-color` |
-| `--paper-input-container-input-color` | Input foreground color | `--primary-text-color` |
-| `--paper-input-container` | Mixin applied to the container | `{}` |
-| `--paper-input-container-disabled` | Mixin applied to the container when it's disabled | `{}` |
-| `--paper-input-container-label` | Mixin applied to the label | `{}` |
-| `--paper-input-container-label-focus` | Mixin applied to the label when the input is focused | `{}` |
-| `--paper-input-container-label-floating` | Mixin applied to the label when floating | `{}` |
-| `--paper-input-container-input` | Mixin applied to the input | `{}` |
-| `--paper-input-container-underline` | Mixin applied to the underline | `{}` |
-| `--paper-input-container-underline-focus` | Mixin applied to the underline when the input is focused | `{}` |
-| `--paper-input-container-underline-disabled` | Mixin applied to the underline when the input is disabled | `{}` |
-| `--paper-input-prefix` | Mixin applied to the input prefix | `{}` |
-| `--paper-input-suffix` | Mixin applied to the input suffix | `{}` |
-
-This element is `display:block` by default, but you can set the `inline` attribute to make it
-`display:inline-block`.
-
-
-
-##&lt;paper-input-error&gt;
-
-`<paper-input-error>` is an error message for use with `<paper-input-container>`. The error is
-displayed when the `<paper-input-container>` is `invalid`.
-
-```html
-<paper-input-container>
-  <input is="iron-input" pattern="[0-9]*">
-  <paper-input-error>Only numbers are allowed!</paper-input-error>
-</paper-input-container>
-```
-
-### Styling
-
-The following custom properties and mixins are available for styling:
-
-| Custom property | Description | Default |
-| --- | --- | --- |
-| `--paper-input-container-invalid-color` | The foreground color of the error | `--error-color` |
-| `--paper-input-error` | Mixin applied to the error | `{}` |
-
-
-
-##&lt;paper-textarea&gt;
-
-`<paper-textarea>` is a multi-line text field with Material Design styling.
-
-```html
-<paper-textarea label="Textarea label"></paper-textarea>
-```
-
-See `Polymer.PaperInputBehavior` for more API docs.
-
-### Validation
-
-Currently only `required` and `maxlength` validation is supported.
-
-### Styling
-
-See `Polymer.PaperInputContainer` for a list of custom properties used to
-style this element.
-
-
-
-##Polymer.PaperInputAddonBehavior
-
-Use `Polymer.PaperInputAddonBehavior` to implement an add-on for `<paper-input-container>`. A
-add-on appears below the input, and may display information based on the input value and
-validity such as a character counter or an error message.
-
-
-
-##Polymer.PaperInputBehavior
-
-Use `Polymer.PaperInputBehavior` to implement inputs with `<paper-input-container>`. This
-behavior is implemented by `<paper-input>`. It exposes a number of properties from
-`<paper-input-container>` and `<input is="iron-input">` and they should be bound in your
-template.
-
-The input element can be accessed by the `inputElement` property if you need to access
-properties or methods that are not exposed.
-
-
diff --git a/third_party/polymer/v1_0/components-chromium/paper-input/hero.svg b/third_party/polymer/v1_0/components-chromium/paper-input/hero.svg
deleted file mode 100644
index 146ffea..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-input/hero.svg
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 225 126" enable-background="new 0 0 225 126" xml:space="preserve">
-<g id="background" display="none">
-	<rect display="inline" fill="#B0BEC5" width="225" height="126"/>
-</g>
-<g id="label">
-</g>
-<g id="art">
-	<rect x="49" y="53" width="2" height="18"/>
-	<path d="M188,78H37V44h151V78z M39,76h147V46H39V76z"/>
-	<g id="ic_x5F_add_x0D_">
-	</g>
-</g>
-<g id="Guides">
-</g>
-</svg>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-input/index.html b/third_party/polymer/v1_0/components-chromium/paper-input/index.html
deleted file mode 100644
index e6c9fadc..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-input/index.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-<html>
-<head>
-
-  <meta charset="utf-8">
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-
-  <title>paper-input</title>
-
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-</head>
-<body>
-
-  <iron-component-page src="all-imports.html"></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-item/.bower.json b/third_party/polymer/v1_0/components-chromium/paper-item/.bower.json
deleted file mode 100644
index c341588..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-item/.bower.json
+++ /dev/null
@@ -1,52 +0,0 @@
-{
-  "name": "paper-item",
-  "version": "1.1.4",
-  "description": "A material-design styled list item",
-  "authors": [
-    "The Polymer Authors"
-  ],
-  "keywords": [
-    "web-components",
-    "polymer",
-    "item"
-  ],
-  "main": [
-    "paper-item.html",
-    "paper-icon-item.html",
-    "paper-item-body.html"
-  ],
-  "private": true,
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/paper-item"
-  },
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "homepage": "https://github.com/PolymerElements/paper-item",
-  "ignore": [],
-  "dependencies": {
-    "polymer": "Polymer/polymer#^1.1.0",
-    "paper-styles": "PolymerElements/paper-styles#^1.0.0",
-    "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
-    "iron-behaviors": "polymerelements/iron-behaviors#^1.0.0"
-  },
-  "devDependencies": {
-    "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
-    "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
-    "iron-icon": "PolymerElements/iron-icon#^1.0.0",
-    "iron-icons": "PolymerElements/iron-icons#^1.0.0",
-    "paper-icon-button": "PolymerElements/paper-icon-button#^1.0.0",
-    "test-fixture": "PolymerElements/test-fixture#^1.0.0",
-    "web-component-tester": "^4.0.0",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
-    "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0"
-  },
-  "_release": "1.1.4",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.1.4",
-    "commit": "5dcf21d5f7c13bafa24122c73aac28bd86213191"
-  },
-  "_source": "git://github.com/PolymerElements/paper-item.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/paper-item"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/paper-item/.gitignore b/third_party/polymer/v1_0/components-chromium/paper-item/.gitignore
deleted file mode 100644
index fbe05fc..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-item/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components/
diff --git a/third_party/polymer/v1_0/components-chromium/paper-item/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/paper-item/CONTRIBUTING.md
deleted file mode 100644
index f147978a..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-item/CONTRIBUTING.md
+++ /dev/null
@@ -1,77 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
-
-You can however override the jsbin link with one that's customized to this
-specific element:
-
-jsbin=https://jsbin.com/cagaye/edit?html,output
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, fixes #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/paper-item/README.md b/third_party/polymer/v1_0/components-chromium/paper-item/README.md
deleted file mode 100644
index ea5c50a2..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-item/README.md
+++ /dev/null
@@ -1,139 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-paper-icon-item.html  paper-item-behavior.html  paper-item-body.html  paper-item.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
-The bot does some handling of markdown. Please file a bug if it does the wrong
-thing! https://github.com/PolymerLabs/tedium/issues
-
--->
-
-[![Build status](https://travis-ci.org/PolymerElements/paper-item.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-item)
-
-_[Demo and API docs](https://elements.polymer-project.org/elements/paper-item)_
-
-
-##&lt;paper-item&gt;
-
-Material design: [Lists](https://www.google.com/design/spec/components/lists.html)
-
-`<paper-item>` is an interactive list item. By default, it is a horizontal flexbox.
-
-```html
-<paper-item>Item</paper-item>
-```
-
-Use this element with `<paper-item-body>` to make Material Design styled two-line and three-line
-items.
-
-```html
-<paper-item>
-  <paper-item-body two-line>
-    <div>Show your status</div>
-    <div secondary>Your status is visible to everyone</div>
-  </paper-item-body>
-  <iron-icon icon="warning"></iron-icon>
-</paper-item>
-```
-
-### Styling
-
-The following custom properties and mixins are available for styling:
-
-| Custom property | Description | Default |
-| --- | --- | --- |
-| `--paper-item-min-height` | Minimum height of the item | `48px` |
-| `--paper-item` | Mixin applied to the item | `{}` |
-| `--paper-item-selected-weight` | The font weight of a selected item | `bold` |
-| `--paper-item-selected` | Mixin applied to selected paper-items | `{}` |
-| `--paper-item-disabled-color` | The color for disabled paper-items | `--disabled-text-color` |
-| `--paper-item-disabled` | Mixin applied to disabled paper-items | `{}` |
-| `--paper-item-focused` | Mixin applied to focused paper-items | `{}` |
-| `--paper-item-focused-before` | Mixin applied to :before focused paper-items | `{}` |
-
-### Accessibility
-
-This element has `role="listitem"` by default. Depending on usage, it may be more appropriate to set
-`role="menuitem"`, `role="menuitemcheckbox"` or `role="menuitemradio"`.
-
-```html
-<paper-item role="menuitemcheckbox">
-  <paper-item-body>
-    Show your status
-  </paper-item-body>
-  <paper-checkbox></paper-checkbox>
-</paper-item>
-```
-
-
-
-##&lt;paper-icon-item&gt;
-
-`<paper-icon-item>` is a convenience element to make an item with icon. It is an interactive list
-item with a fixed-width icon area, according to Material Design. This is useful if the icons are of
-varying widths, but you want the item bodies to line up. Use this like a `<paper-item>`. The child
-node with the attribute `item-icon` is placed in the icon area.
-
-```html
-<paper-icon-item>
-  <iron-icon icon="favorite" item-icon></iron-icon>
-  Favorite
-</paper-icon-item>
-<paper-icon-item>
-  <div class="avatar" item-icon></div>
-  Avatar
-</paper-icon-item>
-```
-
-### Styling
-
-The following custom properties and mixins are available for styling:
-
-| Custom property | Description | Default |
-| --- | --- | --- |
-| `--paper-item-icon-width` | Width of the icon area | `56px` |
-| `--paper-item-icon` | Mixin applied to the icon area | `{}` |
-| `--paper-icon-item` | Mixin applied to the item | `{}` |
-| `--paper-item-selected-weight` | The font weight of a selected item | `bold` |
-| `--paper-item-selected` | Mixin applied to selected paper-items | `{}` |
-| `--paper-item-disabled-color` | The color for disabled paper-items | `--disabled-text-color` |
-| `--paper-item-disabled` | Mixin applied to disabled paper-items | `{}` |
-| `--paper-item-focused` | Mixin applied to focused paper-items | `{}` |
-| `--paper-item-focused-before` | Mixin applied to :before focused paper-items | `{}` |
-
-
-
-##&lt;paper-item-body&gt;
-
-Use `<paper-item-body>` in a `<paper-item>` or `<paper-icon-item>` to make two- or
-three- line items. It is a flex item that is a vertical flexbox.
-
-```html
-<paper-item>
-  <paper-item-body two-line>
-    <div>Show your status</div>
-    <div secondary>Your status is visible to everyone</div>
-  </paper-item-body>
-</paper-item>
-```
-
-The child elements with the `secondary` attribute is given secondary text styling.
-
-### Styling
-
-The following custom properties and mixins are available for styling:
-
-| Custom property | Description | Default |
-| --- | --- | --- |
-| `--paper-item-body-two-line-min-height` | Minimum height of a two-line item | `72px` |
-| `--paper-item-body-three-line-min-height` | Minimum height of a three-line item | `88px` |
-| `--paper-item-body-secondary-color` | Foreground color for the `secondary` area | `--secondary-text-color` |
-| `--paper-item-body-secondary` | Mixin applied to the `secondary` area | `{}` |
-
-
-
-<!-- No docs for Polymer.PaperItemBehavior found. -->
diff --git a/third_party/polymer/v1_0/components-chromium/paper-item/index.html b/third_party/polymer/v1_0/components-chromium/paper-item/index.html
deleted file mode 100644
index b409ed1..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-item/index.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-<!doctype html>
-<html>
-<head>
-
-  <meta charset="utf-8">
-  <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
-
-  <title>paper-item</title>
-
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-
-  <link rel="import" href="../polymer/polymer.html">
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-</head>
-<body>
-
-  <iron-component-page src="all-imports.html"></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-listbox/.bower.json b/third_party/polymer/v1_0/components-chromium/paper-listbox/.bower.json
deleted file mode 100644
index 779b9e7..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-listbox/.bower.json
+++ /dev/null
@@ -1,47 +0,0 @@
-{
-  "name": "paper-listbox",
-  "version": "1.1.2",
-  "description": "Implements an accessible material design listbox",
-  "authors": "The Polymer Authors",
-  "keywords": [
-    "web-components",
-    "polymer",
-    "listbox"
-  ],
-  "main": [
-    "paper-listbox.html",
-    "paper-sublistbox.html"
-  ],
-  "private": true,
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/paper-listbox"
-  },
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "homepage": "https://github.com/PolymerElements/paper-listbox",
-  "ignore": [],
-  "dependencies": {
-    "polymer": "Polymer/polymer#^1.1.0",
-    "iron-behaviors": "PolymerElements/iron-behaviors#^1.0.0",
-    "iron-collapse": "PolymerElements/iron-collapse#^1.0.0",
-    "iron-menu-behavior": "PolymerElements/iron-menu-behavior#^1.0.0",
-    "paper-styles": "PolymerElements/paper-styles#^1.0.0"
-  },
-  "devDependencies": {
-    "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
-    "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
-    "paper-item": "PolymerElements/paper-item#^1.0.0",
-    "test-fixture": "PolymerElements/test-fixture#^1.0.0",
-    "web-component-tester": "Polymer/web-component-tester#^3.4.0",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
-  },
-  "_release": "1.1.2",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.1.2",
-    "commit": "b0fde50f57db3e8e4926e9d046be9d3c159a2bff"
-  },
-  "_source": "git://github.com/polymerelements/paper-listbox.git",
-  "_target": "~1.1.2",
-  "_originalSource": "polymerelements/paper-listbox"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/paper-listbox/.gitignore b/third_party/polymer/v1_0/components-chromium/paper-listbox/.gitignore
deleted file mode 100644
index fbe05fc..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-listbox/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components/
diff --git a/third_party/polymer/v1_0/components-chromium/paper-listbox/README.md b/third_party/polymer/v1_0/components-chromium/paper-listbox/README.md
deleted file mode 100644
index 95f0106e..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-listbox/README.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# paper-listbox
-
-![Build status](https://api.travis-ci.org/PolymerElements/paper-listbox.svg?branch=master)
-
-`<paper-listbox>` implements an accessible listbox control with Material Design styling.
diff --git a/third_party/polymer/v1_0/components-chromium/paper-listbox/hero.svg b/third_party/polymer/v1_0/components-chromium/paper-listbox/hero.svg
deleted file mode 100644
index 91af1f60..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-listbox/hero.svg
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 225 126" enable-background="new 0 0 225 126" xml:space="preserve">
-<g id="background" display="none">
-	<rect display="inline" fill="#B0BEC5" width="225" height="126"/>
-</g>
-<g id="label">
-</g>
-<g id="art">
-	<g>
-		<circle cx="86.5" cy="39" r="4"/>
-		<path d="M138,44c-2,0-3.6-2.4-4.6-4.6c-1.1-2.1-1.7-3.4-3-3.4s-2,1.3-3,3.4c-1.1,2.1-2.2,4.6-4.9,4.6c-2.6,0-3.8-2.4-4.9-4.6
-			c-1.1-2.1-1.8-3.4-3.1-3.4c-1.3,0-2,1.3-3.1,3.4c-1.1,2.1-2.3,4.6-4.9,4.6c-2.6,0-4.1-2.4-5.1-4.6C100.3,37.3,100,36,98,36v-2
-			c3,0,4.1,2.4,5.1,4.6c1.1,2.1,1.9,3.4,3.2,3.4c1.3,0,2.1-1.3,3.2-3.4c1.1-2.1,2.3-4.6,4.9-4.6c2.6,0,3.8,2.4,4.9,4.6
-			c1.1,2.1,1.8,3.4,3.1,3.4c1.3,0,2-1.3,3.1-3.4c1.1-2.1,2.3-4.6,4.9-4.6s3.6,2.4,4.6,4.6c1.1,2.1,1.9,3.4,2.9,3.4V44z"/>
-		<circle cx="86.5" cy="63" r="4"/>
-		<path d="M138,68c-2,0-3.6-2.4-4.6-4.6c-1.1-2.1-1.7-3.4-3-3.4s-2,1.3-3,3.4c-1.1,2.1-2.2,4.6-4.9,4.6c-2.6,0-3.8-2.4-4.9-4.6
-			c-1.1-2.1-1.8-3.4-3.1-3.4c-1.3,0-2,1.3-3.1,3.4c-1.1,2.1-2.3,4.6-4.9,4.6c-2.6,0-4.1-2.4-5.1-4.6C100.3,61.3,100,60,98,60v-2
-			c3,0,4.1,2.4,5.1,4.6c1.1,2.1,1.9,3.4,3.2,3.4c1.3,0,2.1-1.3,3.2-3.4c1.1-2.1,2.3-4.6,4.9-4.6c2.6,0,3.8,2.4,4.9,4.6
-			c1.1,2.1,1.8,3.4,3.1,3.4c1.3,0,2-1.3,3.1-3.4c1.1-2.1,2.3-4.6,4.9-4.6s3.6,2.4,4.6,4.6c1.1,2.1,1.9,3.4,2.9,3.4V68z"/>
-		<circle cx="86.5" cy="88" r="4"/>
-		<path d="M138,93c-2,0-3.6-2.4-4.6-4.6c-1.1-2.1-1.7-3.4-3-3.4s-2,1.3-3,3.4c-1.1,2.1-2.2,4.6-4.9,4.6c-2.6,0-3.8-2.4-4.9-4.6
-			c-1.1-2.1-1.8-3.4-3.1-3.4c-1.3,0-2,1.3-3.1,3.4c-1.1,2.1-2.3,4.6-4.9,4.6c-2.6,0-4.1-2.4-5.1-4.6C100.3,86.3,100,85,98,85v-2
-			c3,0,4.1,2.4,5.1,4.6c1.1,2.1,1.9,3.4,3.2,3.4c1.3,0,2.1-1.3,3.2-3.4c1.1-2.1,2.3-4.6,4.9-4.6c2.6,0,3.8,2.4,4.9,4.6
-			c1.1,2.1,1.8,3.4,3.1,3.4c1.3,0,2-1.3,3.1-3.4c1.1-2.1,2.3-4.6,4.9-4.6s3.6,2.4,4.6,4.6c1.1,2.1,1.9,3.4,2.9,3.4V93z"/>
-		<path d="M151,102H73V24h78V102z M75,100h74V26H75V100z"/>
-	</g>
-	<g id="ic_x5F_add_x0D_">
-	</g>
-</g>
-<g id="Guides">
-</g>
-</svg>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-listbox/index.html b/third_party/polymer/v1_0/components-chromium/paper-listbox/index.html
deleted file mode 100644
index b9dad4b..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-listbox/index.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-<html>
-<head>
-
-  <meta charset="utf-8">
-  <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
-
-  <title>paper-listbox</title>
-
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-
-  <link rel="import" href="../polymer/polymer.html">
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-</head>
-<body>
-
-  <iron-component-page></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-material/.bower.json b/third_party/polymer/v1_0/components-chromium/paper-material/.bower.json
deleted file mode 100644
index 76995ae..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-material/.bower.json
+++ /dev/null
@@ -1,44 +0,0 @@
-{
-  "name": "paper-material",
-  "version": "1.0.6",
-  "description": "A material design container that looks like a lifted sheet of paper",
-  "private": true,
-  "authors": [
-    "The Polymer Authors"
-  ],
-  "keywords": [
-    "web-components",
-    "web-component",
-    "polymer",
-    "paper",
-    "container"
-  ],
-  "main": "paper-material.html",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/paper-material"
-  },
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "homepage": "https://github.com/PolymerElements/paper-material",
-  "ignore": [],
-  "dependencies": {
-    "polymer": "Polymer/polymer#^1.1.0",
-    "paper-styles": "polymerelements/paper-styles#^1.0.0"
-  },
-  "devDependencies": {
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
-    "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
-    "web-component-tester": "^4.0.0",
-    "test-fixture": "polymerelements/test-fixture#^1.0.0",
-    "iron-component-page": "PolymerElements/iron-component-page#^1.0.0"
-  },
-  "_release": "1.0.6",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.0.6",
-    "commit": "6aef0896fcbc25f9f5bd1dd55f7679e6ab7f92ad"
-  },
-  "_source": "git://github.com/PolymerElements/paper-material.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/paper-material"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/paper-material/.gitignore b/third_party/polymer/v1_0/components-chromium/paper-material/.gitignore
deleted file mode 100644
index 8d4ae25..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-material/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components
diff --git a/third_party/polymer/v1_0/components-chromium/paper-material/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/paper-material/CONTRIBUTING.md
deleted file mode 100644
index 7b101415..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-material/CONTRIBUTING.md
+++ /dev/null
@@ -1,72 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [http://jsbin.com/cagaye](http://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/paper-material/README.md b/third_party/polymer/v1_0/components-chromium/paper-material/README.md
deleted file mode 100644
index 6a74b5e..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-material/README.md
+++ /dev/null
@@ -1,35 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-paper-material.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
-The bot does some handling of markdown. Please file a bug if it does the wrong
-thing! https://github.com/PolymerLabs/tedium/issues
-
--->
-
-[![Build Status](https://travis-ci.org/PolymerElements/paper-material.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-material)
-
-_[Demo and API Docs](https://elements.polymer-project.org/elements/paper-material)_
-
-
-##&lt;paper-material&gt;
-
-Material design: [Cards](https://www.google.com/design/spec/components/cards.html)
-
-`paper-material` is a container that renders two shadows on top of each other to
-create the effect of a lifted piece of paper.
-
-Example:
-
-```html
-<paper-material elevation="1">
-  ... content ...
-</paper-material>
-```
-
-
diff --git a/third_party/polymer/v1_0/components-chromium/paper-material/index.html b/third_party/polymer/v1_0/components-chromium/paper-material/index.html
deleted file mode 100644
index 7209e6d..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-material/index.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-<html>
-<head>
-
-  <meta charset="utf-8">
-  <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
-
-  <title>paper-material</title>
-
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-
-  <link rel="import" href="../polymer/polymer.html">
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-</head>
-<body>
-
-  <iron-component-page></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-menu-button/.bower.json b/third_party/polymer/v1_0/components-chromium/paper-menu-button/.bower.json
deleted file mode 100644
index 1f4d92b4..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-menu-button/.bower.json
+++ /dev/null
@@ -1,56 +0,0 @@
-{
-  "name": "paper-menu-button",
-  "version": "1.0.4",
-  "description": "A material design element that composes a trigger and a dropdown menu",
-  "authors": [
-    "The Polymer Authors"
-  ],
-  "keywords": [
-    "web-components",
-    "web-component",
-    "polymer",
-    "menu",
-    "button"
-  ],
-  "main": "paper-menu-button.html",
-  "private": true,
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/paper-menu-button"
-  },
-  "license": "MIT",
-  "homepage": "https://github.com/PolymerElements/paper-menu-button",
-  "dependencies": {
-    "polymer": "polymer/polymer#^1.0.0",
-    "neon-animation": "polymerelements/neon-animation#^1.0.0",
-    "paper-material": "polymerelements/paper-material#^1.0.0",
-    "paper-styles": "polymerelements/paper-styles#^1.0.0",
-    "iron-dropdown": "polymerelements/iron-dropdown#^1.0.0",
-    "iron-a11y-keys-behavior": "polymerelements/iron-a11y-keys-behavior#^1.0.0",
-    "iron-behaviors": "polymerelements/iron-behaviors#^1.0.0"
-  },
-  "devDependencies": {
-    "iron-component-page": "polymerelements/iron-component-page#^1.0.0",
-    "test-fixture": "polymerelements/test-fixture#^1.0.0",
-    "iron-test-helpers": "polymerelements/iron-test-helpers#^1.0.0",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
-    "web-component-tester": "*",
-    "paper-menu": "polymerelements/paper-menu#^1.0.0",
-    "paper-icon-button": "polymerelements/paper-icon-button#^1.0.0",
-    "iron-icons": "polymerelements/iron-icons#^1.0.0",
-    "paper-button": "polymerelements/paper-button#^1.0.0",
-    "paper-item": "polymerelements/paper-item#^1.0.0",
-    "iron-image": "polymerelements/iron-image#^1.0.0",
-    "iron-icon": "polymerelements/iron-icon#^1.0.0"
-  },
-  "ignore": [],
-  "_release": "1.0.4",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.0.4",
-    "commit": "886c7eb904a5d59652adc0a127a8e0eab7e0f663"
-  },
-  "_source": "git://github.com/PolymerElements/paper-menu-button.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/paper-menu-button"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/paper-menu-button/.gitignore b/third_party/polymer/v1_0/components-chromium/paper-menu-button/.gitignore
deleted file mode 100644
index 8d4ae25..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-menu-button/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components
diff --git a/third_party/polymer/v1_0/components-chromium/paper-menu-button/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/paper-menu-button/CONTRIBUTING.md
deleted file mode 100644
index 7b101415..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-menu-button/CONTRIBUTING.md
+++ /dev/null
@@ -1,72 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [http://jsbin.com/cagaye](http://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/paper-menu-button/README.md b/third_party/polymer/v1_0/components-chromium/paper-menu-button/README.md
deleted file mode 100644
index d75cacc..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-menu-button/README.md
+++ /dev/null
@@ -1,65 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-paper-menu-button-animations.html  paper-menu-button.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
--->
-
-[![Build Status](https://travis-ci.org/PolymerElements/paper-menu-button.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-menu-button)
-
-_[Demo and API Docs](https://elements.polymer-project.org/elements/paper-menu-button)_
-
-
-##&lt;paper-menu-button&gt;
-
-
-Material design: [Dropdown buttons](https://www.google.com/design/spec/components/buttons.html#buttons-dropdown-buttons)
-
-`paper-menu-button` allows one to compose a designated "trigger" element with
-another element that represents "content", to create a dropdown menu that
-displays the "content" when the "trigger" is clicked.
-
-The child element with the class `dropdown-trigger` will be used as the
-"trigger" element. The child element with the class `dropdown-content` will be
-used as the "content" element.
-
-The `paper-menu-button` is sensitive to its content's `iron-select` events. If
-the "content" element triggers an `iron-select` event, the `paper-menu-button`
-will close automatically.
-
-Example:
-
-    <paper-menu-button>
-      <paper-icon-button icon="menu" class="dropdown-trigger"></paper-icon-button>
-      <paper-menu class="dropdown-content">
-        <paper-item>Share</paper-item>
-        <paper-item>Settings</paper-item>
-        <paper-item>Help</paper-item>
-      </paper-menu>
-    </paper-menu-button>
-
-### Styling
-
-The following custom properties and mixins are also available for styling:
-
-Custom property | Description | Default
-----------------|-------------|----------
-`--paper-menu-button-dropdown-background` | Background color of the paper-menu-button dropdown | `#fff`
-`--paper-menu-button` | Mixin applied to the paper-menu-button | `{}`
-`--paper-menu-button-disabled` | Mixin applied to the paper-menu-button when disabled | `{}`
-`--paper-menu-button-dropdown` | Mixin applied to the paper-menu-button dropdown | `{}`
-`--paper-menu-button-content` | Mixin applied to the paper-menu-button content | `{}`
-
-
-
-<!-- No docs for <paper-menu-grow-height-animation> found. -->
-
-<!-- No docs for <paper-menu-grow-width-animation> found. -->
-
-<!-- No docs for <paper-menu-shrink-height-animation> found. -->
-
-<!-- No docs for <paper-menu-shrink-width-animation> found. -->
diff --git a/third_party/polymer/v1_0/components-chromium/paper-menu-button/hero.svg b/third_party/polymer/v1_0/components-chromium/paper-menu-button/hero.svg
deleted file mode 100644
index 31c411c9..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-menu-button/hero.svg
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 225 126" enable-background="new 0 0 225 126" xml:space="preserve">
-<g id="background" display="none">
-	<rect display="inline" fill="#B0BEC5" width="225" height="126"/>
-</g>
-<g id="label">
-</g>
-<g id="art">
-	<circle cx="109" cy="45" r="4"/>
-	<path d="M165,50c-2.8,0-4.1-2.4-5.3-4.5c-1.2-2.2-2-3.5-3.5-3.5c-1.5,0-2.3,1.3-3.5,3.5c-1.2,2.1-2.5,4.5-5.3,4.5
-		c-2.8,0-4.1-2.4-5.3-4.5c-1.2-2.2-2-3.5-3.5-3.5c-1.5,0-2.3,1.3-3.5,3.5c-1.2,2.1-2.5,4.5-5.3,4.5c-2.8,0-4.1-2.4-5.3-4.5
-		c-1.2-2.2-2-3.5-3.5-3.5v-2c2.8,0,4.1,2.4,5.3,4.5c1.2,2.2,2,3.5,3.5,3.5c1.5,0,2.3-1.3,3.5-3.5c1.2-2.1,2.5-4.5,5.3-4.5
-		c2.8,0,4.1,2.4,5.3,4.5c1.2,2.2,2,3.5,3.5,3.5c1.5,0,2.3-1.3,3.5-3.5c1.2-2.1,2.5-4.5,5.3-4.5s4.1,2.4,5.3,4.5
-		c1.2,2.2,2,3.5,3.5,3.5V50z"/>
-	<circle cx="109" cy="63" r="4"/>
-	<path d="M165,68c-2.8,0-4.1-2.4-5.3-4.5c-1.2-2.2-2-3.5-3.5-3.5c-1.5,0-2.3,1.3-3.5,3.5c-1.2,2.1-2.5,4.5-5.3,4.5
-		c-2.8,0-4.1-2.4-5.3-4.5c-1.2-2.2-2-3.5-3.5-3.5c-1.5,0-2.3,1.3-3.5,3.5c-1.2,2.1-2.5,4.5-5.3,4.5c-2.8,0-4.1-2.4-5.3-4.5
-		c-1.2-2.2-2-3.5-3.5-3.5v-2c2.8,0,4.1,2.4,5.3,4.5c1.2,2.2,2,3.5,3.5,3.5c1.5,0,2.3-1.3,3.5-3.5c1.2-2.1,2.5-4.5,5.3-4.5
-		c2.8,0,4.1,2.4,5.3,4.5c1.2,2.2,2,3.5,3.5,3.5c1.5,0,2.3-1.3,3.5-3.5c1.2-2.1,2.5-4.5,5.3-4.5s4.1,2.4,5.3,4.5
-		c1.2,2.2,2,3.5,3.5,3.5V68z"/>
-	<circle cx="109" cy="81" r="4"/>
-	<path d="M165,86c-2.8,0-4.1-2.4-5.3-4.5c-1.2-2.2-2-3.5-3.5-3.5c-1.5,0-2.3,1.3-3.5,3.5c-1.2,2.1-2.5,4.5-5.3,4.5
-		c-2.8,0-4.1-2.4-5.3-4.5c-1.2-2.2-2-3.5-3.5-3.5c-1.5,0-2.3,1.3-3.5,3.5c-1.2,2.1-2.5,4.5-5.3,4.5c-2.8,0-4.1-2.4-5.3-4.5
-		c-1.2-2.2-2-3.5-3.5-3.5v-2c2.8,0,4.1,2.4,5.3,4.5c1.2,2.2,2,3.5,3.5,3.5c1.5,0,2.3-1.3,3.5-3.5c1.2-2.1,2.5-4.5,5.3-4.5
-		c2.8,0,4.1,2.4,5.3,4.5c1.2,2.2,2,3.5,3.5,3.5c1.5,0,2.3-1.3,3.5-3.5c1.2-2.1,2.5-4.5,5.3-4.5s4.1,2.4,5.3,4.5
-		c1.2,2.2,2,3.5,3.5,3.5V86z"/>
-	<path d="M176,98H94V28h82V98z M96,96h78V30H96V96z"/>
-	<circle cx="65" cy="61" r="8"/>
-	<path d="M82,78H48V44h34V78z M50,76h30V46H50V76z"/>
-	<rect x="81" y="58" width="14" height="2"/>
-	<g id="ic_x5F_add_x0D_">
-	</g>
-</g>
-<g id="Guides">
-</g>
-</svg>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-menu-button/index.html b/third_party/polymer/v1_0/components-chromium/paper-menu-button/index.html
deleted file mode 100644
index 040b1952..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-menu-button/index.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE
-The complete set of authors may be found at http://polymer.github.io/AUTHORS
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS
--->
-<html>
-<head>
-
-  <title>paper-menu-button</title>
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-</head>
-<body>
-
-  <iron-component-page></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-menu/.bower.json b/third_party/polymer/v1_0/components-chromium/paper-menu/.bower.json
deleted file mode 100644
index e5f47bb..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-menu/.bower.json
+++ /dev/null
@@ -1,48 +0,0 @@
-{
-  "name": "paper-menu",
-  "version": "1.2.2",
-  "description": "Implements an accessible material design menu",
-  "authors": "The Polymer Authors",
-  "keywords": [
-    "web-components",
-    "polymer",
-    "menu"
-  ],
-  "main": [
-    "paper-menu.html",
-    "paper-submenu.html"
-  ],
-  "private": true,
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/paper-menu"
-  },
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "homepage": "https://github.com/PolymerElements/paper-menu",
-  "ignore": [],
-  "dependencies": {
-    "polymer": "Polymer/polymer#^1.1.0",
-    "iron-behaviors": "PolymerElements/iron-behaviors#^1.0.0",
-    "iron-collapse": "PolymerElements/iron-collapse#^1.0.0",
-    "iron-menu-behavior": "PolymerElements/iron-menu-behavior#^1.0.0",
-    "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
-    "paper-styles": "PolymerElements/paper-styles#^1.0.0"
-  },
-  "devDependencies": {
-    "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
-    "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
-    "paper-item": "PolymerElements/paper-item#^1.0.0",
-    "test-fixture": "PolymerElements/test-fixture#^1.0.0",
-    "web-component-tester": "^4.0.0",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
-  },
-  "_release": "1.2.2",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.2.2",
-    "commit": "f31a1dbc5b594a84c8c01eca0f23f9bcb8f6ba76"
-  },
-  "_source": "git://github.com/PolymerElements/paper-menu.git",
-  "_target": "^1.1.0",
-  "_originalSource": "PolymerElements/paper-menu"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/paper-menu/.gitignore b/third_party/polymer/v1_0/components-chromium/paper-menu/.gitignore
deleted file mode 100644
index fbe05fc..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-menu/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components/
diff --git a/third_party/polymer/v1_0/components-chromium/paper-menu/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/paper-menu/CONTRIBUTING.md
deleted file mode 100644
index 7b101415..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-menu/CONTRIBUTING.md
+++ /dev/null
@@ -1,72 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [http://jsbin.com/cagaye](http://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/paper-menu/README.md b/third_party/polymer/v1_0/components-chromium/paper-menu/README.md
deleted file mode 100644
index 9dbd2b2..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-menu/README.md
+++ /dev/null
@@ -1,113 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-paper-menu.html  paper-submenu.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
-The bot does some handling of markdown. Please file a bug if it does the wrong
-thing! https://github.com/PolymerLabs/tedium/issues
-
--->
-
-[![Build Status](https://travis-ci.org/PolymerElements/paper-menu.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-menu)
-
-_[Demo and API Docs](https://elements.polymer-project.org/elements/paper-menu)_
-
-
-##&lt;paper-menu&gt;
-
-Material design: [Menus](https://www.google.com/design/spec/components/menus.html)
-
-`<paper-menu>` implements an accessible menu control with Material Design styling. The focused item
-is highlighted, and the selected item has bolded text.
-
-```html
-<paper-menu>
-  <paper-item>Item 1</paper-item>
-  <paper-item>Item 2</paper-item>
-</paper-menu>
-```
-
-An initial selection can be specified with the `selected` attribute.
-
-```html
-<paper-menu selected="0">
-  <paper-item>Item 1</paper-item>
-  <paper-item>Item 2</paper-item>
-</paper-menu>
-```
-
-Make a multi-select menu with the `multi` attribute. Items in a multi-select menu can be deselected,
-and multiple items can be selected.
-
-```html
-<paper-menu multi>
-  <paper-item>Item 1</paper-item>
-  <paper-item>Item 2</paper-item>
-</paper-menu>
-```
-
-### Styling
-
-The following custom properties and mixins are available for styling:
-
-| Custom property | Description | Default |
-| --- | --- | --- |
-| `--paper-menu-background-color` | Menu background color | `--primary-background-color` |
-| `--paper-menu-color` | Menu foreground color | `--primary-text-color` |
-| `--paper-menu-disabled-color` | Foreground color for a disabled item | `--disabled-text-color` |
-| `--paper-menu` | Mixin applied to the menu | `{}` |
-| `--paper-menu-selected-item` | Mixin applied to the selected item | `{}` |
-| `--paper-menu-focused-item` | Mixin applied to the focused item | `{}` |
-| `--paper-menu-focused-item-after` | Mixin applied to the ::after pseudo-element for the focused item | `{}` |
-
-### Accessibility
-
-`<paper-menu>` has `role="menu"` by default. A multi-select menu will also have
-`aria-multiselectable` set. It implements key bindings to navigate through the menu with the up and
-down arrow keys, esc to exit the menu, and enter to activate a menu item. Typing the first letter
-of a menu item will also focus it.
-
-
-
-##&lt;paper-submenu&gt;
-
-`<paper-submenu>` is a nested menu inside of a parent `<paper-menu>`. It
-consists of a trigger that expands or collapses another `<paper-menu>`:
-
-```html
-<paper-menu>
-  <paper-submenu>
-    <paper-item class="menu-trigger">Topics</paper-item>
-    <paper-menu class="menu-content">
-      <paper-item>Topic 1</paper-item>
-      <paper-item>Topic 2</paper-item>
-      <paper-item>Topic 3</paper-item>
-    </paper-menu>
-  </paper-submenu>
-  <paper-submenu>
-    <paper-item class="menu-trigger">Faves</paper-item>
-    <paper-menu class="menu-content">
-      <paper-item>Fave 1</paper-item>
-      <paper-item>Fave 2</paper-item>
-    </paper-menu>
-  </paper-submenu>
-  <paper-submenu disabled>
-    <paper-item class="menu-trigger">Unavailable</paper-item>
-    <paper-menu class="menu-content">
-      <paper-item>Disabled 1</paper-item>
-      <paper-item>Disabled 2</paper-item>
-    </paper-menu>
-  </paper-submenu>
-</paper-menu>
-```
-
-Just like in `<paper-menu>`, the focused item is highlighted, and the selected
-item has bolded text. Please see the `<paper-menu>` docs for which attributes
-(such as `multi` and `selected`), and styling options are available for the
-`menu-content` menu.
-
-
diff --git a/third_party/polymer/v1_0/components-chromium/paper-menu/hero.svg b/third_party/polymer/v1_0/components-chromium/paper-menu/hero.svg
deleted file mode 100644
index 91af1f60..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-menu/hero.svg
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 225 126" enable-background="new 0 0 225 126" xml:space="preserve">
-<g id="background" display="none">
-	<rect display="inline" fill="#B0BEC5" width="225" height="126"/>
-</g>
-<g id="label">
-</g>
-<g id="art">
-	<g>
-		<circle cx="86.5" cy="39" r="4"/>
-		<path d="M138,44c-2,0-3.6-2.4-4.6-4.6c-1.1-2.1-1.7-3.4-3-3.4s-2,1.3-3,3.4c-1.1,2.1-2.2,4.6-4.9,4.6c-2.6,0-3.8-2.4-4.9-4.6
-			c-1.1-2.1-1.8-3.4-3.1-3.4c-1.3,0-2,1.3-3.1,3.4c-1.1,2.1-2.3,4.6-4.9,4.6c-2.6,0-4.1-2.4-5.1-4.6C100.3,37.3,100,36,98,36v-2
-			c3,0,4.1,2.4,5.1,4.6c1.1,2.1,1.9,3.4,3.2,3.4c1.3,0,2.1-1.3,3.2-3.4c1.1-2.1,2.3-4.6,4.9-4.6c2.6,0,3.8,2.4,4.9,4.6
-			c1.1,2.1,1.8,3.4,3.1,3.4c1.3,0,2-1.3,3.1-3.4c1.1-2.1,2.3-4.6,4.9-4.6s3.6,2.4,4.6,4.6c1.1,2.1,1.9,3.4,2.9,3.4V44z"/>
-		<circle cx="86.5" cy="63" r="4"/>
-		<path d="M138,68c-2,0-3.6-2.4-4.6-4.6c-1.1-2.1-1.7-3.4-3-3.4s-2,1.3-3,3.4c-1.1,2.1-2.2,4.6-4.9,4.6c-2.6,0-3.8-2.4-4.9-4.6
-			c-1.1-2.1-1.8-3.4-3.1-3.4c-1.3,0-2,1.3-3.1,3.4c-1.1,2.1-2.3,4.6-4.9,4.6c-2.6,0-4.1-2.4-5.1-4.6C100.3,61.3,100,60,98,60v-2
-			c3,0,4.1,2.4,5.1,4.6c1.1,2.1,1.9,3.4,3.2,3.4c1.3,0,2.1-1.3,3.2-3.4c1.1-2.1,2.3-4.6,4.9-4.6c2.6,0,3.8,2.4,4.9,4.6
-			c1.1,2.1,1.8,3.4,3.1,3.4c1.3,0,2-1.3,3.1-3.4c1.1-2.1,2.3-4.6,4.9-4.6s3.6,2.4,4.6,4.6c1.1,2.1,1.9,3.4,2.9,3.4V68z"/>
-		<circle cx="86.5" cy="88" r="4"/>
-		<path d="M138,93c-2,0-3.6-2.4-4.6-4.6c-1.1-2.1-1.7-3.4-3-3.4s-2,1.3-3,3.4c-1.1,2.1-2.2,4.6-4.9,4.6c-2.6,0-3.8-2.4-4.9-4.6
-			c-1.1-2.1-1.8-3.4-3.1-3.4c-1.3,0-2,1.3-3.1,3.4c-1.1,2.1-2.3,4.6-4.9,4.6c-2.6,0-4.1-2.4-5.1-4.6C100.3,86.3,100,85,98,85v-2
-			c3,0,4.1,2.4,5.1,4.6c1.1,2.1,1.9,3.4,3.2,3.4c1.3,0,2.1-1.3,3.2-3.4c1.1-2.1,2.3-4.6,4.9-4.6c2.6,0,3.8,2.4,4.9,4.6
-			c1.1,2.1,1.8,3.4,3.1,3.4c1.3,0,2-1.3,3.1-3.4c1.1-2.1,2.3-4.6,4.9-4.6s3.6,2.4,4.6,4.6c1.1,2.1,1.9,3.4,2.9,3.4V93z"/>
-		<path d="M151,102H73V24h78V102z M75,100h74V26H75V100z"/>
-	</g>
-	<g id="ic_x5F_add_x0D_">
-	</g>
-</g>
-<g id="Guides">
-</g>
-</svg>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-menu/index.html b/third_party/polymer/v1_0/components-chromium/paper-menu/index.html
deleted file mode 100644
index fc88411..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-menu/index.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-<html>
-<head>
-
-  <meta charset="utf-8">
-  <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
-
-  <title>paper-menu</title>
-
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-
-  <link rel="import" href="../polymer/polymer.html">
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-</head>
-<body>
-
-  <iron-component-page></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-progress/.bower.json b/third_party/polymer/v1_0/components-chromium/paper-progress/.bower.json
deleted file mode 100644
index 9d75ff5c..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-progress/.bower.json
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "name": "paper-progress",
-  "version": "1.0.8",
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "description": "A material design progress bar",
-  "authors": "The Polymer Authors",
-  "keywords": [
-    "web-components",
-    "polymer",
-    "progress"
-  ],
-  "main": "paper-progress.html",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/paper-progress.git"
-  },
-  "dependencies": {
-    "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
-    "iron-range-behavior": "PolymerElements/iron-range-behavior#^1.0.0",
-    "paper-styles": "PolymerElements/paper-styles#^1.0.0",
-    "polymer": "Polymer/polymer#^1.1.0"
-  },
-  "devDependencies": {
-    "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
-    "paper-button": "PolymerElements/paper-button#^1.0.0",
-    "test-fixture": "PolymerElements/test-fixture#^1.0.0",
-    "web-component-tester": "*",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
-  },
-  "ignore": [],
-  "homepage": "https://github.com/PolymerElements/paper-progress",
-  "_release": "1.0.8",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.0.8",
-    "commit": "9d879787a55c95eedaa28cfd65813de4367bc858"
-  },
-  "_source": "git://github.com/PolymerElements/paper-progress.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/paper-progress"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/paper-progress/.gitignore b/third_party/polymer/v1_0/components-chromium/paper-progress/.gitignore
deleted file mode 100644
index 8d4ae25..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-progress/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components
diff --git a/third_party/polymer/v1_0/components-chromium/paper-progress/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/paper-progress/CONTRIBUTING.md
deleted file mode 100644
index 7b101415..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-progress/CONTRIBUTING.md
+++ /dev/null
@@ -1,72 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [http://jsbin.com/cagaye](http://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/paper-progress/README.md b/third_party/polymer/v1_0/components-chromium/paper-progress/README.md
deleted file mode 100644
index a55c09e7..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-progress/README.md
+++ /dev/null
@@ -1,80 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-paper-progress.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
--->
-
-[![Build Status](https://travis-ci.org/PolymerElements/paper-progress.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-progress)
-
-_[Demo and API Docs](https://elements.polymer-project.org/elements/paper-progress)_
-
-
-##&lt;paper-progress&gt;
-
-
-Material design: [Progress & activity](https://www.google.com/design/spec/components/progress-activity.html)
-
-The progress bars are for situations where the percentage completed can be
-determined. They give users a quick sense of how much longer an operation
-will take.
-
-Example:
-
-    <paper-progress value="10"></paper-progress>
-
-There is also a secondary progress which is useful for displaying intermediate
-progress, such as the buffer level during a streaming playback progress bar.
-
-Example:
-
-    <paper-progress value="10" secondary-progress="30"></paper-progress>
-
-### Styling progress bar:
-
-To change the active progress bar color:
-
-    paper-progress {
-       --paper-progress-active-color: #e91e63;
-    }
-
-To change the secondary progress bar color:
-
-    paper-progress {
-      --paper-progress-secondary-color: #f8bbd0;
-    }
-
-To change the progress bar background color:
-
-    paper-progress {
-      --paper-progress-container-color: #64ffda;
-    }
-
-Add the class `transiting` to a paper-progress to animate the progress bar when
-the value changed. You can also customize the transition:
-
-    paper-progress {
-      --paper-progress-transition-duration: 0.08s;
-      --paper-progress-transition-timing-function: ease;
-      --paper-progress-transition-transition-delay: 0s;
-    }
-
-The following mixins are available for styling:
-
-Custom property                               | Description                                 | Default
-----------------------------------------------|---------------------------------------------|--------------
-`--paper-progress-container-color`            | Mixin applied to container                  | `--google-grey-300`
-`--paper-progress-transition-duration`        | Duration of the transition                  | `0.008s`
-`--paper-progress-transition-timing-function` | The timing function for the transition      | `ease`
-`--paper-progress-transition-delay`           | delay for the transition                    | `0s`
-`--paper-progress-active-color`               | The color of the active bar                 | `--google-green-500`
-`--paper-progress-secondary-color`            | The color of the secondary bar              | `--google-green-100`
-`--paper-progress-disabled-active-color`      | The color of the active bar if disabled     | `--google-grey-500`
-`--paper-progress-disabled-secondary-color`   | The color of the secondary bar if disabled  | `--google-grey-300`
-`--paper-progress-height`                     | The height of the progress bar              | `4px`
-
-
diff --git a/third_party/polymer/v1_0/components-chromium/paper-progress/hero.svg b/third_party/polymer/v1_0/components-chromium/paper-progress/hero.svg
deleted file mode 100644
index dc422a4..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-progress/hero.svg
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 225 126" enable-background="new 0 0 225 126" xml:space="preserve">
-<g id="background" display="none">
-	<rect display="inline" fill="#B0BEC5" width="225" height="126"/>
-</g>
-<g id="label">
-</g>
-<g id="art">
-	<rect x="57" y="59" width="20" height="2"/>
-	<rect x="38" y="59" width="11" height="2"/>
-	<rect x="84" y="59" width="40" height="2"/>
-	<rect x="133" y="59" width="54" height="2"/>
-	<g id="ic_x5F_add_x0D_">
-	</g>
-</g>
-<g id="Guides">
-</g>
-</svg>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-progress/index.html b/third_party/polymer/v1_0/components-chromium/paper-progress/index.html
deleted file mode 100644
index 225e3dd9..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-progress/index.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-<html>
-<head>
-
-  <meta charset="utf-8">
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-
-  <title>paper-progress</title>
-
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-</head>
-<body>
-
-  <iron-component-page></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-radio-button/.bower.json b/third_party/polymer/v1_0/components-chromium/paper-radio-button/.bower.json
deleted file mode 100644
index 0ec87dd..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-radio-button/.bower.json
+++ /dev/null
@@ -1,46 +0,0 @@
-{
-  "name": "paper-radio-button",
-  "version": "1.1.1",
-  "description": "A material design radio button",
-  "authors": [
-    "The Polymer Authors"
-  ],
-  "keywords": [
-    "web-components",
-    "polymer",
-    "radio",
-    "control"
-  ],
-  "private": true,
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/paper-radio-button"
-  },
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "homepage": "https://github.com/PolymerElements/paper-radio-button",
-  "ignore": [],
-  "dependencies": {
-    "iron-checked-element-behavior": "PolymerElements/iron-checked-element-behavior#^1.0.0",
-    "paper-behaviors": "PolymerElements/paper-behaviors#^1.0.0",
-    "paper-styles": "PolymerElements/paper-styles#^1.1.0",
-    "polymer": "Polymer/polymer#^1.1.0"
-  },
-  "devDependencies": {
-    "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
-    "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
-    "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
-    "test-fixture": "PolymerElements/test-fixture#^1.0.0",
-    "web-component-tester": "^4.0.0",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
-  },
-  "main": "paper-radio-button.html",
-  "_release": "1.1.1",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.1.1",
-    "commit": "ada62ad3347d304aa72352ea5ef02e2c21907d6c"
-  },
-  "_source": "git://github.com/PolymerElements/paper-radio-button.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/paper-radio-button"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/paper-radio-button/.gitignore b/third_party/polymer/v1_0/components-chromium/paper-radio-button/.gitignore
deleted file mode 100644
index 8d4ae25..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-radio-button/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components
diff --git a/third_party/polymer/v1_0/components-chromium/paper-radio-button/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/paper-radio-button/CONTRIBUTING.md
deleted file mode 100644
index f147978a..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-radio-button/CONTRIBUTING.md
+++ /dev/null
@@ -1,77 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
-
-You can however override the jsbin link with one that's customized to this
-specific element:
-
-jsbin=https://jsbin.com/cagaye/edit?html,output
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, fixes #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/paper-radio-button/README.md b/third_party/polymer/v1_0/components-chromium/paper-radio-button/README.md
deleted file mode 100644
index d141450..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-radio-button/README.md
+++ /dev/null
@@ -1,55 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-paper-radio-button.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
-The bot does some handling of markdown. Please file a bug if it does the wrong
-thing! https://github.com/PolymerLabs/tedium/issues
-
--->
-
-[![Build status](https://travis-ci.org/PolymerElements/paper-radio-button.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-radio-button)
-
-_[Demo and API docs](https://elements.polymer-project.org/elements/paper-radio-button)_
-
-
-##&lt;paper-radio-button&gt;
-
-Material design: [Radio button](https://www.google.com/design/spec/components/selection-controls.html#selection-controls-radio-button)
-
-`paper-radio-button` is a button that can be either checked or unchecked.
-User can tap the radio button to check or uncheck it.
-
-Use a `<paper-radio-group>` to group a set of radio buttons.  When radio buttons
-are inside a radio group, exactly one radio button in the group can be checked
-at any time.
-
-Example:
-
-```html
-<paper-radio-button></paper-radio-button>
-<paper-radio-button>Item label</paper-radio-button>
-```
-
-### Styling
-
-The following custom properties and mixins are available for styling:
-
-| Custom property | Description | Default |
-| --- | --- | --- |
-| `--paper-radio-button-unchecked-background-color` | Radio button background color when the input is not checked | `transparent` |
-| `--paper-radio-button-unchecked-color` | Radio button color when the input is not checked | `--primary-text-color` |
-| `--paper-radio-button-unchecked-ink-color` | Selected/focus ripple color when the input is not checked | `--primary-text-color` |
-| `--paper-radio-button-checked-color` | Radio button color when the input is checked | `--primary-color` |
-| `--paper-radio-button-checked-ink-color` | Selected/focus ripple color when the input is checked | `--primary-color` |
-| `--paper-radio-button-label-color` | Label color | `--primary-text-color` |
-| `--paper-radio-button-label-spacing` | Spacing between the label and the button | `10px` |
-
-This element applies the mixin `--paper-font-common-base` but does not import `paper-styles/typography.html`.
-In order to apply the `Roboto` font to this element, make sure you've imported `paper-styles/typography.html`.
-
-
diff --git a/third_party/polymer/v1_0/components-chromium/paper-radio-button/hero.svg b/third_party/polymer/v1_0/components-chromium/paper-radio-button/hero.svg
deleted file mode 100644
index 7fbac94..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-radio-button/hero.svg
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 225 126" enable-background="new 0 0 225 126" xml:space="preserve">
-<g id="background" display="none">
-	<rect display="inline" fill="#B0BEC5" width="225" height="126"/>
-</g>
-<g id="label">
-</g>
-<g id="art">
-	<g>
-		<circle cx="112.5" cy="63" r="8"/>
-		<path d="M112.5,80c-9.4,0-17-7.6-17-17s7.6-17,17-17s17,7.6,17,17S121.9,80,112.5,80z M112.5,48c-8.3,0-15,6.7-15,15s6.7,15,15,15
-			s15-6.7,15-15S120.8,48,112.5,48z"/>
-	</g>
-	<g id="ic_x5F_add_x0D_">
-	</g>
-</g>
-<g id="Guides">
-</g>
-</svg>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-radio-button/index.html b/third_party/polymer/v1_0/components-chromium/paper-radio-button/index.html
deleted file mode 100644
index a564b41..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-radio-button/index.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<!doctype html>
-<!--
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-<html>
-<head>
-
-  <meta charset="utf-8">
-  <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
-
-  <title>paper-radio-button</title>
-
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-
-  <link rel="import" href="../polymer/polymer.html">
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-</head>
-<body>
-
-  <iron-component-page></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-radio-group/.bower.json b/third_party/polymer/v1_0/components-chromium/paper-radio-group/.bower.json
deleted file mode 100644
index 25f344b..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-radio-group/.bower.json
+++ /dev/null
@@ -1,46 +0,0 @@
-{
-  "name": "paper-radio-group",
-  "version": "1.0.9",
-  "description": "A group of material design radio buttons",
-  "authors": [
-    "The Polymer Authors"
-  ],
-  "keywords": [
-    "web-components",
-    "polymer",
-    "radio",
-    "control"
-  ],
-  "private": true,
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/paper-radio-group.git"
-  },
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "homepage": "https://github.com/PolymerElements/paper-radio-group",
-  "ignore": [],
-  "dependencies": {
-    "iron-a11y-keys-behavior": "PolymerElements/iron-a11y-keys-behavior#^1.0.0",
-    "iron-selector": "PolymerElements/iron-selector#^1.0.0",
-    "polymer": "Polymer/polymer#^1.1.0"
-  },
-  "devDependencies": {
-    "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
-    "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
-    "paper-radio-button": "PolymerElements/paper-radio-button#^1.0.0",
-    "paper-styles": "PolymerElements/paper-styles#^1.0.0",
-    "test-fixture": "PolymerElements/test-fixture#^1.0.0",
-    "web-component-tester": "^4.0.0",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
-  },
-  "main": "paper-radio-group.html",
-  "_release": "1.0.9",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.0.9",
-    "commit": "27a8447ed1709dd1a9bef514acd7dee218604077"
-  },
-  "_source": "git://github.com/PolymerElements/paper-radio-group.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/paper-radio-group"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/paper-radio-group/.gitignore b/third_party/polymer/v1_0/components-chromium/paper-radio-group/.gitignore
deleted file mode 100644
index 8d4ae25..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-radio-group/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components
diff --git a/third_party/polymer/v1_0/components-chromium/paper-radio-group/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/paper-radio-group/CONTRIBUTING.md
deleted file mode 100644
index 7b101415..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-radio-group/CONTRIBUTING.md
+++ /dev/null
@@ -1,72 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [http://jsbin.com/cagaye](http://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/paper-radio-group/README.md b/third_party/polymer/v1_0/components-chromium/paper-radio-group/README.md
deleted file mode 100644
index 1b57146..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-radio-group/README.md
+++ /dev/null
@@ -1,49 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-paper-radio-group.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
--->
-
-[![Build Status](https://travis-ci.org/PolymerElements/paper-radio-group.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-radio-group)
-
-_[Demo and API Docs](https://elements.polymer-project.org/elements/paper-radio-group)_
-
-
-##&lt;paper-radio-group&gt;
-
-
-Material design: [Radio button](https://www.google.com/design/spec/components/selection-controls.html#selection-controls-radio-button)
-
-`paper-radio-group` allows user to select at most one radio button from a set.
-Checking one radio button that belongs to a radio group unchecks any
-previously checked radio button within the same group. Use
-`selected` to get or set the selected radio button.
-
-The <paper-radio-buttons> inside the group must have the `name` attribute
-set.
-
-Example:
-
-    <paper-radio-group selected="small">
-      <paper-radio-button name="small">Small</paper-radio-button>
-      <paper-radio-button name="medium">Medium</paper-radio-button>
-      <paper-radio-button name="large">Large</paper-radio-button>
-    </paper-radio-group>
-
-Radio-button-groups can be made optional, and allow zero buttons to be selected:
-
-    <paper-radio-group selected="small" allow-empty-selection>
-      <paper-radio-button name="small">Small</paper-radio-button>
-      <paper-radio-button name="medium">Medium</paper-radio-button>
-      <paper-radio-button name="large">Large</paper-radio-button>
-    </paper-radio-group>
-
-See <a href="paper-radio-button">paper-radio-button</a> for more
-information about `paper-radio-button`.
-
-
diff --git a/third_party/polymer/v1_0/components-chromium/paper-radio-group/hero.svg b/third_party/polymer/v1_0/components-chromium/paper-radio-group/hero.svg
deleted file mode 100644
index fc78ba7..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-radio-group/hero.svg
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 225 126" enable-background="new 0 0 225 126" xml:space="preserve">
-<g id="background" display="none">
-	<rect display="inline" fill="#B0BEC5" width="225" height="126"/>
-</g>
-<g id="label">
-</g>
-<g id="art">
-	<g>
-		<circle cx="112.5" cy="41" r="8"/>
-		<path d="M112.5,58c-9.4,0-17-7.6-17-17s7.6-17,17-17s17,7.6,17,17S121.9,58,112.5,58z M112.5,26c-8.3,0-15,6.7-15,15s6.7,15,15,15
-			s15-6.7,15-15S120.8,26,112.5,26z"/>
-		<circle cx="112.5" cy="85" r="8"/>
-		<path d="M112.5,102c-9.4,0-17-7.6-17-17s7.6-17,17-17s17,7.6,17,17S121.9,102,112.5,102z M112.5,70c-8.3,0-15,6.7-15,15
-			s6.7,15,15,15s15-6.7,15-15S120.8,70,112.5,70z"/>
-	</g>
-	<g id="ic_x5F_add_x0D_">
-	</g>
-</g>
-<g id="Guides">
-</g>
-</svg>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-radio-group/index.html b/third_party/polymer/v1_0/components-chromium/paper-radio-group/index.html
deleted file mode 100644
index 966c717..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-radio-group/index.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-<html>
-  <head>
-
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
-
-    <title>paper-radio-group</title>
-
-    <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-
-    <link rel="import" href="../polymer/polymer.html">
-    <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-  </head>
-  <body>
-
-    <iron-component-page></iron-component-page>
-
-  </body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-ripple/.bower.json b/third_party/polymer/v1_0/components-chromium/paper-ripple/.bower.json
deleted file mode 100644
index 157225e..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-ripple/.bower.json
+++ /dev/null
@@ -1,45 +0,0 @@
-{
-  "name": "paper-ripple",
-  "version": "1.0.5",
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "description": "Adds a material design ripple to any container",
-  "private": true,
-  "authors": [
-    "The Polymer Authors"
-  ],
-  "keywords": [
-    "web-components",
-    "polymer",
-    "ripple"
-  ],
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/paper-ripple.git"
-  },
-  "main": "paper-ripple.html",
-  "dependencies": {
-    "polymer": "Polymer/polymer#^1.1.0",
-    "iron-a11y-keys-behavior": "polymerelements/iron-a11y-keys-behavior#^1.0.0"
-  },
-  "devDependencies": {
-    "iron-component-page": "polymerelements/iron-component-page#^1.0.0",
-    "iron-icon": "polymerelements/iron-icon#^1.0.0",
-    "iron-icons": "polymerelements/iron-icons#^1.0.0",
-    "paper-styles": "polymerelements/paper-styles#^1.0.0",
-    "test-fixture": "polymerelements/test-fixture#^1.0.0",
-    "web-component-tester": "polymer/web-component-tester#^3.4.0",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
-    "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0"
-  },
-  "ignore": [],
-  "homepage": "https://github.com/PolymerElements/paper-ripple",
-  "_release": "1.0.5",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.0.5",
-    "commit": "d72e7a9a8ab518b901ed18dde492df3b87a93be5"
-  },
-  "_source": "git://github.com/PolymerElements/paper-ripple.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/paper-ripple"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/paper-ripple/.gitignore b/third_party/polymer/v1_0/components-chromium/paper-ripple/.gitignore
deleted file mode 100644
index 8d4ae25..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-ripple/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components
diff --git a/third_party/polymer/v1_0/components-chromium/paper-ripple/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/paper-ripple/CONTRIBUTING.md
deleted file mode 100644
index 7b101415..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-ripple/CONTRIBUTING.md
+++ /dev/null
@@ -1,72 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [http://jsbin.com/cagaye](http://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/paper-ripple/README.md b/third_party/polymer/v1_0/components-chromium/paper-ripple/README.md
deleted file mode 100644
index 9e4c8ca..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-ripple/README.md
+++ /dev/null
@@ -1,76 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-paper-ripple.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
--->
-
-[![Build Status](https://travis-ci.org/PolymerElements/paper-ripple.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-ripple)
-
-_[Demo and API Docs](https://elements.polymer-project.org/elements/paper-ripple)_
-
-
-##&lt;paper-ripple&gt;
-
-
-Material design: [Surface reaction](https://www.google.com/design/spec/animation/responsive-interaction.html#responsive-interaction-surface-reaction)
-
-`paper-ripple` provides a visual effect that other paper elements can
-use to simulate a rippling effect emanating from the point of contact.  The
-effect can be visualized as a concentric circle with motion.
-
-Example:
-
-    <div style="position:relative">
-      <paper-ripple></paper-ripple>
-    </div>
-
-Note, it's important that the parent container of the ripple be relative position, otherwise
-the ripple will emanate outside of the desired container.
-
-`paper-ripple` listens to "mousedown" and "mouseup" events so it would display ripple
-effect when touches on it.  You can also defeat the default behavior and
-manually route the down and up actions to the ripple element.  Note that it is
-important if you call `downAction()` you will have to make sure to call
-`upAction()` so that `paper-ripple` would end the animation loop.
-
-Example:
-
-    <paper-ripple id="ripple" style="pointer-events: none;"></paper-ripple>
-    ...
-    downAction: function(e) {
-      this.$.ripple.downAction({x: e.x, y: e.y});
-    },
-    upAction: function(e) {
-      this.$.ripple.upAction();
-    }
-
-Styling ripple effect:
-
-  Use CSS color property to style the ripple:
-
-    paper-ripple {
-      color: #4285f4;
-    }
-
-  Note that CSS color property is inherited so it is not required to set it on
-  the `paper-ripple` element directly.
-
-By default, the ripple is centered on the point of contact.  Apply the `recenters`
-attribute to have the ripple grow toward the center of its container.
-
-    <paper-ripple recenters></paper-ripple>
-
-You can also  center the ripple inside its container from the start.
-
-    <paper-ripple center></paper-ripple>
-
-Apply `circle` class to make the rippling effect within a circle.
-
-    <paper-ripple class="circle"></paper-ripple>
-
-
diff --git a/third_party/polymer/v1_0/components-chromium/paper-ripple/hero.svg b/third_party/polymer/v1_0/components-chromium/paper-ripple/hero.svg
deleted file mode 100644
index f8a872f..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-ripple/hero.svg
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 225 126" enable-background="new 0 0 225 126" xml:space="preserve">
-<g id="background" display="none">
-	<rect display="inline" fill="#B0BEC5" width="225" height="126"/>
-</g>
-<g id="label">
-</g>
-<g id="art">
-	<path d="M175,81H49V45h126V81z M51,79h122V47H51V79z"/>
-	<g>
-		<defs>
-			<rect id="SVGID_5_" x="50" y="46" width="124" height="34"/>
-		</defs>
-		<clipPath id="SVGID_2_">
-			<use xlink:href="#SVGID_5_"  overflow="visible"/>
-		</clipPath>
-		<circle opacity="0.5" clip-path="url(#SVGID_2_)" cx="84.4" cy="62.7" r="41.9"/>
-		<circle opacity="0.6" clip-path="url(#SVGID_2_)" cx="84.4" cy="62.7" r="26.3"/>
-		<circle opacity="0.6" clip-path="url(#SVGID_2_)" cx="66.4" cy="62.7" r="26.3"/>
-	</g>
-	<circle cx="50" cy="80" r="4"/>
-	<g id="ic_x5F_add_x0D_">
-	</g>
-</g>
-<g id="Guides">
-</g>
-</svg>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-ripple/index.html b/third_party/polymer/v1_0/components-chromium/paper-ripple/index.html
deleted file mode 100644
index e552b0b..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-ripple/index.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-<html>
-<head>
-
-  <title>paper-ripple</title>
-  <meta charset="utf-8">
-  <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
-
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-</head>
-<body>
-
-  <iron-component-page></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-slider/.bower.json b/third_party/polymer/v1_0/components-chromium/paper-slider/.bower.json
deleted file mode 100644
index 6d3e8d36..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-slider/.bower.json
+++ /dev/null
@@ -1,47 +0,0 @@
-{
-  "name": "paper-slider",
-  "version": "1.0.9",
-  "description": "A material design-style slider",
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "authors": "The Polymer Authors",
-  "keywords": [
-    "web-components",
-    "polymer",
-    "slider",
-    "control"
-  ],
-  "main": "paper-slider.html",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/paper-slider.git"
-  },
-  "ignore": [],
-  "dependencies": {
-    "polymer": "Polymer/polymer#^1.1.0",
-    "paper-input": "PolymerElements/paper-input#^1.0.0",
-    "paper-progress": "PolymerElements/paper-progress#^1.0.0",
-    "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
-    "paper-styles": "PolymerElements/paper-styles#^1.0.0",
-    "iron-behaviors": "PolymerElements/iron-behaviors#^1.0.0",
-    "paper-behaviors": "PolymerElements/paper-behaviors#^1.0.0",
-    "iron-a11y-keys-behavior": "PolymerElements/iron-a11y-keys-behavior#^1.0.0",
-    "iron-form-element-behavior": "PolymerElements/iron-form-element-behavior#^1.0.0"
-  },
-  "devDependencies": {
-    "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
-    "test-fixture": "PolymerElements/test-fixture#^1.0.0",
-    "iron-test-helpers": "polymerelements/iron-test-helpers#^1.0.0",
-    "web-component-tester": "polymer/web-component-tester#^3.4.0",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
-  },
-  "homepage": "https://github.com/PolymerElements/paper-slider",
-  "_release": "1.0.9",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.0.9",
-    "commit": "5814b574e9440cec40619157f00b7aa2ced20c8d"
-  },
-  "_source": "git://github.com/PolymerElements/paper-slider.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/paper-slider"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/paper-slider/.gitignore b/third_party/polymer/v1_0/components-chromium/paper-slider/.gitignore
deleted file mode 100644
index 8d4ae25..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-slider/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components
diff --git a/third_party/polymer/v1_0/components-chromium/paper-slider/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/paper-slider/CONTRIBUTING.md
deleted file mode 100644
index 7b101415..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-slider/CONTRIBUTING.md
+++ /dev/null
@@ -1,72 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [http://jsbin.com/cagaye](http://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/paper-slider/README.md b/third_party/polymer/v1_0/components-chromium/paper-slider/README.md
deleted file mode 100644
index a6ae8615..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-slider/README.md
+++ /dev/null
@@ -1,58 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-paper-slider.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
--->
-
-[![Build Status](https://travis-ci.org/PolymerElements/paper-slider.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-slider)
-
-_[Demo and API Docs](https://elements.polymer-project.org/elements/paper-slider)_
-
-
-##&lt;paper-slider&gt;
-
-
-Material design: [Sliders](https://www.google.com/design/spec/components/sliders.html)
-
-`paper-slider` allows user to select a value from a range of values by
-moving the slider thumb.  The interactive nature of the slider makes it a
-great choice for settings that reflect intensity levels, such as volume,
-brightness, or color saturation.
-
-Example:
-
-    <paper-slider></paper-slider>
-
-Use `min` and `max` to specify the slider range.  Default is 0 to 100.
-
-Example:
-
-    <paper-slider min="10" max="200" value="110"></paper-slider>
-
-### Styling
-
-The following custom properties and mixins are available for styling:
-
-Custom property | Description | Default
-----------------|-------------|----------
-`--paper-slider-bar-color` | The background color of the slider | `transparent`
-`--paper-slider-active-color` | The progress bar color | `--google-blue-700`
-`--paper-slider-secondary-color` | The secondary progress bar color | `--google-blue-300`
-`--paper-slider-knob-color` | The knob color | `--google-blue-700`
-`--paper-slider-disabled-knob-color` | The disabled knob color | `--paper-grey-400`
-`--paper-slider-pin-color` | The pin color | `--google-blue-700`
-`--paper-slider-font-color` | The pin's text color | `#fff`
-`--paper-slider-disabled-active-color` | The disabled progress bar color | `--paper-grey-400`
-`--paper-slider-disabled-secondary-color` | The disabled secondary progress bar color | `--paper-grey-400`
-`--paper-slider-knob-start-color` | The fill color of the knob at the far left | `transparent`
-`--paper-slider-knob-start-border-color` | The border color of the knob at the far left | `--paper-grey-400`
-`--paper-slider-pin-start-color` | The color of the pin at the far left | `--paper-grey-400`
-`--paper-slider-height` | Height of the progress bar | `2px`
-`--paper-slider-input` | Mixin applied to the input in editable mode | `{}`
-
-
diff --git a/third_party/polymer/v1_0/components-chromium/paper-slider/hero.svg b/third_party/polymer/v1_0/components-chromium/paper-slider/hero.svg
deleted file mode 100644
index 8a518e1..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-slider/hero.svg
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 225 126" enable-background="new 0 0 225 126" xml:space="preserve">
-<g id="background" display="none">
-	<rect display="inline" fill="#B0BEC5" width="225" height="126"/>
-</g>
-<g id="label">
-</g>
-<g id="art">
-	<circle cx="110" cy="61" r="4"/>
-	<rect x="61" y="60" width="49" height="2"/>
-	<rect x="110" y="60" width="53" height="2"/>
-	<g id="ic_x5F_add_x0D_">
-	</g>
-</g>
-<g id="Guides">
-</g>
-</svg>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-slider/index.html b/third_party/polymer/v1_0/components-chromium/paper-slider/index.html
deleted file mode 100644
index 6add074..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-slider/index.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-<html>
-<head>
-
-  <meta charset="utf-8">
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-
-  <title>paper-slider</title>
-
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-</head>
-<body>
-
-  <iron-component-page></iron-component-page>
-
-</body>
-</html>
-
diff --git a/third_party/polymer/v1_0/components-chromium/paper-spinner/.bower.json b/third_party/polymer/v1_0/components-chromium/paper-spinner/.bower.json
deleted file mode 100644
index 211b0d74..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-spinner/.bower.json
+++ /dev/null
@@ -1,47 +0,0 @@
-{
-  "name": "paper-spinner",
-  "version": "1.1.1",
-  "description": "A material design spinner",
-  "authors": [
-    "The Polymer Authors"
-  ],
-  "keywords": [
-    "web-components",
-    "polymer",
-    "spinner",
-    "loading"
-  ],
-  "private": true,
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/paper-spinner"
-  },
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "homepage": "https://github.com/PolymerElements/paper-spinner",
-  "ignore": [],
-  "dependencies": {
-    "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
-    "paper-styles": "PolymerElements/paper-styles#^1.0.0",
-    "polymer": "Polymer/polymer#^1.1.0"
-  },
-  "devDependencies": {
-    "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
-    "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
-    "test-fixture": "PolymerElements/test-fixture#^1.0.0",
-    "web-component-tester": "^4.0.0",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
-  },
-  "main": [
-    "paper-spinner.html",
-    "paper-spinner-lite.html"
-  ],
-  "_release": "1.1.1",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.1.1",
-    "commit": "fa851c605e1b5b79be592979a4650b3061f6342a"
-  },
-  "_source": "git://github.com/PolymerElements/paper-spinner.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/paper-spinner"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/paper-spinner/.gitignore b/third_party/polymer/v1_0/components-chromium/paper-spinner/.gitignore
deleted file mode 100644
index fbe05fc..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-spinner/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components/
diff --git a/third_party/polymer/v1_0/components-chromium/paper-spinner/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/paper-spinner/CONTRIBUTING.md
deleted file mode 100644
index f147978a..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-spinner/CONTRIBUTING.md
+++ /dev/null
@@ -1,77 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
-
-You can however override the jsbin link with one that's customized to this
-specific element:
-
-jsbin=https://jsbin.com/cagaye/edit?html,output
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, fixes #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/paper-spinner/README.md b/third_party/polymer/v1_0/components-chromium/paper-spinner/README.md
deleted file mode 100644
index ad57a2f..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-spinner/README.md
+++ /dev/null
@@ -1,93 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-paper-spinner-behavior.html  paper-spinner-lite.html  paper-spinner.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
-The bot does some handling of markdown. Please file a bug if it does the wrong
-thing! https://github.com/PolymerLabs/tedium/issues
-
--->
-
-[![Build status](https://travis-ci.org/PolymerElements/paper-spinner.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-spinner)
-
-_[Demo and API docs](https://elements.polymer-project.org/elements/paper-spinner)_
-
-
-##&lt;paper-spinner&gt;
-
-Material design: [Progress & activity](https://www.google.com/design/spec/components/progress-activity.html)
-
-Element providing a multiple color material design circular spinner.
-
-```html
-<paper-spinner active></paper-spinner>
-```
-
-The default spinner cycles between four layers of colors; by default they are
-blue, red, yellow and green. It can be customized to cycle between four different
-colors. Use <paper-spinner-lite> for single color spinners.
-
-### Accessibility
-
-Alt attribute should be set to provide adequate context for accessibility. If not provided,
-it defaults to 'loading'.
-Empty alt can be provided to mark the element as decorative if alternative content is provided
-in another form (e.g. a text block following the spinner).
-
-```html
-<paper-spinner alt="Loading contacts list" active></paper-spinner>
-```
-
-### Styling
-
-The following custom properties and mixins are available for styling:
-
-| Custom property | Description | Default |
-| --- | --- | --- |
-| `--paper-spinner-layer-1-color` | Color of the first spinner rotation | `--google-blue-500` |
-| `--paper-spinner-layer-2-color` | Color of the second spinner rotation | `--google-red-500` |
-| `--paper-spinner-layer-3-color` | Color of the third spinner rotation | `--google-yellow-500` |
-| `--paper-spinner-layer-4-color` | Color of the fourth spinner rotation | `--google-green-500` |
-| `--paper-spinner-stroke-width` | The width of the spinner stroke | 3px |
-
-
-
-##&lt;paper-spinner-lite&gt;
-
-Material design: [Progress & activity](https://www.google.com/design/spec/components/progress-activity.html)
-
-Element providing a single color material design circular spinner.
-
-```html
-<paper-spinner-lite active></paper-spinner-lite>
-```
-
-The default spinner is blue. It can be customized to be a different color.
-
-### Accessibility
-
-Alt attribute should be set to provide adequate context for accessibility. If not provided,
-it defaults to 'loading'.
-Empty alt can be provided to mark the element as decorative if alternative content is provided
-in another form (e.g. a text block following the spinner).
-
-```html
-<paper-spinner-lite alt="Loading contacts list" active></paper-spinner-lite>
-```
-
-### Styling
-
-The following custom properties and mixins are available for styling:
-
-| Custom property | Description | Default |
-| --- | --- | --- |
-| `--paper-spinner-color` | Color of the spinner | `--google-blue-500` |
-| `--paper-spinner-stroke-width` | The width of the spinner stroke | 3px |
-
-
-
-<!-- No docs for Polymer.PaperSpinnerBehavior found. -->
diff --git a/third_party/polymer/v1_0/components-chromium/paper-spinner/hero.svg b/third_party/polymer/v1_0/components-chromium/paper-spinner/hero.svg
deleted file mode 100644
index 034b1f1..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-spinner/hero.svg
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 225 126" enable-background="new 0 0 225 126" xml:space="preserve">
-<g id="background" display="none">
-	<rect display="inline" fill="#B0BEC5" width="225" height="126"/>
-</g>
-<g id="label">
-</g>
-<g id="art">
-	<g>
-		<path d="M112.1,92.3c-13.4,0-25.1-9.1-28.4-22l1.9-0.5c3.1,12.1,13.9,20.5,26.4,20.5c15,0,27.3-12.2,27.3-27.3
-			s-12.2-27.3-27.3-27.3c-8.1,0-15.8,3.6-21,9.8l-1.5-1.3c5.6-6.7,13.8-10.6,22.5-10.6c16.1,0,29.3,13.1,29.3,29.3
-			S128.2,92.3,112.1,92.3z"/>
-		<path d="M112.7,87.3c-6.6,0-12.7-2.5-17.3-7.2c-4.6-4.6-7.2-10.8-7.2-17.3c0-6.6,2.5-12.7,7.2-17.3c7.9-7.9,20.2-9.5,29.8-3.8
-			l-1,1.7c-8.8-5.3-20.1-3.8-27.4,3.5c-4.2,4.2-6.6,9.9-6.6,15.9s2.3,11.7,6.6,15.9s9.9,6.6,15.9,6.6c6,0,11.7-2.3,15.9-6.6
-			c4.7-4.7,7.1-11.3,6.5-18l2-0.2c0.7,7.3-1.9,14.4-7.1,19.6C125.4,84.7,119.2,87.3,112.7,87.3z"/>
-		<path d="M112.5,43.5C101.8,43.5,93,52.3,93,63s8.7,19.5,19.5,19.5S132,73.7,132,63S123.2,43.5,112.5,43.5z M119,64h-6v6h-2v-6h-6
-			v-2h6v-6h2v6h6V64z"/>
-	</g>
-	<g id="ic_x5F_add_x0D_">
-	</g>
-</g>
-<g id="Guides">
-</g>
-</svg>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-spinner/index.html b/third_party/polymer/v1_0/components-chromium/paper-spinner/index.html
deleted file mode 100644
index 98743346..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-spinner/index.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-<html>
-  <head>
-
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
-
-    <title>paper-spinner</title>
-
-    <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-
-    <link rel="import" href="../polymer/polymer.html">
-    <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-  </head>
-  <body>
-
-    <iron-component-page></iron-component-page>
-
-  </body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-styles/.bower.json b/third_party/polymer/v1_0/components-chromium/paper-styles/.bower.json
deleted file mode 100644
index ae677ef..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-styles/.bower.json
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-  "name": "paper-styles",
-  "version": "1.1.4",
-  "description": "Common (global) styles for Material Design elements.",
-  "authors": [
-    "The Polymer Authors"
-  ],
-  "keywords": [
-    "web-component",
-    "polymer",
-    "style"
-  ],
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/paper-styles.git"
-  },
-  "main": "paper-styles.html",
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "homepage": "https://github.com/polymerelements/paper-styles/",
-  "ignore": [
-    "/.*"
-  ],
-  "dependencies": {
-    "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
-    "font-roboto": "PolymerElements/font-roboto#^1.0.1",
-    "polymer": "Polymer/polymer#^1.0.0"
-  },
-  "devDependencies": {
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
-    "iron-component-page": "polymerelements/iron-component-page#^1.0.0",
-    "web-component-tester": "^4.0.0"
-  },
-  "_release": "1.1.4",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.1.4",
-    "commit": "885bbd74db88dab4fb5dc229cdf994c55fb2b31b"
-  },
-  "_source": "git://github.com/PolymerElements/paper-styles.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/paper-styles"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/paper-styles/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/paper-styles/CONTRIBUTING.md
deleted file mode 100644
index f147978a..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-styles/CONTRIBUTING.md
+++ /dev/null
@@ -1,77 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
-
-You can however override the jsbin link with one that's customized to this
-specific element:
-
-jsbin=https://jsbin.com/cagaye/edit?html,output
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, fixes #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/paper-styles/README.md b/third_party/polymer/v1_0/components-chromium/paper-styles/README.md
deleted file mode 100644
index ca555bd..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-styles/README.md
+++ /dev/null
@@ -1,49 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-paper-styles.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
-The bot does some handling of markdown. Please file a bug if it does the wrong
-thing! https://github.com/PolymerLabs/tedium/issues
-
--->
-
-[![Build status](https://travis-ci.org/PolymerElements/paper-styles.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-styles)
-
-_[Demo and API docs](https://elements.polymer-project.org/elements/paper-styles)_
-
-
-##&lt;paper-styles&gt;
-
-The `<paper-styles>` component provides simple ways to use Material Design CSS styles
-in your application. The following imports are available:
-
-1. [color.html](https://github.com/PolymerElements/paper-styles/blob/master/color.html):
-a complete list of the colors defined in the Material Design [palette](https://www.google.com/design/spec/style/color.html)
-
-
-1. [default-theme.html](https://github.com/PolymerElements/paper-styles/blob/master/default-theme.html): text,
-background and accent colors that match the default Material Design theme
-
-
-1. [shadow.html](https://github.com/PolymerElements/paper-styles/blob/master/shadow.html): Material Design
-[elevation](https://www.google.com/design/spec/what-is-material/elevation-shadows.html) and shadow styles
-
-
-1. [typography.html](https://github.com/PolymerElements/paper-styles/blob/master/typography.html):
-Material Design [font](http://www.google.com/design/spec/style/typography.html#typography-styles) styles and sizes
-
-
-1. [demo-pages.html](https://github.com/PolymerElements/paper-styles/blob/master/demo-pages.html): generic styles
-used in the PolymerElements demo pages
-
-
-
-We recommend importing each of these individual files, and using the style mixins
-available in each ones, rather than the aggregated `paper-styles.html` as a whole.
-
-
diff --git a/third_party/polymer/v1_0/components-chromium/paper-styles/demo-pages.html b/third_party/polymer/v1_0/components-chromium/paper-styles/demo-pages.html
deleted file mode 100644
index 6e900ad1..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-styles/demo-pages.html
+++ /dev/null
@@ -1,72 +0,0 @@
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-
-<link rel="import" href="../polymer/polymer.html">
-
-<link rel="import" href="../iron-flex-layout/iron-flex-layout.html">
-
-<link rel="import" href="color.html">
-<link rel="import" href="typography.html">
-<link rel="import" href="shadow.html">
-
-<style is="custom-style">
-
-  body {
-    @apply(--paper-font-common-base);
-    font-size: 14px;
-    margin: 0;
-    padding: 24px;
-    background-color: var(--paper-grey-50);
-  }
-
-  .horizontal-section-container {
-    @apply(--layout-horizontal);
-    @apply(--layout-center-justified);
-    @apply(--layout-wrap);
-  }
-
-  .vertical-section-container {
-    @apply(--layout-vertical);
-    @apply(--center-justified);
-  }
-
-  .horizontal-section {
-    background-color: white;
-    padding: 24px;
-    margin-right: 24px;
-    min-width: 200px;
-
-    @apply(--shadow-elevation-2dp);
-  }
-
-  .vertical-section {
-    background-color: white;
-    padding: 24px;
-    margin: 0 24px 24px 24px;
-
-    @apply(--shadow-elevation-2dp);
-  }
-
-  .centered {
-    max-width: 400px;
-    margin-left: auto;
-    margin-right: auto;
-  }
-
-  code {
-    color: var(--google-grey-700);
-  }
-
-  /* TODO: remove this hack and use horizontal-section-container instead */
-  body > div.layout.horizontal.center-justified {
-    @apply(--layout-wrap);
-  }
-
-</style>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-styles/index.html b/third_party/polymer/v1_0/components-chromium/paper-styles/index.html
deleted file mode 100644
index 8e96ebe0..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-styles/index.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-<html>
-<head>
-
-  <title>paper-styles</title>
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-</head>
-<body>
-
-  <iron-component-page></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-tabs/.bower.json b/third_party/polymer/v1_0/components-chromium/paper-tabs/.bower.json
deleted file mode 100644
index 4632aa744..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-tabs/.bower.json
+++ /dev/null
@@ -1,54 +0,0 @@
-{
-  "name": "paper-tabs",
-  "version": "1.3.7",
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "description": "Material design tabs",
-  "private": true,
-  "main": "paper-tabs.html",
-  "authors": [
-    "The Polymer Authors"
-  ],
-  "keywords": [
-    "web-components",
-    "polymer",
-    "tabs",
-    "control"
-  ],
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/paper-tabs.git"
-  },
-  "dependencies": {
-    "iron-behaviors": "PolymerElements/iron-behaviors#^1.0.0",
-    "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
-    "iron-icon": "PolymerElements/iron-icon#^1.0.0",
-    "iron-iconset-svg": "PolymerElements/iron-iconset-svg#^1.0.0",
-    "iron-menu-behavior": "PolymerElements/iron-menu-behavior#^1.1.0",
-    "iron-resizable-behavior": "PolymerElements/iron-resizable-behavior#^1.0.0",
-    "paper-behaviors": "PolymerElements/paper-behaviors#^1.0.0",
-    "paper-icon-button": "PolymerElements/paper-icon-button#^1.0.0",
-    "paper-styles": "PolymerElements/paper-styles#^1.0.0",
-    "polymer": "Polymer/polymer#^1.1.0"
-  },
-  "devDependencies": {
-    "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
-    "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
-    "iron-pages": "PolymerElements/iron-pages#^1.0.0",
-    "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
-    "paper-toolbar": "PolymerElements/paper-toolbar#^1.0.0",
-    "test-fixture": "PolymerElements/test-fixture#^1.0.0",
-    "web-component-tester": "^4.0.0",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
-  },
-  "ignore": [],
-  "homepage": "https://github.com/PolymerElements/paper-tabs",
-  "_release": "1.3.7",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.3.7",
-    "commit": "b8d689c7cdf926a69c91d2421aa6c2536608fad4"
-  },
-  "_source": "git://github.com/PolymerElements/paper-tabs.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/paper-tabs"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/paper-tabs/.gitignore b/third_party/polymer/v1_0/components-chromium/paper-tabs/.gitignore
deleted file mode 100644
index fbe05fc..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-tabs/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components/
diff --git a/third_party/polymer/v1_0/components-chromium/paper-tabs/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/paper-tabs/CONTRIBUTING.md
deleted file mode 100644
index f147978a..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-tabs/CONTRIBUTING.md
+++ /dev/null
@@ -1,77 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
-
-You can however override the jsbin link with one that's customized to this
-specific element:
-
-jsbin=https://jsbin.com/cagaye/edit?html,output
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, fixes #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/paper-tabs/README.md b/third_party/polymer/v1_0/components-chromium/paper-tabs/README.md
deleted file mode 100644
index 68fdc148..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-tabs/README.md
+++ /dev/null
@@ -1,125 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-paper-tab.html  paper-tabs.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
-The bot does some handling of markdown. Please file a bug if it does the wrong
-thing! https://github.com/PolymerLabs/tedium/issues
-
--->
-
-[![Build status](https://travis-ci.org/PolymerElements/paper-tabs.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-tabs)
-
-_[Demo and API docs](https://elements.polymer-project.org/elements/paper-tabs)_
-
-
-##&lt;paper-tabs&gt;
-
-Material design: [Tabs](https://www.google.com/design/spec/components/tabs.html)
-
-`paper-tabs` makes it easy to explore and switch between different views or functional aspects of
-an app, or to browse categorized data sets.
-
-Use `selected` property to get or set the selected tab.
-
-Example:
-
-```html
-<paper-tabs selected="0">
-  <paper-tab>TAB 1</paper-tab>
-  <paper-tab>TAB 2</paper-tab>
-  <paper-tab>TAB 3</paper-tab>
-</paper-tabs>
-```
-
-See <a href="?active=paper-tab">paper-tab</a> for more information about
-`paper-tab`.
-
-A common usage for `paper-tabs` is to use it along with `iron-pages` to switch
-between different views.
-
-```html
-<paper-tabs selected="{{selected}}">
-  <paper-tab>Tab 1</paper-tab>
-  <paper-tab>Tab 2</paper-tab>
-  <paper-tab>Tab 3</paper-tab>
-</paper-tabs>
-
-<iron-pages selected="{{selected}}">
-  <div>Page 1</div>
-  <div>Page 2</div>
-  <div>Page 3</div>
-</iron-pages>
-```
-
-To use links in tabs, add `link` attribute to `paper-tab` and put an `<a>`
-element in `paper-tab`.
-
-Example:
-
-<pre><code>
-&lt;style is="custom-style">
-  .link {
-    &#64;apply(--layout-horizontal);
-    &#64;apply(--layout-center-center);
-  }
-&lt;/style>
-
-&lt;paper-tabs selected="0">
-  &lt;paper-tab link>
-    &lt;a href="#link1" class="link">TAB ONE&lt;/a>
-  &lt;/paper-tab>
-  &lt;paper-tab link>
-    &lt;a href="#link2" class="link">TAB TWO&lt;/a>
-  &lt;/paper-tab>
-  &lt;paper-tab link>
-    &lt;a href="#link3" class="link">TAB THREE&lt;/a>
-  &lt;/paper-tab>
-&lt;/paper-tabs>
-</code></pre>
-
-### Styling
-
-The following custom properties and mixins are available for styling:
-
-| Custom property | Description | Default |
-| --- | --- | --- |
-| `--paper-tabs-selection-bar-color` | Color for the selection bar | `--paper-yellow-a100` |
-| `--paper-tabs` | Mixin applied to the tabs | `{}` |
-
-
-
-##&lt;paper-tab&gt;
-
-`paper-tab` is styled to look like a tab.  It should be used in conjunction with
-`paper-tabs`.
-
-Example:
-
-```html
-<paper-tabs selected="0">
-  <paper-tab>TAB 1</paper-tab>
-  <paper-tab>TAB 2</paper-tab>
-  <paper-tab>TAB 3</paper-tab>
-</paper-tabs>
-```
-
-### Styling
-
-The following custom properties and mixins are available for styling:
-
-| Custom property | Description | Default |
-| --- | --- | --- |
-| `--paper-tab-ink` | Ink color | `--paper-yellow-a100` |
-| `--paper-tab` | Mixin applied to the tab | `{}` |
-| `--paper-tab-content` | Mixin applied to the tab content | `{}` |
-| `--paper-tab-content-unselected` | Mixin applied to the tab content when the tab is not selected | `{}` |
-
-This element applies the mixin `--paper-font-common-base` but does not import `paper-styles/typography.html`.
-In order to apply the `Roboto` font to this element, make sure you've imported `paper-styles/typography.html`.
-
-
diff --git a/third_party/polymer/v1_0/components-chromium/paper-tabs/hero.svg b/third_party/polymer/v1_0/components-chromium/paper-tabs/hero.svg
deleted file mode 100644
index bfcbdac..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-tabs/hero.svg
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 225 126" enable-background="new 0 0 225 126" xml:space="preserve">
-<g id="background" display="none">
-	<rect display="inline" fill="#B0BEC5" width="225" height="126"/>
-</g>
-<g id="label">
-</g>
-<g id="art">
-	<path d="M188,78H37V44h151V78z M39,76h147V46H39V76z"/>
-	<polygon points="66,64.8 60.6,56.8 55.3,64.8 49.2,55.6 50.8,54.4 55.3,61.2 60.6,53.2 66,61.2 71.3,53.2 77.4,62.4 75.8,63.6 
-		71.3,56.8 	"/>
-	<rect x="149" y="58" width="26" height="2"/>
-	<rect x="99" y="58" width="26" height="2"/>
-	<rect x="38" y="72" width="50" height="4"/>
-	<g id="ic_x5F_add_x0D_">
-	</g>
-</g>
-<g id="Guides">
-</g>
-</svg>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-tabs/index.html b/third_party/polymer/v1_0/components-chromium/paper-tabs/index.html
deleted file mode 100644
index f618702..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-tabs/index.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-<html>
-<head>
-
-  <title>paper-tabs</title>
-  <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-</head>
-<body>
-
-  <iron-component-page sources='["paper-tabs.html", "paper-tab.html"]'></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-toggle-button/.bower.json b/third_party/polymer/v1_0/components-chromium/paper-toggle-button/.bower.json
deleted file mode 100644
index 7f52cc6..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-toggle-button/.bower.json
+++ /dev/null
@@ -1,47 +0,0 @@
-{
-  "name": "paper-toggle-button",
-  "version": "1.1.1",
-  "description": "A material design toggle button control",
-  "authors": [
-    "The Polymer Authors"
-  ],
-  "keywords": [
-    "web-components",
-    "polymer",
-    "toggle",
-    "control"
-  ],
-  "private": true,
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/paper-toggle-button"
-  },
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "homepage": "https://github.com/PolymerElements/paper-toggle-button",
-  "ignore": [],
-  "dependencies": {
-    "polymer": "Polymer/polymer#^1.1.0",
-    "iron-checked-element-behavior": "PolymerElements/iron-checked-element-behavior#^1.0.0",
-    "paper-behaviors": "PolymerElements/paper-behaviors#^1.0.0",
-    "paper-styles": "PolymerElements/paper-styles#^1.1.0"
-  },
-  "devDependencies": {
-    "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
-    "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
-    "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
-    "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
-    "test-fixture": "PolymerElements/test-fixture#^1.0.0",
-    "web-component-tester": "^4.0.0",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
-  },
-  "main": "paper-toggle-button.html",
-  "_release": "1.1.1",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.1.1",
-    "commit": "0cfebed00270466462684718ec73b3195179df48"
-  },
-  "_source": "git://github.com/PolymerElements/paper-toggle-button.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/paper-toggle-button"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/paper-toggle-button/.gitignore b/third_party/polymer/v1_0/components-chromium/paper-toggle-button/.gitignore
deleted file mode 100644
index 8d4ae25..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-toggle-button/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components
diff --git a/third_party/polymer/v1_0/components-chromium/paper-toggle-button/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/paper-toggle-button/CONTRIBUTING.md
deleted file mode 100644
index f147978a..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-toggle-button/CONTRIBUTING.md
+++ /dev/null
@@ -1,77 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
-
-You can however override the jsbin link with one that's customized to this
-specific element:
-
-jsbin=https://jsbin.com/cagaye/edit?html,output
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, fixes #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/paper-toggle-button/README.md b/third_party/polymer/v1_0/components-chromium/paper-toggle-button/README.md
deleted file mode 100644
index 8fee54f6..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-toggle-button/README.md
+++ /dev/null
@@ -1,55 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-paper-toggle-button.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
-The bot does some handling of markdown. Please file a bug if it does the wrong
-thing! https://github.com/PolymerLabs/tedium/issues
-
--->
-
-[![Build status](https://travis-ci.org/PolymerElements/paper-toggle-button.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-toggle-button)
-
-_[Demo and API docs](https://elements.polymer-project.org/elements/paper-toggle-button)_
-
-
-##&lt;paper-toggle-button&gt;
-
-Material design: [Switch](https://www.google.com/design/spec/components/selection-controls.html#selection-controls-switch)
-
-`paper-toggle-button` provides a ON/OFF switch that user can toggle the state
-by tapping or by dragging the switch.
-
-Example:
-
-```html
-<paper-toggle-button></paper-toggle-button>
-```
-
-### Styling
-
-The following custom properties and mixins are available for styling:
-
-| Custom property | Description | Default |
-| --- | --- | --- |
-| `--paper-toggle-button-unchecked-bar-color` | Slider color when the input is not checked | `#000000` |
-| `--paper-toggle-button-unchecked-button-color` | Button color when the input is not checked | `--paper-grey-50` |
-| `--paper-toggle-button-unchecked-ink-color` | Selected/focus ripple color when the input is not checked | `--dark-primary-color` |
-| `--paper-toggle-button-checked-bar-color` | Slider button color when the input is checked | `--primary-color` |
-| `--paper-toggle-button-checked-button-color` | Button color when the input is checked | `--primary-color` |
-| `--paper-toggle-button-checked-ink-color` | Selected/focus ripple color when the input is checked | `--primary-color` |
-| `--paper-toggle-button-unchecked-bar` | Mixin applied to the slider when the input is not checked | `{}` |
-| `--paper-toggle-button-unchecked-button` | Mixin applied to the slider button when the input is not checked | `{}` |
-| `--paper-toggle-button-checked-bar` | Mixin applied to the slider when the input is checked | `{}` |
-| `--paper-toggle-button-checked-button` | Mixin applied to the slider button when the input is checked | `{}` |
-| `--paper-toggle-button-label-color` | Label color | `--primary-text-color` |
-| `--paper-toggle-button-label-spacing` | Spacing between the label and the button | `8px` |
-
-This element applies the mixin `--paper-font-common-base` but does not import `paper-styles/typography.html`.
-In order to apply the `Roboto` font to this element, make sure you've imported `paper-styles/typography.html`.
-
-
diff --git a/third_party/polymer/v1_0/components-chromium/paper-toggle-button/hero.svg b/third_party/polymer/v1_0/components-chromium/paper-toggle-button/hero.svg
deleted file mode 100644
index 21607b2..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-toggle-button/hero.svg
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 225 126" enable-background="new 0 0 225 126" xml:space="preserve">
-<g id="background" display="none">
-	<rect display="inline" fill="#B0BEC5" width="225" height="126"/>
-</g>
-<g id="label">
-</g>
-<g id="art">
-	<g>
-		<circle cx="123.8" cy="63" r="15.7"/>
-		<path d="M123,77H98.5c-7.7,0-14-6.3-14-14s6.3-14,14-14H123c7.7,0,14,6.3,14,14S130.7,77,123,77z M98.5,51c-6.6,0-12,5.4-12,12
-			s5.4,12,12,12H123c6.6,0,12-5.4,12-12s-5.4-12-12-12H98.5z"/>
-	</g>
-	<g id="ic_x5F_add_x0D_">
-	</g>
-</g>
-<g id="Guides">
-</g>
-</svg>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-toggle-button/index.html b/third_party/polymer/v1_0/components-chromium/paper-toggle-button/index.html
deleted file mode 100644
index 487bb5c..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-toggle-button/index.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-<html>
-<head>
-
-  <meta charset="utf-8">
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-</head>
-<body>
-
-  <iron-component-page></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-toolbar/.bower.json b/third_party/polymer/v1_0/components-chromium/paper-toolbar/.bower.json
deleted file mode 100644
index 663af0ab..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-toolbar/.bower.json
+++ /dev/null
@@ -1,47 +0,0 @@
-{
-  "name": "paper-toolbar",
-  "version": "1.1.4",
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "description": "A material design toolbar that is easily customizable",
-  "private": true,
-  "main": "paper-toolbar.html",
-  "authors": [
-    "The Polymer Authors"
-  ],
-  "keywords": [
-    "web-components",
-    "polymer",
-    "toolbar",
-    "layout"
-  ],
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/paper-toolbar.git"
-  },
-  "dependencies": {
-    "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
-    "paper-styles": "PolymerElements/paper-styles#^1.1.0",
-    "polymer": "Polymer/polymer#^1.2.0"
-  },
-  "devDependencies": {
-    "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
-    "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
-    "iron-icons": "PolymerElements/iron-icons#^1.0.0",
-    "paper-icon-button": "PolymerElements/paper-icon-button#^1.0.0",
-    "paper-progress": "PolymerElements/paper-progress#^1.0.0",
-    "test-fixture": "PolymerElements/test-fixture#^1.0.0",
-    "web-component-tester": "^4.0.0",
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
-  },
-  "ignore": [],
-  "homepage": "https://github.com/PolymerElements/paper-toolbar",
-  "_release": "1.1.4",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.1.4",
-    "commit": "e9d582733fab4d0698c680047d7faaab1a35196c"
-  },
-  "_source": "git://github.com/PolymerElements/paper-toolbar.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/paper-toolbar"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/paper-toolbar/.gitignore b/third_party/polymer/v1_0/components-chromium/paper-toolbar/.gitignore
deleted file mode 100644
index fbe05fc..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-toolbar/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components/
diff --git a/third_party/polymer/v1_0/components-chromium/paper-toolbar/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/paper-toolbar/CONTRIBUTING.md
deleted file mode 100644
index 7b101415..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-toolbar/CONTRIBUTING.md
+++ /dev/null
@@ -1,72 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [http://jsbin.com/cagaye](http://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/paper-toolbar/README.md b/third_party/polymer/v1_0/components-chromium/paper-toolbar/README.md
deleted file mode 100644
index a58b5a6..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-toolbar/README.md
+++ /dev/null
@@ -1,107 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-paper-toolbar.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
-The bot does some handling of markdown. Please file a bug if it does the wrong
-thing! https://github.com/PolymerLabs/tedium/issues
-
--->
-
-[![Build Status](https://travis-ci.org/PolymerElements/paper-toolbar.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-toolbar)
-
-_[Demo and API Docs](https://elements.polymer-project.org/elements/paper-toolbar)_
-
-
-##&lt;paper-toolbar&gt;
-
-Material design: [Toolbars](https://www.google.com/design/spec/components/toolbars.html)
-
-`paper-toolbar` is a horizontal bar containing items that can be used for
-label, navigation, search and actions.  The items placed inside the
-`paper-toolbar` are projected into a `class="horizontal center layout"` container inside of
-`paper-toolbar`'s Shadow DOM.  You can use flex attributes to control the items'
-sizing.
-
-Example:
-
-```html
-<paper-toolbar>
-  <paper-icon-button icon="menu" on-tap="menuAction"></paper-icon-button>
-  <div class="title">Title</div>
-  <paper-icon-button icon="more-vert" on-tap="moreAction"></paper-icon-button>
-</paper-toolbar>
-```
-
-`paper-toolbar` has a standard height, but can made be taller by setting `tall`
-class on the `paper-toolbar`. This will make the toolbar 3x the normal height.
-
-```html
-<paper-toolbar class="tall">
-  <paper-icon-button icon="menu"></paper-icon-button>
-</paper-toolbar>
-```
-
-Apply `medium-tall` class to make the toolbar medium tall.  This will make the
-toolbar 2x the normal height.
-
-```html
-<paper-toolbar class="medium-tall">
-  <paper-icon-button icon="menu"></paper-icon-button>
-</paper-toolbar>
-```
-
-When `tall`, items can pin to either the top (default), middle or bottom.  Use
-`middle` class for middle content and `bottom` class for bottom content.
-
-```html
-<paper-toolbar class="tall">
-  <paper-icon-button icon="menu"></paper-icon-button>
-  <div class="middle title">Middle Title</div>
-  <div class="bottom title">Bottom Title</div>
-</paper-toolbar>
-```
-
-For `medium-tall` toolbar, the middle and bottom contents overlap and are
-pinned to the bottom.  But `middleJustify` and `bottomJustify` attributes are
-still honored separately.
-
-To make an element completely fit at the bottom of the toolbar, use `fit` along
-with `bottom`.
-
-```html
-<paper-toolbar class="tall">
-  <div id="progressBar" class="bottom fit"></div>
-</paper-toolbar>
-```
-
-When inside a `paper-header-panel` element, the class `.animate` is toggled to animate
-the height change in the toolbar.
-
-### Styling
-
-The following custom properties and mixins are available for styling:
-
-| Custom property | Description | Default |
-| --- | --- | --- |
-| `--paper-toolbar-title` | Mixin applied to the title of the toolbar | `{}` |
-| `--paper-toolbar-background` | Toolbar background color | `--primary-color` |
-| `--paper-toolbar-color` | Toolbar foreground color | `--primary-text-color` |
-| `--paper-toolbar-height` | Custom height for toolbar | `64px` |
-| `--paper-toolbar-sm-height` | Custom height for small screen toolbar | `56px` |
-| `--paper-toolbar` | Mixin applied to the toolbar | `{}` |
-| `--paper-toolbar-content` | Mixin applied to the content section of the toolbar | `{}` |
-| `--paper-toolbar-medium` | Mixin applied to medium height toolbar | `{}` |
-| `--paper-toolbar-tall` | Mixin applied to tall height toolbar | `{}` |
-| `--paper-toolbar-transition` | Transition applied to the `.animate` class | `height 0.18s ease-in` |
-
-### Accessibility
-
-`<paper-toolbar>` has `role="toolbar"` by default. Any elements with the class `title` will
-be used as the label of the toolbar via `aria-labelledby`.
-
-
diff --git a/third_party/polymer/v1_0/components-chromium/paper-toolbar/index.html b/third_party/polymer/v1_0/components-chromium/paper-toolbar/index.html
deleted file mode 100644
index 6533b73..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-toolbar/index.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<!doctype html>
-<!--
-  @license
-  Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-  This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-  The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-  The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-  Code distributed by Google as part of the polymer project is also
-  subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-<html>
-<head>
-
-  <meta charset="utf-8">
-  <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
-
-  <title>paper-toolbar</title>
-
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-
-  <link rel="import" href="../polymer/polymer.html">
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-  <style>
-
-    body {
-      margin: 16px;
-    }
-
-  </style>
-
-</head>
-<body>
-
-  <iron-component-page></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-tooltip/.bower.json b/third_party/polymer/v1_0/components-chromium/paper-tooltip/.bower.json
deleted file mode 100644
index 3df87bd..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-tooltip/.bower.json
+++ /dev/null
@@ -1,45 +0,0 @@
-{
-  "name": "paper-tooltip",
-  "version": "1.1.2",
-  "description": "Material design tooltip popup for content",
-  "authors": [
-    "The Polymer Authors"
-  ],
-  "keywords": [
-    "web-components",
-    "polymer",
-    "tooltip"
-  ],
-  "main": "paper-tooltip.html",
-  "private": true,
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/PolymerElements/paper-tooltip.git"
-  },
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "homepage": "https://github.com/PolymerElements/paper-tooltip",
-  "ignore": [],
-  "dependencies": {
-    "polymer": "Polymer/polymer#^1.1.0",
-    "paper-styles": "PolymerElements/paper-styles#^1.0.0",
-    "neon-animation": "PolymerElements/neon-animation#^1.0.0"
-  },
-  "devDependencies": {
-    "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
-    "web-component-tester": "^4.0.0",
-    "test-fixture": "PolymerElements/test-fixture#^1.0.0",
-    "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
-    "iron-demo-helpers": "polymerelements/iron-demo-helpers#^1.0.0",
-    "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
-    "paper-icon-button": "PolymerElements/paper-icon-button#^1.0.0"
-  },
-  "_release": "1.1.2",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.1.2",
-    "commit": "6be894127678900f6e506b56fc9622ab768c03aa"
-  },
-  "_source": "git://github.com/PolymerElements/paper-tooltip.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerElements/paper-tooltip"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/paper-tooltip/.gitignore b/third_party/polymer/v1_0/components-chromium/paper-tooltip/.gitignore
deleted file mode 100644
index fbe05fc..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-tooltip/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bower_components/
diff --git a/third_party/polymer/v1_0/components-chromium/paper-tooltip/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/paper-tooltip/CONTRIBUTING.md
deleted file mode 100644
index f147978a..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-tooltip/CONTRIBUTING.md
+++ /dev/null
@@ -1,77 +0,0 @@
-
-<!--
-This file is autogenerated based on
-https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
-
-If you edit that file, it will get updated everywhere else.
-If you edit this file, your changes will get overridden :)
-
-You can however override the jsbin link with one that's customized to this
-specific element:
-
-jsbin=https://jsbin.com/cagaye/edit?html,output
--->
-# Polymer Elements
-## Guide for Contributors
-
-Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
-
-### Filing Issues
-
-**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
-
- 1. **Who will use the feature?** _“As someone filling out a form…”_
- 2. **When will they use the feature?** _“When I enter an invalid value…”_
- 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
-
-**If you are filing an issue to report a bug**, please provide:
-
- 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
-
- ```markdown
- The `paper-foo` element causes the page to turn pink when clicked.
-
- ## Expected outcome
-
- The page stays the same color.
-
- ## Actual outcome
-
- The page turns pink.
-
- ## Steps to reproduce
-
- 1. Put a `paper-foo` element in the page.
- 2. Open the page in a web browser.
- 3. Click the `paper-foo` element.
- ```
-
- 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
-
- 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
-
-### Submitting Pull Requests
-
-**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
-
-When submitting pull requests, please provide:
-
- 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
-
- ```markdown
- (For a single issue)
- Fixes #20
-
- (For multiple issues)
- Fixes #32, fixes #40
- ```
-
- 2. **A succinct description of the design** used to fix any related issues. For example:
-
- ```markdown
- This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
- ```
-
- 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
-
-If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/paper-tooltip/README.md b/third_party/polymer/v1_0/components-chromium/paper-tooltip/README.md
deleted file mode 100644
index b20a34b5..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-tooltip/README.md
+++ /dev/null
@@ -1,62 +0,0 @@
-
-<!---
-
-This README is automatically generated from the comments in these files:
-paper-tooltip.html
-
-Edit those files, and our readme bot will duplicate them over here!
-Edit this file, and the bot will squash your changes :)
-
-The bot does some handling of markdown. Please file a bug if it does the wrong
-thing! https://github.com/PolymerLabs/tedium/issues
-
--->
-
-[![Build status](https://travis-ci.org/PolymerElements/paper-tooltip.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-tooltip)
-
-_[Demo and API docs](https://elements.polymer-project.org/elements/paper-tooltip)_
-
-
-##&lt;paper-tooltip&gt;
-
-Material design: [Tooltips](https://www.google.com/design/spec/components/tooltips.html)
-
-`<paper-tooltip>` is a label that appears on hover and focus when the user
-hovers over an element with the cursor or with the keyboard. It will be centered
-to an anchor element specified in the `for` attribute, or, if that doesn't exist,
-centered to the parent node containing it.
-
-Example:
-
-```html
-<div style="display:inline-block">
-  <button>Click me!</button>
-  <paper-tooltip>Tooltip text</paper-tooltip>
-</div>
-
-<div>
-  <button id="btn">Click me!</button>
-  <paper-tooltip for="btn">Tooltip text</paper-tooltip>
-</div>
-```
-
-The tooltip can be positioned on the top|bottom|left|right of the anchor using
-the `position` attribute. The default position is bottom.
-
-```html
-<paper-tooltip for="btn" position="left">Tooltip text</paper-tooltip>
-<paper-tooltip for="btn" position="top">Tooltip text</paper-tooltip>
-```
-
-### Styling
-
-The following custom properties and mixins are available for styling:
-
-| Custom property | Description | Default |
-| --- | --- | --- |
-| `--paper-tooltip-background` | The background color of the tooltip | `#616161` |
-| `--paper-tooltip-opacity` | The opacity of the tooltip | `0.9` |
-| `--paper-tooltip-text-color` | The text color of the tooltip | `white` |
-| `--paper-tooltip` | Mixin applied to the tooltip | `{}` |
-
-
diff --git a/third_party/polymer/v1_0/components-chromium/paper-tooltip/index.html b/third_party/polymer/v1_0/components-chromium/paper-tooltip/index.html
deleted file mode 100644
index 848f0426..0000000
--- a/third_party/polymer/v1_0/components-chromium/paper-tooltip/index.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!doctype html>
-<!--
-@license
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
-Code distributed by Google as part of the polymer project is also
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
--->
-<html>
-<head>
-
-  <meta charset="utf-8">
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-
-  <title>paper-tooltip</title>
-
-  <script src="../webcomponentsjs/webcomponents-lite.js"></script>
-  <link rel="import" href="../iron-component-page/iron-component-page.html">
-
-</head>
-<body>
-
-<iron-component-page></iron-component-page>
-
-</body>
-</html>
diff --git a/third_party/polymer/v1_0/components-chromium/polymer-externs/.bower.json b/third_party/polymer/v1_0/components-chromium/polymer-externs/.bower.json
deleted file mode 100644
index adb58172..0000000
--- a/third_party/polymer/v1_0/components-chromium/polymer-externs/.bower.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
-  "name": "polymer-externs",
-  "homepage": "https://github.com/PolymerLabs/polymer-externs",
-  "version": "1.0.16",
-  "_release": "1.0.16",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.0.16",
-    "commit": "05696d670d8a283b9b8c17bd6c3d5f4f41443e12"
-  },
-  "_source": "git://github.com/PolymerLabs/polymer-externs.git",
-  "_target": "^1.0.0",
-  "_originalSource": "PolymerLabs/polymer-externs"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/polymer/.bower.json b/third_party/polymer/v1_0/components-chromium/polymer/.bower.json
deleted file mode 100644
index ad5d73c..0000000
--- a/third_party/polymer/v1_0/components-chromium/polymer/.bower.json
+++ /dev/null
@@ -1,39 +0,0 @@
-{
-  "name": "polymer",
-  "version": "1.3.1",
-  "main": [
-    "polymer.html",
-    "polymer-mini.html",
-    "polymer-micro.html"
-  ],
-  "license": "http://polymer.github.io/LICENSE.txt",
-  "ignore": [
-    "/.*",
-    "/test/",
-    "gen-changelog.sh"
-  ],
-  "authors": [
-    "The Polymer Authors (http://polymer.github.io/AUTHORS.txt)"
-  ],
-  "repository": {
-    "type": "git",
-    "url": "https://github.com/Polymer/polymer.git"
-  },
-  "dependencies": {
-    "webcomponentsjs": "^0.7.20"
-  },
-  "devDependencies": {
-    "web-component-tester": "*"
-  },
-  "private": true,
-  "homepage": "https://github.com/Polymer/polymer",
-  "_release": "1.3.1",
-  "_resolution": {
-    "type": "version",
-    "tag": "v1.3.1",
-    "commit": "61fac558012d9ef56ea78ed5435de0c418a4afbb"
-  },
-  "_source": "git://github.com/Polymer/polymer.git",
-  "_target": "^v1.0.0",
-  "_originalSource": "Polymer/polymer"
-}
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/polymer/build.log b/third_party/polymer/v1_0/components-chromium/polymer/build.log
deleted file mode 100644
index 34684aa..0000000
--- a/third_party/polymer/v1_0/components-chromium/polymer/build.log
+++ /dev/null
@@ -1,537 +0,0 @@
-BUILD LOG
----------
-Build Time: 2016-03-02T10:06:27-0800
-
-NODEJS INFORMATION
-==================
-nodejs: v5.7.0
-accepts: 1.2.13
-accessibility-developer-tools: 2.10.0
-acorn: 2.7.0
-abbrev: 1.0.7
-adm-zip: 0.4.7
-after: 0.8.1
-acorn-jsx: 2.0.1
-align-text: 0.1.3
-ansi-cyan: 0.1.1
-ansi-escapes: 1.1.1
-ansi-red: 0.1.1
-ansi-regex: 2.0.0
-ansi-styles: 2.1.0
-amdefine: 1.0.0
-ansi-wrap: 0.1.0
-append-field: 0.1.0
-archiver: 0.14.4
-argparse: 1.0.6
-arr-diff: 1.1.0
-arr-flatten: 1.0.1
-arr-union: 2.1.0
-array-find-index: 1.0.1
-array-differ: 1.0.0
-array-slice: 0.2.3
-array-flatten: 1.1.1
-array-union: 1.0.1
-array-uniq: 1.0.2
-archy: 1.0.0
-arraybuffer.slice: 0.0.6
-arrify: 1.0.1
-asap: 2.0.3
-assertion-error: 1.0.1
-asn1: 0.1.11
-assert-plus: 0.1.5
-async: 1.5.2
-aws-sign2: 0.5.0
-aws4: 1.2.1
-backo2: 1.0.2
-backoff: 2.4.1
-balanced-match: 0.3.0
-base64-arraybuffer: 0.1.2
-base64-js: 0.0.8
-base64id: 0.1.0
-beeper: 1.1.0
-benchmark: 1.0.0
-better-assert: 1.0.2
-binaryextensions: 1.0.0
-binary: 0.3.0
-bl: 0.9.5
-blob: 0.0.4
-bluebird: 2.10.2
-boom: 0.4.2
-brace-expansion: 1.1.3
-body-parser: 1.15.0
-buffers: 0.1.1
-buffer-crc32: 0.2.5
-browserstack: 1.3.1
-bufferstreams: 1.1.0
-bunyan: 1.7.1
-builtin-modules: 1.1.1
-bytes: 2.2.0
-busboy: 0.2.12
-camelcase: 2.1.0
-capture-stack-trace: 1.0.0
-callsite: 1.0.0
-caseless: 0.8.0
-center-align: 0.1.2
-camelcase-keys: 2.0.0
-chainsaw: 0.1.0
-chai: 3.5.0
-chalk: 1.1.1
-cleankill: 1.0.2
-cli-width: 2.1.0
-cli-cursor: 1.0.2
-cliui: 2.1.0
-code-point-at: 1.0.0
-clone-stats: 0.0.1
-clone: 1.0.2
-commander: 2.3.0
-component-bind: 1.0.0
-combined-stream: 0.0.7
-component-inherit: 0.0.3
-component-emitter: 1.1.2
-concat-map: 0.0.1
-compress-commons: 0.2.9
-concat-stream: 1.5.1
-configstore: 1.4.0
-content-type: 1.0.1
-content-disposition: 0.5.1
-cookie: 0.1.5
-crc: 3.2.1
-core-util-is: 1.0.2
-cookie-signature: 1.0.6
-create-error-class: 2.0.1
-crc32-stream: 0.3.4
-csv: 0.4.6
-cryptiles: 0.2.2
-csv-generate: 0.0.6
-csv-stringify: 0.0.8
-ctype: 0.5.3
-d: 0.1.1
-csv-parse: 1.0.2
-dateformat: 1.0.12
-debug: 2.2.0
-debuglog: 1.0.1
-decamelize: 1.1.2
-dashdash: 1.13.0
-deep-eql: 0.1.3
-deep-extend: 0.4.1
-deep-is: 0.1.3
-delayed-stream: 0.0.5
-del: 2.2.0
-defaults: 1.0.3
-depd: 1.1.0
-deprecated: 0.0.1
-dezalgo: 1.0.3
-dicer: 0.2.5
-diff: 1.4.0
-doctrine: 0.7.2
-dom5: 1.3.1
-destroy: 1.0.4
-dom-serializer: 0.1.0
-domelementtype: 1.3.0
-domhandler: 2.3.0
-dtrace-provider: 0.6.0
-duplexer: 0.1.1
-duplexer2: 0.0.2
-ecc-jsbn: 0.1.1
-ee-first: 1.1.1
-end-of-stream: 0.1.5
-domutils: 1.5.1
-engine.io: 1.6.8
-engine.io-client: 1.6.8
-entities: 1.1.1
-engine.io-parser: 1.2.4
-error-ex: 1.3.0
-es5-ext: 0.10.11
-es6-iterator: 2.0.0
-es6-map: 0.1.3
-es6-promise: 2.3.0
-es6-symbol: 3.0.2
-es6-set: 0.1.4
-es6-weak-map: 2.0.1
-escape-string-regexp: 1.0.4
-escape-regexp-component: 1.0.2
-escodegen: 1.8.0
-escope: 3.4.0
-eslint: 2.1.0
-eslint-plugin-html: 1.4.0
-espree: 2.2.5
-escape-html: 1.0.3
-esrecurse: 3.1.1
-estraverse-fb: 1.3.1
-estraverse: 3.1.0
-esutils: 1.1.6
-event-emitter: 0.3.4
-etag: 1.7.0
-express: 4.13.4
-exit-hook: 1.1.1
-extsprintf: 1.2.0
-fancy-log: 1.1.0
-extend-shallow: 1.1.4
-extend: 2.0.1
-fast-levenshtein: 1.1.3
-file-entry-cache: 1.2.4
-figures: 1.4.0
-find-index: 0.1.1
-find-up: 1.1.0
-finalhandler: 0.4.1
-first-chunk-stream: 1.0.0
-findup-sync: 0.3.0
-flagged-respawn: 0.3.1
-forever-agent: 0.5.2
-flat-cache: 1.0.10
-formatio: 1.1.1
-form-data: 0.2.0
-forwarded: 0.1.0
-formidable: 1.0.17
-freeport: 1.0.5
-generate-function: 2.0.0
-fresh: 0.3.0
-gaze: 0.5.2
-generate-object-property: 1.2.0
-github-url-from-git: 1.4.0
-github-url-from-username-repo: 1.0.2
-get-stdin: 4.0.1
-glob: 5.0.15
-glob-watcher: 0.0.6
-glob-stream: 3.1.18
-glob2base: 0.0.12
-globby: 4.0.0
-globals: 8.18.0
-fstream: 0.1.31
-glogg: 1.0.0
-globule: 0.1.0
-graceful-fs: 2.0.3
-got: 5.4.1
-graceful-readlink: 1.0.1
-growl: 1.8.1
-gulp: 3.9.1
-gulp-audit: 1.0.0
-gulp-eslint: 2.0.0
-gulp-replace: 0.5.4
-gulp-rename: 1.2.2
-gulp-util: 3.0.7
-gulp-vulcanize: 6.1.0
-gulplog: 1.0.0
-har-validator: 2.0.6
-has-ansi: 2.0.0
-has-binary: 0.1.7
-has-color: 0.1.7
-has-cors: 1.1.0
-has-gulplog: 0.1.0
-hoek: 0.9.1
-hosted-git-info: 2.1.4
-hawk: 1.1.1
-htmlparser2: 3.9.0
-http-signature: 0.11.0
-hydrolysis: 1.21.4
-http-errors: 1.4.0
-ignore: 2.2.19
-imurmurhash: 0.1.4
-indent-string: 2.1.0
-indexof: 0.0.1
-iconv-lite: 0.4.13
-inflight: 1.0.4
-inherits: 2.0.1
-inquirer: 0.12.0
-ini: 1.3.4
-interpret: 1.0.0
-ipaddr.js: 1.0.5
-is-absolute: 0.1.7
-is-arrayish: 0.2.1
-is-buffer: 1.1.1
-is-builtin-module: 1.0.0
-is-finite: 1.0.1
-is-fullwidth-code-point: 1.0.0
-is-my-json-valid: 2.12.4
-is-path-cwd: 1.0.0
-is-path-in-cwd: 1.0.0
-is-plain-obj: 1.1.0
-is-npm: 1.0.0
-is-path-inside: 1.0.0
-is-redirect: 1.0.0
-is-property: 1.0.2
-is-relative: 0.1.3
-is-resolvable: 1.0.0
-is-retry-allowed: 1.0.0
-is-typedarray: 1.0.0
-is-stream: 1.0.1
-isarray: 0.0.1
-is-utf8: 0.2.1
-isstream: 0.1.2
-istextorbinary: 1.0.2
-jade: 0.26.3
-jodid25519: 1.0.2
-jju: 1.2.1
-jsbn: 0.1.0
-isexe: 1.1.2
-js-yaml: 3.5.3
-json-parse-helpfulerror: 1.0.3
-json-stringify-safe: 5.0.1
-json-schema: 0.2.2
-json-stable-stringify: 1.0.1
-jsonpointer: 2.0.0
-jsonify: 0.0.0
-json3: 3.2.6
-keep-alive-agent: 0.0.1
-jsprim: 1.2.2
-latest-version: 2.0.0
-kind-of: 1.1.0
-lazy-cache: 0.2.7
-lazypipe: 1.0.1
-launchpad: 0.5.1
-lazystream: 0.1.0
-liftoff: 2.2.0
-load-json-file: 1.1.0
-lodash: 1.0.2
-lodash._basecopy: 3.0.1
-lodash._basetostring: 3.0.1
-lodash._basevalues: 3.0.0
-lodash._getnative: 3.9.1
-lodash._isiterateecall: 3.0.9
-lodash._reescape: 3.0.0
-lodash._reevaluate: 3.0.0
-lodash._root: 3.0.0
-lodash._reinterpolate: 3.0.0
-lodash.escape: 3.2.0
-lodash.isarguments: 3.0.6
-lodash.isarray: 3.0.4
-lodash.keys: 3.1.2
-lodash.template: 3.6.2
-lodash.restparam: 3.6.1
-lodash.templatesettings: 3.1.1
-levn: 0.3.0
-lolex: 1.3.2
-longest: 1.0.1
-lowercase-keys: 1.0.0
-loud-rejection: 1.2.1
-lru-cache: 2.7.3
-match-stream: 0.0.2
-map-obj: 1.0.1
-meow: 3.7.0
-media-typer: 0.3.0
-merge-descriptors: 1.0.1
-mime: 1.3.4
-methods: 1.1.2
-minimist: 1.2.0
-minimatch: 3.0.0
-mkdirp: 0.5.1
-mime-db: 1.22.0
-mocha: 2.4.5
-mime-types: 2.1.10
-ms: 0.7.1
-moment: 2.11.2
-multer: 1.1.0
-multipipe: 0.1.2
-mv: 2.1.1
-mute-stream: 0.0.5
-nan: 2.2.0
-ncp: 2.0.0
-negotiator: 0.5.3
-node-int64: 0.3.3
-node-uuid: 1.4.7
-node-status-codes: 1.0.0
-nomnom: 1.8.1
-nopt: 3.0.6
-number-is-nan: 1.0.0
-normalize-package-data: 2.3.5
-oauth-sign: 0.5.0
-object-component: 0.0.3
-object-assign: 3.0.0
-on-finished: 2.3.0
-once: 1.3.3
-onetime: 1.1.0
-optionator: 0.8.1
-orchestrator: 0.3.7
-ordered-read-streams: 0.1.0
-options: 0.0.6
-osenv: 0.1.3
-os-homedir: 1.0.1
-os-tmpdir: 1.0.1
-package-json: 2.3.0
-over: 0.0.5
-parse5: 1.5.1
-parse-json: 2.2.0
-parsejson: 0.0.1
-parseqs: 0.0.2
-parseuri: 0.0.4
-parseurl: 1.3.1
-path-is-absolute: 1.0.0
-path-is-inside: 1.0.1
-path-exists: 2.1.0
-path-type: 1.1.0
-path-to-regexp: 0.1.7
-path-posix: 1.0.0
-pify: 2.3.0
-pinkie-promise: 2.0.0
-plist: 1.2.0
-pinkie: 2.0.4
-plugin-error: 0.1.2
-precond: 0.2.3
-pluralize: 1.2.1
-polyclean: 1.3.1
-prepend-http: 1.0.3
-prelude-ls: 1.1.2
-process-nextick-args: 1.0.6
-progress: 1.1.8
-proxy-addr: 1.0.10
-pretty-hrtime: 1.0.1
-q: 1.4.1
-qs: 6.1.0
-pullstream: 0.4.1
-range-parser: 1.0.3
-raw-body: 2.1.5
-read-all-stream: 3.1.0
-read-installed: 3.1.5
-read-json-sync: 1.1.1
-read-package-json: 1.3.3
-read-pkg: 1.1.0
-read-pkg-up: 1.0.1
-readable-stream: 1.1.13
-readdir-scoped-modules: 1.0.2
-rc: 1.1.6
-redent: 1.0.0
-readline2: 1.0.1
-registry-url: 3.0.3
-repeat-string: 1.5.2
-repeating: 2.0.0
-replace-ext: 0.0.1
-replacestream: 4.0.0
-resolve: 1.1.7
-request: 2.51.0
-rechoir: 0.6.2
-right-align: 0.1.3
-rimraf: 2.4.5
-restify: 4.0.4
-run-async: 0.1.0
-rx-lite: 3.1.2
-run-sequence: 1.1.5
-restore-cursor: 1.0.1
-safe-json-stringify: 1.0.3
-samsam: 1.1.2
-sauce-connect-launcher: 0.14.0
-selenium-standalone: 4.9.1
-semver: 4.3.6
-send: 0.11.1
-sequencify: 0.0.7
-semver-diff: 2.1.0
-serve-waterfall: 1.1.1
-serve-static: 1.10.2
-sigmund: 1.0.1
-shelljs: 0.5.3
-setimmediate: 1.0.4
-signal-exit: 2.1.2
-sinon: 1.17.3
-server-destroy: 1.0.1
-slice-stream: 1.0.0
-slice-ansi: 0.0.4
-sinon-chai: 2.8.0
-slide: 1.1.6
-sntp: 0.2.4
-socket.io-adapter: 0.4.0
-socket.io: 1.4.5
-socket.io-parser: 2.2.6
-socket.io-client: 1.4.5
-sparkles: 1.0.0
-source-map: 0.2.0
-spdx-correct: 1.0.2
-spdx-expression-parse: 1.0.2
-spdx-exceptions: 1.0.4
-spdy: 1.32.5
-sprintf-js: 1.0.3
-sshpk: 1.7.4
-spdx-license-ids: 1.2.0
-stacky: 1.3.1
-stream-consume: 0.1.0
-stream-combiner: 0.2.2
-statuses: 1.2.1
-stream-transform: 0.1.1
-streamsearch: 0.1.2
-string-length: 1.0.1
-string-width: 1.0.1
-string_decoder: 0.10.31
-stringstream: 0.0.5
-strip-ansi: 3.0.0
-strip-bom: 2.0.0
-strip-indent: 1.0.1
-strip-json-comments: 1.0.4
-supports-color: 2.0.0
-table: 3.7.8
-tar-stream: 1.1.5
-temp: 0.8.3
-text-table: 0.2.0
-textextensions: 1.0.1
-through: 2.3.8
-test-fixture: 1.1.0
-through2: 2.0.1
-timed-out: 2.0.0
-to-array: 0.1.4
-tildify: 1.1.2
-tough-cookie: 2.2.1
-tryit: 1.0.2
-trim-newlines: 1.0.0
-tunnel-agent: 0.4.2
-traverse: 0.3.9
-tv4: 1.2.7
-type-check: 0.3.2
-tweetnacl: 0.14.1
-type-is: 1.6.12
-type-detect: 1.0.0
-uglify-js: 2.6.1
-uglify-to-browserify: 1.0.2
-typedarray: 0.0.6
-ultron: 1.0.2
-underscore: 1.6.0
-unique-stream: 1.0.0
-unpipe: 1.0.0
-underscore.string: 3.0.3
-unzip: 0.1.11
-unzip-response: 1.0.0
-url-parse-lax: 1.0.0
-urijs: 1.16.1
-user-home: 1.1.1
-update-notifier: 0.6.0
-utf8: 2.1.0
-util: 0.10.3
-util-deprecate: 1.0.2
-util-extend: 1.0.3
-uuid: 2.0.1
-v8flags: 2.0.11
-utils-merge: 1.0.0
-validate-npm-package-license: 3.0.1
-vary: 1.0.1
-vasync: 1.6.3
-vinyl: 0.5.3
-verror: 1.6.1
-vinyl-fs: 0.3.14
-vargs: 0.1.0
-vulcanize: 1.14.5
-wct-local: 2.0.1
-wd: 0.3.12
-wct-sauce: 1.8.3
-web-component-tester: 4.2.1
-window-size: 0.1.0
-wordwrap: 1.0.0
-which: 1.2.4
-wrappy: 1.0.1
-write-file-atomic: 1.1.4
-write: 0.2.1
-xdg-basedir: 2.0.0
-xmlhttprequest-ssl: 1.5.1
-xmlbuilder: 4.0.0
-xregexp: 3.0.0
-xtend: 4.0.1
-ws: 1.0.1
-xmldom: 0.1.22
-yeast: 0.1.2
-zip-stream: 0.5.2
-yargs: 3.10.0
-
-REPO REVISIONS
-==============
-polymer: 119361604ad2e733fb1fe0324a2d5ef758ed32fd
-
-BUILD HASHES
-============
-polymer-mini.html: 1a66f21c130ca9c6d23878820f7d65c8c6914919
-polymer-micro.html: e3398b4fe03068fa83d783123fceb4d17609e3b6
-polymer.html: 23b2be8162d32ac2c4bbeee258dc5c63bf14effc
\ No newline at end of file
diff --git a/third_party/polymer/v1_0/create_components_summary.py b/third_party/polymer/v1_0/create_components_summary.py
index a5df89c0..a8184db 100644
--- a/third_party/polymer/v1_0/create_components_summary.py
+++ b/third_party/polymer/v1_0/create_components_summary.py
@@ -5,7 +5,7 @@
 import os
 import json
 
-COMPONENTS_DIR = 'components-chromium'
+COMPONENTS_DIR = 'components'
 COMPONENT_SUMMARY =\
 """Name: %(name)s
 Version: %(version)s
diff --git a/third_party/polymer/v1_0/extract_inline_scripts.sh b/third_party/polymer/v1_0/extract_inline_scripts.sh
index c6c22ec..ca60af2 100755
--- a/third_party/polymer/v1_0/extract_inline_scripts.sh
+++ b/third_party/polymer/v1_0/extract_inline_scripts.sh
@@ -21,15 +21,10 @@
 src="${1%/}"
 dst="${2%/}"
 
-rsync -c --delete -r -v --exclude="compiled_resources*.gyp" "$src/" "$dst/"
+rsync -c --delete -r -v --exclude-from="rsync_exclude.txt" \
+    --prune-empty-dirs "$src/" "$dst/"
 
-find "$dst" -name "*.html" \
-            -not -path "*/demos/*" \
-            -not -path "*/test/*" \
-            -not -path "*/tests/*" \
-            -not -name "demo*.html" \
-            -not -name "index.html" \
-            -not -name "metadata.html" | \
+find "$dst" -name "*.html" | \
 xargs grep -l "<script>" | \
 while read original_html_name
 do
diff --git a/third_party/polymer/v1_0/generate_gyp.sh b/third_party/polymer/v1_0/generate_gyp.sh
index 943a13c7..9c4be842 100755
--- a/third_party/polymer/v1_0/generate_gyp.sh
+++ b/third_party/polymer/v1_0/generate_gyp.sh
@@ -6,7 +6,7 @@
 dirs=$(find components-chromium -type d | grep -v 'components-chromium/polymer')
 
 for dir in $dirs; do
-  htmls=$(\ls $dir/*.html 2>/dev/null | egrep -v '(demo|index)\.html')
+  htmls=$(\ls $dir/*.html 2>/dev/null)
   if [ "$htmls" ]; then
     echo "Creating $dir/compiled_resources2.gyp"
     ../../../tools/polymer/generate_compiled_resources_gyp.py $htmls > \
diff --git a/third_party/polymer/v1_0/rsync_exclude.txt b/third_party/polymer/v1_0/rsync_exclude.txt
new file mode 100644
index 0000000..8ed53df4
--- /dev/null
+++ b/third_party/polymer/v1_0/rsync_exclude.txt
@@ -0,0 +1,15 @@
+.bower.json
+build.log
+compiled_resources*.gyp
+*/demo/
+demo*.html
+*/demos/
+.github
+.gitignore
+hero.svg
+index.html
+*.md
+metadata.html
+*/test/
+*/tests/
+.travis.yml
diff --git a/tools/android/loading/google_storage_util.py b/tools/android/loading/google_storage_util.py
new file mode 100644
index 0000000..82a59a5
--- /dev/null
+++ b/tools/android/loading/google_storage_util.py
@@ -0,0 +1,19 @@
+# Copyright 2016 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Contains utility functions for interacting with Google Storage."""
+
+import subprocess
+
+def ReadFromGoogleStorage(path):
+  """Given a Google Storage path, returns the contents of the file at that path
+     as a string. Will fail if the user does not have authorization to access
+     the path or if the path does not exist. To gain authorization, follow the
+     instructions for installing gsutil and setting up credentials to access
+     protected data that are on this page:
+     https://cloud.google.com/storage/docs/gsutil_install"""
+  # TODO(blundell): Change this to use the gcloud Python module once
+  # https://github.com/GoogleCloudPlatform/gcloud-python/issues/14360 is fixed.
+  contents = subprocess.check_output(["gsutil", "cat", path])
+  return contents
diff --git a/tools/android/loading/loading_trace_database.py b/tools/android/loading/loading_trace_database.py
index 89d608a..d2e49100 100644
--- a/tools/android/loading/loading_trace_database.py
+++ b/tools/android/loading/loading_trace_database.py
@@ -5,7 +5,7 @@
 """Represents a database of on-disk traces."""
 
 import json
-
+from google_storage_util import ReadFromGoogleStorage
 
 class LoadingTraceDatabase:
 
@@ -26,7 +26,7 @@
     return self._traces_dict
 
   def ToJsonFile(self, json_path):
-    """Save a json file representing this instance."""
+    """Saves a json file representing this instance."""
     json_dict = self.ToJsonDict()
     with open(json_path, 'w') as output_file:
        json.dump(json_dict, output_file, indent=2)
@@ -41,3 +41,10 @@
     """Returns an instance from a json file saved by ToJsonFile()."""
     with open(json_path) as input_file:
       return cls.FromJsonDict(json.load(input_file))
+
+  @classmethod
+  def FromJsonFileInGoogleStorage(cls, json_google_storage_path):
+    """Returns an instance from a json file in Google Storage whose contents
+       were generated by ToJsonFile()."""
+    json_string = ReadFromGoogleStorage(json_google_storage_path)
+    return cls.FromJsonDict(json.loads(json_string))
diff --git a/tools/clang/scripts/package.py b/tools/clang/scripts/package.py
index 63ab1a98..1fb903b 100755
--- a/tools/clang/scripts/package.py
+++ b/tools/clang/scripts/package.py
@@ -253,9 +253,9 @@
   if sys.platform != 'win32':
     os.symlink('clang', os.path.join(pdir, 'bin', 'clang++'))
     os.symlink('clang', os.path.join(pdir, 'bin', 'clang-cl'))
+
+  # Copy libc++ headers.
   if sys.platform == 'darwin':
-    os.symlink('libc++.1.dylib', os.path.join(pdir, 'bin', 'libc++.dylib'))
-    # Also copy libc++ headers.
     shutil.copytree(os.path.join(LLVM_BOOTSTRAP_INSTALL_DIR, 'include', 'c++'),
                     os.path.join(pdir, 'include', 'c++'))
 
diff --git a/tools/grit/grit_rule.gni b/tools/grit/grit_rule.gni
index 68e5976fe..90c0b00 100644
--- a/tools/grit/grit_rule.gni
+++ b/tools/grit/grit_rule.gni
@@ -182,8 +182,6 @@
 
 if (is_android) {
   grit_defines += [
-    "-t",
-    "android",
     "-E",
     "ANDROID_JAVA_TAGGED_ONLY=true",
   ]
@@ -196,11 +194,38 @@
   ]
 }
 
-if (is_ios) {
-  grit_defines += [
-    "-t",
-    "ios",
-  ]
+# When cross-compiling, explicitly pass the target system to grit.
+if (current_toolchain != host_toolchain) {
+  if (is_android) {
+    grit_defines += [
+      "-t",
+      "android",
+    ]
+  }
+  if (is_ios) {
+    grit_defines += [
+      "-t",
+      "ios",
+    ]
+  }
+  if (is_linux) {
+    grit_defines += [
+      "-t",
+      "linux2",
+    ]
+  }
+  if (is_mac) {
+    grit_defines += [
+      "-t",
+      "darwin",
+    ]
+  }
+  if (is_win) {
+    grit_defines += [
+      "-t",
+      "win32",
+    ]
+  }
 }
 
 if (enable_extensions) {
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index d1430d5..7d91471 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -66169,6 +66169,7 @@
   <int value="322" label="Whitelist of USB detachable devices"/>
   <int value="323" label="Allow bluetooth on device"/>
   <int value="324" label="Suppress the unsupported OS warning"/>
+  <int value="325" label="Enable queries to Quirks Server"/>
 </enum>
 
 <enum name="EnterprisePolicyInvalidations" type="int">
diff --git a/ui/base/test/scoped_fake_nswindow_fullscreen.mm b/ui/base/test/scoped_fake_nswindow_fullscreen.mm
index 0b32769..1fcd8949 100644
--- a/ui/base/test/scoped_fake_nswindow_fullscreen.mm
+++ b/ui/base/test/scoped_fake_nswindow_fullscreen.mm
@@ -196,10 +196,6 @@
 };
 
 ScopedFakeNSWindowFullscreen::ScopedFakeNSWindowFullscreen() {
-  // -[NSWindow toggleFullScreen:] does not exist on 10.6, so do nothing.
-  if (base::mac::IsOSSnowLeopard())
-    return;
-
   DCHECK(!g_fake_fullscreen_impl);
   impl_.reset(new Impl);
   g_fake_fullscreen_impl = impl_.get();
diff --git a/ui/base/test/scoped_fake_nswindow_fullscreen_unittest.mm b/ui/base/test/scoped_fake_nswindow_fullscreen_unittest.mm
index c4c07e76..e5841e0 100644
--- a/ui/base/test/scoped_fake_nswindow_fullscreen_unittest.mm
+++ b/ui/base/test/scoped_fake_nswindow_fullscreen_unittest.mm
@@ -41,9 +41,6 @@
 
 // Test the order of notifications sent when faking fullscreen transitions.
 TEST(ScopedFakeNSWindowFullscreenTest, TestOrdering) {
-  if (base::mac::IsOSSnowLeopard())
-    return;
-
   base::MessageLoopForUI message_loop;
 
   NSUInteger style_mask = NSTexturedBackgroundWindowMask | NSTitledWindowMask |
diff --git a/ui/views/cocoa/bridged_native_widget.mm b/ui/views/cocoa/bridged_native_widget.mm
index 09f7880..6a92058 100644
--- a/ui/views/cocoa/bridged_native_widget.mm
+++ b/ui/views/cocoa/bridged_native_widget.mm
@@ -706,11 +706,6 @@
   if (!window_visible_)
     SetVisibilityState(SHOW_INACTIVE);
 
-  if (base::mac::IsOSSnowLeopard()) {
-    NOTIMPLEMENTED();
-    return;  // TODO(tapted): Implement this for Snow Leopard.
-  }
-
   // Enable fullscreen collection behavior because:
   // 1: -[NSWindow toggleFullscreen:] would otherwise be ignored,
   // 2: the fullscreen button must be enabled so the user can leave fullscreen.
diff --git a/ui/views/cocoa/bridged_native_widget_interactive_uitest.mm b/ui/views/cocoa/bridged_native_widget_interactive_uitest.mm
index 686b2c1..79fdac1 100644
--- a/ui/views/cocoa/bridged_native_widget_interactive_uitest.mm
+++ b/ui/views/cocoa/bridged_native_widget_interactive_uitest.mm
@@ -77,8 +77,6 @@
 // by the Widget code or elsewhere (e.g. by the user).
 TEST_F(BridgedNativeWidgetUITest, FullscreenSynchronousState) {
   EXPECT_FALSE(widget_->IsFullscreen());
-  if (base::mac::IsOSSnowLeopard())
-    return;
 
   // Allow user-initiated fullscreen changes on the Window.
   [test_window()
@@ -146,11 +144,6 @@
   EXPECT_FALSE(widget_->IsVisible());
   widget_->SetFullscreen(true);
   EXPECT_TRUE(widget_->IsVisible());
-  if (base::mac::IsOSSnowLeopard()) {
-    // On Snow Leopard, SetFullscreen() isn't implemented. But shouldn't crash.
-    EXPECT_FALSE(widget_->IsFullscreen());
-    return;
-  }
 
   EXPECT_TRUE(widget_->IsFullscreen());
   EXPECT_EQ(restored_bounds, widget_->GetRestoredBounds());
@@ -177,9 +170,6 @@
 
 // Test that Widget::Restore exits fullscreen.
 TEST_F(BridgedNativeWidgetUITest, FullscreenRestore) {
-  if (base::mac::IsOSSnowLeopard())
-    return;
-
   base::scoped_nsobject<NSWindowFullscreenNotificationWaiter> waiter(
       [[NSWindowFullscreenNotificationWaiter alloc]
           initWithWindow:test_window()]);
diff --git a/ui/views/cocoa/bridged_native_widget_unittest.mm b/ui/views/cocoa/bridged_native_widget_unittest.mm
index 7723f238..3b3eb08 100644
--- a/ui/views/cocoa/bridged_native_widget_unittest.mm
+++ b/ui/views/cocoa/bridged_native_widget_unittest.mm
@@ -684,9 +684,6 @@
 // mashing Ctrl+Left/Right to keep OSX in a transition between Spaces to cause
 // the fullscreen transition to fail.
 TEST_F(BridgedNativeWidgetSimulateFullscreenTest, FailToEnterAndExit) {
-  if (base::mac::IsOSSnowLeopard())
-    return;
-
   base::scoped_nsobject<NSWindow> owned_window(
       [[BridgedNativeWidgetTestFullScreenWindow alloc]
           initWithContentRect:NSMakeRect(50, 50, 400, 300)
diff --git a/ui/views/cocoa/views_scrollbar_bridge.mm b/ui/views/cocoa/views_scrollbar_bridge.mm
index 94527be..d80dece 100644
--- a/ui/views/cocoa/views_scrollbar_bridge.mm
+++ b/ui/views/cocoa/views_scrollbar_bridge.mm
@@ -4,7 +4,6 @@
 
 #import "ui/views/cocoa/views_scrollbar_bridge.h"
 
-#include "base/mac/mac_util.h"
 #import "base/mac/sdk_forward_declarations.h"
 
 @interface ViewsScrollbarBridge ()
@@ -44,11 +43,7 @@
 }
 
 + (NSScrollerStyle)getPreferredScrollerStyle {
-  if (![NSScroller respondsToSelector:@selector(preferredScrollerStyle)]) {
-    DCHECK(base::mac::IsOSSnowLeopard());
-    return NSScrollerStyleLegacy;
-  }
   return [NSScroller preferredScrollerStyle];
 }
 
-@end
\ No newline at end of file
+@end
diff --git a/ui/views/widget/native_widget_mac_interactive_uitest.mm b/ui/views/widget/native_widget_mac_interactive_uitest.mm
index e8537ab..528f67d 100644
--- a/ui/views/widget/native_widget_mac_interactive_uitest.mm
+++ b/ui/views/widget/native_widget_mac_interactive_uitest.mm
@@ -164,10 +164,6 @@
 // Test that parent windows keep their traffic lights enabled when showing
 // dialogs.
 TEST_F(NativeWidgetMacInteractiveUITest, ParentWindowTrafficLights) {
-  // Snow leopard doesn't have -[NSWindow _sharesParentKeyState].
-  if (base::mac::IsOSSnowLeopard())
-    return;
-
   Widget* parent_widget = CreateTopLevelPlatformWidget();
   parent_widget->SetBounds(gfx::Rect(100, 100, 100, 100));
   ShowKeyWindow(parent_widget);
diff --git a/ui/views/widget/widget_unittest.cc b/ui/views/widget/widget_unittest.cc
index b571f5e..0b8c645 100644
--- a/ui/views/widget/widget_unittest.cc
+++ b/ui/views/widget/widget_unittest.cc
@@ -61,15 +61,6 @@
   return tmp;
 }
 
-// Helper function for Snow Leopard special cases to avoid #ifdef litter.
-bool IsTestingSnowLeopard() {
-#if defined(OS_MACOSX)
-  return base::mac::IsOSSnowLeopard();
-#else
-  return false;
-#endif
-}
-
 // This class can be used as a deleter for scoped_ptr<Widget>
 // to call function Widget::CloseNow automatically.
 struct WidgetCloser {
@@ -1160,14 +1151,8 @@
   toplevel->SetFullscreen(true);
   RunPendingMessages();
 
-  if (IsTestingSnowLeopard()) {
-    // Fullscreen not implemented for Snow Leopard.
-    EXPECT_EQ(toplevel->GetWindowBoundsInScreen(),
-              toplevel->GetRestoredBounds());
-  } else {
-    EXPECT_NE(toplevel->GetWindowBoundsInScreen(),
-              toplevel->GetRestoredBounds());
-  }
+  EXPECT_NE(toplevel->GetWindowBoundsInScreen(),
+            toplevel->GetRestoredBounds());
   EXPECT_EQ(bounds, toplevel->GetRestoredBounds());
 
   toplevel->SetFullscreen(false);
@@ -3069,12 +3054,7 @@
   widget->Show();
   RunPendingMessages();
 
-  if (IsTestingSnowLeopard()) {
-    // Fullscreen is currently ignored on Snow Leopard.
-    EXPECT_FALSE(frame->fullscreen_layout_called());
-  } else {
-    EXPECT_TRUE(frame->fullscreen_layout_called());
-  }
+  EXPECT_TRUE(frame->fullscreen_layout_called());
 }
 
 #if !defined(OS_CHROMEOS)
diff --git a/ui/wm/core/image_grid.cc b/ui/wm/core/image_grid.cc
index 553e442..82ca0e3 100644
--- a/ui/wm/core/image_grid.cc
+++ b/ui/wm/core/image_grid.cc
@@ -29,18 +29,20 @@
 // right and bottom layers are stretched to the height or width of the
 // center image.
 
-void ScaleWidth(gfx::Size center, ui::Layer* layer, gfx::Transform& transform) {
+void ScaleWidth(const gfx::Size& center,
+                ui::Layer* layer,
+                gfx::Transform* transform) {
   float layer_width = layer->bounds().width() * layer->device_scale_factor();
   float scale = static_cast<float>(center.width()) / layer_width;
-  transform.Scale(scale, 1.0);
+  transform->Scale(scale, 1.0);
 }
 
-void ScaleHeight(gfx::Size center,
+void ScaleHeight(const gfx::Size& center,
                  ui::Layer* layer,
-                 gfx::Transform& transform) {
+                 gfx::Transform* transform) {
   float layer_height = layer->bounds().height() * layer->device_scale_factor();
   float scale = static_cast<float>(center.height()) / layer_height;
-  transform.Scale(1.0, scale);
+  transform->Scale(1.0, scale);
 }
 
 // Returns the dimensions of |image| if non-NULL or gfx::Size(0, 0) otherwise.
@@ -153,7 +155,7 @@
     if (center_width > 0) {
       gfx::Transform transform;
       transform.Translate(left, 0);
-      ScaleWidth(center_size_in_pixels, top_layer_.get(), transform);
+      ScaleWidth(center_size_in_pixels, top_layer_.get(), &transform);
       top_layer_->SetTransform(transform);
     }
     top_layer_->SetVisible(center_width > 0);
@@ -163,7 +165,7 @@
       gfx::Transform transform;
       transform.Translate(
           left, size.height() - bottom_layer_->bounds().height());
-      ScaleWidth(center_size_in_pixels, bottom_layer_.get(), transform);
+      ScaleWidth(center_size_in_pixels, bottom_layer_.get(), &transform);
       bottom_layer_->SetTransform(transform);
     }
     bottom_layer_->SetVisible(center_width > 0);
@@ -172,7 +174,7 @@
     if (center_height > 0) {
       gfx::Transform transform;
       transform.Translate(0, top);
-      ScaleHeight(center_size_in_pixels, left_layer_.get(), transform);
+      ScaleHeight(center_size_in_pixels, left_layer_.get(), &transform);
       left_layer_->SetTransform(transform);
     }
     left_layer_->SetVisible(center_height > 0);
@@ -182,7 +184,7 @@
       gfx::Transform transform;
       transform.Translate(
           size.width() - right_layer_->bounds().width(), top);
-      ScaleHeight(center_size_in_pixels, right_layer_.get(), transform);
+      ScaleHeight(center_size_in_pixels, right_layer_.get(), &transform);
       right_layer_->SetTransform(transform);
     }
     right_layer_->SetVisible(center_height > 0);
@@ -268,7 +270,7 @@
 }
 
 void ImageGrid::ImagePainter::OnPaintLayer(const ui::PaintContext& context) {
-  gfx::Size bounding_size(clip_rect_.right(), clip_rect_.bottom());
+  gfx::Size bounding_size(image_.width(), image_.height());
   ui::PaintRecorder recorder(context, bounding_size);
   if (!clip_rect_.IsEmpty())
     recorder.canvas()->ClipRect(clip_rect_);
@@ -298,8 +300,6 @@
   const int kMinimumSize = 20;
 
   // Clean out old layers and painters.
-  if (layer_ptr->get())
-    layer_->Remove(layer_ptr->get());
   layer_ptr->reset();
   painter_ptr->reset();