diff --git a/DEPS b/DEPS
index e5df041..aed2ead 100644
--- a/DEPS
+++ b/DEPS
@@ -44,7 +44,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling V8
   # and whatever else without interference from each other.
-  'v8_revision': 'b4614578d51c7064097839d706a6fe6cb53477fe',
+  'v8_revision': '328ce17831c068a493c4759794153e8b04b6dc6d',
   # 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.
@@ -228,7 +228,7 @@
     Var('chromium_git') + '/native_client/src/third_party/scons-2.0.1.git' + '@' + '1c1550e17fc26355d08627fbdec13d8291227067',
 
   'src/third_party/webrtc':
-    Var('chromium_git') + '/external/webrtc/trunk/webrtc.git' + '@' + 'a77fc98798be93e63384edcfb128b4f33949b1b7', # commit position 15939
+    Var('chromium_git') + '/external/webrtc/trunk/webrtc.git' + '@' + 'a048ce1c9fcc0db50e10a33c463a71d19d29e275', # commit position 15954
 
   'src/third_party/openmax_dl':
     Var('chromium_git') + '/external/webrtc/deps/third_party/openmax.git' + '@' +  Var('openmax_dl_revision'),
diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
index 0106548..c04a109 100644
--- a/build/config/compiler/BUILD.gn
+++ b/build/config/compiler/BUILD.gn
@@ -78,6 +78,11 @@
   # See: https://bugs.chromium.org/p/chromium/issues/detail?id=457359
   fatal_linker_warnings = true
 
+  # Build with C++ RTTI enabled. Chromium builds without RTTI by default,
+  # but some sanitizers are known to require it, like CFI diagnostics
+  # and UBsan variants.
+  use_rtti = use_cfi_diag || is_ubsan_vptr || is_ubsan_security
+
   # AFDO (Automatic Feedback Directed Optimizer) is a form of profile-guided
   # optimization that GCC supports. It used by ChromeOS in their official
   # builds. To use it, set auto_profile_path to the path to a file containing
@@ -1188,9 +1193,10 @@
     cflags_cc = [ "-frtti" ]
   }
 }
+
 config("no_rtti") {
-  # CFI diagnostics and UBsan vptr require RTTI.
-  if (!use_cfi_diag && !is_ubsan_vptr && !is_ubsan_security) {
+  # Some sanitizer configs may require RTTI to be left enabled globally
+  if (!use_rtti) {
     if (is_win) {
       cflags_cc = [ "/GR-" ]
     } else {
diff --git a/chrome/app/vector_icons/BUILD.gn b/chrome/app/vector_icons/BUILD.gn
deleted file mode 100644
index 35502cd..0000000
--- a/chrome/app/vector_icons/BUILD.gn
+++ /dev/null
@@ -1,58 +0,0 @@
-# Copyright 2017 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-action("aggregate_vector_icons") {
-  visibility = [ ":*" ]
-
-  script = "//ui/gfx/vector_icons/aggregate_vector_icons.py"
-
-  icons = [
-    "browser_tools.icon",
-    "browser_tools_error.icon",
-    "browser_tools_update.icon",
-    "navigate_back.1x.icon",
-    "navigate_back.icon",
-    "navigate_forward.1x.icon",
-    "navigate_forward.icon",
-    "navigate_home.1x.icon",
-    "navigate_home.icon",
-    "navigate_reload.1x.icon",
-    "navigate_reload.icon",
-    "navigate_stop.1x.icon",
-    "navigate_stop.icon",
-  ]
-
-  output_cc = "$target_gen_dir/vector_icons.cc"
-  output_h = "$target_gen_dir/vector_icons.h"
-
-  inputs = icons
-  inputs += [
-    "vector_icons.cc.template",
-    "vector_icons.h.template",
-  ]
-  outputs = [
-    output_cc,
-    output_h,
-  ]
-
-  response_file_contents = rebase_path(icons, root_build_dir)
-
-  args = [
-    "--working_directory=" + rebase_path("./"),
-    "--file_list={{response_file_name}}",
-    "--output_cc=" + rebase_path(output_cc, root_build_dir),
-    "--output_h=" + rebase_path(output_h, root_build_dir),
-  ]
-}
-
-source_set("vector_icons") {
-  sources = get_target_outputs(":aggregate_vector_icons")
-  sources += [ "//ui/gfx/vector_icon_types.h" ]
-
-  deps = [
-    ":aggregate_vector_icons",
-    "//base",
-    "//skia",
-  ]
-}
diff --git a/chrome/app/vector_icons/vector_icons.cc.template b/chrome/app/vector_icons/vector_icons.cc.template
deleted file mode 100644
index 5c5155e1..0000000
--- a/chrome/app/vector_icons/vector_icons.cc.template
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// vector_icons.cc.template is used to generate vector_icons.cc. Edit the former
-// rather than the latter.
-
-#include "chrome/app/vector_icons/vector_icons.h"
-
-#include "base/logging.h"
-#include "ui/gfx/vector_icon_types.h"
-
-#define PATH_ELEMENT_TEMPLATE(path_name, ...) \
-static gfx::PathElement path_name[] = {__VA_ARGS__};
-
-#define VECTOR_ICON_TEMPLATE(icon_name, path_name, path_name_1x) \
-const gfx::VectorIcon icon_name = { path_name , path_name_1x };
-
-using namespace gfx;
-
-TEMPLATE_PLACEHOLDER
diff --git a/chrome/app/vector_icons/vector_icons.h.template b/chrome/app/vector_icons/vector_icons.h.template
deleted file mode 100644
index 4bc81a72..0000000
--- a/chrome/app/vector_icons/vector_icons.h.template
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// vector_icons.h.template is used to generate vector_icons.h. Edit the former
-// rather than the latter.
-
-#ifndef CHROME_APP_VECTOR_ICONS_VECTOR_ICONS_H_
-#define CHROME_APP_VECTOR_ICONS_VECTOR_ICONS_H_
-
-namespace gfx {
-struct VectorIcon;
-}
-
-#define VECTOR_ICON_TEMPLATE_H(icon_name) \
-extern const gfx::VectorIcon icon_name;
-
-TEMPLATE_PLACEHOLDER
-
-#endif  // CHROME_APP_VECTOR_ICONS_VECTOR_ICONS_H_
diff --git a/chrome/browser/chromeos/policy/recommendation_restorer_unittest.cc b/chrome/browser/chromeos/policy/recommendation_restorer_unittest.cc
index a6828be0..03662e8 100644
--- a/chrome/browser/chromeos/policy/recommendation_restorer_unittest.cc
+++ b/chrome/browser/chromeos/policy/recommendation_restorer_unittest.cc
@@ -94,6 +94,7 @@
       prefs_(new sync_preferences::TestingPrefServiceSyncable(
           new TestingPrefStore,
           new TestingPrefStore,
+          new TestingPrefStore,
           recommended_prefs_,
           new user_prefs::PrefRegistrySyncable,
           new PrefNotifierImpl)),
diff --git a/chrome/browser/ntp_snippets/content_suggestions_service_factory.cc b/chrome/browser/ntp_snippets/content_suggestions_service_factory.cc
index ea214af..d21b916 100644
--- a/chrome/browser/ntp_snippets/content_suggestions_service_factory.cc
+++ b/chrome/browser/ntp_snippets/content_suggestions_service_factory.cc
@@ -140,6 +140,13 @@
 }
 
 #if defined(OS_ANDROID)
+
+bool IsPhysicalWebPageProviderEnabled() {
+  return base::FeatureList::IsEnabled(
+             ntp_snippets::kPhysicalWebPageSuggestionsFeature) &&
+         base::FeatureList::IsEnabled(chrome::android::kPhysicalWebFeature);
+}
+
 void RegisterPhysicalWebPageProvider(
     ContentSuggestionsService* service,
     PhysicalWebDataSource* physical_web_data_source,
@@ -317,8 +324,7 @@
   }
 
 #if defined(OS_ANDROID)
-  if (base::FeatureList::IsEnabled(
-          ntp_snippets::kPhysicalWebPageSuggestionsFeature)) {
+  if (IsPhysicalWebPageProviderEnabled()) {
     RegisterPhysicalWebPageProvider(service, physical_web_data_source,
                                     pref_service);
   }
diff --git a/chrome/browser/recovery/recovery_install_global_error.cc b/chrome/browser/recovery/recovery_install_global_error.cc
index bd68103..0b4d55b 100644
--- a/chrome/browser/recovery/recovery_install_global_error.cc
+++ b/chrome/browser/recovery/recovery_install_global_error.cc
@@ -5,7 +5,6 @@
 #include "chrome/browser/recovery/recovery_install_global_error.h"
 
 #include "chrome/app/chrome_command_ids.h"
-#include "chrome/app/vector_icons/vector_icons.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/component_updater/recovery_component_installer.h"
 #include "chrome/browser/profiles/profile.h"
@@ -18,6 +17,7 @@
 #include "components/prefs/pref_service.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/gfx/paint_vector_icon.h"
+#include "ui/gfx/vector_icons_public.h"
 #include "ui/native_theme/native_theme.h"
 
 RecoveryInstallGlobalError::RecoveryInstallGlobalError(Profile* profile)
@@ -69,7 +69,7 @@
 
 gfx::Image RecoveryInstallGlobalError::MenuItemIcon() {
   return gfx::Image(gfx::CreateVectorIcon(
-      kBrowserToolsUpdateIcon,
+      gfx::VectorIconId::BROWSER_TOOLS_UPDATE,
       ui::NativeTheme::GetInstanceForNativeUi()->GetSystemColor(
           ui::NativeTheme::kColorId_AlertSeverityHigh)));
 }
diff --git a/chrome/browser/resources/snippets_internals.html b/chrome/browser/resources/snippets_internals.html
index fe99b6d..7d93f26 100644
--- a/chrome/browser/resources/snippets_internals.html
+++ b/chrome/browser/resources/snippets_internals.html
@@ -45,6 +45,9 @@
         <td class="name">Physical Web Page Suggestions enabled
         <td id="flag-physical-web-page-suggestions" class="value">
       <tr>
+        <td class="name">Physical Web enabled
+        <td id="flag-physical-web" class="value">
+      <tr>
         <td class="name">Snippets type
         <td id="switch-personalized" class="value">
       <tr>
diff --git a/chrome/browser/safe_browsing/incident_reporting/platform_state_store_win_unittest.cc b/chrome/browser/safe_browsing/incident_reporting/platform_state_store_win_unittest.cc
index ce54e33..44d3606 100644
--- a/chrome/browser/safe_browsing/incident_reporting/platform_state_store_win_unittest.cc
+++ b/chrome/browser/safe_browsing/incident_reporting/platform_state_store_win_unittest.cc
@@ -64,8 +64,9 @@
     // Ownership of |user_pref_store| is passed to the service.
     std::unique_ptr<sync_preferences::TestingPrefServiceSyncable> prefs(
         new sync_preferences::TestingPrefServiceSyncable(
-            new TestingPrefStore(), user_pref_store, new TestingPrefStore(),
-            new user_prefs::PrefRegistrySyncable(), new PrefNotifierImpl()));
+            new TestingPrefStore(), new TestingPrefStore(), user_pref_store,
+            new TestingPrefStore(), new user_prefs::PrefRegistrySyncable(),
+            new PrefNotifierImpl()));
     chrome::RegisterUserProfilePrefs(prefs->registry());
     profile_ = profile_manager_.CreateTestingProfile(
         kProfileName_, std::move(prefs), base::UTF8ToUTF16(kProfileName_), 0,
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index f55aa47..6b90129 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -1178,7 +1178,6 @@
     ]
     deps += [
       "//apps",
-      "//chrome/app/vector_icons",
       "//chrome/browser/profile_resetter:profile_reset_report_proto",
       "//chrome/common:features",
       "//components/feedback/proto",
diff --git a/chrome/browser/ui/cocoa/toolbar/app_toolbar_button.mm b/chrome/browser/ui/cocoa/toolbar/app_toolbar_button.mm
index e5065fca..bc09d31c 100644
--- a/chrome/browser/ui/cocoa/toolbar/app_toolbar_button.mm
+++ b/chrome/browser/ui/cocoa/toolbar/app_toolbar_button.mm
@@ -5,7 +5,6 @@
 #import "chrome/browser/ui/cocoa/toolbar/app_toolbar_button.h"
 
 #include "base/macros.h"
-#include "chrome/app/vector_icons/vector_icons.h"
 #import "chrome/browser/ui/cocoa/themed_window.h"
 #import "chrome/browser/ui/cocoa/view_id_util.h"
 #include "ui/base/material_design/material_design_controller.h"
@@ -34,19 +33,19 @@
   type_ = AppMenuIconController::IconType::NONE;
 }
 
-- (const gfx::VectorIcon*)vectorIcon {
+- (gfx::VectorIconId)vectorIconId {
   switch (type_) {
     case AppMenuIconController::IconType::NONE:
       DCHECK_EQ(severity_, AppMenuIconController::Severity::NONE);
-      return &kBrowserToolsIcon;
+      return gfx::VectorIconId::BROWSER_TOOLS;
     case AppMenuIconController::IconType::UPGRADE_NOTIFICATION:
-      return &kBrowserToolsUpdateIcon;
+      return gfx::VectorIconId::BROWSER_TOOLS_UPDATE;
     case AppMenuIconController::IconType::GLOBAL_ERROR:
     case AppMenuIconController::IconType::INCOMPATIBILITY_WARNING:
-      return &kBrowserToolsErrorIcon;
+      return gfx::VectorIconId::BROWSER_TOOLS_ERROR;
   }
 
-  return nullptr;
+  return gfx::VectorIconId::VECTOR_ICON_NONE;
 }
 
 - (SkColor)vectorIconColor:(BOOL)themeIsDark {
diff --git a/chrome/browser/ui/cocoa/toolbar/reload_button_cocoa.mm b/chrome/browser/ui/cocoa/toolbar/reload_button_cocoa.mm
index 942994f..925bc40 100644
--- a/chrome/browser/ui/cocoa/toolbar/reload_button_cocoa.mm
+++ b/chrome/browser/ui/cocoa/toolbar/reload_button_cocoa.mm
@@ -8,7 +8,6 @@
 
 #include "base/macros.h"
 #include "chrome/app/chrome_command_ids.h"
-#include "chrome/app/vector_icons/vector_icons.h"
 #include "chrome/browser/command_updater.h"
 #import "chrome/browser/ui/cocoa/accelerators_cocoa.h"
 #import "chrome/browser/ui/cocoa/themed_window.h"
@@ -194,16 +193,16 @@
   return VIEW_ID_RELOAD_BUTTON;
 }
 
-- (const gfx::VectorIcon*)vectorIcon {
+- (gfx::VectorIconId)vectorIconId {
   if ([self tag] == IDC_RELOAD) {
-    return &kNavigateReloadIcon;
+    return gfx::VectorIconId::NAVIGATE_RELOAD;
   } else if ([self tag] == IDC_STOP) {
-    return &kNavigateStopIcon;
+    return gfx::VectorIconId::NAVIGATE_STOP;
   } else {
     NOTREACHED();
   }
 
-  return nullptr;
+  return gfx::VectorIconId::VECTOR_ICON_NONE;
 }
 
 - (void)mouseInsideStateDidChange:(BOOL)isInside {
diff --git a/chrome/browser/ui/cocoa/toolbar/toolbar_button_cocoa.h b/chrome/browser/ui/cocoa/toolbar/toolbar_button_cocoa.h
index 4479eb9..acc93174 100644
--- a/chrome/browser/ui/cocoa/toolbar/toolbar_button_cocoa.h
+++ b/chrome/browser/ui/cocoa/toolbar/toolbar_button_cocoa.h
@@ -10,10 +10,7 @@
 #import "base/mac/scoped_nsobject.h"
 #import "chrome/browser/ui/cocoa/themed_window.h"
 #import "ui/gfx/color_utils.h"
-
-namespace gfx {
-struct VectorIcon;
-}
+#include "ui/gfx/vector_icons_public.h"
 
 enum class ToolbarButtonImageBackgroundStyle {
   DEFAULT,
@@ -37,8 +34,8 @@
 + (NSSize)toolbarButtonSize;
 // Whether or not to handle the mouse middle click events.
 @property(assign, nonatomic) BOOL handleMiddleClick;
-// Override point for subclasses to return their vector icon.
-- (const gfx::VectorIcon*)vectorIcon;
+// Override point for subclasses to return their vector icon id.
+- (gfx::VectorIconId)vectorIconId;
 // Override point for subclasses to return their vector icon color.
 - (SkColor)vectorIconColor:(BOOL)themeIsDark;
 // When in Material Design mode, sets the images for each of the ToolbarButton's
diff --git a/chrome/browser/ui/cocoa/toolbar/toolbar_button_cocoa.mm b/chrome/browser/ui/cocoa/toolbar/toolbar_button_cocoa.mm
index 1953c44..a850b3a 100644
--- a/chrome/browser/ui/cocoa/toolbar/toolbar_button_cocoa.mm
+++ b/chrome/browser/ui/cocoa/toolbar/toolbar_button_cocoa.mm
@@ -6,7 +6,6 @@
 
 #include "base/mac/foundation_util.h"
 #include "base/mac/sdk_forward_declarations.h"
-#include "chrome/app/vector_icons/vector_icons.h"
 #import "chrome/browser/ui/cocoa/image_button_cell.h"
 #import "chrome/browser/ui/cocoa/l10n_util.h"
 #import "chrome/browser/ui/cocoa/view_id_util.h"
@@ -205,22 +204,24 @@
                                    yRadius:2] fill];
 }
 
-- (const gfx::VectorIcon*)vectorIcon {
+- (gfx::VectorIconId)vectorIconId {
   BOOL isRTL = cocoa_l10n_util::ShouldDoExperimentalRTLLayout();
   switch ([self viewID]) {
     case VIEW_ID_BACK_BUTTON:
-      return isRTL ? &kNavigateForwardIcon : &kNavigateBackIcon;
+      return isRTL ? gfx::VectorIconId::NAVIGATE_FORWARD
+                   : gfx::VectorIconId::NAVIGATE_BACK;
     case VIEW_ID_FORWARD_BUTTON:
-      return isRTL ? &kNavigateBackIcon : &kNavigateForwardIcon;
+      return isRTL ? gfx::VectorIconId::NAVIGATE_BACK
+                   : gfx::VectorIconId::NAVIGATE_FORWARD;
     case VIEW_ID_HOME_BUTTON:
-      return &kNavigateHomeIcon;
+      return gfx::VectorIconId::NAVIGATE_HOME;
     case VIEW_ID_APP_MENU:
-      return &kBrowserToolsIcon;
+      return gfx::VectorIconId::BROWSER_TOOLS;
     default:
       break;
   }
 
-  return nullptr;
+  return gfx::VectorIconId::VECTOR_ICON_NONE;
 }
 
 - (SkColor)vectorIconColor:(BOOL)themeIsDark {
@@ -285,9 +286,9 @@
   NSImage* disabledIcon = nil;
   BOOL isDarkTheme = NO;
 
-  const gfx::VectorIcon* icon = [self vectorIcon];
-  if (!icon) {
-    // If the button does not have a vector icon (e.g. it's an extension
+  gfx::VectorIconId iconId = [self vectorIconId];
+  if (iconId == gfx::VectorIconId::VECTOR_ICON_NONE) {
+    // If the button does not have a vector icon id (e.g. it's an extension
     // button), use its image. The hover, etc. images will be created using
     // imageForIcon:withBackgroundStyle: so do the same for the default image.
     // If we don't do this, the icon may not appear in the same place as in the
@@ -307,19 +308,19 @@
 
     // Create the normal and disabled state icons. These icons are always the
     // same shape but use a different color.
-    if (icon == &kBrowserToolsIcon) {
+    if (iconId == gfx::VectorIconId::BROWSER_TOOLS) {
       normalIcon = [self browserToolsIconForFillColor:normalColor];
       disabledIcon = [self browserToolsIconForFillColor:disabledColor];
     } else {
       normalIcon = NSImageFromImageSkia(
-          gfx::CreateVectorIcon(*icon,
+          gfx::CreateVectorIcon(iconId,
                                 kMDButtonIconSize.width,
                                 normalColor));
 
       // The home button has no icon for its disabled state.
-      if (icon != &kNavigateReloadIcon) {
+      if (iconId != gfx::VectorIconId::NAVIGATE_RELOAD) {
         disabledIcon = NSImageFromImageSkia(
-            gfx::CreateVectorIcon(*icon,
+            gfx::CreateVectorIcon(iconId,
                                   kMDButtonIconSize.width,
                                   disabledColor));
       }
diff --git a/chrome/browser/ui/global_error/global_error.cc b/chrome/browser/ui/global_error/global_error.cc
index 370a8ad..8511cc36 100644
--- a/chrome/browser/ui/global_error/global_error.cc
+++ b/chrome/browser/ui/global_error/global_error.cc
@@ -12,9 +12,9 @@
 #include "ui/gfx/image/image.h"
 
 #if !defined(OS_ANDROID)
-#include "chrome/app/vector_icons/vector_icons.h"
 #include "ui/gfx/color_palette.h"
 #include "ui/gfx/paint_vector_icon.h"
+#include "ui/gfx/vector_icons_public.h"
 #endif
 
 // GlobalError ---------------------------------------------------------------
@@ -30,8 +30,8 @@
   return ResourceBundle::GetSharedInstance().GetNativeImageNamed(
       IDR_INPUT_ALERT_MENU);
 #else
-  return gfx::Image(
-      gfx::CreateVectorIcon(kBrowserToolsErrorIcon, gfx::kGoogleYellow700));
+  return gfx::Image(gfx::CreateVectorIcon(
+      gfx::VectorIconId::BROWSER_TOOLS_ERROR, gfx::kGoogleYellow700));
 #endif
 }
 
diff --git a/chrome/browser/ui/sync/profile_signin_confirmation_helper_unittest.cc b/chrome/browser/ui/sync/profile_signin_confirmation_helper_unittest.cc
index 177966a..5c81cb0 100644
--- a/chrome/browser/ui/sync/profile_signin_confirmation_helper_unittest.cc
+++ b/chrome/browser/ui/sync/profile_signin_confirmation_helper_unittest.cc
@@ -136,8 +136,9 @@
     user_prefs_ = new TestingPrefStoreWithCustomReadError;
     sync_preferences::TestingPrefServiceSyncable* pref_service =
         new sync_preferences::TestingPrefServiceSyncable(
-            new TestingPrefStore(), user_prefs_, new TestingPrefStore(),
-            new user_prefs::PrefRegistrySyncable(), new PrefNotifierImpl());
+            new TestingPrefStore(), new TestingPrefStore(), user_prefs_,
+            new TestingPrefStore(), new user_prefs::PrefRegistrySyncable(),
+            new PrefNotifierImpl());
     chrome::RegisterUserProfilePrefs(pref_service->registry());
     builder.SetPrefService(
         base::WrapUnique<sync_preferences::PrefServiceSyncable>(pref_service));
diff --git a/chrome/browser/ui/views/payments/payment_request_views_util.cc b/chrome/browser/ui/views/payments/payment_request_views_util.cc
index c521b9cc..f0cc20a 100644
--- a/chrome/browser/ui/views/payments/payment_request_views_util.cc
+++ b/chrome/browser/ui/views/payments/payment_request_views_util.cc
@@ -5,9 +5,9 @@
 #include "chrome/browser/ui/views/payments/payment_request_views_util.h"
 
 #include "base/memory/ptr_util.h"
-#include "chrome/app/vector_icons/vector_icons.h"
 #include "chrome/browser/ui/views/payments/payment_request_sheet_controller.h"
 #include "third_party/skia/include/core/SkColor.h"
+#include "ui/gfx/vector_icons_public.h"
 #include "ui/views/background.h"
 #include "ui/views/bubble/bubble_frame_view.h"
 #include "ui/views/controls/button/button.h"
@@ -42,7 +42,7 @@
     layout->SkipColumns(1);
   } else {
     views::VectorIconButton* back_arrow = new views::VectorIconButton(delegate);
-    back_arrow->SetIcon(kNavigateBackIcon);
+    back_arrow->SetIcon(gfx::VectorIconId::NAVIGATE_BACK);
     back_arrow->SetSize(back_arrow->GetPreferredSize());
     back_arrow->set_tag(static_cast<int>(
         PaymentRequestCommonTags::BACK_BUTTON_TAG));
diff --git a/chrome/browser/ui/views/toolbar/app_menu_button.cc b/chrome/browser/ui/views/toolbar/app_menu_button.cc
index 65edbb7a..b66144b7 100644
--- a/chrome/browser/ui/views/toolbar/app_menu_button.cc
+++ b/chrome/browser/ui/views/toolbar/app_menu_button.cc
@@ -9,7 +9,6 @@
 #include "base/single_thread_task_runner.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
-#include "chrome/app/vector_icons/vector_icons.h"
 #include "chrome/browser/themes/theme_properties.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_otr_state.h"
@@ -25,6 +24,7 @@
 #include "ui/base/theme_provider.h"
 #include "ui/gfx/color_palette.h"
 #include "ui/gfx/paint_vector_icon.h"
+#include "ui/gfx/vector_icons_public.h"
 #include "ui/keyboard/keyboard_controller.h"
 #include "ui/views/controls/button/label_button_border.h"
 #include "ui/views/controls/menu/menu_listener.h"
@@ -136,22 +136,22 @@
       break;
   }
 
-  const gfx::VectorIcon* icon_id = nullptr;
+  gfx::VectorIconId icon_id = gfx::VectorIconId::VECTOR_ICON_NONE;
   switch (type_) {
     case AppMenuIconController::IconType::NONE:
-      icon_id = &kBrowserToolsIcon;
+      icon_id = gfx::VectorIconId::BROWSER_TOOLS;
       DCHECK_EQ(AppMenuIconController::Severity::NONE, severity_);
       break;
     case AppMenuIconController::IconType::UPGRADE_NOTIFICATION:
-      icon_id = &kBrowserToolsUpdateIcon;
+      icon_id = gfx::VectorIconId::BROWSER_TOOLS_UPDATE;
       break;
     case AppMenuIconController::IconType::GLOBAL_ERROR:
     case AppMenuIconController::IconType::INCOMPATIBILITY_WARNING:
-      icon_id = &kBrowserToolsErrorIcon;
+      icon_id = gfx::VectorIconId::BROWSER_TOOLS_ERROR;
       break;
   }
 
-  SetImage(views::Button::STATE_NORMAL, gfx::CreateVectorIcon(*icon_id, color));
+  SetImage(views::Button::STATE_NORMAL, gfx::CreateVectorIcon(icon_id, color));
 }
 
 void AppMenuButton::SetTrailingMargin(int margin) {
diff --git a/chrome/browser/ui/views/toolbar/reload_button.cc b/chrome/browser/ui/views/toolbar/reload_button.cc
index 94bb8cea..bc07083 100644
--- a/chrome/browser/ui/views/toolbar/reload_button.cc
+++ b/chrome/browser/ui/views/toolbar/reload_button.cc
@@ -9,7 +9,6 @@
 #include "base/macros.h"
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/app/chrome_command_ids.h"
-#include "chrome/app/vector_icons/vector_icons.h"
 #include "chrome/browser/command_updater.h"
 #include "chrome/browser/search/search.h"
 #include "chrome/browser/themes/theme_properties.h"
@@ -21,6 +20,7 @@
 #include "ui/base/theme_provider.h"
 #include "ui/base/window_open_disposition.h"
 #include "ui/gfx/paint_vector_icon.h"
+#include "ui/gfx/vector_icons_public.h"
 #include "ui/views/metrics.h"
 #include "ui/views/widget/widget.h"
 
@@ -232,16 +232,17 @@
   const ui::ThemeProvider* tp = GetThemeProvider();
   // |tp| can be NULL in unit tests.
   if (tp) {
-    const gfx::VectorIcon& icon =
-        (mode == MODE_RELOAD) ? kNavigateReloadIcon : kNavigateStopIcon;
+    const gfx::VectorIconId icon_id = (mode == MODE_RELOAD)
+                                          ? gfx::VectorIconId::NAVIGATE_RELOAD
+                                          : gfx::VectorIconId::NAVIGATE_STOP;
     const SkColor normal_color =
         tp->GetColor(ThemeProperties::COLOR_TOOLBAR_BUTTON_ICON);
     const SkColor disabled_color =
         tp->GetColor(ThemeProperties::COLOR_TOOLBAR_BUTTON_ICON_INACTIVE);
     SetImage(views::Button::STATE_NORMAL,
-             gfx::CreateVectorIcon(icon, normal_color));
+             gfx::CreateVectorIcon(icon_id, normal_color));
     SetImage(views::Button::STATE_DISABLED,
-             gfx::CreateVectorIcon(icon, disabled_color));
+             gfx::CreateVectorIcon(icon_id, disabled_color));
     set_ink_drop_base_color(normal_color);
   }
 
diff --git a/chrome/browser/ui/views/toolbar/toolbar_view.cc b/chrome/browser/ui/views/toolbar/toolbar_view.cc
index 63d49599..96191078 100644
--- a/chrome/browser/ui/views/toolbar/toolbar_view.cc
+++ b/chrome/browser/ui/views/toolbar/toolbar_view.cc
@@ -12,7 +12,6 @@
 #include "base/trace_event/trace_event.h"
 #include "build/build_config.h"
 #include "chrome/app/chrome_command_ids.h"
-#include "chrome/app/vector_icons/vector_icons.h"
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/command_updater.h"
 #include "chrome/browser/extensions/extension_util.h"
@@ -69,6 +68,7 @@
 #include "ui/gfx/canvas.h"
 #include "ui/gfx/image/canvas_image_source.h"
 #include "ui/gfx/paint_vector_icon.h"
+#include "ui/gfx/vector_icons_public.h"
 #include "ui/keyboard/keyboard_controller.h"
 #include "ui/native_theme/native_theme_aura.h"
 #include "ui/views/focus/view_storage.h"
@@ -748,18 +748,19 @@
 
   back_->SetImage(
       views::Button::STATE_NORMAL,
-      gfx::CreateVectorIcon(kNavigateBackIcon, normal_color));
+      gfx::CreateVectorIcon(gfx::VectorIconId::NAVIGATE_BACK, normal_color));
   back_->SetImage(
       views::Button::STATE_DISABLED,
-      gfx::CreateVectorIcon(kNavigateBackIcon, normal_color));
+      gfx::CreateVectorIcon(gfx::VectorIconId::NAVIGATE_BACK, disabled_color));
   forward_->SetImage(
       views::Button::STATE_NORMAL,
-      gfx::CreateVectorIcon(kNavigateForwardIcon, normal_color));
-  forward_->SetImage(
-      views::Button::STATE_DISABLED,
-      gfx::CreateVectorIcon(kNavigateForwardIcon, disabled_color));
-  home_->SetImage(views::Button::STATE_NORMAL,
-                  gfx::CreateVectorIcon(kNavigateHomeIcon, normal_color));
+      gfx::CreateVectorIcon(gfx::VectorIconId::NAVIGATE_FORWARD, normal_color));
+  forward_->SetImage(views::Button::STATE_DISABLED,
+                     gfx::CreateVectorIcon(gfx::VectorIconId::NAVIGATE_FORWARD,
+                                           disabled_color));
+  home_->SetImage(
+      views::Button::STATE_NORMAL,
+      gfx::CreateVectorIcon(gfx::VectorIconId::NAVIGATE_HOME, normal_color));
   app_menu_button_->UpdateIcon();
 
   back_->set_ink_drop_base_color(normal_color);
diff --git a/chrome/browser/ui/webui/snippets_internals_message_handler.cc b/chrome/browser/ui/webui/snippets_internals_message_handler.cc
index 0eede3f..d2bca2c 100644
--- a/chrome/browser/ui/webui/snippets_internals_message_handler.cc
+++ b/chrome/browser/ui/webui/snippets_internals_message_handler.cc
@@ -21,6 +21,7 @@
 #include "base/strings/string_split.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/values.h"
+#include "chrome/browser/android/chrome_feature_list.h"
 #include "chrome/browser/ntp_snippets/content_suggestions_service_factory.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/common/chrome_features.h"
@@ -298,6 +299,9 @@
               base::FeatureList::IsEnabled(
                   ntp_snippets::kPhysicalWebPageSuggestionsFeature));
 
+  SendBoolean("flag-physical-web", base::FeatureList::IsEnabled(
+                                       chrome::android::kPhysicalWebFeature));
+
   SendClassification();
   SendLastRemoteSuggestionsBackgroundFetchTime();
 
diff --git a/chrome/browser/upgrade_detector.cc b/chrome/browser/upgrade_detector.cc
index 2dfd1a91..67e3f3b3 100644
--- a/chrome/browser/upgrade_detector.cc
+++ b/chrome/browser/upgrade_detector.cc
@@ -6,7 +6,6 @@
 
 #include "base/bind.h"
 #include "base/command_line.h"
-#include "chrome/app/vector_icons/vector_icons.h"
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/lifetime/application_lifetime.h"
 #include "chrome/browser/ui/browser_otr_state.h"
@@ -16,6 +15,7 @@
 #include "content/public/browser/notification_service.h"
 #include "ui/gfx/color_palette.h"
 #include "ui/gfx/paint_vector_icon.h"
+#include "ui/gfx/vector_icons_public.h"
 
 // How long to wait between checks for whether the user has been idle.
 static const int kIdleRepeatingTimerWait = 10;  // Minutes (seconds if testing).
@@ -57,7 +57,8 @@
   }
   DCHECK_NE(gfx::kPlaceholderColor, color);
 
-  return gfx::Image(gfx::CreateVectorIcon(kBrowserToolsUpdateIcon, color));
+  return gfx::Image(
+      gfx::CreateVectorIcon(gfx::VectorIconId::BROWSER_TOOLS_UPDATE, color));
 }
 
 UpgradeDetector::UpgradeDetector()
diff --git a/chrome/installer/setup/install.cc b/chrome/installer/setup/install.cc
index 14945b8..34976475 100644
--- a/chrome/installer/setup/install.cc
+++ b/chrome/installer/setup/install.cc
@@ -301,8 +301,7 @@
     const base::string16 manifest_template(
         base::ASCIIToUTF16(kManifestTemplate));
 
-    BrowserDistribution* dist = BrowserDistribution::GetSpecificDistribution(
-        BrowserDistribution::CHROME_BROWSER);
+    BrowserDistribution* dist = BrowserDistribution::GetDistribution();
     // TODO(grt): http://crbug.com/75152 Write a reference to a localized
     // resource for |display_name|.
     base::string16 display_name(dist->GetDisplayName());
diff --git a/chrome/installer/setup/install_worker.cc b/chrome/installer/setup/install_worker.cc
index ac146e8d..1563064 100644
--- a/chrome/installer/setup/install_worker.cc
+++ b/chrome/installer/setup/install_worker.cc
@@ -39,6 +39,7 @@
 #include "chrome/installer/util/create_reg_key_work_item.h"
 #include "chrome/installer/util/firewall_manager_win.h"
 #include "chrome/installer/util/google_update_constants.h"
+#include "chrome/installer/util/google_update_settings.h"
 #include "chrome/installer/util/install_util.h"
 #include "chrome/installer/util/installation_state.h"
 #include "chrome/installer/util/l10n_string_util.h"
@@ -330,10 +331,9 @@
   return true;
 }
 
-// Migrates the usagestats value from the binaries to Chrome when migrating
-// multi-install Chrome to single-install.
-void AddMigrateUsageStatsWorkItems(const InstallationState& original_state,
-                                   const InstallerState& installer_state,
+// Migrates consent for the collection of usage statistics from the binaries to
+// Chrome when migrating multi-install Chrome to single-install.
+void AddMigrateUsageStatsWorkItems(const InstallerState& installer_state,
                                    WorkItemList* install_list) {
   // This operation doesn't apply to SxS Chrome.
   if (InstallUtil::IsChromeSxSProcess())
@@ -341,28 +341,41 @@
 
   // Bail out if an existing multi-install Chrome is not being migrated to
   // single-install.
-  if (!installer_state.is_migrating_to_single()) {
-    VLOG(1) << "No multi-install Chrome found to migrate to single-install.";
+  if (!installer_state.is_migrating_to_single())
+    return;
+
+  // Nothing to do if the binaries aren't actually installed.
+  if (!AreBinariesInstalled(installer_state))
+    return;
+
+  BrowserDistribution* chrome_dist = installer_state.product().distribution();
+
+  // Delete any stale value in Chrome's ClientStateMedium key. A new value, if
+  // found, will be written to the ClientState key below.
+  if (installer_state.system_install()) {
+    install_list->AddDeleteRegValueWorkItem(
+        installer_state.root_key(), chrome_dist->GetStateMediumKey(),
+        KEY_WOW64_64KEY, google_update::kRegUsageStatsField);
+  }
+
+  google_update::Tristate consent =
+      GoogleUpdateSettings::GetCollectStatsConsentForApp(
+          installer_state.system_install(), *MakeBinariesRegistrationData());
+  if (consent == google_update::TRISTATE_NONE) {
+    VLOG(1) << "No consent value found to migrate to single-install.";
+    // Delete any stale value in Chrome's ClientState key.
+    install_list->AddDeleteRegValueWorkItem(
+        installer_state.root_key(), chrome_dist->GetStateKey(), KEY_WOW64_64KEY,
+        google_update::kRegUsageStatsField);
     return;
   }
 
-  const ProductState* binaries_state = original_state.GetProductState(
-      installer_state.system_install(), BrowserDistribution::CHROME_BINARIES);
+  VLOG(1) << "Migrating usage stats consent from multi- to single-install.";
 
-  // There is nothing to be done if the binaries do not have stats.
-  DWORD usagestats = 0;
-  if (!binaries_state || !binaries_state->GetUsageStats(&usagestats)) {
-    VLOG(1) << "No usagestats value found to migrate to single-install.";
-    return;
-  }
-
-  VLOG(1) << "Migrating usagestats value from multi-install to single-install.";
-
-  // Write the value that was read to Chrome's ClientState key.
+  // Write consent to Chrome's ClientState key.
   install_list->AddSetRegValueWorkItem(
-      installer_state.root_key(),
-      installer_state.product().distribution()->GetStateKey(), KEY_WOW64_32KEY,
-      google_update::kRegUsageStatsField, usagestats, true);
+      installer_state.root_key(), chrome_dist->GetStateKey(), KEY_WOW64_32KEY,
+      google_update::kRegUsageStatsField, static_cast<DWORD>(consent), true);
 }
 
 }  // namespace
@@ -739,7 +752,7 @@
                                              install_list);
 
   // Migrate usagestats back to Chrome.
-  AddMigrateUsageStatsWorkItems(original_state, installer_state, install_list);
+  AddMigrateUsageStatsWorkItems(installer_state, install_list);
 
   // Append the tasks that run after the installation.
   AppendPostInstallTasks(installer_state,
diff --git a/chrome/installer/setup/install_worker_unittest.cc b/chrome/installer/setup/install_worker_unittest.cc
index db866ae..4115f098 100644
--- a/chrome/installer/setup/install_worker_unittest.cc
+++ b/chrome/installer/setup/install_worker_unittest.cc
@@ -167,10 +167,6 @@
   void set_state_key(const std::wstring& state_key) {
     state_key_ = state_key;
   }
-
-  void set_state_type(BrowserDistribution::Type state_type) {
-    state_type_ = state_type;
-  }
 };
 
 // The test fixture
@@ -205,9 +201,7 @@
     product_state.set_version(new base::Version(*current_version_));
     product_state.set_brand(L"TEST");
     product_state.set_eula_accepted(1);
-    BrowserDistribution* dist =
-        BrowserDistribution::GetSpecificDistribution(
-            BrowserDistribution::CHROME_BROWSER);
+    BrowserDistribution* dist = BrowserDistribution::GetDistribution();
     base::FilePath install_path =
         installer::GetChromeInstallPath(system_level, dist);
     product_state.SetUninstallProgram(
@@ -243,7 +237,6 @@
     installer_state->set_operation(operation);
     // Hope this next one isn't checked for now.
     installer_state->set_state_key(L"PROBABLY_INVALID_REG_PATH");
-    installer_state->set_state_type(BrowserDistribution::CHROME_BROWSER);
     return installer_state.release();
   }
 
@@ -255,12 +248,9 @@
         machine_state.GetProductState(installer_state->system_install(),
                                       BrowserDistribution::CHROME_BROWSER);
     if (chrome) {
-      installer_state->AddProductFromState(BrowserDistribution::CHROME_BROWSER,
-                                           *chrome);
+      installer_state->AddProductFromState(*chrome);
     } else {
-      BrowserDistribution* dist =
-          BrowserDistribution::GetSpecificDistribution(
-              BrowserDistribution::CHROME_BROWSER);
+      BrowserDistribution* dist = BrowserDistribution::GetDistribution();
       installer_state->AddProduct(base::MakeUnique<Product>(dist));
     }
   }
diff --git a/chrome/installer/setup/installer_crash_reporting.cc b/chrome/installer/setup/installer_crash_reporting.cc
index f8de665..961979d7 100644
--- a/chrome/installer/setup/installer_crash_reporting.cc
+++ b/chrome/installer/setup/installer_crash_reporting.cc
@@ -32,28 +32,11 @@
 // Crash Keys
 
 const char kCurrentVersion[] = "current-version";
-const char kDistributionType[] = "dist-type";
 const char kIsMultiInstall[] = "multi-install";
 const char kIsSystemLevel[] = "system-level";
 const char kOperation[] = "operation";
 const char kStateKey[] = "state-key";
 
-const char *DistributionTypeToString(BrowserDistribution::Type type) {
-  switch (type) {
-    case BrowserDistribution::CHROME_BROWSER:
-      return "chrome browser";
-    case BrowserDistribution::CHROME_FRAME:
-      return "chrome frame";
-    case BrowserDistribution::CHROME_BINARIES:
-      return "chrome binaries";
-    case BrowserDistribution::NUM_TYPES:
-      // Fall out of switch.
-      break;
-  }
-  NOTREACHED();
-  return "";
-}
-
 const char *OperationToString(InstallerState::Operation operation) {
   switch (operation) {
     case InstallerState::SINGLE_INSTALL_OR_UPDATE:
@@ -122,7 +105,6 @@
   const base::debug::CrashKey kFixedKeys[] = {
     { crash_keys::kMetricsClientId, crash_keys::kSmallSize },
     { kCurrentVersion, crash_keys::kSmallSize },
-    { kDistributionType, crash_keys::kSmallSize },
     { kIsMultiInstall, crash_keys::kSmallSize },
     { kIsSystemLevel, crash_keys::kSmallSize },
     { kOperation, crash_keys::kSmallSize },
@@ -143,8 +125,6 @@
 void SetInitialCrashKeys(const InstallerState& state) {
   using base::debug::SetCrashKeyValue;
 
-  SetCrashKeyValue(kDistributionType,
-                   DistributionTypeToString(state.state_type()));
   SetCrashKeyValue(kOperation, OperationToString(state.operation()));
   SetCrashKeyValue(kIsMultiInstall, "false");
   SetCrashKeyValue(kIsSystemLevel, state.system_install() ? "true" : "false");
diff --git a/chrome/installer/setup/installer_state.cc b/chrome/installer/setup/installer_state.cc
index 7d106038..9dff6bb 100644
--- a/chrome/installer/setup/installer_state.cc
+++ b/chrome/installer/setup/installer_state.cc
@@ -12,6 +12,8 @@
 #include "base/command_line.h"
 #include "base/files/file_util.h"
 #include "base/win/registry.h"
+#include "chrome/installer/setup/setup_util.h"
+#include "chrome/installer/util/app_registration_data.h"
 #include "chrome/installer/util/google_update_settings.h"
 #include "chrome/installer/util/helper.h"
 #include "chrome/installer/util/install_util.h"
@@ -26,7 +28,6 @@
 
 InstallerState::InstallerState()
     : operation_(UNINITIALIZED),
-      state_type_(BrowserDistribution::CHROME_BROWSER),
       level_(UNKNOWN_LEVEL),
       root_key_(NULL),
       msi_(false),
@@ -36,7 +37,6 @@
 
 InstallerState::InstallerState(Level level)
     : operation_(UNINITIALIZED),
-      state_type_(BrowserDistribution::CHROME_BROWSER),
       level_(UNKNOWN_LEVEL),
       root_key_(NULL),
       msi_(false),
@@ -68,14 +68,12 @@
 
   const bool is_uninstall = command_line.HasSwitch(switches::kUninstall);
 
-  Product* p = AddProductFromPreferences(BrowserDistribution::CHROME_BROWSER,
-                                         prefs, machine_state);
+  Product* p = AddProductFromPreferences(prefs, machine_state);
+  BrowserDistribution* dist = p->distribution();
   VLOG(1) << (is_uninstall ? "Uninstall" : "Install")
-          << " distribution: " << p->distribution()->GetDisplayName();
+          << " distribution: " << dist->GetDisplayName();
 
-  BrowserDistribution* dist = BrowserDistribution::GetDistribution();
   state_key_ = dist->GetStateKey();
-  state_type_ = dist->GetType();
 
   if (is_uninstall) {
     operation_ = UNINSTALL;
@@ -83,7 +81,7 @@
     operation_ = SINGLE_INSTALL_OR_UPDATE;
     // Is this a migration from multi-install to single-install?
     const ProductState* state =
-        machine_state.GetProductState(system_install(), state_type_);
+        machine_state.GetProductState(system_install(), dist->GetType());
     is_migrating_to_single_ = state && state->is_multi_install();
   }
 
@@ -152,24 +150,22 @@
   return AddProductInDirectory(nullptr, std::move(product));
 }
 
-// Adds a product of type |distribution_type| constructed on the basis of
-// |prefs|, setting this object's msi flag if the product is represented in
-// |machine_state| and is msi-installed.  Returns the product that was added,
-// or NULL if |state| is incompatible with this object.  Ownership is not passed
-// to the caller.
+// Adds a product constructed on the basis of |prefs|, setting this object's msi
+// flag if the product is represented in |machine_state| and is msi-installed.
+// Returns the product that was added, or NULL if |state| is incompatible with
+// this object.  Ownership is not passed to the caller.
 Product* InstallerState::AddProductFromPreferences(
-    BrowserDistribution::Type distribution_type,
     const MasterPreferences& prefs,
     const InstallationState& machine_state) {
-  std::unique_ptr<Product> product_ptr(new Product(
-      BrowserDistribution::GetSpecificDistribution(distribution_type)));
+  std::unique_ptr<Product> product_ptr(
+      new Product(BrowserDistribution::GetDistribution()));
   product_ptr->InitializeFromPreferences(prefs);
 
   Product* product = AddProductInDirectory(nullptr, std::move(product_ptr));
 
   if (product != NULL && !msi_) {
     const ProductState* product_state = machine_state.GetProductState(
-        system_install(), distribution_type);
+        system_install(), BrowserDistribution::CHROME_BROWSER);
     if (product_state != NULL)
       msi_ = product_state->is_msi();
   }
@@ -178,10 +174,9 @@
 }
 
 Product* InstallerState::AddProductFromState(
-    BrowserDistribution::Type type,
     const ProductState& state) {
   std::unique_ptr<Product> product_ptr(
-      new Product(BrowserDistribution::GetSpecificDistribution(type)));
+      new Product(BrowserDistribution::GetDistribution()));
   product_ptr->InitializeFromUninstallCommand(state.uninstall_command());
 
   // Strip off <version>/Installer/setup.exe; see GetInstallerDirectory().
@@ -207,7 +202,7 @@
   DCHECK(product_);
   std::unique_ptr<base::Version> current_version;
   const ProductState* product_state = machine_state.GetProductState(
-      level_ == SYSTEM_LEVEL, product_->distribution()->GetType());
+      level_ == SYSTEM_LEVEL, BrowserDistribution::CHROME_BROWSER);
 
   if (product_state != NULL) {
     const base::Version* version = NULL;
@@ -250,7 +245,6 @@
   operation_ = UNINITIALIZED;
   target_path_.clear();
   state_key_.clear();
-  state_type_ = BrowserDistribution::CHROME_BROWSER;
   product_.reset();
   critical_update_version_ = base::Version();
   level_ = UNKNOWN_LEVEL;
@@ -325,10 +319,8 @@
     // for success, the binaries have been uninstalled and therefore the result
     // will not be read by Google Update.
     InstallUtil::AddInstallerResultItems(
-        system_install, BrowserDistribution::GetSpecificDistribution(
-                            BrowserDistribution::CHROME_BINARIES)
-                            ->GetStateKey(),
-        status, string_resource_id, launch_cmd, install_list.get());
+        system_install, MakeBinariesRegistrationData()->GetStateKey(), status,
+        string_resource_id, launch_cmd, install_list.get());
 #endif
   }
   install_list->Do();
diff --git a/chrome/installer/setup/installer_state.h b/chrome/installer/setup/installer_state.h
index 05cfe697..50d40808 100644
--- a/chrome/installer/setup/installer_state.h
+++ b/chrome/installer/setup/installer_state.h
@@ -67,8 +67,7 @@
   // msi flag if |state| is msi-installed. Returns the product that was added,
   // or NULL if |state| is incompatible with this object. Ownership is not
   // passed to the caller.
-  Product* AddProductFromState(BrowserDistribution::Type type,
-                               const ProductState& state);
+  Product* AddProductFromState(const ProductState& state);
 
   // Returns the product that was added, or NULL if |product| is incompatible
   // with this object. Ownership of the return value is not given to the caller.
@@ -112,10 +111,6 @@
   // The ClientState key by which we interact with Google Update.
   const base::string16& state_key() const { return state_key_; }
 
-  // Convenience method to return the type of the BrowserDistribution associated
-  // with the ClientState key we will be interacting with.
-  BrowserDistribution::Type state_type() const { return state_type_; }
-
   // Returns true if this is an update of multi-install Chrome to
   // single-install.
   bool is_migrating_to_single() const { return is_migrating_to_single_; }
@@ -172,7 +167,6 @@
   Product* AddProductInDirectory(const base::FilePath* product_dir,
                                  std::unique_ptr<Product> product);
   Product* AddProductFromPreferences(
-      BrowserDistribution::Type distribution_type,
       const MasterPreferences& prefs,
       const InstallationState& machine_state);
 
@@ -182,7 +176,6 @@
   Operation operation_;
   base::FilePath target_path_;
   base::string16 state_key_;
-  BrowserDistribution::Type state_type_;
   std::unique_ptr<Product> product_;
   base::Version critical_update_version_;
   ProgressCalculator progress_calculator_;
diff --git a/chrome/installer/setup/installer_state_unittest.cc b/chrome/installer/setup/installer_state_unittest.cc
index a8d7896..c694c2a 100644
--- a/chrome/installer/setup/installer_state_unittest.cc
+++ b/chrome/installer/setup/installer_state_unittest.cc
@@ -89,8 +89,7 @@
   {
     RegistryOverrideManager override_manager;
     override_manager.OverrideRegistry(root);
-    BrowserDistribution* dist = BrowserDistribution::GetSpecificDistribution(
-        BrowserDistribution::CHROME_BROWSER);
+    BrowserDistribution* dist = BrowserDistribution::GetDistribution();
     RegKey chrome_key(root, dist->GetVersionKey().c_str(), KEY_ALL_ACCESS);
     EXPECT_TRUE(chrome_key.Valid());
     if (chrome_key.Valid()) {
@@ -134,9 +133,7 @@
     state.Initialize(cmd_line, prefs, machine_state);
     state.WriteInstallerResult(installer::FIRST_INSTALL_SUCCESS,
                                IDS_INSTALL_OS_ERROR_BASE, &launch_cmd);
-    BrowserDistribution* distribution =
-        BrowserDistribution::GetSpecificDistribution(
-            BrowserDistribution::CHROME_BROWSER);
+    BrowserDistribution* distribution = BrowserDistribution::GetDistribution();
     EXPECT_EQ(ERROR_SUCCESS,
         key.Open(root, distribution->GetStateKey().c_str(), KEY_READ));
     EXPECT_EQ(ERROR_SUCCESS,
@@ -210,16 +207,12 @@
   EXPECT_EQ(InstallerState::USER_LEVEL, installer_state.level());
   EXPECT_EQ(InstallerState::SINGLE_INSTALL_OR_UPDATE,
             installer_state.operation());
-  EXPECT_TRUE(wcsstr(installer_state.target_path().value().c_str(),
-                     BrowserDistribution::GetSpecificDistribution(
-                         BrowserDistribution::CHROME_BROWSER)
-                         ->GetInstallSubDir()
-                         .c_str()));
+  EXPECT_TRUE(wcsstr(
+      installer_state.target_path().value().c_str(),
+      BrowserDistribution::GetDistribution()->GetInstallSubDir().c_str()));
   EXPECT_FALSE(installer_state.verbose_logging());
   EXPECT_EQ(installer_state.state_key(),
-            BrowserDistribution::GetSpecificDistribution(
-                BrowserDistribution::CHROME_BROWSER)->GetStateKey());
-  EXPECT_EQ(installer_state.state_type(), BrowserDistribution::CHROME_BROWSER);
+            BrowserDistribution::GetDistribution()->GetStateKey());
 
   // Now initialize it to install system-level single Chrome.
   {
@@ -233,15 +226,12 @@
   EXPECT_EQ(InstallerState::SYSTEM_LEVEL, installer_state.level());
   EXPECT_EQ(InstallerState::SINGLE_INSTALL_OR_UPDATE,
             installer_state.operation());
-  EXPECT_TRUE(wcsstr(installer_state.target_path().value().c_str(),
-                     BrowserDistribution::GetSpecificDistribution(
-                         BrowserDistribution::CHROME_BROWSER)->
-                         GetInstallSubDir().c_str()));
+  EXPECT_TRUE(wcsstr(
+      installer_state.target_path().value().c_str(),
+      BrowserDistribution::GetDistribution()->GetInstallSubDir().c_str()));
   EXPECT_TRUE(installer_state.verbose_logging());
   EXPECT_EQ(installer_state.state_key(),
-            BrowserDistribution::GetSpecificDistribution(
-                BrowserDistribution::CHROME_BROWSER)->GetStateKey());
-  EXPECT_EQ(installer_state.state_type(), BrowserDistribution::CHROME_BROWSER);
+            BrowserDistribution::GetDistribution()->GetStateKey());
 }
 
 // A fixture for testing InstallerState::DetermineCriticalVersion.  Individual
diff --git a/chrome/installer/setup/setup_main.cc b/chrome/installer/setup/setup_main.cc
index 8506c0b..77998d4 100644
--- a/chrome/installer/setup/setup_main.cc
+++ b/chrome/installer/setup/setup_main.cc
@@ -650,8 +650,8 @@
   installer_state->SetStage(installer::PRECONDITIONS);
   // Remove any legacy "-multifail" or "-stage:*" values from the product's
   // "ap" value.
-  BrowserDistribution::GetSpecificDistribution(installer_state->state_type())->
-      UpdateInstallStatus(system_install, archive_type, install_status);
+  BrowserDistribution::GetDistribution()->UpdateInstallStatus(
+      system_install, archive_type, install_status);
 
   // Drop to background processing mode if the process was started below the
   // normal process priority class. This is done here because InstallProducts-
@@ -731,9 +731,7 @@
     const InstallerState& installer_state,
     const base::FilePath& setup_exe,
     const base::CommandLine& cmd_line) {
-  BrowserDistribution* chrome_dist =
-      BrowserDistribution::GetSpecificDistribution(
-          BrowserDistribution::CHROME_BROWSER);
+  BrowserDistribution* chrome_dist = BrowserDistribution::GetDistribution();
 
   // Only proceed with registering a dev chrome if no real Chrome installation
   // of the same distribution are present on this system.
diff --git a/chrome/installer/setup/setup_util.cc b/chrome/installer/setup/setup_util.cc
index f4b8806..eec781e 100644
--- a/chrome/installer/setup/setup_util.cc
+++ b/chrome/installer/setup/setup_util.cc
@@ -12,7 +12,6 @@
 #include <algorithm>
 #include <iterator>
 #include <limits>
-#include <memory>
 #include <set>
 #include <string>
 
@@ -24,6 +23,7 @@
 #include "base/files/file_util.h"
 #include "base/logging.h"
 #include "base/macros.h"
+#include "base/memory/ptr_util.h"
 #include "base/metrics/histogram.h"
 #include "base/numerics/safe_conversions.h"
 #include "base/strings/string_number_conversions.h"
@@ -132,14 +132,7 @@
 // for this mode of install was dropped from ToT in December 2016. Remove any
 // stray bits in the registry leftover from such installs.
 void RemoveBinariesVersionKey(const InstallerState& installer_state) {
-#if defined(GOOGLE_CHROME_BUILD)
-  UpdatingAppRegistrationData reg_data(
-      L"{4DC8B4CA-1BDA-483e-B5FA-D3C12E15B62D}");
-#else
-  NonUpdatingAppRegistrationData reg_data(L"Software\\Chromium Binaries");
-#endif
-
-  base::string16 path(reg_data.GetVersionKey());
+  base::string16 path(MakeBinariesRegistrationData()->GetVersionKey());
   if (base::win::RegKey(installer_state.root_key(), path.c_str(),
                         KEY_QUERY_VALUE | KEY_WOW64_32KEY)
           .Valid()) {
@@ -372,9 +365,8 @@
   // is the value used to select a specific differential update. If an archive
   // can't be found using that, fallback to using the newest version present.
   base::FilePath patch_source;
-  const ProductState* product =
-      original_state.GetProductState(installer_state.system_install(),
-                                     installer_state.state_type());
+  const ProductState* product = original_state.GetProductState(
+      installer_state.system_install(), BrowserDistribution::CHROME_BROWSER);
   if (product) {
     patch_source = installer_state.GetInstallerDirectory(product->version())
         .Append(installer::kChromeArchive);
@@ -467,76 +459,6 @@
   return false;
 }
 
-void MigrateGoogleUpdateStateMultiToSingle(
-    bool system_level,
-    BrowserDistribution::Type to_migrate,
-    const installer::InstallationState& machine_state) {
-  const HKEY root = system_level ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER;
-  const ProductState* product = NULL;
-  BrowserDistribution* dist = NULL;
-  LONG result = ERROR_SUCCESS;
-  base::win::RegKey state_key;
-
-  Product product_to_migrate(
-      BrowserDistribution::GetSpecificDistribution(to_migrate));
-
-  // Copy usagestats from the binaries to the product's ClientState key.
-  product = machine_state.GetProductState(system_level,
-                                          BrowserDistribution::CHROME_BINARIES);
-  DWORD usagestats = 0;
-  if (product && product->GetUsageStats(&usagestats)) {
-    dist = product_to_migrate.distribution();
-    result = state_key.Open(root, dist->GetStateKey().c_str(),
-                            KEY_SET_VALUE);
-    if (result != ERROR_SUCCESS) {
-      LOG(ERROR) << "Failed opening ClientState key for "
-                 << dist->GetDisplayName() << " to migrate usagestats.";
-    } else {
-      state_key.WriteValue(google_update::kRegUsageStatsField, usagestats);
-    }
-  }
-
-  // Remove the migrating product from the "ap" value of other multi-install
-  // products.
-  for (int i = 0; i < BrowserDistribution::NUM_TYPES; ++i) {
-    BrowserDistribution::Type type =
-        static_cast<BrowserDistribution::Type>(i);
-    if (type == to_migrate)
-      continue;
-    product = machine_state.GetProductState(system_level, type);
-    if (product && product->is_multi_install()) {
-      installer::ChannelInfo channel_info;
-      dist = BrowserDistribution::GetSpecificDistribution(type);
-      result = state_key.Open(root, dist->GetStateKey().c_str(),
-                              KEY_QUERY_VALUE | KEY_SET_VALUE);
-      if (result == ERROR_SUCCESS &&
-          channel_info.Initialize(state_key) &&
-          product_to_migrate.SetChannelFlags(false, &channel_info)) {
-        VLOG(1) << "Moving " << dist->GetDisplayName()
-                << " to channel: " << channel_info.value();
-        channel_info.Write(&state_key);
-      }
-    }
-  }
-
-  // Remove -multi, all product modifiers, and everything else but the channel
-  // name from the "ap" value of the product to migrate.
-  dist = product_to_migrate.distribution();
-  result = state_key.Open(root, dist->GetStateKey().c_str(),
-                          KEY_QUERY_VALUE | KEY_SET_VALUE);
-  if (result == ERROR_SUCCESS) {
-    installer::ChannelInfo channel_info;
-    if (!channel_info.Initialize(state_key)) {
-      LOG(ERROR) << "Failed reading " << dist->GetDisplayName()
-                 << " channel info.";
-    } else if (channel_info.RemoveAllModifiersAndSuffixes()) {
-      VLOG(1) << "Moving " << dist->GetDisplayName()
-              << " to channel: " << channel_info.value();
-      channel_info.Write(&state_key);
-    }
-  }
-}
-
 bool IsUninstallSuccess(InstallStatus install_status) {
   // The following status values represent failed uninstalls:
   // 15: CHROME_NOT_INSTALLED
@@ -758,9 +680,7 @@
 }
 
 bool IsChromeActivelyUsed(const InstallerState& installer_state) {
-  BrowserDistribution* chrome_dist =
-      BrowserDistribution::GetSpecificDistribution(
-          BrowserDistribution::CHROME_BROWSER);
+  BrowserDistribution* chrome_dist = BrowserDistribution::GetDistribution();
   if (!installer_state.system_install()) {
     return IsActivelyUsedIn(HKEY_CURRENT_USER,
                             chrome_dist->GetStateKey().c_str());
@@ -855,6 +775,31 @@
                                  WorkItem::kWow64Default);
 }
 
+std::unique_ptr<AppRegistrationData> MakeBinariesRegistrationData() {
+#if defined(GOOGLE_CHROME_BUILD)
+  return base::MakeUnique<UpdatingAppRegistrationData>(
+      L"{4DC8B4CA-1BDA-483e-B5FA-D3C12E15B62D}");
+#else
+  return base::MakeUnique<NonUpdatingAppRegistrationData>(
+      L"Software\\Chromium Binaries");
+#endif
+}
+
+bool AreBinariesInstalled(const InstallerState& installer_state) {
+  if (InstallUtil::IsChromeSxSProcess())
+    return false;
+
+  base::win::RegKey key;
+  base::string16 pv;
+
+  // True if the "pv" value exists and isn't empty.
+  return key.Open(installer_state.root_key(),
+                  MakeBinariesRegistrationData()->GetVersionKey().c_str(),
+                  KEY_QUERY_VALUE | KEY_WOW64_32KEY) == ERROR_SUCCESS &&
+         key.ReadValue(google_update::kRegVersionField, &pv) == ERROR_SUCCESS &&
+         !pv.empty();
+}
+
 void DoLegacyCleanups(const InstallerState& installer_state,
                       InstallStatus install_status) {
   // Do no harm if the install didn't succeed.
diff --git a/chrome/installer/setup/setup_util.h b/chrome/installer/setup/setup_util.h
index 77d44b5..b8607dfb 100644
--- a/chrome/installer/setup/setup_util.h
+++ b/chrome/installer/setup/setup_util.h
@@ -12,6 +12,7 @@
 #include <windows.h>
 #include <stdint.h>
 
+#include <memory>
 #include <vector>
 
 #include "base/macros.h"
@@ -88,14 +89,6 @@
 // procesing mode is entered.
 bool AdjustProcessPriority();
 
-// Makes registry adjustments to migrate the Google Update state of |to_migrate|
-// from multi-install to single-install. This includes copying the usagestats
-// value and adjusting the ap values of all multi-install products.
-void MigrateGoogleUpdateStateMultiToSingle(
-    bool system_level,
-    BrowserDistribution::Type to_migrate,
-    const installer::InstallationState& machine_state);
-
 // Returns true if |install_status| represents a successful uninstall code.
 bool IsUninstallSuccess(InstallStatus install_status);
 
@@ -140,6 +133,14 @@
 // De-register Chrome's EventLog message provider dll.
 void DeRegisterEventLogProvider();
 
+// Returns a registration data instance for the now-deprecated multi-install
+// binaries.
+std::unique_ptr<AppRegistrationData> MakeBinariesRegistrationData();
+
+// Returns true if the now-deprecated multi-install binaries are registered as
+// an installed product with Google Update.
+bool AreBinariesInstalled(const InstallerState& installer_state);
+
 // Removes leftover bits from features that have been removed from the product.
 void DoLegacyCleanups(const InstallerState& installer_state,
                       InstallStatus install_status);
diff --git a/chrome/installer/setup/setup_util_unittest.cc b/chrome/installer/setup/setup_util_unittest.cc
index 39fe0d56..e3e878f 100644
--- a/chrome/installer/setup/setup_util_unittest.cc
+++ b/chrome/installer/setup/setup_util_unittest.cc
@@ -387,9 +387,8 @@
     installer_state_.reset(new installer::InstallerState(
         kSystemInstall_ ? installer::InstallerState::SYSTEM_LEVEL :
         installer::InstallerState::USER_LEVEL));
-    installer_state_->AddProductFromState(
-        kProductType_,
-        *original_state_->GetProductState(kSystemInstall_, kProductType_));
+    installer_state_->AddProductFromState(*original_state_->GetProductState(
+        kSystemInstall_, BrowserDistribution::CHROME_BROWSER));
 
     // Create archives in the two version dirs.
     ASSERT_TRUE(
@@ -421,8 +420,8 @@
 
   void InstallProduct() {
     FakeProductState* product = FakeProductState::FromProductState(
-        original_state_->GetNonVersionedProductState(kSystemInstall_,
-                                                     kProductType_));
+        original_state_->GetNonVersionedProductState(
+            kSystemInstall_, BrowserDistribution::CHROME_BROWSER));
 
     product->set_version(product_version_);
     base::CommandLine uninstall_command(
@@ -436,13 +435,12 @@
 
   void UninstallProduct() {
     FakeProductState::FromProductState(
-        original_state_->GetNonVersionedProductState(kSystemInstall_,
-                                                     kProductType_))
+        original_state_->GetNonVersionedProductState(
+            kSystemInstall_, BrowserDistribution::CHROME_BROWSER))
         ->set_version(base::Version());
   }
 
   static const bool kSystemInstall_;
-  static const BrowserDistribution::Type kProductType_;
   base::ScopedTempDir test_dir_;
   base::Version product_version_;
   base::Version max_version_;
@@ -456,8 +454,6 @@
 };
 
 const bool FindArchiveToPatchTest::kSystemInstall_ = false;
-const BrowserDistribution::Type FindArchiveToPatchTest::kProductType_ =
-    BrowserDistribution::CHROME_BROWSER;
 
 }  // namespace
 
@@ -511,85 +507,6 @@
   EXPECT_EQ(base::FilePath().value(), patch_source.value());
 }
 
-#if defined(GOOGLE_CHROME_BUILD)
-namespace {
-
-const bool kSystemLevel = false;
-const HKEY kRootKey = kSystemLevel ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER;
-const wchar_t kVersionString[] = L"30.0.1574.0";
-const wchar_t kMultiChannel[] = L"2.0-dev-multi-chromeframe";
-
-class MigrateMultiToSingleTest : public testing::Test {
- protected:
-  void SetUp() override {
-    registry_override_manager_.OverrideRegistry(kRootKey);
-  }
-
- private:
-  registry_util::RegistryOverrideManager registry_override_manager_;
-};
-
-}  // namespace
-
-// Test migrating Chrome Frame from multi to single.
-TEST_F(MigrateMultiToSingleTest, ChromeFrame) {
-  installer::ProductState chrome_frame;
-  installer::ProductState binaries;
-  DWORD usagestats = 0;
-
-  // Set up a config with dev-channel multi-install GCF.
-  base::win::RegKey key;
-
-  BrowserDistribution* dist = BrowserDistribution::GetSpecificDistribution(
-      BrowserDistribution::CHROME_BINARIES);
-  ASSERT_EQ(ERROR_SUCCESS,
-            base::win::RegKey(kRootKey, dist->GetVersionKey().c_str(),
-                              KEY_SET_VALUE)
-                .WriteValue(google_update::kRegVersionField, kVersionString));
-  ASSERT_EQ(ERROR_SUCCESS,
-            base::win::RegKey(kRootKey, dist->GetStateKey().c_str(),
-                              KEY_SET_VALUE)
-                .WriteValue(google_update::kRegApField, kMultiChannel));
-  ASSERT_EQ(ERROR_SUCCESS,
-            base::win::RegKey(kRootKey, dist->GetStateKey().c_str(),
-                              KEY_SET_VALUE)
-                .WriteValue(google_update::kRegUsageStatsField, 1U));
-
-  dist = BrowserDistribution::GetSpecificDistribution(
-      BrowserDistribution::CHROME_FRAME);
-  ASSERT_EQ(ERROR_SUCCESS,
-            base::win::RegKey(kRootKey, dist->GetVersionKey().c_str(),
-                              KEY_SET_VALUE)
-                .WriteValue(google_update::kRegVersionField, kVersionString));
-  ASSERT_EQ(ERROR_SUCCESS,
-            base::win::RegKey(kRootKey, dist->GetStateKey().c_str(),
-                              KEY_SET_VALUE)
-                .WriteValue(google_update::kRegApField, kMultiChannel));
-
-  // Do the registry migration.
-  installer::InstallationState machine_state;
-  machine_state.Initialize();
-
-  installer::MigrateGoogleUpdateStateMultiToSingle(
-      kSystemLevel,
-      BrowserDistribution::CHROME_FRAME,
-      machine_state);
-
-  // Confirm that usagestats were copied to CF and that its channel was
-  // stripped.
-  ASSERT_TRUE(chrome_frame.Initialize(kSystemLevel,
-                                      BrowserDistribution::CHROME_FRAME));
-  EXPECT_TRUE(chrome_frame.GetUsageStats(&usagestats));
-  EXPECT_EQ(1U, usagestats);
-  EXPECT_EQ(L"2.0-dev", chrome_frame.channel().value());
-
-  // Confirm that the binaries' channel no longer contains GCF.
-  ASSERT_TRUE(binaries.Initialize(kSystemLevel,
-                                  BrowserDistribution::CHROME_BINARIES));
-  EXPECT_EQ(L"2.0-dev-multi", binaries.channel().value());
-}
-#endif  // GOOGLE_CHROME_BUILD
-
 TEST(SetupUtilTest, ContainsUnsupportedSwitch) {
   EXPECT_FALSE(installer::ContainsUnsupportedSwitch(
       base::CommandLine::FromString(L"foo.exe")));
@@ -790,7 +707,6 @@
       operation_ = InstallerState::SINGLE_INSTALL_OR_UPDATE;
       target_path_ = target_path;
       state_key_ = dist->GetStateKey();
-      state_type_ = dist->GetType();
       product_ = base::MakeUnique<Product>(dist);
       level_ = InstallerState::USER_LEVEL;
       root_key_ = HKEY_CURRENT_USER;
diff --git a/chrome/installer/util/google_update_constants.h b/chrome/installer/util/google_update_constants.h
index fa3af27..1ef90f05 100644
--- a/chrome/installer/util/google_update_constants.h
+++ b/chrome/installer/util/google_update_constants.h
@@ -9,6 +9,11 @@
 
 namespace google_update {
 
+// Specifies whether a tristate item has a value and if so what the value is.
+// When converted from a DWORD in the Windows registry, All values other than 1
+// are mapped to TRISTATE_FALSE.
+enum Tristate { TRISTATE_FALSE = 0, TRISTATE_TRUE = 1, TRISTATE_NONE = 2 };
+
 // The GUID Google Update uses to keep track of Chrome upgrades.
 extern const wchar_t kChromeUpgradeCode[];
 
diff --git a/chrome/installer/util/google_update_settings.cc b/chrome/installer/util/google_update_settings.cc
index 11d7e96..ebb3835 100644
--- a/chrome/installer/util/google_update_settings.cc
+++ b/chrome/installer/util/google_update_settings.cc
@@ -27,7 +27,6 @@
 #include "chrome/installer/util/app_registration_data.h"
 #include "chrome/installer/util/browser_distribution.h"
 #include "chrome/installer/util/channel_info.h"
-#include "chrome/installer/util/google_update_constants.h"
 #include "chrome/installer/util/install_util.h"
 #include "chrome/installer/util/installation_state.h"
 #include "chrome/installer/util/product.h"
@@ -270,61 +269,66 @@
   return GetCollectStatsConsentAtLevel(IsSystemInstall());
 }
 
-// Older versions of Chrome unconditionally read from HKCU\...\ClientState\...
-// and then HKLM\...\ClientState\....  This means that system-level Chrome
-// never checked ClientStateMedium (which has priority according to Google
-// Update) and gave preference to a value in HKCU (which was never checked by
-// Google Update).  From now on, Chrome follows Google Update's policy.
+bool GoogleUpdateSettings::SetCollectStatsConsent(bool consented) {
+  return SetCollectStatsConsentAtLevel(IsSystemInstall(), consented);
+}
+
 bool GoogleUpdateSettings::GetCollectStatsConsentAtLevel(bool system_install) {
   BrowserDistribution* dist = BrowserDistribution::GetDistribution();
 
   // Consent applies to all products in a multi-install package.
-  if (InstallUtil::IsMultiInstall(dist, system_install)) {
+  if (InstallUtil::IsMultiInstall(system_install)) {
     dist = BrowserDistribution::GetSpecificDistribution(
         BrowserDistribution::CHROME_BINARIES);
   }
 
+  return GetCollectStatsConsentForApp(system_install,
+                                      dist->GetAppRegistrationData()) ==
+         google_update::TRISTATE_TRUE;
+}
+
+google_update::Tristate GoogleUpdateSettings::GetCollectStatsConsentForApp(
+    bool system_install,
+    const AppRegistrationData& reg_data) {
   RegKey key;
-  DWORD value = 0;
+  DWORD value = google_update::TRISTATE_NONE;
   bool have_value = false;
   const REGSAM kAccess = KEY_QUERY_VALUE | KEY_WOW64_32KEY;
 
   // For system-level installs, try ClientStateMedium first.
   have_value =
       system_install &&
-      key.Open(HKEY_LOCAL_MACHINE, dist->GetStateMediumKey().c_str(),
+      key.Open(HKEY_LOCAL_MACHINE, reg_data.GetStateMediumKey().c_str(),
                kAccess) == ERROR_SUCCESS &&
-      key.ReadValueDW(google_update::kRegUsageStatsField,
-                      &value) == ERROR_SUCCESS;
+      key.ReadValueDW(google_update::kRegUsageStatsField, &value) ==
+          ERROR_SUCCESS;
 
   // Otherwise, try ClientState.
   if (!have_value) {
     have_value =
         key.Open(system_install ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER,
-                 dist->GetStateKey().c_str(),
-                 kAccess) == ERROR_SUCCESS &&
-        key.ReadValueDW(google_update::kRegUsageStatsField,
-                        &value) == ERROR_SUCCESS;
+                 reg_data.GetStateKey().c_str(), kAccess) == ERROR_SUCCESS &&
+        key.ReadValueDW(google_update::kRegUsageStatsField, &value) ==
+            ERROR_SUCCESS;
   }
 
-  // Google Update specifically checks that the value is 1, so we do the same.
-  return have_value && value == 1;
-}
+  if (!have_value)
+    return google_update::TRISTATE_NONE;
 
-bool GoogleUpdateSettings::SetCollectStatsConsent(bool consented) {
-  return SetCollectStatsConsentAtLevel(IsSystemInstall(), consented);
+  return value == google_update::TRISTATE_TRUE ? google_update::TRISTATE_TRUE
+                                               : google_update::TRISTATE_FALSE;
 }
 
 // static
 bool GoogleUpdateSettings::SetCollectStatsConsentAtLevel(bool system_install,
                                                          bool consented) {
-  // Google Update writes and expects 1 for true, 0 for false.
-  DWORD value = consented ? 1 : 0;
+  DWORD value =
+      consented ? google_update::TRISTATE_TRUE : google_update::TRISTATE_FALSE;
 
   BrowserDistribution* dist = BrowserDistribution::GetDistribution();
 
   // Consent applies to all products in a multi-install package.
-  if (InstallUtil::IsMultiInstall(dist, system_install)) {
+  if (InstallUtil::IsMultiInstall(system_install)) {
     dist = BrowserDistribution::GetSpecificDistribution(
         BrowserDistribution::CHROME_BINARIES);
   }
@@ -418,36 +422,13 @@
   DCHECK(dist);
   const DWORD eula_accepted = consented ? 1 : 0;
   const REGSAM kAccess = KEY_SET_VALUE | KEY_WOW64_32KEY;
-  base::string16 reg_path = dist->GetStateMediumKey();
-  bool succeeded = true;
   RegKey key;
 
   // Write the consent value into the product's ClientStateMedium key.
-  if (key.Create(HKEY_LOCAL_MACHINE, reg_path.c_str(),
-                 kAccess) != ERROR_SUCCESS ||
-      key.WriteValue(google_update::kRegEULAAceptedField,
-                     eula_accepted) != ERROR_SUCCESS) {
-    succeeded = false;
-  }
-
-  // If this is a multi-install, also write it into the binaries' key.
-  // --mutli-install is not provided on the command-line, so deduce it from
-  // the product's state.
-  const installer::ProductState* product_state =
-      machine_state.GetProductState(true, dist->GetType());
-  if (product_state != NULL && product_state->is_multi_install()) {
-    dist = BrowserDistribution::GetSpecificDistribution(
-        BrowserDistribution::CHROME_BINARIES);
-    reg_path = dist->GetStateMediumKey();
-    if (key.Create(HKEY_LOCAL_MACHINE, reg_path.c_str(),
-                   kAccess) != ERROR_SUCCESS ||
-        key.WriteValue(google_update::kRegEULAAceptedField,
-                       eula_accepted) != ERROR_SUCCESS) {
-        succeeded = false;
-    }
-  }
-
-  return succeeded;
+  return key.Create(HKEY_LOCAL_MACHINE, dist->GetStateMediumKey().c_str(),
+                    kAccess) == ERROR_SUCCESS &&
+         key.WriteValue(google_update::kRegEULAAceptedField, eula_accepted) ==
+             ERROR_SUCCESS;
 }
 
 int GoogleUpdateSettings::GetLastRunTime() {
@@ -510,7 +491,7 @@
   bool result = UpdateDidRunStateForApp(dist->GetAppRegistrationData(),
                                         did_run);
   // Update state for binaries, even if the previous call was unsuccessful.
-  if (InstallUtil::IsMultiInstall(dist, system_level))
+  if (InstallUtil::IsMultiInstall(system_level))
     result = UpdateDidRunStateForBinaries(did_run) && result;
   return result;
 }
@@ -852,8 +833,7 @@
 }
 
 void GoogleUpdateSettings::RecordChromeUpdatePolicyHistograms() {
-  const bool is_multi_install = InstallUtil::IsMultiInstall(
-      BrowserDistribution::GetDistribution(), IsSystemInstall());
+  const bool is_multi_install = InstallUtil::IsMultiInstall(IsSystemInstall());
   const base::string16 app_guid =
       BrowserDistribution::GetSpecificDistribution(
           is_multi_install ? BrowserDistribution::CHROME_BINARIES :
diff --git a/chrome/installer/util/google_update_settings.h b/chrome/installer/util/google_update_settings.h
index 7336195..6cdfebc 100644
--- a/chrome/installer/util/google_update_settings.h
+++ b/chrome/installer/util/google_update_settings.h
@@ -16,9 +16,11 @@
 #include "base/time/time.h"
 #include "base/version.h"
 #include "build/build_config.h"
+#include "chrome/installer/util/google_update_constants.h"
 #include "chrome/installer/util/util_constants.h"
 #include "components/metrics/client_info.h"
 
+class AppRegistrationData;
 class BrowserDistribution;
 
 namespace installer {
@@ -88,6 +90,11 @@
   // used to download the chrome installer.
   static bool GetCollectStatsConsentAtLevel(bool system_install);
 
+  // Returns the consent value for an app or TRISTATE_NONE if none is found.
+  static google_update::Tristate GetCollectStatsConsentForApp(
+      bool system_install,
+      const AppRegistrationData& reg_data);
+
   // Sets the user consent to send UMA and crash dumps to Google. Returns
   // false if the setting could not be recorded.
   static bool SetCollectStatsConsentAtLevel(bool system_install,
diff --git a/chrome/installer/util/google_update_settings_unittest.cc b/chrome/installer/util/google_update_settings_unittest.cc
index 70c64fb..d05f106 100644
--- a/chrome/installer/util/google_update_settings_unittest.cc
+++ b/chrome/installer/util/google_update_settings_unittest.cc
@@ -585,33 +585,21 @@
 TEST_F(GoogleUpdateSettingsTest, SetEULAConsent) {
   using installer::FakeInstallationState;
 
-  const bool multi_install = true;
   const bool system_level = true;
   FakeInstallationState machine_state;
 
   // Chrome is installed.
-  machine_state.AddChrome(system_level, multi_install,
-      new base::Version(chrome::kChromeVersion));
+  machine_state.AddChrome(system_level, false /* !multi_install */,
+                          new base::Version(chrome::kChromeVersion));
 
   RegKey key;
   DWORD value;
-  BrowserDistribution* binaries =
-      BrowserDistribution::GetSpecificDistribution(
-          BrowserDistribution::CHROME_BINARIES);
-  BrowserDistribution* chrome =
-      BrowserDistribution::GetSpecificDistribution(
-          BrowserDistribution::CHROME_BROWSER);
+  BrowserDistribution* chrome = BrowserDistribution::GetDistribution();
 
-  // eulaconsent is set on both the product and the binaries.
+  // eulaconsent is set on the product.
   EXPECT_TRUE(GoogleUpdateSettings::SetEULAConsent(machine_state, chrome,
                                                    true));
   EXPECT_EQ(ERROR_SUCCESS,
-      key.Open(HKEY_LOCAL_MACHINE, binaries->GetStateMediumKey().c_str(),
-               KEY_QUERY_VALUE));
-  EXPECT_EQ(ERROR_SUCCESS,
-      key.ReadValueDW(google_update::kRegEULAAceptedField, &value));
-  EXPECT_EQ(1U, value);
-  EXPECT_EQ(ERROR_SUCCESS,
       key.Open(HKEY_LOCAL_MACHINE, chrome->GetStateMediumKey().c_str(),
                KEY_QUERY_VALUE));
   EXPECT_EQ(ERROR_SUCCESS,
diff --git a/chrome/installer/util/install_util.cc b/chrome/installer/util/install_util.cc
index c450f32..77d8839 100644
--- a/chrome/installer/util/install_util.cc
+++ b/chrome/installer/util/install_util.cc
@@ -323,9 +323,8 @@
   env->UnSetVar(kEnvProgramFilesPath);
 }
 
-bool InstallUtil::IsMultiInstall(BrowserDistribution* dist,
-                                 bool system_install) {
-  DCHECK(dist);
+bool InstallUtil::IsMultiInstall(bool system_install) {
+  BrowserDistribution* dist = BrowserDistribution::GetDistribution();
   ProductState state;
   return state.Initialize(system_install, dist) && state.is_multi_install();
 }
diff --git a/chrome/installer/util/install_util.h b/chrome/installer/util/install_util.h
index 5862148..91f9a9a7 100644
--- a/chrome/installer/util/install_util.h
+++ b/chrome/installer/util/install_util.h
@@ -93,9 +93,8 @@
   // with fresh data.
   static void ResetIsPerUserInstallForTest();
 
-  // Returns true if the installation represented by the pair of |dist| and
-  // |system_level| is a multi install.
-  static bool IsMultiInstall(BrowserDistribution* dist, bool system_install);
+  // Returns true if Chrome at |system_level| is a multi install.
+  static bool IsMultiInstall(bool system_install);
 
   // Returns true if this is running setup process for Chrome SxS (as
   // indicated by the presence of --chrome-sxs on the command line) or if this
diff --git a/components/autofill/core/browser/password_generator.cc b/components/autofill/core/browser/password_generator.cc
index 86877fb..def0673 100644
--- a/components/autofill/core/browser/password_generator.cc
+++ b/components/autofill/core/browser/password_generator.cc
@@ -55,7 +55,7 @@
 
 namespace autofill {
 
-const int PasswordGenerator::kDefaultPasswordLength = 12;
+const int PasswordGenerator::kDefaultPasswordLength = 15;
 
 void ForceFixPassword(std::string* password) {
   for (char& it : *password) {
diff --git a/components/ntp_snippets/features.cc b/components/ntp_snippets/features.cc
index f8a2c216..78c1b69 100644
--- a/components/ntp_snippets/features.cc
+++ b/components/ntp_snippets/features.cc
@@ -30,7 +30,7 @@
     "NTPSnippetsIncreasedVisibility", base::FEATURE_ENABLED_BY_DEFAULT};
 
 const base::Feature kPhysicalWebPageSuggestionsFeature{
-    "NTPPhysicalWebPageSuggestions", base::FEATURE_DISABLED_BY_DEFAULT};
+    "NTPPhysicalWebPageSuggestions", base::FEATURE_ENABLED_BY_DEFAULT};
 
 const base::Feature kContentSuggestionsFeature{
     "NTPSnippets", base::FEATURE_ENABLED_BY_DEFAULT};
diff --git a/components/prefs/testing_pref_service.cc b/components/prefs/testing_pref_service.cc
index 1dd760e..fdaa33b0 100644
--- a/components/prefs/testing_pref_service.cc
+++ b/components/prefs/testing_pref_service.cc
@@ -15,6 +15,7 @@
 template <>
 TestingPrefServiceBase<PrefService, PrefRegistry>::TestingPrefServiceBase(
     TestingPrefStore* managed_prefs,
+    TestingPrefStore* extension_prefs,
     TestingPrefStore* user_prefs,
     TestingPrefStore* recommended_prefs,
     PrefRegistry* pref_registry,
@@ -23,7 +24,7 @@
           pref_notifier,
           new PrefValueStore(managed_prefs,
                              NULL,
-                             NULL,
+                             extension_prefs,
                              NULL,
                              user_prefs,
                              recommended_prefs,
@@ -35,6 +36,7 @@
                                              PrefRegistry>::HandleReadError),
           false),
       managed_prefs_(managed_prefs),
+      extension_prefs_(extension_prefs),
       user_prefs_(user_prefs),
       recommended_prefs_(recommended_prefs) {}
 
@@ -43,6 +45,7 @@
           new TestingPrefStore(),
           new TestingPrefStore(),
           new TestingPrefStore(),
+          new TestingPrefStore(),
           new PrefRegistrySimple(),
           new PrefNotifierImpl()) {}
 
diff --git a/components/prefs/testing_pref_service.h b/components/prefs/testing_pref_service.h
index f29e506d..6f917174 100644
--- a/components/prefs/testing_pref_service.h
+++ b/components/prefs/testing_pref_service.h
@@ -40,6 +40,14 @@
   // preference has been defined previously.
   void RemoveManagedPref(const std::string& path);
 
+  // Similar to the above, but for extension preferences.
+  // Does not really know about extensions and their order of installation.
+  // Useful in tests that only check that a preference is overridden by an
+  // extension.
+  const base::Value* GetExtensionPref(const std::string& path) const;
+  void SetExtensionPref(const std::string& path, base::Value* value);
+  void RemoveExtensionPref(const std::string& path);
+
   // Similar to the above, but for user preferences.
   const base::Value* GetUserPref(const std::string& path) const;
   void SetUserPref(const std::string& path, base::Value* value);
@@ -54,12 +62,12 @@
   static void HandleReadError(PersistentPrefStore::PrefReadError error) {}
 
  protected:
-  TestingPrefServiceBase(
-      TestingPrefStore* managed_prefs,
-      TestingPrefStore* user_prefs,
-      TestingPrefStore* recommended_prefs,
-      ConstructionPrefRegistry* pref_registry,
-      PrefNotifierImpl* pref_notifier);
+  TestingPrefServiceBase(TestingPrefStore* managed_prefs,
+                         TestingPrefStore* extension_prefs,
+                         TestingPrefStore* user_prefs,
+                         TestingPrefStore* recommended_prefs,
+                         ConstructionPrefRegistry* pref_registry,
+                         PrefNotifierImpl* pref_notifier);
 
  private:
   // Reads the value of the preference indicated by |path| from |pref_store|.
@@ -77,6 +85,7 @@
 
   // Pointers to the pref stores our value store uses.
   scoped_refptr<TestingPrefStore> managed_prefs_;
+  scoped_refptr<TestingPrefStore> extension_prefs_;
   scoped_refptr<TestingPrefStore> user_prefs_;
   scoped_refptr<TestingPrefStore> recommended_prefs_;
 
@@ -104,6 +113,7 @@
 template<>
 TestingPrefServiceBase<PrefService, PrefRegistry>::TestingPrefServiceBase(
     TestingPrefStore* managed_prefs,
+    TestingPrefStore* extension_prefs,
     TestingPrefStore* user_prefs,
     TestingPrefStore* recommended_prefs,
     PrefRegistry* pref_registry,
@@ -134,6 +144,25 @@
 }
 
 template <class SuperPrefService, class ConstructionPrefRegistry>
+const base::Value* TestingPrefServiceBase<
+    SuperPrefService,
+    ConstructionPrefRegistry>::GetExtensionPref(const std::string& path) const {
+  return GetPref(extension_prefs_.get(), path);
+}
+
+template <class SuperPrefService, class ConstructionPrefRegistry>
+void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>::
+    SetExtensionPref(const std::string& path, base::Value* value) {
+  SetPref(extension_prefs_.get(), path, value);
+}
+
+template <class SuperPrefService, class ConstructionPrefRegistry>
+void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>::
+    RemoveExtensionPref(const std::string& path) {
+  RemovePref(extension_prefs_.get(), path);
+}
+
+template <class SuperPrefService, class ConstructionPrefRegistry>
 const base::Value*
 TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>::GetUserPref(
     const std::string& path) const {
diff --git a/components/sync_preferences/testing_pref_service_syncable.cc b/components/sync_preferences/testing_pref_service_syncable.cc
index 2fc6d3e..e1598e9 100644
--- a/components/sync_preferences/testing_pref_service_syncable.cc
+++ b/components/sync_preferences/testing_pref_service_syncable.cc
@@ -14,6 +14,7 @@
 TestingPrefServiceBase<sync_preferences::PrefServiceSyncable,
                        user_prefs::PrefRegistrySyncable>::
     TestingPrefServiceBase(TestingPrefStore* managed_prefs,
+                           TestingPrefStore* extension_prefs,
                            TestingPrefStore* user_prefs,
                            TestingPrefStore* recommended_prefs,
                            user_prefs::PrefRegistrySyncable* pref_registry,
@@ -21,9 +22,9 @@
     : sync_preferences::PrefServiceSyncable(
           pref_notifier,
           new PrefValueStore(managed_prefs,
-                             nullptr,  // supervised_user_prefs
-                             nullptr,  // extension_prefs
-                             nullptr,  // command_line_prefs
+                             nullptr,          // supervised_user_prefs
+                             extension_prefs,  // extension_prefs
+                             nullptr,          // command_line_prefs
                              user_prefs,
                              recommended_prefs,
                              pref_registry->defaults().get(),
@@ -36,6 +37,7 @@
                      user_prefs::PrefRegistrySyncable>::HandleReadError),
           false),
       managed_prefs_(managed_prefs),
+      extension_prefs_(extension_prefs),
       user_prefs_(user_prefs),
       recommended_prefs_(recommended_prefs) {}
 
@@ -47,11 +49,13 @@
           new TestingPrefStore(),
           new TestingPrefStore(),
           new TestingPrefStore(),
+          new TestingPrefStore(),
           new user_prefs::PrefRegistrySyncable(),
           new PrefNotifierImpl()) {}
 
 TestingPrefServiceSyncable::TestingPrefServiceSyncable(
     TestingPrefStore* managed_prefs,
+    TestingPrefStore* extension_prefs,
     TestingPrefStore* user_prefs,
     TestingPrefStore* recommended_prefs,
     user_prefs::PrefRegistrySyncable* pref_registry,
@@ -59,6 +63,7 @@
     : TestingPrefServiceBase<PrefServiceSyncable,
                              user_prefs::PrefRegistrySyncable>(
           managed_prefs,
+          extension_prefs,
           user_prefs,
           recommended_prefs,
           pref_registry,
diff --git a/components/sync_preferences/testing_pref_service_syncable.h b/components/sync_preferences/testing_pref_service_syncable.h
index 521b802..cf83573f 100644
--- a/components/sync_preferences/testing_pref_service_syncable.h
+++ b/components/sync_preferences/testing_pref_service_syncable.h
@@ -22,6 +22,7 @@
  public:
   TestingPrefServiceSyncable();
   TestingPrefServiceSyncable(TestingPrefStore* managed_prefs,
+                             TestingPrefStore* extension_prefs,
                              TestingPrefStore* user_prefs,
                              TestingPrefStore* recommended_prefs,
                              user_prefs::PrefRegistrySyncable* pref_registry,
@@ -45,6 +46,7 @@
 TestingPrefServiceBase<sync_preferences::PrefServiceSyncable,
                        user_prefs::PrefRegistrySyncable>::
     TestingPrefServiceBase(TestingPrefStore* managed_prefs,
+                           TestingPrefStore* extension_prefs,
                            TestingPrefStore* user_prefs,
                            TestingPrefStore* recommended_prefs,
                            user_prefs::PrefRegistrySyncable* pref_registry,
diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios_strings.grd
index 05ed29a..350ad30 100644
--- a/ios/chrome/app/strings/ios_strings.grd
+++ b/ios/chrome/app/strings/ios_strings.grd
@@ -901,10 +901,10 @@
         Web Services
       </message>
       <message name="IDS_IOS_PAGE_INFO_OFFLINE_PAGE" desc="Message to display in the page info bubble when the page you are on is an offline page.">
-        The page has been saved locally to your Reading List.
+        This page has been saved to your Reading List.
       </message>
       <message name="IDS_IOS_PAGE_INFO_OFFLINE_TITLE" desc="Title of the message to display in the page info bubble when the page you are on is an offline page.">
-        Viewing in Offline Mode
+        Viewing Offline Version
       </message>
       <message name="IDS_IOS_PAGE_INFO_RELOAD" desc="Button title in the page info bubble that allows to reload the current page.">
         Reload
@@ -1047,8 +1047,14 @@
       <message name="IDS_IOS_READING_LIST_SNACKBAR_MESSAGE" desc="Message briefly displayed at the bottom of the screen to the user to inform that the selected page has been added to the reading list. [Length: 35em]" meaning="The selected page has been added to your reading list. [Length: 35em]">
         Added to Reading List
       </message>
-      <message name="IDS_IOS_READING_LIST_ENTRY_ACCESSIBILITY_LABEL" desc="Accessibility label for a reading list entry. Summarizes fields in the reading list entry (title and url). Read by Text To Speech.">
-        <ph name="TITLE"><ex>Chromium - The Chromium Projects</ex>$1</ph>, <ph name="URL"><ex>http://www.chromium.org/Home</ex>$2</ph>
+      <message name="IDS_IOS_READING_LIST_ENTRY_ACCESSIBILITY_LABEL" desc="Accessibility label for a reading list entry. Summarizes fields in the reading list entry (title, status and url). Read by Text To Speech.">
+        <ph name="TITLE"><ex>Chromium - The Chromium Projects</ex>$1</ph>, <ph name="STATE"><ex>Available offline</ex>$2</ph>, <ph name="URL"><ex>http://www.chromium.org/Home</ex>$3</ph>
+      </message>
+      <message name="IDS_IOS_READING_LIST_ACCESSIBILITY_STATE_DOWNLOADED" desc="Accessibility label for the offline status of the reading list entry. Read by Text To Speech.">
+        Available offline
+      </message>
+      <message name="IDS_IOS_READING_LIST_ACCESSIBILITY_STATE_NOT_DOWNLOADED" desc="Accessibility label for the offline status of the reading list entry. Read by Text To Speech.">
+        Not available offline
       </message>
       <message name="IDS_IOS_READING_LIST_CANCEL_BUTTON" desc="Label of the button to stop editing the reading list entries (delete, mark as read/unread) [Length: 25em]" meaning="Stop editing. [Length: 25em]">
         Cancel
diff --git a/ios/chrome/browser/downstream_chromium_browser_provider.h b/ios/chrome/browser/downstream_chromium_browser_provider.h
index 2e1e189..acfadeb27 100644
--- a/ios/chrome/browser/downstream_chromium_browser_provider.h
+++ b/ios/chrome/browser/downstream_chromium_browser_provider.h
@@ -16,18 +16,6 @@
   ~DownstreamChromiumBrowserProvider() override;
 
  private:
-  // ChromeBrowserProvider implementations.  All of these will move upstream
-  // into ChromiumBrowserProvider eventually, and from there callers will be
-  // converted to not go through the provider API at all.
-  void GetFaviconForURL(
-      ios::ChromeBrowserState* browser_state,
-      const GURL& page_url,
-      const std::vector<int>& desired_sizes_in_pixel,
-      const favicon_base::FaviconResultsCallback& callback) const override;
-  std::unique_ptr<sync_sessions::SyncedWindowDelegatesGetter>
-  CreateSyncedWindowDelegatesGetter(
-      ios::ChromeBrowserState* browser_state) override;
-
   DISALLOW_COPY_AND_ASSIGN(DownstreamChromiumBrowserProvider);
 };
 
diff --git a/ios/chrome/browser/downstream_chromium_browser_provider.mm b/ios/chrome/browser/downstream_chromium_browser_provider.mm
index 20a3056a..7a2608e 100644
--- a/ios/chrome/browser/downstream_chromium_browser_provider.mm
+++ b/ios/chrome/browser/downstream_chromium_browser_provider.mm
@@ -4,30 +4,6 @@
 
 #import "ios/chrome/browser/downstream_chromium_browser_provider.h"
 
-#import <UIKit/UIKit.h>
-
-#include <memory>
-#include <string>
-
-#include "base/memory/ptr_util.h"
-#include "ios/chrome/browser/tabs/tab_model_synced_window_delegate_getter.h"
-#include "ios/chrome/browser/ui/webui/chrome_web_ui_ios_controller_factory.h"
-
 DownstreamChromiumBrowserProvider::DownstreamChromiumBrowserProvider() {}
 
 DownstreamChromiumBrowserProvider::~DownstreamChromiumBrowserProvider() {}
-
-void DownstreamChromiumBrowserProvider::GetFaviconForURL(
-    ios::ChromeBrowserState* browser_state,
-    const GURL& page_url,
-    const std::vector<int>& desired_sizes_in_pixel,
-    const favicon_base::FaviconResultsCallback& callback) const {
-  ChromeWebUIIOSControllerFactory::GetInstance()->GetFaviconForURL(
-      browser_state, page_url, desired_sizes_in_pixel, callback);
-}
-
-std::unique_ptr<sync_sessions::SyncedWindowDelegatesGetter>
-DownstreamChromiumBrowserProvider::CreateSyncedWindowDelegatesGetter(
-    ios::ChromeBrowserState* browser_state) {
-  return base::MakeUnique<TabModelSyncedWindowDelegatesGetter>(browser_state);
-}
diff --git a/ios/chrome/browser/favicon/BUILD.gn b/ios/chrome/browser/favicon/BUILD.gn
index 01b0c56..4b3e6af 100644
--- a/ios/chrome/browser/favicon/BUILD.gn
+++ b/ios/chrome/browser/favicon/BUILD.gn
@@ -30,12 +30,13 @@
     "//components/favicon_base",
     "//components/keyed_service/core",
     "//components/keyed_service/ios",
+    "//components/resources",
     "//ios/chrome/browser",
     "//ios/chrome/browser/browser_state",
     "//ios/chrome/browser/history",
-    "//ios/public/provider/chrome/browser",
     "//ios/web",
     "//skia",
+    "//ui/base",
     "//ui/gfx",
     "//url",
   ]
diff --git a/ios/chrome/browser/favicon/favicon_client_impl.h b/ios/chrome/browser/favicon/favicon_client_impl.h
index 3874fb5..0680303 100644
--- a/ios/chrome/browser/favicon/favicon_client_impl.h
+++ b/ios/chrome/browser/favicon/favicon_client_impl.h
@@ -12,16 +12,12 @@
 #include "components/favicon/core/favicon_client.h"
 #include "components/favicon_base/favicon_callback.h"
 
-namespace ios {
-class ChromeBrowserState;
-}
-
 class GURL;
 
 // FaviconClientImpl implements the favicon::FaviconClient interface on iOS.
 class FaviconClientImpl : public favicon::FaviconClient {
  public:
-  FaviconClientImpl(ios::ChromeBrowserState* browser_state);
+  FaviconClientImpl();
   ~FaviconClientImpl() override;
 
  private:
@@ -33,8 +29,6 @@
       const favicon_base::FaviconResultsCallback& callback,
       base::CancelableTaskTracker* tracker) override;
 
-  ios::ChromeBrowserState* browser_state_;
-
   DISALLOW_COPY_AND_ASSIGN(FaviconClientImpl);
 };
 
diff --git a/ios/chrome/browser/favicon/favicon_client_impl.mm b/ios/chrome/browser/favicon/favicon_client_impl.mm
index 860e4894..5f48768 100644
--- a/ios/chrome/browser/favicon/favicon_client_impl.mm
+++ b/ios/chrome/browser/favicon/favicon_client_impl.mm
@@ -4,11 +4,21 @@
 
 #include "ios/chrome/browser/favicon/favicon_client_impl.h"
 
+#include <memory>
+
 #include "base/bind.h"
 #include "base/logging.h"
+#include "base/memory/ptr_util.h"
 #include "base/task/cancelable_task_tracker.h"
+#include "base/threading/thread_task_runner_handle.h"
+#include "components/favicon/core/favicon_service.h"
+#include "components/favicon_base/favicon_types.h"
+#include "components/favicon_base/select_favicon_frames.h"
+#include "components/grit/components_scaled_resources.h"
 #include "ios/chrome/browser/chrome_url_constants.h"
-#include "ios/public/provider/chrome/browser/chrome_browser_provider.h"
+#include "ui/base/layout.h"
+#include "ui/base/resource/resource_bundle.h"
+#include "ui/gfx/favicon_size.h"
 #include "url/gurl.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
@@ -17,19 +27,58 @@
 
 namespace {
 
-void RunFaviconCallbackIfNotCanceled(
-    const base::CancelableTaskTracker::IsCanceledCallback& is_canceled_cb,
-    const favicon_base::FaviconResultsCallback& original_callback,
-    const std::vector<favicon_base::FaviconRawBitmapResult>& results) {
-  if (!is_canceled_cb.Run()) {
-    original_callback.Run(results);
+int GetFaviconResourceIdForNativeURL(const GURL& url) {
+  if (url.host_piece() == kChromeUICrashesHost)
+    return IDR_CRASH_SAD_FAVICON;
+  if (url.host_piece() == kChromeUIFlagsHost)
+    return IDR_FLAGS_FAVICON;
+  if (url.host_piece() == kChromeUIAppleFlagsHost)
+    return IDR_FLAGS_FAVICON;
+  return -1;
+}
+
+void GetFaviconBitmapForNativeURL(
+    const GURL& url,
+    const std::vector<int>& desired_sizes_in_pixel,
+    std::vector<favicon_base::FaviconRawBitmapResult>* favicon_bitmap_results) {
+  const int resource_id = GetFaviconResourceIdForNativeURL(url);
+  if (resource_id == -1)
+    return;
+
+  // Use ui::GetSupportedScaleFactors() because native URL favicon comes from
+  // resources.
+  std::vector<ui::ScaleFactor> scale_factors = ui::GetSupportedScaleFactors();
+
+  std::vector<gfx::Size> candidate_sizes;
+  for (ui::ScaleFactor scale_factor : scale_factors) {
+    float scale = ui::GetScaleForScaleFactor(scale_factor);
+    int candidate_size = static_cast<int>(gfx::kFaviconSize * scale + 0.5f);
+    candidate_sizes.push_back(gfx::Size(candidate_size, candidate_size));
+  }
+
+  std::vector<size_t> selected_indices;
+  SelectFaviconFrameIndices(candidate_sizes, desired_sizes_in_pixel,
+                            &selected_indices, nullptr);
+
+  for (size_t selected_index : selected_indices) {
+    ui::ScaleFactor scale_factor = scale_factors[selected_index];
+    favicon_base::FaviconRawBitmapResult favicon_bitmap;
+    favicon_bitmap.icon_type = favicon_base::FAVICON;
+    favicon_bitmap.pixel_size = candidate_sizes[selected_index];
+    favicon_bitmap.bitmap_data =
+        ResourceBundle::GetSharedInstance().LoadDataResourceBytesForScale(
+            resource_id, scale_factor);
+
+    if (!favicon_bitmap.is_valid())
+      continue;
+
+    favicon_bitmap_results->push_back(favicon_bitmap);
   }
 }
 
 }  // namespace
 
-FaviconClientImpl::FaviconClientImpl(ios::ChromeBrowserState* browser_state)
-    : browser_state_(browser_state) {}
+FaviconClientImpl::FaviconClientImpl() {}
 
 FaviconClientImpl::~FaviconClientImpl() {}
 
@@ -45,13 +94,14 @@
     base::CancelableTaskTracker* tracker) {
   DCHECK(tracker);
   DCHECK(IsNativeApplicationURL(url));
-  base::CancelableTaskTracker::IsCanceledCallback is_canceled_cb;
-  base::CancelableTaskTracker::TaskId task_id =
-      tracker->NewTrackedTaskId(&is_canceled_cb);
-  if (task_id != base::CancelableTaskTracker::kBadTaskId) {
-    ios::GetChromeBrowserProvider()->GetFaviconForURL(
-        browser_state_, url, desired_sizes_in_pixel,
-        base::Bind(&RunFaviconCallbackIfNotCanceled, is_canceled_cb, callback));
-  }
-  return task_id;
+
+  auto favicon_bitmap_results =
+      base::MakeUnique<std::vector<favicon_base::FaviconRawBitmapResult>>();
+  GetFaviconBitmapForNativeURL(url, desired_sizes_in_pixel,
+                               favicon_bitmap_results.get());
+
+  return tracker->PostTask(
+      base::ThreadTaskRunnerHandle::Get().get(), FROM_HERE,
+      base::Bind(&favicon::FaviconService::FaviconResultsCallbackRunner,
+                 callback, base::Owned(favicon_bitmap_results.release())));
 }
diff --git a/ios/chrome/browser/favicon/favicon_service_factory.cc b/ios/chrome/browser/favicon/favicon_service_factory.cc
index 6f7cce1a..0c72fd5 100644
--- a/ios/chrome/browser/favicon/favicon_service_factory.cc
+++ b/ios/chrome/browser/favicon/favicon_service_factory.cc
@@ -53,7 +53,7 @@
   ios::ChromeBrowserState* browser_state =
       ios::ChromeBrowserState::FromBrowserState(context);
   return base::MakeUnique<favicon::FaviconService>(
-      base::WrapUnique(new FaviconClientImpl(browser_state)),
+      base::MakeUnique<FaviconClientImpl>(),
       ios::HistoryServiceFactory::GetForBrowserState(
           browser_state, ServiceAccessType::EXPLICIT_ACCESS));
 }
diff --git a/ios/chrome/browser/sync/BUILD.gn b/ios/chrome/browser/sync/BUILD.gn
index 7711e27..3dabba1 100644
--- a/ios/chrome/browser/sync/BUILD.gn
+++ b/ios/chrome/browser/sync/BUILD.gn
@@ -56,9 +56,9 @@
     "//ios/chrome/browser/signin",
     "//ios/chrome/browser/sync/glue",
     "//ios/chrome/browser/sync/sessions",
+    "//ios/chrome/browser/tabs",
     "//ios/chrome/browser/undo",
     "//ios/chrome/common",
-    "//ios/public/provider/chrome/browser",
     "//ios/web",
     "//net",
     "//ui/base",
diff --git a/ios/chrome/browser/sync/ios_chrome_sync_client.mm b/ios/chrome/browser/sync/ios_chrome_sync_client.mm
index 5ed9a2b..10bf741 100644
--- a/ios/chrome/browser/sync/ios_chrome_sync_client.mm
+++ b/ios/chrome/browser/sync/ios_chrome_sync_client.mm
@@ -58,10 +58,10 @@
 #include "ios/chrome/browser/sync/glue/sync_start_util.h"
 #include "ios/chrome/browser/sync/ios_chrome_profile_sync_service_factory.h"
 #include "ios/chrome/browser/sync/sessions/ios_chrome_local_session_event_router.h"
+#include "ios/chrome/browser/tabs/tab_model_synced_window_delegate_getter.h"
 #include "ios/chrome/browser/undo/bookmark_undo_service_factory.h"
 #include "ios/chrome/browser/web_data_service_factory.h"
 #include "ios/chrome/common/channel_info.h"
-#include "ios/public/provider/chrome/browser/chrome_browser_provider.h"
 #include "ios/web/public/web_thread.h"
 #include "ui/base/device_form_factor.h"
 
@@ -79,7 +79,7 @@
   explicit SyncSessionsClientImpl(ios::ChromeBrowserState* browser_state)
       : browser_state_(browser_state),
         window_delegates_getter_(
-            ios::GetChromeBrowserProvider()->CreateSyncedWindowDelegatesGetter(
+            base::MakeUnique<TabModelSyncedWindowDelegatesGetter>(
                 browser_state)) {}
 
   ~SyncSessionsClientImpl() override {}
diff --git a/ios/chrome/browser/tabs/BUILD.gn b/ios/chrome/browser/tabs/BUILD.gn
index 14b8f1b..04646b8d 100644
--- a/ios/chrome/browser/tabs/BUILD.gn
+++ b/ios/chrome/browser/tabs/BUILD.gn
@@ -9,11 +9,16 @@
     "tab_dialog_delegate.h",
     "tab_model.h",
     "tab_model_observer.h",
+    "tab_model_order_controller.h",
+    "tab_model_synced_window_delegate.h",
+    "tab_model_synced_window_delegate_getter.h",
     "tab_private.h",
     "tab_snapshotting_delegate.h",
   ]
   deps = [
+    "//components/sessions",
     "//components/signin/ios/browser",
+    "//components/sync_sessions",
     "//ios/net",
     "//ios/web",
     "//ui/base",
@@ -25,11 +30,8 @@
   sources = [
     "tab.mm",
     "tab_model.mm",
-    "tab_model_order_controller.h",
     "tab_model_order_controller.mm",
-    "tab_model_synced_window_delegate.h",
     "tab_model_synced_window_delegate.mm",
-    "tab_model_synced_window_delegate_getter.h",
     "tab_model_synced_window_delegate_getter.mm",
   ]
   deps = [
@@ -53,7 +55,6 @@
     "//components/signin/core/browser",
     "//components/signin/ios/browser",
     "//components/strings",
-    "//components/sync_sessions",
     "//components/url_formatter",
     "//ios/chrome/app/strings",
     "//ios/chrome/browser",
diff --git a/ios/chrome/browser/ui/reading_list/reading_list_collection_view_item.mm b/ios/chrome/browser/ui/reading_list/reading_list_collection_view_item.mm
index 8c5a1a3..e13cc2f 100644
--- a/ios/chrome/browser/ui/reading_list/reading_list_collection_view_item.mm
+++ b/ios/chrome/browser/ui/reading_list/reading_list_collection_view_item.mm
@@ -101,6 +101,7 @@
 - (void)setDistillationState:
     (ReadingListEntry::DistillationState)distillationState {
   self.displayedCell.distillationState = distillationState;
+  self.displayedCell.accessibilityLabel = [self accessibilityLabel];
   _distillationState = distillationState;
 }
 
@@ -117,10 +118,7 @@
   cell.delegate = self;
   cell.distillationState = _distillationState;
   cell.isAccessibilityElement = YES;
-  cell.accessibilityLabel =
-      l10n_util::GetNSStringF(IDS_IOS_READING_LIST_ENTRY_ACCESSIBILITY_LABEL,
-                              base::SysNSStringToUTF16(self.text),
-                              base::SysNSStringToUTF16(self.detailText));
+  cell.accessibilityLabel = [self accessibilityLabel];
 }
 
 #pragma mark - ReadingListCellDelegate
@@ -129,6 +127,24 @@
   self.displayedCell = nil;
 }
 
+#pragma mark - Private
+
+- (NSString*)accessibilityLabel {
+  NSString* accessibilityState = nil;
+  if (self.distillationState == ReadingListEntry::PROCESSED) {
+    accessibilityState = l10n_util::GetNSString(
+        IDS_IOS_READING_LIST_ACCESSIBILITY_STATE_DOWNLOADED);
+  } else {
+    accessibilityState = l10n_util::GetNSString(
+        IDS_IOS_READING_LIST_ACCESSIBILITY_STATE_NOT_DOWNLOADED);
+  }
+
+  return l10n_util::GetNSStringF(IDS_IOS_READING_LIST_ENTRY_ACCESSIBILITY_LABEL,
+                                 base::SysNSStringToUTF16(self.text),
+                                 base::SysNSStringToUTF16(accessibilityState),
+                                 base::SysNSStringToUTF16(self.detailText));
+}
+
 #pragma mark - NSObject
 
 - (NSString*)description {
diff --git a/ios/chrome/browser/ui/webui/BUILD.gn b/ios/chrome/browser/ui/webui/BUILD.gn
index d5ebc91..df43c20d 100644
--- a/ios/chrome/browser/ui/webui/BUILD.gn
+++ b/ios/chrome/browser/ui/webui/BUILD.gn
@@ -67,8 +67,6 @@
   deps = [
     ":webui",
     "//base",
-    "//components/favicon/core",
-    "//components/favicon_base",
     "//components/resources",
     "//components/signin/core/browser",
     "//ios/chrome/app/resources:ios_resources",
@@ -80,8 +78,6 @@
     "//ios/chrome/browser/ui/webui/net_export",
     "//ios/chrome/browser/ui/webui/sync_internals",
     "//ios/web",
-    "//ui/base",
-    "//ui/gfx",
     "//url",
   ]
 }
diff --git a/ios/chrome/browser/ui/webui/chrome_web_ui_ios_controller_factory.h b/ios/chrome/browser/ui/webui/chrome_web_ui_ios_controller_factory.h
index 5030097..7b3fa59 100644
--- a/ios/chrome/browser/ui/webui/chrome_web_ui_ios_controller_factory.h
+++ b/ios/chrome/browser/ui/webui/chrome_web_ui_ios_controller_factory.h
@@ -9,18 +9,8 @@
 
 #include "base/macros.h"
 #include "base/memory/singleton.h"
-#include "components/favicon_base/favicon_callback.h"
 #include "ios/web/public/webui/web_ui_ios.h"
 #include "ios/web/public/webui/web_ui_ios_controller_factory.h"
-#include "ui/base/layout.h"
-
-namespace base {
-class RefCountedMemory;
-}
-
-namespace ios {
-class ChromeBrowserState;
-}
 
 class GURL;
 
@@ -32,14 +22,6 @@
 
   static ChromeWebUIIOSControllerFactory* GetInstance();
 
-  // Get the favicon for |page_url| and run |callback| with result when loaded.
-  // Note. |callback| is always run asynchronously.
-  void GetFaviconForURL(
-      ios::ChromeBrowserState* browser_state,
-      const GURL& page_url,
-      const std::vector<int>& desired_sizes_in_pixel,
-      const favicon_base::FaviconResultsCallback& callback) const;
-
  protected:
   ChromeWebUIIOSControllerFactory();
   ~ChromeWebUIIOSControllerFactory() override;
@@ -47,14 +29,6 @@
  private:
   friend struct base::DefaultSingletonTraits<ChromeWebUIIOSControllerFactory>;
 
-  // Gets the data for the favicon for a WebUIIOS page. Returns nullptr if the
-  // WebUIIOS does not have a favicon.
-  // The returned favicon data must be |gfx::kFaviconSize| x |gfx::kFaviconSize|
-  // DIP. GetFaviconForURL() should be updated if this changes.
-  base::RefCountedMemory* GetFaviconResourceBytes(
-      const GURL& page_url,
-      ui::ScaleFactor scale_factor) const;
-
   DISALLOW_COPY_AND_ASSIGN(ChromeWebUIIOSControllerFactory);
 };
 
diff --git a/ios/chrome/browser/ui/webui/chrome_web_ui_ios_controller_factory.mm b/ios/chrome/browser/ui/webui/chrome_web_ui_ios_controller_factory.mm
index 3488abe..cf1df75 100644
--- a/ios/chrome/browser/ui/webui/chrome_web_ui_ios_controller_factory.mm
+++ b/ios/chrome/browser/ui/webui/chrome_web_ui_ios_controller_factory.mm
@@ -6,10 +6,6 @@
 
 #include "base/bind.h"
 #include "base/location.h"
-#include "base/threading/thread_task_runner_handle.h"
-#include "components/favicon/core/favicon_service.h"
-#include "components/favicon_base/favicon_types.h"
-#include "components/favicon_base/select_favicon_frames.h"
 #include "ios/chrome/browser/chrome_url_constants.h"
 #include "ios/chrome/browser/experimental_flags.h"
 #include "ios/chrome/browser/ui/webui/about_ui.h"
@@ -24,7 +20,6 @@
 #include "ios/chrome/browser/ui/webui/signin_internals_ui_ios.h"
 #include "ios/chrome/browser/ui/webui/sync_internals/sync_internals_ui.h"
 #include "ios/chrome/browser/ui/webui/version_ui.h"
-#include "ui/gfx/favicon_size.h"
 #include "url/gurl.h"
 
 using web::WebUIIOS;
@@ -91,23 +86,9 @@
   if (url_host == kChromeUIAppleFlagsHost)
     return &NewWebUIIOS<AppleFlagsUI>;
 
-  // NOTE: It's possible that |url| is a WebUI URL that will be handled by
-  // ChromeWebUIControllerFactory. Once the iOS port is no longer using
-  // ChromeWebUIControllerFactory, there should be a DLOG here noting that
-  // |url| is an unknown WebUI URL.
-
   return nullptr;
 }
 
-void RunFaviconCallbackAsync(
-    const favicon_base::FaviconResultsCallback& callback,
-    const std::vector<favicon_base::FaviconRawBitmapResult>* results) {
-  base::ThreadTaskRunnerHandle::Get()->PostTask(
-      FROM_HERE,
-      base::Bind(&favicon::FaviconService::FaviconResultsCallbackRunner,
-                 callback, base::Owned(results)));
-}
-
 }  // namespace
 
 WebUIIOSController*
@@ -130,67 +111,3 @@
 ChromeWebUIIOSControllerFactory::ChromeWebUIIOSControllerFactory() {}
 
 ChromeWebUIIOSControllerFactory::~ChromeWebUIIOSControllerFactory() {}
-
-void ChromeWebUIIOSControllerFactory::GetFaviconForURL(
-    ios::ChromeBrowserState* browser_state,
-    const GURL& page_url,
-    const std::vector<int>& desired_sizes_in_pixel,
-    const favicon_base::FaviconResultsCallback& callback) const {
-  GURL url(page_url);
-
-  std::vector<favicon_base::FaviconRawBitmapResult>* favicon_bitmap_results =
-      new std::vector<favicon_base::FaviconRawBitmapResult>();
-
-  // Use ui::GetSupportedScaleFactors instead of
-  // favicon_base::GetFaviconScales() because chrome favicons comes from
-  // resources.
-  std::vector<ui::ScaleFactor> resource_scale_factors =
-      ui::GetSupportedScaleFactors();
-
-  std::vector<gfx::Size> candidate_sizes;
-  for (size_t i = 0; i < resource_scale_factors.size(); ++i) {
-    float scale = ui::GetScaleForScaleFactor(resource_scale_factors[i]);
-    int candidate_edge_size =
-        static_cast<int>(gfx::kFaviconSize * scale + 0.5f);
-    candidate_sizes.push_back(
-        gfx::Size(candidate_edge_size, candidate_edge_size));
-  }
-  std::vector<size_t> selected_indices;
-  SelectFaviconFrameIndices(candidate_sizes, desired_sizes_in_pixel,
-                            &selected_indices, nullptr);
-  for (size_t i = 0; i < selected_indices.size(); ++i) {
-    size_t selected_index = selected_indices[i];
-    ui::ScaleFactor selected_resource_scale =
-        resource_scale_factors[selected_index];
-
-    scoped_refptr<base::RefCountedMemory> bitmap(
-        GetFaviconResourceBytes(url, selected_resource_scale));
-    if (bitmap.get() && bitmap->size()) {
-      favicon_base::FaviconRawBitmapResult bitmap_result;
-      bitmap_result.bitmap_data = bitmap;
-      // Leave |bitmap_result|'s icon URL as the default of GURL().
-      bitmap_result.icon_type = favicon_base::FAVICON;
-      bitmap_result.pixel_size = candidate_sizes[selected_index];
-      favicon_bitmap_results->push_back(bitmap_result);
-    }
-  }
-
-  RunFaviconCallbackAsync(callback, favicon_bitmap_results);
-}
-
-base::RefCountedMemory*
-ChromeWebUIIOSControllerFactory::GetFaviconResourceBytes(
-    const GURL& page_url,
-    ui::ScaleFactor scale_factor) const {
-  if (!page_url.SchemeIs(kChromeUIScheme))
-    return nullptr;
-
-  if (page_url.host_piece() == kChromeUICrashesHost)
-    return CrashesUI::GetFaviconResourceBytes(scale_factor);
-  if (page_url.host_piece() == kChromeUIFlagsHost)
-    return FlagsUI::GetFaviconResourceBytes(scale_factor);
-  if (page_url.host_piece() == kChromeUIAppleFlagsHost)
-    return AppleFlagsUI::GetFaviconResourceBytes(scale_factor);
-
-  return nullptr;
-}
diff --git a/ios/chrome/browser/ui/webui/crashes_ui.cc b/ios/chrome/browser/ui/webui/crashes_ui.cc
index 6286a34..269baea 100644
--- a/ios/chrome/browser/ui/webui/crashes_ui.cc
+++ b/ios/chrome/browser/ui/webui/crashes_ui.cc
@@ -9,13 +9,11 @@
 #include "base/bind.h"
 #include "base/bind_helpers.h"
 #include "base/macros.h"
-#include "base/memory/ref_counted_memory.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/sys_info.h"
 #include "base/values.h"
 #include "components/crash/core/browser/crashes_ui_util.h"
 #include "components/grit/components_resources.h"
-#include "components/grit/components_scaled_resources.h"
 #include "components/strings/grit/components_chromium_strings.h"
 #include "components/strings/grit/components_strings.h"
 #include "components/version_info/version_info.h"
@@ -27,7 +25,6 @@
 #include "ios/web/public/web_ui_ios_data_source.h"
 #include "ios/web/public/webui/web_ui_ios.h"
 #include "ios/web/public/webui/web_ui_ios_message_handler.h"
-#include "ui/base/resource/resource_bundle.h"
 
 namespace {
 
@@ -155,10 +152,3 @@
   web::WebUIIOSDataSource::Add(ios::ChromeBrowserState::FromWebUIIOS(web_ui),
                                CreateCrashesUIHTMLSource());
 }
-
-// static
-base::RefCountedMemory* CrashesUI::GetFaviconResourceBytes(
-    ui::ScaleFactor scale_factor) {
-  return ResourceBundle::GetSharedInstance().LoadDataResourceBytesForScale(
-      IDR_CRASH_SAD_FAVICON, scale_factor);
-}
diff --git a/ios/chrome/browser/ui/webui/crashes_ui.h b/ios/chrome/browser/ui/webui/crashes_ui.h
index 3eae058..91b3513 100644
--- a/ios/chrome/browser/ui/webui/crashes_ui.h
+++ b/ios/chrome/browser/ui/webui/crashes_ui.h
@@ -7,11 +7,6 @@
 
 #include "base/macros.h"
 #include "ios/web/public/webui/web_ui_ios_controller.h"
-#include "ui/base/layout.h"
-
-namespace base {
-class RefCountedMemory;
-}
 
 namespace web {
 class WebUIIOS;
@@ -21,9 +16,6 @@
  public:
   explicit CrashesUI(web::WebUIIOS* web_ui);
 
-  static base::RefCountedMemory* GetFaviconResourceBytes(
-      ui::ScaleFactor scale_factor);
-
  private:
   DISALLOW_COPY_AND_ASSIGN(CrashesUI);
 };
diff --git a/ios/chrome/browser/ui/webui/flags_ui.cc b/ios/chrome/browser/ui/webui/flags_ui.cc
index a30327c..1ffd385 100644
--- a/ios/chrome/browser/ui/webui/flags_ui.cc
+++ b/ios/chrome/browser/ui/webui/flags_ui.cc
@@ -9,14 +9,12 @@
 #include "base/bind.h"
 #include "base/bind_helpers.h"
 #include "base/macros.h"
-#include "base/memory/ref_counted_memory.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/values.h"
 #include "components/flags_ui/flags_ui_constants.h"
 #include "components/flags_ui/flags_ui_pref_names.h"
 #include "components/flags_ui/pref_service_flags_storage.h"
 #include "components/grit/components_resources.h"
-#include "components/grit/components_scaled_resources.h"
 #include "components/prefs/pref_registry_simple.h"
 #include "components/prefs/pref_service.h"
 #include "components/strings/grit/components_chromium_strings.h"
@@ -230,13 +228,6 @@
 
 BaseFlagsUI::~BaseFlagsUI() {}
 
-// static
-base::RefCountedMemory* BaseFlagsUI::GetFaviconResourceBytes(
-    ui::ScaleFactor scale_factor) {
-  return ResourceBundle::GetSharedInstance().LoadDataResourceBytesForScale(
-      IDR_FLAGS_FAVICON, scale_factor);
-}
-
 ///////////////////////////////////////////////////////////////////////////////
 //
 // FlagsUI
diff --git a/ios/chrome/browser/ui/webui/flags_ui.h b/ios/chrome/browser/ui/webui/flags_ui.h
index e011da4..3a4492f 100644
--- a/ios/chrome/browser/ui/webui/flags_ui.h
+++ b/ios/chrome/browser/ui/webui/flags_ui.h
@@ -8,11 +8,6 @@
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "ios/web/public/webui/web_ui_ios_controller.h"
-#include "ui/base/layout.h"
-
-namespace base {
-class RefCountedMemory;
-}
 
 class BaseFlagsUI : public web::WebUIIOSController {
  public:
@@ -24,9 +19,6 @@
   BaseFlagsUI(web::WebUIIOS* web_ui, FlagsUIKind flags_ui_kind);
   ~BaseFlagsUI() override;
 
-  static base::RefCountedMemory* GetFaviconResourceBytes(
-      ui::ScaleFactor scale_factor);
-
  private:
   void Initialize(web::WebUIIOS* web_ui, FlagsUIKind flags_ui_kind);
 
diff --git a/ios/chrome/browser/ui/webui/signin_internals_ui_ios.cc b/ios/chrome/browser/ui/webui/signin_internals_ui_ios.cc
index 903b6ae..714215f1 100644
--- a/ios/chrome/browser/ui/webui/signin_internals_ui_ios.cc
+++ b/ios/chrome/browser/ui/webui/signin_internals_ui_ios.cc
@@ -14,7 +14,6 @@
 #include "ios/chrome/browser/signin/gaia_cookie_manager_service_factory.h"
 #include "ios/web/public/web_ui_ios_data_source.h"
 #include "ios/web/public/webui/web_ui_ios.h"
-#include "ui/base/resource/resource_bundle.h"
 
 namespace {
 
diff --git a/ios/chrome/share_extension/share_extension_localize_strings_config.plist b/ios/chrome/share_extension/share_extension_localize_strings_config.plist
index 27e4c3d..6fc22d7a 100644
--- a/ios/chrome/share_extension/share_extension_localize_strings_config.plist
+++ b/ios/chrome/share_extension/share_extension_localize_strings_config.plist
@@ -15,6 +15,7 @@
 			<array>
 				<string>IDS_IOS_ADD_READING_LIST_SHARE_EXTENSION</string>
 				<string>IDS_IOS_ADD_BOOKMARKS_SHARE_EXTENSION</string>
+				<string>IDS_IOS_ADDED_ITEM_SHARE_EXTENSION</string>
 				<string>IDS_IOS_ERROR_MESSAGE_SHARE_EXTENSION</string>
 				<string>IDS_IOS_OK_BUTTON_SHARE_EXTENSION</string>
 			</array>
diff --git a/ios/chrome/share_extension/share_extension_view.mm b/ios/chrome/share_extension/share_extension_view.mm
index ad47be8..1e0f73c 100644
--- a/ios/chrome/share_extension/share_extension_view.mm
+++ b/ios/chrome/share_extension/share_extension_view.mm
@@ -51,11 +51,16 @@
 
 @interface ShareExtensionView () {
   __weak id<ShareExtensionViewActionTarget> _target;
+
+  // Track if a button has been pressed. All button pressing will have no effect
+  // if |_dismissed| is YES.
+  BOOL _dismissed;
 }
 
 // Keep strong references of the views that need to be updated.
 @property(nonatomic, strong) UILabel* titleLabel;
 @property(nonatomic, strong) UILabel* URLLabel;
+@property(nonatomic, strong) UIButton* readingListButton;
 @property(nonatomic, strong) UIImageView* screenshotView;
 @property(nonatomic, strong) UIStackView* itemStack;
 
@@ -74,12 +79,27 @@
 // Returns a navigationBar.
 - (UINavigationBar*)navigationBar;
 
+// Called when "Read Later" button has been pressed.
+- (void)addToReadingListPressed:(UIButton*)sender;
+
+// Called when "Add to bookmarks" button has been pressed.
+- (void)addToBookmarksPressed:(UIButton*)sender;
+
+// Called when "Cancel" button has been pressed.
+- (void)cancelPressed:(UIButton*)sender;
+
+// Animates the button |sender| by replaceing its string to "Added", then call
+// completion.
+- (void)animateButtonPressed:(UIButton*)sender
+              withCompletion:(void (^)(void))completion;
+
 @end
 
 @implementation ShareExtensionView
 
 @synthesize titleLabel = _titleLabel;
 @synthesize URLLabel = _URLLabel;
+@synthesize readingListButton = _readingListButton;
 @synthesize screenshotView = _screenshotView;
 @synthesize itemStack = _itemStack;
 
@@ -91,6 +111,7 @@
   if (self) {
     DCHECK(target);
     _target = target;
+    _dismissed = NO;
 
     [self.layer setCornerRadius:kCornerRadius];
     [self setClipsToBounds:YES];
@@ -112,22 +133,21 @@
     NSString* addToReadingListTitle = NSLocalizedString(
         @"IDS_IOS_ADD_READING_LIST_SHARE_EXTENSION",
         @"The add to reading list button text in share extension.");
-    UIButton* readingListButton = [self
-        buttonWithTitle:addToReadingListTitle
-               selector:@selector(
-                            shareExtensionViewDidSelectAddToReadingList:)];
+    self.readingListButton =
+        [self buttonWithTitle:addToReadingListTitle
+                     selector:@selector(addToReadingListPressed:)];
 
     NSString* addToBookmarksTitle = NSLocalizedString(
         @"IDS_IOS_ADD_BOOKMARKS_SHARE_EXTENSION",
         @"The Add to bookmarks button text in share extension.");
-    UIButton* bookmarksButton = [self
-        buttonWithTitle:addToBookmarksTitle
-               selector:@selector(shareExtensionViewDidSelectAddToBookmarks:)];
+    UIButton* bookmarksButton =
+        [self buttonWithTitle:addToBookmarksTitle
+                     selector:@selector(addToBookmarksPressed:)];
 
     UIStackView* contentStack = [[UIStackView alloc] initWithArrangedSubviews:@[
       [self navigationBar], [self dividerViewWithVibrancy:vibrancyEffect],
       [self sharedItemView], [self dividerViewWithVibrancy:vibrancyEffect],
-      readingListButton, [self dividerViewWithVibrancy:vibrancyEffect],
+      self.readingListButton, [self dividerViewWithVibrancy:vibrancyEffect],
       bookmarksButton
     ]];
     [contentStack setAxis:UILayoutConstraintAxisVertical];
@@ -256,7 +276,7 @@
   [button setTitleColor:systemColor forState:UIControlStateNormal];
   [[button titleLabel] setFont:[UIFont systemFontOfSize:kButtonFontSize]];
   [button setTranslatesAutoresizingMaskIntoConstraints:NO];
-  [button addTarget:_target
+  [button addTarget:self
                 action:selector
       forControlEvents:UIControlEventTouchUpInside];
   [button.heightAnchor constraintEqualToConstant:kButtonHeight].active = YES;
@@ -281,9 +301,8 @@
 
   UIBarButtonItem* cancelButton = [[UIBarButtonItem alloc]
       initWithBarButtonSystemItem:UIBarButtonSystemItemCancel
-                           target:_target
-                           action:@selector(
-                                      shareExtensionViewDidSelectCancel:)];
+                           target:self
+                           action:@selector(cancelPressed:)];
 
   NSString* appName =
       [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"];
@@ -295,6 +314,95 @@
   return navigationBar;
 }
 
+- (void)addToReadingListPressed:(UIButton*)sender {
+  if (_dismissed) {
+    return;
+  }
+  _dismissed = YES;
+  [self animateButtonPressed:sender
+              withCompletion:^{
+                [_target shareExtensionViewDidSelectAddToReadingList:sender];
+              }];
+}
+
+- (void)addToBookmarksPressed:(UIButton*)sender {
+  if (_dismissed) {
+    return;
+  }
+  _dismissed = YES;
+  [self animateButtonPressed:sender
+              withCompletion:^{
+                [_target shareExtensionViewDidSelectAddToBookmarks:sender];
+              }];
+}
+
+- (void)animateButtonPressed:(UIButton*)sender
+              withCompletion:(void (^)(void))completion {
+  NSString* addedString =
+      NSLocalizedString(@"IDS_IOS_ADDED_ITEM_SHARE_EXTENSION",
+                        @"Button label after being pressed.");
+  NSString* addedCheckedString =
+      [addedString stringByAppendingString:@" \u2713"];
+  // Create a label with the same style as the split animation between the text
+  // and the checkmark.
+  UILabel* addedLabel = [[UILabel alloc] initWithFrame:CGRectZero];
+  [addedLabel setTranslatesAutoresizingMaskIntoConstraints:NO];
+  [addedLabel setText:addedString];
+  [self addSubview:addedLabel];
+  [addedLabel setFont:[sender titleLabel].font];
+  [addedLabel setTextColor:[sender titleColorForState:UIControlStateNormal]];
+  [addedLabel.leadingAnchor
+      constraintEqualToAnchor:[sender titleLabel].leadingAnchor]
+      .active = YES;
+  [addedLabel.centerYAnchor
+      constraintEqualToAnchor:[sender titleLabel].centerYAnchor]
+      .active = YES;
+  [addedLabel setAlpha:0];
+
+  void (^step3ShowCheck)() = ^{
+    [UIView animateWithDuration:ui_util::kAnimationDuration
+        animations:^{
+          [addedLabel setAlpha:0];
+          [sender setAlpha:1];
+        }
+        completion:^(BOOL finished) {
+          if (completion) {
+            completion();
+          }
+        }];
+  };
+
+  void (^step2ShowTextWithoutCheck)() = ^{
+    [sender setTitle:addedCheckedString forState:UIControlStateNormal];
+    [UIView animateWithDuration:ui_util::kAnimationDuration
+        animations:^{
+          [addedLabel setAlpha:1];
+        }
+        completion:^(BOOL finished) {
+          step3ShowCheck();
+        }];
+  };
+
+  void (^step1HideText)() = ^{
+    [UIView animateWithDuration:ui_util::kAnimationDuration
+        animations:^{
+          [sender setAlpha:0];
+        }
+        completion:^(BOOL finished) {
+          step2ShowTextWithoutCheck();
+        }];
+  };
+  step1HideText();
+}
+
+- (void)cancelPressed:(UIButton*)sender {
+  if (_dismissed) {
+    return;
+  }
+  _dismissed = YES;
+  [_target shareExtensionViewDidSelectCancel:sender];
+}
+
 #pragma mark - Content getters and setters.
 
 - (void)setURL:(NSURL*)URL {
diff --git a/ios/chrome/share_extension/share_view_controller.mm b/ios/chrome/share_extension/share_view_controller.mm
index 9ba8972a..31f0d40 100644
--- a/ios/chrome/share_extension/share_view_controller.mm
+++ b/ios/chrome/share_extension/share_view_controller.mm
@@ -28,7 +28,6 @@
 // Clip the last separator out of the table view.
 const CGFloat kScreenShotWidth = 100;
 const CGFloat kScreenShotHeight = 100;
-const CGFloat kAnimationDuration = 0.3;
 const CGFloat kMediumAlpha = 0.5;
 
 }  // namespace
@@ -130,7 +129,7 @@
         constraintEqualToAnchor:self.view.centerYAnchor];
     [_widgetVerticalPlacementConstraint setActive:YES];
     [self.maskView setAlpha:0];
-    [UIView animateWithDuration:kAnimationDuration
+    [UIView animateWithDuration:ui_util::kAnimationDuration
                      animations:^{
                        [self.maskView setAlpha:1];
                        [self.view layoutIfNeeded];
@@ -254,7 +253,7 @@
         [_shareView.topAnchor constraintEqualToAnchor:self.view.bottomAnchor];
   }
   [_widgetVerticalPlacementConstraint setActive:YES];
-  [UIView animateWithDuration:kAnimationDuration
+  [UIView animateWithDuration:ui_util::kAnimationDuration
       animations:^{
         [self.maskView setAlpha:0];
         [self.view layoutIfNeeded];
diff --git a/ios/chrome/share_extension/strings/ios_share_extension_strings.grd b/ios/chrome/share_extension/strings/ios_share_extension_strings.grd
index fd8dd38..a99a7dd 100644
--- a/ios/chrome/share_extension/strings/ios_share_extension_strings.grd
+++ b/ios/chrome/share_extension/strings/ios_share_extension_strings.grd
@@ -136,6 +136,9 @@
       <message name="IDS_IOS_ADD_BOOKMARKS_SHARE_EXTENSION" desc="Share extension button to add to bookmarks [Length: 30em]" meaning="Button title [Length: 30em]">
         Add to Bookmarks 
       </message>
+      <message name="IDS_IOS_ADDED_ITEM_SHARE_EXTENSION" desc="Label of the button 'add to' after it has been pressed confirming the action to the user.">
+        Added
+      </message>
       <message name="IDS_IOS_ERROR_MESSAGE_SHARE_EXTENSION" desc="Share extension message to tell the user the URL cannot be processed. The name of the application will be put in place of APPLICATION_NAME">
         APPLICATION_NAME cannot handle this link.
       </message>
diff --git a/ios/chrome/share_extension/ui_util.h b/ios/chrome/share_extension/ui_util.h
index 864b776..67ce201 100644
--- a/ios/chrome/share_extension/ui_util.h
+++ b/ios/chrome/share_extension/ui_util.h
@@ -7,6 +7,9 @@
 
 namespace ui_util {
 
+// Standard animation timing for the extension.
+extern const CGFloat kAnimationDuration;
+
 // Returns the closest pixel-aligned value less than |value|, taking the scale
 // factor into account. At a scale of 1, equivalent to floor().
 CGFloat AlignValueToPixel(CGFloat value);
diff --git a/ios/chrome/share_extension/ui_util.mm b/ios/chrome/share_extension/ui_util.mm
index c898d51..d4af8acf 100644
--- a/ios/chrome/share_extension/ui_util.mm
+++ b/ios/chrome/share_extension/ui_util.mm
@@ -12,6 +12,8 @@
 
 namespace ui_util {
 
+const CGFloat kAnimationDuration = 0.3;
+
 CGFloat AlignValueToPixel(CGFloat value) {
   CGFloat scale = [[UIScreen mainScreen] scale];
   return floor(value * scale) / scale;
diff --git a/ios/public/provider/chrome/browser/BUILD.gn b/ios/public/provider/chrome/browser/BUILD.gn
index dd331e63..5004fb1 100644
--- a/ios/public/provider/chrome/browser/BUILD.gn
+++ b/ios/public/provider/chrome/browser/BUILD.gn
@@ -14,9 +14,7 @@
   ]
   deps = [
     "//base",
-    "//components/favicon_base",
     "//components/metrics",
-    "//components/sync_sessions",
   ]
   libs = [ "CoreLocation.framework" ]
 }
@@ -36,7 +34,6 @@
     "//ios/public/provider/chrome/browser/images:test_support",
     "//ios/public/provider/chrome/browser/native_app_launcher:test_support",
     "//ios/public/provider/chrome/browser/omaha:test_support",
-    "//ios/public/provider/chrome/browser/sessions:test_support",
     "//ios/public/provider/chrome/browser/signin:test_support",
     "//ios/public/provider/chrome/browser/spotlight:test_support",
     "//ios/public/provider/chrome/browser/ui",
@@ -54,7 +51,6 @@
     "//ios/public/provider/chrome/browser/images:test_support",
     "//ios/public/provider/chrome/browser/native_app_launcher:test_support",
     "//ios/public/provider/chrome/browser/omaha:test_support",
-    "//ios/public/provider/chrome/browser/sessions:test_support",
     "//ios/public/provider/chrome/browser/signin:test_support",
     "//ios/public/provider/chrome/browser/ui:test_support",
     "//ios/public/provider/chrome/browser/user_feedback:test_support",
diff --git a/ios/public/provider/chrome/browser/chrome_browser_provider.h b/ios/public/provider/chrome/browser/chrome_browser_provider.h
index 73ea0ab7..8f5c7f19 100644
--- a/ios/public/provider/chrome/browser/chrome_browser_provider.h
+++ b/ios/public/provider/chrome/browser/chrome_browser_provider.h
@@ -15,11 +15,9 @@
 
 #include "base/callback_forward.h"
 #include "base/memory/ref_counted.h"
-#include "components/favicon_base/favicon_callback.h"
 
 class AppDistributionProvider;
 class BrandedImageProvider;
-class GURL;
 class OmahaServiceProvider;
 class SpotlightProvider;
 class UserFeedbackProvider;
@@ -29,10 +27,6 @@
 class WebState;
 }
 
-namespace sync_sessions {
-class SyncedWindowDelegatesGetter;
-}
-
 @protocol AppRatingPrompt;
 @protocol LogoVendor;
 @protocol TextFieldStyling;
@@ -91,13 +85,6 @@
   virtual std::string GetDistributionBrandCode();
   // Returns risk data used in Wallet requests.
   virtual std::string GetRiskData();
-  // Get the favicon for |page_url| and run |callback| with result when loaded.
-  // Note. |callback| is always run asynchronously.
-  virtual void GetFaviconForURL(
-      ChromeBrowserState* browser_state,
-      const GURL& page_url,
-      const std::vector<int>& desired_sizes_in_pixel,
-      const favicon_base::FaviconResultsCallback& callback) const;
   // Creates and returns a new styled text field with the given |frame|.
   virtual UITextField<TextFieldStyling>* CreateStyledTextField(
       CGRect frame) const NS_RETURNS_RETAINED;
@@ -140,10 +127,6 @@
   // Returns an instance of the user feedback provider.
   virtual UserFeedbackProvider* GetUserFeedbackProvider() const;
 
-  // Returns the SyncedWindowDelegatesGetter implementation.
-  virtual std::unique_ptr<sync_sessions::SyncedWindowDelegatesGetter>
-  CreateSyncedWindowDelegatesGetter(ios::ChromeBrowserState* browser_state);
-
   // Returns an instance of the branded image provider.
   virtual BrandedImageProvider* GetBrandedImageProvider() const;
 
diff --git a/ios/public/provider/chrome/browser/chrome_browser_provider.mm b/ios/public/provider/chrome/browser/chrome_browser_provider.mm
index dab8adf..d771c77 100644
--- a/ios/public/provider/chrome/browser/chrome_browser_provider.mm
+++ b/ios/public/provider/chrome/browser/chrome_browser_provider.mm
@@ -8,7 +8,6 @@
 
 #include "base/logging.h"
 #include "components/metrics/metrics_provider.h"
-#include "components/sync_sessions/synced_window_delegates_getter.h"
 
 namespace ios {
 
@@ -66,12 +65,6 @@
   return std::string();
 }
 
-void ChromeBrowserProvider::GetFaviconForURL(
-    ios::ChromeBrowserState* browser_state,
-    const GURL& page_url,
-    const std::vector<int>& desired_sizes_in_pixel,
-    const favicon_base::FaviconResultsCallback& callback) const {}
-
 UITextField<TextFieldStyling>* ChromeBrowserProvider::CreateStyledTextField(
     CGRect frame) const {
   return nil;
@@ -91,12 +84,6 @@
   return false;
 }
 
-std::unique_ptr<sync_sessions::SyncedWindowDelegatesGetter>
-ChromeBrowserProvider::CreateSyncedWindowDelegatesGetter(
-    ios::ChromeBrowserState* browser_state) {
-  return nullptr;
-}
-
 VoiceSearchProvider* ChromeBrowserProvider::GetVoiceSearchProvider() const {
   return nullptr;
 }
diff --git a/ios/public/provider/chrome/browser/sessions/BUILD.gn b/ios/public/provider/chrome/browser/sessions/BUILD.gn
deleted file mode 100644
index 6d75d90..0000000
--- a/ios/public/provider/chrome/browser/sessions/BUILD.gn
+++ /dev/null
@@ -1,15 +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.
-
-source_set("test_support") {
-  testonly = true
-  sources = [
-    "test_synced_window_delegates_getter.cc",
-    "test_synced_window_delegates_getter.h",
-  ]
-  deps = [
-    "//base",
-    "//components/sync_sessions",
-  ]
-}
diff --git a/ios/public/provider/chrome/browser/sessions/test_synced_window_delegates_getter.cc b/ios/public/provider/chrome/browser/sessions/test_synced_window_delegates_getter.cc
deleted file mode 100644
index 8375f3b..0000000
--- a/ios/public/provider/chrome/browser/sessions/test_synced_window_delegates_getter.cc
+++ /dev/null
@@ -1,15 +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 "ios/public/provider/chrome/browser/sessions/test_synced_window_delegates_getter.h"
-
-std::set<const sync_sessions::SyncedWindowDelegate*>
-TestSyncedWindowDelegatesGetter::GetSyncedWindowDelegates() {
-  return std::set<const sync_sessions::SyncedWindowDelegate*>();
-}
-
-const sync_sessions::SyncedWindowDelegate*
-TestSyncedWindowDelegatesGetter::FindById(SessionID::id_type id) {
-  return nullptr;
-}
diff --git a/ios/public/provider/chrome/browser/sessions/test_synced_window_delegates_getter.h b/ios/public/provider/chrome/browser/sessions/test_synced_window_delegates_getter.h
deleted file mode 100644
index 79c2676e..0000000
--- a/ios/public/provider/chrome/browser/sessions/test_synced_window_delegates_getter.h
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef IOS_PUBLIC_PROVIDER_CHROME_BROWSER_SESSIONS_TEST_SYNCED_WINDOW_DELEGATES_GETTER_H_
-#define IOS_PUBLIC_PROVIDER_CHROME_BROWSER_SESSIONS_TEST_SYNCED_WINDOW_DELEGATES_GETTER_H_
-
-#include "base/macros.h"
-#include "components/sync_sessions/synced_window_delegates_getter.h"
-
-class TestSyncedWindowDelegatesGetter
-    : public sync_sessions::SyncedWindowDelegatesGetter {
- public:
-  TestSyncedWindowDelegatesGetter() {}
-  ~TestSyncedWindowDelegatesGetter() override {}
-
-  // SyncedWindowDelegatesGetter.
-  std::set<const sync_sessions::SyncedWindowDelegate*>
-  GetSyncedWindowDelegates() override;
-  const sync_sessions::SyncedWindowDelegate* FindById(
-      SessionID::id_type id) override;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(TestSyncedWindowDelegatesGetter);
-};
-
-#endif  // IOS_PUBLIC_PROVIDER_CHROME_BROWSER_SESSIONS_TEST_SYNCED_WINDOW_DELEGATES_GETTER_H_
diff --git a/ios/public/provider/chrome/browser/test_chrome_browser_provider.h b/ios/public/provider/chrome/browser/test_chrome_browser_provider.h
index 48e8e78f..7fdc76b 100644
--- a/ios/public/provider/chrome/browser/test_chrome_browser_provider.h
+++ b/ios/public/provider/chrome/browser/test_chrome_browser_provider.h
@@ -33,9 +33,6 @@
   OmahaServiceProvider* GetOmahaServiceProvider() const override;
   UserFeedbackProvider* GetUserFeedbackProvider() const override;
   SpotlightProvider* GetSpotlightProvider() const override;
-  std::unique_ptr<sync_sessions::SyncedWindowDelegatesGetter>
-  CreateSyncedWindowDelegatesGetter(
-      ios::ChromeBrowserState* browser_state) override;
   BrandedImageProvider* GetBrandedImageProvider() const override;
   id<NativeAppWhitelistManager> GetNativeAppWhitelistManager() const override;
 
diff --git a/ios/public/provider/chrome/browser/test_chrome_browser_provider.mm b/ios/public/provider/chrome/browser/test_chrome_browser_provider.mm
index dabe0ce..a4cebae 100644
--- a/ios/public/provider/chrome/browser/test_chrome_browser_provider.mm
+++ b/ios/public/provider/chrome/browser/test_chrome_browser_provider.mm
@@ -12,7 +12,6 @@
 #include "ios/public/provider/chrome/browser/distribution/test_app_distribution_provider.h"
 #include "ios/public/provider/chrome/browser/images/test_branded_image_provider.h"
 #include "ios/public/provider/chrome/browser/omaha/test_omaha_service_provider.h"
-#include "ios/public/provider/chrome/browser/sessions/test_synced_window_delegates_getter.h"
 #include "ios/public/provider/chrome/browser/signin/fake_chrome_identity_service.h"
 #include "ios/public/provider/chrome/browser/signin/test_signin_resources_provider.h"
 #import "ios/public/provider/chrome/browser/spotlight/test_spotlight_provider.h"
@@ -88,12 +87,6 @@
   return spotlight_provider_.get();
 }
 
-std::unique_ptr<sync_sessions::SyncedWindowDelegatesGetter>
-TestChromeBrowserProvider::CreateSyncedWindowDelegatesGetter(
-    ios::ChromeBrowserState* browser_state) {
-  return base::MakeUnique<TestSyncedWindowDelegatesGetter>();
-}
-
 BrandedImageProvider* TestChromeBrowserProvider::GetBrandedImageProvider()
     const {
   return branded_image_provider_.get();
diff --git a/media/capture/video/android/java/src/org/chromium/media/VideoCaptureCamera2.java b/media/capture/video/android/java/src/org/chromium/media/VideoCaptureCamera2.java
index a519abf..51bd984 100644
--- a/media/capture/video/android/java/src/org/chromium/media/VideoCaptureCamera2.java
+++ b/media/capture/video/android/java/src/org/chromium/media/VideoCaptureCamera2.java
@@ -32,6 +32,7 @@
 
 import java.nio.ByteBuffer;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 /**
@@ -260,6 +261,7 @@
     private CaptureRequest mPreviewRequest;
     private Handler mMainHandler;
 
+    private Range<Integer> mAeFpsRange;
     private CameraState mCameraState = CameraState.STOPPED;
     private final float mMaxZoom;
     private Rect mCropRect = new Rect();
@@ -375,6 +377,7 @@
             requestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_OFF);
         } else {
             requestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_ON);
+            requestBuilder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, mAeFpsRange);
         }
         switch (mFillLightMode) {
             case AndroidFillLightMode.OFF:
@@ -598,8 +601,28 @@
             Log.e(TAG, "No supported resolutions.");
             return false;
         }
-        Log.d(TAG, "allocate: matched (%d x %d)", closestSupportedSize.getWidth(),
-                closestSupportedSize.getHeight());
+        final List<Range<Integer>> fpsRanges = Arrays.asList(cameraCharacteristics.get(
+                CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES));
+        if (fpsRanges.isEmpty()) {
+            Log.e(TAG, "No supported framerate ranges.");
+            return false;
+        }
+        final List<FramerateRange> framerateRanges =
+                new ArrayList<FramerateRange>(fpsRanges.size());
+        // On some legacy implementations FPS values are multiplied by 1000. Multiply by 1000
+        // everywhere for consistency. Set fpsUnitFactor to 1 if fps ranges are already multiplied
+        // by 1000.
+        final int fpsUnitFactor = fpsRanges.get(0).getUpper() > 1000 ? 1 : 1000;
+        for (Range<Integer> range : fpsRanges) {
+            framerateRanges.add(new FramerateRange(
+                    range.getLower() * fpsUnitFactor, range.getUpper() * fpsUnitFactor));
+        }
+        final FramerateRange aeFramerateRange =
+                getClosestFramerateRange(framerateRanges, frameRate * 1000);
+        mAeFpsRange = new Range<Integer>(
+                aeFramerateRange.min / fpsUnitFactor, aeFramerateRange.max / fpsUnitFactor);
+        Log.d(TAG, "allocate: matched (%d x %d) @[%d - %d]", closestSupportedSize.getWidth(),
+                closestSupportedSize.getHeight(), mAeFpsRange.getLower(), mAeFpsRange.getUpper());
 
         // |mCaptureFormat| is also used to configure the ImageReader.
         mCaptureFormat = new VideoCaptureFormat(closestSupportedSize.getWidth(),
diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations
index e5d7265..d2d5d23 100644
--- a/third_party/WebKit/LayoutTests/TestExpectations
+++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -737,15 +737,12 @@
 
 crbug.com/432129 fast/html/marquee-scroll.html [ Failure Pass ]
 crbug.com/248938 [ Win Debug ] virtual/threaded/animations/transition-and-animation-2.html [ Timeout ]
-crbug.com/248938 virtual/threaded/animations/change-one-anim.html [ Failure Pass ]
 crbug.com/326139 crbug.com/390125 media/video-frame-accurate-seek.html [ Failure Pass ]
 crbug.com/248938 virtual/threaded/animations/animation-iteration-event-destroy-renderer.html [ Pass Timeout ]
-crbug.com/248938 virtual/threaded/animations/transition-and-animation-3.html [ Pass Timeout ]
 crbug.com/446385 [ Win7 Debug ] http/tests/xmlhttprequest/xmlhttprequest-json-response-overflow.html [ Crash Pass Timeout ]
 crbug.com/446385 [ Win7 Debug ] virtual/mojo-loading/http/tests/xmlhttprequest/xmlhttprequest-json-response-overflow.html [ Crash Pass Timeout ]
 crbug.com/248938 virtual/threaded/animations/dynamic-stylesheet-loading.html [ Pass Failure Timeout ]
 crbug.com/248938 virtual/threaded/transitions/change-duration-during-transition.html [ Pass Failure ]
-crbug.com/248938 virtual/threaded/transitions/transition-end-event-nested.html [ Pass Failure ]
 crbug.com/638693 virtual/threaded/animations/display-inline-style-adjust.html [ Pass Crash Failure ]
 crbug.com/421283 fast/html/marquee-scrollamount.html [ Pass Failure ]
 crbug.com/248938 virtual/threaded/transitions/transition-end-event-rendering.html [ Pass Timeout ]
@@ -2001,8 +1998,6 @@
 crbug.com/669473 imported/csswg-test/css-ui-3/box-sizing-019.html [ Failure ]
 crbug.com/669473 imported/csswg-test/css-ui-3/box-sizing-024.html [ Failure ]
 crbug.com/669473 imported/csswg-test/css-ui-3/box-sizing-025.html [ Failure ]
-crbug.com/676295 imported/csswg-test/css-ui-3/caret-color-009.html [ Failure ]
-crbug.com/676295 imported/csswg-test/css-ui-3/caret-color-013.html [ Failure ]
 crbug.com/676295 imported/csswg-test/css-ui-3/caret-color-021.html [ Failure ]
 crbug.com/669473 imported/csswg-test/css-ui-3/text-overflow-002.html [ Failure ]
 crbug.com/669473 imported/csswg-test/css-ui-3/text-overflow-004.html [ Failure ]
diff --git a/third_party/WebKit/LayoutTests/animations/change-one-anim-expected.txt b/third_party/WebKit/LayoutTests/animations/change-one-anim-expected.txt
deleted file mode 100644
index 475c237..0000000
--- a/third_party/WebKit/LayoutTests/animations/change-one-anim-expected.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-Warning this test is running in real-time and may be flaky.
-PASS - "left" property for "box" element at 0.75s saw something close to: 150
-PASS - "top" property for "box" element at 0.75s saw something close to: 225
-
diff --git a/third_party/WebKit/LayoutTests/animations/change-one-anim.html b/third_party/WebKit/LayoutTests/animations/change-one-anim.html
index 8f8880ce..9bb42b9a9 100644
--- a/third_party/WebKit/LayoutTests/animations/change-one-anim.html
+++ b/third_party/WebKit/LayoutTests/animations/change-one-anim.html
@@ -1,64 +1,72 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-   "http://www.w3.org/TR/html4/loose.dtd">
-
-<html lang="en">
+<!DOCTYPE html>
+<html>
 <head>
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-    <title>Animation using matrix()</title>
-    <style type="text/css" media="screen">
-        #box {
-            position: relative;
-            height: 20px;
-            width: 20px;
-            background-color: #9bb;
-            animation-name: horiz, vert;
-            animation-duration: 1s;
-            animation-iteration-count: infinite;
-            animation-direction: alternate;
-            animation-timing-function: linear;
-         }
-         
-         @keyframes horiz {
-            from { left: 0px; }
-            to { left:300px; }
-         }
-         @keyframes vert {
-            from { top: 0px; }
-            to { top: 300px; }
-         }
-    </style>
-    <script src="resources/animation-test-helpers.js" type="text/javascript" charset="utf-8"></script>
-    <script type="text/javascript" charset="utf-8">
-        
-        const expectedValues = [
-          // [time, element-id, property, expected-value, tolerance]
-          [0.75, "box", "left", 150, 40],
-          [0.75, "box", "top", 225, 40],
-        ];
-
-        function removeAnim()
-        {
-            var target = document.getElementById("box");
-            var left = window.getComputedStyle(target).left;
-            target.style.animationName = "vert";
-            target.style.left = left;
-        }
-        
-        function setup()
-        {
-            setTimeout("removeAnim()", 500);
-        }
-
-        runAnimationTest(expectedValues, setup, undefined, 'do-not-use-pause-api');
-    </script>
+  <meta charset="utf-8">
+  <script src="../resources/testharness.js"></script>
+  <script src="../resources/testharnessreport.js"></script>
+  <style>
+    #box {
+      position: relative;
+      height: 20px;
+      width: 20px;
+      background-color: #9bb;
+      left: 0px;
+      top: 0px;
+      animation-name: horiz, vert;
+      animation-duration: 4s;
+      animation-iteration-count: infinite;
+      animation-direction: alternate;
+      animation-timing-function: linear;
+    }
+    @keyframes horiz {
+      from { left: 100px; }
+      to { left: 500px; }
+    }
+    @keyframes vert {
+      from { top: 100px; }
+      to { top: 500px; }
+    }
+  </style>
 </head>
 <body>
-This test performs two animations, left and top. It animates over 1 second.
-At 0.5 second it removes the left animation and the top animation should continue
-from where it left off.
-<div id="box">
-</div>
-<div id="result">
-</div>
+  <!--
+    This test performs two animations, left and top.
+    When it removes the left animation, the top animation
+    should continue from where it left off.
+  -->
+  <div id="box"></div>
+  <script>
+    'use strict';
+    function waitForProgress() {
+      var initialTop = getComputedStyle(box).top;
+      return new Promise(resolve => {
+        function poll() {
+          var top = getComputedStyle(box).top;
+          if (top === initialTop) {
+            requestAnimationFrame(poll);
+          } else {
+            resolve();
+          }
+        }
+        requestAnimationFrame(poll);
+      });
+    }
+
+    async_test(t => {
+      var previousTop = getComputedStyle(box).top;
+      waitForProgress().then(t.step_func(() => {
+        assert_greater_than(parseFloat(getComputedStyle(box).left), 100);
+        var currentTop = getComputedStyle(box).top;
+        assert_greater_than(parseFloat(currentTop), parseFloat(previousTop));
+        box.style.animationName = 'vert';
+        assert_equals(getComputedStyle(box).left, '0px');
+        assert_equals(getComputedStyle(box).top, currentTop);
+        previousTop = currentTop;
+      })).then(waitForProgress).then(t.step_func_done(() => {
+        assert_equals(getComputedStyle(box).left, '0px');
+        assert_greater_than(parseFloat(getComputedStyle(box).top), parseFloat(previousTop));
+      }));
+    }, 'top animation continues when left animation stops');
+  </script>
 </body>
 </html>
diff --git a/third_party/WebKit/LayoutTests/animations/transition-and-animation-3.html b/third_party/WebKit/LayoutTests/animations/transition-and-animation-3.html
index 17cf026..30f91ac 100644
--- a/third_party/WebKit/LayoutTests/animations/transition-and-animation-3.html
+++ b/third_party/WebKit/LayoutTests/animations/transition-and-animation-3.html
@@ -52,13 +52,12 @@
 
       function setupTest()
       {
+        document.body.offsetHeight; // Force style recalc
         document.getElementById('test').className = 'animating box';
         runAnimationTest(expectedValues, animationStarted, undefined, 'do-not-use-pause-api');
       }
       
-      window.addEventListener('load', function() {
-          window.setTimeout(setupTest, 0);
-      }, false);
+      window.addEventListener('load', setupTest, false);
 
     </script>
 </head>
diff --git a/third_party/WebKit/LayoutTests/editing/pasteboard/dragstart-contains-default-content-expected.txt b/third_party/WebKit/LayoutTests/editing/pasteboard/dragstart-contains-default-content-expected.txt
index 2d5d8827..d7f3e48 100644
--- a/third_party/WebKit/LayoutTests/editing/pasteboard/dragstart-contains-default-content-expected.txt
+++ b/third_party/WebKit/LayoutTests/editing/pasteboard/dragstart-contains-default-content-expected.txt
@@ -9,7 +9,7 @@
 Test ID: selectionTest
 text/plain: Select some text in this box and drag it.
 text/url: 
-text/html: <span style="color: rgb(0, 0, 0); font-family: serif; font-size: medium; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; caret-color: auto; text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;">Select some text in this box and drag it.</span>
+text/html: <span style="color: rgb(0, 0, 0); font-family: serif; font-size: medium; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;">Select some text in this box and drag it.</span>
 Test ID: imageTest
 text/plain: 
 text/url: 
diff --git a/third_party/WebKit/LayoutTests/editing/pasteboard/onpaste-text-html-expected.txt b/third_party/WebKit/LayoutTests/editing/pasteboard/onpaste-text-html-expected.txt
index 7f0e5d1..1b654e10 100644
--- a/third_party/WebKit/LayoutTests/editing/pasteboard/onpaste-text-html-expected.txt
+++ b/third_party/WebKit/LayoutTests/editing/pasteboard/onpaste-text-html-expected.txt
@@ -1,5 +1,5 @@
 CONSOLE MESSAGE: line 21: text/plain: This test verifies that we can get text/html from the clipboard during an onpaste event. 
-CONSOLE MESSAGE: line 23: text/html: <span style="color: rgb(0, 0, 0); font-size: medium; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; caret-color: auto; text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;">This test verifies that we can get text/html from the clipboard during an onpaste event.<span class="Apple-converted-space"> </span></span>
+CONSOLE MESSAGE: line 23: text/html: <span style="color: rgb(0, 0, 0); font-size: medium; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;">This test verifies that we can get text/html from the clipboard during an onpaste event.<span class="Apple-converted-space"> </span></span>
 This test verifies that we can get text/html from the clipboard during an onpaste event. This test requires DRT.
 Paste content in this div.This test verifies that we can get text/html from the clipboard during an onpaste event. 
 PASS
diff --git a/third_party/WebKit/LayoutTests/fast/css/getComputedStyle/computed-style-listing-expected.txt b/third_party/WebKit/LayoutTests/fast/css/getComputedStyle/computed-style-listing-expected.txt
index daca47b..cd11d41f 100644
--- a/third_party/WebKit/LayoutTests/fast/css/getComputedStyle/computed-style-listing-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/css/getComputedStyle/computed-style-listing-expected.txt
@@ -115,7 +115,7 @@
 break-inside: auto
 buffered-rendering: auto
 caption-side: top
-caret-color: auto
+caret-color: rgb(0, 0, 0)
 clear: none
 clip: auto
 clip-path: none
diff --git a/third_party/WebKit/LayoutTests/fast/css/getComputedStyle/computed-style-without-renderer-listing-expected.txt b/third_party/WebKit/LayoutTests/fast/css/getComputedStyle/computed-style-without-renderer-listing-expected.txt
index 0e0601b..ff4e627 100644
--- a/third_party/WebKit/LayoutTests/fast/css/getComputedStyle/computed-style-without-renderer-listing-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/css/getComputedStyle/computed-style-without-renderer-listing-expected.txt
@@ -115,7 +115,7 @@
 break-inside: auto
 buffered-rendering: auto
 caption-side: top
-caret-color: auto
+caret-color: rgb(0, 0, 0)
 clear: none
 clip: auto
 clip-path: none
diff --git a/third_party/WebKit/LayoutTests/fast/events/ondrop-text-html-expected.txt b/third_party/WebKit/LayoutTests/fast/events/ondrop-text-html-expected.txt
index 6cc258b..0ca4aebd 100644
--- a/third_party/WebKit/LayoutTests/fast/events/ondrop-text-html-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/events/ondrop-text-html-expected.txt
@@ -1,4 +1,4 @@
 CONSOLE MESSAGE: line 21: text/plain: This test verifies that we can get text/html from the drag object during an ondrop event. 
-CONSOLE MESSAGE: line 23: text/html: <span style="color: rgb(0, 0, 0); font-size: medium; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; caret-color: auto; text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;">This test verifies that we can get text/html from the drag object during an ondrop event.<span class="Apple-converted-space"> </span></span>
+CONSOLE MESSAGE: line 23: text/html: <span style="color: rgb(0, 0, 0); font-size: medium; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;">This test verifies that we can get text/html from the drag object during an ondrop event.<span class="Apple-converted-space"> </span></span>
 This test verifies that we can get text/html from the drag object during an ondrop event. This test requires DRT.
 PASS
diff --git a/third_party/WebKit/LayoutTests/fast/forms/password-placeholder-text-security-expected.html b/third_party/WebKit/LayoutTests/fast/forms/password-placeholder-text-security-expected.html
index f380b11..0d6d0797 100644
--- a/third_party/WebKit/LayoutTests/fast/forms/password-placeholder-text-security-expected.html
+++ b/third_party/WebKit/LayoutTests/fast/forms/password-placeholder-text-security-expected.html
@@ -2,7 +2,7 @@
 <head>
 <style>
 #pass1, #pass3 {
-    color: darkGray;
+    color: #757575;
 }
 </style>
 </head>
diff --git a/third_party/WebKit/LayoutTests/fast/forms/text/input-placeholder-text-indent-expected.html b/third_party/WebKit/LayoutTests/fast/forms/text/input-placeholder-text-indent-expected.html
index b646b8157..edba082 100644
--- a/third_party/WebKit/LayoutTests/fast/forms/text/input-placeholder-text-indent-expected.html
+++ b/third_party/WebKit/LayoutTests/fast/forms/text/input-placeholder-text-indent-expected.html
@@ -1,5 +1,5 @@
 <style>
-input { color: darkGray; font-size: 30px; width: 500px; }
+input { color: #757575; font-size: 30px; width: 500px; }
 input.a { text-indent: 0px; }
 input.b { text-indent: 10px; }
 input.c { text-indent: 200px; }
diff --git a/third_party/WebKit/LayoutTests/fast/forms/text/placeholder-pseudo-style-expected.html b/third_party/WebKit/LayoutTests/fast/forms/text/placeholder-pseudo-style-expected.html
index 147639a..8050d24 100644
--- a/third_party/WebKit/LayoutTests/fast/forms/text/placeholder-pseudo-style-expected.html
+++ b/third_party/WebKit/LayoutTests/fast/forms/text/placeholder-pseudo-style-expected.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <style>
 input {
-    color: darkGray;
+    color: #757575;
 }
 
 input.red {
diff --git a/third_party/WebKit/LayoutTests/fast/forms/text/placeholder-with-positioned-element-expected.html b/third_party/WebKit/LayoutTests/fast/forms/text/placeholder-with-positioned-element-expected.html
index 096d0919..7466eaac 100644
--- a/third_party/WebKit/LayoutTests/fast/forms/text/placeholder-with-positioned-element-expected.html
+++ b/third_party/WebKit/LayoutTests/fast/forms/text/placeholder-with-positioned-element-expected.html
@@ -2,4 +2,4 @@
 <div>aaa</div>
 <div>bbb</div>
 </div>
-<input style="color: darkGray" value="placeholder">
+<input style="color: #757575;" value="placeholder">
diff --git a/third_party/WebKit/LayoutTests/fast/forms/textarea/textarea-placeholder-pseudo-style-expected.html b/third_party/WebKit/LayoutTests/fast/forms/textarea/textarea-placeholder-pseudo-style-expected.html
index 8b6b049..324d9f1 100644
--- a/third_party/WebKit/LayoutTests/fast/forms/textarea/textarea-placeholder-pseudo-style-expected.html
+++ b/third_party/WebKit/LayoutTests/fast/forms/textarea/textarea-placeholder-pseudo-style-expected.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <style>
 textarea {
-    color: darkGray;
+    color: #757575;
 }
 
 .red {
diff --git a/third_party/WebKit/LayoutTests/fast/forms/textarea/textarea-placeholder-wrapping-expected.html b/third_party/WebKit/LayoutTests/fast/forms/textarea/textarea-placeholder-wrapping-expected.html
index 2913acf..cf7cb62 100644
--- a/third_party/WebKit/LayoutTests/fast/forms/textarea/textarea-placeholder-wrapping-expected.html
+++ b/third_party/WebKit/LayoutTests/fast/forms/textarea/textarea-placeholder-wrapping-expected.html
@@ -1,6 +1,6 @@
 <textarea rows=8>
 A quick brown fox jumps over the lazy dog. A quick brown fox jumps over the lazy dog.
 </textarea>
-<textarea rows=8 style="color: darkGray;">
+<textarea rows=8 style="color: #757575;">
 A quick brown fox jumps over the lazy dog. A quick brown fox jumps over the lazy dog.
 </textarea>
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/css/text-overflow-input-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/css/text-overflow-input-expected.png
index 65094bc..b758cf8 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/css/text-overflow-input-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/css/text-overflow-input-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/css/text-overflow-input-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/css/text-overflow-input-expected.txt
index 654a9bd..002e5aa 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/css/text-overflow-input-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/css/text-overflow-input-expected.txt
@@ -105,13 +105,13 @@
           text run at (556,43) width 4: " "
         LayoutBR {BR} at (0,0) size 0x0
 layer at (10,75) size 150x16 scrollWidth 317
-  LayoutBlockFlow {DIV} at (2,3) size 150x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (2,3) size 150x16 [color=#757575]
     LayoutText {#text} at (0,0) size 317x16
       text run at (0,0) width 317: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (10,75) size 150x16
   LayoutBlockFlow {DIV} at (2,3) size 150x16
 layer at (169,75) size 137x16 scrollWidth 317
-  LayoutBlockFlow {DIV} at (3,3) size 137x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 137x16 [color=#757575]
     LayoutText {#text} at (0,0) size 317x16
       text run at (0,0) width 317: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (169,75) size 137x16
@@ -129,13 +129,13 @@
     LayoutText {#text} at (0,0) size 275x16
       text run at (0,0) width 275: "\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}"
 layer at (10,119) size 150x16 scrollX 167.00 scrollWidth 317
-  LayoutBlockFlow {DIV} at (2,3) size 150x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (2,3) size 150x16 [color=#757575]
     LayoutText {#text} at (-167,0) size 317x16
       text run at (-167,0) width 317: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (10,119) size 150x16
   LayoutBlockFlow {DIV} at (2,3) size 150x16
 layer at (181,119) size 138x16 scrollX 179.00 scrollWidth 317
-  LayoutBlockFlow {DIV} at (15,3) size 138x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (15,3) size 138x16 [color=#757575]
     LayoutText {#text} at (-179,0) size 317x16
       text run at (-179,0) width 317: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (181,119) size 138x16
@@ -153,13 +153,13 @@
     LayoutText {#text} at (-125,0) size 275x16
       text run at (-125,0) width 275 RTL: "\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}"
 layer at (10,199) size 150x16 scrollWidth 317
-  LayoutBlockFlow {DIV} at (2,3) size 150x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (2,3) size 150x16 [color=#757575]
     LayoutText {#text} at (0,0) size 317x16
       text run at (0,0) width 317: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (10,199) size 150x16
   LayoutBlockFlow {DIV} at (2,3) size 150x16
 layer at (169,199) size 137x16 scrollWidth 317
-  LayoutBlockFlow {DIV} at (3,3) size 137x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 137x16 [color=#757575]
     LayoutText {#text} at (0,0) size 317x16
       text run at (0,0) width 317: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (169,199) size 137x16
@@ -177,13 +177,13 @@
     LayoutText {#text} at (0,0) size 275x16
       text run at (0,0) width 275: "\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}"
 layer at (10,243) size 150x16 scrollX 167.00 scrollWidth 317
-  LayoutBlockFlow {DIV} at (2,3) size 150x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (2,3) size 150x16 [color=#757575]
     LayoutText {#text} at (-167,0) size 317x16
       text run at (-167,0) width 317: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (10,243) size 150x16
   LayoutBlockFlow {DIV} at (2,3) size 150x16
 layer at (181,243) size 138x16 scrollX 179.00 scrollWidth 317
-  LayoutBlockFlow {DIV} at (15,3) size 138x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (15,3) size 138x16 [color=#757575]
     LayoutText {#text} at (-179,0) size 317x16
       text run at (-179,0) width 317: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (181,243) size 138x16
@@ -201,7 +201,7 @@
     LayoutText {#text} at (-125,0) size 275x16
       text run at (-125,0) width 275 RTL: "\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}"
 layer at (233,323) size 150x16 scrollWidth 317
-  LayoutBlockFlow {DIV} at (2,3) size 150x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (2,3) size 150x16 [color=#757575]
     LayoutText {#text} at (0,0) size 317x16
       text run at (0,0) width 317: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (233,323) size 150x16
@@ -211,7 +211,7 @@
     LayoutText {#text} at (0,0) size 317x16
       text run at (0,0) width 317: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (254,345) size 150x16 scrollWidth 317
-  LayoutBlockFlow {DIV} at (2,3) size 150x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (2,3) size 150x16 [color=#757575]
     LayoutText {#text} at (0,0) size 317x16
       text run at (0,0) width 317: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (254,345) size 150x16
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/placeholder-position-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/placeholder-position-expected.png
index b5366035..7ff8ac7 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/placeholder-position-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/placeholder-position-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/placeholder-position-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/placeholder-position-expected.txt
index 8bdc0c2..fcf3e37 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/placeholder-position-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/placeholder-position-expected.txt
@@ -60,61 +60,61 @@
       LayoutBR {BR} at (474,320) size 0x0
       LayoutBR {BR} at (154,356) size 0x0
 layer at (11,11) size 137x16
-  LayoutBlockFlow {DIV} at (3,3) size 137x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 137x16 [color=#757575]
     LayoutText {#text} at (0,0) size 66x16
       text run at (0,0) width 66: "placeholder"
 layer at (11,11) size 137x16
   LayoutBlockFlow {DIV} at (0,0) size 137x16
 layer at (10,33) size 90x16
-  LayoutBlockFlow {DIV} at (2,3) size 90x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (2,3) size 90x16 [color=#757575]
     LayoutText {#text} at (0,0) size 66x16
       text run at (0,0) width 66: "placeholder"
 layer at (10,33) size 90x16
   LayoutBlockFlow {DIV} at (2,3) size 90x16
 layer at (108,33) size 90x16
-  LayoutBlockFlow {DIV} at (2,3) size 90x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (2,3) size 90x16 [color=#757575]
     LayoutText {#text} at (0,0) size 66x16
       text run at (0,0) width 66: "placeholder"
 layer at (108,33) size 90x16
   LayoutBlockFlow {DIV} at (2,3) size 90x16
 layer at (206,33) size 150x16
-  LayoutBlockFlow {DIV} at (2,3) size 150x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (2,3) size 150x16 [color=#757575]
     LayoutText {#text} at (0,0) size 105x16
       text run at (0,0) width 105: "\x{65E5}\x{672C}\x{8A9E}placeholder"
 layer at (206,33) size 150x16
   LayoutBlockFlow {DIV} at (2,3) size 150x16
 layer at (23,55) size 138x16
-  LayoutBlockFlow {DIV} at (15,3) size 138x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (15,3) size 138x16 [color=#757575]
     LayoutText {#text} at (72,0) size 66x16
       text run at (72,0) width 66: "placeholder"
 layer at (23,55) size 138x16
   LayoutBlockFlow {DIV} at (0,0) size 138x16
 layer at (11,77) size 137x16
-  LayoutBlockFlow {DIV} at (3,3) size 137x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 137x16 [color=#757575]
     LayoutText {#text} at (0,0) size 66x16
       text run at (0,0) width 66: "placeholder"
 layer at (11,77) size 137x16
   LayoutBlockFlow {DIV} at (0,0) size 137x16
 layer at (8,96) size 179x36 clip at (9,97) size 177x34
   LayoutTextControl {TEXTAREA} at (0,88) size 179x36 [bgcolor=#FFFFFF] [border: (1px solid #A9A9A9)]
-    LayoutBlockFlow {DIV} at (3,3) size 175x16 [color=#A9A9A9]
+    LayoutBlockFlow {DIV} at (3,3) size 175x16 [color=#757575]
       LayoutText {#text} at (0,0) size 88x16
         text run at (0,0) width 88: "placeholder"
     LayoutBlockFlow {DIV} at (3,3) size 175x16
 layer at (10,135) size 150x16
-  LayoutBlockFlow {DIV} at (2,3) size 150x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (2,3) size 150x16 [color=#757575]
     LayoutText {#text} at (0,0) size 66x16
       text run at (0,0) width 66: "placeholder"
 layer at (10,135) size 150x16
   LayoutBlockFlow {DIV} at (2,3) size 150x16
 layer at (8,168) size 179x49 clip at (9,169) size 177x47
   LayoutTextControl {TEXTAREA} at (0,160) size 179x49 [bgcolor=#FFFFFF] [border: (1px solid #A9A9A9)]
-    LayoutBlockFlow {DIV} at (3,16) size 175x16 [color=#A9A9A9]
+    LayoutBlockFlow {DIV} at (3,16) size 175x16 [color=#757575]
       LayoutText {#text} at (0,0) size 88x16
         text run at (0,0) width 88: "placeholder"
     LayoutBlockFlow {DIV} at (3,16) size 175x16
 layer at (18,228) size 173x17
-  LayoutBlockFlow {DIV} at (5,6) size 173x17 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (5,6) size 173x17 [color=#757575]
     LayoutText {#text} at (0,0) size 75x17
       text run at (0,0) width 75: "placeholder"
 layer at (18,228) size 173x17
@@ -124,25 +124,25 @@
     LayoutText {#text} at (0,4) size 32x16
       text run at (0,4) width 32: "Value"
 layer at (168,263) size 150x16
-  LayoutBlockFlow {DIV} at (2,7) size 150x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (2,7) size 150x16 [color=#757575]
     LayoutText {#text} at (0,0) size 66x16
       text run at (0,0) width 66: "placeholder"
 layer at (168,259) size 150x25
   LayoutBlockFlow {DIV} at (2,3) size 150x25
 layer at (326,264) size 150x16
-  LayoutBlockFlow {DIV} at (2,4.50) size 150x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (2,4.50) size 150x16 [color=#757575]
     LayoutText {#text} at (0,0) size 66x16
       text run at (0,0) width 66: "placeholder"
 layer at (326,264) size 150x16
   LayoutBlockFlow {DIV} at (2,4.50) size 150x16
 layer at (484,263) size 150x16
-  LayoutBlockFlow {DIV} at (2,4) size 150x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (2,4) size 150x16 [color=#757575]
     LayoutText {#text} at (0,0) size 66x16
       text run at (0,0) width 66: "placeholder"
 layer at (484,259) size 150x25
   LayoutBlockFlow {DIV} at (2,0) size 150x25
 layer at (10,292) size 150x16
-  LayoutBlockFlow {DIV} at (2,4.50) size 150x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (2,4.50) size 150x16 [color=#757575]
     LayoutText {#text} at (0,0) size 66x16
       text run at (0,0) width 66: "placeholder"
 layer at (10,292) size 150x16
@@ -152,13 +152,13 @@
     LayoutText {#text} at (59,0) size 32x16
       text run at (59,0) width 32: "Value"
 layer at (168,315) size 150x16
-  LayoutBlockFlow {DIV} at (2,3) size 150x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (2,3) size 150x16 [color=#757575]
     LayoutText {#text} at (42,0) size 66x16
       text run at (42,0) width 66: "placeholder"
 layer at (168,315) size 150x16
   LayoutBlockFlow {DIV} at (2,3) size 150x16
 layer at (326,315) size 150x16
-  LayoutBlockFlow {DIV} at (2,3) size 150x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (2,3) size 150x16 [color=#757575]
     LayoutText {#text} at (42,0) size 66x16
       text run at (42,0) width 66: "placeholder"
 layer at (326,315) size 150x16
@@ -172,7 +172,7 @@
 layer at (8,334) size 154x36
   LayoutTextControl {INPUT} at (0,326) size 154x36 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)]
 layer at (10,351) size 150x16
-  LayoutBlockFlow {DIV} at (2,17) size 150x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (2,17) size 150x16 [color=#757575]
     LayoutText {#text} at (0,0) size 66x16
       text run at (0,0) width 66: "placeholder"
 layer at (10,351) size 150x16
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/search/search-appearance-basic-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/search/search-appearance-basic-expected.png
index 0466a19..8b1ec67 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/search/search-appearance-basic-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/search/search-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/search/search-appearance-basic-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/search/search-appearance-basic-expected.txt
index d127f36..db674a2 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/search/search-appearance-basic-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/search/search-appearance-basic-expected.txt
@@ -162,7 +162,7 @@
     LayoutText {#text} at (0,0) size 37x32
       text run at (0,0) width 37: "foo"
 layer at (30,377) size 118x13
-  LayoutBlockFlow {DIV} at (18,4) size 118x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (18,4) size 118x13 [color=#757575]
     LayoutText {#text} at (0,0) size 102x13
       text run at (0,0) width 102: "Search for Events"
 layer at (30,377) size 118x13
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/text/input-placeholder-visibility-1-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/text/input-placeholder-visibility-1-expected.png
index 3dc1cca..012aaaf 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/text/input-placeholder-visibility-1-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/text/input-placeholder-visibility-1-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/text/input-placeholder-visibility-1-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/text/input-placeholder-visibility-1-expected.txt
index 2ff8e18..5aa00b3 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/text/input-placeholder-visibility-1-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/text/input-placeholder-visibility-1-expected.txt
@@ -11,7 +11,7 @@
         LayoutText {#text} at (0,0) size 0x0
         LayoutText {#text} at (0,0) size 0x0
 layer at (10,47) size 150x16
-  LayoutBlockFlow {DIV} at (2,3) size 150x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (2,3) size 150x16 [color=#757575]
     LayoutText {#text} at (0,0) size 68x16
       text run at (0,0) width 68: "Placeholder"
 layer at (10,47) size 150x16
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/text/input-placeholder-visibility-3-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/text/input-placeholder-visibility-3-expected.png
index c8698774..4511ef7 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/text/input-placeholder-visibility-3-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/text/input-placeholder-visibility-3-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/text/input-placeholder-visibility-3-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/text/input-placeholder-visibility-3-expected.txt
index 6b833f5..37c674e78 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/text/input-placeholder-visibility-3-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/text/input-placeholder-visibility-3-expected.txt
@@ -11,7 +11,7 @@
         LayoutText {#text} at (0,0) size 0x0
         LayoutText {#text} at (0,0) size 0x0
 layer at (10,47) size 150x16
-  LayoutBlockFlow {DIV} at (2,3) size 150x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (2,3) size 150x16 [color=#757575]
     LayoutText {#text} at (0,0) size 68x16
       text run at (0,0) width 68: "Placeholder"
 layer at (10,47) size 150x16
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/textarea/placeholder-appearance-textarea-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/textarea/placeholder-appearance-textarea-expected.png
index 9d3a91c..233831ef 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/textarea/placeholder-appearance-textarea-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/textarea/placeholder-appearance-textarea-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/textarea/textarea-placeholder-visibility-1-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/textarea/textarea-placeholder-visibility-1-expected.png
index 0ff6e1504..4d39aba 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/textarea/textarea-placeholder-visibility-1-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/textarea/textarea-placeholder-visibility-1-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/textarea/textarea-placeholder-visibility-1-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/textarea/textarea-placeholder-visibility-1-expected.txt
index c7b46932..48b4e3b 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/textarea/textarea-placeholder-visibility-1-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/textarea/textarea-placeholder-visibility-1-expected.txt
@@ -11,7 +11,7 @@
         LayoutText {#text} at (0,0) size 0x0
 layer at (8,44) size 179x36 clip at (9,45) size 177x34
   LayoutTextControl {TEXTAREA} at (0,0) size 179x36 [bgcolor=#FFFFFF] [border: (1px solid #A9A9A9)]
-    LayoutBlockFlow {DIV} at (3,3) size 175x16 [color=#A9A9A9]
+    LayoutBlockFlow {DIV} at (3,3) size 175x16 [color=#757575]
       LayoutText {#text} at (0,0) size 88x16
         text run at (0,0) width 88: "Placeholder"
     LayoutBlockFlow {DIV} at (3,3) size 175x16
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/textarea/textarea-placeholder-visibility-2-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/textarea/textarea-placeholder-visibility-2-expected.png
index 831d6f4..3f42381c 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/textarea/textarea-placeholder-visibility-2-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/textarea/textarea-placeholder-visibility-2-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/textarea/textarea-placeholder-visibility-2-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/textarea/textarea-placeholder-visibility-2-expected.txt
index de08f5b..a37120f 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/textarea/textarea-placeholder-visibility-2-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/textarea/textarea-placeholder-visibility-2-expected.txt
@@ -11,7 +11,7 @@
         LayoutText {#text} at (0,0) size 0x0
 layer at (8,44) size 179x36 clip at (9,45) size 177x34
   LayoutTextControl {TEXTAREA} at (0,0) size 179x36 [bgcolor=#FFFFFF] [border: (1px solid #A9A9A9)]
-    LayoutBlockFlow {DIV} at (3,3) size 175x16 [color=#A9A9A9]
+    LayoutBlockFlow {DIV} at (3,3) size 175x16 [color=#757575]
       LayoutText {#text} at (0,0) size 88x16
         text run at (0,0) width 88: "Placeholder"
     LayoutBlockFlow {DIV} at (3,3) size 175x16
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/css/text-overflow-input-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/css/text-overflow-input-expected.png
index dfe5c7b..38a9acb 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/css/text-overflow-input-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/css/text-overflow-input-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/css/text-overflow-input-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/css/text-overflow-input-expected.txt
index ccebf2e0..97265a3 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/css/text-overflow-input-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/css/text-overflow-input-expected.txt
@@ -109,13 +109,13 @@
           text run at (535,37) width 5: " "
         LayoutBR {BR} at (0,0) size 0x0
 layer at (11,71) size 125x13 scrollWidth 274
-  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#757575]
     LayoutText {#text} at (0,0) size 274x13
       text run at (0,0) width 274: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (11,71) size 125x13
   LayoutBlockFlow {DIV} at (3,3) size 125x13
 layer at (147,71) size 113x13 scrollWidth 274
-  LayoutBlockFlow {DIV} at (4,3) size 113x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (4,3) size 113x13 [color=#757575]
     LayoutText {#text} at (0,0) size 274x13
       text run at (0,0) width 274: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (147,71) size 113x13
@@ -133,13 +133,13 @@
     LayoutText {#text} at (0,0) size 345x13
       text run at (0,0) width 345: "\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}"
 layer at (11,90) size 125x13 scrollX 148.00 scrollWidth 274
-  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#757575]
     LayoutText {#text} at (-148,0) size 274x13
       text run at (-148,0) width 273: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (11,90) size 125x13
   LayoutBlockFlow {DIV} at (3,3) size 125x13
 layer at (159,90) size 113x13 scrollX 160.00 scrollWidth 274
-  LayoutBlockFlow {DIV} at (16,3) size 113x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (16,3) size 113x13 [color=#757575]
     LayoutText {#text} at (-160,0) size 274x13
       text run at (-160,0) width 273: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (159,90) size 113x13
@@ -157,13 +157,13 @@
     LayoutText {#text} at (-219,0) size 345x13
       text run at (-219,0) width 344 RTL: "\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}"
 layer at (11,143) size 125x13 scrollWidth 274
-  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#757575]
     LayoutText {#text} at (0,0) size 274x13
       text run at (0,0) width 274: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (11,143) size 125x13
   LayoutBlockFlow {DIV} at (3,3) size 125x13
 layer at (147,143) size 113x13 scrollWidth 274
-  LayoutBlockFlow {DIV} at (4,3) size 113x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (4,3) size 113x13 [color=#757575]
     LayoutText {#text} at (0,0) size 274x13
       text run at (0,0) width 274: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (147,143) size 113x13
@@ -181,13 +181,13 @@
     LayoutText {#text} at (0,0) size 345x13
       text run at (0,0) width 345: "\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}"
 layer at (11,162) size 125x13 scrollX 148.00 scrollWidth 274
-  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#757575]
     LayoutText {#text} at (-148,0) size 274x13
       text run at (-148,0) width 273: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (11,162) size 125x13
   LayoutBlockFlow {DIV} at (3,3) size 125x13
 layer at (159,162) size 113x13 scrollX 160.00 scrollWidth 274
-  LayoutBlockFlow {DIV} at (16,3) size 113x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (16,3) size 113x13 [color=#757575]
     LayoutText {#text} at (-160,0) size 274x13
       text run at (-160,0) width 273: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (159,162) size 113x13
@@ -205,7 +205,7 @@
     LayoutText {#text} at (-219,0) size 345x13
       text run at (-219,0) width 344 RTL: "\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}"
 layer at (257,215) size 125x13 scrollWidth 274
-  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#757575]
     LayoutText {#text} at (0,0) size 274x13
       text run at (0,0) width 274: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (257,215) size 125x13
@@ -215,7 +215,7 @@
     LayoutText {#text} at (0,0) size 274x13
       text run at (0,0) width 274: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (281,234) size 125x13 scrollWidth 274
-  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#757575]
     LayoutText {#text} at (0,0) size 274x13
       text run at (0,0) width 274: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (281,234) size 125x13
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/placeholder-position-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/placeholder-position-expected.png
index 6e7105b..ca2116c 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/placeholder-position-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/placeholder-position-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/placeholder-position-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/placeholder-position-expected.txt
index 19dcd53..3ed3d88 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/placeholder-position-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/placeholder-position-expected.txt
@@ -61,61 +61,61 @@
       LayoutBR {BR} at (405,270) size 0x0
       LayoutBR {BR} at (131,303) size 0x0
 layer at (12,11) size 113x13
-  LayoutBlockFlow {DIV} at (4,3) size 113x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (4,3) size 113x13 [color=#757575]
     LayoutText {#text} at (0,0) size 59x13
       text run at (0,0) width 59: "placeholder"
 layer at (12,11) size 113x13
   LayoutBlockFlow {DIV} at (0,0) size 113x13
 layer at (11,30) size 65x13
-  LayoutBlockFlow {DIV} at (3,3) size 65x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 65x13 [color=#757575]
     LayoutText {#text} at (0,0) size 59x13
       text run at (0,0) width 59: "placeholder"
 layer at (11,30) size 65x13
   LayoutBlockFlow {DIV} at (3,3) size 65x13
 layer at (86,30) size 65x13
-  LayoutBlockFlow {DIV} at (3,3) size 65x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 65x13 [color=#757575]
     LayoutText {#text} at (0,0) size 59x13
       text run at (0,0) width 59: "placeholder"
 layer at (86,30) size 65x13
   LayoutBlockFlow {DIV} at (3,3) size 65x13
 layer at (161,30) size 125x13
-  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#757575]
     LayoutText {#text} at (0,0) size 92x13
       text run at (0,0) width 92: "\x{65E5}\x{672C}\x{8A9E}placeholder"
 layer at (161,30) size 125x13
   LayoutBlockFlow {DIV} at (3,3) size 125x13
 layer at (24,49) size 113x13
-  LayoutBlockFlow {DIV} at (16,3) size 113x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (16,3) size 113x13 [color=#757575]
     LayoutText {#text} at (54,0) size 59x13
       text run at (54,0) width 59: "placeholder"
 layer at (24,49) size 113x13
   LayoutBlockFlow {DIV} at (0,0) size 113x13
 layer at (12,68) size 113x13
-  LayoutBlockFlow {DIV} at (4,3) size 113x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (4,3) size 113x13 [color=#757575]
     LayoutText {#text} at (0,0) size 59x13
       text run at (0,0) width 59: "placeholder"
 layer at (12,68) size 113x13
   LayoutBlockFlow {DIV} at (0,0) size 113x13
 layer at (8,84) size 141x32 clip at (9,85) size 139x30
   LayoutTextControl {TEXTAREA} at (0,76) size 141x32 [bgcolor=#FFFFFF] [border: (1px solid #000000)]
-    LayoutBlockFlow {DIV} at (3,3) size 135x13 [color=#A9A9A9]
+    LayoutBlockFlow {DIV} at (3,3) size 135x13 [color=#757575]
       LayoutText {#text} at (0,0) size 59x13
         text run at (0,0) width 59: "placeholder"
     LayoutBlockFlow {DIV} at (3,3) size 135x13
 layer at (11,119) size 125x13
-  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#757575]
     LayoutText {#text} at (0,0) size 59x13
       text run at (0,0) width 59: "placeholder"
 layer at (11,119) size 125x13
   LayoutBlockFlow {DIV} at (3,3) size 125x13
 layer at (8,149) size 141x45 clip at (9,150) size 139x43
   LayoutTextControl {TEXTAREA} at (0,141) size 141x45 [bgcolor=#FFFFFF] [border: (1px solid #000000)]
-    LayoutBlockFlow {DIV} at (3,16) size 135x13 [color=#A9A9A9]
+    LayoutBlockFlow {DIV} at (3,16) size 135x13 [color=#757575]
       LayoutText {#text} at (0,0) size 59x13
         text run at (0,0) width 59: "placeholder"
     LayoutBlockFlow {DIV} at (3,16) size 135x13
 layer at (19,205) size 166x17
-  LayoutBlockFlow {DIV} at (6,6) size 166x17 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (6,6) size 166x17 [color=#757575]
     LayoutText {#text} at (0,0) size 80x17
       text run at (0,0) width 80: "placeholder"
 layer at (19,205) size 166x17
@@ -125,25 +125,25 @@
     LayoutText {#text} at (0,6) size 27x13
       text run at (0,6) width 27: "Value"
 layer at (146,242) size 125x13
-  LayoutBlockFlow {DIV} at (3,9) size 125x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,9) size 125x13 [color=#757575]
     LayoutText {#text} at (0,0) size 59x13
       text run at (0,0) width 59: "placeholder"
 layer at (146,236) size 125x25
   LayoutBlockFlow {DIV} at (3,3) size 125x25
 layer at (281,242) size 125x13
-  LayoutBlockFlow {DIV} at (3,6) size 125x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,6) size 125x13 [color=#757575]
     LayoutText {#text} at (0,0) size 59x13
       text run at (0,0) width 59: "placeholder"
 layer at (281,242) size 125x13
   LayoutBlockFlow {DIV} at (3,6) size 125x13
 layer at (416,242) size 125x13
-  LayoutBlockFlow {DIV} at (3,6) size 125x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,6) size 125x13 [color=#757575]
     LayoutText {#text} at (0,0) size 59x13
       text run at (0,0) width 59: "placeholder"
 layer at (416,236) size 125x25
   LayoutBlockFlow {DIV} at (3,0) size 125x25
 layer at (551,242) size 125x13
-  LayoutBlockFlow {DIV} at (3,6) size 125x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,6) size 125x13 [color=#757575]
     LayoutText {#text} at (0,0) size 59x13
       text run at (0,0) width 59: "placeholder"
 layer at (551,242) size 125x13
@@ -153,13 +153,13 @@
     LayoutText {#text} at (49,0) size 27x13
       text run at (49,0) width 27: "Value"
 layer at (146,267) size 125x13
-  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#757575]
     LayoutText {#text} at (33,0) size 59x13
       text run at (33,0) width 59: "placeholder"
 layer at (146,267) size 125x13
   LayoutBlockFlow {DIV} at (3,3) size 125x13
 layer at (281,267) size 125x13
-  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#757575]
     LayoutText {#text} at (33,0) size 59x13
       text run at (33,0) width 59: "placeholder"
 layer at (281,267) size 125x13
@@ -173,7 +173,7 @@
 layer at (8,283) size 131x33
   LayoutTextControl {INPUT} at (0,275) size 131x33 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)]
 layer at (11,300) size 125x13
-  LayoutBlockFlow {DIV} at (3,17) size 125x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,17) size 125x13 [color=#757575]
     LayoutText {#text} at (0,0) size 59x13
       text run at (0,0) width 59: "placeholder"
 layer at (11,300) size 125x13
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/search/search-appearance-basic-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/search/search-appearance-basic-expected.png
index 355b2d8..cea7575 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/search/search-appearance-basic-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/search/search-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/search/search-appearance-basic-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/search/search-appearance-basic-expected.txt
index 558df9c..c3ea2cd 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/search/search-appearance-basic-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/search/search-appearance-basic-expected.txt
@@ -162,7 +162,7 @@
     LayoutText {#text} at (0,0) size 33x26
       text run at (0,0) width 33: "foo"
 layer at (30,336) size 132x13
-  LayoutBlockFlow {DIV} at (18,4) size 132x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (18,4) size 132x13 [color=#757575]
     LayoutText {#text} at (0,0) size 92x13
       text run at (0,0) width 92: "Search for Events"
 layer at (30,336) size 132x13
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/text/input-placeholder-visibility-1-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/text/input-placeholder-visibility-1-expected.png
index 659c134..93f593e9 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/text/input-placeholder-visibility-1-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/text/input-placeholder-visibility-1-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/text/input-placeholder-visibility-1-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/text/input-placeholder-visibility-1-expected.txt
index 6f3f9ffa..f581557 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/text/input-placeholder-visibility-1-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/text/input-placeholder-visibility-1-expected.txt
@@ -11,7 +11,7 @@
         LayoutText {#text} at (0,0) size 0x0
         LayoutText {#text} at (0,0) size 0x0
 layer at (11,45) size 125x13
-  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#757575]
     LayoutText {#text} at (0,0) size 60x13
       text run at (0,0) width 60: "Placeholder"
 layer at (11,45) size 125x13
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/text/input-placeholder-visibility-3-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/text/input-placeholder-visibility-3-expected.png
index 856e232..f837bb5 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/text/input-placeholder-visibility-3-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/text/input-placeholder-visibility-3-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/text/input-placeholder-visibility-3-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/text/input-placeholder-visibility-3-expected.txt
index 95aa71e..604b1b61 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/text/input-placeholder-visibility-3-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/text/input-placeholder-visibility-3-expected.txt
@@ -11,7 +11,7 @@
         LayoutText {#text} at (0,0) size 0x0
         LayoutText {#text} at (0,0) size 0x0
 layer at (11,45) size 125x13
-  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#757575]
     LayoutText {#text} at (0,0) size 60x13
       text run at (0,0) width 60: "Placeholder"
 layer at (11,45) size 125x13
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/textarea/placeholder-appearance-textarea-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/textarea/placeholder-appearance-textarea-expected.png
index 4b3064b..8833125 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/textarea/placeholder-appearance-textarea-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/textarea/placeholder-appearance-textarea-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/textarea/placeholder-appearance-textarea-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/textarea/placeholder-appearance-textarea-expected.txt
index bdbe2615..7e77b22 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/textarea/placeholder-appearance-textarea-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/textarea/placeholder-appearance-textarea-expected.txt
@@ -8,7 +8,7 @@
       LayoutBR {BR} at (141,96) size 0x0
 layer at (8,8) size 141x32 clip at (9,9) size 139x30
   LayoutTextControl {TEXTAREA} at (0,0) size 141x32 [bgcolor=#FFFFFF] [border: (1px solid #000000)]
-    LayoutBlockFlow {DIV} at (3,3) size 135x26 [color=#A9A9A9]
+    LayoutBlockFlow {DIV} at (3,3) size 135x26 [color=#757575]
       LayoutText {#text} at (0,0) size 37x26
         text run at (0,0) width 22: "first \x{D}"
         text run at (21,0) width 1: " "
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/textarea/textarea-placeholder-visibility-1-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/textarea/textarea-placeholder-visibility-1-expected.png
index a36e867..51cf431 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/textarea/textarea-placeholder-visibility-1-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/textarea/textarea-placeholder-visibility-1-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/textarea/textarea-placeholder-visibility-1-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/textarea/textarea-placeholder-visibility-1-expected.txt
index 8c6b83bd..82f5dd2 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/textarea/textarea-placeholder-visibility-1-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/textarea/textarea-placeholder-visibility-1-expected.txt
@@ -11,7 +11,7 @@
         LayoutText {#text} at (0,0) size 0x0
 layer at (8,42) size 141x32 clip at (9,43) size 139x30
   LayoutTextControl {TEXTAREA} at (0,0) size 141x32 [bgcolor=#FFFFFF] [border: (1px solid #000000)]
-    LayoutBlockFlow {DIV} at (3,3) size 135x13 [color=#A9A9A9]
+    LayoutBlockFlow {DIV} at (3,3) size 135x13 [color=#757575]
       LayoutText {#text} at (0,0) size 60x13
         text run at (0,0) width 60: "Placeholder"
     LayoutBlockFlow {DIV} at (3,3) size 135x13
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/textarea/textarea-placeholder-visibility-2-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/textarea/textarea-placeholder-visibility-2-expected.png
index 8af0eb79..84e0421 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/textarea/textarea-placeholder-visibility-2-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/textarea/textarea-placeholder-visibility-2-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/textarea/textarea-placeholder-visibility-2-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/textarea/textarea-placeholder-visibility-2-expected.txt
index 88873c7..51afc42 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/textarea/textarea-placeholder-visibility-2-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/textarea/textarea-placeholder-visibility-2-expected.txt
@@ -11,7 +11,7 @@
         LayoutText {#text} at (0,0) size 0x0
 layer at (8,42) size 141x32 clip at (9,43) size 139x30
   LayoutTextControl {TEXTAREA} at (0,0) size 141x32 [bgcolor=#FFFFFF] [border: (1px solid #000000)]
-    LayoutBlockFlow {DIV} at (3,3) size 135x13 [color=#A9A9A9]
+    LayoutBlockFlow {DIV} at (3,3) size 135x13 [color=#757575]
       LayoutText {#text} at (0,0) size 60x13
         text run at (0,0) width 60: "Placeholder"
     LayoutBlockFlow {DIV} at (3,3) size 135x13
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/css/text-overflow-input-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/css/text-overflow-input-expected.png
index 5a4fdd8e..34db625 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/css/text-overflow-input-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/css/text-overflow-input-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/css/text-overflow-input-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/css/text-overflow-input-expected.txt
index fc04006..a550e68 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/css/text-overflow-input-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/css/text-overflow-input-expected.txt
@@ -109,13 +109,13 @@
           text run at (519,37) width 5: " "
         LayoutBR {BR} at (0,0) size 0x0
 layer at (11,71) size 117x13 scrollWidth 295
-  LayoutBlockFlow {DIV} at (3,3) size 117x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 117x13 [color=#757575]
     LayoutText {#text} at (0,0) size 296x13
       text run at (0,0) width 296: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (11,71) size 117x13
   LayoutBlockFlow {DIV} at (3,3) size 117x13
 layer at (139,71) size 105x13 scrollWidth 295
-  LayoutBlockFlow {DIV} at (4,3) size 105x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (4,3) size 105x13 [color=#757575]
     LayoutText {#text} at (0,0) size 296x13
       text run at (0,0) width 296: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (139,71) size 105x13
@@ -133,13 +133,13 @@
     LayoutText {#text} at (0,0) size 340x13
       text run at (0,0) width 340: "\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}"
 layer at (11,90) size 117x13 scrollX 178.00 scrollWidth 295
-  LayoutBlockFlow {DIV} at (3,3) size 117x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 117x13 [color=#757575]
     LayoutText {#text} at (-178,0) size 296x13
       text run at (-178,0) width 295: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (11,90) size 117x13
   LayoutBlockFlow {DIV} at (3,3) size 117x13
 layer at (151,90) size 105x13 scrollX 190.00 scrollWidth 295
-  LayoutBlockFlow {DIV} at (16,3) size 105x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (16,3) size 105x13 [color=#757575]
     LayoutText {#text} at (-190,0) size 296x13
       text run at (-190,0) width 295: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (151,90) size 105x13
@@ -157,13 +157,13 @@
     LayoutText {#text} at (-222,0) size 340x13
       text run at (-222,0) width 339 RTL: "\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}"
 layer at (11,143) size 117x13 scrollWidth 295
-  LayoutBlockFlow {DIV} at (3,3) size 117x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 117x13 [color=#757575]
     LayoutText {#text} at (0,0) size 296x13
       text run at (0,0) width 296: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (11,143) size 117x13
   LayoutBlockFlow {DIV} at (3,3) size 117x13
 layer at (139,143) size 105x13 scrollWidth 295
-  LayoutBlockFlow {DIV} at (4,3) size 105x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (4,3) size 105x13 [color=#757575]
     LayoutText {#text} at (0,0) size 296x13
       text run at (0,0) width 296: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (139,143) size 105x13
@@ -181,13 +181,13 @@
     LayoutText {#text} at (0,0) size 340x13
       text run at (0,0) width 340: "\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}"
 layer at (11,162) size 117x13 scrollX 178.00 scrollWidth 295
-  LayoutBlockFlow {DIV} at (3,3) size 117x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 117x13 [color=#757575]
     LayoutText {#text} at (-178,0) size 296x13
       text run at (-178,0) width 295: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (11,162) size 117x13
   LayoutBlockFlow {DIV} at (3,3) size 117x13
 layer at (151,162) size 105x13 scrollX 190.00 scrollWidth 295
-  LayoutBlockFlow {DIV} at (16,3) size 105x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (16,3) size 105x13 [color=#757575]
     LayoutText {#text} at (-190,0) size 296x13
       text run at (-190,0) width 295: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (151,162) size 105x13
@@ -205,7 +205,7 @@
     LayoutText {#text} at (-222,0) size 340x13
       text run at (-222,0) width 339 RTL: "\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}"
 layer at (257,215) size 117x13 scrollWidth 295
-  LayoutBlockFlow {DIV} at (3,3) size 117x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 117x13 [color=#757575]
     LayoutText {#text} at (0,0) size 296x13
       text run at (0,0) width 296: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (257,215) size 117x13
@@ -215,7 +215,7 @@
     LayoutText {#text} at (0,0) size 296x13
       text run at (0,0) width 296: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (281,234) size 117x13 scrollWidth 295
-  LayoutBlockFlow {DIV} at (3,3) size 117x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 117x13 [color=#757575]
     LayoutText {#text} at (0,0) size 296x13
       text run at (0,0) width 296: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (281,234) size 117x13
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/placeholder-position-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/placeholder-position-expected.png
index 88d6103..7d87ecd 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/placeholder-position-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/placeholder-position-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/placeholder-position-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/placeholder-position-expected.txt
index 3f2220a..56868ef 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/placeholder-position-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/placeholder-position-expected.txt
@@ -61,61 +61,61 @@
       LayoutBR {BR} at (381,271) size 0x0
       LayoutBR {BR} at (123,304) size 0x0
 layer at (12,11) size 105x13
-  LayoutBlockFlow {DIV} at (4,3) size 105x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (4,3) size 105x13 [color=#757575]
     LayoutText {#text} at (0,0) size 63x13
       text run at (0,0) width 63: "placeholder"
 layer at (12,11) size 105x13
   LayoutBlockFlow {DIV} at (0,0) size 105x13
 layer at (11,30) size 67x13
-  LayoutBlockFlow {DIV} at (3,3) size 67x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 67x13 [color=#757575]
     LayoutText {#text} at (0,0) size 63x13
       text run at (0,0) width 63: "placeholder"
 layer at (11,30) size 67x13
   LayoutBlockFlow {DIV} at (3,3) size 67x13
 layer at (88,30) size 67x13
-  LayoutBlockFlow {DIV} at (3,3) size 67x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 67x13 [color=#757575]
     LayoutText {#text} at (0,0) size 63x13
       text run at (0,0) width 63: "placeholder"
 layer at (88,30) size 67x13
   LayoutBlockFlow {DIV} at (3,3) size 67x13
 layer at (165,28) size 117x17
-  LayoutBlockFlow {DIV} at (3,1) size 117x17 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,1) size 117x17 [color=#757575]
     LayoutText {#text} at (0,2) size 96x13
       text run at (0,2) width 96: "\x{65E5}\x{672C}\x{8A9E}placeholder"
 layer at (165,30) size 117x13
   LayoutBlockFlow {DIV} at (3,3) size 117x13
 layer at (24,49) size 105x13
-  LayoutBlockFlow {DIV} at (16,3) size 105x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (16,3) size 105x13 [color=#757575]
     LayoutText {#text} at (42,0) size 63x13
       text run at (42,0) width 63: "placeholder"
 layer at (24,49) size 105x13
   LayoutBlockFlow {DIV} at (0,0) size 105x13
 layer at (12,68) size 105x13
-  LayoutBlockFlow {DIV} at (4,3) size 105x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (4,3) size 105x13 [color=#757575]
     LayoutText {#text} at (0,0) size 63x13
       text run at (0,0) width 63: "placeholder"
 layer at (12,68) size 105x13
   LayoutBlockFlow {DIV} at (0,0) size 105x13
 layer at (8,84) size 161x32 clip at (9,85) size 159x30
   LayoutTextControl {TEXTAREA} at (0,76) size 161x32 [bgcolor=#FFFFFF] [border: (1px solid #000000)]
-    LayoutBlockFlow {DIV} at (3,3) size 155x13 [color=#A9A9A9]
+    LayoutBlockFlow {DIV} at (3,3) size 155x13 [color=#757575]
       LayoutText {#text} at (0,0) size 63x13
         text run at (0,0) width 63: "placeholder"
     LayoutBlockFlow {DIV} at (3,3) size 155x13
 layer at (11,119) size 117x13
-  LayoutBlockFlow {DIV} at (3,3) size 117x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 117x13 [color=#757575]
     LayoutText {#text} at (0,0) size 63x13
       text run at (0,0) width 63: "placeholder"
 layer at (11,119) size 117x13
   LayoutBlockFlow {DIV} at (3,3) size 117x13
 layer at (8,149) size 161x45 clip at (9,150) size 159x43
   LayoutTextControl {TEXTAREA} at (0,141) size 161x45 [bgcolor=#FFFFFF] [border: (1px solid #000000)]
-    LayoutBlockFlow {DIV} at (3,16) size 155x13 [color=#A9A9A9]
+    LayoutBlockFlow {DIV} at (3,16) size 155x13 [color=#757575]
       LayoutText {#text} at (0,0) size 63x13
         text run at (0,0) width 63: "placeholder"
     LayoutBlockFlow {DIV} at (3,16) size 155x13
 layer at (19,205) size 162x18
-  LayoutBlockFlow {DIV} at (6,6) size 162x18 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (6,6) size 162x18 [color=#757575]
     LayoutText {#text} at (0,0) size 85x18
       text run at (0,0) width 85: "placeholder"
 layer at (19,205) size 162x18
@@ -125,25 +125,25 @@
     LayoutText {#text} at (0,6) size 30x13
       text run at (0,6) width 30: "Value"
 layer at (138,243) size 117x13
-  LayoutBlockFlow {DIV} at (3,9) size 117x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,9) size 117x13 [color=#757575]
     LayoutText {#text} at (0,0) size 63x13
       text run at (0,0) width 63: "placeholder"
 layer at (138,237) size 117x25
   LayoutBlockFlow {DIV} at (3,3) size 117x25
 layer at (265,243) size 117x13
-  LayoutBlockFlow {DIV} at (3,6) size 117x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,6) size 117x13 [color=#757575]
     LayoutText {#text} at (0,0) size 63x13
       text run at (0,0) width 63: "placeholder"
 layer at (265,243) size 117x13
   LayoutBlockFlow {DIV} at (3,6) size 117x13
 layer at (392,243) size 117x13
-  LayoutBlockFlow {DIV} at (3,6) size 117x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,6) size 117x13 [color=#757575]
     LayoutText {#text} at (0,0) size 63x13
       text run at (0,0) width 63: "placeholder"
 layer at (392,237) size 117x25
   LayoutBlockFlow {DIV} at (3,0) size 117x25
 layer at (519,243) size 117x13
-  LayoutBlockFlow {DIV} at (3,6) size 117x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,6) size 117x13 [color=#757575]
     LayoutText {#text} at (0,0) size 63x13
       text run at (0,0) width 63: "placeholder"
 layer at (519,243) size 117x13
@@ -153,13 +153,13 @@
     LayoutText {#text} at (43,0) size 31x13
       text run at (43,0) width 31: "Value"
 layer at (138,268) size 117x13
-  LayoutBlockFlow {DIV} at (3,3) size 117x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 117x13 [color=#757575]
     LayoutText {#text} at (27,0) size 63x13
       text run at (27,0) width 63: "placeholder"
 layer at (138,268) size 117x13
   LayoutBlockFlow {DIV} at (3,3) size 117x13
 layer at (265,268) size 117x13
-  LayoutBlockFlow {DIV} at (3,3) size 117x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 117x13 [color=#757575]
     LayoutText {#text} at (27,0) size 63x13
       text run at (27,0) width 63: "placeholder"
 layer at (265,268) size 117x13
@@ -173,7 +173,7 @@
 layer at (8,284) size 123x33
   LayoutTextControl {INPUT} at (0,276) size 123x33 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)]
 layer at (11,301) size 117x13
-  LayoutBlockFlow {DIV} at (3,17) size 117x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,17) size 117x13 [color=#757575]
     LayoutText {#text} at (0,0) size 63x13
       text run at (0,0) width 63: "placeholder"
 layer at (11,301) size 117x13
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/search/search-appearance-basic-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/search/search-appearance-basic-expected.png
index 055de9b..31087c7f 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/search/search-appearance-basic-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/search/search-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/search/search-appearance-basic-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/search/search-appearance-basic-expected.txt
index 7b6e53e..46c752a 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/search/search-appearance-basic-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/search/search-appearance-basic-expected.txt
@@ -162,7 +162,7 @@
     LayoutText {#text} at (0,0) size 36x26
       text run at (0,0) width 36: "foo"
 layer at (30,336) size 132x13
-  LayoutBlockFlow {DIV} at (18,4) size 132x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (18,4) size 132x13 [color=#757575]
     LayoutText {#text} at (0,0) size 92x13
       text run at (0,0) width 92: "Search for Events"
 layer at (30,336) size 132x13
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/text/input-placeholder-visibility-1-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/text/input-placeholder-visibility-1-expected.png
index 177ec759..827a278 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/text/input-placeholder-visibility-1-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/text/input-placeholder-visibility-1-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/text/input-placeholder-visibility-1-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/text/input-placeholder-visibility-1-expected.txt
index ce72e16..4228b66 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/text/input-placeholder-visibility-1-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/text/input-placeholder-visibility-1-expected.txt
@@ -11,7 +11,7 @@
         LayoutText {#text} at (0,0) size 0x0
         LayoutText {#text} at (0,0) size 0x0
 layer at (11,45) size 117x13
-  LayoutBlockFlow {DIV} at (3,3) size 117x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 117x13 [color=#757575]
     LayoutText {#text} at (0,0) size 62x13
       text run at (0,0) width 62: "Placeholder"
 layer at (11,45) size 117x13
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/text/input-placeholder-visibility-3-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/text/input-placeholder-visibility-3-expected.png
index 716eea4..03688a4 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/text/input-placeholder-visibility-3-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/text/input-placeholder-visibility-3-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/text/input-placeholder-visibility-3-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/text/input-placeholder-visibility-3-expected.txt
index 5fdb531..9360e9e 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/text/input-placeholder-visibility-3-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/text/input-placeholder-visibility-3-expected.txt
@@ -11,7 +11,7 @@
         LayoutText {#text} at (0,0) size 0x0
         LayoutText {#text} at (0,0) size 0x0
 layer at (11,45) size 117x13
-  LayoutBlockFlow {DIV} at (3,3) size 117x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 117x13 [color=#757575]
     LayoutText {#text} at (0,0) size 62x13
       text run at (0,0) width 62: "Placeholder"
 layer at (11,45) size 117x13
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/textarea/placeholder-appearance-textarea-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/textarea/placeholder-appearance-textarea-expected.png
index cd2e6cf..5b1c8dd 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/textarea/placeholder-appearance-textarea-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/textarea/placeholder-appearance-textarea-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/textarea/placeholder-appearance-textarea-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/textarea/placeholder-appearance-textarea-expected.txt
index b45ea13..6e9ec06 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/textarea/placeholder-appearance-textarea-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/textarea/placeholder-appearance-textarea-expected.txt
@@ -8,7 +8,7 @@
       LayoutBR {BR} at (161,96) size 0x0
 layer at (8,8) size 161x32 clip at (9,9) size 159x30
   LayoutTextControl {TEXTAREA} at (0,0) size 161x32 [bgcolor=#FFFFFF] [border: (1px solid #000000)]
-    LayoutBlockFlow {DIV} at (3,3) size 155x26 [color=#A9A9A9]
+    LayoutBlockFlow {DIV} at (3,3) size 155x26 [color=#757575]
       LayoutText {#text} at (0,0) size 38x26
         text run at (0,0) width 25: "first \x{D}"
         text run at (24,0) width 1: " "
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/textarea/textarea-placeholder-visibility-1-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/textarea/textarea-placeholder-visibility-1-expected.png
index bfc6393a..aa8560ad 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/textarea/textarea-placeholder-visibility-1-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/textarea/textarea-placeholder-visibility-1-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/textarea/textarea-placeholder-visibility-1-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/textarea/textarea-placeholder-visibility-1-expected.txt
index 0bddbe34..09c9567d 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/textarea/textarea-placeholder-visibility-1-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/textarea/textarea-placeholder-visibility-1-expected.txt
@@ -11,7 +11,7 @@
         LayoutText {#text} at (0,0) size 0x0
 layer at (8,42) size 161x32 clip at (9,43) size 159x30
   LayoutTextControl {TEXTAREA} at (0,0) size 161x32 [bgcolor=#FFFFFF] [border: (1px solid #000000)]
-    LayoutBlockFlow {DIV} at (3,3) size 155x13 [color=#A9A9A9]
+    LayoutBlockFlow {DIV} at (3,3) size 155x13 [color=#757575]
       LayoutText {#text} at (0,0) size 62x13
         text run at (0,0) width 62: "Placeholder"
     LayoutBlockFlow {DIV} at (3,3) size 155x13
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/textarea/textarea-placeholder-visibility-2-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/textarea/textarea-placeholder-visibility-2-expected.png
index 89c5376..7f68481 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/textarea/textarea-placeholder-visibility-2-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/textarea/textarea-placeholder-visibility-2-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/textarea/textarea-placeholder-visibility-2-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/textarea/textarea-placeholder-visibility-2-expected.txt
index 870236eb..d371cc9 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/textarea/textarea-placeholder-visibility-2-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/textarea/textarea-placeholder-visibility-2-expected.txt
@@ -11,7 +11,7 @@
         LayoutText {#text} at (0,0) size 0x0
 layer at (8,42) size 161x32 clip at (9,43) size 159x30
   LayoutTextControl {TEXTAREA} at (0,0) size 161x32 [bgcolor=#FFFFFF] [border: (1px solid #000000)]
-    LayoutBlockFlow {DIV} at (3,3) size 155x13 [color=#A9A9A9]
+    LayoutBlockFlow {DIV} at (3,3) size 155x13 [color=#757575]
       LayoutText {#text} at (0,0) size 62x13
         text run at (0,0) width 62: "Placeholder"
     LayoutBlockFlow {DIV} at (3,3) size 155x13
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/css/text-overflow-input-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/css/text-overflow-input-expected.png
index 3b39898b..168bd65 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/css/text-overflow-input-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/css/text-overflow-input-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/css/text-overflow-input-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/css/text-overflow-input-expected.txt
index c38f6cb..9b1d7c310 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/css/text-overflow-input-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/css/text-overflow-input-expected.txt
@@ -109,13 +109,13 @@
           text run at (535,37) width 5: " "
         LayoutBR {BR} at (0,0) size 0x0
 layer at (11,71) size 125x13 scrollWidth 284
-  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#757575]
     LayoutText {#text} at (0,0) size 285x13
       text run at (0,0) width 285: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (11,71) size 125x13
   LayoutBlockFlow {DIV} at (3,3) size 125x13
 layer at (147,71) size 113x13 scrollWidth 284
-  LayoutBlockFlow {DIV} at (4,3) size 113x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (4,3) size 113x13 [color=#757575]
     LayoutText {#text} at (0,0) size 285x13
       text run at (0,0) width 285: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (147,71) size 113x13
@@ -133,13 +133,13 @@
     LayoutText {#text} at (0,0) size 305x13
       text run at (0,0) width 305: "\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}"
 layer at (11,90) size 125x13 scrollX 158.00 scrollWidth 284
-  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#757575]
     LayoutText {#text} at (-158,0) size 284x13
       text run at (-158,0) width 283: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (11,90) size 125x13
   LayoutBlockFlow {DIV} at (3,3) size 125x13
 layer at (159,90) size 113x13 scrollX 170.00 scrollWidth 284
-  LayoutBlockFlow {DIV} at (16,3) size 113x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (16,3) size 113x13 [color=#757575]
     LayoutText {#text} at (-170,0) size 284x13
       text run at (-170,0) width 283: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (159,90) size 113x13
@@ -157,13 +157,13 @@
     LayoutText {#text} at (-179,0) size 305x13
       text run at (-179,0) width 304 RTL: "\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}"
 layer at (11,143) size 125x13 scrollWidth 284
-  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#757575]
     LayoutText {#text} at (0,0) size 285x13
       text run at (0,0) width 285: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (11,143) size 125x13
   LayoutBlockFlow {DIV} at (3,3) size 125x13
 layer at (147,143) size 113x13 scrollWidth 284
-  LayoutBlockFlow {DIV} at (4,3) size 113x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (4,3) size 113x13 [color=#757575]
     LayoutText {#text} at (0,0) size 285x13
       text run at (0,0) width 285: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (147,143) size 113x13
@@ -181,13 +181,13 @@
     LayoutText {#text} at (0,0) size 305x13
       text run at (0,0) width 305: "\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}"
 layer at (11,162) size 125x13 scrollX 158.00 scrollWidth 284
-  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#757575]
     LayoutText {#text} at (-158,0) size 284x13
       text run at (-158,0) width 283: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (11,162) size 125x13
   LayoutBlockFlow {DIV} at (3,3) size 125x13
 layer at (159,162) size 113x13 scrollX 170.00 scrollWidth 284
-  LayoutBlockFlow {DIV} at (16,3) size 113x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (16,3) size 113x13 [color=#757575]
     LayoutText {#text} at (-170,0) size 284x13
       text run at (-170,0) width 283: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (159,162) size 113x13
@@ -205,7 +205,7 @@
     LayoutText {#text} at (-179,0) size 305x13
       text run at (-179,0) width 304 RTL: "\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}"
 layer at (257,215) size 125x13 scrollWidth 284
-  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#757575]
     LayoutText {#text} at (0,0) size 285x13
       text run at (0,0) width 285: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (257,215) size 125x13
@@ -215,7 +215,7 @@
     LayoutText {#text} at (0,0) size 285x13
       text run at (0,0) width 285: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (281,234) size 125x13 scrollWidth 284
-  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#757575]
     LayoutText {#text} at (0,0) size 285x13
       text run at (0,0) width 285: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (281,234) size 125x13
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/placeholder-position-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/placeholder-position-expected.png
index 102caf8..ebaf8fff 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/placeholder-position-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/placeholder-position-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/placeholder-position-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/placeholder-position-expected.txt
index 8b58169..8a1a7e9a 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/placeholder-position-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/placeholder-position-expected.txt
@@ -61,61 +61,61 @@
       LayoutBR {BR} at (405,271) size 0x0
       LayoutBR {BR} at (131,304) size 0x0
 layer at (12,11) size 113x13
-  LayoutBlockFlow {DIV} at (4,3) size 113x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (4,3) size 113x13 [color=#757575]
     LayoutText {#text} at (0,0) size 62x13
       text run at (0,0) width 62: "placeholder"
 layer at (12,11) size 113x13
   LayoutBlockFlow {DIV} at (0,0) size 113x13
 layer at (11,30) size 65x13
-  LayoutBlockFlow {DIV} at (3,3) size 65x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 65x13 [color=#757575]
     LayoutText {#text} at (0,0) size 62x13
       text run at (0,0) width 62: "placeholder"
 layer at (11,30) size 65x13
   LayoutBlockFlow {DIV} at (3,3) size 65x13
 layer at (86,30) size 65x13
-  LayoutBlockFlow {DIV} at (3,3) size 65x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 65x13 [color=#757575]
     LayoutText {#text} at (0,0) size 62x13
       text run at (0,0) width 62: "placeholder"
 layer at (86,30) size 65x13
   LayoutBlockFlow {DIV} at (3,3) size 65x13
 layer at (161,30) size 125x13
-  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#757575]
     LayoutText {#text} at (0,0) size 95x13
       text run at (0,0) width 95: "\x{65E5}\x{672C}\x{8A9E}placeholder"
 layer at (161,30) size 125x13
   LayoutBlockFlow {DIV} at (3,3) size 125x13
 layer at (24,49) size 113x13
-  LayoutBlockFlow {DIV} at (16,3) size 113x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (16,3) size 113x13 [color=#757575]
     LayoutText {#text} at (52,0) size 61x13
       text run at (52,0) width 61: "placeholder"
 layer at (24,49) size 113x13
   LayoutBlockFlow {DIV} at (0,0) size 113x13
 layer at (12,68) size 113x13
-  LayoutBlockFlow {DIV} at (4,3) size 113x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (4,3) size 113x13 [color=#757575]
     LayoutText {#text} at (0,0) size 62x13
       text run at (0,0) width 62: "placeholder"
 layer at (12,68) size 113x13
   LayoutBlockFlow {DIV} at (0,0) size 113x13
 layer at (8,84) size 141x32 clip at (9,85) size 139x30
   LayoutTextControl {TEXTAREA} at (0,76) size 141x32 [bgcolor=#FFFFFF] [border: (1px solid #000000)]
-    LayoutBlockFlow {DIV} at (3,3) size 135x13 [color=#A9A9A9]
+    LayoutBlockFlow {DIV} at (3,3) size 135x13 [color=#757575]
       LayoutText {#text} at (0,0) size 62x13
         text run at (0,0) width 62: "placeholder"
     LayoutBlockFlow {DIV} at (3,3) size 135x13
 layer at (11,119) size 125x13
-  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#757575]
     LayoutText {#text} at (0,0) size 62x13
       text run at (0,0) width 62: "placeholder"
 layer at (11,119) size 125x13
   LayoutBlockFlow {DIV} at (3,3) size 125x13
 layer at (8,149) size 141x45 clip at (9,150) size 139x43
   LayoutTextControl {TEXTAREA} at (0,141) size 141x45 [bgcolor=#FFFFFF] [border: (1px solid #000000)]
-    LayoutBlockFlow {DIV} at (3,16) size 135x13 [color=#A9A9A9]
+    LayoutBlockFlow {DIV} at (3,16) size 135x13 [color=#757575]
       LayoutText {#text} at (0,0) size 62x13
         text run at (0,0) width 62: "placeholder"
     LayoutBlockFlow {DIV} at (3,16) size 135x13
 layer at (19,205) size 167x18
-  LayoutBlockFlow {DIV} at (6,6) size 167x18 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (6,6) size 167x18 [color=#757575]
     LayoutText {#text} at (0,0) size 84x18
       text run at (0,0) width 84: "placeholder"
 layer at (19,205) size 167x18
@@ -125,25 +125,25 @@
     LayoutText {#text} at (0,6) size 29x13
       text run at (0,6) width 29: "Value"
 layer at (146,243) size 125x13
-  LayoutBlockFlow {DIV} at (3,9) size 125x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,9) size 125x13 [color=#757575]
     LayoutText {#text} at (0,0) size 62x13
       text run at (0,0) width 62: "placeholder"
 layer at (146,237) size 125x25
   LayoutBlockFlow {DIV} at (3,3) size 125x25
 layer at (281,243) size 125x13
-  LayoutBlockFlow {DIV} at (3,6) size 125x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,6) size 125x13 [color=#757575]
     LayoutText {#text} at (0,0) size 62x13
       text run at (0,0) width 62: "placeholder"
 layer at (281,243) size 125x13
   LayoutBlockFlow {DIV} at (3,6) size 125x13
 layer at (416,243) size 125x13
-  LayoutBlockFlow {DIV} at (3,6) size 125x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,6) size 125x13 [color=#757575]
     LayoutText {#text} at (0,0) size 62x13
       text run at (0,0) width 62: "placeholder"
 layer at (416,237) size 125x25
   LayoutBlockFlow {DIV} at (3,0) size 125x25
 layer at (551,243) size 125x13
-  LayoutBlockFlow {DIV} at (3,6) size 125x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,6) size 125x13 [color=#757575]
     LayoutText {#text} at (0,0) size 62x13
       text run at (0,0) width 62: "placeholder"
 layer at (551,243) size 125x13
@@ -153,13 +153,13 @@
     LayoutText {#text} at (48,0) size 29x13
       text run at (48,0) width 29: "Value"
 layer at (146,268) size 125x13
-  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#757575]
     LayoutText {#text} at (31,0) size 62x13
       text run at (31,0) width 62: "placeholder"
 layer at (146,268) size 125x13
   LayoutBlockFlow {DIV} at (3,3) size 125x13
 layer at (281,268) size 125x13
-  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#757575]
     LayoutText {#text} at (31,0) size 62x13
       text run at (31,0) width 62: "placeholder"
 layer at (281,268) size 125x13
@@ -173,7 +173,7 @@
 layer at (8,284) size 131x33
   LayoutTextControl {INPUT} at (0,276) size 131x33 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)]
 layer at (11,301) size 125x13
-  LayoutBlockFlow {DIV} at (3,17) size 125x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,17) size 125x13 [color=#757575]
     LayoutText {#text} at (0,0) size 62x13
       text run at (0,0) width 62: "placeholder"
 layer at (11,301) size 125x13
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/search/search-appearance-basic-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/search/search-appearance-basic-expected.png
index 51942fd..f81e9d0 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/search/search-appearance-basic-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/search/search-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/search/search-appearance-basic-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/search/search-appearance-basic-expected.txt
index 3616b51..988221b 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/search/search-appearance-basic-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/search/search-appearance-basic-expected.txt
@@ -162,7 +162,7 @@
     LayoutText {#text} at (0,0) size 31x26
       text run at (0,0) width 31: "foo"
 layer at (30,336) size 132x13
-  LayoutBlockFlow {DIV} at (18,4) size 132x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (18,4) size 132x13 [color=#757575]
     LayoutText {#text} at (0,0) size 92x13
       text run at (0,0) width 92: "Search for Events"
 layer at (30,336) size 132x13
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/text/input-placeholder-visibility-1-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/text/input-placeholder-visibility-1-expected.png
index cc61603..4e1f6981 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/text/input-placeholder-visibility-1-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/text/input-placeholder-visibility-1-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/text/input-placeholder-visibility-1-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/text/input-placeholder-visibility-1-expected.txt
index 90236056..e5fef261 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/text/input-placeholder-visibility-1-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/text/input-placeholder-visibility-1-expected.txt
@@ -11,7 +11,7 @@
         LayoutText {#text} at (0,0) size 0x0
         LayoutText {#text} at (0,0) size 0x0
 layer at (11,45) size 125x13
-  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#757575]
     LayoutText {#text} at (0,0) size 62x13
       text run at (0,0) width 62: "Placeholder"
 layer at (11,45) size 125x13
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/text/input-placeholder-visibility-3-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/text/input-placeholder-visibility-3-expected.png
index a2acdc8..3d1dc87 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/text/input-placeholder-visibility-3-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/text/input-placeholder-visibility-3-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/text/input-placeholder-visibility-3-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/text/input-placeholder-visibility-3-expected.txt
index 67e2ab1..b400843 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/text/input-placeholder-visibility-3-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/text/input-placeholder-visibility-3-expected.txt
@@ -11,7 +11,7 @@
         LayoutText {#text} at (0,0) size 0x0
         LayoutText {#text} at (0,0) size 0x0
 layer at (11,45) size 125x13
-  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 125x13 [color=#757575]
     LayoutText {#text} at (0,0) size 62x13
       text run at (0,0) width 62: "Placeholder"
 layer at (11,45) size 125x13
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/textarea/placeholder-appearance-textarea-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/textarea/placeholder-appearance-textarea-expected.png
index 7ebe4c8..73b3a6c 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/textarea/placeholder-appearance-textarea-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/textarea/placeholder-appearance-textarea-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/textarea/placeholder-appearance-textarea-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/textarea/placeholder-appearance-textarea-expected.txt
index bd5c2c55..a3103c40 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/textarea/placeholder-appearance-textarea-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/textarea/placeholder-appearance-textarea-expected.txt
@@ -8,7 +8,7 @@
       LayoutBR {BR} at (141,96) size 0x0
 layer at (8,8) size 141x32 clip at (9,9) size 139x30
   LayoutTextControl {TEXTAREA} at (0,0) size 141x32 [bgcolor=#FFFFFF] [border: (1px solid #000000)]
-    LayoutBlockFlow {DIV} at (3,3) size 135x26 [color=#A9A9A9]
+    LayoutBlockFlow {DIV} at (3,3) size 135x26 [color=#757575]
       LayoutText {#text} at (0,0) size 38x26
         text run at (0,0) width 24: "first \x{D}"
         text run at (23,0) width 1: " "
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/textarea/textarea-placeholder-visibility-1-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/textarea/textarea-placeholder-visibility-1-expected.png
index 36df33c..f5deea0e 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/textarea/textarea-placeholder-visibility-1-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/textarea/textarea-placeholder-visibility-1-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/textarea/textarea-placeholder-visibility-1-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/textarea/textarea-placeholder-visibility-1-expected.txt
index 3b0ccbf..db5b2de 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/textarea/textarea-placeholder-visibility-1-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/textarea/textarea-placeholder-visibility-1-expected.txt
@@ -11,7 +11,7 @@
         LayoutText {#text} at (0,0) size 0x0
 layer at (8,42) size 141x32 clip at (9,43) size 139x30
   LayoutTextControl {TEXTAREA} at (0,0) size 141x32 [bgcolor=#FFFFFF] [border: (1px solid #000000)]
-    LayoutBlockFlow {DIV} at (3,3) size 135x13 [color=#A9A9A9]
+    LayoutBlockFlow {DIV} at (3,3) size 135x13 [color=#757575]
       LayoutText {#text} at (0,0) size 62x13
         text run at (0,0) width 62: "Placeholder"
     LayoutBlockFlow {DIV} at (3,3) size 135x13
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/textarea/textarea-placeholder-visibility-2-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/textarea/textarea-placeholder-visibility-2-expected.png
index fcae762..ce4754b 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/textarea/textarea-placeholder-visibility-2-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/textarea/textarea-placeholder-visibility-2-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/textarea/textarea-placeholder-visibility-2-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/textarea/textarea-placeholder-visibility-2-expected.txt
index e757c65..88a7b57 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/textarea/textarea-placeholder-visibility-2-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/textarea/textarea-placeholder-visibility-2-expected.txt
@@ -11,7 +11,7 @@
         LayoutText {#text} at (0,0) size 0x0
 layer at (8,42) size 141x32 clip at (9,43) size 139x30
   LayoutTextControl {TEXTAREA} at (0,0) size 141x32 [bgcolor=#FFFFFF] [border: (1px solid #000000)]
-    LayoutBlockFlow {DIV} at (3,3) size 135x13 [color=#A9A9A9]
+    LayoutBlockFlow {DIV} at (3,3) size 135x13 [color=#757575]
       LayoutText {#text} at (0,0) size 62x13
         text run at (0,0) width 62: "Placeholder"
     LayoutBlockFlow {DIV} at (3,3) size 135x13
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/css/text-overflow-input-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/css/text-overflow-input-expected.png
index a8ec183..e71b9fb 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/css/text-overflow-input-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/css/text-overflow-input-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/css/text-overflow-input-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/css/text-overflow-input-expected.txt
index b8d78db..649f422a 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/css/text-overflow-input-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/css/text-overflow-input-expected.txt
@@ -105,13 +105,13 @@
           text run at (619,42) width 5: " "
         LayoutBR {BR} at (0,0) size 0x0
 layer at (10,71) size 169x16 scrollWidth 317
-  LayoutBlockFlow {DIV} at (2,3) size 169x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (2,3) size 169x16 [color=#757575]
     LayoutText {#text} at (0,0) size 317x16
       text run at (0,0) width 317: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (10,71) size 169x16
   LayoutBlockFlow {DIV} at (2,3) size 169x16
 layer at (188,71) size 156x16 scrollWidth 317
-  LayoutBlockFlow {DIV} at (3,3) size 156x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 156x16 [color=#757575]
     LayoutText {#text} at (0,0) size 317x16
       text run at (0,0) width 317: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (188,71) size 156x16
@@ -129,13 +129,13 @@
     LayoutText {#text} at (0,0) size 275x16
       text run at (0,0) width 275: "\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}"
 layer at (10,115) size 169x16 scrollX 148.00 scrollWidth 317
-  LayoutBlockFlow {DIV} at (2,3) size 169x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (2,3) size 169x16 [color=#757575]
     LayoutText {#text} at (-148,0) size 317x16
       text run at (-148,0) width 317: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (10,115) size 169x16
   LayoutBlockFlow {DIV} at (2,3) size 169x16
 layer at (200,115) size 157x16 scrollX 160.00 scrollWidth 317
-  LayoutBlockFlow {DIV} at (15,3) size 157x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (15,3) size 157x16 [color=#757575]
     LayoutText {#text} at (-160,0) size 317x16
       text run at (-160,0) width 317: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (200,115) size 157x16
@@ -153,13 +153,13 @@
     LayoutText {#text} at (-106,0) size 275x16
       text run at (-106,0) width 275 RTL: "\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}"
 layer at (10,193) size 169x16 scrollWidth 317
-  LayoutBlockFlow {DIV} at (2,3) size 169x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (2,3) size 169x16 [color=#757575]
     LayoutText {#text} at (0,0) size 317x16
       text run at (0,0) width 317: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (10,193) size 169x16
   LayoutBlockFlow {DIV} at (2,3) size 169x16
 layer at (188,193) size 156x16 scrollWidth 317
-  LayoutBlockFlow {DIV} at (3,3) size 156x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 156x16 [color=#757575]
     LayoutText {#text} at (0,0) size 317x16
       text run at (0,0) width 317: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (188,193) size 156x16
@@ -177,13 +177,13 @@
     LayoutText {#text} at (0,0) size 275x16
       text run at (0,0) width 275: "\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}"
 layer at (10,237) size 169x16 scrollX 148.00 scrollWidth 317
-  LayoutBlockFlow {DIV} at (2,3) size 169x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (2,3) size 169x16 [color=#757575]
     LayoutText {#text} at (-148,0) size 317x16
       text run at (-148,0) width 317: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (10,237) size 169x16
   LayoutBlockFlow {DIV} at (2,3) size 169x16
 layer at (200,237) size 157x16 scrollX 160.00 scrollWidth 317
-  LayoutBlockFlow {DIV} at (15,3) size 157x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (15,3) size 157x16 [color=#757575]
     LayoutText {#text} at (-160,0) size 317x16
       text run at (-160,0) width 317: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (200,237) size 157x16
@@ -201,7 +201,7 @@
     LayoutText {#text} at (-106,0) size 275x16
       text run at (-106,0) width 275 RTL: "\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}"
 layer at (256,315) size 169x16 scrollWidth 317
-  LayoutBlockFlow {DIV} at (2,3) size 169x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (2,3) size 169x16 [color=#757575]
     LayoutText {#text} at (0,0) size 317x16
       text run at (0,0) width 317: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (256,315) size 169x16
@@ -211,7 +211,7 @@
     LayoutText {#text} at (0,0) size 317x16
       text run at (0,0) width 317: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (280,337) size 169x16 scrollWidth 317
-  LayoutBlockFlow {DIV} at (2,3) size 169x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (2,3) size 169x16 [color=#757575]
     LayoutText {#text} at (0,0) size 317x16
       text run at (0,0) width 317: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
 layer at (280,337) size 169x16
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/forms/placeholder-position-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/forms/placeholder-position-expected.png
index 04b3987d..adf5cd8 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/forms/placeholder-position-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/forms/placeholder-position-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/forms/placeholder-position-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/forms/placeholder-position-expected.txt
index def686e0..0d36f75 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/forms/placeholder-position-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/forms/placeholder-position-expected.txt
@@ -60,61 +60,61 @@
       LayoutBR {BR} at (531,320) size 0x0
       LayoutBR {BR} at (173,356) size 0x0
 layer at (11,11) size 156x16
-  LayoutBlockFlow {DIV} at (3,3) size 156x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 156x16 [color=#757575]
     LayoutText {#text} at (0,0) size 66x16
       text run at (0,0) width 66: "placeholder"
 layer at (11,11) size 156x16
   LayoutBlockFlow {DIV} at (0,0) size 156x16
 layer at (10,33) size 99x16
-  LayoutBlockFlow {DIV} at (2,3) size 99x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (2,3) size 99x16 [color=#757575]
     LayoutText {#text} at (0,0) size 66x16
       text run at (0,0) width 66: "placeholder"
 layer at (10,33) size 99x16
   LayoutBlockFlow {DIV} at (2,3) size 99x16
 layer at (117,33) size 99x16
-  LayoutBlockFlow {DIV} at (2,3) size 99x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (2,3) size 99x16 [color=#757575]
     LayoutText {#text} at (0,0) size 66x16
       text run at (0,0) width 66: "placeholder"
 layer at (117,33) size 99x16
   LayoutBlockFlow {DIV} at (2,3) size 99x16
 layer at (224,33) size 169x16
-  LayoutBlockFlow {DIV} at (2,3) size 169x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (2,3) size 169x16 [color=#757575]
     LayoutText {#text} at (0,0) size 105x16
       text run at (0,0) width 105: "\x{65E5}\x{672C}\x{8A9E}placeholder"
 layer at (224,33) size 169x16
   LayoutBlockFlow {DIV} at (2,3) size 169x16
 layer at (23,55) size 157x16
-  LayoutBlockFlow {DIV} at (15,3) size 157x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (15,3) size 157x16 [color=#757575]
     LayoutText {#text} at (91,0) size 66x16
       text run at (91,0) width 66: "placeholder"
 layer at (23,55) size 157x16
   LayoutBlockFlow {DIV} at (0,0) size 157x16
 layer at (11,77) size 156x16
-  LayoutBlockFlow {DIV} at (3,3) size 156x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (3,3) size 156x16 [color=#757575]
     LayoutText {#text} at (0,0) size 66x16
       text run at (0,0) width 66: "placeholder"
 layer at (11,77) size 156x16
   LayoutBlockFlow {DIV} at (0,0) size 156x16
 layer at (8,96) size 179x36 clip at (9,97) size 177x34
   LayoutTextControl {TEXTAREA} at (0,88) size 179x36 [bgcolor=#FFFFFF] [border: (1px solid #A9A9A9)]
-    LayoutBlockFlow {DIV} at (3,3) size 175x16 [color=#A9A9A9]
+    LayoutBlockFlow {DIV} at (3,3) size 175x16 [color=#757575]
       LayoutText {#text} at (0,0) size 88x16
         text run at (0,0) width 88: "placeholder"
     LayoutBlockFlow {DIV} at (3,3) size 175x16
 layer at (10,135) size 169x16
-  LayoutBlockFlow {DIV} at (2,3) size 169x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (2,3) size 169x16 [color=#757575]
     LayoutText {#text} at (0,0) size 66x16
       text run at (0,0) width 66: "placeholder"
 layer at (10,135) size 169x16
   LayoutBlockFlow {DIV} at (2,3) size 169x16
 layer at (8,168) size 179x49 clip at (9,169) size 177x47
   LayoutTextControl {TEXTAREA} at (0,160) size 179x49 [bgcolor=#FFFFFF] [border: (1px solid #A9A9A9)]
-    LayoutBlockFlow {DIV} at (3,16) size 175x16 [color=#A9A9A9]
+    LayoutBlockFlow {DIV} at (3,16) size 175x16 [color=#757575]
       LayoutText {#text} at (0,0) size 88x16
         text run at (0,0) width 88: "placeholder"
     LayoutBlockFlow {DIV} at (3,16) size 175x16
 layer at (18,228) size 173x17
-  LayoutBlockFlow {DIV} at (5,6) size 173x17 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (5,6) size 173x17 [color=#757575]
     LayoutText {#text} at (0,0) size 75x17
       text run at (0,0) width 75: "placeholder"
 layer at (18,228) size 173x17
@@ -124,25 +124,25 @@
     LayoutText {#text} at (0,4) size 32x16
       text run at (0,4) width 32: "Value"
 layer at (187,263) size 169x16
-  LayoutBlockFlow {DIV} at (2,7) size 169x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (2,7) size 169x16 [color=#757575]
     LayoutText {#text} at (0,0) size 66x16
       text run at (0,0) width 66: "placeholder"
 layer at (187,259) size 169x25
   LayoutBlockFlow {DIV} at (2,3) size 169x25
 layer at (364,264) size 169x16
-  LayoutBlockFlow {DIV} at (2,4.50) size 169x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (2,4.50) size 169x16 [color=#757575]
     LayoutText {#text} at (0,0) size 66x16
       text run at (0,0) width 66: "placeholder"
 layer at (364,264) size 169x16
   LayoutBlockFlow {DIV} at (2,4.50) size 169x16
 layer at (541,263) size 169x16
-  LayoutBlockFlow {DIV} at (2,4) size 169x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (2,4) size 169x16 [color=#757575]
     LayoutText {#text} at (0,0) size 66x16
       text run at (0,0) width 66: "placeholder"
 layer at (541,259) size 169x25
   LayoutBlockFlow {DIV} at (2,0) size 169x25
 layer at (10,292) size 169x16
-  LayoutBlockFlow {DIV} at (2,4.50) size 169x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (2,4.50) size 169x16 [color=#757575]
     LayoutText {#text} at (0,0) size 66x16
       text run at (0,0) width 66: "placeholder"
 layer at (10,292) size 169x16
@@ -152,13 +152,13 @@
     LayoutText {#text} at (68,0) size 33x16
       text run at (68,0) width 33: "Value"
 layer at (187,315) size 169x16
-  LayoutBlockFlow {DIV} at (2,3) size 169x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (2,3) size 169x16 [color=#757575]
     LayoutText {#text} at (51,0) size 67x16
       text run at (51,0) width 67: "placeholder"
 layer at (187,315) size 169x16
   LayoutBlockFlow {DIV} at (2,3) size 169x16
 layer at (364,315) size 169x16
-  LayoutBlockFlow {DIV} at (2,3) size 169x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (2,3) size 169x16 [color=#757575]
     LayoutText {#text} at (51,0) size 67x16
       text run at (51,0) width 67: "placeholder"
 layer at (364,315) size 169x16
@@ -172,7 +172,7 @@
 layer at (8,334) size 173x36
   LayoutTextControl {INPUT} at (0,326) size 173x36 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)]
 layer at (10,351) size 169x16
-  LayoutBlockFlow {DIV} at (2,17) size 169x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (2,17) size 169x16 [color=#757575]
     LayoutText {#text} at (0,0) size 66x16
       text run at (0,0) width 66: "placeholder"
 layer at (10,351) size 169x16
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/forms/search/search-appearance-basic-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/forms/search/search-appearance-basic-expected.png
index e5649d33..b8d8926 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/forms/search/search-appearance-basic-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/forms/search/search-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/forms/search/search-appearance-basic-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/forms/search/search-appearance-basic-expected.txt
index c9b6142a..2eeee72 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/forms/search/search-appearance-basic-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/forms/search/search-appearance-basic-expected.txt
@@ -162,7 +162,7 @@
     LayoutText {#text} at (0,0) size 38x30
       text run at (0,0) width 38: "foo"
 layer at (30,373) size 129x13
-  LayoutBlockFlow {DIV} at (18,4) size 129x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (18,4) size 129x13 [color=#757575]
     LayoutText {#text} at (0,0) size 86x13
       text run at (0,0) width 86: "Search for Events"
 layer at (30,373) size 129x13
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/forms/text/input-placeholder-visibility-1-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/forms/text/input-placeholder-visibility-1-expected.png
index 61b7f84..f41afda 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/forms/text/input-placeholder-visibility-1-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/forms/text/input-placeholder-visibility-1-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/forms/text/input-placeholder-visibility-1-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/forms/text/input-placeholder-visibility-1-expected.txt
index f035fdc..037a9ae 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/forms/text/input-placeholder-visibility-1-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/forms/text/input-placeholder-visibility-1-expected.txt
@@ -11,7 +11,7 @@
         LayoutText {#text} at (0,0) size 0x0
         LayoutText {#text} at (0,0) size 0x0
 layer at (10,45) size 169x16
-  LayoutBlockFlow {DIV} at (2,3) size 169x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (2,3) size 169x16 [color=#757575]
     LayoutText {#text} at (0,0) size 68x16
       text run at (0,0) width 68: "Placeholder"
 layer at (10,45) size 169x16
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/forms/text/input-placeholder-visibility-3-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/forms/text/input-placeholder-visibility-3-expected.png
index aa0ae69..79955e0 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/forms/text/input-placeholder-visibility-3-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/forms/text/input-placeholder-visibility-3-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/forms/text/input-placeholder-visibility-3-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/forms/text/input-placeholder-visibility-3-expected.txt
index 0faa094..51cf63d 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/forms/text/input-placeholder-visibility-3-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/forms/text/input-placeholder-visibility-3-expected.txt
@@ -11,7 +11,7 @@
         LayoutText {#text} at (0,0) size 0x0
         LayoutText {#text} at (0,0) size 0x0
 layer at (10,45) size 169x16
-  LayoutBlockFlow {DIV} at (2,3) size 169x16 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (2,3) size 169x16 [color=#757575]
     LayoutText {#text} at (0,0) size 68x16
       text run at (0,0) width 68: "Placeholder"
 layer at (10,45) size 169x16
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/forms/textarea/placeholder-appearance-textarea-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/forms/textarea/placeholder-appearance-textarea-expected.png
index e595734..f270d1a 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/forms/textarea/placeholder-appearance-textarea-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/forms/textarea/placeholder-appearance-textarea-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/forms/textarea/placeholder-appearance-textarea-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/forms/textarea/placeholder-appearance-textarea-expected.txt
index 3fda304..8ae1844f 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/forms/textarea/placeholder-appearance-textarea-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/forms/textarea/placeholder-appearance-textarea-expected.txt
@@ -8,7 +8,7 @@
       LayoutBR {BR} at (179,108) size 0x0
 layer at (8,8) size 179x36 clip at (9,9) size 177x34
   LayoutTextControl {TEXTAREA} at (0,0) size 179x36 [bgcolor=#FFFFFF] [border: (1px solid #A9A9A9)]
-    LayoutBlockFlow {DIV} at (3,3) size 175x32 [color=#A9A9A9]
+    LayoutBlockFlow {DIV} at (3,3) size 175x32 [color=#757575]
       LayoutText {#text} at (0,0) size 48x32
         text run at (0,0) width 48: "first \x{D}"
         text run at (48,0) width 0: " "
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/forms/textarea/textarea-placeholder-visibility-1-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/forms/textarea/textarea-placeholder-visibility-1-expected.png
index 546ebcb..59b6446 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/forms/textarea/textarea-placeholder-visibility-1-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/forms/textarea/textarea-placeholder-visibility-1-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/forms/textarea/textarea-placeholder-visibility-1-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/forms/textarea/textarea-placeholder-visibility-1-expected.txt
index f2dd0c8b..a5eecb4 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/forms/textarea/textarea-placeholder-visibility-1-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/forms/textarea/textarea-placeholder-visibility-1-expected.txt
@@ -11,7 +11,7 @@
         LayoutText {#text} at (0,0) size 0x0
 layer at (8,42) size 179x36 clip at (9,43) size 177x34
   LayoutTextControl {TEXTAREA} at (0,0) size 179x36 [bgcolor=#FFFFFF] [border: (1px solid #A9A9A9)]
-    LayoutBlockFlow {DIV} at (3,3) size 175x16 [color=#A9A9A9]
+    LayoutBlockFlow {DIV} at (3,3) size 175x16 [color=#757575]
       LayoutText {#text} at (0,0) size 88x16
         text run at (0,0) width 88: "Placeholder"
     LayoutBlockFlow {DIV} at (3,3) size 175x16
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/forms/textarea/textarea-placeholder-visibility-2-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/forms/textarea/textarea-placeholder-visibility-2-expected.png
index 167af31..e1f02e4f 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/forms/textarea/textarea-placeholder-visibility-2-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/forms/textarea/textarea-placeholder-visibility-2-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/forms/textarea/textarea-placeholder-visibility-2-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/forms/textarea/textarea-placeholder-visibility-2-expected.txt
index fc46415..87c851f5 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/forms/textarea/textarea-placeholder-visibility-2-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/forms/textarea/textarea-placeholder-visibility-2-expected.txt
@@ -11,7 +11,7 @@
         LayoutText {#text} at (0,0) size 0x0
 layer at (8,42) size 179x36 clip at (9,43) size 177x34
   LayoutTextControl {TEXTAREA} at (0,0) size 179x36 [bgcolor=#FFFFFF] [border: (1px solid #A9A9A9)]
-    LayoutBlockFlow {DIV} at (3,3) size 175x16 [color=#A9A9A9]
+    LayoutBlockFlow {DIV} at (3,3) size 175x16 [color=#757575]
       LayoutText {#text} at (0,0) size 88x16
         text run at (0,0) width 88: "Placeholder"
     LayoutBlockFlow {DIV} at (3,3) size 175x16
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/forms/search/search-appearance-basic-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/forms/search/search-appearance-basic-expected.png
index ccdb1f9..5c4b1dd 100644
--- a/third_party/WebKit/LayoutTests/platform/win7/fast/forms/search/search-appearance-basic-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win7/fast/forms/search/search-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/forms/search/search-appearance-basic-expected.txt b/third_party/WebKit/LayoutTests/platform/win7/fast/forms/search/search-appearance-basic-expected.txt
index 43f2a53..3869490d 100644
--- a/third_party/WebKit/LayoutTests/platform/win7/fast/forms/search/search-appearance-basic-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win7/fast/forms/search/search-appearance-basic-expected.txt
@@ -162,7 +162,7 @@
     LayoutText {#text} at (0,0) size 38x30
       text run at (0,0) width 38: "foo"
 layer at (30,373) size 125x13
-  LayoutBlockFlow {DIV} at (18,4) size 125x13 [color=#A9A9A9]
+  LayoutBlockFlow {DIV} at (18,4) size 125x13 [color=#757575]
     LayoutText {#text} at (0,0) size 86x13
       text run at (0,0) width 86: "Search for Events"
 layer at (30,373) size 125x13
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/forms/text/text-font-height-mismatch-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/forms/text/text-font-height-mismatch-expected.png
index 90bf2351..96dbcc8 100644
--- a/third_party/WebKit/LayoutTests/platform/win7/fast/forms/text/text-font-height-mismatch-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win7/fast/forms/text/text-font-height-mismatch-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/forms/text/text-font-height-mismatch-expected.txt b/third_party/WebKit/LayoutTests/platform/win7/fast/forms/text/text-font-height-mismatch-expected.txt
index c28e5bb3..c90355c 100644
--- a/third_party/WebKit/LayoutTests/platform/win7/fast/forms/text/text-font-height-mismatch-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win7/fast/forms/text/text-font-height-mismatch-expected.txt
@@ -1,4 +1,3 @@
-CONSOLE WARNING: Failed to decode downloaded font: NotoSansCJKjp-Regular-cid03075.otf
 layer at (0,0) size 800x600
   LayoutView at (0,0) size 800x600
 layer at (0,0) size 800x142
@@ -8,20 +7,20 @@
         LayoutText {#text} at (0,0) size 273x17
           text run at (0,0) width 273: "Editable text should be centered vertically."
       LayoutBlockFlow {DIV} at (0,34) size 784x28
-        LayoutTextControl {INPUT} at (0,3) size 195x22 [bgcolor=#FFFFFF] [border: (1px solid #000000)]
-        LayoutTextControl {INPUT} at (195,0) size 195x28 [bgcolor=#FFFFFF] [border: (1px solid #000000)]
+        LayoutTextControl {INPUT} at (0,0) size 236x28 [bgcolor=#FFFFFF] [border: (1px solid #000000)]
+        LayoutTextControl {INPUT} at (236,0) size 236x28 [bgcolor=#FFFFFF] [border: (1px solid #000000)]
       LayoutBlockFlow {DIV} at (0,62) size 784x28
         LayoutTextControl {INPUT} at (0,0) size 294x28 [bgcolor=#FFFFFF] [border: (1px solid #000000)]
       LayoutBlockFlow {DIV} at (0,90) size 784x28
         LayoutTextControl {INPUT} at (0,0) size 199x28 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)]
-layer at (9,52) size 193x24
-  LayoutBlockFlow {DIV} at (1,-1) size 193x24
-    LayoutText {#text} at (0,3) size 74x17
-      text run at (0,3) width 74: "\x{3075} ABCgjy"
-layer at (204,52) size 193x24
-  LayoutBlockFlow {DIV} at (1,2) size 193x24
-    LayoutText {#text} at (0,3) size 74x17
-      text run at (0,3) width 74: "\x{3075} ABCgjy"
+layer at (9,51) size 234x26
+  LayoutBlockFlow {DIV} at (1,1) size 234x26
+    LayoutText {#text} at (0,0) size 74x24
+      text run at (0,0) width 74: "\x{3075} ABCgjy"
+layer at (245,51) size 234x26
+  LayoutBlockFlow {DIV} at (1,1) size 234x26
+    LayoutText {#text} at (0,0) size 74x24
+      text run at (0,0) width 74: "\x{3075} ABCgjy"
 layer at (9,78) size 292x28
   LayoutBlockFlow {DIV} at (1,0) size 292x28
     LayoutText {#text} at (0,0) size 81x27
diff --git a/third_party/WebKit/LayoutTests/svg/css/getComputedStyle-listing-expected.txt b/third_party/WebKit/LayoutTests/svg/css/getComputedStyle-listing-expected.txt
index 24ad52a..6efb0263 100644
--- a/third_party/WebKit/LayoutTests/svg/css/getComputedStyle-listing-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/css/getComputedStyle-listing-expected.txt
@@ -115,7 +115,7 @@
 break-inside: auto
 buffered-rendering: auto
 caption-side: top
-caret-color: auto
+caret-color: rgb(0, 0, 0)
 clear: none
 clip: auto
 clip-path: none
diff --git a/third_party/WebKit/LayoutTests/transitions/position-background-transition.html b/third_party/WebKit/LayoutTests/transitions/position-background-transition.html
index d8c241f..aca1f384 100644
--- a/third_party/WebKit/LayoutTests/transitions/position-background-transition.html
+++ b/third_party/WebKit/LayoutTests/transitions/position-background-transition.html
@@ -18,6 +18,7 @@
 }
 onload = function() {
   var target = document.getElementById('target');
+  target.offsetHeight; // Force style recalc
   target.style.top = '100px';
   target.style.background = 'green';
 }
diff --git a/third_party/WebKit/LayoutTests/transitions/resources/opacity-transform-transitions-inside-iframe-inner.html b/third_party/WebKit/LayoutTests/transitions/resources/opacity-transform-transitions-inside-iframe-inner.html
index 6fd0ebd..93ce2864 100644
--- a/third_party/WebKit/LayoutTests/transitions/resources/opacity-transform-transitions-inside-iframe-inner.html
+++ b/third_party/WebKit/LayoutTests/transitions/resources/opacity-transform-transitions-inside-iframe-inner.html
@@ -40,6 +40,7 @@
     'use strict';
     function runTest()
     {
+        document.body.offsetHeight; // Force style recalc
         var solid_color_overlay = document.getElementById("solid_color_overlay");
         solid_color_overlay.removeAttribute('hidden');
 
diff --git a/third_party/WebKit/LayoutTests/transitions/transition-end-event-helpers.js b/third_party/WebKit/LayoutTests/transitions/transition-end-event-helpers.js
index fa5f352c..f694b4c 100644
--- a/third_party/WebKit/LayoutTests/transitions/transition-end-event-helpers.js
+++ b/third_party/WebKit/LayoutTests/transitions/transition-end-event-helpers.js
@@ -136,6 +136,7 @@
 
   function startTest(expected, callback, maxTime)
   {
+    document.body.offsetHeight; // Force style recalc
     if (callback)
       callback();
     
diff --git a/third_party/WebKit/LayoutTests/transitions/transition-end-event-nested-expected.txt b/third_party/WebKit/LayoutTests/transitions/transition-end-event-nested-expected.txt
index fb9d4ed0..631bbdfd 100644
--- a/third_party/WebKit/LayoutTests/transitions/transition-end-event-nested-expected.txt
+++ b/third_party/WebKit/LayoutTests/transitions/transition-end-event-nested-expected.txt
@@ -1,6 +1,6 @@
 Initiating transitions on various properties of all boxes.
 
-PASS --- [Expected] Property: background-color Target: box2 Elapsed Time: 0.2
-PASS --- [Expected] Property: left Target: box1 Elapsed Time: 0.2
-PASS --- [Expected] Property: width Target: box3 Elapsed Time: 0.3
+PASS --- [Expected] Property: background-color Target: box2 Elapsed Time: 0.06
+PASS --- [Expected] Property: left Target: box1 Elapsed Time: 0.06
+PASS --- [Expected] Property: width Target: box3 Elapsed Time: 0.1
 
diff --git a/third_party/WebKit/LayoutTests/transitions/transition-end-event-nested.html b/third_party/WebKit/LayoutTests/transitions/transition-end-event-nested.html
index 9657bd9a..0c70810 100644
--- a/third_party/WebKit/LayoutTests/transitions/transition-end-event-nested.html
+++ b/third_party/WebKit/LayoutTests/transitions/transition-end-event-nested.html
@@ -9,7 +9,7 @@
       margin: 10px;
       background-color: blue;
       transition-property: width, left, background-color, height, top;
-      transition-duration: 0.2s;
+      transition-duration: 0.06s;
     }
     
     .box1 {
@@ -22,7 +22,7 @@
     
     .box3 {
       width: 150px;
-      transition-duration: 0.3s;
+      transition-duration: 0.1s;
     }
     
   </style>
@@ -31,20 +31,22 @@
     
     var expectedEndEvents = [
       // [property-name, element-id, elapsed-time, listen]
-      ["background-color", "box2", 0.2, false],
-      ["left", "box1", 0.2, false],
-      ["width", "box3", 0.3, false],
+      ["background-color", "box2", 0.06, false],
+      ["left", "box1", 0.06, false],
+      ["width", "box3", 0.1, false],
     ];
     
-    function handleEndEvent2(event)
+    function handleEndEvent3(event)
     {
       recordTransitionEndEvent(event);
     }
 
-    function startTransition2()
+    function handleEndEvent2(event)
     {
+      recordTransitionEndEvent(event);
+
       var box = document.getElementById("box3");
-      box.addEventListener("transitionend", handleEndEvent2, false);
+      box.addEventListener("transitionend", handleEndEvent3, false);
       box.className = "box box3";
     }
 
@@ -52,27 +54,15 @@
     {
       recordTransitionEndEvent(event);
       
-      setTimeout(startTransition2, 100);
-    }
-
-    function startTransition1()
-    {
       var box = document.getElementById("box2");
-      box.addEventListener("transitionend", handleEndEvent1, false);
+      box.addEventListener("transitionend", handleEndEvent2, false);
       box.className = "box box2";
     }
 
-    function handleEndEvent(event)
-    {
-      recordTransitionEndEvent(event);
-      
-      setTimeout(startTransition1, 100);
-    }
-
     function setupTest()
     {
       var box = document.getElementById("box1");
-      box.addEventListener("transitionend", handleEndEvent, false);
+      box.addEventListener("transitionend", handleEndEvent1, false);
       box.className = "box box1";
     }
     
diff --git a/third_party/WebKit/Source/core/animation/CSSInterpolationTypesMap.cpp b/third_party/WebKit/Source/core/animation/CSSInterpolationTypesMap.cpp
index 2c8357f..df699b1a 100644
--- a/third_party/WebKit/Source/core/animation/CSSInterpolationTypesMap.cpp
+++ b/third_party/WebKit/Source/core/animation/CSSInterpolationTypesMap.cpp
@@ -40,14 +40,39 @@
 
 namespace blink {
 
+static const PropertyRegistry::Registration* getRegistration(
+    const PropertyRegistry* registry,
+    const PropertyHandle& property) {
+  DCHECK(property.isCSSCustomProperty());
+  if (!registry) {
+    return nullptr;
+  }
+  return registry->registration(property.customPropertyName());
+}
+
 const InterpolationTypes& CSSInterpolationTypesMap::get(
     const PropertyHandle& property) const {
   using ApplicableTypesMap =
       HashMap<PropertyHandle, std::unique_ptr<const InterpolationTypes>>;
   DEFINE_STATIC_LOCAL(ApplicableTypesMap, applicableTypesMap, ());
   auto entry = applicableTypesMap.find(property);
-  if (entry != applicableTypesMap.end())
-    return *entry->value.get();
+  bool foundEntry = entry != applicableTypesMap.end();
+
+  // Custom property interpolation types may change over time so don't trust the
+  // applicableTypesMap without checking the registry.
+  if (m_registry && property.isCSSCustomProperty()) {
+    const auto* registration = getRegistration(m_registry.get(), property);
+    if (registration) {
+      if (foundEntry) {
+        applicableTypesMap.remove(entry);
+      }
+      return registration->interpolationTypes();
+    }
+  }
+
+  if (foundEntry) {
+    return *entry->value;
+  }
 
   std::unique_ptr<InterpolationTypes> applicableTypes =
       WTF::makeUnique<InterpolationTypes>();
@@ -277,10 +302,11 @@
       applicableTypes->push_back(
           WTF::makeUnique<CSSTransformInterpolationType>(usedProperty));
       break;
+    case CSSPropertyVariable:
+      DCHECK_EQ(getRegistration(m_registry.get(), property), nullptr);
+      break;
     default:
       DCHECK(!CSSPropertyMetadata::isInterpolableProperty(cssProperty));
-      // TODO(crbug.com/671904): Look up m_registry for custom property
-      // InterpolationTypes.
       break;
   }
 
@@ -288,7 +314,7 @@
       WTF::makeUnique<CSSValueInterpolationType>(usedProperty));
 
   auto addResult = applicableTypesMap.add(property, std::move(applicableTypes));
-  return *addResult.storedValue->value.get();
+  return *addResult.storedValue->value;
 }
 
 size_t CSSInterpolationTypesMap::version() const {
diff --git a/third_party/WebKit/Source/core/animation/InterpolationType.h b/third_party/WebKit/Source/core/animation/InterpolationType.h
index c7e9cb1..d11a8af2 100644
--- a/third_party/WebKit/Source/core/animation/InterpolationType.h
+++ b/third_party/WebKit/Source/core/animation/InterpolationType.h
@@ -31,8 +31,6 @@
   WTF_MAKE_NONCOPYABLE(InterpolationType);
 
  public:
-  virtual ~InterpolationType() { NOTREACHED(); }
-
   PropertyHandle getProperty() const { return m_property; }
 
   // ConversionCheckers are returned from calls to maybeConvertPairwise() and
diff --git a/third_party/WebKit/Source/core/css/BUILD.gn b/third_party/WebKit/Source/core/css/BUILD.gn
index 70154f7..5a4e154 100644
--- a/third_party/WebKit/Source/core/css/BUILD.gn
+++ b/third_party/WebKit/Source/core/css/BUILD.gn
@@ -351,6 +351,7 @@
     "properties/CSSPropertyAPITranslate.cpp",
     "properties/CSSPropertyAPIWebkitPadding.cpp",
     "properties/CSSPropertyAPIWillChange.cpp",
+    "properties/CSSPropertyAPIZIndex.cpp",
     "properties/CSSPropertyAPIZoom.cpp",
     "properties/CSSPropertyDescriptor.h",
     "resolver/AnimatedStyleBuilder.cpp",
diff --git a/third_party/WebKit/Source/core/css/CSSProperties.in b/third_party/WebKit/Source/core/css/CSSProperties.in
index 19d117bca..bffe2066 100644
--- a/third_party/WebKit/Source/core/css/CSSProperties.in
+++ b/third_party/WebKit/Source/core/css/CSSProperties.in
@@ -473,7 +473,7 @@
 word-spacing interpolable, inherited, initial=initialLetterWordSpacing, converter=convertSpacing
 // UAs must treat 'word-wrap' as an alternate name for the 'overflow-wrap' property. So using the same handlers.
 word-wrap inherited, name_for_methods=OverflowWrap
-z-index interpolable, type_name=int, custom_all
+z-index interpolable, type_name=int, custom_all, api_class
 
 // CSS logical props
 inline-size direction_aware
diff --git a/third_party/WebKit/Source/core/css/ComputedStyleCSSValueMapping.cpp b/third_party/WebKit/Source/core/css/ComputedStyleCSSValueMapping.cpp
index 7801d79..68f2a0b 100644
--- a/third_party/WebKit/Source/core/css/ComputedStyleCSSValueMapping.cpp
+++ b/third_party/WebKit/Source/core/css/ComputedStyleCSSValueMapping.cpp
@@ -2205,11 +2205,13 @@
     case CSSPropertyCaptionSide:
       return CSSIdentifierValue::create(style.captionSide());
     case CSSPropertyCaretColor:
-      if (style.caretColor().isCurrentColor())
-        return CSSIdentifierValue::create(CSSValueCurrentcolor);
-      if (style.caretColor().isAutoColor())
-        return CSSIdentifierValue::create(CSSValueAuto);
-      return CSSColorValue::create(style.caretColor().color().rgb());
+      return allowVisitedStyle
+                 ? CSSColorValue::create(
+                       style.visitedDependentColor(CSSPropertyCaretColor).rgb())
+                 : currentColorOrValidColor(
+                       style, style.caretColor().isAutoColor()
+                                  ? StyleColor::currentColor()
+                                  : style.caretColor().toStyleColor());
     case CSSPropertyClear:
       return CSSIdentifierValue::create(style.clear());
     case CSSPropertyColor:
diff --git a/third_party/WebKit/Source/core/css/PropertyRegistration.cpp b/third_party/WebKit/Source/core/css/PropertyRegistration.cpp
index ae24ecec..410ae2c9 100644
--- a/third_party/WebKit/Source/core/css/PropertyRegistration.cpp
+++ b/third_party/WebKit/Source/core/css/PropertyRegistration.cpp
@@ -4,6 +4,7 @@
 
 #include "core/css/PropertyRegistration.h"
 
+#include "core/animation/CSSValueInterpolationType.h"
 #include "core/css/CSSSyntaxDescriptor.h"
 #include "core/css/CSSValueList.h"
 #include "core/css/CSSVariableReferenceValue.h"
@@ -56,6 +57,17 @@
   return true;
 }
 
+InterpolationTypes interpolationTypesForSyntax(const AtomicString& propertyName,
+                                               const CSSSyntaxDescriptor&) {
+  PropertyHandle property(propertyName);
+  InterpolationTypes interpolationTypes;
+  // TODO(alancutter): Read the syntax descriptor and add the appropriate
+  // CSSInterpolationType subclasses.
+  interpolationTypes.append(
+      WTF::makeUnique<CSSValueInterpolationType>(property));
+  return interpolationTypes;
+}
+
 void PropertyRegistration::registerProperty(
     ExecutionContext* executionContext,
     const PropertyDescriptor& descriptor,
@@ -89,6 +101,9 @@
     return;
   }
 
+  InterpolationTypes interpolationTypes =
+      interpolationTypesForSyntax(atomicName, syntaxDescriptor);
+
   if (descriptor.hasInitialValue()) {
     CSSTokenizer tokenizer(descriptor.initialValue());
     bool isAnimationTainted = false;
@@ -108,9 +123,9 @@
     }
     RefPtr<CSSVariableData> initialVariableData = CSSVariableData::create(
         tokenizer.tokenRange(), isAnimationTainted, false);
-    registry.registerProperty(atomicName, syntaxDescriptor,
-                              descriptor.inherits(), initial,
-                              initialVariableData.release());
+    registry.registerProperty(
+        atomicName, syntaxDescriptor, descriptor.inherits(), initial,
+        initialVariableData.release(), std::move(interpolationTypes));
   } else {
     if (!syntaxDescriptor.isTokenStream()) {
       exceptionState.throwDOMException(
@@ -119,7 +134,8 @@
       return;
     }
     registry.registerProperty(atomicName, syntaxDescriptor,
-                              descriptor.inherits(), nullptr, nullptr);
+                              descriptor.inherits(), nullptr, nullptr,
+                              std::move(interpolationTypes));
   }
 
   // TODO(timloh): Invalidate only elements with this custom property set
diff --git a/third_party/WebKit/Source/core/css/PropertyRegistry.cpp b/third_party/WebKit/Source/core/css/PropertyRegistry.cpp
index 6922325..0d96374 100644
--- a/third_party/WebKit/Source/core/css/PropertyRegistry.cpp
+++ b/third_party/WebKit/Source/core/css/PropertyRegistry.cpp
@@ -11,10 +11,12 @@
     const CSSSyntaxDescriptor& syntax,
     bool inherits,
     const CSSValue* initial,
-    PassRefPtr<CSSVariableData> initialVariableData) {
+    PassRefPtr<CSSVariableData> initialVariableData,
+    InterpolationTypes interpolationTypes) {
   DCHECK(!registration(name));
   m_registrations.set(name, new Registration(syntax, inherits, initial,
-                                             std::move(initialVariableData)));
+                                             std::move(initialVariableData),
+                                             std::move(interpolationTypes)));
 }
 
 const PropertyRegistry::Registration* PropertyRegistry::registration(
diff --git a/third_party/WebKit/Source/core/css/PropertyRegistry.h b/third_party/WebKit/Source/core/css/PropertyRegistry.h
index 0c33122..6941e6b 100644
--- a/third_party/WebKit/Source/core/css/PropertyRegistry.h
+++ b/third_party/WebKit/Source/core/css/PropertyRegistry.h
@@ -5,6 +5,8 @@
 #ifndef PropertyRegistry_h
 #define PropertyRegistry_h
 
+#include "core/animation/InterpolationType.h"
+#include "core/animation/InterpolationTypesMap.h"
 #include "core/css/CSSSyntaxDescriptor.h"
 #include "core/css/CSSValue.h"
 #include "core/css/CSSVariableData.h"
@@ -24,11 +26,13 @@
     Registration(const CSSSyntaxDescriptor& syntax,
                  bool inherits,
                  const CSSValue* initial,
-                 PassRefPtr<CSSVariableData> initialVariableData)
+                 PassRefPtr<CSSVariableData> initialVariableData,
+                 InterpolationTypes interpolationTypes)
         : m_syntax(syntax),
           m_inherits(inherits),
           m_initial(initial),
-          m_initialVariableData(initialVariableData) {}
+          m_initialVariableData(initialVariableData),
+          m_interpolationTypes(std::move(interpolationTypes)) {}
 
     const CSSSyntaxDescriptor& syntax() const { return m_syntax; }
     bool inherits() const { return m_inherits; }
@@ -36,6 +40,9 @@
     CSSVariableData* initialVariableData() const {
       return m_initialVariableData.get();
     }
+    const InterpolationTypes& interpolationTypes() const {
+      return m_interpolationTypes;
+    }
 
     DEFINE_INLINE_TRACE() { visitor->trace(m_initial); }
 
@@ -44,13 +51,15 @@
     const bool m_inherits;
     const Member<const CSSValue> m_initial;
     const RefPtr<CSSVariableData> m_initialVariableData;
+    const InterpolationTypes m_interpolationTypes;
   };
 
   void registerProperty(const AtomicString&,
                         const CSSSyntaxDescriptor&,
                         bool inherits,
                         const CSSValue* initial,
-                        PassRefPtr<CSSVariableData> initialVariableData);
+                        PassRefPtr<CSSVariableData> initialVariableData,
+                        InterpolationTypes);
   const Registration* registration(const AtomicString&) const;
   size_t registrationCount() const { return m_registrations.size(); }
 
diff --git a/third_party/WebKit/Source/core/css/html.css b/third_party/WebKit/Source/core/css/html.css
index e21bf12..99c3ae22 100644
--- a/third_party/WebKit/Source/core/css/html.css
+++ b/third_party/WebKit/Source/core/css/html.css
@@ -504,7 +504,7 @@
 
 ::-webkit-input-placeholder {
     -webkit-text-security: none;
-    color: darkGray;
+    color: #757575;
     pointer-events: none !important;
 }
 
diff --git a/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp b/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp
index 13def8e6..d3cdd8655 100644
--- a/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp
+++ b/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp
@@ -1243,12 +1243,6 @@
   return m_range.atEnd();
 }
 
-static CSSValue* consumeZIndex(CSSParserTokenRange& range) {
-  if (range.peek().id() == CSSValueAuto)
-    return consumeIdent(range);
-  return consumeInteger(range);
-}
-
 static CSSShadowValue* parseSingleShadow(CSSParserTokenRange& range,
                                          CSSParserMode cssParserMode,
                                          bool allowInset,
@@ -3519,8 +3513,6 @@
           allowQuirkyLengths ? UnitlessQuirk::Allow : UnitlessQuirk::Forbid;
       return consumeBorderWidth(m_range, m_context.mode(), unitless);
     }
-    case CSSPropertyZIndex:
-      return consumeZIndex(m_range);
     case CSSPropertyTextShadow:
     case CSSPropertyBoxShadow:
       return consumeShadow(m_range, m_context.mode(),
diff --git a/third_party/WebKit/Source/core/css/properties/CSSPropertyAPIZIndex.cpp b/third_party/WebKit/Source/core/css/properties/CSSPropertyAPIZIndex.cpp
new file mode 100644
index 0000000..a529cb9f
--- /dev/null
+++ b/third_party/WebKit/Source/core/css/properties/CSSPropertyAPIZIndex.cpp
@@ -0,0 +1,19 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "core/css/properties/CSSPropertyAPIZIndex.h"
+
+#include "core/css/parser/CSSPropertyParserHelpers.h"
+
+namespace blink {
+
+const CSSValue* CSSPropertyAPIZIndex::parseSingleValue(
+    CSSParserTokenRange& range,
+    const CSSParserContext& context) {
+  if (range.peek().id() == CSSValueAuto)
+    return CSSPropertyParserHelpers::consumeIdent(range);
+  return CSSPropertyParserHelpers::consumeInteger(range);
+}
+
+}  // namespace blink
diff --git a/third_party/WebKit/Source/core/editing/EditingStyle.cpp b/third_party/WebKit/Source/core/editing/EditingStyle.cpp
index 273f738..97a8d31 100644
--- a/third_party/WebKit/Source/core/editing/EditingStyle.cpp
+++ b/third_party/WebKit/Source/core/editing/EditingStyle.cpp
@@ -487,7 +487,7 @@
 
   if (node && node->ensureComputedStyle()) {
     const ComputedStyle* computedStyle = node->ensureComputedStyle();
-    removeTextFillAndStrokeColorsIfNeeded(computedStyle);
+    removeInheritedColorsIfNeeded(computedStyle);
     replaceFontSizeByKeywordIfPossible(computedStyle, computedStyleAtPosition);
   }
 
@@ -495,15 +495,19 @@
   extractFontSizeDelta();
 }
 
-void EditingStyle::removeTextFillAndStrokeColorsIfNeeded(
+void EditingStyle::removeInheritedColorsIfNeeded(
     const ComputedStyle* computedStyle) {
   // If a node's text fill color is currentColor, then its children use
   // their font-color as their text fill color (they don't
   // inherit it).  Likewise for stroke color.
+  // Similar thing happens for caret-color if it's auto or currentColor.
   if (computedStyle->textFillColor().isCurrentColor())
     m_mutableStyle->removeProperty(CSSPropertyWebkitTextFillColor);
   if (computedStyle->textStrokeColor().isCurrentColor())
     m_mutableStyle->removeProperty(CSSPropertyWebkitTextStrokeColor);
+  if (computedStyle->caretColor().isAutoColor() ||
+      computedStyle->caretColor().isCurrentColor())
+    m_mutableStyle->removeProperty(CSSPropertyCaretColor);
 }
 
 void EditingStyle::setProperty(CSSPropertyID propertyID,
diff --git a/third_party/WebKit/Source/core/editing/EditingStyle.h b/third_party/WebKit/Source/core/editing/EditingStyle.h
index f4e7add91..336512a 100644
--- a/third_party/WebKit/Source/core/editing/EditingStyle.h
+++ b/third_party/WebKit/Source/core/editing/EditingStyle.h
@@ -184,7 +184,7 @@
   explicit EditingStyle(const StylePropertySet*);
   EditingStyle(CSSPropertyID, const String& value);
   void init(Node*, PropertiesToInclude);
-  void removeTextFillAndStrokeColorsIfNeeded(const ComputedStyle*);
+  void removeInheritedColorsIfNeeded(const ComputedStyle*);
   void setProperty(CSSPropertyID, const String& value, bool important = false);
   void replaceFontSizeByKeywordIfPossible(const ComputedStyle*,
                                           CSSComputedStyleDeclaration*);
diff --git a/third_party/WebKit/Source/platform/BUILD.gn b/third_party/WebKit/Source/platform/BUILD.gn
index aa663aa..150623d 100644
--- a/third_party/WebKit/Source/platform/BUILD.gn
+++ b/third_party/WebKit/Source/platform/BUILD.gn
@@ -1083,6 +1083,7 @@
     "image-encoders/JPEGImageEncoder.h",
     "image-encoders/PNGImageEncoder.cpp",
     "image-encoders/PNGImageEncoder.h",
+    "image-encoders/RGBAtoRGB.h",
     "image-encoders/WEBPImageEncoder.cpp",
     "image-encoders/WEBPImageEncoder.h",
     "instrumentation/tracing/MemoryCacheDumpProvider.cpp",
@@ -1769,6 +1770,7 @@
     "image-decoders/jpeg/JPEGImageDecoderTest.cpp",
     "image-decoders/png/PNGImageDecoderTest.cpp",
     "image-decoders/webp/WEBPImageDecoderTest.cpp",
+    "image-encoders/JPEGImageEncoderTest.cpp",
     "instrumentation/tracing/TracedValueTest.cpp",
     "instrumentation/tracing/web_process_memory_dump_test.cc",
     "json/JSONParserTest.cpp",
diff --git a/third_party/WebKit/Source/platform/image-encoders/JPEGImageEncoder.cpp b/third_party/WebKit/Source/platform/image-encoders/JPEGImageEncoder.cpp
index 0a70e73d..00e38191 100644
--- a/third_party/WebKit/Source/platform/image-encoders/JPEGImageEncoder.cpp
+++ b/third_party/WebKit/Source/platform/image-encoders/JPEGImageEncoder.cpp
@@ -33,6 +33,7 @@
 #include "SkColorPriv.h"
 #include "platform/geometry/IntSize.h"
 #include "platform/graphics/ImageBuffer.h"
+#include "platform/image-encoders/RGBAtoRGB.h"
 #include "wtf/CurrentTime.h"
 #include "wtf/PtrUtil.h"
 #include <memory>
@@ -45,6 +46,81 @@
 
 namespace blink {
 
+void RGBAtoRGBScalar(const unsigned char* pixels,
+                     unsigned pixelCount,
+                     unsigned char* output) {
+  // Per <canvas> spec, composite the input image pixels source-over on black.
+  for (; pixelCount-- > 0; pixels += 4) {
+    unsigned char alpha = pixels[3];
+    if (alpha != 255) {
+      *output++ = SkMulDiv255Round(pixels[0], alpha);
+      *output++ = SkMulDiv255Round(pixels[1], alpha);
+      *output++ = SkMulDiv255Round(pixels[2], alpha);
+    } else {
+      *output++ = pixels[0];
+      *output++ = pixels[1];
+      *output++ = pixels[2];
+    }
+  }
+}
+
+// TODO(cavalcantii): use regular macro, see https://crbug.com/673067.
+#ifdef __ARM_NEON__
+void RGBAtoRGBNeon(const unsigned char* input,
+                   const unsigned pixelCount,
+                   unsigned char* output) {
+  const unsigned pixelsPerLoad = 16;
+  const unsigned rgbaStep = pixelsPerLoad * 4, rgbStep = pixelsPerLoad * 3;
+  // Input registers.
+  uint8x16x4_t rgba;
+  // Output registers.
+  uint8x16x3_t rgb;
+  // Intermediate registers.
+  uint8x8_t low, high;
+  uint8x16_t result;
+  unsigned counter;
+  auto transformColor = [&](size_t channel) {
+    // Extracts the low/high part of the 128 bits.
+    low = vget_low_u8(rgba.val[channel]);
+    high = vget_high_u8(rgba.val[channel]);
+    // Scale the color and combine.
+    uint16x8_t temp = vmull_u8(low, vget_low_u8(rgba.val[3]));
+    low = vraddhn_u16(temp, vrshrq_n_u16(temp, 8));
+    temp = vmull_u8(high, vget_high_u8(rgba.val[3]));
+    high = vraddhn_u16(temp, vrshrq_n_u16(temp, 8));
+    result = vcombine_u8(low, high);
+    // Write back the channel to a 128 bits register.
+    rgb.val[channel] = result;
+  };
+
+  for (counter = 0; counter + pixelsPerLoad <= pixelCount;
+       counter += pixelsPerLoad) {
+    // Reads 16 pixels at once, each color channel in a different
+    // 128 bits register.
+    rgba = vld4q_u8(input);
+
+    transformColor(0);
+    transformColor(1);
+    transformColor(2);
+
+    // Write back (interleaved) results to output.
+    vst3q_u8(output, rgb);
+
+    // Advance to next elements (could be avoided loading register with
+    // increment after i.e. "vld4 {vector}, [r1]!").
+    input += rgbaStep;
+    output += rgbStep;
+  }
+
+  // Handle the tail elements.
+  unsigned remaining = pixelCount;
+  remaining -= counter;
+  if (remaining != 0) {
+    RGBAtoRGBScalar(input, remaining, output);
+  }
+}
+#endif
+
 struct JPEGOutputBuffer : public jpeg_destination_mgr {
   DISALLOW_NEW();
   Vector<unsigned char>* output;
@@ -95,25 +171,6 @@
   longjmp(*jumpBufferPtr, -1);
 }
 
-static void RGBAtoRGB(const unsigned char* pixels,
-                      unsigned pixelCount,
-                      unsigned char* output) {
-  // Per <canvas> spec, composite the input image pixels source-over on black.
-
-  for (; pixelCount-- > 0; pixels += 4) {
-    unsigned char alpha = pixels[3];
-    if (alpha != 255) {
-      *output++ = SkMulDiv255Round(pixels[0], alpha);
-      *output++ = SkMulDiv255Round(pixels[1], alpha);
-      *output++ = SkMulDiv255Round(pixels[2], alpha);
-    } else {
-      *output++ = pixels[0];
-      *output++ = pixels[1];
-      *output++ = pixels[2];
-    }
-  }
-}
-
 static void disableSubsamplingForHighQuality(jpeg_compress_struct* cinfo,
                                              int quality) {
   if (quality < 100)
diff --git a/third_party/WebKit/Source/platform/image-encoders/JPEGImageEncoderTest.cpp b/third_party/WebKit/Source/platform/image-encoders/JPEGImageEncoderTest.cpp
new file mode 100644
index 0000000..29219a6
--- /dev/null
+++ b/third_party/WebKit/Source/platform/image-encoders/JPEGImageEncoderTest.cpp
@@ -0,0 +1,233 @@
+// 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/timer/elapsed_timer.h"
+#include "platform/image-encoders/RGBAtoRGB.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "wtf/build_config.h"
+
+namespace blink {
+
+class RGBAtoRGBTest : public ::testing::Test {
+ public:
+  RGBAtoRGBTest() {}
+};
+
+static const size_t channelsRGBA = 4;
+static const size_t channelsRGB = 3;
+
+inline size_t calculateRGBAPixels(size_t inputBufferSize) {
+  size_t pixels = inputBufferSize / channelsRGBA;
+  return pixels;
+}
+
+inline size_t calculateRGBOutputSize(size_t inputBufferSize) {
+  size_t pixels = calculateRGBAPixels(inputBufferSize);
+  pixels *= channelsRGB;
+  return pixels;
+}
+
+TEST_F(RGBAtoRGBTest, testOpaqueCaseEven8pixels) {
+  unsigned char canvas[] = {255, 0,   0, 255, 255, 0,   0,   255, 255, 0,  0,
+                            255, 255, 0, 0,   255, 0,   255, 0,   255, 0,  255,
+                            0,   255, 0, 255, 0,   255, 0,   255, 0,   255};
+
+  unsigned char expected[] = {255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 0,
+                              255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0};
+#if OS(WIN)
+  // Windows release bot can't be reasoned with (compiler error C2131).
+  static const constexpr size_t pixels = sizeof(canvas) / channelsRGBA;
+  static const constexpr size_t rgbSize = pixels * channelsRGB;
+#else
+  const size_t pixels = calculateRGBAPixels(sizeof(canvas));
+  const size_t rgbSize = calculateRGBOutputSize(sizeof(canvas));
+#endif
+
+  unsigned char output[rgbSize];
+  memset(output, 0, rgbSize);
+
+  blink::RGBAtoRGB(canvas, static_cast<unsigned>(pixels), output);
+
+  EXPECT_EQ(memcmp(expected, output, rgbSize), 0);
+}
+
+#ifdef __ARM_NEON__
+TEST_F(RGBAtoRGBTest, testCaseEven16pixels) {
+  unsigned char canvas[] = {
+      255, 0,   0,   255, 255, 0,   0,   255, 255, 0,   0,   255, 255,
+      0,   0,   255, 0,   255, 0,   255, 0,   255, 0,   255, 0,   255,
+      0,   255, 0,   255, 0,   255, 0,   0,   255, 128, 0,   0,   255,
+      128, 0,   0,   255, 128, 0,   0,   255, 128, 128, 128, 128, 128,
+      128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128};
+
+  const size_t pixels = calculateRGBAPixels(sizeof(canvas));
+  const size_t rgbSize = calculateRGBOutputSize(sizeof(canvas));
+  unsigned char output[rgbSize];
+  unsigned char expected[rgbSize];
+  memset(output, 0, rgbSize);
+  memset(expected, 0, rgbSize);
+
+  blink::RGBAtoRGBScalar(canvas, static_cast<unsigned>(pixels), expected);
+  blink::RGBAtoRGBNeon(canvas, static_cast<unsigned>(pixels), output);
+
+  EXPECT_EQ(memcmp(expected, output, rgbSize), 0);
+}
+
+TEST_F(RGBAtoRGBTest, testCaseOdd17pixels) {
+  unsigned char canvas[] = {
+      255, 0,   0,   255, 255, 0,   0,   255, 255, 0,   0,   255, 255, 0,
+      0,   255, 0,   255, 0,   255, 0,   255, 0,   255, 0,   255, 0,   255,
+      0,   255, 0,   255, 0,   0,   255, 128, 0,   0,   255, 128, 0,   0,
+      255, 128, 0,   0,   255, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+      128, 128, 128, 128, 128, 128, 128, 128, 10,  10,  10,  100};
+
+  const size_t pixels = calculateRGBAPixels(sizeof(canvas));
+  const size_t rgbSize = calculateRGBOutputSize(sizeof(canvas));
+  unsigned char output[rgbSize];
+  unsigned char expected[rgbSize];
+  memset(output, 0, rgbSize);
+  memset(expected, 0, rgbSize);
+
+  blink::RGBAtoRGBScalar(canvas, static_cast<unsigned>(pixels), expected);
+  blink::RGBAtoRGBNeon(canvas, static_cast<unsigned>(pixels), output);
+
+  EXPECT_EQ(memcmp(expected, output, rgbSize), 0);
+}
+
+TEST_F(RGBAtoRGBTest, testCaseEven32pixels) {
+  unsigned char canvas[] = {
+      255, 0,   0,   255, 255, 0,   0,   255, 255, 0,   0,   255, 255, 0,   0,
+      255, 0,   255, 0,   255, 0,   255, 0,   255, 0,   255, 0,   255, 0,   255,
+      0,   255, 0,   0,   255, 128, 0,   0,   255, 128, 0,   0,   255, 128, 0,
+      0,   255, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+      128, 128, 128, 128, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128,
+      255, 128, 128, 128, 255, 255, 0,   0,   255, 255, 0,   0,   255, 255, 0,
+      0,   255, 255, 0,   0,   255, 0,   255, 0,   255, 0,   255, 0,   255, 0,
+      255, 0,   255, 0,   255, 0,   255, 0,   0,   255, 128, 0,   0,   255, 128,
+      0,   0,   255, 128, 0,   0,   255, 128};
+
+  const size_t pixels = calculateRGBAPixels(sizeof(canvas));
+  const size_t rgbSize = calculateRGBOutputSize(sizeof(canvas));
+  unsigned char output[rgbSize];
+  unsigned char expected[rgbSize];
+  memset(output, 0, rgbSize);
+  memset(expected, 0, rgbSize);
+
+  blink::RGBAtoRGBScalar(canvas, static_cast<unsigned>(pixels), expected);
+  blink::RGBAtoRGBNeon(canvas, static_cast<unsigned>(pixels), output);
+
+  EXPECT_EQ(memcmp(expected, output, rgbSize), 0);
+}
+
+static base::TimeDelta testNpixels(bool fastPath = true,
+                                   const size_t width = 1024,
+                                   const size_t height = 1024,
+                                   bool setAlpha = true) {
+  const size_t pixels = width * height;
+  const size_t canvasLen = channelsRGBA * width * height;
+  const size_t outputLen = channelsRGB * width * height;
+  unsigned char* canvas = new unsigned char[canvasLen];
+  unsigned char* output = new unsigned char[outputLen];
+
+  auto cleanup = [&]() {
+    if (canvas)
+      delete[] canvas;
+    if (output)
+      delete[] output;
+  };
+
+  if (!canvas || !output) {
+    cleanup();
+    return base::TimeDelta();
+  }
+
+  if (setAlpha) {
+    memset(canvas, 128, canvasLen);
+  } else {
+    memset(canvas, 200, canvasLen);
+  }
+
+  base::ElapsedTimer runTime;
+  if (fastPath) {
+    blink::RGBAtoRGBNeon(canvas, static_cast<unsigned>(pixels), output);
+  } else {
+    blink::RGBAtoRGBScalar(canvas, static_cast<unsigned>(pixels), output);
+  }
+
+  auto result = runTime.Elapsed();
+  cleanup();
+  return result;
+}
+
+TEST_F(RGBAtoRGBTest, testPerf1k) {
+  auto neonElapsed = testNpixels();
+  auto scalarElapsed = testNpixels(false);
+
+  EXPECT_TRUE(neonElapsed < scalarElapsed)
+      << "Neon: " << neonElapsed << "\tScalar: " << scalarElapsed << std::endl;
+}
+
+TEST_F(RGBAtoRGBTest, testPerf4k) {
+  auto neonElapsed = testNpixels(true, 4000, 4000);
+  auto scalarElapsed = testNpixels(false, 4000, 4000);
+
+  EXPECT_TRUE(neonElapsed < scalarElapsed)
+      << "Neon: " << neonElapsed << "\tScalar: " << scalarElapsed << std::endl;
+}
+
+// This width will force the tail case, cause width = (16 * 64) + 15.
+static bool testRandNpixels(const size_t width = 1039,
+                            const size_t height = 1024,
+                            bool setAlpha = true) {
+  const size_t pixels = width * height;
+  const size_t canvasLen = channelsRGBA * pixels;
+  const size_t outputLen = channelsRGB * pixels;
+  unsigned char* canvas = new unsigned char[canvasLen];
+  unsigned char* expected = new unsigned char[outputLen];
+  unsigned char* output = new unsigned char[outputLen];
+
+  auto cleanup = [&]() {
+    if (canvas)
+      delete[] canvas;
+    if (expected)
+      delete[] expected;
+    if (output)
+      delete[] output;
+  };
+
+  if (!canvas || !output || !expected) {
+    cleanup();
+    return false;
+  }
+
+  if (setAlpha) {
+    memset(canvas, 128, canvasLen);
+  } else {
+    memset(canvas, 200, canvasLen);
+  }
+
+  srand(time(0));
+  unsigned char* ptr = canvas;
+  for (size_t i = 0; i < pixels; ++i) {
+    *ptr++ = static_cast<unsigned char>(rand() % 255);
+    *ptr++ = static_cast<unsigned char>(rand() % 255);
+    *ptr++ = static_cast<unsigned char>(rand() % 255);
+    *ptr++ = static_cast<unsigned char>(rand() % 255);
+  }
+
+  blink::RGBAtoRGBScalar(canvas, static_cast<unsigned>(pixels), expected);
+  blink::RGBAtoRGBNeon(canvas, static_cast<unsigned>(pixels), output);
+
+  bool result = memcmp(expected, output, outputLen) == 0;
+
+  cleanup();
+  return result;
+}
+
+TEST_F(RGBAtoRGBTest, randomPixels) {
+  EXPECT_TRUE(testRandNpixels());
+}
+
+#endif
+}  // namespace blink
diff --git a/third_party/WebKit/Source/platform/image-encoders/RGBAtoRGB.h b/third_party/WebKit/Source/platform/image-encoders/RGBAtoRGB.h
new file mode 100644
index 0000000..52bb1c1
--- /dev/null
+++ b/third_party/WebKit/Source/platform/image-encoders/RGBAtoRGB.h
@@ -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.
+
+#ifndef RGBAtoRGB_h
+#define RGBAtoRGB_h
+
+// TODO(cavalcantii): use regular macro, see https://crbug.com/673067.
+#ifdef __ARM_NEON__
+#include <arm_neon.h>
+#define RGBAtoRGB RGBAtoRGBNeon
+#else
+#define RGBAtoRGB RGBAtoRGBScalar
+#endif
+
+#include "platform/PlatformExport.h"
+
+namespace blink {
+PLATFORM_EXPORT void RGBAtoRGBScalar(const unsigned char* pixels,
+                                     unsigned pixelCount,
+                                     unsigned char* output);
+#ifdef __ARM_NEON__
+PLATFORM_EXPORT void RGBAtoRGBNeon(const unsigned char* input,
+                                   const unsigned pixelCount,
+                                   unsigned char* output);
+#endif
+
+}  // namespace blink
+
+#endif
diff --git a/third_party/WebKit/Source/web/tests/WebViewTest.cpp b/third_party/WebKit/Source/web/tests/WebViewTest.cpp
index 896cd506..917fb31 100644
--- a/third_party/WebKit/Source/web/tests/WebViewTest.cpp
+++ b/third_party/WebKit/Source/web/tests/WebViewTest.cpp
@@ -3141,19 +3141,17 @@
       "font-weight: normal; letter-spacing: "
       "normal; orphans: 2; text-align: start; "
       "text-indent: 0px; text-transform: none; white-space: normal; widows: "
-      "2; word-spacing: 0px; -webkit-text-stroke-width: 0px; caret-color: "
-      "auto; text-decoration-style: initial; text-decoration-color: initial;"
-      "\">Air conditioner</div><div id=\"div5\" style=\"padding: 10px; margin: "
-      "10px; border: 2px solid skyblue; float: left; width: "
-      "190px; height: 30px; color: rgb(0, 0, 0); font-family: myahem; "
-      "font-size: 8px; font-style: normal; font-variant-ligatures: normal; "
-      "font-variant-caps: normal; font-weight: normal; "
-      "letter-spacing: normal; orphans: 2; "
-      "text-align: start; text-indent: 0px; text-transform: "
-      "none; white-space: normal; widows: 2; word-spacing: 0px; "
-      "-webkit-text-stroke-width: 0px; caret-color: auto; "
-      "text-decoration-style: initial; text-decoration-color: initial;\">"
-      "Price 10,000,000won</div>";
+      "2; word-spacing: 0px; -webkit-text-stroke-width: 0px; "
+      "text-decoration-style: initial; text-decoration-color: initial;\">Air "
+      "conditioner</div><div id=\"div5\" style=\"padding: 10px; margin: 10px; "
+      "border: 2px solid skyblue; float: left; width: 190px; height: 30px; "
+      "color: rgb(0, 0, 0); font-family: myahem; font-size: 8px; font-style: "
+      "normal; font-variant-ligatures: normal; font-variant-caps: normal; "
+      "font-weight: normal; letter-spacing: normal; orphans: 2; text-align: "
+      "start; text-indent: 0px; text-transform: none; white-space: normal; "
+      "widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; "
+      "text-decoration-style: initial; text-decoration-color: initial;\">Price "
+      "10,000,000won</div>";
   WebString clipText;
   WebString clipHtml;
   WebRect clipRect;
@@ -3182,18 +3180,17 @@
       "font-weight: normal; letter-spacing: "
       "normal; orphans: 2; text-align: start; "
       "text-indent: 0px; text-transform: none; white-space: normal; widows: "
-      "2; word-spacing: 0px; -webkit-text-stroke-width: 0px; caret-color: "
-      "auto; text-decoration-style: initial; text-decoration-color: initial;"
-      "\">Air conditioner</div><div id=\"div5\" style=\"padding: 10px; margin: "
-      "10px; border: 2px solid skyblue; float: left; width: "
-      "190px; height: 30px; color: rgb(0, 0, 0); font-family: myahem; "
-      "font-size: 8px; font-style: normal; font-variant-ligatures: normal; "
-      "font-variant-caps: normal; font-weight: normal; letter-spacing: normal; "
-      "orphans: 2; text-align: start; text-indent: 0px; "
-      "text-transform: none; white-space: normal; widows: 2; "
-      "word-spacing: 0px; -webkit-text-stroke-width: 0px; caret-color: auto; "
-      "text-decoration-style: initial; text-decoration-color: initial;\">"
-      "Price 10,000,000won</div>";
+      "2; word-spacing: 0px; -webkit-text-stroke-width: 0px; "
+      "text-decoration-style: initial; text-decoration-color: initial;\">Air "
+      "conditioner</div><div id=\"div5\" style=\"padding: 10px; margin: 10px; "
+      "border: 2px solid skyblue; float: left; width: 190px; height: 30px; "
+      "color: rgb(0, 0, 0); font-family: myahem; font-size: 8px; font-style: "
+      "normal; font-variant-ligatures: normal; font-variant-caps: normal; "
+      "font-weight: normal; letter-spacing: normal; orphans: 2; text-align: "
+      "start; text-indent: 0px; text-transform: none; white-space: normal; "
+      "widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; "
+      "text-decoration-style: initial; text-decoration-color: initial;\">Price "
+      "10,000,000won</div>";
   WebString clipText;
   WebString clipHtml;
   WebRect clipRect;
diff --git a/ui/gfx/vector_icons/BUILD.gn b/ui/gfx/vector_icons/BUILD.gn
index ab991a75..0645973a 100644
--- a/ui/gfx/vector_icons/BUILD.gn
+++ b/ui/gfx/vector_icons/BUILD.gn
@@ -20,6 +20,9 @@
     "bar_close.icon",
     "blocked_badge.icon",
     "bluetooth_connected.icon",
+    "browser_tools.icon",
+    "browser_tools_error.icon",
+    "browser_tools_update.icon",
     "business.icon",
     "check_circle.1x.icon",
     "check_circle.icon",
@@ -85,6 +88,16 @@
     "mixed_content.icon",
     "mode_edit.icon",
     "my_location.icon",
+    "navigate_back.1x.icon",
+    "navigate_back.icon",
+    "navigate_forward.1x.icon",
+    "navigate_forward.icon",
+    "navigate_home.1x.icon",
+    "navigate_home.icon",
+    "navigate_reload.1x.icon",
+    "navigate_reload.icon",
+    "navigate_stop.1x.icon",
+    "navigate_stop.icon",
     "notifications.icon",
     "notifications_off.icon",
     "omnibox_calculator.1x.icon",
diff --git a/chrome/app/vector_icons/browser_tools.icon b/ui/gfx/vector_icons/browser_tools.icon
similarity index 100%
rename from chrome/app/vector_icons/browser_tools.icon
rename to ui/gfx/vector_icons/browser_tools.icon
diff --git a/chrome/app/vector_icons/browser_tools_error.icon b/ui/gfx/vector_icons/browser_tools_error.icon
similarity index 100%
rename from chrome/app/vector_icons/browser_tools_error.icon
rename to ui/gfx/vector_icons/browser_tools_error.icon
diff --git a/chrome/app/vector_icons/browser_tools_update.icon b/ui/gfx/vector_icons/browser_tools_update.icon
similarity index 100%
rename from chrome/app/vector_icons/browser_tools_update.icon
rename to ui/gfx/vector_icons/browser_tools_update.icon
diff --git a/chrome/app/vector_icons/navigate_back.1x.icon b/ui/gfx/vector_icons/navigate_back.1x.icon
similarity index 100%
rename from chrome/app/vector_icons/navigate_back.1x.icon
rename to ui/gfx/vector_icons/navigate_back.1x.icon
diff --git a/chrome/app/vector_icons/navigate_back.icon b/ui/gfx/vector_icons/navigate_back.icon
similarity index 100%
rename from chrome/app/vector_icons/navigate_back.icon
rename to ui/gfx/vector_icons/navigate_back.icon
diff --git a/chrome/app/vector_icons/navigate_forward.1x.icon b/ui/gfx/vector_icons/navigate_forward.1x.icon
similarity index 100%
rename from chrome/app/vector_icons/navigate_forward.1x.icon
rename to ui/gfx/vector_icons/navigate_forward.1x.icon
diff --git a/chrome/app/vector_icons/navigate_forward.icon b/ui/gfx/vector_icons/navigate_forward.icon
similarity index 100%
rename from chrome/app/vector_icons/navigate_forward.icon
rename to ui/gfx/vector_icons/navigate_forward.icon
diff --git a/chrome/app/vector_icons/navigate_home.1x.icon b/ui/gfx/vector_icons/navigate_home.1x.icon
similarity index 100%
rename from chrome/app/vector_icons/navigate_home.1x.icon
rename to ui/gfx/vector_icons/navigate_home.1x.icon
diff --git a/chrome/app/vector_icons/navigate_home.icon b/ui/gfx/vector_icons/navigate_home.icon
similarity index 100%
rename from chrome/app/vector_icons/navigate_home.icon
rename to ui/gfx/vector_icons/navigate_home.icon
diff --git a/chrome/app/vector_icons/navigate_reload.1x.icon b/ui/gfx/vector_icons/navigate_reload.1x.icon
similarity index 100%
rename from chrome/app/vector_icons/navigate_reload.1x.icon
rename to ui/gfx/vector_icons/navigate_reload.1x.icon
diff --git a/chrome/app/vector_icons/navigate_reload.icon b/ui/gfx/vector_icons/navigate_reload.icon
similarity index 100%
rename from chrome/app/vector_icons/navigate_reload.icon
rename to ui/gfx/vector_icons/navigate_reload.icon
diff --git a/chrome/app/vector_icons/navigate_stop.1x.icon b/ui/gfx/vector_icons/navigate_stop.1x.icon
similarity index 100%
rename from chrome/app/vector_icons/navigate_stop.1x.icon
rename to ui/gfx/vector_icons/navigate_stop.1x.icon
diff --git a/chrome/app/vector_icons/navigate_stop.icon b/ui/gfx/vector_icons/navigate_stop.icon
similarity index 100%
rename from chrome/app/vector_icons/navigate_stop.icon
rename to ui/gfx/vector_icons/navigate_stop.icon
diff --git a/ui/views/controls/button/vector_icon_button.cc b/ui/views/controls/button/vector_icon_button.cc
index b3dbca9..2c6b70d4 100644
--- a/ui/views/controls/button/vector_icon_button.cc
+++ b/ui/views/controls/button/vector_icon_button.cc
@@ -44,19 +44,10 @@
   }
 }
 
-void VectorIconButton::SetIcon(const gfx::VectorIcon& icon) {
-  icon_ = &icon;
-  SetIcon(gfx::VectorIconId::VECTOR_ICON_NONE);
-}
-
 void VectorIconButton::OnThemeChanged() {
   SkColor icon_color =
       color_utils::DeriveDefaultIconColor(delegate_->GetVectorIconBaseColor());
-  gfx::ImageSkia image;
-  if (icon_)
-    image = gfx::CreateVectorIcon(*icon_, icon_color);
-  else
-    image = gfx::CreateVectorIcon(id_, icon_color);
+  gfx::ImageSkia image = gfx::CreateVectorIcon(id_, icon_color);
   SetImage(views::CustomButton::STATE_NORMAL, &image);
   image = gfx::CreateVectorIcon(id_, SkColorSetA(icon_color, 0xff / 2));
   SetImage(views::CustomButton::STATE_DISABLED, &image);
diff --git a/ui/views/controls/button/vector_icon_button.h b/ui/views/controls/button/vector_icon_button.h
index 8a99ae0e..dd994051 100644
--- a/ui/views/controls/button/vector_icon_button.h
+++ b/ui/views/controls/button/vector_icon_button.h
@@ -9,7 +9,6 @@
 #include "ui/views/controls/button/image_button.h"
 
 namespace gfx {
-struct VectorIcon;
 enum class VectorIconId;
 }
 
@@ -25,11 +24,8 @@
   ~VectorIconButton() override;
 
   // Sets the icon to display and provides a callback which should return the
-  // text color from which to derive this icon's color. The one that takes an ID
-  // is deprecated and should be removed when all vector icons are identified by
-  // VectorIcon structs.
+  // text color from which to derive this icon's color.
   void SetIcon(gfx::VectorIconId id);
-  void SetIcon(const gfx::VectorIcon& icon);
 
   // views::ImageButton:
   void OnThemeChanged() override;
@@ -37,10 +33,7 @@
 
  private:
   VectorIconButtonDelegate* delegate_;
-  // TODO(estade): remove |id_| in favor of |icon_| once all callers have been
-  // updated.
   gfx::VectorIconId id_;
-  const gfx::VectorIcon* icon_ = nullptr;
 
   DISALLOW_COPY_AND_ASSIGN(VectorIconButton);
 };