Merge from Chromium at DEPS revision 40.0.2214.10

This commit was generated by merge_to_master.py.

Change-Id: I0a543d3dd13b8f5d3ca1d0a6b04cf4d1a280b98a
diff --git a/android_webview/browser/net/aw_url_request_context_getter.cc b/android_webview/browser/net/aw_url_request_context_getter.cc
index 33f92a6..1c74bd0 100644
--- a/android_webview/browser/net/aw_url_request_context_getter.cc
+++ b/android_webview/browser/net/aw_url_request_context_getter.cc
@@ -211,6 +211,7 @@
   builder.set_accept_language(net::HttpUtil::GenerateAcceptLanguageHeader(
       AwContentBrowserClient::GetAcceptLangsImpl()));
   builder.set_net_log(net_log_.get());
+  builder.set_channel_id_enabled(false);
   ApplyCmdlineOverridesToURLRequestContextBuilder(&builder);
 
   url_request_context_.reset(builder.Build());
diff --git a/apps/app_lifetime_monitor.cc b/apps/app_lifetime_monitor.cc
index 16323e9..3190e29 100644
--- a/apps/app_lifetime_monitor.cc
+++ b/apps/app_lifetime_monitor.cc
@@ -81,21 +81,24 @@
 }
 
 void AppLifetimeMonitor::OnAppWindowRemoved(AppWindow* app_window) {
-  if (!HasVisibleAppWindows(app_window))
+  if (!HasOtherVisibleAppWindows(app_window))
     NotifyAppDeactivated(app_window->extension_id());
 }
 
 void AppLifetimeMonitor::OnAppWindowHidden(AppWindow* app_window) {
-  if (!HasVisibleAppWindows(app_window))
+  if (!HasOtherVisibleAppWindows(app_window))
     NotifyAppDeactivated(app_window->extension_id());
 }
 
-void AppLifetimeMonitor::OnAppWindowShown(AppWindow* app_window) {
+void AppLifetimeMonitor::OnAppWindowShown(AppWindow* app_window,
+                                          bool was_hidden) {
   if (app_window->window_type() != AppWindow::WINDOW_TYPE_DEFAULT)
     return;
 
-  if (HasVisibleAppWindows(app_window))
+  // The app is being activated if this is the first window to become visible.
+  if (was_hidden && !HasOtherVisibleAppWindows(app_window)) {
     NotifyAppActivated(app_window->extension_id());
+  }
 }
 
 void AppLifetimeMonitor::Shutdown() {
@@ -106,7 +109,8 @@
     app_window_registry->RemoveObserver(this);
 }
 
-bool AppLifetimeMonitor::HasVisibleAppWindows(AppWindow* app_window) const {
+bool AppLifetimeMonitor::HasOtherVisibleAppWindows(
+    AppWindow* app_window) const {
   AppWindowRegistry::AppWindowList windows =
       AppWindowRegistry::Get(app_window->browser_context())
           ->GetAppWindowsForApp(app_window->extension_id());
@@ -114,7 +118,7 @@
   for (AppWindowRegistry::AppWindowList::const_iterator i = windows.begin();
        i != windows.end();
        ++i) {
-    if (!(*i)->is_hidden())
+    if (*i != app_window && !(*i)->is_hidden())
       return true;
   }
   return false;
diff --git a/apps/app_lifetime_monitor.h b/apps/app_lifetime_monitor.h
index 8f079fe..90ae2a8 100644
--- a/apps/app_lifetime_monitor.h
+++ b/apps/app_lifetime_monitor.h
@@ -32,9 +32,11 @@
    public:
     // Called when the app starts running.
     virtual void OnAppStart(Profile* profile, const std::string& app_id) {}
-    // Called when the app becomes active to the user, i.e. it opens a window.
+    // Called when the app becomes active to the user, i.e. the first window
+    // becomes visible.
     virtual void OnAppActivated(Profile* profile, const std::string& app_id) {}
-    // Called when the app becomes inactive to the user.
+    // Called when the app becomes inactive to the user, i.e. the last window is
+    // hidden or closed.
     virtual void OnAppDeactivated(Profile* profile, const std::string& app_id) {
     }
     // Called when the app stops running.
@@ -63,12 +65,13 @@
   // extensions::AppWindowRegistry::Observer overrides:
   void OnAppWindowRemoved(extensions::AppWindow* app_window) override;
   void OnAppWindowHidden(extensions::AppWindow* app_window) override;
-  void OnAppWindowShown(extensions::AppWindow* app_window) override;
+  void OnAppWindowShown(extensions::AppWindow* app_window,
+                        bool was_hidden) override;
 
   // KeyedService overrides:
   void Shutdown() override;
 
-  bool HasVisibleAppWindows(extensions::AppWindow* app_window) const;
+  bool HasOtherVisibleAppWindows(extensions::AppWindow* app_window) const;
 
   void NotifyAppStart(const std::string& app_id);
   void NotifyAppActivated(const std::string& app_id);
diff --git a/base/time/time.h b/base/time/time.h
index 641f465..9cb007e 100644
--- a/base/time/time.h
+++ b/base/time/time.h
@@ -232,6 +232,10 @@
   static const int64 kNanosecondsPerSecond = kNanosecondsPerMicrosecond *
                                              kMicrosecondsPerSecond;
 
+  // The representation of Jan 1, 1970 UTC in microseconds since the
+  // platform-dependent epoch.
+  static const int64 kTimeTToMicrosecondsOffset;
+
 #if !defined(OS_WIN)
   // On Mac & Linux, this value is the delta from the Windows epoch of 1601 to
   // the Posix delta of 1970. This is used for migrating between the old
@@ -492,10 +496,6 @@
                                  bool is_local,
                                  Time* parsed_time);
 
-  // The representation of Jan 1, 1970 UTC in microseconds since the
-  // platform-dependent epoch.
-  static const int64 kTimeTToMicrosecondsOffset;
-
   // Time in microseconds in UTC.
   int64 us_;
 };
diff --git a/build/android/pylib/utils/isolator.py b/build/android/pylib/utils/isolator.py
index 9ee5671..afbee2a 100644
--- a/build/android/pylib/utils/isolator.py
+++ b/build/android/pylib/utils/isolator.py
@@ -32,7 +32,6 @@
     'component': 'static_library',
     'fastbuild': '0',
     'icu_use_data_file_flag': '1',
-    'libpeer_target_type': 'static_library',
     'lsan': '0',
     # TODO(maruel): This may not always be true.
     'target_arch': 'arm',
diff --git a/build/common.gypi b/build/common.gypi
index f792303..256515a 100644
--- a/build/common.gypi
+++ b/build/common.gypi
@@ -1510,9 +1510,6 @@
     'ozone_platform_ozonex%': 0,
     'ozone_platform_test%': 0,
 
-    # Whether the browser is non-native (using Views Toolkit) on Mac.
-    'mac_views_browser%': 0,
-
     'conditions': [
       ['buildtype=="Official"', {
         # Continue to embed build meta data in Official builds, basically the
diff --git a/build/util/LASTCHANGE b/build/util/LASTCHANGE
index 4d55954..e136404 100644
--- a/build/util/LASTCHANGE
+++ b/build/util/LASTCHANGE
@@ -1 +1 @@
-LASTCHANGE=03655fd3f6d7
+LASTCHANGE=3e349d1753f4
diff --git a/build/util/LASTCHANGE.blink b/build/util/LASTCHANGE.blink
index 8ec7aff..db6b90c 100644
--- a/build/util/LASTCHANGE.blink
+++ b/build/util/LASTCHANGE.blink
@@ -1 +1 @@
-LASTCHANGE=184994
+LASTCHANGE=185475
diff --git a/chrome/VERSION b/chrome/VERSION
index 67a0cca..ab00d16 100644
--- a/chrome/VERSION
+++ b/chrome/VERSION
@@ -1,4 +1,4 @@
 MAJOR=40
 MINOR=0
 BUILD=2214
-PATCH=0
+PATCH=10
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index baf3b58..3db4e5d 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -2667,12 +2667,6 @@
       <message name="IDS_CERT_ERROR_NAME_CONSTRAINT_VIOLATION_DESCRIPTION" desc="Description of the error page for a certificate that contains a name outside of its scope">
         Server's certificate violates name constraints.
       </message>
-      <message name="IDS_CERT_ERROR_VALIDITY_TOO_LONG_DETAILS" desc="Details of the error page for a certificate whose validity period is too long">
-        You attempted to reach <ph name="DOMAIN">&lt;strong&gt;$1<ex>paypal.com</ex>&lt;/strong&gt;</ph>, but the server presented a certificate for which the period is too long.
-      </message>
-      <message name="IDS_CERT_ERROR_VALIDITY_TOO_LONG_DESCRIPTION" desc="Description of the error page for a certificate whose validity period is too long">
-        The server certificate has a validity period that is too long.
-      </message>
 
       <message name="IDS_CERT_ERROR_UNKNOWN_ERROR_DETAILS" desc="Details of the error page for an unknown ssl error">
         An unknown error has occurred.
@@ -10160,7 +10154,7 @@
           Your <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph> will be unlocked when your Android phone is unlocked and nearby.
         </message>
         <message name="IDS_OPTIONS_EASY_UNLOCK_REQUIRE_PROXIMITY_LABEL" desc="The text label that describes the checkbox that controls whether the user's Android phone must be in close proximity to the Chromebook in order to unlock it..">
-          Allow unlocking this <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph> only when the phone is within an arm's length away.
+          Only unlock this <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph> when your phone is within arm’s reach.
         </message>
         <message name="IDS_OPTIONS_EASY_UNLOCK_TURN_OFF_BUTTON" desc="The label of the button to disable Easy unlock on the settings page and the turn off Easy unlock dialog.">
           Turn off
@@ -15001,11 +14995,11 @@
     <message name="IDS_EASY_UNLOCK_SCREENLOCK_TOOLTIP_PHONE_UNLOCKABLE" desc="Tooltip for an icon on a user's lock screen pod shown by Easy Unlock when a phone eligible to unlock the Chromebook is detected, but it does not have lock screen enabled, in which case it is not allowed to unlock Chromebooks.">
       Your Android phone must have a lock screen enabled before it can unlock this <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph>. Otherwise, you will need to type in your password.
     </message>
-    <message name="IDS_EASY_UNLOCK_SCREENLOCK_TOOLTIP_RSSI_TOO_LOW" desc="Tooltip for an icon on a user's lock screen pod shown by Easy Unlock when a phone eligible to unlock the Chromebook is detected, but it's not in the Chromebook's proximity (roughly >30 meters away).">
-      Bring your phone closer to your Chromebook to enter.
+    <message name="IDS_EASY_UNLOCK_SCREENLOCK_TOOLTIP_RSSI_TOO_LOW" desc="Tooltip for an icon on a user's lock screen pod shown by Easy Unlock when a phone eligible to unlock the Chromebook is detected, but it's not in the Chromebook's proximity (> 30 feet away).">
+      Your Android phone is too far away from your <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph>. Bring it closer to enter.
     </message>
-    <message name="IDS_EASY_UNLOCK_SCREENLOCK_TOOLTIP_TX_POWER_TOO_HIGH" desc="Tooltip for an icon on a user's lock screen pod shown by Easy Unlock when a phone eligible to unlock the Chromebook is detected, but it's not right next to the Chromebook. This is only shown to users who turn on an advanced setting.">
-      Your Android phone is too far away. Bring it right next to your <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph> to enter.
+    <message name="IDS_EASY_UNLOCK_SCREENLOCK_TOOLTIP_TX_POWER_TOO_HIGH" desc="Tooltip for an icon on a user's lock screen pod shown by Easy Unlock when a phone eligible to unlock the Chromebook is detected, but it's not in the Chromebook's proximity (> 1 foot away).">
+      Your Android phone is too far away from your <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph>. Bring it closer to enter.
     </message>
     <message name="IDS_EASY_UNLOCK_SCREENLOCK_TOOLTIP_INITIAL_AUTHENTICATED" desc="Tooltip text shown on lock screen when a phone eligible to unlock the Chromebook via Easy Unlock is detected and authenticated for the first time.">
       When your phone is unlocked and nearby, you can just click to enter. Otherwise, you'll see a locked icon and need to type your password.
diff --git a/chrome/browser/apps/app_shim/app_shim_interactive_uitest_mac.mm b/chrome/browser/apps/app_shim/app_shim_interactive_uitest_mac.mm
index 56db665..8df88e1 100644
--- a/chrome/browser/apps/app_shim/app_shim_interactive_uitest_mac.mm
+++ b/chrome/browser/apps/app_shim/app_shim_interactive_uitest_mac.mm
@@ -5,6 +5,7 @@
 #import <Cocoa/Cocoa.h>
 #include <vector>
 
+#include "apps/app_lifetime_monitor_factory.h"
 #include "apps/switches.h"
 #include "base/auto_reset.h"
 #include "base/callback.h"
@@ -150,6 +151,37 @@
   DISALLOW_COPY_AND_ASSIGN(WindowedAppShimLaunchObserver);
 };
 
+class AppLifetimeMonitorObserver : public apps::AppLifetimeMonitor::Observer {
+ public:
+  AppLifetimeMonitorObserver(Profile* profile)
+      : profile_(profile), activated_count_(0), deactivated_count_(0) {
+    apps::AppLifetimeMonitorFactory::GetForProfile(profile_)->AddObserver(this);
+  }
+  virtual ~AppLifetimeMonitorObserver() {
+    apps::AppLifetimeMonitorFactory::GetForProfile(profile_)
+        ->RemoveObserver(this);
+  }
+
+  int activated_count() { return activated_count_; }
+  int deactivated_count() { return deactivated_count_; }
+
+ protected:
+  // AppLifetimeMonitor::Observer overrides:
+  void OnAppActivated(Profile* profile, const std::string& app_id) override {
+    ++activated_count_;
+  }
+  void OnAppDeactivated(Profile* profile, const std::string& app_id) override {
+    ++deactivated_count_;
+  }
+
+ private:
+  Profile* profile_;
+  int activated_count_;
+  int deactivated_count_;
+
+  DISALLOW_COPY_AND_ASSIGN(AppLifetimeMonitorObserver);
+};
+
 NSString* GetBundleID(const base::FilePath& shim_path) {
   base::FilePath plist_path = shim_path.Append("Contents").Append("Info.plist");
   NSMutableDictionary* plist = [NSMutableDictionary
@@ -164,6 +196,30 @@
       ->FindHost(profile, app_id);
 }
 
+base::FilePath GetAppShimPath(Profile* profile,
+                              const extensions::Extension* app) {
+  // Use a WebAppShortcutCreator to get the path.
+  web_app::WebAppShortcutCreator shortcut_creator(
+      web_app::GetWebAppDataDirectory(profile->GetPath(), app->id(), GURL()),
+      web_app::ShortcutInfoForExtensionAndProfile(app, profile),
+      extensions::FileHandlersInfo());
+  return shortcut_creator.GetInternalShortcutPath();
+}
+
+void UpdateAppAndAwaitShimCreation(Profile* profile,
+                                   const extensions::Extension* app,
+                                   const base::FilePath& shim_path) {
+  // Create the internal app shim by simulating an app update. FilePathWatcher
+  // is used to wait for file operations on the shim to be finished before
+  // attempting to launch it. Since all of the file operations are done in the
+  // same event on the FILE thread, everything will be done by the time the
+  // watcher's callback is executed.
+  scoped_refptr<WindowedFilePathWatcher> file_watcher =
+      new WindowedFilePathWatcher(shim_path);
+  web_app::UpdateAllShortcuts(base::string16(), profile, app);
+  file_watcher->Wait();
+}
+
 }  // namespace
 
 // Watches for NSNotifications from the shared workspace.
@@ -224,9 +280,11 @@
 // Shims require static libraries http://crbug.com/386024.
 #if defined(COMPONENT_BUILD)
 #define MAYBE_Launch DISABLED_Launch
+#define MAYBE_ShowWindow DISABLED_ShowWindow
 #define MAYBE_RebuildShim DISABLED_RebuildShim
 #else
 #define MAYBE_Launch Launch
+#define MAYBE_ShowWindow ShowWindow
 #define MAYBE_RebuildShim RebuildShim
 #endif
 
@@ -234,26 +292,12 @@
 // These two cases are combined because the time to run the test is dominated
 // by loading the extension and creating the shim.
 IN_PROC_BROWSER_TEST_F(AppShimInteractiveTest, MAYBE_Launch) {
-  // Install the app.
   const extensions::Extension* app = InstallPlatformApp("minimal");
 
-  // Use a WebAppShortcutCreator to get the path.
-  web_app::WebAppShortcutCreator shortcut_creator(
-      web_app::GetWebAppDataDirectory(profile()->GetPath(), app->id(), GURL()),
-      web_app::ShortcutInfoForExtensionAndProfile(app, profile()),
-      extensions::FileHandlersInfo());
-  base::FilePath shim_path = shortcut_creator.GetInternalShortcutPath();
+  base::FilePath shim_path = GetAppShimPath(profile(), app);
   EXPECT_FALSE(base::PathExists(shim_path));
 
-  // Create the internal app shim by simulating an app update. FilePathWatcher
-  // is used to wait for file operations on the shim to be finished before
-  // attempting to launch it. Since all of the file operations are done in the
-  // same event on the FILE thread, everything will be done by the time the
-  // watcher's callback is executed.
-  scoped_refptr<WindowedFilePathWatcher> file_watcher =
-      new WindowedFilePathWatcher(shim_path);
-  web_app::UpdateAllShortcuts(base::string16(), profile(), app);
-  file_watcher->Wait();
+  UpdateAppAndAwaitShimCreation(profile(), app, shim_path);
   ASSERT_TRUE(base::PathExists(shim_path));
   NSString* bundle_id = GetBundleID(shim_path);
 
@@ -316,6 +360,125 @@
   }
 }
 
+// Test that the shim's lifetime depends on the visibility of windows. I.e. the
+// shim is only active when there are visible windows.
+IN_PROC_BROWSER_TEST_F(AppShimInteractiveTest, MAYBE_ShowWindow) {
+  const extensions::Extension* app = InstallPlatformApp("hidden");
+
+  base::FilePath shim_path = GetAppShimPath(profile(), app);
+  EXPECT_FALSE(base::PathExists(shim_path));
+
+  UpdateAppAndAwaitShimCreation(profile(), app, shim_path);
+  ASSERT_TRUE(base::PathExists(shim_path));
+  NSString* bundle_id = GetBundleID(shim_path);
+
+  // It's impractical to confirm that the shim did not launch by timing out, so
+  // instead we watch AppLifetimeMonitor::Observer::OnAppActivated.
+  AppLifetimeMonitorObserver lifetime_observer(profile());
+
+  // Launch the app. It should create a hidden window, but the shim should not
+  // launch.
+  {
+    ExtensionTestMessageListener launched_listener("Launched", false);
+    LaunchPlatformApp(app);
+    EXPECT_TRUE(launched_listener.WaitUntilSatisfied());
+  }
+  extensions::AppWindow* window_1 = GetFirstAppWindow();
+  ASSERT_TRUE(window_1);
+  EXPECT_TRUE(window_1->is_hidden());
+  EXPECT_FALSE(HasAppShimHost(profile(), app->id()));
+  EXPECT_EQ(0, lifetime_observer.activated_count());
+
+  // Showing the window causes the shim to launch.
+  {
+    base::scoped_nsobject<WindowedNSNotificationObserver> ns_observer(
+        [[WindowedNSNotificationObserver alloc]
+            initForNotification:NSWorkspaceDidLaunchApplicationNotification
+                    andBundleId:bundle_id]);
+    WindowedAppShimLaunchObserver observer(app->id());
+    window_1->Show(extensions::AppWindow::SHOW_INACTIVE);
+    [ns_observer wait];
+    observer.Wait();
+    EXPECT_EQ(1, lifetime_observer.activated_count());
+    EXPECT_TRUE(HasAppShimHost(profile(), app->id()));
+  }
+
+  // Hiding the window causes the shim to quit.
+  {
+    base::scoped_nsobject<WindowedNSNotificationObserver> ns_observer(
+        [[WindowedNSNotificationObserver alloc]
+            initForNotification:NSWorkspaceDidTerminateApplicationNotification
+                    andBundleId:bundle_id]);
+    window_1->Hide();
+    [ns_observer wait];
+    EXPECT_FALSE(HasAppShimHost(profile(), app->id()));
+  }
+
+  // Launch a second window. It should not launch the shim.
+  {
+    ExtensionTestMessageListener launched_listener("Launched", false);
+    LaunchPlatformApp(app);
+    EXPECT_TRUE(launched_listener.WaitUntilSatisfied());
+  }
+  const extensions::AppWindowRegistry::AppWindowList& app_windows =
+      extensions::AppWindowRegistry::Get(profile())->app_windows();
+  EXPECT_EQ(2u, app_windows.size());
+  extensions::AppWindow* window_2 = app_windows.front();
+  EXPECT_NE(window_1, window_2);
+  ASSERT_TRUE(window_2);
+  EXPECT_TRUE(window_2->is_hidden());
+  EXPECT_FALSE(HasAppShimHost(profile(), app->id()));
+  EXPECT_EQ(1, lifetime_observer.activated_count());
+
+  // Showing one of the windows should launch the shim.
+  {
+    base::scoped_nsobject<WindowedNSNotificationObserver> ns_observer(
+        [[WindowedNSNotificationObserver alloc]
+            initForNotification:NSWorkspaceDidLaunchApplicationNotification
+                    andBundleId:bundle_id]);
+    WindowedAppShimLaunchObserver observer(app->id());
+    window_1->Show(extensions::AppWindow::SHOW_INACTIVE);
+    [ns_observer wait];
+    observer.Wait();
+    EXPECT_EQ(2, lifetime_observer.activated_count());
+    EXPECT_TRUE(HasAppShimHost(profile(), app->id()));
+    EXPECT_TRUE(window_2->is_hidden());
+  }
+
+  // Showing the other window does nothing.
+  {
+    window_2->Show(extensions::AppWindow::SHOW_INACTIVE);
+    EXPECT_EQ(2, lifetime_observer.activated_count());
+  }
+
+  // Showing an already visible window does nothing.
+  {
+    window_1->Show(extensions::AppWindow::SHOW_INACTIVE);
+    EXPECT_EQ(2, lifetime_observer.activated_count());
+  }
+
+  // Hiding one window does nothing.
+  {
+    AppLifetimeMonitorObserver deactivate_observer(profile());
+    window_1->Hide();
+    EXPECT_EQ(0, deactivate_observer.deactivated_count());
+  }
+
+  // Hiding other window causes the shim to quit.
+  {
+    AppLifetimeMonitorObserver deactivate_observer(profile());
+    EXPECT_TRUE(HasAppShimHost(profile(), app->id()));
+    base::scoped_nsobject<WindowedNSNotificationObserver> ns_observer(
+        [[WindowedNSNotificationObserver alloc]
+            initForNotification:NSWorkspaceDidTerminateApplicationNotification
+                    andBundleId:bundle_id]);
+    window_2->Hide();
+    [ns_observer wait];
+    EXPECT_EQ(1, deactivate_observer.deactivated_count());
+    EXPECT_FALSE(HasAppShimHost(profile(), app->id()));
+  }
+}
+
 #if defined(ARCH_CPU_64_BITS)
 
 // Tests that a 32 bit shim attempting to launch 64 bit Chrome will eventually
diff --git a/chrome/browser/chromeos/input_method/input_method_util.cc b/chrome/browser/chromeos/input_method/input_method_util.cc
index b3dd7f6..b776986 100644
--- a/chrome/browser/chromeos/input_method/input_method_util.cc
+++ b/chrome/browser/chromeos/input_method/input_method_util.cc
@@ -58,17 +58,19 @@
 // GetFirstLogingInputMethodIds may miss component extension IMEs. To enable
 // component extension IME as the first loging input method, we have to prepare
 // component extension IME IDs.
+// Note: empty layout means the rule applies for all layouts.
 const struct {
   const char* locale;
   const char* layout;
   const char* engine_id;
 } kDefaultInputMethodRecommendation[] = {
-  { "ja", "us", "nacl_mozc_us" },
   { "ja", "jp", "nacl_mozc_jp" },
-  { "zh-CN", "us", "zh-t-i0-pinyin" },
-  { "zh-TW", "us", "zh-hant-t-i0-und" },
-  { "th", "us", "vkd_th" },
-  { "vi", "us", "vkd_vi_tcvn" },
+  { "ja", "", "nacl_mozc_us" },
+  { "zh-CN", "", "zh-t-i0-pinyin" },
+  { "zh-TW", "", "zh-hant-t-i0-und" },
+  { "th", "", "vkd_th" },
+  { "vi", "", "vkd_vi_tcvn" },
+  { "ru", "", "xkb:ru::rus" },
 };
 
 // The engine ID map for migration. This migration is for input method IDs from
@@ -387,8 +389,9 @@
       = current_input_method.GetPreferredKeyboardLayout();
   for (size_t i = 0; i < arraysize(kDefaultInputMethodRecommendation);
        ++i) {
-    if (kDefaultInputMethodRecommendation[i].locale == language_code &&
-        kDefaultInputMethodRecommendation[i].layout == current_layout) {
+    if (kDefaultInputMethodRecommendation[i].locale == language_code && (
+        !kDefaultInputMethodRecommendation[i].layout[0] ||
+        kDefaultInputMethodRecommendation[i].layout == current_layout)) {
       out_input_method_ids->push_back(
           extension_ime_util::GetInputMethodIDByEngineID(
               kDefaultInputMethodRecommendation[i].engine_id));
diff --git a/chrome/browser/chromeos/login/reset_browsertest.cc b/chrome/browser/chromeos/login/reset_browsertest.cc
index 79a8552..7c79a9c 100644
--- a/chrome/browser/chromeos/login/reset_browsertest.cc
+++ b/chrome/browser/chromeos/login/reset_browsertest.cc
@@ -312,4 +312,26 @@
   OobeScreenWaiter(OobeDisplay::SCREEN_ERROR_MESSAGE).Wait();
 }
 
+IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, PRE_RevertAfterCancel) {
+  PrefService* prefs = g_browser_process->local_state();
+  prefs->SetBoolean(prefs::kFactoryResetRequested, true);
+  RegisterSomeUser();
+}
+
+IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, RevertAfterCancel) {
+  update_engine_client_->set_can_rollback_check_result(true);
+  OobeScreenWaiter(OobeDisplay::SCREEN_OOBE_RESET).Wait();
+  EXPECT_EQ(0, power_manager_client_->num_request_restart_calls());
+  EXPECT_EQ(0, session_manager_client_->start_device_wipe_call_count());
+  EXPECT_EQ(0, update_engine_client_->rollback_call_count());
+  JSExpect("!$('reset').classList.contains('rollback-proposal-view')");
+  InvokeRollbackOption();
+  JSExpect("$('reset').classList.contains('rollback-proposal-view')");
+  CloseResetScreen();
+  InvokeResetScreen();
+  OobeScreenWaiter(OobeDisplay::SCREEN_OOBE_RESET).Wait();
+  InvokeRollbackOption();
+  JSExpect("$('reset').classList.contains('rollback-proposal-view')");
+}
+
 }  // namespace chromeos
diff --git a/chrome/browser/chromeos/login/supervised/supervised_user_creation_screen.cc b/chrome/browser/chromeos/login/supervised/supervised_user_creation_screen.cc
index 514f2f2..40fa984 100644
--- a/chrome/browser/chromeos/login/supervised/supervised_user_creation_screen.cc
+++ b/chrome/browser/chromeos/login/supervised/supervised_user_creation_screen.cc
@@ -27,6 +27,8 @@
 #include "chrome/browser/supervised_user/supervised_user_sync_service.h"
 #include "chrome/browser/supervised_user/supervised_user_sync_service_factory.h"
 #include "chrome/grit/generated_resources.h"
+#include "chromeos/dbus/dbus_thread_manager.h"
+#include "chromeos/dbus/session_manager_client.h"
 #include "chromeos/login/auth/key.h"
 #include "chromeos/login/auth/user_context.h"
 #include "chromeos/network/network_state.h"
@@ -202,10 +204,16 @@
 }
 
 void SupervisedUserCreationScreen::AbortFlow() {
+  DBusThreadManager::Get()
+      ->GetSessionManagerClient()
+      ->NotifySupervisedUserCreationFinished();
   controller_->CancelCreation();
 }
 
 void SupervisedUserCreationScreen::FinishFlow() {
+  DBusThreadManager::Get()
+      ->GetSessionManagerClient()
+      ->NotifySupervisedUserCreationFinished();
   controller_->FinishCreation();
 }
 
@@ -358,6 +366,9 @@
 
 void SupervisedUserCreationScreen::OnManagerFullyAuthenticated(
     Profile* manager_profile) {
+  DBusThreadManager::Get()
+      ->GetSessionManagerClient()
+      ->NotifySupervisedUserCreationStarted();
   manager_signin_in_progress_ = false;
   DCHECK(controller_.get());
   // For manager user, move desktop to locked container so that windows created
diff --git a/chrome/browser/chromeos/ownership/owner_settings_service_chromeos.cc b/chrome/browser/chromeos/ownership/owner_settings_service_chromeos.cc
index f30a5fa..1912712 100644
--- a/chrome/browser/chromeos/ownership/owner_settings_service_chromeos.cc
+++ b/chrome/browser/chromeos/ownership/owner_settings_service_chromeos.cc
@@ -157,7 +157,6 @@
       profile_(profile),
       waiting_for_profile_creation_(true),
       waiting_for_tpm_token_(true),
-      has_pending_changes_(false),
       weak_factory_(this),
       store_settings_factory_(this) {
   if (TPMTokenLoader::IsInitialized()) {
@@ -180,8 +179,6 @@
   registrar_.Add(this,
                  chrome::NOTIFICATION_PROFILE_CREATED,
                  content::Source<Profile>(profile_));
-
-  UpdateFromService();
 }
 
 OwnerSettingsServiceChromeOS::~OwnerSettingsServiceChromeOS() {
@@ -215,15 +212,23 @@
   if (!IsOwner() && !IsOwnerInTests(user_id_))
     return false;
 
-  UpdateDeviceSettings(setting, value, device_settings_);
+  pending_changes_.add(setting, make_scoped_ptr(value.DeepCopy()));
+
+  em::ChromeDeviceSettingsProto settings;
+  if (tentative_settings_.get()) {
+    settings = *tentative_settings_;
+  } else if (device_settings_service_->status() ==
+                 DeviceSettingsService::STORE_SUCCESS &&
+             device_settings_service_->device_settings()) {
+    settings = *device_settings_service_->device_settings();
+  }
+  UpdateDeviceSettings(setting, value, settings);
   em::PolicyData policy_data;
   policy_data.set_username(user_id_);
-  CHECK(device_settings_.SerializeToString(policy_data.mutable_policy_value()));
-  FOR_EACH_OBSERVER(OwnerSettingsService::Observer,
-                    observers_,
+  CHECK(settings.SerializeToString(policy_data.mutable_policy_value()));
+  FOR_EACH_OBSERVER(OwnerSettingsService::Observer, observers_,
                     OnTentativeChangesInPolicy(policy_data));
-  has_pending_changes_ = true;
-  StoreDeviceSettings();
+  StorePendingChanges();
   return true;
 }
 
@@ -236,12 +241,9 @@
                << user_id_;
     return false;
   }
-  CHECK(device_settings_.ParseFromString(policy->policy_value()));
-  FOR_EACH_OBSERVER(OwnerSettingsService::Observer,
-                    observers_,
-                    OnTentativeChangesInPolicy(*policy));
-  has_pending_changes_ = true;
-  StoreDeviceSettings();
+  tentative_settings_.reset(new em::ChromeDeviceSettingsProto);
+  CHECK(tentative_settings_->ParseFromString(policy->policy_value()));
+  StorePendingChanges();
   return true;
 }
 
@@ -273,12 +275,12 @@
 
 void OwnerSettingsServiceChromeOS::OwnershipStatusChanged() {
   DCHECK(thread_checker_.CalledOnValidThread());
-  StoreDeviceSettings();
+  StorePendingChanges();
 }
 
 void OwnerSettingsServiceChromeOS::DeviceSettingsUpdated() {
   DCHECK(thread_checker_.CalledOnValidThread());
-  StoreDeviceSettings();
+  StorePendingChanges();
 }
 
 void OwnerSettingsServiceChromeOS::OnDeviceSettingsServiceShutdown() {
@@ -586,17 +588,32 @@
                  callback));
 }
 
-void OwnerSettingsServiceChromeOS::StoreDeviceSettings() {
-  if (!has_pending_changes_ || store_settings_factory_.HasWeakPtrs())
+void OwnerSettingsServiceChromeOS::StorePendingChanges() {
+  if (!has_pending_changes() || store_settings_factory_.HasWeakPtrs() ||
+      !device_settings_service_) {
     return;
-  if (!UpdateFromService())
+  }
+
+  em::ChromeDeviceSettingsProto settings;
+  if (tentative_settings_.get()) {
+    settings.Swap(tentative_settings_.get());
+    tentative_settings_.reset();
+  } else if (device_settings_service_->status() ==
+                 DeviceSettingsService::STORE_SUCCESS &&
+             device_settings_service_->device_settings()) {
+    settings = *device_settings_service_->device_settings();
+  } else {
     return;
+  }
+
+  for (const auto& change : pending_changes_)
+    UpdateDeviceSettings(change.first, *change.second, settings);
+  pending_changes_.clear();
+
   scoped_ptr<em::PolicyData> policy = AssemblePolicy(
-      user_id_, device_settings_service_->policy_data(), &device_settings_);
-  has_pending_changes_ = false;
+      user_id_, device_settings_service_->policy_data(), &settings);
   bool rv = AssembleAndSignPolicyAsync(
-      content::BrowserThread::GetBlockingPool(),
-      policy.Pass(),
+      content::BrowserThread::GetBlockingPool(), policy.Pass(),
       base::Bind(&OwnerSettingsServiceChromeOS::OnPolicyAssembledAndSigned,
                  store_settings_factory_.GetWeakPtr()));
   if (!rv)
@@ -621,23 +638,7 @@
   FOR_EACH_OBSERVER(OwnerSettingsService::Observer,
                     observers_,
                     OnSignedPolicyStored(success));
-  StoreDeviceSettings();
-  if (!success)
-    has_pending_changes_ = true;
-}
-
-bool OwnerSettingsServiceChromeOS::UpdateFromService() {
-  if (!device_settings_service_ ||
-      device_settings_service_->status() !=
-          DeviceSettingsService::STORE_SUCCESS ||
-      !device_settings_service_->device_settings()) {
-    return false;
-  }
-  enterprise_management::ChromeDeviceSettingsProto settings =
-      *device_settings_service_->device_settings();
-  settings.MergeFrom(device_settings_);
-  device_settings_.Swap(&settings);
-  return true;
+  StorePendingChanges();
 }
 
 }  // namespace chromeos
diff --git a/chrome/browser/chromeos/ownership/owner_settings_service_chromeos.h b/chrome/browser/chromeos/ownership/owner_settings_service_chromeos.h
index 6b24bfe..1e6415f 100644
--- a/chrome/browser/chromeos/ownership/owner_settings_service_chromeos.h
+++ b/chrome/browser/chromeos/ownership/owner_settings_service_chromeos.h
@@ -9,7 +9,9 @@
 #include <vector>
 
 #include "base/callback_forward.h"
+#include "base/containers/scoped_ptr_hash_map.h"
 #include "base/macros.h"
+#include "base/values.h"
 #include "chrome/browser/chromeos/policy/proto/chrome_device_policy.pb.h"
 #include "chrome/browser/chromeos/settings/device_settings_service.h"
 #include "chromeos/dbus/session_manager_client.h"
@@ -83,7 +85,9 @@
       const base::Value& value,
       enterprise_management::ChromeDeviceSettingsProto& settings);
 
-  bool has_pending_changes() const { return has_pending_changes_; }
+  bool has_pending_changes() const {
+    return !pending_changes_.empty() || tentative_settings_.get();
+  }
 
  private:
   friend class OwnerSettingsServiceChromeOSFactory;
@@ -104,10 +108,8 @@
   // Possibly notifies DeviceSettingsService that owner's keypair is loaded.
   virtual void OnPostKeypairLoadedActions() override;
 
-  // Tries to sign store current device settings if there're pending
-  // changes in device settings and no active previous call to
-  // DeviceSettingsService::Store().
-  void StoreDeviceSettings();
+  // Tries to apply recent changes to device settings proto, sign it and store.
+  void StorePendingChanges();
 
   // Called when current device settings are successfully signed.
   // Sends signed settings for storage.
@@ -119,10 +121,6 @@
   // settings again.
   void OnSignedPolicyStored(bool success);
 
-  // Fetches device settings from DeviceSettingsService and merges
-  // them with local device settings.
-  bool UpdateFromService();
-
   DeviceSettingsService* device_settings_service_;
 
   // Profile this service instance belongs to.
@@ -137,15 +135,12 @@
   // Whether TPM token still needs to be initialized.
   bool waiting_for_tpm_token_;
 
-  // The device settings.  This may be different from the actual
-  // current device settings (which can be obtained from
-  // DeviceSettingsService) in case the device does not have an owner
-  // yet or there are pending changes that have not yet been written
-  // to session_manager.
-  enterprise_management::ChromeDeviceSettingsProto device_settings_;
+  // A set of pending changes to device settings.
+  base::ScopedPtrHashMap<std::string, base::Value> pending_changes_;
 
-  // True if some settings were changed but not stored.
-  bool has_pending_changes_;
+  // A protobuf containing pending changes to device settings.
+  scoped_ptr<enterprise_management::ChromeDeviceSettingsProto>
+      tentative_settings_;
 
   content::NotificationRegistrar registrar_;
 
diff --git a/chrome/browser/chromeos/settings/device_settings_test_helper.cc b/chrome/browser/chromeos/settings/device_settings_test_helper.cc
index fed7034..537c3bf 100644
--- a/chrome/browser/chromeos/settings/device_settings_test_helper.cc
+++ b/chrome/browser/chromeos/settings/device_settings_test_helper.cc
@@ -113,6 +113,10 @@
 
 void DeviceSettingsTestHelper::StopSession() {}
 
+void DeviceSettingsTestHelper::NotifySupervisedUserCreationStarted() {}
+
+void DeviceSettingsTestHelper::NotifySupervisedUserCreationFinished() {}
+
 void DeviceSettingsTestHelper::StartDeviceWipe() {}
 
 void DeviceSettingsTestHelper::RequestLockScreen() {}
diff --git a/chrome/browser/chromeos/settings/device_settings_test_helper.h b/chrome/browser/chromeos/settings/device_settings_test_helper.h
index 8100563..a3edc72 100644
--- a/chrome/browser/chromeos/settings/device_settings_test_helper.h
+++ b/chrome/browser/chromeos/settings/device_settings_test_helper.h
@@ -92,6 +92,8 @@
   virtual void RestartJob(int pid, const std::string& command_line) override;
   virtual void StartSession(const std::string& user_email) override;
   virtual void StopSession() override;
+  virtual void NotifySupervisedUserCreationStarted() override;
+  virtual void NotifySupervisedUserCreationFinished() override;
   virtual void StartDeviceWipe() override;
   virtual void RequestLockScreen() override;
   virtual void NotifyLockScreenShown() override;
diff --git a/chrome/browser/component_updater/recovery_component_installer.cc b/chrome/browser/component_updater/recovery_component_installer.cc
index f6b5727..897230e 100644
--- a/chrome/browser/component_updater/recovery_component_installer.cc
+++ b/chrome/browser/component_updater/recovery_component_installer.cc
@@ -120,6 +120,11 @@
   base::FilePath path;
   if (!PathService::Get(DIR_RECOVERY_BASE, &path))
     return false;
+  if (!base::PathExists(path)) {
+    if (!base::CreateDirectory(path)) {
+      return false;
+    }
+  }
   path = path.AppendASCII(version.GetString());
   if (base::PathExists(path) && !base::DeleteFile(path, true))
     return false;
diff --git a/chrome/browser/extensions/api/copresence/copresence_api_unittest.cc b/chrome/browser/extensions/api/copresence/copresence_api_unittest.cc
index 6463c26..4a7f536 100644
--- a/chrome/browser/extensions/api/copresence/copresence_api_unittest.cc
+++ b/chrome/browser/extensions/api/copresence/copresence_api_unittest.cc
@@ -218,6 +218,21 @@
                 .token_exchange_strategy().broadcast_scan_configuration());
 }
 
+TEST_F(CopresenceApiUnittest, LowPowerStrategy) {
+  scoped_ptr<Operation> subscribe_operation(new Operation);
+  subscribe_operation->subscribe.reset(CreateSubscribe("sub"));
+  subscribe_operation->subscribe->strategies.reset(new Strategy);
+  subscribe_operation->subscribe->strategies->low_power.reset(new bool(true));
+
+  ListValue* operation_list = new ListValue;
+  operation_list->Append(subscribe_operation->ToValue().release());
+  EXPECT_TRUE(ExecuteOperations(operation_list));
+
+  EXPECT_EQ(copresence::BROADCAST_SCAN_CONFIGURATION_UNKNOWN,
+            request_sent().manage_subscriptions_request().subscription(0)
+                .token_exchange_strategy().broadcast_scan_configuration());
+}
+
 TEST_F(CopresenceApiUnittest, UnPubSub) {
   // First we need to create a publish and a subscribe to cancel.
   scoped_ptr<Operation> publish_operation(new Operation);
diff --git a/chrome/browser/extensions/api/copresence/copresence_translations.cc b/chrome/browser/extensions/api/copresence/copresence_translations.cc
index 57395d4..d00df3f 100644
--- a/chrome/browser/extensions/api/copresence/copresence_translations.cc
+++ b/chrome/browser/extensions/api/copresence/copresence_translations.cc
@@ -34,9 +34,6 @@
 }
 
 BroadcastScanConfiguration TranslateStrategy(const Strategy& strategy) {
-  if (strategy.low_power && *strategy.low_power)
-    return BROADCAST_SCAN_CONFIGURATION_UNKNOWN;
-
   bool only_broadcast = strategy.only_broadcast && *strategy.only_broadcast;
   bool only_scan = strategy.only_scan && *strategy.only_scan;
 
@@ -55,10 +52,16 @@
                               BroadcastScanConfiguration default_config,
                               TokenExchangeStrategy* strategy_proto) {
   if (strategy) {
-    BroadcastScanConfiguration config = TranslateStrategy(*strategy);
-    strategy_proto->set_broadcast_scan_configuration(
-        config == BROADCAST_SCAN_CONFIGURATION_UNKNOWN ?
-        default_config : config);
+    BroadcastScanConfiguration config;
+    if (strategy->low_power && *(strategy->low_power)) {
+      config = BROADCAST_SCAN_CONFIGURATION_UNKNOWN;
+    } else {
+      config = TranslateStrategy(*strategy);
+      if (config == BROADCAST_SCAN_CONFIGURATION_UNKNOWN)
+        config = default_config;
+    }
+
+    strategy_proto->set_broadcast_scan_configuration(config);
     strategy_proto->set_audio_configuration(
         strategy->audible && *strategy->audible ? AUDIO_CONFIGURATION_AUDIBLE
                                                 : AUDIO_CONFIGURATION_UNKNOWN);
diff --git a/chrome/browser/favicon/favicon_handler.cc b/chrome/browser/favicon/favicon_handler.cc
index acccc57..a1bbe17 100644
--- a/chrome/browser/favicon/favicon_handler.cc
+++ b/chrome/browser/favicon/favicon_handler.cc
@@ -352,7 +352,8 @@
   if (PageChangedSinceFaviconWasRequested() || !current_candidate())
     return;
 
-  if (current_candidate()->icon_type == favicon_base::FAVICON) {
+  if (current_candidate()->icon_type == favicon_base::FAVICON &&
+      !download_largest_icon_) {
     if (!favicon_expired_or_incomplete_ &&
         driver_->GetActiveFaviconValidity() &&
         DoUrlAndIconMatch(*current_candidate(),
@@ -538,7 +539,7 @@
   bool has_valid_result = HasValidResult(favicon_bitmap_results);
 
   if (has_results && icon_types_ == favicon_base::FAVICON &&
-      !driver_->GetActiveFaviconValidity() &&
+      !download_largest_icon_ && !driver_->GetActiveFaviconValidity() &&
       (!current_candidate() ||
        DoUrlsAndIconsMatch(*current_candidate(), favicon_bitmap_results))) {
     if (has_valid_result) {
@@ -546,7 +547,7 @@
       // doesn't have an icon. Set the favicon now, and if the favicon turns out
       // to be expired (or the wrong url) we'll fetch later on. This way the
       // user doesn't see a flash of the default favicon.
-      NotifyFaviconAvailable(favicon_bitmap_results, !download_largest_icon_);
+      NotifyFaviconAvailable(favicon_bitmap_results, true);
     } else {
       // If |favicon_bitmap_results| does not have any valid results, treat the
       // favicon as if it's expired.
@@ -575,7 +576,8 @@
   // else we haven't got the icon url. When we get it we'll ask the
   // renderer to download the icon.
 
-  if (has_valid_result && icon_types_ != favicon_base::FAVICON)
+  if (has_valid_result &&
+      (icon_types_ != favicon_base::FAVICON || download_largest_icon_))
     NotifyFaviconAvailable(favicon_bitmap_results, false);
 }
 
@@ -619,12 +621,13 @@
       preferred_icon_size(), favicon_bitmap_results);
   bool has_valid_result = HasValidResult(favicon_bitmap_results);
 
-  if (has_results && icon_types_ == favicon_base::FAVICON) {
+  if (has_results && icon_types_ == favicon_base::FAVICON &&
+      !download_largest_icon_) {
     if (has_valid_result) {
       // There is a favicon, set it now. If expired we'll download the current
       // one again, but at least the user will get some icon instead of the
       // default and most likely the current one is fine anyway.
-      NotifyFaviconAvailable(favicon_bitmap_results, !download_largest_icon_);
+      NotifyFaviconAvailable(favicon_bitmap_results, true);
     }
     if (has_expired_or_incomplete_result) {
       // The favicon is out of date. Request the current one.
@@ -643,8 +646,10 @@
   }
   history_results_ = favicon_bitmap_results;
 
-  if (has_valid_result && icon_types_ != favicon_base::FAVICON)
+  if (has_valid_result &&
+      (icon_types_ != favicon_base::FAVICON || download_largest_icon_)) {
     NotifyFaviconAvailable(favicon_bitmap_results, false);
+  }
 }
 
 int FaviconHandler::ScheduleDownload(const GURL& url,
diff --git a/chrome/browser/favicon/favicon_handler_unittest.cc b/chrome/browser/favicon/favicon_handler_unittest.cc
index 266d1a8..5649f6f 100644
--- a/chrome/browser/favicon/favicon_handler_unittest.cc
+++ b/chrome/browser/favicon/favicon_handler_unittest.cc
@@ -191,6 +191,7 @@
  public:
   TestFaviconDriver()
       : favicon_validity_(false),
+        num_active_favicon_(0),
         num_favicon_available_(0),
         update_active_favicon_(false) {}
 
@@ -224,20 +225,22 @@
   void OnFaviconAvailable(const gfx::Image& image,
                           const GURL& icon_url,
                           bool update_active_favicon) override {
+    ++num_favicon_available_;
     available_image_ = image;
     available_icon_url_ = icon_url;
     update_active_favicon_ = update_active_favicon;
     if (!update_active_favicon)
       return;
 
-    ++num_favicon_available_;
+    ++num_active_favicon_;
     SetActiveFaviconURL(icon_url);
     SetActiveFaviconValidity(true);
     SetActiveFaviconImage(image);
   }
 
+  size_t num_active_favicon() const { return num_active_favicon_; }
   size_t num_favicon_available() const { return num_favicon_available_; }
-
+  void ResetNumActiveFavicon() { num_active_favicon_ = 0; }
   void ResetNumFaviconAvailable() { num_favicon_available_ = 0; }
 
   void SetActiveURL(GURL url) { url_ = url; }
@@ -254,6 +257,9 @@
   gfx::Image image_;
   bool favicon_validity_;
 
+  // The number of times that NotifyFaviconAvailable() has been called with
+  // |is_active_favicon| is true.
+  size_t num_active_favicon_;
   // The number of times that NotifyFaviconAvailable() has been called.
   size_t num_favicon_available_;
   gfx::Image available_image_;
@@ -443,7 +449,7 @@
       download_handler->SetImageSizes(sizes);
       download_handler->InvokeCallback();
 
-      if (favicon_driver->num_favicon_available())
+      if (favicon_driver->num_active_favicon())
         return;
     }
   }
@@ -452,7 +458,7 @@
                         TestFaviconHandler* favicon_handler,
                         const GURL& page_url,
                         const std::vector<FaviconURL>& candidate_icons) {
-    favicon_driver->ResetNumFaviconAvailable();
+    favicon_driver->ResetNumActiveFavicon();
 
     favicon_handler->FetchFavicon(page_url);
     favicon_handler->history_handler()->InvokeCallback();
@@ -1570,4 +1576,86 @@
   EXPECT_FALSE(favicon_service->WasUnableToDownloadFavicon(missing_icon_url));
 }
 
+class FaviconHandlerActiveFaviconValidityParamTest :
+      public FaviconHandlerTest,
+      public ::testing::WithParamInterface<bool> {
+ public:
+  FaviconHandlerActiveFaviconValidityParamTest() {}
+
+  ~FaviconHandlerActiveFaviconValidityParamTest() override {}
+
+  bool GetActiveFaviconValiditySetting() {
+    return GetParam();
+  }
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(FaviconHandlerActiveFaviconValidityParamTest);
+};
+
+TEST_P(FaviconHandlerActiveFaviconValidityParamTest,
+       TestDownloadLargestIconDoesNotImpactActiveFaviconValidity) {
+  const GURL page_url("http://www.google.com");
+
+  std::vector<gfx::Size> one_icon;
+  one_icon.push_back(gfx::Size(15, 15));
+
+  const GURL old_favicon_url("http://www.google.com/old");
+  const GURL new_favicon_url("http://www.google.com/b");
+  const FaviconURL source_icon_urls[] = {
+      FaviconURL(new_favicon_url, favicon_base::FAVICON, one_icon)};
+  TestFaviconClient client;
+  TestFaviconDriver driver1;
+  TestFaviconHandler handler1(
+      page_url, &client, &driver1, FaviconHandler::FAVICON, true);
+  std::vector<FaviconURL> urls1(source_icon_urls,
+                                source_icon_urls + arraysize(source_icon_urls));
+  UpdateFaviconURL(&driver1, &handler1, page_url, urls1);
+
+  HistoryRequestHandler* history_handler = handler1.history_handler();
+
+  // Simulate the active favicon is updated, this shouldn't happen in real
+  // use case, but we want to verify the behavior below is not impacted by
+  // accident.
+  driver1.SetActiveFaviconValidity(GetActiveFaviconValiditySetting());
+  // Simulate the get favicon from history, but favicon URL didn't match.
+  SetFaviconRawBitmapResult(old_favicon_url,
+                            &history_handler->history_results_);
+  history_handler->InvokeCallback();
+  // Since we downloaded largest icon, and don't want to set active favicon
+  // NotifyFaviconAvaliable() should be called with is_active_favicon as false.
+  EXPECT_EQ(old_favicon_url, driver1.available_icon_url());
+  EXPECT_FALSE(driver1.update_active_favicon());
+  EXPECT_EQ(1u, driver1.num_favicon_available());
+
+  // We are trying to get favicon from history again.
+  history_handler = handler1.history_handler();
+  EXPECT_EQ(new_favicon_url, history_handler->icon_url_);
+  // Simulate the get expired favicon from history.
+  history_handler->history_results_.clear();
+  SetFaviconRawBitmapResult(new_favicon_url, favicon_base::FAVICON, true,
+                            &history_handler->history_results_);
+  history_handler->InvokeCallback();
+  // Since we downloaded largest icon, and don't want to set active favicon
+  // NotifyFaviconAvaliable() should be called with is_active_favicon as false.
+  EXPECT_EQ(new_favicon_url, driver1.available_icon_url());
+  EXPECT_FALSE(driver1.update_active_favicon());
+  EXPECT_EQ(2u, driver1.num_favicon_available());
+
+  // We are trying to download favicon.
+  DownloadHandler* download_handler = handler1.download_handler();
+  EXPECT_TRUE(download_handler->HasDownload());
+  EXPECT_EQ(new_favicon_url, download_handler->GetImageUrl());
+  // Simulate the download succeed.
+  download_handler->InvokeCallback();
+  // Since we downloaded largest icon, and don't want to set active favicon
+  // NotifyFaviconAvaliable() should be called with is_active_favicon as false.
+  EXPECT_EQ(new_favicon_url, driver1.available_icon_url());
+  EXPECT_FALSE(driver1.update_active_favicon());
+  EXPECT_EQ(3u, driver1.num_favicon_available());
+}
+
+INSTANTIATE_TEST_CASE_P(FaviconHandlerTestActiveFaviconValidityTrueOrFalse,
+                        FaviconHandlerActiveFaviconValidityParamTest,
+                        ::testing::Bool());
+
 }  // namespace.
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc
index 56bac85..6ea64ff 100644
--- a/chrome/browser/prefs/browser_prefs.cc
+++ b/chrome/browser/prefs/browser_prefs.cc
@@ -65,6 +65,7 @@
 #include "chrome/browser/ui/browser_ui_prefs.h"
 #include "chrome/browser/ui/navigation_correction_tab_observer.h"
 #include "chrome/browser/ui/network_profile_bubble.h"
+#include "chrome/browser/ui/passwords/password_bubble_experiment.h"
 #include "chrome/browser/ui/prefs/prefs_tab_helper.h"
 #include "chrome/browser/ui/search_engines/keyword_editor_controller.h"
 #include "chrome/browser/ui/startup/autolaunch_prompt.h"
@@ -407,6 +408,7 @@
   MediaStreamDevicesController::RegisterProfilePrefs(registry);
   NetPrefObserver::RegisterProfilePrefs(registry);
   password_manager::PasswordManager::RegisterProfilePrefs(registry);
+  password_bubble_experiment::RegisterPrefs(registry);
   PrefProxyConfigTrackerImpl::RegisterProfilePrefs(registry);
   PrefsTabHelper::RegisterProfilePrefs(registry);
   Profile::RegisterProfilePrefs(registry);
diff --git a/chrome/browser/resources/chromeos/genius_app/manifest.json b/chrome/browser/resources/chromeos/genius_app/manifest.json
index 2f663e0..84f38e9 100644
--- a/chrome/browser/resources/chromeos/genius_app/manifest.json
+++ b/chrome/browser/resources/chromeos/genius_app/manifest.json
@@ -6,6 +6,7 @@
   "version": "0.2",
   "minimum_chrome_version": "28",
   "default_locale": "en",
+  "incognito" : "split",
   "icons": {
     "16": "icon/16.png",
     "32": "icon/32.png",
diff --git a/chrome/browser/safe_browsing/database_manager.cc b/chrome/browser/safe_browsing/database_manager.cc
index 94b2c76..e0c634b 100644
--- a/chrome/browser/safe_browsing/database_manager.cc
+++ b/chrome/browser/safe_browsing/database_manager.cc
@@ -67,26 +67,50 @@
                                              threat_type);
 }
 
-// Return the list id from the first result in |full_hashes| which matches
+// Return the severest list id from the results in |full_hashes| which matches
 // |hash|, or INVALID if none match.
-safe_browsing_util::ListType GetHashThreatListType(
+safe_browsing_util::ListType GetHashSeverestThreatListType(
     const SBFullHash& hash,
     const std::vector<SBFullHashResult>& full_hashes,
     size_t* index) {
+  safe_browsing_util::ListType pending_threat = safe_browsing_util::INVALID;
   for (size_t i = 0; i < full_hashes.size(); ++i) {
     if (SBFullHashEqual(hash, full_hashes[i].hash)) {
-      if (index)
-        *index = i;
-      return static_cast<safe_browsing_util::ListType>(full_hashes[i].list_id);
+      const safe_browsing_util::ListType threat =
+          static_cast<safe_browsing_util::ListType>(full_hashes[i].list_id);
+      switch (threat) {
+        case safe_browsing_util::INVALID:
+          // |full_hashes| should never contain INVALID as a |list_id|.
+          NOTREACHED();
+          break;
+        case safe_browsing_util::MALWARE:                  // Falls through.
+        case safe_browsing_util::PHISH:                    // Falls through.
+        case safe_browsing_util::BINURL:                   // Falls through.
+        case safe_browsing_util::CSDWHITELIST:             // Falls through.
+        case safe_browsing_util::DOWNLOADWHITELIST:        // Falls through.
+        case safe_browsing_util::EXTENSIONBLACKLIST:       // Falls through.
+        case safe_browsing_util::SIDEEFFECTFREEWHITELIST:  // Falls through.
+        case safe_browsing_util::IPBLACKLIST:
+          if (index)
+            *index = i;
+          return threat;
+        case safe_browsing_util::UNWANTEDURL:
+          // UNWANTEDURL is considered less severe than other threats, keep
+          // looking.
+          pending_threat = threat;
+          if (index)
+            *index = i;
+          break;
+      }
     }
   }
-  return safe_browsing_util::INVALID;
+  return pending_threat;
 }
 
 // Given a URL, compare all the possible host + path full hashes to the set of
-// provided full hashes.  Returns the list id of the a matching result from
-// |full_hashes|, or INVALID if none match.
-safe_browsing_util::ListType GetUrlThreatListType(
+// provided full hashes.  Returns the list id of the severest matching result
+// from |full_hashes|, or INVALID if none match.
+safe_browsing_util::ListType GetUrlSeverestThreatListType(
     const GURL& url,
     const std::vector<SBFullHashResult>& full_hashes,
     size_t* index) {
@@ -96,13 +120,31 @@
   std::vector<std::string> patterns;
   safe_browsing_util::GeneratePatternsToCheck(url, &patterns);
 
+  safe_browsing_util::ListType pending_threat = safe_browsing_util::INVALID;
   for (size_t i = 0; i < patterns.size(); ++i) {
-    safe_browsing_util::ListType threat = GetHashThreatListType(
+    safe_browsing_util::ListType threat = GetHashSeverestThreatListType(
         SBFullHashForString(patterns[i]), full_hashes, index);
-    if (threat != safe_browsing_util::INVALID)
-      return threat;
+    switch (threat) {
+      case safe_browsing_util::INVALID:
+        // Ignore patterns with no matching threat.
+        break;
+      case safe_browsing_util::MALWARE:                  // Falls through.
+      case safe_browsing_util::PHISH:                    // Falls through.
+      case safe_browsing_util::BINURL:                   // Falls through.
+      case safe_browsing_util::CSDWHITELIST:             // Falls through.
+      case safe_browsing_util::DOWNLOADWHITELIST:        // Falls through.
+      case safe_browsing_util::EXTENSIONBLACKLIST:       // Falls through.
+      case safe_browsing_util::SIDEEFFECTFREEWHITELIST:  // Falls through.
+      case safe_browsing_util::IPBLACKLIST:
+        return threat;
+      case safe_browsing_util::UNWANTEDURL:
+        // UNWANTEDURL is considered less severe than other threats, keep
+        // looking.
+        pending_threat = threat;
+        break;
+    }
   }
-  return safe_browsing_util::INVALID;
+  return pending_threat;
 }
 
 SBThreatType GetThreatTypeFromListType(safe_browsing_util::ListType list_type) {
@@ -111,6 +153,8 @@
       return SB_THREAT_TYPE_URL_PHISHING;
     case safe_browsing_util::MALWARE:
       return SB_THREAT_TYPE_URL_MALWARE;
+    case safe_browsing_util::UNWANTEDURL:
+      return SB_THREAT_TYPE_URL_UNWANTED;
     case safe_browsing_util::BINURL:
       return SB_THREAT_TYPE_BINARY_MALWARE_URL;
     case safe_browsing_util::EXTENSIONBLACKLIST:
@@ -124,20 +168,20 @@
 }  // namespace
 
 // static
-SBThreatType SafeBrowsingDatabaseManager::GetHashThreatType(
+SBThreatType SafeBrowsingDatabaseManager::GetHashSeverestThreatType(
     const SBFullHash& hash,
     const std::vector<SBFullHashResult>& full_hashes) {
   return GetThreatTypeFromListType(
-      GetHashThreatListType(hash, full_hashes, NULL));
+      GetHashSeverestThreatListType(hash, full_hashes, NULL));
 }
 
 // static
-SBThreatType SafeBrowsingDatabaseManager::GetUrlThreatType(
+SBThreatType SafeBrowsingDatabaseManager::GetUrlSeverestThreatType(
     const GURL& url,
     const std::vector<SBFullHashResult>& full_hashes,
     size_t* index) {
   return GetThreatTypeFromListType(
-      GetUrlThreatListType(url, full_hashes, index));
+      GetUrlSeverestThreatListType(url, full_hashes, index));
 }
 
 SafeBrowsingDatabaseManager::SafeBrowsingCheck::SafeBrowsingCheck(
@@ -170,6 +214,7 @@
     switch (check.check_type) {
       case safe_browsing_util::MALWARE:
       case safe_browsing_util::PHISH:
+      case safe_browsing_util::UNWANTEDURL:
         DCHECK_EQ(1u, check.urls.size());
         OnCheckBrowseUrlResult(
             check.urls[0], check.url_results[0], check.url_metadata[0]);
@@ -216,6 +261,7 @@
       enable_extension_blacklist_(false),
       enable_side_effect_free_whitelist_(false),
       enable_ip_blacklist_(false),
+      enable_unwanted_software_blacklist_(false),
       update_in_progress_(false),
       database_update_in_progress_(false),
       closing_database_(false),
@@ -252,6 +298,10 @@
   // phishing protection for now.
   enable_ip_blacklist_ = enable_csd_whitelist_;
 
+  // TODO(gab): Gate this on the same experiment that will soon control the UwS
+  // URL UI.
+  enable_unwanted_software_blacklist_ = true;
+
   enum SideEffectFreeWhitelistStatus {
     SIDE_EFFECT_FREE_WHITELIST_ENABLED,
     SIDE_EFFECT_FREE_WHITELIST_DISABLED,
@@ -408,6 +458,7 @@
   std::vector<SBThreatType> expected_threats;
   expected_threats.push_back(SB_THREAT_TYPE_URL_MALWARE);
   expected_threats.push_back(SB_THREAT_TYPE_URL_PHISHING);
+  expected_threats.push_back(SB_THREAT_TYPE_URL_UNWANTED);
 
   const base::TimeTicks start = base::TimeTicks::Now();
   if (!MakeDatabaseAvailable()) {
@@ -420,19 +471,45 @@
     return false;
   }
 
-  std::vector<SBPrefix> prefix_hits;
+  // Cache hits should, in general, be the same for both (ignoring potential
+  // cache evictions in the second call for entries that were just about to be
+  // evicted in the first call).
+  // TODO(gab): Refactor SafeBrowsingDatabase to avoid depending on this here.
   std::vector<SBFullHashResult> cache_hits;
 
-  bool prefix_match =
-      database_->ContainsBrowseUrl(url, &prefix_hits, &cache_hits);
+  std::vector<SBPrefix> browse_prefix_hits;
+  bool browse_prefix_match = database_->ContainsBrowseUrl(
+      url, &browse_prefix_hits, &cache_hits);
+
+  std::vector<SBPrefix> unwanted_prefix_hits;
+  std::vector<SBFullHashResult> unused_cache_hits;
+  bool unwanted_prefix_match = database_->ContainsUnwantedSoftwareUrl(
+      url, &unwanted_prefix_hits, &unused_cache_hits);
+
+  // Merge the two pre-sorted prefix hits lists.
+  // TODO(gab): Refactor SafeBrowsingDatabase for it to return this merged list
+  // by default rather than building it here.
+  std::vector<SBPrefix> prefix_hits(browse_prefix_hits.size() +
+                                    unwanted_prefix_hits.size());
+  std::merge(browse_prefix_hits.begin(),
+             browse_prefix_hits.end(),
+             unwanted_prefix_hits.begin(),
+             unwanted_prefix_hits.end(),
+             prefix_hits.begin());
+  prefix_hits.erase(std::unique(prefix_hits.begin(), prefix_hits.end()),
+                    prefix_hits.end());
 
   UMA_HISTOGRAM_TIMES("SB2.FilterCheck", base::TimeTicks::Now() - start);
 
-  if (!prefix_match)
+  if (!browse_prefix_match && !unwanted_prefix_match)
     return true;  // URL is okay.
 
   // Needs to be asynchronous, since we could be in the constructor of a
   // ResourceDispatcherHost event handler which can't pause there.
+  // This check will ping the Safe Browsing servers and get all lists which it
+  // matches. These lists will then be filtered against the |expected_threats|
+  // and the result callback for MALWARE (which is the same as for PHISH and
+  // UNWANTEDURL) will eventually be invoked with the final decision.
   SafeBrowsingCheck* check = new SafeBrowsingCheck(std::vector<GURL>(1, url),
                                                    std::vector<SBFullHash>(),
                                                    client,
@@ -704,7 +781,8 @@
                                    enable_download_whitelist_,
                                    enable_extension_blacklist_,
                                    enable_side_effect_free_whitelist_,
-                                   enable_ip_blacklist_);
+                                   enable_ip_blacklist_,
+                                   enable_unwanted_software_blacklist_);
 
   database->Init(SafeBrowsingService::GetBaseFilename());
   {
@@ -770,10 +848,7 @@
   } else {
     // We may have cached results for previous GetHash queries.  Since
     // this data comes from cache, don't histogram hits.
-    bool is_threat = HandleOneCheck(check, check->cache_hits);
-    // cache_hits should only contain hits for a fullhash we searched for, so if
-    // we got to this point it should always result in a threat match.
-    DCHECK(is_threat);
+    HandleOneCheck(check, check->cache_hits);
   }
 }
 
@@ -939,21 +1014,26 @@
 
   bool is_threat = false;
 
-  // TODO(shess): GetHashThreadListType() contains a loop,
-  // GetUrlThreatListType() a loop around that loop.  Having another loop out
-  // here concerns me.  It is likely that SAFE is an expected outcome, which
-  // means all of those loops run to completion.  Refactoring this to generate a
-  // set of sorted items to compare in sequence would probably improve things.
+  // TODO(shess): GetHashSeverestThreadListType() contains a loop,
+  // GetUrlSeverestThreatListType() a loop around that loop.  Having another
+  // loop out here concerns me.  It is likely that SAFE is an expected outcome,
+  // which means all of those loops run to completion.  Refactoring this to
+  // generate a set of sorted items to compare in sequence would probably
+  // improve things.
   //
   // Additionally, the set of patterns generated from the urls is very similar
   // to the patterns generated in ContainsBrowseUrl() and other database checks,
   // which are called from this code.  Refactoring that across the checks could
   // interact well with batching the checks here.
 
+  // TODO(gab): Fix the fact that Get(Url|Hash)SeverestThreatType() may return a
+  // threat for which IsExpectedThreat() returns false even if |full_hashes|
+  // actually contains an expected threat.
+
   for (size_t i = 0; i < check->urls.size(); ++i) {
     size_t threat_index;
     SBThreatType threat =
-        GetUrlThreatType(check->urls[i], full_hashes, &threat_index);
+        GetUrlSeverestThreatType(check->urls[i], full_hashes, &threat_index);
     if (threat != SB_THREAT_TYPE_SAFE &&
         IsExpectedThreat(threat, check->expected_threats)) {
       check->url_results[i] = threat;
@@ -963,7 +1043,8 @@
   }
 
   for (size_t i = 0; i < check->full_hashes.size(); ++i) {
-    SBThreatType threat = GetHashThreatType(check->full_hashes[i], full_hashes);
+    SBThreatType threat =
+        GetHashSeverestThreatType(check->full_hashes[i], full_hashes);
     if (threat != SB_THREAT_TYPE_SAFE &&
         IsExpectedThreat(threat, check->expected_threats)) {
       check->full_hash_results[i] = threat;
diff --git a/chrome/browser/safe_browsing/database_manager.h b/chrome/browser/safe_browsing/database_manager.h
index e001a35..a3e0117 100644
--- a/chrome/browser/safe_browsing/database_manager.h
+++ b/chrome/browser/safe_browsing/database_manager.h
@@ -216,7 +216,8 @@
   friend class SafeBrowsingServiceTest;
   friend class SafeBrowsingServiceTestHelper;
   friend class SafeBrowsingDatabaseManagerTest;
-  FRIEND_TEST_ALL_PREFIXES(SafeBrowsingDatabaseManagerTest, GetUrlThreatType);
+  FRIEND_TEST_ALL_PREFIXES(SafeBrowsingDatabaseManagerTest,
+                           GetUrlSeverestThreatType);
 
   typedef std::set<SafeBrowsingCheck*> CurrentChecks;
   typedef std::vector<SafeBrowsingCheck*> GetHashRequestors;
@@ -237,16 +238,16 @@
     base::TimeTicks start;  // When check was queued.
   };
 
-  // Return the threat type from the first result in |full_hashes| which matches
+  // Return the threat type of the severest entry in |full_hashes| which matches
   // |hash|, or SAFE if none match.
-  static SBThreatType GetHashThreatType(
+  static SBThreatType GetHashSeverestThreatType(
       const SBFullHash& hash,
       const std::vector<SBFullHashResult>& full_hashes);
 
   // Given a URL, compare all the possible host + path full hashes to the set of
-  // provided full hashes.  Returns the threat type of the matching result from
-  // |full_hashes|, or SAFE if none match.
-  static SBThreatType GetUrlThreatType(
+  // provided full hashes.  Returns the threat type of the severest matching
+  // result from |full_hashes|, or SAFE if none match.
+  static SBThreatType GetUrlSeverestThreatType(
       const GURL& url,
       const std::vector<SBFullHashResult>& full_hashes,
       size_t* index);
@@ -389,6 +390,9 @@
   // Indicate if the csd malware IP blacklist should be enabled.
   bool enable_ip_blacklist_;
 
+  // Indicate if the unwanted software blacklist should be enabled.
+  bool enable_unwanted_software_blacklist_;
+
   // The SafeBrowsing thread that runs database operations.
   //
   // Note: Functions that run on this thread should run synchronously and return
diff --git a/chrome/browser/safe_browsing/database_manager_unittest.cc b/chrome/browser/safe_browsing/database_manager_unittest.cc
index 915790f..0c8c3a2 100644
--- a/chrome/browser/safe_browsing/database_manager_unittest.cc
+++ b/chrome/browser/safe_browsing/database_manager_unittest.cc
@@ -79,15 +79,21 @@
                             safe_browsing_util::kMalwareList));
 }
 
-TEST_F(SafeBrowsingDatabaseManagerTest, GetUrlThreatType) {
+TEST_F(SafeBrowsingDatabaseManagerTest, GetUrlSeverestThreatType) {
   std::vector<SBFullHashResult> full_hashes;
 
   const GURL kMalwareUrl("http://www.malware.com/page.html");
   const GURL kPhishingUrl("http://www.phishing.com/page.html");
+  const GURL kUnwantedUrl("http://www.unwanted.com/page.html");
+  const GURL kUnwantedAndMalwareUrl(
+      "http://www.unwantedandmalware.com/page.html");
   const GURL kSafeUrl("http://www.safe.com/page.html");
 
   const SBFullHash kMalwareHostHash = SBFullHashForString("malware.com/");
   const SBFullHash kPhishingHostHash = SBFullHashForString("phishing.com/");
+  const SBFullHash kUnwantedHostHash = SBFullHashForString("unwanted.com/");
+  const SBFullHash kUnwantedAndMalwareHostHash =
+      SBFullHashForString("unwantedandmalware.com/");
   const SBFullHash kSafeHostHash = SBFullHashForString("www.safe.com/");
 
   {
@@ -104,32 +110,73 @@
     full_hashes.push_back(full_hash);
   }
 
+  {
+    SBFullHashResult full_hash;
+    full_hash.hash = kUnwantedHostHash;
+    full_hash.list_id = static_cast<int>(safe_browsing_util::UNWANTEDURL);
+    full_hashes.push_back(full_hash);
+  }
+
+  {
+    // Add both MALWARE and UNWANTEDURL list IDs for
+    // kUnwantedAndMalwareHostHash.
+    SBFullHashResult full_hash_malware;
+    full_hash_malware.hash = kUnwantedAndMalwareHostHash;
+    full_hash_malware.list_id = static_cast<int>(safe_browsing_util::MALWARE);
+    full_hashes.push_back(full_hash_malware);
+
+    SBFullHashResult full_hash_unwanted;
+    full_hash_unwanted.hash = kUnwantedAndMalwareHostHash;
+    full_hash_unwanted.list_id =
+        static_cast<int>(safe_browsing_util::UNWANTEDURL);
+    full_hashes.push_back(full_hash_unwanted);
+  }
+
   EXPECT_EQ(SB_THREAT_TYPE_URL_MALWARE,
-            SafeBrowsingDatabaseManager::GetHashThreatType(
+            SafeBrowsingDatabaseManager::GetHashSeverestThreatType(
                 kMalwareHostHash, full_hashes));
 
   EXPECT_EQ(SB_THREAT_TYPE_URL_PHISHING,
-            SafeBrowsingDatabaseManager::GetHashThreatType(
+            SafeBrowsingDatabaseManager::GetHashSeverestThreatType(
                 kPhishingHostHash, full_hashes));
 
+  EXPECT_EQ(SB_THREAT_TYPE_URL_UNWANTED,
+            SafeBrowsingDatabaseManager::GetHashSeverestThreatType(
+                kUnwantedHostHash, full_hashes));
+
+  EXPECT_EQ(SB_THREAT_TYPE_URL_MALWARE,
+            SafeBrowsingDatabaseManager::GetHashSeverestThreatType(
+                kUnwantedAndMalwareHostHash, full_hashes));
+
   EXPECT_EQ(SB_THREAT_TYPE_SAFE,
-            SafeBrowsingDatabaseManager::GetHashThreatType(
+            SafeBrowsingDatabaseManager::GetHashSeverestThreatType(
                 kSafeHostHash, full_hashes));
 
-  size_t index = 100;
+  const size_t kArbitraryValue = 123456U;
+  size_t index = kArbitraryValue;
   EXPECT_EQ(SB_THREAT_TYPE_URL_MALWARE,
-            SafeBrowsingDatabaseManager::GetUrlThreatType(
+            SafeBrowsingDatabaseManager::GetUrlSeverestThreatType(
                 kMalwareUrl, full_hashes, &index));
   EXPECT_EQ(0U, index);
 
   EXPECT_EQ(SB_THREAT_TYPE_URL_PHISHING,
-            SafeBrowsingDatabaseManager::GetUrlThreatType(
+            SafeBrowsingDatabaseManager::GetUrlSeverestThreatType(
                 kPhishingUrl, full_hashes, &index));
   EXPECT_EQ(1U, index);
 
-  index = 100;
+  EXPECT_EQ(SB_THREAT_TYPE_URL_UNWANTED,
+            SafeBrowsingDatabaseManager::GetUrlSeverestThreatType(
+                kUnwantedUrl, full_hashes, &index));
+  EXPECT_EQ(2U, index);
+
+  EXPECT_EQ(SB_THREAT_TYPE_URL_MALWARE,
+            SafeBrowsingDatabaseManager::GetUrlSeverestThreatType(
+                kUnwantedAndMalwareUrl, full_hashes, &index));
+  EXPECT_EQ(3U, index);
+
+  index = kArbitraryValue;
   EXPECT_EQ(SB_THREAT_TYPE_SAFE,
-            SafeBrowsingDatabaseManager::GetUrlThreatType(
+            SafeBrowsingDatabaseManager::GetUrlSeverestThreatType(
                 kSafeUrl, full_hashes, &index));
-  EXPECT_EQ(100U, index);
+  EXPECT_EQ(kArbitraryValue, index);
 }
diff --git a/chrome/browser/safe_browsing/ping_manager.cc b/chrome/browser/safe_browsing/ping_manager.cc
index 92b0329..0478341 100644
--- a/chrome/browser/safe_browsing/ping_manager.cc
+++ b/chrome/browser/safe_browsing/ping_manager.cc
@@ -101,6 +101,7 @@
     SBThreatType threat_type) const {
   DCHECK(threat_type == SB_THREAT_TYPE_URL_MALWARE ||
          threat_type == SB_THREAT_TYPE_URL_PHISHING ||
+         threat_type == SB_THREAT_TYPE_URL_UNWANTED ||
          threat_type == SB_THREAT_TYPE_BINARY_MALWARE_URL ||
          threat_type == SB_THREAT_TYPE_CLIENT_SIDE_PHISHING_URL ||
          threat_type == SB_THREAT_TYPE_CLIENT_SIDE_MALWARE_URL);
@@ -114,6 +115,9 @@
     case SB_THREAT_TYPE_URL_PHISHING:
       threat_list = "phishblhit";
       break;
+    case SB_THREAT_TYPE_URL_UNWANTED:
+      threat_list = "uwsblhit";
+      break;
     case SB_THREAT_TYPE_BINARY_MALWARE_URL:
       threat_list = "binurlhit";
       break;
diff --git a/chrome/browser/safe_browsing/safe_browsing_blocking_page.cc b/chrome/browser/safe_browsing/safe_browsing_blocking_page.cc
index 1c47c2c..9c3ca1e 100644
--- a/chrome/browser/safe_browsing/safe_browsing_blocking_page.cc
+++ b/chrome/browser/safe_browsing/safe_browsing_blocking_page.cc
@@ -173,7 +173,7 @@
     if (threat_type == SB_THREAT_TYPE_URL_MALWARE ||
         threat_type == SB_THREAT_TYPE_CLIENT_SIDE_MALWARE_URL) {
       malware = true;
-    } else if (threat_type == SB_THREAT_TYPE_URL_HARMFUL) {
+    } else if (threat_type == SB_THREAT_TYPE_URL_UNWANTED) {
       harmful = true;
     } else {
       DCHECK(threat_type == SB_THREAT_TYPE_URL_PHISHING ||
@@ -378,9 +378,11 @@
     diagnostic_url = google_util::AppendGoogleLocaleParam(
         diagnostic_url, g_browser_process->GetApplicationLocale());
     DCHECK(unsafe_resources_[element_index].threat_type ==
-           SB_THREAT_TYPE_URL_MALWARE ||
+               SB_THREAT_TYPE_URL_MALWARE ||
            unsafe_resources_[element_index].threat_type ==
-           SB_THREAT_TYPE_CLIENT_SIDE_MALWARE_URL);
+               SB_THREAT_TYPE_CLIENT_SIDE_MALWARE_URL ||
+           unsafe_resources_[element_index].threat_type ==
+               SB_THREAT_TYPE_URL_UNWANTED);
     OpenURLParams params(
         diagnostic_url, Referrer(), CURRENT_TAB, ui::PAGE_TRANSITION_LINK,
         false);
diff --git a/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc b/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc
index 07c0265..42d0d69 100644
--- a/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc
+++ b/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc
@@ -634,7 +634,7 @@
     return;
 #endif
 
-  SetupWarningAndNavigate(SB_THREAT_TYPE_URL_HARMFUL);
+  SetupWarningAndNavigate(SB_THREAT_TYPE_URL_UNWANTED);
 
   EXPECT_EQ(VISIBLE, GetVisibility("primary-button"));
   EXPECT_EQ(HIDDEN, GetVisibility("details"));
@@ -661,7 +661,7 @@
 }
 
 IN_PROC_BROWSER_TEST_F(SafeBrowsingBlockingPageBrowserTest, HarmfulProceed) {
-  GURL url = SetupWarningAndNavigate(SB_THREAT_TYPE_URL_HARMFUL);
+  GURL url = SetupWarningAndNavigate(SB_THREAT_TYPE_URL_UNWANTED);
 
   EXPECT_TRUE(ClickAndWaitForDetach("proceed-link"));
   AssertNoInterstitial(true);  // Assert the interstitial is gone.
diff --git a/chrome/browser/safe_browsing/safe_browsing_database.cc b/chrome/browser/safe_browsing/safe_browsing_database.cc
index dea4b3c..11b16f3 100644
--- a/chrome/browser/safe_browsing/safe_browsing_database.cc
+++ b/chrome/browser/safe_browsing/safe_browsing_database.cc
@@ -57,6 +57,9 @@
 // Filename suffix for the csd malware IP blacklist store.
 const base::FilePath::CharType kIPBlacklistDBFile[] =
     FILE_PATH_LITERAL(" IP Blacklist");
+// Filename suffix for the unwanted software blacklist store.
+const base::FilePath::CharType kUnwantedSoftwareDBFile[] =
+    FILE_PATH_LITERAL(" UwS List");
 
 // Filename suffix for browse store.
 // TODO(shess): "Safe Browsing Bloom Prefix Set" is full of win.
@@ -122,9 +125,9 @@
 // does an early exit on match.  Since match should be the infrequent
 // case (phishing or malware found), consider combining this function
 // with that one.
-void BrowseFullHashesToCheck(const GURL& url,
-                             bool include_whitelist_hashes,
-                             std::vector<SBFullHash>* full_hashes) {
+void UrlToFullHashes(const GURL& url,
+                     bool include_whitelist_hashes,
+                     std::vector<SBFullHash>* full_hashes) {
   std::vector<std::string> hosts;
   if (url.HostIsIPAddress()) {
     hosts.push_back(url.host());
@@ -158,7 +161,7 @@
                             std::vector<SBPrefix>* prefixes) {
   std::vector<SBFullHash> full_hashes;
   for (size_t i = 0; i < urls.size(); ++i)
-    BrowseFullHashesToCheck(urls[i], false, &full_hashes);
+    UrlToFullHashes(urls[i], false, &full_hashes);
 
   for (size_t i = 0; i < full_hashes.size(); ++i)
     prefixes->push_back(full_hashes[i].prefix);
@@ -277,7 +280,7 @@
   return size_64;
 }
 
-// Helper for ContainsBrowseUrlHashes().  Returns true if an un-expired match
+// Helper for PrefixSetContainsUrlHashes().  Returns true if an un-expired match
 // for |full_hash| is found in |cache|, with any matches appended to |results|
 // (true can be returned with zero matches).  |expire_base| is used to check the
 // cache lifetime of matches, expired matches will be discarded from |cache|.
@@ -319,7 +322,8 @@
       bool enable_download_whitelist,
       bool enable_extension_blacklist,
       bool enable_side_effect_free_whitelist,
-      bool enable_ip_blacklist) override {
+      bool enable_ip_blacklist,
+      bool enable_unwanted_software_list) override {
     return new SafeBrowsingDatabaseNew(
         new SafeBrowsingStoreFile,
         enable_download_protection ? new SafeBrowsingStoreFile : NULL,
@@ -327,7 +331,8 @@
         enable_download_whitelist ? new SafeBrowsingStoreFile : NULL,
         enable_extension_blacklist ? new SafeBrowsingStoreFile : NULL,
         enable_side_effect_free_whitelist ? new SafeBrowsingStoreFile : NULL,
-        enable_ip_blacklist ? new SafeBrowsingStoreFile : NULL);
+        enable_ip_blacklist ? new SafeBrowsingStoreFile : NULL,
+        enable_unwanted_software_list ? new SafeBrowsingStoreFile : NULL);
   }
 
   SafeBrowsingDatabaseFactoryImpl() { }
@@ -350,16 +355,17 @@
     bool enable_download_whitelist,
     bool enable_extension_blacklist,
     bool enable_side_effect_free_whitelist,
-    bool enable_ip_blacklist) {
+    bool enable_ip_blacklist,
+    bool enable_unwanted_software_list) {
   if (!factory_)
     factory_ = new SafeBrowsingDatabaseFactoryImpl();
-  return factory_->CreateSafeBrowsingDatabase(
-      enable_download_protection,
-      enable_client_side_whitelist,
-      enable_download_whitelist,
-      enable_extension_blacklist,
-      enable_side_effect_free_whitelist,
-      enable_ip_blacklist);
+  return factory_->CreateSafeBrowsingDatabase(enable_download_protection,
+                                              enable_client_side_whitelist,
+                                              enable_download_whitelist,
+                                              enable_extension_blacklist,
+                                              enable_side_effect_free_whitelist,
+                                              enable_ip_blacklist,
+                                              enable_unwanted_software_list);
 }
 
 SafeBrowsingDatabase::~SafeBrowsingDatabase() {
@@ -419,6 +425,12 @@
   return base::FilePath(db_filename.value() + kIPBlacklistDBFile);
 }
 
+// static
+base::FilePath SafeBrowsingDatabase::UnwantedSoftwareDBFilename(
+    const base::FilePath& db_filename) {
+  return base::FilePath(db_filename.value() + kUnwantedSoftwareDBFile);
+}
+
 SafeBrowsingStore* SafeBrowsingDatabaseNew::GetStore(const int list_id) {
   if (list_id == safe_browsing_util::PHISH ||
       list_id == safe_browsing_util::MALWARE) {
@@ -435,6 +447,8 @@
     return side_effect_free_whitelist_store_.get();
   } else if (list_id == safe_browsing_util::IPBLACKLIST) {
     return ip_blacklist_store_.get();
+  } else if (list_id == safe_browsing_util::UNWANTEDURL) {
+    return unwanted_software_store_.get();
   }
   return NULL;
 }
@@ -458,6 +472,7 @@
   DCHECK(!extension_blacklist_store_.get());
   DCHECK(!side_effect_free_whitelist_store_.get());
   DCHECK(!ip_blacklist_store_.get());
+  DCHECK(!unwanted_software_store_.get());
 }
 
 SafeBrowsingDatabaseNew::SafeBrowsingDatabaseNew(
@@ -467,7 +482,8 @@
     SafeBrowsingStore* download_whitelist_store,
     SafeBrowsingStore* extension_blacklist_store,
     SafeBrowsingStore* side_effect_free_whitelist_store,
-    SafeBrowsingStore* ip_blacklist_store)
+    SafeBrowsingStore* ip_blacklist_store,
+    SafeBrowsingStore* unwanted_software_store)
     : creation_loop_(base::MessageLoop::current()),
       browse_store_(browse_store),
       download_store_(download_store),
@@ -476,6 +492,7 @@
       extension_blacklist_store_(extension_blacklist_store),
       side_effect_free_whitelist_store_(side_effect_free_whitelist_store),
       ip_blacklist_store_(ip_blacklist_store),
+      unwanted_software_store_(unwanted_software_store),
       corruption_detected_(false),
       reset_factory_(this) {
   DCHECK(browse_store_.get());
@@ -495,7 +512,8 @@
   filename_base_ = filename_base;
 
   // TODO(shess): The various stores are really only necessary while doing
-  // updates, or when querying a store directly (see |ContainsDownloadUrl()|).
+  // updates (see |UpdateFinished()|) or when querying a store directly (see
+  // |ContainsDownloadUrl()|).
   // The store variables are also tested to see if a list is enabled.  Perhaps
   // the stores could be refactored into an update object so that they are only
   // live in memory while being actively used.  The sense of enabled probably
@@ -506,14 +524,28 @@
       base::Bind(&SafeBrowsingDatabaseNew::HandleCorruptDatabase,
                  base::Unretained(this)));
 
+  if (unwanted_software_store_.get()) {
+    unwanted_software_store_->Init(
+        UnwantedSoftwareDBFilename(filename_base_),
+        base::Bind(&SafeBrowsingDatabaseNew::HandleCorruptDatabase,
+                   base::Unretained(this)));
+  }
+
   {
     // NOTE: There is no need to grab the lock in this function, since
     // until it returns, there are no pointers to this class on other
     // threads.  Then again, that means there is no possibility of
     // contention on the lock...
     base::AutoLock locked(lookup_lock_);
-    browse_gethash_cache_.clear();
-    LoadPrefixSet();
+    prefix_gethash_cache_.clear();
+    LoadPrefixSet(BrowseDBFilename(filename_base_),
+                  &browse_prefix_set_,
+                  FAILURE_BROWSE_PREFIX_SET_READ);
+    if (unwanted_software_store_.get()) {
+      LoadPrefixSet(UnwantedSoftwareDBFilename(filename_base_),
+                    &unwanted_software_prefix_set_,
+                    FAILURE_UNWANTED_SOFTWARE_PREFIX_SET_READ);
+    }
   }
 
   if (download_store_.get()) {
@@ -620,10 +652,11 @@
   // Reset objects in memory.
   {
     base::AutoLock locked(lookup_lock_);
-    browse_gethash_cache_.clear();
+    prefix_gethash_cache_.clear();
     browse_prefix_set_.reset();
     side_effect_free_whitelist_prefix_set_.reset();
     ip_blacklist_.clear();
+    unwanted_software_prefix_set_.reset();
   }
   // Wants to acquire the lock itself.
   WhitelistEverything(&csd_whitelist_);
@@ -635,22 +668,49 @@
     const GURL& url,
     std::vector<SBPrefix>* prefix_hits,
     std::vector<SBFullHashResult>* cache_hits) {
+  return PrefixSetContainsUrl(
+      url, &browse_prefix_set_, prefix_hits, cache_hits);
+}
+
+bool SafeBrowsingDatabaseNew::ContainsUnwantedSoftwareUrl(
+    const GURL& url,
+    std::vector<SBPrefix>* prefix_hits,
+    std::vector<SBFullHashResult>* cache_hits) {
+  return PrefixSetContainsUrl(
+      url, &unwanted_software_prefix_set_, prefix_hits, cache_hits);
+}
+
+bool SafeBrowsingDatabaseNew::PrefixSetContainsUrl(
+    const GURL& url,
+    scoped_ptr<safe_browsing::PrefixSet>* prefix_set_getter,
+    std::vector<SBPrefix>* prefix_hits,
+    std::vector<SBFullHashResult>* cache_hits) {
   // Clear the results first.
   prefix_hits->clear();
   cache_hits->clear();
 
   std::vector<SBFullHash> full_hashes;
-  BrowseFullHashesToCheck(url, false, &full_hashes);
+  UrlToFullHashes(url, false, &full_hashes);
   if (full_hashes.empty())
     return false;
 
-  return ContainsBrowseUrlHashes(full_hashes, prefix_hits, cache_hits);
+  return PrefixSetContainsUrlHashes(
+      full_hashes, prefix_set_getter, prefix_hits, cache_hits);
 }
 
-bool SafeBrowsingDatabaseNew::ContainsBrowseUrlHashes(
+bool SafeBrowsingDatabaseNew::ContainsBrowseUrlHashesForTesting(
     const std::vector<SBFullHash>& full_hashes,
     std::vector<SBPrefix>* prefix_hits,
     std::vector<SBFullHashResult>* cache_hits) {
+  return PrefixSetContainsUrlHashes(
+      full_hashes, &browse_prefix_set_, prefix_hits, cache_hits);
+}
+
+bool SafeBrowsingDatabaseNew::PrefixSetContainsUrlHashes(
+    const std::vector<SBFullHash>& full_hashes,
+    scoped_ptr<safe_browsing::PrefixSet>* prefix_set_getter,
+    std::vector<SBPrefix>* prefix_hits,
+    std::vector<SBFullHashResult>* cache_hits) {
   // Used to determine cache expiration.
   const base::Time now = base::Time::Now();
 
@@ -658,19 +718,20 @@
   // filter and caches.
   base::AutoLock locked(lookup_lock_);
 
-  // |browse_prefix_set_| is empty until it is either read from disk, or the
-  // first update populates it.  Bail out without a hit if not yet
-  // available.
-  if (!browse_prefix_set_.get())
+  // |prefix_set| is empty until it is either read from disk, or the first
+  // update populates it.  Bail out without a hit if not yet available.
+  // |prefix_set_getter| can only be accessed while holding |lookup_lock_| hence
+  // why it is passed as a parameter rather than passing the |prefix_set|
+  // directly.
+  safe_browsing::PrefixSet* prefix_set = prefix_set_getter->get();
+  if (!prefix_set)
     return false;
 
   for (size_t i = 0; i < full_hashes.size(); ++i) {
-    if (!GetCachedFullHash(&browse_gethash_cache_,
-                           full_hashes[i],
-                           now,
-                           cache_hits)) {
+    if (!GetCachedFullHash(
+            &prefix_gethash_cache_, full_hashes[i], now, cache_hits)) {
       // No valid cached result, check the database.
-      if (browse_prefix_set_->Exists(full_hashes[i]))
+      if (prefix_set->Exists(full_hashes[i]))
         prefix_hits->push_back(full_hashes[i].prefix);
     }
   }
@@ -705,13 +766,13 @@
   // originate from the IO thread.
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
   std::vector<SBFullHash> full_hashes;
-  BrowseFullHashesToCheck(url, true, &full_hashes);
+  UrlToFullHashes(url, true, &full_hashes);
   return ContainsWhitelistedHashes(csd_whitelist_, full_hashes);
 }
 
 bool SafeBrowsingDatabaseNew::ContainsDownloadWhitelistedUrl(const GURL& url) {
   std::vector<SBFullHash> full_hashes;
-  BrowseFullHashesToCheck(url, true, &full_hashes);
+  UrlToFullHashes(url, true, &full_hashes);
   return ContainsWhitelistedHashes(download_whitelist_, full_hashes);
 }
 
@@ -951,14 +1012,14 @@
 
   // Create or reset all cached results for these prefixes.
   for (size_t i = 0; i < prefixes.size(); ++i) {
-    browse_gethash_cache_[prefixes[i]] = SBCachedFullHashResult(expire_after);
+    prefix_gethash_cache_[prefixes[i]] = SBCachedFullHashResult(expire_after);
   }
 
   // Insert any fullhash hits. Note that there may be one, multiple, or no
   // fullhashes for any given entry in |prefixes|.
   for (size_t i = 0; i < full_hits.size(); ++i) {
     const SBPrefix prefix = full_hits[i].hash.prefix;
-    browse_gethash_cache_[prefix].full_hashes.push_back(full_hits[i]);
+    prefix_gethash_cache_[prefix].full_hashes.push_back(full_hits[i]);
   }
 }
 
@@ -1013,11 +1074,17 @@
     return false;
   }
 
+  if (unwanted_software_store_ && !unwanted_software_store_->BeginUpdate()) {
+    RecordFailure(FAILURE_UNWANTED_SOFTWARE_DATABASE_UPDATE_BEGIN);
+    HandleCorruptDatabase();
+    return false;
+  }
+
   {
     base::AutoLock locked(lookup_lock_);
     // Cached fullhash results must be cleared on every database update (whether
     // successful or not.)
-    browse_gethash_cache_.clear();
+    prefix_gethash_cache_.clear();
   }
 
   UpdateChunkRangesForLists(browse_store_.get(),
@@ -1047,6 +1114,10 @@
   UpdateChunkRangesForList(ip_blacklist_store_.get(),
                            safe_browsing_util::kIPBlacklist, lists);
 
+  UpdateChunkRangesForList(unwanted_software_store_.get(),
+                           safe_browsing_util::kUnwantedUrlList,
+                           lists);
+
   corruption_detected_ = false;
   change_detected_ = false;
   return true;
@@ -1090,6 +1161,11 @@
     if (ip_blacklist_store_ && !ip_blacklist_store_->CheckValidity()) {
       DLOG(ERROR) << "Safe-browsing IP blacklist database corrupt.";
     }
+
+    if (unwanted_software_store_ &&
+        !unwanted_software_store_->CheckValidity()) {
+      DLOG(ERROR) << "Unwanted software url list database corrupt.";
+    }
   }
 
   if (corruption_detected_)
@@ -1115,6 +1191,8 @@
       side_effect_free_whitelist_store_->CancelUpdate();
     if (ip_blacklist_store_)
       ip_blacklist_store_->CancelUpdate();
+    if (unwanted_software_store_)
+      unwanted_software_store_->CancelUpdate();
     return;
   }
 
@@ -1127,7 +1205,12 @@
                          static_cast<int>(size_bytes / 1024));
   }
 
-  UpdateBrowseStore();
+  UpdatePrefixSetUrlStore(BrowseDBFilename(filename_base_),
+                          browse_store_.get(),
+                          &browse_prefix_set_,
+                          FAILURE_BROWSE_DATABASE_UPDATE_FINISH,
+                          FAILURE_BROWSE_PREFIX_SET_WRITE);
+
   UpdateWhitelistStore(CsdWhitelistDBFilename(filename_base_),
                        csd_whitelist_store_.get(),
                        &csd_whitelist_);
@@ -1149,6 +1232,14 @@
 
   if (ip_blacklist_store_)
     UpdateIpBlacklistStore();
+
+  if (unwanted_software_store_) {
+    UpdatePrefixSetUrlStore(UnwantedSoftwareDBFilename(filename_base_),
+                            unwanted_software_store_.get(),
+                            &unwanted_software_prefix_set_,
+                            FAILURE_UNWANTED_SOFTWARE_DATABASE_UPDATE_FINISH,
+                            FAILURE_UNWANTED_SOFTWARE_PREFIX_SET_WRITE);
+  }
 }
 
 void SafeBrowsingDatabaseNew::UpdateWhitelistStore(
@@ -1194,7 +1285,12 @@
   return GetFileSizeOrZero(store_filename);
 }
 
-void SafeBrowsingDatabaseNew::UpdateBrowseStore() {
+void SafeBrowsingDatabaseNew::UpdatePrefixSetUrlStore(
+    const base::FilePath& db_filename,
+    SafeBrowsingStore* url_store,
+    scoped_ptr<safe_browsing::PrefixSet>* prefix_set,
+    FailureType finish_failure_type,
+    FailureType write_failure_type) {
   // Measure the amount of IO during the filter build.
   base::IoCounters io_before, io_after;
   base::ProcessHandle handle = base::GetCurrentProcessHandle();
@@ -1219,8 +1315,8 @@
   // the SBFullHash portion.  It would need an accessor on PrefixSet.
   safe_browsing::PrefixSetBuilder builder;
   std::vector<SBAddFullHash> add_full_hashes;
-  if (!browse_store_->FinishUpdate(&builder, &add_full_hashes)) {
-    RecordFailure(FAILURE_BROWSE_DATABASE_UPDATE_FINISH);
+  if (!url_store->FinishUpdate(&builder, &add_full_hashes)) {
+    RecordFailure(finish_failure_type);
     return;
   }
 
@@ -1229,20 +1325,22 @@
     full_hash_results.push_back(add_full_hashes[i].full_hash);
   }
 
-  scoped_ptr<safe_browsing::PrefixSet>
-      prefix_set(builder.GetPrefixSet(full_hash_results));
+  scoped_ptr<safe_browsing::PrefixSet> new_prefix_set(
+      builder.GetPrefixSet(full_hash_results));
 
   // Swap in the newly built filter.
   {
     base::AutoLock locked(lookup_lock_);
-    browse_prefix_set_.swap(prefix_set);
+    prefix_set->swap(new_prefix_set);
   }
 
   UMA_HISTOGRAM_LONG_TIMES("SB2.BuildFilter", base::TimeTicks::Now() - before);
 
-  // Persist the prefix set to disk.  Since only this thread changes
-  // |browse_prefix_set_|, there is no need to lock.
-  WritePrefixSet();
+  // Persist the prefix set to disk. Note: there is no need to lock since the
+  // only write to |*prefix_set| is on this thread (in the swap() above).
+  // TODO(gab): Strengthen this requirement by design (const pointers) rather
+  // than assumptions.
+  WritePrefixSet(db_filename, prefix_set->get(), write_failure_type);
 
   // Gather statistics.
   if (got_counters && metric->GetIOCounters(&io_after)) {
@@ -1260,13 +1358,12 @@
                                           io_before.WriteOperationCount));
   }
 
-  const base::FilePath browse_filename = BrowseDBFilename(filename_base_);
-  const int64 file_size = GetFileSizeOrZero(browse_filename);
+  const int64 file_size = GetFileSizeOrZero(db_filename);
   UMA_HISTOGRAM_COUNTS("SB2.BrowseDatabaseKilobytes",
                        static_cast<int>(file_size / 1024));
 
 #if defined(OS_MACOSX)
-  base::mac::SetFileBackupExclusion(browse_filename);
+  base::mac::SetFileBackupExclusion(db_filename);
 #endif
 }
 
@@ -1360,31 +1457,34 @@
 
 // TODO(shess): I'm not clear why this code doesn't have any
 // real error-handling.
-void SafeBrowsingDatabaseNew::LoadPrefixSet() {
+void SafeBrowsingDatabaseNew::LoadPrefixSet(
+    const base::FilePath& db_filename,
+    scoped_ptr<safe_browsing::PrefixSet>* prefix_set,
+    FailureType read_failure_type) {
+  if (!prefix_set)
+    return;
+
   DCHECK_EQ(creation_loop_, base::MessageLoop::current());
   DCHECK(!filename_base_.empty());
 
-  const base::FilePath browse_filename = BrowseDBFilename(filename_base_);
-  const base::FilePath browse_prefix_set_filename =
-      PrefixSetForFilename(browse_filename);
+  const base::FilePath prefix_set_filename = PrefixSetForFilename(db_filename);
 
   // Only use the prefix set if database is present and non-empty.
-  if (!GetFileSizeOrZero(browse_filename))
+  if (!GetFileSizeOrZero(db_filename))
     return;
 
   // Cleanup any stale bloom filter (no longer used).
   // TODO(shess): Track existence to drive removal of this code?
   const base::FilePath bloom_filter_filename =
-      BloomFilterForFilename(browse_filename);
+      BloomFilterForFilename(db_filename);
   base::DeleteFile(bloom_filter_filename, false);
 
   const base::TimeTicks before = base::TimeTicks::Now();
-  browse_prefix_set_ = safe_browsing::PrefixSet::LoadFile(
-      browse_prefix_set_filename);
+  *prefix_set = safe_browsing::PrefixSet::LoadFile(prefix_set_filename);
   UMA_HISTOGRAM_TIMES("SB2.PrefixSetLoad", base::TimeTicks::Now() - before);
 
-  if (!browse_prefix_set_.get())
-    RecordFailure(FAILURE_BROWSE_PREFIX_SET_READ);
+  if (!prefix_set->get())
+    RecordFailure(read_failure_type);
 }
 
 bool SafeBrowsingDatabaseNew::Delete() {
@@ -1459,33 +1559,38 @@
   if (!r10)
     RecordFailure(FAILURE_IP_BLACKLIST_DELETE);
 
-  return r1 && r2 && r3 && r4 && r5 && r6 && r7 && r8 && r9 && r10;
+  const bool r11 =
+      base::DeleteFile(UnwantedSoftwareDBFilename(filename_base_), false);
+  if (!r11)
+    RecordFailure(FAILURE_UNWANTED_SOFTWARE_PREFIX_SET_DELETE);
+
+  return r1 && r2 && r3 && r4 && r5 && r6 && r7 && r8 && r9 && r10 && r11;
 }
 
-void SafeBrowsingDatabaseNew::WritePrefixSet() {
+void SafeBrowsingDatabaseNew::WritePrefixSet(
+    const base::FilePath& db_filename,
+    safe_browsing::PrefixSet* prefix_set,
+    FailureType write_failure_type) {
   DCHECK_EQ(creation_loop_, base::MessageLoop::current());
 
-  if (!browse_prefix_set_.get())
+  if (!prefix_set)
     return;
 
-  const base::FilePath browse_filename = BrowseDBFilename(filename_base_);
-  const base::FilePath browse_prefix_set_filename =
-      PrefixSetForFilename(browse_filename);
+  const base::FilePath prefix_set_filename = PrefixSetForFilename(db_filename);
 
   const base::TimeTicks before = base::TimeTicks::Now();
-  const bool write_ok = browse_prefix_set_->WriteFile(
-      browse_prefix_set_filename);
+  const bool write_ok = prefix_set->WriteFile(prefix_set_filename);
   UMA_HISTOGRAM_TIMES("SB2.PrefixSetWrite", base::TimeTicks::Now() - before);
 
-  const int64 file_size = GetFileSizeOrZero(browse_prefix_set_filename);
+  const int64 file_size = GetFileSizeOrZero(prefix_set_filename);
   UMA_HISTOGRAM_COUNTS("SB2.PrefixSetKilobytes",
                        static_cast<int>(file_size / 1024));
 
   if (!write_ok)
-    RecordFailure(FAILURE_BROWSE_PREFIX_SET_WRITE);
+    RecordFailure(write_failure_type);
 
 #if defined(OS_MACOSX)
-  base::mac::SetFileBackupExclusion(browse_prefix_set_filename);
+  base::mac::SetFileBackupExclusion(prefix_set_filename);
 #endif
 }
 
diff --git a/chrome/browser/safe_browsing/safe_browsing_database.h b/chrome/browser/safe_browsing/safe_browsing_database.h
index 3e2ca8d..c011b9b 100644
--- a/chrome/browser/safe_browsing/safe_browsing_database.h
+++ b/chrome/browser/safe_browsing/safe_browsing_database.h
@@ -42,7 +42,9 @@
       bool enable_download_whitelist,
       bool enable_extension_blacklist,
       bool enable_side_effect_free_whitelist,
-      bool enable_ip_blacklist) = 0;
+      bool enable_ip_blacklist,
+      bool enable_unwanted_software_list) = 0;
+
  private:
   DISALLOW_COPY_AND_ASSIGN(SafeBrowsingDatabaseFactory);
 };
@@ -71,12 +73,15 @@
   // database feature.
   // |enable_ip_blacklist| is used to control the csd malware IP blacklist
   // database feature.
+  // |enable_unwanted_software_list| is used to control the unwanted software
+  // list database feature.
   static SafeBrowsingDatabase* Create(bool enable_download_protection,
                                       bool enable_client_side_whitelist,
                                       bool enable_download_whitelist,
                                       bool enable_extension_blacklist,
                                       bool side_effect_free_whitelist,
-                                      bool enable_ip_blacklist);
+                                      bool enable_ip_blacklist,
+                                      bool enable_unwanted_software_list);
 
   // Makes the passed |factory| the factory used to instantiate
   // a SafeBrowsingDatabase. This is used for tests.
@@ -93,14 +98,26 @@
   virtual bool ResetDatabase() = 0;
 
   // Returns false if |url| is not in the browse database or already was cached
-  // as a miss.  If it returns true, |prefix_hits| contains matching hash
-  // prefixes which had no cached results and |cache_hits| contains any matching
-  // cached gethash results.  This function is safe to call from any thread.
+  // as a miss.  If it returns true, |prefix_hits| contains sorted unique
+  // matching hash prefixes which had no cached results and |cache_hits|
+  // contains any matching cached gethash results.  This function is safe to
+  // call from any thread.
   virtual bool ContainsBrowseUrl(
       const GURL& url,
       std::vector<SBPrefix>* prefix_hits,
       std::vector<SBFullHashResult>* cache_hits) = 0;
 
+  // Returns true iff the given url is on the unwanted software blacklist.
+  // Returns false if |url| is not in the browse database or already was cached
+  // as a miss.  If it returns true, |prefix_hits| contains sorted unique
+  // matching hash prefixes which had no cached results and |cache_hits|
+  // contains any matching cached gethash results.  This function is safe to
+  // call from any thread.
+  virtual bool ContainsUnwantedSoftwareUrl(
+      const GURL& url,
+      std::vector<SBPrefix>* prefix_hits,
+      std::vector<SBFullHashResult>* cache_hits) = 0;
+
   // Returns false if none of |urls| are in Download database. If it returns
   // true, |prefix_hits| should contain the prefixes for the URLs that were in
   // the database.  This function could ONLY be accessed from creation thread.
@@ -218,6 +235,10 @@
   static base::FilePath IpBlacklistDBFilename(
       const base::FilePath& ip_blacklist_base_filename);
 
+  // Filename for the unwanted software blacklist database.
+  static base::FilePath UnwantedSoftwareDBFilename(
+      const base::FilePath& db_filename);
+
   // Enumerate failures for histogramming purposes.  DO NOT CHANGE THE
   // ORDERING OF THESE VALUES.
   enum FailureType {
@@ -235,7 +256,6 @@
     FAILURE_DOWNLOAD_DATABASE_UPDATE_FINISH,
     FAILURE_WHITELIST_DATABASE_UPDATE_BEGIN,
     FAILURE_WHITELIST_DATABASE_UPDATE_FINISH,
-    FAILURE_BROWSE_PREFIX_SET_MISSING,
     FAILURE_BROWSE_PREFIX_SET_READ,
     FAILURE_BROWSE_PREFIX_SET_WRITE,
     FAILURE_BROWSE_PREFIX_SET_DELETE,
@@ -252,6 +272,11 @@
     FAILURE_IP_BLACKLIST_UPDATE_FINISH,
     FAILURE_IP_BLACKLIST_UPDATE_INVALID,
     FAILURE_IP_BLACKLIST_DELETE,
+    FAILURE_UNWANTED_SOFTWARE_DATABASE_UPDATE_BEGIN,
+    FAILURE_UNWANTED_SOFTWARE_DATABASE_UPDATE_FINISH,
+    FAILURE_UNWANTED_SOFTWARE_PREFIX_SET_READ,
+    FAILURE_UNWANTED_SOFTWARE_PREFIX_SET_WRITE,
+    FAILURE_UNWANTED_SOFTWARE_PREFIX_SET_DELETE,
 
     // Memory space for histograms is determined by the max.  ALWAYS
     // ADD NEW VALUES BEFORE THIS ONE.
@@ -281,7 +306,8 @@
                           SafeBrowsingStore* download_whitelist_store,
                           SafeBrowsingStore* extension_blacklist_store,
                           SafeBrowsingStore* side_effect_free_whitelist_store,
-                          SafeBrowsingStore* ip_blacklist_store);
+                          SafeBrowsingStore* ip_blacklist_store,
+                          SafeBrowsingStore* unwanted_software_store);
 
   // Create a database with a browse store. This is a legacy interface that
   // useds Sqlite.
@@ -295,6 +321,10 @@
   bool ContainsBrowseUrl(const GURL& url,
                          std::vector<SBPrefix>* prefix_hits,
                          std::vector<SBFullHashResult>* cache_hits) override;
+  bool ContainsUnwantedSoftwareUrl(
+      const GURL& url,
+      std::vector<SBPrefix>* prefix_hits,
+      std::vector<SBFullHashResult>* cache_hits) override;
   bool ContainsDownloadUrl(const std::vector<GURL>& urls,
                            std::vector<SBPrefix>* prefix_hits) override;
   bool ContainsCsdWhitelistedUrl(const GURL& url) override;
@@ -338,10 +368,24 @@
   // IPv6 IP prefix using SHA-1.
   typedef std::map<std::string, base::hash_set<std::string> > IPBlacklist;
 
-  // Helper for ContainsBrowseUrl, exposed for testing.
-  bool ContainsBrowseUrlHashes(const std::vector<SBFullHash>& full_hashes,
-                               std::vector<SBPrefix>* prefix_hits,
-                               std::vector<SBFullHashResult>* cache_hits);
+  bool PrefixSetContainsUrl(
+      const GURL& url,
+      scoped_ptr<safe_browsing::PrefixSet>* prefix_set_getter,
+      std::vector<SBPrefix>* prefix_hits,
+      std::vector<SBFullHashResult>* cache_hits);
+
+  // Exposed for testing of PrefixSetContainsUrlHashes() on the
+  // PrefixSet backing kMalwareList.
+  bool ContainsBrowseUrlHashesForTesting(
+      const std::vector<SBFullHash>& full_hashes,
+      std::vector<SBPrefix>* prefix_hits,
+      std::vector<SBFullHashResult>* cache_hits);
+
+  bool PrefixSetContainsUrlHashes(
+      const std::vector<SBFullHash>& full_hashes,
+      scoped_ptr<safe_browsing::PrefixSet>* prefix_set_getter,
+      std::vector<SBPrefix>* prefix_hits,
+      std::vector<SBFullHashResult>* cache_hits);
 
   // Returns true if the whitelist is disabled or if any of the given hashes
   // matches the whitelist.
@@ -355,11 +399,19 @@
   // Deletes the files on disk.
   bool Delete();
 
-  // Load the prefix set off disk, if available.
-  void LoadPrefixSet();
+  // Load the prefix set in "|db_filename| Prefix Set" off disk, if available,
+  // and stores it in |prefix_set|.  |read_failure_type| provides a
+  // caller-specific error code to be used on failure.
+  void LoadPrefixSet(const base::FilePath& db_filename,
+                     scoped_ptr<safe_browsing::PrefixSet>* prefix_set,
+                     FailureType read_failure_type);
 
-  // Writes the current prefix set to disk.
-  void WritePrefixSet();
+  // Writes the current prefix set "|db_filename| Prefix Set" on disk.
+  // |write_failure_type| provides a caller-specific error code to be used on
+  // failure.
+  void WritePrefixSet(const base::FilePath& db_filename,
+                      safe_browsing::PrefixSet* prefix_set,
+                      FailureType write_failure_type);
 
   // Loads the given full-length hashes to the given whitelist.  If the number
   // of hashes is too large or if the kill switch URL is on the whitelist
@@ -396,7 +448,20 @@
   int64 UpdateHashPrefixStore(const base::FilePath& store_filename,
                                SafeBrowsingStore* store,
                                FailureType failure_type);
-  void UpdateBrowseStore();
+
+  // Updates a PrefixStore store for URLs (|url_store|) which is backed on disk
+  // by a "|db_filename| Prefix Set" file. Specific failure types are provided
+  // to highlight the specific store who made the initial request on failure.
+  void UpdatePrefixSetUrlStore(const base::FilePath& db_filename,
+                               SafeBrowsingStore* url_store,
+                               scoped_ptr<safe_browsing::PrefixSet>* prefix_set,
+                               FailureType finish_failure_type,
+                               FailureType write_failure_type);
+
+  void UpdateUrlStore(SafeBrowsingStore* url_store,
+                      scoped_ptr<safe_browsing::PrefixSet>* prefix_set,
+                      FailureType failure_type);
+
   void UpdateSideEffectFreeWhitelistStore();
   void UpdateWhitelistStore(const base::FilePath& store_filename,
                             SafeBrowsingStore* store,
@@ -407,10 +472,6 @@
   // object was created on.
   base::MessageLoop* creation_loop_;
 
-  // Lock for protecting access to variables that may be used on the IO thread.
-  // This includes |prefix_set_|, |browse_gethash_cache_|, |csd_whitelist_|.
-  base::Lock lookup_lock_;
-
   // The base filename passed to Init(), used to generate the store and prefix
   // set filenames used to store data on disk.
   base::FilePath filename_base_;
@@ -439,6 +500,14 @@
   // For IP blacklist.
   scoped_ptr<SafeBrowsingStore> ip_blacklist_store_;
 
+  // For unwanted software list.
+  scoped_ptr<SafeBrowsingStore> unwanted_software_store_;
+
+  // Lock for protecting access to variables that may be used on the IO thread.
+  // This includes |(browse|unwanted_software)_prefix_set_|,
+  // |prefix_gethash_cache_|, |csd_whitelist_|.
+  base::Lock lookup_lock_;
+
   SBWhitelist csd_whitelist_;
   SBWhitelist download_whitelist_;
   SBWhitelist extension_blacklist_;
@@ -446,10 +515,10 @@
   // The IP blacklist should be small.  At most a couple hundred IPs.
   IPBlacklist ip_blacklist_;
 
-  // Cache of gethash results for browse store. Entries should not be used if
+  // Cache of gethash results for prefix stores. Entries should not be used if
   // they are older than their expire_after field.  Cached misses will have
   // empty full_hashes field.  Cleared on each update.
-  std::map<SBPrefix, SBCachedFullHashResult> browse_gethash_cache_;
+  std::map<SBPrefix, SBCachedFullHashResult> prefix_gethash_cache_;
 
   // Set if corruption is detected during the course of an update.
   // Causes the update functions to fail with no side effects, until
@@ -463,9 +532,12 @@
   // Used to check if a prefix was in the browse database.
   scoped_ptr<safe_browsing::PrefixSet> browse_prefix_set_;
 
-  // Used to check if a prefix was in the browse database.
+  // Used to check if a prefix was in the side-effect free whitelist database.
   scoped_ptr<safe_browsing::PrefixSet> side_effect_free_whitelist_prefix_set_;
 
+  // Used to check if a prexfix was in the unwanted software database.
+  scoped_ptr<safe_browsing::PrefixSet> unwanted_software_prefix_set_;
+
   // Used to schedule resetting the database because of corruption.
   base::WeakPtrFactory<SafeBrowsingDatabaseNew> reset_factory_;
 };
diff --git a/chrome/browser/safe_browsing/safe_browsing_database_unittest.cc b/chrome/browser/safe_browsing/safe_browsing_database_unittest.cc
index c09e53c..db83263 100644
--- a/chrome/browser/safe_browsing/safe_browsing_database_unittest.cc
+++ b/chrome/browser/safe_browsing/safe_browsing_database_unittest.cc
@@ -81,7 +81,7 @@
 }
 
 // Create add chunk with a single prefix.
-SBChunkData* AddChunkPrefix(int chunk_number,  SBPrefix prefix) {
+SBChunkData* AddChunkPrefix(int chunk_number, SBPrefix prefix) {
   return BuildChunk(chunk_number, safe_browsing::ChunkData::ADD,
                     safe_browsing::ChunkData::PREFIX_4B,
                     &prefix, sizeof(prefix),
@@ -259,10 +259,10 @@
 
     // Setup a database in a temporary directory.
     ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
-    database_.reset(new SafeBrowsingDatabaseNew);
     database_filename_ =
         temp_dir_.path().AppendASCII("SafeBrowsingTestDatabase");
-    database_->Init(database_filename_);
+
+    ResetAndReloadFullDatabase();
   }
 
   void TearDown() override {
@@ -271,6 +271,33 @@
     PlatformTest::TearDown();
   }
 
+  // Reloads the |database_| in a new SafeBrowsingDatabaseNew object with all
+  // stores enabled.
+  void ResetAndReloadFullDatabase() {
+    SafeBrowsingStoreFile* browse_store = new SafeBrowsingStoreFile();
+    SafeBrowsingStoreFile* download_store = new SafeBrowsingStoreFile();
+    SafeBrowsingStoreFile* csd_whitelist_store = new SafeBrowsingStoreFile();
+    SafeBrowsingStoreFile* download_whitelist_store =
+        new SafeBrowsingStoreFile();
+    SafeBrowsingStoreFile* extension_blacklist_store =
+        new SafeBrowsingStoreFile();
+    SafeBrowsingStoreFile* side_effect_free_whitelist_store =
+        new SafeBrowsingStoreFile();
+    SafeBrowsingStoreFile* ip_blacklist_store = new SafeBrowsingStoreFile();
+    SafeBrowsingStoreFile* unwanted_software_store =
+        new SafeBrowsingStoreFile();
+    database_.reset(
+        new SafeBrowsingDatabaseNew(browse_store,
+                                    download_store,
+                                    csd_whitelist_store,
+                                    download_whitelist_store,
+                                    extension_blacklist_store,
+                                    side_effect_free_whitelist_store,
+                                    ip_blacklist_store,
+                                    unwanted_software_store));
+    database_->Init(database_filename_);
+  }
+
   void GetListsInfo(std::vector<SBListChunkRanges>* lists) {
     lists->clear();
     ASSERT_TRUE(database_->UpdateStarted(lists));
@@ -360,7 +387,7 @@
   database_->UpdateFinished(true);
 
   GetListsInfo(&lists);
-  ASSERT_EQ(2U, lists.size());
+  ASSERT_LE(2U, lists.size());
   EXPECT_EQ(safe_browsing_util::kMalwareList, lists[0].name);
   EXPECT_EQ("1-3", lists[0].adds);
   EXPECT_EQ("7", lists[0].subs);
@@ -370,24 +397,6 @@
 }
 
 TEST_F(SafeBrowsingDatabaseTest, ListNameForBrowseAndDownload) {
-  database_.reset();
-  base::MessageLoop loop;
-  SafeBrowsingStoreFile* browse_store = new SafeBrowsingStoreFile();
-  SafeBrowsingStoreFile* download_store = new SafeBrowsingStoreFile();
-  SafeBrowsingStoreFile* csd_whitelist_store = new SafeBrowsingStoreFile();
-  SafeBrowsingStoreFile* download_whitelist_store = new SafeBrowsingStoreFile();
-  SafeBrowsingStoreFile* extension_blacklist_store =
-      new SafeBrowsingStoreFile();
-  SafeBrowsingStoreFile* ip_blacklist_store = new SafeBrowsingStoreFile();
-  database_.reset(new SafeBrowsingDatabaseNew(browse_store,
-                                              download_store,
-                                              csd_whitelist_store,
-                                              download_whitelist_store,
-                                              extension_blacklist_store,
-                                              NULL,
-                                              ip_blacklist_store));
-  database_->Init(database_filename_);
-
   ScopedVector<SBChunkData> chunks;
 
   std::vector<SBListChunkRanges> lists;
@@ -424,10 +433,14 @@
   chunks.push_back(AddChunkHashedIpValue(9, "::ffff:192.168.1.0", 120));
   database_->InsertChunks(safe_browsing_util::kIPBlacklist, chunks.get());
 
+  chunks.clear();
+  chunks.push_back(AddChunkPrefixValue(10, "www.unwanted.com/software.html"));
+  database_->InsertChunks(safe_browsing_util::kUnwantedUrlList, chunks.get());
+
   database_->UpdateFinished(true);
 
   GetListsInfo(&lists);
-  ASSERT_EQ(7U, lists.size());
+  ASSERT_EQ(9U, lists.size());
   EXPECT_EQ(safe_browsing_util::kMalwareList, lists[0].name);
   EXPECT_EQ("1", lists[0].adds);
   EXPECT_TRUE(lists[0].subs.empty());
@@ -446,240 +459,272 @@
   EXPECT_EQ(safe_browsing_util::kExtensionBlacklist, lists[5].name);
   EXPECT_EQ("8", lists[5].adds);
   EXPECT_TRUE(lists[5].subs.empty());
-  EXPECT_EQ(safe_browsing_util::kIPBlacklist, lists[6].name);
-  EXPECT_EQ("9", lists[6].adds);
-  EXPECT_TRUE(lists[6].subs.empty());
+  EXPECT_EQ(safe_browsing_util::kIPBlacklist, lists[7].name);
+  EXPECT_EQ("9", lists[7].adds);
+  EXPECT_TRUE(lists[7].subs.empty());
+  EXPECT_EQ(safe_browsing_util::kUnwantedUrlList, lists[8].name);
+  EXPECT_EQ("10", lists[8].adds);
+  EXPECT_TRUE(lists[8].subs.empty());
 
   database_.reset();
 }
 
-// Checks database reading and writing for browse.
-TEST_F(SafeBrowsingDatabaseTest, BrowseDatabase) {
-  std::vector<SBListChunkRanges> lists;
-  ScopedVector<SBChunkData> chunks;
+// Checks database reading and writing for browse and unwanted PrefixSets.
+TEST_F(SafeBrowsingDatabaseTest, BrowseAndUnwantedDatabasesAndPrefixSets) {
+  struct TestCase {
+    using TestListContainsBadUrl = bool (SafeBrowsingDatabase::*)(
+        const GURL& url,
+        std::vector<SBPrefix>* prefix_hits,
+        std::vector<SBFullHashResult>* cache_hits);
 
-  chunks.push_back(AddChunkPrefix2Value(1,
-                                        "www.evil.com/phishing.html",
-                                        "www.evil.com/malware.html"));
-  chunks.push_back(AddChunkPrefix4Value(2,
-                                        "www.evil.com/notevil1.html",
-                                        "www.evil.com/notevil2.html",
-                                        "www.good.com/good1.html",
-                                        "www.good.com/good2.html"));
-  chunks.push_back(AddChunkPrefixValue(3, "192.168.0.1/malware.html"));
-  chunks.push_back(AddChunkFullHashValue(7, "www.evil.com/evil.html"));
+    const char* test_list_name;
+    size_t expected_list_index;
+    TestListContainsBadUrl test_list_contains_bad_url;
+  } const kTestCases[] {
+    { safe_browsing_util::kMalwareList, 0U,
+      &SafeBrowsingDatabase::ContainsBrowseUrl },
+    { safe_browsing_util::kPhishingList, 1U,
+      &SafeBrowsingDatabase::ContainsBrowseUrl },
+    { safe_browsing_util::kUnwantedUrlList, 8U,
+      &SafeBrowsingDatabase::ContainsUnwantedSoftwareUrl },
+  };
 
-  ASSERT_TRUE(database_->UpdateStarted(&lists));
-  database_->InsertChunks(safe_browsing_util::kMalwareList, chunks.get());
-  database_->UpdateFinished(true);
+  for (const auto& test_case : kTestCases) {
+    SCOPED_TRACE(std::string("Tested list at fault => ") +
+                 test_case.test_list_name);
 
-  // Make sure they were added correctly.
-  GetListsInfo(&lists);
-  ASSERT_LE(1U, lists.size());
-  EXPECT_EQ(safe_browsing_util::kMalwareList, lists[0].name);
-  EXPECT_EQ("1-3,7", lists[0].adds);
-  EXPECT_TRUE(lists[0].subs.empty());
+    std::vector<SBListChunkRanges> lists;
+    ScopedVector<SBChunkData> chunks;
 
-  std::vector<SBPrefix> prefix_hits;
-  std::vector<SBFullHashResult> cache_hits;
-  EXPECT_TRUE(database_->ContainsBrowseUrl(
-      GURL("http://www.evil.com/phishing.html"), &prefix_hits, &cache_hits));
-  ASSERT_EQ(1U, prefix_hits.size());
-  EXPECT_EQ(SBPrefixForString("www.evil.com/phishing.html"), prefix_hits[0]);
-  EXPECT_TRUE(cache_hits.empty());
+    chunks.push_back(AddChunkPrefix2Value(1,
+                                          "www.evil.com/phishing.html",
+                                          "www.evil.com/malware.html"));
+    chunks.push_back(AddChunkPrefix4Value(2,
+                                          "www.evil.com/notevil1.html",
+                                          "www.evil.com/notevil2.html",
+                                          "www.good.com/good1.html",
+                                          "www.good.com/good2.html"));
+    chunks.push_back(AddChunkPrefixValue(3, "192.168.0.1/malware.html"));
+    chunks.push_back(AddChunkFullHashValue(7, "www.evil.com/evil.html"));
 
-  EXPECT_TRUE(database_->ContainsBrowseUrl(
-      GURL("http://www.evil.com/malware.html"), &prefix_hits, &cache_hits));
+    ASSERT_TRUE(database_->UpdateStarted(&lists));
+    database_->InsertChunks(test_case.test_list_name, chunks.get());
+    database_->UpdateFinished(true);
 
-  EXPECT_TRUE(database_->ContainsBrowseUrl(
-      GURL("http://www.evil.com/notevil1.html"), &prefix_hits, &cache_hits));
+    // Make sure they were added correctly.
+    GetListsInfo(&lists);
 
-  EXPECT_TRUE(database_->ContainsBrowseUrl(
-      GURL("http://www.evil.com/notevil2.html"), &prefix_hits, &cache_hits));
+    ASSERT_LE(1U, lists.size());
+    EXPECT_EQ(test_case.test_list_name,
+              lists[test_case.expected_list_index].name);
+    EXPECT_EQ("1-3,7", lists[test_case.expected_list_index].adds);
+    EXPECT_TRUE(lists[test_case.expected_list_index].subs.empty());
 
-  EXPECT_TRUE(database_->ContainsBrowseUrl(
-      GURL("http://www.good.com/good1.html"), &prefix_hits, &cache_hits));
+    std::vector<SBPrefix> prefix_hits;
+    std::vector<SBFullHashResult> cache_hits;
+    EXPECT_TRUE((database_.get()->*test_case.test_list_contains_bad_url)(
+        GURL("http://www.evil.com/phishing.html"), &prefix_hits, &cache_hits));
+    ASSERT_EQ(1U, prefix_hits.size());
+    EXPECT_EQ(SBPrefixForString("www.evil.com/phishing.html"), prefix_hits[0]);
+    EXPECT_TRUE(cache_hits.empty());
 
-  EXPECT_TRUE(database_->ContainsBrowseUrl(
-      GURL("http://www.good.com/good2.html"), &prefix_hits, &cache_hits));
+    EXPECT_TRUE((database_.get()->*test_case.test_list_contains_bad_url)(
+        GURL("http://www.evil.com/malware.html"), &prefix_hits, &cache_hits));
 
-  EXPECT_TRUE(database_->ContainsBrowseUrl(
-      GURL("http://192.168.0.1/malware.html"), &prefix_hits, &cache_hits));
+    EXPECT_TRUE((database_.get()->*test_case.test_list_contains_bad_url)(
+        GURL("http://www.evil.com/notevil1.html"), &prefix_hits, &cache_hits));
 
-  EXPECT_FALSE(database_->ContainsBrowseUrl(
-      GURL("http://www.evil.com/"), &prefix_hits, &cache_hits));
-  EXPECT_TRUE(prefix_hits.empty());
-  EXPECT_TRUE(cache_hits.empty());
+    EXPECT_TRUE((database_.get()->*test_case.test_list_contains_bad_url)(
+        GURL("http://www.evil.com/notevil2.html"), &prefix_hits, &cache_hits));
 
-  EXPECT_FALSE(database_->ContainsBrowseUrl(
-      GURL("http://www.evil.com/robots.txt"), &prefix_hits, &cache_hits));
+    EXPECT_TRUE((database_.get()->*test_case.test_list_contains_bad_url)(
+        GURL("http://www.good.com/good1.html"), &prefix_hits, &cache_hits));
 
-  EXPECT_TRUE(database_->ContainsBrowseUrl(
-      GURL("http://www.evil.com/evil.html"), &prefix_hits, &cache_hits));
-  ASSERT_EQ(1U, prefix_hits.size());
-  EXPECT_EQ(SBPrefixForString("www.evil.com/evil.html"), prefix_hits[0]);
+    EXPECT_TRUE((database_.get()->*test_case.test_list_contains_bad_url)(
+        GURL("http://www.good.com/good2.html"), &prefix_hits, &cache_hits));
 
-  // Attempt to re-add the first chunk (should be a no-op).
-  // see bug: http://code.google.com/p/chromium/issues/detail?id=4522
-  chunks.clear();
-  chunks.push_back(AddChunkPrefix2Value(1,
-                                        "www.evil.com/phishing.html",
-                                        "www.evil.com/malware.html"));
-  ASSERT_TRUE(database_->UpdateStarted(&lists));
-  database_->InsertChunks(safe_browsing_util::kMalwareList, chunks.get());
-  database_->UpdateFinished(true);
+    EXPECT_TRUE((database_.get()->*test_case.test_list_contains_bad_url)(
+        GURL("http://192.168.0.1/malware.html"), &prefix_hits, &cache_hits));
 
-  GetListsInfo(&lists);
-  ASSERT_LE(1U, lists.size());
-  EXPECT_EQ(safe_browsing_util::kMalwareList, lists[0].name);
-  EXPECT_EQ("1-3,7", lists[0].adds);
-  EXPECT_TRUE(lists[0].subs.empty());
+    EXPECT_FALSE((database_.get()->*test_case.test_list_contains_bad_url)(
+        GURL("http://www.evil.com/"), &prefix_hits, &cache_hits));
+    EXPECT_TRUE(prefix_hits.empty());
+    EXPECT_TRUE(cache_hits.empty());
 
-  // Test removing a single prefix from the add chunk.
-  chunks.clear();
-  chunks.push_back(SubChunkPrefixValue(4, "www.evil.com/notevil1.html", 2));
-  ASSERT_TRUE(database_->UpdateStarted(&lists));
-  database_->InsertChunks(safe_browsing_util::kMalwareList, chunks.get());
-  database_->UpdateFinished(true);
+    EXPECT_FALSE((database_.get()->*test_case.test_list_contains_bad_url)(
+        GURL("http://www.evil.com/robots.txt"), &prefix_hits, &cache_hits));
 
-  EXPECT_TRUE(database_->ContainsBrowseUrl(
-      GURL("http://www.evil.com/phishing.html"), &prefix_hits, &cache_hits));
-  ASSERT_EQ(1U, prefix_hits.size());
-  EXPECT_EQ(SBPrefixForString("www.evil.com/phishing.html"), prefix_hits[0]);
-  EXPECT_TRUE(cache_hits.empty());
+    EXPECT_TRUE((database_.get()->*test_case.test_list_contains_bad_url)(
+        GURL("http://www.evil.com/evil.html"), &prefix_hits, &cache_hits));
+    ASSERT_EQ(1U, prefix_hits.size());
+    EXPECT_EQ(SBPrefixForString("www.evil.com/evil.html"), prefix_hits[0]);
 
-  EXPECT_FALSE(database_->ContainsBrowseUrl(
-      GURL("http://www.evil.com/notevil1.html"), &prefix_hits, &cache_hits));
-  EXPECT_TRUE(prefix_hits.empty());
-  EXPECT_TRUE(cache_hits.empty());
+    // Attempt to re-add the first chunk (should be a no-op).
+    // see bug: http://code.google.com/p/chromium/issues/detail?id=4522
+    chunks.clear();
+    chunks.push_back(AddChunkPrefix2Value(1,
+                                          "www.evil.com/phishing.html",
+                                          "www.evil.com/malware.html"));
+    ASSERT_TRUE(database_->UpdateStarted(&lists));
+    database_->InsertChunks(test_case.test_list_name, chunks.get());
+    database_->UpdateFinished(true);
 
-  EXPECT_TRUE(database_->ContainsBrowseUrl(
-      GURL("http://www.evil.com/notevil2.html"), &prefix_hits, &cache_hits));
+    GetListsInfo(&lists);
+    ASSERT_LE(1U, lists.size());
+    EXPECT_EQ(test_case.test_list_name,
+              lists[test_case.expected_list_index].name);
+    EXPECT_EQ("1-3,7", lists[test_case.expected_list_index].adds);
+    EXPECT_TRUE(lists[test_case.expected_list_index].subs.empty());
 
-  EXPECT_TRUE(database_->ContainsBrowseUrl(
-      GURL("http://www.good.com/good1.html"), &prefix_hits, &cache_hits));
+    // Test removing a single prefix from the add chunk.
+    chunks.clear();
+    chunks.push_back(SubChunkPrefixValue(4, "www.evil.com/notevil1.html", 2));
+    ASSERT_TRUE(database_->UpdateStarted(&lists));
+    database_->InsertChunks(test_case.test_list_name, chunks.get());
+    database_->UpdateFinished(true);
 
-  EXPECT_TRUE(database_->ContainsBrowseUrl(
-      GURL("http://www.good.com/good2.html"), &prefix_hits, &cache_hits));
+    EXPECT_TRUE((database_.get()->*test_case.test_list_contains_bad_url)(
+        GURL("http://www.evil.com/phishing.html"), &prefix_hits, &cache_hits));
+    ASSERT_EQ(1U, prefix_hits.size());
+    EXPECT_EQ(SBPrefixForString("www.evil.com/phishing.html"), prefix_hits[0]);
+    EXPECT_TRUE(cache_hits.empty());
 
-  GetListsInfo(&lists);
-  ASSERT_LE(1U, lists.size());
-  EXPECT_EQ(safe_browsing_util::kMalwareList, lists[0].name);
-  EXPECT_EQ("1-3,7", lists[0].adds);
-  EXPECT_EQ("4", lists[0].subs);
+    EXPECT_FALSE((database_.get()->*test_case.test_list_contains_bad_url)(
+        GURL("http://www.evil.com/notevil1.html"), &prefix_hits, &cache_hits));
+    EXPECT_TRUE(prefix_hits.empty());
+    EXPECT_TRUE(cache_hits.empty());
 
-  // Test the same sub chunk again.  This should be a no-op.
-  // see bug: http://code.google.com/p/chromium/issues/detail?id=4522
-  chunks.clear();
-  chunks.push_back(SubChunkPrefixValue(4, "www.evil.com/notevil1.html", 2));
+    EXPECT_TRUE((database_.get()->*test_case.test_list_contains_bad_url)(
+        GURL("http://www.evil.com/notevil2.html"), &prefix_hits, &cache_hits));
 
-  ASSERT_TRUE(database_->UpdateStarted(&lists));
-  database_->InsertChunks(safe_browsing_util::kMalwareList, chunks.get());
-  database_->UpdateFinished(true);
+    EXPECT_TRUE((database_.get()->*test_case.test_list_contains_bad_url)(
+        GURL("http://www.good.com/good1.html"), &prefix_hits, &cache_hits));
 
-  GetListsInfo(&lists);
-  ASSERT_LE(1U, lists.size());
-  EXPECT_EQ(safe_browsing_util::kMalwareList, lists[0].name);
-  EXPECT_EQ("1-3,7", lists[0].adds);
-  EXPECT_EQ("4", lists[0].subs);
+    EXPECT_TRUE((database_.get()->*test_case.test_list_contains_bad_url)(
+        GURL("http://www.good.com/good2.html"), &prefix_hits, &cache_hits));
 
-  // Test removing all the prefixes from an add chunk.
-  ASSERT_TRUE(database_->UpdateStarted(&lists));
-  AddDelChunk(safe_browsing_util::kMalwareList, 2);
-  database_->UpdateFinished(true);
+    GetListsInfo(&lists);
+    ASSERT_LE(1U, lists.size());
+    EXPECT_EQ(test_case.test_list_name,
+              lists[test_case.expected_list_index].name);
+    EXPECT_EQ("1-3,7", lists[test_case.expected_list_index].adds);
+    EXPECT_EQ("4", lists[test_case.expected_list_index].subs);
 
-  EXPECT_FALSE(database_->ContainsBrowseUrl(
-      GURL("http://www.evil.com/notevil2.html"), &prefix_hits, &cache_hits));
+    // Test the same sub chunk again.  This should be a no-op.
+    // see bug: http://code.google.com/p/chromium/issues/detail?id=4522
+    chunks.clear();
+    chunks.push_back(SubChunkPrefixValue(4, "www.evil.com/notevil1.html", 2));
 
-  EXPECT_FALSE(database_->ContainsBrowseUrl(
-      GURL("http://www.good.com/good1.html"), &prefix_hits, &cache_hits));
+    ASSERT_TRUE(database_->UpdateStarted(&lists));
+    database_->InsertChunks(test_case.test_list_name, chunks.get());
+    database_->UpdateFinished(true);
 
-  EXPECT_FALSE(database_->ContainsBrowseUrl(
-      GURL("http://www.good.com/good2.html"), &prefix_hits, &cache_hits));
+    GetListsInfo(&lists);
+    ASSERT_LE(1U, lists.size());
+    EXPECT_EQ(test_case.test_list_name,
+              lists[test_case.expected_list_index].name);
+    EXPECT_EQ("1-3,7", lists[test_case.expected_list_index].adds);
+    EXPECT_EQ("4", lists[test_case.expected_list_index].subs);
 
-  GetListsInfo(&lists);
-  ASSERT_LE(1U, lists.size());
-  EXPECT_EQ(safe_browsing_util::kMalwareList, lists[0].name);
-  EXPECT_EQ("1,3,7", lists[0].adds);
-  EXPECT_EQ("4", lists[0].subs);
+    // Test removing all the prefixes from an add chunk.
+    ASSERT_TRUE(database_->UpdateStarted(&lists));
+    AddDelChunk(test_case.test_list_name, 2);
+    database_->UpdateFinished(true);
 
-  // The adddel command exposed a bug in the transaction code where any
-  // transaction after it would fail.  Add a dummy entry and remove it to
-  // make sure the transcation works fine.
-  chunks.clear();
-  chunks.push_back(AddChunkPrefixValue(44, "www.redherring.com/index.html"));
-  ASSERT_TRUE(database_->UpdateStarted(&lists));
-  database_->InsertChunks(safe_browsing_util::kMalwareList, chunks.get());
+    EXPECT_FALSE((database_.get()->*test_case.test_list_contains_bad_url)(
+        GURL("http://www.evil.com/notevil2.html"), &prefix_hits, &cache_hits));
 
-  // Now remove the dummy entry.  If there are any problems with the
-  // transactions, asserts will fire.
-  AddDelChunk(safe_browsing_util::kMalwareList, 44);
+    EXPECT_FALSE((database_.get()->*test_case.test_list_contains_bad_url)(
+        GURL("http://www.good.com/good1.html"), &prefix_hits, &cache_hits));
 
-  // Test the subdel command.
-  SubDelChunk(safe_browsing_util::kMalwareList, 4);
-  database_->UpdateFinished(true);
+    EXPECT_FALSE((database_.get()->*test_case.test_list_contains_bad_url)(
+        GURL("http://www.good.com/good2.html"), &prefix_hits, &cache_hits));
 
-  GetListsInfo(&lists);
-  ASSERT_LE(1U, lists.size());
-  EXPECT_EQ(safe_browsing_util::kMalwareList, lists[0].name);
-  EXPECT_EQ("1,3,7", lists[0].adds);
-  EXPECT_TRUE(lists[0].subs.empty());
+    GetListsInfo(&lists);
+    ASSERT_LE(1U, lists.size());
+    EXPECT_EQ(test_case.test_list_name,
+              lists[test_case.expected_list_index].name);
+    EXPECT_EQ("1,3,7", lists[test_case.expected_list_index].adds);
+    EXPECT_EQ("4", lists[test_case.expected_list_index].subs);
 
-  // Test a sub command coming in before the add.
-  chunks.clear();
-  chunks.push_back(SubChunkPrefix2Value(5,
-                                        "www.notevilanymore.com/index.html",
-                                        10,
-                                        "www.notevilanymore.com/good.html",
-                                        10));
-  ASSERT_TRUE(database_->UpdateStarted(&lists));
-  database_->InsertChunks(safe_browsing_util::kMalwareList, chunks.get());
-  database_->UpdateFinished(true);
+    // The adddel command exposed a bug in the transaction code where any
+    // transaction after it would fail.  Add a dummy entry and remove it to
+    // make sure the transcation works fine.
+    chunks.clear();
+    chunks.push_back(AddChunkPrefixValue(44, "www.redherring.com/index.html"));
+    ASSERT_TRUE(database_->UpdateStarted(&lists));
+    database_->InsertChunks(test_case.test_list_name, chunks.get());
 
-  EXPECT_FALSE(database_->ContainsBrowseUrl(
-      GURL("http://www.notevilanymore.com/index.html"),
-      &prefix_hits,
-      &cache_hits));
+    // Now remove the dummy entry.  If there are any problems with the
+    // transactions, asserts will fire.
+    AddDelChunk(test_case.test_list_name, 44);
 
-  // Now insert the tardy add chunk and we don't expect them to appear
-  // in database because of the previous sub chunk.
-  chunks.clear();
-  chunks.push_back(AddChunkPrefix2Value(10,
-                                        "www.notevilanymore.com/index.html",
-                                        "www.notevilanymore.com/good.html"));
-  ASSERT_TRUE(database_->UpdateStarted(&lists));
-  database_->InsertChunks(safe_browsing_util::kMalwareList, chunks.get());
-  database_->UpdateFinished(true);
+    // Test the subdel command.
+    SubDelChunk(test_case.test_list_name, 4);
+    database_->UpdateFinished(true);
 
-  EXPECT_FALSE(database_->ContainsBrowseUrl(
-      GURL("http://www.notevilanymore.com/index.html"),
-      &prefix_hits,
-      &cache_hits));
+    GetListsInfo(&lists);
+    ASSERT_LE(1U, lists.size());
+    EXPECT_EQ(test_case.test_list_name,
+              lists[test_case.expected_list_index].name);
+    EXPECT_EQ("1,3,7", lists[test_case.expected_list_index].adds);
+    EXPECT_TRUE(lists[test_case.expected_list_index].subs.empty());
 
-  EXPECT_FALSE(database_->ContainsBrowseUrl(
-      GURL("http://www.notevilanymore.com/good.html"),
-      &prefix_hits,
-      &cache_hits));
+    // Test a sub command coming in before the add.
+    chunks.clear();
+    chunks.push_back(SubChunkPrefix2Value(5,
+                                          "www.notevilanymore.com/index.html",
+                                          10,
+                                          "www.notevilanymore.com/good.html",
+                                          10));
+    ASSERT_TRUE(database_->UpdateStarted(&lists));
+    database_->InsertChunks(test_case.test_list_name, chunks.get());
+    database_->UpdateFinished(true);
 
-  // Reset and reload the database.  The database will rely on the prefix set.
-  database_.reset(new SafeBrowsingDatabaseNew);
-  database_->Init(database_filename_);
+    EXPECT_FALSE((database_.get()->*test_case.test_list_contains_bad_url)(
+        GURL("http://www.notevilanymore.com/index.html"),
+        &prefix_hits,
+        &cache_hits));
 
-  // Check that a prefix still hits.
-  EXPECT_TRUE(database_->ContainsBrowseUrl(
-      GURL("http://www.evil.com/phishing.html"), &prefix_hits, &cache_hits));
-  ASSERT_EQ(1U, prefix_hits.size());
-  EXPECT_EQ(SBPrefixForString("www.evil.com/phishing.html"), prefix_hits[0]);
+    // Now insert the tardy add chunk and we don't expect them to appear
+    // in database because of the previous sub chunk.
+    chunks.clear();
+    chunks.push_back(AddChunkPrefix2Value(10,
+                                          "www.notevilanymore.com/index.html",
+                                          "www.notevilanymore.com/good.html"));
+    ASSERT_TRUE(database_->UpdateStarted(&lists));
+    database_->InsertChunks(test_case.test_list_name, chunks.get());
+    database_->UpdateFinished(true);
 
-  // Also check that it's not just always returning true in this case.
-  EXPECT_FALSE(database_->ContainsBrowseUrl(
-      GURL("http://www.evil.com/"), &prefix_hits, &cache_hits));
+    EXPECT_FALSE((database_.get()->*test_case.test_list_contains_bad_url)(
+        GURL("http://www.notevilanymore.com/index.html"),
+        &prefix_hits,
+        &cache_hits));
 
-  // Check that the full hash is still present.
-  EXPECT_TRUE(database_->ContainsBrowseUrl(
-      GURL("http://www.evil.com/evil.html"), &prefix_hits, &cache_hits));
-  ASSERT_EQ(1U, prefix_hits.size());
-  EXPECT_EQ(SBPrefixForString("www.evil.com/evil.html"), prefix_hits[0]);
+    EXPECT_FALSE((database_.get()->*test_case.test_list_contains_bad_url)(
+        GURL("http://www.notevilanymore.com/good.html"),
+        &prefix_hits,
+        &cache_hits));
+
+    // Reset and reload the database.  The database will rely on the prefix set.
+    ResetAndReloadFullDatabase();
+
+    // Check that a prefix still hits.
+    EXPECT_TRUE((database_.get()->*test_case.test_list_contains_bad_url)(
+        GURL("http://www.evil.com/phishing.html"), &prefix_hits, &cache_hits));
+    ASSERT_EQ(1U, prefix_hits.size());
+    EXPECT_EQ(SBPrefixForString("www.evil.com/phishing.html"), prefix_hits[0]);
+
+    // Also check that it's not just always returning true in this case.
+    EXPECT_FALSE((database_.get()->*test_case.test_list_contains_bad_url)(
+        GURL("http://www.evil.com/"), &prefix_hits, &cache_hits));
+
+    // Check that the full hash is still present.
+    EXPECT_TRUE((database_.get()->*test_case.test_list_contains_bad_url)(
+        GURL("http://www.evil.com/evil.html"), &prefix_hits, &cache_hits));
+    ASSERT_EQ(1U, prefix_hits.size());
+    EXPECT_EQ(SBPrefixForString("www.evil.com/evil.html"), prefix_hits[0]);
+  }
 }
 
 // Test adding zero length chunks to the database.
@@ -786,7 +831,7 @@
   database_->UpdateFinished(true);
 
   // Cache should be cleared after updating.
-  EXPECT_TRUE(database_->browse_gethash_cache_.empty());
+  EXPECT_TRUE(database_->prefix_gethash_cache_.empty());
 
   SBFullHashResult full_hash;
   full_hash.list_id = safe_browsing_util::MALWARE;
@@ -810,7 +855,7 @@
   PopulateDatabaseForCacheTest();
 
   // We should have both full hashes in the cache.
-  EXPECT_EQ(2U, database_->browse_gethash_cache_.size());
+  EXPECT_EQ(2U, database_->prefix_gethash_cache_.size());
 
   // Test the cache lookup for the first prefix.
   std::vector<SBPrefix> prefix_hits;
@@ -866,7 +911,7 @@
   database_->UpdateFinished(true);
   EXPECT_FALSE(database_->ContainsBrowseUrl(
       GURL("http://www.evil.com/malware.html"), &prefix_hits, &cache_hits));
-  EXPECT_TRUE(database_->browse_gethash_cache_.empty());
+  EXPECT_TRUE(database_->prefix_gethash_cache_.empty());
   prefix_hits.clear();
   cache_hits.clear();
 
@@ -876,7 +921,7 @@
   PopulateDatabaseForCacheTest();
 
   std::map<SBPrefix, SBCachedFullHashResult>* hash_cache =
-      &database_->browse_gethash_cache_;
+      &database_->prefix_gethash_cache_;
   EXPECT_EQ(2U, hash_cache->size());
 
   // Now adjust one of the entries times to be in the past.
@@ -1051,7 +1096,7 @@
   base::MessageLoop loop;
   SafeBrowsingStoreFile* store = new SafeBrowsingStoreFile();
   database_.reset(new SafeBrowsingDatabaseNew(store, NULL, NULL, NULL, NULL,
-                                              NULL, NULL));
+                                              NULL, NULL, NULL));
   database_->Init(database_filename_);
 
   // This will cause an empty database to be created.
@@ -1106,20 +1151,6 @@
 
 // Checks database reading and writing.
 TEST_F(SafeBrowsingDatabaseTest, ContainsDownloadUrl) {
-  database_.reset();
-  base::MessageLoop loop;
-  SafeBrowsingStoreFile* browse_store = new SafeBrowsingStoreFile();
-  SafeBrowsingStoreFile* download_store = new SafeBrowsingStoreFile();
-  SafeBrowsingStoreFile* csd_whitelist_store = new SafeBrowsingStoreFile();
-  database_.reset(new SafeBrowsingDatabaseNew(browse_store,
-                                              download_store,
-                                              csd_whitelist_store,
-                                              NULL,
-                                              NULL,
-                                              NULL,
-                                              NULL));
-  database_->Init(database_filename_);
-
   const char kEvil1Url1[] = "www.evil1.com/download1/";
   const char kEvil1Url2[] = "www.evil1.com/download2.html";
 
@@ -1217,7 +1248,7 @@
   // If the whitelist is disabled everything should match the whitelist.
   database_.reset(new SafeBrowsingDatabaseNew(new SafeBrowsingStoreFile(),
                                               NULL, NULL, NULL, NULL, NULL,
-                                              NULL));
+                                              NULL, NULL));
   database_->Init(database_filename_);
   EXPECT_TRUE(database_->ContainsDownloadWhitelistedUrl(
       GURL(std::string("http://www.phishing.com/"))));
@@ -1225,17 +1256,7 @@
       GURL(std::string("http://www.phishing.com/"))));
   EXPECT_TRUE(database_->ContainsDownloadWhitelistedString("asdf"));
 
-  SafeBrowsingStoreFile* browse_store = new SafeBrowsingStoreFile();
-  SafeBrowsingStoreFile* csd_whitelist_store = new SafeBrowsingStoreFile();
-  SafeBrowsingStoreFile* download_whitelist_store = new SafeBrowsingStoreFile();
-  SafeBrowsingStoreFile* extension_blacklist_store =
-      new SafeBrowsingStoreFile();
-  database_.reset(new SafeBrowsingDatabaseNew(browse_store, NULL,
-                                              csd_whitelist_store,
-                                              download_whitelist_store,
-                                              extension_blacklist_store,
-                                              NULL, NULL));
-  database_->Init(database_filename_);
+  ResetAndReloadFullDatabase();
 
   const char kGood1Host[] = "www.good1.com/";
   const char kGood1Url1[] = "www.good1.com/a/b.html";
@@ -1435,7 +1456,7 @@
   database_->UpdateFinished(true);
 
   GetListsInfo(&lists);
-  ASSERT_EQ(2U, lists.size());
+  ASSERT_LE(2U, lists.size());
   EXPECT_EQ(safe_browsing_util::kMalwareList, lists[0].name);
   EXPECT_EQ("1", lists[0].adds);
   EXPECT_TRUE(lists[0].subs.empty());
@@ -1563,8 +1584,7 @@
   // After re-creating the database, it should have a filter read from
   // a file, so it should find the same results.
   ASSERT_TRUE(base::PathExists(filter_file));
-  database_.reset(new SafeBrowsingDatabaseNew);
-  database_->Init(database_filename_);
+  ResetAndReloadFullDatabase();
   EXPECT_TRUE(database_->ContainsBrowseUrl(
       GURL("http://www.evil.com/malware.html"), &prefix_hits, &cache_hits));
   EXPECT_FALSE(database_->ContainsBrowseUrl(
@@ -1573,8 +1593,7 @@
   // If there is no filter file, the database cannot find malware urls.
   base::DeleteFile(filter_file, false);
   ASSERT_FALSE(base::PathExists(filter_file));
-  database_.reset(new SafeBrowsingDatabaseNew);
-  database_->Init(database_filename_);
+  ResetAndReloadFullDatabase();
   EXPECT_FALSE(database_->ContainsBrowseUrl(
       GURL("http://www.evil.com/malware.html"), &prefix_hits, &cache_hits));
   EXPECT_FALSE(database_->ContainsBrowseUrl(
@@ -1613,14 +1632,14 @@
     std::vector<SBFullHash> full_hashes(1, kFullHash1_1);
     std::vector<SBPrefix> prefix_hits;
     std::vector<SBFullHashResult> cache_hits;
-    EXPECT_FALSE(database_->ContainsBrowseUrlHashes(
+    EXPECT_FALSE(database_->ContainsBrowseUrlHashesForTesting(
         full_hashes, &prefix_hits, &cache_hits));
 
     // kFullHash2_1 gets a hit from the prefix in the database.
     full_hashes.push_back(kFullHash2_1);
     prefix_hits.clear();
     cache_hits.clear();
-    EXPECT_TRUE(database_->ContainsBrowseUrlHashes(
+    EXPECT_TRUE(database_->ContainsBrowseUrlHashesForTesting(
         full_hashes, &prefix_hits, &cache_hits));
     ASSERT_EQ(1U, prefix_hits.size());
     EXPECT_EQ(kPrefix2, prefix_hits[0]);
@@ -1661,7 +1680,7 @@
     full_hashes.push_back(kFullHash1_1);
     std::vector<SBPrefix> prefix_hits;
     std::vector<SBFullHashResult> cache_hits;
-    EXPECT_TRUE(database_->ContainsBrowseUrlHashes(
+    EXPECT_TRUE(database_->ContainsBrowseUrlHashesForTesting(
         full_hashes, &prefix_hits, &cache_hits));
     ASSERT_EQ(1U, prefix_hits.size());
     EXPECT_EQ(kPrefix1, prefix_hits[0]);
@@ -1671,7 +1690,7 @@
     full_hashes.push_back(kFullHash2_1);
     prefix_hits.clear();
     cache_hits.clear();
-    EXPECT_TRUE(database_->ContainsBrowseUrlHashes(
+    EXPECT_TRUE(database_->ContainsBrowseUrlHashesForTesting(
         full_hashes, &prefix_hits, &cache_hits));
     ASSERT_EQ(2U, prefix_hits.size());
     EXPECT_EQ(kPrefix1, prefix_hits[0]);
@@ -1682,7 +1701,7 @@
     full_hashes.push_back(kFullHash3_1);
     prefix_hits.clear();
     cache_hits.clear();
-    EXPECT_TRUE(database_->ContainsBrowseUrlHashes(
+    EXPECT_TRUE(database_->ContainsBrowseUrlHashesForTesting(
         full_hashes, &prefix_hits, &cache_hits));
     ASSERT_EQ(2U, prefix_hits.size());
     EXPECT_EQ(kPrefix1, prefix_hits[0]);
@@ -1712,7 +1731,7 @@
     std::vector<SBFullHash> full_hashes(1, kFullHash1_1);
     std::vector<SBPrefix> prefix_hits;
     std::vector<SBFullHashResult> cache_hits;
-    EXPECT_TRUE(database_->ContainsBrowseUrlHashes(
+    EXPECT_TRUE(database_->ContainsBrowseUrlHashesForTesting(
         full_hashes, &prefix_hits, &cache_hits));
     EXPECT_TRUE(prefix_hits.empty());
     ASSERT_EQ(1U, cache_hits.size());
@@ -1723,7 +1742,7 @@
     full_hashes.push_back(kFullHash2_1);
     prefix_hits.clear();
     cache_hits.clear();
-    EXPECT_TRUE(database_->ContainsBrowseUrlHashes(
+    EXPECT_TRUE(database_->ContainsBrowseUrlHashesForTesting(
         full_hashes, &prefix_hits, &cache_hits));
     ASSERT_EQ(1U, prefix_hits.size());
     EXPECT_EQ(kPrefix2, prefix_hits[0]);
@@ -1734,7 +1753,7 @@
     full_hashes.push_back(kFullHash1_3);
     prefix_hits.clear();
     cache_hits.clear();
-    EXPECT_TRUE(database_->ContainsBrowseUrlHashes(
+    EXPECT_TRUE(database_->ContainsBrowseUrlHashesForTesting(
         full_hashes, &prefix_hits, &cache_hits));
     ASSERT_EQ(1U, prefix_hits.size());
     EXPECT_EQ(kPrefix2, prefix_hits[0]);
@@ -1748,7 +1767,7 @@
     std::vector<SBFullHash> full_hashes(1, kFullHash1_3);
     std::vector<SBPrefix> prefix_hits;
     std::vector<SBFullHashResult> cache_hits;
-    EXPECT_TRUE(database_->ContainsBrowseUrlHashes(
+    EXPECT_TRUE(database_->ContainsBrowseUrlHashesForTesting(
         full_hashes, &prefix_hits, &cache_hits));
     EXPECT_TRUE(prefix_hits.empty());
     ASSERT_EQ(1U, cache_hits.size());
@@ -1761,14 +1780,14 @@
     std::vector<SBFullHash> full_hashes(1, kFullHash1_2);
     std::vector<SBPrefix> prefix_hits;
     std::vector<SBFullHashResult> cache_hits;
-    EXPECT_FALSE(database_->ContainsBrowseUrlHashes(
+    EXPECT_FALSE(database_->ContainsBrowseUrlHashesForTesting(
         full_hashes, &prefix_hits, &cache_hits));
 
     // Other prefix hits possible when kFullHash1_2 hits nothing.
     full_hashes.push_back(kFullHash2_1);
     prefix_hits.clear();
     cache_hits.clear();
-    EXPECT_TRUE(database_->ContainsBrowseUrlHashes(
+    EXPECT_TRUE(database_->ContainsBrowseUrlHashesForTesting(
         full_hashes, &prefix_hits, &cache_hits));
     ASSERT_EQ(1U, prefix_hits.size());
     EXPECT_EQ(kPrefix2, prefix_hits[0]);
@@ -1800,14 +1819,14 @@
     std::vector<SBFullHash> full_hashes(1, kFullHash1_3);
     std::vector<SBPrefix> prefix_hits;
     std::vector<SBFullHashResult> cache_hits;
-    EXPECT_FALSE(database_->ContainsBrowseUrlHashes(
+    EXPECT_FALSE(database_->ContainsBrowseUrlHashesForTesting(
         full_hashes, &prefix_hits, &cache_hits));
 
     // Also one which is present, should have a prefix hit.
     full_hashes.push_back(kFullHash1_1);
     prefix_hits.clear();
     cache_hits.clear();
-    EXPECT_TRUE(database_->ContainsBrowseUrlHashes(
+    EXPECT_TRUE(database_->ContainsBrowseUrlHashesForTesting(
         full_hashes, &prefix_hits, &cache_hits));
     ASSERT_EQ(1U, prefix_hits.size());
     EXPECT_EQ(kPrefix1, prefix_hits[0]);
@@ -1817,7 +1836,7 @@
     full_hashes.push_back(kFullHash1_2);
     prefix_hits.clear();
     cache_hits.clear();
-    EXPECT_TRUE(database_->ContainsBrowseUrlHashes(
+    EXPECT_TRUE(database_->ContainsBrowseUrlHashesForTesting(
         full_hashes, &prefix_hits, &cache_hits));
     ASSERT_EQ(1U, prefix_hits.size());
     EXPECT_EQ(kPrefix1, prefix_hits[0]);
@@ -1842,7 +1861,7 @@
     std::vector<SBFullHash> full_hashes(1, kFullHash1_3);
     std::vector<SBPrefix> prefix_hits;
     std::vector<SBFullHashResult> cache_hits;
-    EXPECT_FALSE(database_->ContainsBrowseUrlHashes(
+    EXPECT_FALSE(database_->ContainsBrowseUrlHashesForTesting(
         full_hashes, &prefix_hits, &cache_hits));
 
     // kFullHash1_1 is also not in the cached result, which takes
@@ -1850,14 +1869,14 @@
     prefix_hits.clear();
     full_hashes.push_back(kFullHash1_1);
     cache_hits.clear();
-    EXPECT_FALSE(database_->ContainsBrowseUrlHashes(
+    EXPECT_FALSE(database_->ContainsBrowseUrlHashesForTesting(
         full_hashes, &prefix_hits, &cache_hits));
 
     // kFullHash1_2 is in the cached result.
     full_hashes.push_back(kFullHash1_2);
     prefix_hits.clear();
     cache_hits.clear();
-    EXPECT_TRUE(database_->ContainsBrowseUrlHashes(
+    EXPECT_TRUE(database_->ContainsBrowseUrlHashesForTesting(
         full_hashes, &prefix_hits, &cache_hits));
     EXPECT_TRUE(prefix_hits.empty());
     ASSERT_EQ(1U, cache_hits.size());
@@ -1873,28 +1892,28 @@
   database_->UpdateFinished(true);
 
   // Cache should be cleared after updating.
-  EXPECT_TRUE(database_->browse_gethash_cache_.empty());
+  EXPECT_TRUE(database_->prefix_gethash_cache_.empty());
 
   {
     // Now the database doesn't contain kFullHash1_1.
     std::vector<SBFullHash> full_hashes(1, kFullHash1_1);
     std::vector<SBPrefix> prefix_hits;
     std::vector<SBFullHashResult> cache_hits;
-    EXPECT_FALSE(database_->ContainsBrowseUrlHashes(
+    EXPECT_FALSE(database_->ContainsBrowseUrlHashesForTesting(
         full_hashes, &prefix_hits, &cache_hits));
 
     // Nor kFullHash1_3.
     full_hashes.push_back(kFullHash1_3);
     prefix_hits.clear();
     cache_hits.clear();
-    EXPECT_FALSE(database_->ContainsBrowseUrlHashes(
+    EXPECT_FALSE(database_->ContainsBrowseUrlHashesForTesting(
         full_hashes, &prefix_hits, &cache_hits));
 
     // Still has kFullHash1_2.
     full_hashes.push_back(kFullHash1_2);
     prefix_hits.clear();
     cache_hits.clear();
-    EXPECT_TRUE(database_->ContainsBrowseUrlHashes(
+    EXPECT_TRUE(database_->ContainsBrowseUrlHashesForTesting(
         full_hashes, &prefix_hits, &cache_hits));
     ASSERT_EQ(1U, prefix_hits.size());
     EXPECT_EQ(kPrefix1, prefix_hits[0]);
@@ -1910,7 +1929,7 @@
   database_->UpdateFinished(true);
 
   // Cache should be cleared after updating.
-  EXPECT_TRUE(database_->browse_gethash_cache_.empty());
+  EXPECT_TRUE(database_->prefix_gethash_cache_.empty());
 
   {
     // None are present.
@@ -1920,7 +1939,7 @@
     full_hashes.push_back(kFullHash1_1);
     full_hashes.push_back(kFullHash1_2);
     full_hashes.push_back(kFullHash1_3);
-    EXPECT_FALSE(database_->ContainsBrowseUrlHashes(
+    EXPECT_FALSE(database_->ContainsBrowseUrlHashesForTesting(
         full_hashes, &prefix_hits, &cache_hits));
   }
 }
@@ -1945,7 +1964,7 @@
     std::vector<SBFullHash> full_hashes(1, kFullHash1_2);
     std::vector<SBPrefix> prefix_hits;
     std::vector<SBFullHashResult> cache_hits;
-    EXPECT_FALSE(database_->ContainsBrowseUrlHashes(
+    EXPECT_FALSE(database_->ContainsBrowseUrlHashesForTesting(
         full_hashes, &prefix_hits, &cache_hits));
   }
 
@@ -1962,7 +1981,7 @@
     std::vector<SBFullHash> full_hashes(1, kFullHash1_2);
     std::vector<SBPrefix> prefix_hits;
     std::vector<SBFullHashResult> cache_hits;
-    EXPECT_TRUE(database_->ContainsBrowseUrlHashes(
+    EXPECT_TRUE(database_->ContainsBrowseUrlHashesForTesting(
         full_hashes, &prefix_hits, &cache_hits));
     ASSERT_EQ(1U, prefix_hits.size());
     EXPECT_EQ(kPrefix1, prefix_hits[0]);
@@ -1982,7 +2001,7 @@
     std::vector<SBFullHash> full_hashes(1, kFullHash1_2);
     std::vector<SBPrefix> prefix_hits;
     std::vector<SBFullHashResult> cache_hits;
-    EXPECT_TRUE(database_->ContainsBrowseUrlHashes(
+    EXPECT_TRUE(database_->ContainsBrowseUrlHashesForTesting(
         full_hashes, &prefix_hits, &cache_hits));
     ASSERT_EQ(1U, prefix_hits.size());
     EXPECT_EQ(kPrefix1, prefix_hits[0]);
@@ -1991,17 +2010,6 @@
 }
 
 TEST_F(SafeBrowsingDatabaseTest, MalwareIpBlacklist) {
-  database_.reset();
-  SafeBrowsingStoreFile* browse_store = new SafeBrowsingStoreFile();
-  SafeBrowsingStoreFile* ip_blacklist_store = new SafeBrowsingStoreFile();
-  database_.reset(new SafeBrowsingDatabaseNew(browse_store,
-                                              NULL,
-                                              NULL,
-                                              NULL,
-                                              NULL,
-                                              NULL,
-                                              ip_blacklist_store));
-  database_->Init(database_filename_);
   std::vector<SBListChunkRanges> lists;
   ASSERT_TRUE(database_->UpdateStarted(&lists));
 
diff --git a/chrome/browser/safe_browsing/safe_browsing_service_browsertest.cc b/chrome/browser/safe_browsing/safe_browsing_service_browsertest.cc
index 3137d06..87f739e 100644
--- a/chrome/browser/safe_browsing/safe_browsing_service_browsertest.cc
+++ b/chrome/browser/safe_browsing/safe_browsing_service_browsertest.cc
@@ -134,6 +134,16 @@
                        std::vector<GURL>(1, url),
                        prefix_hits);
   }
+  bool ContainsUnwantedSoftwareUrl(
+      const GURL& url,
+      std::vector<SBPrefix>* prefix_hits,
+      std::vector<SBFullHashResult>* cache_hits) override {
+    cache_hits->clear();
+    return ContainsUrl(safe_browsing_util::UNWANTEDURL,
+                       safe_browsing_util::UNWANTEDURL,
+                       std::vector<GURL>(1, url),
+                       prefix_hits);
+  }
   bool ContainsDownloadUrl(const std::vector<GURL>& urls,
                            std::vector<SBPrefix>* prefix_hits) override {
     bool found = ContainsUrl(safe_browsing_util::BINURL,
@@ -186,8 +196,11 @@
   void AddUrl(const GURL& url,
               int list_id,
               const std::vector<SBPrefix>& prefix_hits) {
-    badurls_[url.spec()].list_id = list_id;
-    badurls_[url.spec()].prefix_hits = prefix_hits;
+    Hits* hits_for_url = &badurls_[url.spec()];
+    hits_for_url->list_ids.push_back(list_id);
+    hits_for_url->prefix_hits.insert(hits_for_url->prefix_hits.end(),
+                                     prefix_hits.begin(),
+                                     prefix_hits.end());
   }
 
   // Fill up the database with test hash digest.
@@ -196,8 +209,9 @@
   }
 
  private:
+  // Stores |list_ids| of safe browsing lists that match some |prefix_hits|.
   struct Hits {
-    int list_id;
+    std::vector<int> list_ids;
     std::vector<SBPrefix> prefix_hits;
   };
 
@@ -214,8 +228,11 @@
       if (badurls_it == badurls_.end())
         continue;
 
-      if (badurls_it->second.list_id == list_id0 ||
-          badurls_it->second.list_id == list_id1) {
+      std::vector<int> list_ids_for_url = badurls_it->second.list_ids;
+      if (std::find(list_ids_for_url.begin(), list_ids_for_url.end(), list_id0)
+              != list_ids_for_url.end() ||
+          std::find(list_ids_for_url.begin(), list_ids_for_url.end(), list_id1)
+              != list_ids_for_url.end()) {
         prefix_hits->insert(prefix_hits->end(),
                             badurls_it->second.prefix_hits.begin(),
                             badurls_it->second.prefix_hits.end());
@@ -241,7 +258,8 @@
       bool enable_download_whitelist,
       bool enable_extension_blacklist,
       bool enable_side_effect_free_whitelist,
-      bool enable_ip_blacklist) override {
+      bool enable_ip_blacklist,
+      bool enabled_unwanted_software_list) override {
     db_ = new TestSafeBrowsingDatabase();
     return db_;
   }
@@ -281,8 +299,7 @@
   }
 
   // Prepare the GetFullHash results for the next request.
-  void SetGetFullHashResponse(const SBFullHashResult& full_hash_result) {
-    full_hashes_.clear();
+  void AddGetFullHashResponse(const SBFullHashResult& full_hash_result) {
     full_hashes_.push_back(full_hash_result);
   }
 
@@ -403,7 +420,8 @@
   }
 
   // This will setup the "url" prefix in database and prepare protocol manager
-  // to response with |full_hash| for get full hash request.
+  // to respond with |full_hash|, as well as other |full_hash|es previously set
+  // via this call, on GetFullHash requests.
   void SetupResponseForUrl(const GURL& url, const SBFullHashResult& full_hash) {
     std::vector<SBPrefix> prefix_hits;
     prefix_hits.push_back(full_hash.hash.prefix);
@@ -414,7 +432,7 @@
     db->AddUrl(url, full_hash.list_id, prefix_hits);
 
     TestProtocolManager* pm = pm_factory_.GetProtocolManager();
-    pm->SetGetFullHashResponse(full_hash);
+    pm->AddGetFullHashResponse(full_hash);
   }
 
   bool ShowingInterstitialPage() {
@@ -724,24 +742,58 @@
     content::RunMessageLoop();  // Will stop in OnCheckDownloadUrlResult.
   }
 
+  void CheckBrowseUrl(const GURL& url) {
+    BrowserThread::PostTask(
+        BrowserThread::IO, FROM_HERE,
+        base::Bind(&TestSBClient::CheckBrowseUrlOnIOThread, this, url));
+    content::RunMessageLoop();  // Will stop in OnCheckBrowseUrlResult.
+  }
+
  private:
   friend class base::RefCountedThreadSafe<TestSBClient>;
   ~TestSBClient() override {}
 
   void CheckDownloadUrlOnIOThread(const std::vector<GURL>& url_chain) {
-    safe_browsing_service_->database_manager()->
-        CheckDownloadUrl(url_chain, this);
+    bool synchronous_safe_signal =
+        safe_browsing_service_->database_manager()->CheckDownloadUrl(url_chain,
+                                                                     this);
+    if (synchronous_safe_signal) {
+      threat_type_ = SB_THREAT_TYPE_SAFE;
+      BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
+                              base::Bind(&TestSBClient::CheckDone, this));
+    }
+  }
+
+  void CheckBrowseUrlOnIOThread(const GURL& url) {
+    // The async CheckDone() hook will not be called when we have a synchronous
+    // safe signal, handle it right away.
+    bool synchronous_safe_signal =
+        safe_browsing_service_->database_manager()->CheckBrowseUrl(url, this);
+    if (synchronous_safe_signal) {
+      threat_type_ = SB_THREAT_TYPE_SAFE;
+      BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
+                              base::Bind(&TestSBClient::CheckDone, this));
+    }
   }
 
   // Called when the result of checking a download URL is known.
-  void OnCheckDownloadUrlResult(const std::vector<GURL>& url_chain,
+  void OnCheckDownloadUrlResult(const std::vector<GURL>& /* url_chain */,
                                 SBThreatType threat_type) override {
     threat_type_ = threat_type;
     BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
-                            base::Bind(&TestSBClient::DownloadCheckDone, this));
+                            base::Bind(&TestSBClient::CheckDone, this));
   }
 
-  void DownloadCheckDone() {
+  // Called when the result of checking a browse URL is known.
+  void OnCheckBrowseUrlResult(const GURL& /* url */,
+                              SBThreatType threat_type,
+                              const std::string& /* metadata */) override {
+    threat_type_ = threat_type;
+    BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
+                            base::Bind(&TestSBClient::CheckDone, this));
+  }
+
+  void CheckDone() {
     base::MessageLoopForUI::current()->Quit();
   }
 
@@ -776,6 +828,91 @@
   EXPECT_EQ(SB_THREAT_TYPE_BINARY_MALWARE_URL, client->GetThreatType());
 }
 
+IN_PROC_BROWSER_TEST_F(SafeBrowsingServiceTest, CheckUnwantedSoftwareUrl) {
+  const GURL bad_url = test_server()->GetURL(kMalwareFile);
+  {
+    scoped_refptr<TestSBClient> client(new TestSBClient);
+
+    // Since bad_url is not in database, it is considered to be
+    // safe.
+    client->CheckBrowseUrl(bad_url);
+    EXPECT_EQ(SB_THREAT_TYPE_SAFE, client->GetThreatType());
+
+    SBFullHashResult full_hash_result;
+    GenUrlFullhashResult(
+        bad_url, safe_browsing_util::UNWANTEDURL, &full_hash_result);
+    SetupResponseForUrl(bad_url, full_hash_result);
+
+    // Now, the bad_url is not safe since it is added to download
+    // database.
+    client->CheckBrowseUrl(bad_url);
+    EXPECT_EQ(SB_THREAT_TYPE_URL_UNWANTED, client->GetThreatType());
+  }
+
+  // The unwantedness should survive across multiple clients.
+  {
+    scoped_refptr<TestSBClient> client(new TestSBClient);
+    client->CheckBrowseUrl(bad_url);
+    EXPECT_EQ(SB_THREAT_TYPE_URL_UNWANTED, client->GetThreatType());
+  }
+
+  // An unwanted URL also marked as malware should be flagged as malware.
+  {
+    scoped_refptr<TestSBClient> client(new TestSBClient);
+
+    SBFullHashResult full_hash_result;
+    GenUrlFullhashResult(
+        bad_url, safe_browsing_util::MALWARE, &full_hash_result);
+    SetupResponseForUrl(bad_url, full_hash_result);
+
+    client->CheckBrowseUrl(bad_url);
+    EXPECT_EQ(SB_THREAT_TYPE_URL_MALWARE, client->GetThreatType());
+  }
+}
+
+IN_PROC_BROWSER_TEST_F(SafeBrowsingServiceTest, CheckBrowseUrl) {
+  const GURL bad_url = test_server()->GetURL(kMalwareFile);
+  {
+    scoped_refptr<TestSBClient> client(new TestSBClient);
+
+    // Since bad_url is not in database, it is considered to be
+    // safe.
+    client->CheckBrowseUrl(bad_url);
+    EXPECT_EQ(SB_THREAT_TYPE_SAFE, client->GetThreatType());
+
+    SBFullHashResult full_hash_result;
+    GenUrlFullhashResult(
+        bad_url, safe_browsing_util::MALWARE, &full_hash_result);
+    SetupResponseForUrl(bad_url, full_hash_result);
+
+    // Now, the bad_url is not safe since it is added to download
+    // database.
+    client->CheckBrowseUrl(bad_url);
+    EXPECT_EQ(SB_THREAT_TYPE_URL_MALWARE, client->GetThreatType());
+  }
+
+  // The unwantedness should survive across multiple clients.
+  {
+    scoped_refptr<TestSBClient> client(new TestSBClient);
+    client->CheckBrowseUrl(bad_url);
+    EXPECT_EQ(SB_THREAT_TYPE_URL_MALWARE, client->GetThreatType());
+  }
+
+  // Adding the unwanted state to an existing malware URL should have no impact
+  // (i.e. a malware hit should still prevail).
+  {
+    scoped_refptr<TestSBClient> client(new TestSBClient);
+
+    SBFullHashResult full_hash_result;
+    GenUrlFullhashResult(
+        bad_url, safe_browsing_util::UNWANTEDURL, &full_hash_result);
+    SetupResponseForUrl(bad_url, full_hash_result);
+
+    client->CheckBrowseUrl(bad_url);
+    EXPECT_EQ(SB_THREAT_TYPE_URL_MALWARE, client->GetThreatType());
+  }
+}
+
 IN_PROC_BROWSER_TEST_F(SafeBrowsingServiceTest, CheckDownloadUrlRedirects) {
   GURL original_url = test_server()->GetURL(kEmptyPage);
   GURL badbin_url = test_server()->GetURL(kMalwareFile);
diff --git a/chrome/browser/safe_browsing/safe_browsing_store_file.cc b/chrome/browser/safe_browsing/safe_browsing_store_file.cc
index ff6448e..298d42d 100644
--- a/chrome/browser/safe_browsing/safe_browsing_store_file.cc
+++ b/chrome/browser/safe_browsing/safe_browsing_store_file.cc
@@ -618,10 +618,8 @@
   return true;
 }
 
-void SafeBrowsingStoreFile::Init(
-    const base::FilePath& filename,
-    const base::Closure& corruption_callback
-) {
+void SafeBrowsingStoreFile::Init(const base::FilePath& filename,
+                                 const base::Closure& corruption_callback) {
   filename_ = filename;
   corruption_callback_ = corruption_callback;
 }
diff --git a/chrome/browser/safe_browsing/safe_browsing_util.cc b/chrome/browser/safe_browsing/safe_browsing_util.cc
index bb2edf9..b8f86d2 100644
--- a/chrome/browser/safe_browsing/safe_browsing_util.cc
+++ b/chrome/browser/safe_browsing/safe_browsing_util.cc
@@ -189,16 +189,18 @@
 const char kExtensionBlacklist[] = "goog-badcrxids-digestvar";
 const char kSideEffectFreeWhitelist[] = "goog-sideeffectfree-shavar";
 const char kIPBlacklist[] = "goog-badip-digest256";
+const char kUnwantedUrlList[] = "goog-unwanted-shavar";
 
-const char* kAllLists[8] = {
-  kMalwareList,
-  kPhishingList,
-  kBinUrlList,
-  kCsdWhiteList,
-  kDownloadWhiteList,
-  kExtensionBlacklist,
-  kSideEffectFreeWhitelist,
-  kIPBlacklist,
+const char* kAllLists[9] = {
+    kMalwareList,
+    kPhishingList,
+    kBinUrlList,
+    kCsdWhiteList,
+    kDownloadWhiteList,
+    kExtensionBlacklist,
+    kSideEffectFreeWhitelist,
+    kIPBlacklist,
+    kUnwantedUrlList,
 };
 
 ListType GetListId(const base::StringPiece& name) {
@@ -219,6 +221,8 @@
     id = SIDEEFFECTFREEWHITELIST;
   } else if (name == safe_browsing_util::kIPBlacklist) {
     id = IPBLACKLIST;
+  } else if (name == safe_browsing_util::kUnwantedUrlList) {
+    id = UNWANTEDURL;
   } else {
     id = INVALID;
   }
@@ -251,6 +255,9 @@
     case IPBLACKLIST:
       *list = safe_browsing_util::kIPBlacklist;
       break;
+    case UNWANTEDURL:
+      *list = safe_browsing_util::kUnwantedUrlList;
+      break;
     default:
       return false;
   }
diff --git a/chrome/browser/safe_browsing/safe_browsing_util.h b/chrome/browser/safe_browsing/safe_browsing_util.h
index b6ee9d0..de877b0 100644
--- a/chrome/browser/safe_browsing/safe_browsing_util.h
+++ b/chrome/browser/safe_browsing/safe_browsing_util.h
@@ -133,8 +133,8 @@
   // The URL hosts malware.
   SB_THREAT_TYPE_URL_MALWARE,
 
-  // The URL hosts harmful programs.
-  SB_THREAT_TYPE_URL_HARMFUL,
+  // The URL hosts unwanted programs.
+  SB_THREAT_TYPE_URL_UNWANTED,
 
   // The download URL is malware.
   SB_THREAT_TYPE_BINARY_MALWARE_URL,
@@ -170,9 +170,11 @@
 extern const char kSideEffectFreeWhitelist[];
 // SafeBrowsing csd malware IP blacklist name.
 extern const char kIPBlacklist[];
+// SafeBrowsing unwanted URL list.
+extern const char kUnwantedUrlList[];
 
 // This array must contain all Safe Browsing lists.
-extern const char* kAllLists[8];
+extern const char* kAllLists[9];
 
 enum ListType {
   INVALID = -1,
@@ -192,6 +194,8 @@
   // See above comment. Leave 11 available.
   IPBLACKLIST = 12,
   // See above comment.  Leave 13 available.
+  UNWANTEDURL = 14,
+  // See above comment.  Leave 15 available.
 };
 
 // Maps a list name to ListType.
diff --git a/chrome/browser/services/gcm/gcm_account_tracker.cc b/chrome/browser/services/gcm/gcm_account_tracker.cc
index 0521688..a2cdba0 100644
--- a/chrome/browser/services/gcm/gcm_account_tracker.cc
+++ b/chrome/browser/services/gcm/gcm_account_tracker.cc
@@ -15,18 +15,11 @@
 namespace gcm {
 
 namespace {
-
-// Scopes needed by the OAuth2 access tokens.
 const char kGCMGroupServerScope[] = "https://www.googleapis.com/auth/gcm";
 const char kGCMCheckinServerScope[] =
     "https://www.googleapis.com/auth/android_checkin";
-// Name of the GCM account tracker for the OAuth2TokenService.
 const char kGCMAccountTrackerName[] = "gcm_account_tracker";
-// Minimum token validity when sending to GCM groups server.
 const int64 kMinimumTokenValidityMs = 500;
-// Token reporting interval, when no account changes are detected.
-const int64 kTokenReportingIntervalMs = 12 * 60 * 60 * 1000;  // 12 hours in ms.
-
 }  // namespace
 
 GCMAccountTracker::AccountInfo::AccountInfo(const std::string& email,
@@ -43,8 +36,7 @@
     : OAuth2TokenService::Consumer(kGCMAccountTrackerName),
       account_tracker_(account_tracker.release()),
       driver_(driver),
-      shutdown_called_(false),
-      reporting_weak_ptr_factory_(this) {
+      shutdown_called_(false) {
 }
 
 GCMAccountTracker::~GCMAccountTracker() {
@@ -64,6 +56,11 @@
   driver_->AddConnectionObserver(this);
 
   std::vector<gaia::AccountIds> accounts = account_tracker_->GetAccounts();
+  if (accounts.empty()) {
+    CompleteCollectingTokens();
+    return;
+  }
+
   for (std::vector<gaia::AccountIds>::const_iterator iter = accounts.begin();
        iter != accounts.end();
        ++iter) {
@@ -73,22 +70,7 @@
     }
   }
 
-  if (IsTokenReportingRequired())
-    ReportTokens();
-  else
-    ScheduleReportTokens();
-}
-
-void GCMAccountTracker::ScheduleReportTokens() {
-  DVLOG(1) << "Deferring the token reporting for: "
-           << GetTimeToNextTokenReporting().InSeconds() << " seconds.";
-
-  reporting_weak_ptr_factory_.InvalidateWeakPtrs();
-  base::MessageLoop::current()->PostDelayedTask(
-      FROM_HERE,
-      base::Bind(&GCMAccountTracker::ReportTokens,
-                 reporting_weak_ptr_factory_.GetWeakPtr()),
-      GetTimeToNextTokenReporting());
+  GetAllNeededTokens();
 }
 
 void GCMAccountTracker::OnAccountAdded(const gaia::AccountIds& ids) {
@@ -133,7 +115,7 @@
   }
 
   DeleteTokenRequest(request);
-  ReportTokens();
+  CompleteCollectingTokens();
 }
 
 void GCMAccountTracker::OnGetTokenFailure(
@@ -155,22 +137,21 @@
   }
 
   DeleteTokenRequest(request);
-  ReportTokens();
+  CompleteCollectingTokens();
 }
 
 void GCMAccountTracker::OnConnected(const net::IPEndPoint& ip_endpoint) {
-  if (IsTokenReportingRequired())
-    ReportTokens();
+  if (SanitizeTokens())
+    GetAllNeededTokens();
 }
 
 void GCMAccountTracker::OnDisconnected() {
   // We are disconnected, so no point in trying to work with tokens.
 }
 
-void GCMAccountTracker::ReportTokens() {
-  SanitizeTokens();
+void GCMAccountTracker::CompleteCollectingTokens() {
   // Make sure all tokens are valid.
-  if (IsTokenFetchingRequired()) {
+  if (SanitizeTokens()) {
     GetAllNeededTokens();
     return;
   }
@@ -217,14 +198,13 @@
   if (!account_tokens.empty() || account_removed) {
     DVLOG(1) << "Reporting the tokens to driver: " << account_tokens.size();
     driver_->SetAccountTokens(account_tokens);
-    driver_->SetLastTokenFetchTime(base::Time::Now());
-    ScheduleReportTokens();
   } else {
     DVLOG(1) << "No tokens and nothing removed. Skipping callback.";
   }
 }
 
-void GCMAccountTracker::SanitizeTokens() {
+bool GCMAccountTracker::SanitizeTokens() {
+  bool tokens_needed = false;
   for (AccountInfos::iterator iter = account_infos_.begin();
        iter != account_infos_.end();
        ++iter) {
@@ -236,43 +216,12 @@
       iter->second.state = TOKEN_NEEDED;
       iter->second.expiration_time = base::Time();
     }
-  }
-}
 
-bool GCMAccountTracker::IsTokenReportingRequired() const {
-  if (GetTimeToNextTokenReporting() == base::TimeDelta())
-    return true;
-
-  bool reporting_required = false;
-  for (AccountInfos::const_iterator iter = account_infos_.begin();
-       iter != account_infos_.end();
-       ++iter) {
-    if (iter->second.state == ACCOUNT_REMOVED)
-      reporting_required = true;
-  }
-
-  return reporting_required;
-}
-
-bool GCMAccountTracker::IsTokenFetchingRequired() const {
-  bool token_needed = false;
-  for (AccountInfos::const_iterator iter = account_infos_.begin();
-       iter != account_infos_.end();
-       ++iter) {
     if (iter->second.state == TOKEN_NEEDED)
-      token_needed = true;
+      tokens_needed = true;
   }
 
-  return token_needed;
-}
-
-base::TimeDelta GCMAccountTracker::GetTimeToNextTokenReporting() const {
-  base::TimeDelta time_till_next_reporting =
-      driver_->GetLastTokenFetchTime() +
-      base::TimeDelta::FromMilliseconds(kTokenReportingIntervalMs) -
-      base::Time::Now();
-  return time_till_next_reporting < base::TimeDelta() ?
-             base::TimeDelta() : time_till_next_reporting;
+  return tokens_needed;
 }
 
 void GCMAccountTracker::DeleteTokenRequest(
@@ -286,9 +235,6 @@
 void GCMAccountTracker::GetAllNeededTokens() {
   // Only start fetching tokens if driver is running, they have a limited
   // validity time and GCM connection is a good indication of network running.
-  // If the GetAllNeededTokens was called as part of periodic schedule, it may
-  // not have network. In that case the next network change will trigger token
-  // fetching.
   if (!driver_->IsConnected())
     return;
 
@@ -336,7 +282,7 @@
 
   iter->second.access_token.clear();
   iter->second.state = ACCOUNT_REMOVED;
-  ReportTokens();
+  CompleteCollectingTokens();
 }
 
 OAuth2TokenService* GCMAccountTracker::GetTokenService() {
diff --git a/chrome/browser/services/gcm/gcm_account_tracker.h b/chrome/browser/services/gcm/gcm_account_tracker.h
index 39f357e..0b1c5e8 100644
--- a/chrome/browser/services/gcm/gcm_account_tracker.h
+++ b/chrome/browser/services/gcm/gcm_account_tracker.h
@@ -14,21 +14,12 @@
 #include "google_apis/gaia/account_tracker.h"
 #include "google_apis/gaia/oauth2_token_service.h"
 
-namespace base {
-class Time;
-}
-
 namespace gcm {
 
 class GCMDriver;
 
 // Class for reporting back which accounts are signed into. It is only meant to
 // be used when the user is signed into sync.
-//
-// This class makes a check for tokens periodically, to make sure the user is
-// still logged into the profile, so that in the case that the user is not, we
-// can immediately report that to the GCM and stop messages addressed to that
-// user from ever reaching Chrome.
 class GCMAccountTracker : public gaia::AccountTracker::Observer,
                           public OAuth2TokenService::Consumer,
                           public GCMConnectionObserver {
@@ -85,8 +76,6 @@
   }
 
  private:
-  friend class GCMAccountTrackerTest;
-
   // Maps account keys to account states. Keyed by account_ids as used by
   // OAuth2TokenService.
   typedef std::map<std::string, AccountInfo> AccountInfos;
@@ -108,22 +97,13 @@
   void OnConnected(const net::IPEndPoint& ip_endpoint) override;
   void OnDisconnected() override;
 
-  // Schedules token reporting.
-  void ScheduleReportTokens();
   // Report the list of accounts with OAuth2 tokens back using the |callback_|
   // function. If there are token requests in progress, do nothing.
-  void ReportTokens();
+  void CompleteCollectingTokens();
   // Verify that all of the tokens are ready to be passed down to the GCM
   // Driver, e.g. none of them has expired or is missing. Returns true if not
   // all tokens are valid and a fetching yet more tokens is required.
-  void SanitizeTokens();
-  // Indicates whether token reporting is required, either because it is due, or
-  // some of the accounts were removed.
-  bool IsTokenReportingRequired() const;
-  // Indicates whether there are tokens that still need fetching.
-  bool IsTokenFetchingRequired() const;
-  // Gets the time until next token reporting.
-  base::TimeDelta GetTimeToNextTokenReporting() const;
+  bool SanitizeTokens();
   // Deletes a token request. Should be called from OnGetTokenSuccess(..) or
   // OnGetTokenFailure(..).
   void DeleteTokenRequest(const OAuth2TokenService::Request* request);
@@ -153,10 +133,6 @@
 
   ScopedVector<OAuth2TokenService::Request> pending_token_requests_;
 
-  // Creates weak pointers used to postpone reporting tokens. See
-  // ScheduleReportTokens.
-  base::WeakPtrFactory<GCMAccountTracker> reporting_weak_ptr_factory_;
-
   DISALLOW_COPY_AND_ASSIGN(GCMAccountTracker);
 };
 
diff --git a/chrome/browser/services/gcm/gcm_account_tracker_unittest.cc b/chrome/browser/services/gcm/gcm_account_tracker_unittest.cc
index eb8030a..2211d76 100644
--- a/chrome/browser/services/gcm/gcm_account_tracker_unittest.cc
+++ b/chrome/browser/services/gcm/gcm_account_tracker_unittest.cc
@@ -8,6 +8,8 @@
 #include <string>
 
 #include "base/memory/scoped_ptr.h"
+#include "base/message_loop/message_loop.h"
+#include "base/run_loop.h"
 #include "components/gcm_driver/fake_gcm_driver.h"
 #include "google_apis/gaia/fake_identity_provider.h"
 #include "google_apis/gaia/fake_oauth2_token_service.h"
@@ -74,8 +76,6 @@
   void AddConnectionObserver(GCMConnectionObserver* observer) override;
   void RemoveConnectionObserver(GCMConnectionObserver* observer) override;
   bool IsConnected() const override { return connected_; }
-  base::Time GetLastTokenFetchTime() override;
-  void SetLastTokenFetchTime(const base::Time& time) override;
 
   // Test results and helpers.
   void SetConnected(bool connected);
@@ -98,7 +98,6 @@
   GCMConnectionObserver* last_connection_observer_;
   GCMConnectionObserver* removed_connection_observer_;
   net::IPEndPoint ip_endpoint_;
-  base::Time last_token_fetch_time_;
 
   DISALLOW_COPY_AND_ASSIGN(CustomFakeGCMDriver);
 };
@@ -142,15 +141,6 @@
   removed_connection_observer_ = NULL;
 }
 
-
-base::Time CustomFakeGCMDriver::GetLastTokenFetchTime() {
-  return last_token_fetch_time_;
-}
-
-void CustomFakeGCMDriver::SetLastTokenFetchTime(const base::Time& time) {
-  last_token_fetch_time_ = time;
-}
-
 }  // namespace
 
 class GCMAccountTrackerTest : public testing::Test {
@@ -175,11 +165,6 @@
   GCMAccountTracker* tracker() { return tracker_.get(); }
   CustomFakeGCMDriver* driver() { return &driver_; }
 
-  // Accessors to private methods of account tracker.
-  bool IsFetchingRequired() const;
-  bool IsTokenReportingRequired() const;
-  base::TimeDelta GetTimeToNextTokenReporting() const;
-
  private:
   CustomFakeGCMDriver driver_;
 
@@ -252,18 +237,6 @@
       GoogleServiceAuthError(GoogleServiceAuthError::SERVICE_UNAVAILABLE));
 }
 
-bool GCMAccountTrackerTest::IsFetchingRequired() const {
-  return tracker_->IsTokenFetchingRequired();
-}
-
-bool GCMAccountTrackerTest::IsTokenReportingRequired() const {
-  return tracker_->IsTokenReportingRequired();
-}
-
-base::TimeDelta GCMAccountTrackerTest::GetTimeToNextTokenReporting() const {
-  return tracker_->GetTimeToNextTokenReporting();
-}
-
 TEST_F(GCMAccountTrackerTest, NoAccounts) {
   EXPECT_FALSE(driver()->update_accounts_called());
   tracker()->Start();
@@ -430,7 +403,7 @@
   EXPECT_EQ(1UL, tracker()->get_pending_token_request_count());
 }
 
-TEST_F(GCMAccountTrackerTest, InvalidateExpiredTokens) {
+TEST_F(GCMAccountTrackerTest, IvalidateExpiredTokens) {
   StartAccountSignIn(kAccountId1);
   StartAccountSignIn(kAccountId2);
   tracker()->Start();
@@ -448,63 +421,6 @@
   EXPECT_EQ(1UL, tracker()->get_pending_token_request_count());
 }
 
-// Testing for whether there are still more tokens to be fetched. Typically the
-// need for token fetching triggers immediate request, unless there is no
-// connection, that is why connection is set on and off in this test.
-TEST_F(GCMAccountTrackerTest, IsTokenFetchingRequired) {
-  tracker()->Start();
-  driver()->SetConnected(false);
-  EXPECT_FALSE(IsFetchingRequired());
-  StartAccountSignIn(kAccountId1);
-  FinishAccountSignIn(kAccountId1);
-  EXPECT_TRUE(IsFetchingRequired());
-
-  driver()->SetConnected(true);
-  EXPECT_FALSE(IsFetchingRequired());  // Indicates that fetching has started.
-  IssueAccessToken(kAccountId1);
-  EXPECT_FALSE(IsFetchingRequired());
-
-  driver()->SetConnected(false);
-  StartAccountSignIn(kAccountId2);
-  FinishAccountSignIn(kAccountId2);
-  EXPECT_TRUE(IsFetchingRequired());
-
-  IssueExpiredAccessToken(kAccountId2);
-  // Make sure that if the token was expired it is still needed.
-  EXPECT_TRUE(IsFetchingRequired());
-}
-
-// Tests what is the expected time to the next token fetching.
-TEST_F(GCMAccountTrackerTest, GetTimeToNextTokenReporting) {
-  tracker()->Start();
-  // At this point the last token fetch time is never.
-  EXPECT_EQ(base::TimeDelta(), GetTimeToNextTokenReporting());
-
-  driver()->SetLastTokenFetchTime(base::Time::Now());
-  EXPECT_TRUE(GetTimeToNextTokenReporting() <=
-                  base::TimeDelta::FromSeconds(12 * 60 * 60));
-}
-
-// Tests conditions when token reporting is required.
-TEST_F(GCMAccountTrackerTest, IsTokenReportingRequired) {
-  tracker()->Start();
-  // Required because it is overdue.
-  EXPECT_TRUE(IsTokenReportingRequired());
-
-  // Not required because it just happened.
-  driver()->SetLastTokenFetchTime(base::Time::Now());
-  EXPECT_FALSE(IsTokenReportingRequired());
-
-  SignInAccount(kAccountId1);
-  IssueAccessToken(kAccountId1);
-  driver()->ResetResults();
-  // Reporting was triggered, which means testing for required will give false,
-  // but we have the update call.
-  SignOutAccount(kAccountId1);
-  EXPECT_TRUE(driver()->update_accounts_called());
-  EXPECT_FALSE(IsTokenReportingRequired());
-}
-
 // TODO(fgorski): Add test for adding account after removal >> make sure it does
 // not mark removal.
 
diff --git a/chrome/browser/signin/easy_unlock_screenlock_state_handler.cc b/chrome/browser/signin/easy_unlock_screenlock_state_handler.cc
index 656e88d..cc0ff76 100644
--- a/chrome/browser/signin/easy_unlock_screenlock_state_handler.cc
+++ b/chrome/browser/signin/easy_unlock_screenlock_state_handler.cc
@@ -69,6 +69,7 @@
          state == EasyUnlockScreenlockStateHandler::STATE_PHONE_UNLOCKABLE ||
          state == EasyUnlockScreenlockStateHandler::STATE_NO_BLUETOOTH ||
          state == EasyUnlockScreenlockStateHandler::STATE_PHONE_UNSUPPORTED ||
+         state == EasyUnlockScreenlockStateHandler::STATE_RSSI_TOO_LOW ||
          state == EasyUnlockScreenlockStateHandler::STATE_TX_POWER_TOO_HIGH;
 }
 
@@ -211,8 +212,13 @@
   if (!screenlock_bridge_->IsLocked())
     return;
 
-  if (screenlock_bridge_->lock_handler()->GetAuthType(user_email_) !=
-          ScreenlockBridge::LockHandler::OFFLINE_PASSWORD) {
+  // Do not override online signin.
+  const ScreenlockBridge::LockHandler::AuthType existing_auth_type =
+      screenlock_bridge_->lock_handler()->GetAuthType(user_email_);
+  if (existing_auth_type == ScreenlockBridge::LockHandler::ONLINE_SIGN_IN)
+    return;
+
+  if (existing_auth_type != ScreenlockBridge::LockHandler::OFFLINE_PASSWORD) {
     screenlock_bridge_->lock_handler()->SetAuthType(
         user_email_,
         ScreenlockBridge::LockHandler::OFFLINE_PASSWORD,
@@ -231,6 +237,10 @@
   ScreenlockBridge::UserPodCustomIconOptions icon_options;
   if (hardlock_state_ == LOGIN_FAILED) {
     icon_options.SetIcon(ScreenlockBridge::USER_POD_CUSTOM_ICON_LOCKED);
+  } else if (hardlock_state_ == PAIRING_CHANGED ||
+             hardlock_state_ == PAIRING_ADDED) {
+    icon_options.SetIcon(
+        ScreenlockBridge::USER_POD_CUSTOM_ICON_LOCKED_TO_BE_ACTIVATED);
   } else {
     icon_options.SetIcon(ScreenlockBridge::USER_POD_CUSTOM_ICON_HARDLOCKED);
   }
@@ -300,17 +310,22 @@
   if (!is_trial_run_ && hardlock_state_ != NO_HARDLOCK)
     return;
 
+  // Do not override online signin.
+  const ScreenlockBridge::LockHandler::AuthType existing_auth_type =
+      screenlock_bridge_->lock_handler()->GetAuthType(user_email_);
+  if (existing_auth_type == ScreenlockBridge::LockHandler::ONLINE_SIGN_IN)
+    return;
+
   if (state_ == STATE_AUTHENTICATED) {
-    if (screenlock_bridge_->lock_handler()->GetAuthType(user_email_) !=
-            ScreenlockBridge::LockHandler::USER_CLICK) {
+    if (existing_auth_type != ScreenlockBridge::LockHandler::USER_CLICK) {
       screenlock_bridge_->lock_handler()->SetAuthType(
           user_email_,
           ScreenlockBridge::LockHandler::USER_CLICK,
           l10n_util::GetStringUTF16(
               IDS_EASY_UNLOCK_SCREENLOCK_USER_POD_AUTH_VALUE));
     }
-  } else if (screenlock_bridge_->lock_handler()->GetAuthType(user_email_) !=
-                 ScreenlockBridge::LockHandler::OFFLINE_PASSWORD) {
+  } else if (existing_auth_type !=
+             ScreenlockBridge::LockHandler::OFFLINE_PASSWORD) {
     screenlock_bridge_->lock_handler()->SetAuthType(
         user_email_,
         ScreenlockBridge::LockHandler::OFFLINE_PASSWORD,
diff --git a/chrome/browser/signin/easy_unlock_screenlock_state_handler_unittest.cc b/chrome/browser/signin/easy_unlock_screenlock_state_handler_unittest.cc
index 4c0e89b..0b020f9 100644
--- a/chrome/browser/signin/easy_unlock_screenlock_state_handler_unittest.cc
+++ b/chrome/browser/signin/easy_unlock_screenlock_state_handler_unittest.cc
@@ -20,6 +20,7 @@
 // Icons used by EasyUnlockScreenlockStateHandler. The icon id values are the
 // same as the ones set by ScreenlockBridge.
 const char kLockedIconId[] = "locked";
+const char kLockedToBeActivatedIconId[] = "locked-to-be-activated";
 const char kUnlockedIconId[] = "unlocked";
 const char kSpinnerIconId[] = "spinner";
 const char kHardlockedIconId[] = "hardlocked";
@@ -565,14 +566,14 @@
 
   EXPECT_EQ(1u, lock_handler_->GetAndResetShowIconCount());
   ASSERT_TRUE(lock_handler_->HasCustomIcon());
-  EXPECT_EQ(kHardlockedIconId, lock_handler_->GetCustomIconId());
+  EXPECT_EQ(kLockedToBeActivatedIconId, lock_handler_->GetCustomIconId());
 
   state_handler_->ChangeState(
       EasyUnlockScreenlockStateHandler::STATE_AUTHENTICATED);
 
   EXPECT_EQ(0u, lock_handler_->GetAndResetShowIconCount());
   ASSERT_TRUE(lock_handler_->HasCustomIcon());
-  EXPECT_EQ(kHardlockedIconId, lock_handler_->GetCustomIconId());
+  EXPECT_EQ(kLockedToBeActivatedIconId, lock_handler_->GetCustomIconId());
 }
 
 TEST_F(EasyUnlockScreenlockStateHandlerTest,
@@ -744,4 +745,44 @@
             lock_handler_->GetAuthType(user_email_));
 }
 
+TEST_F(EasyUnlockScreenlockStateHandlerTest, NoOverrideOnlineSignin) {
+  lock_handler_->SetAuthType(user_email_,
+                             ScreenlockBridge::LockHandler::ONLINE_SIGN_IN,
+                             base::string16());
+
+  std::vector<EasyUnlockScreenlockStateHandler::State> states;
+  states.push_back(EasyUnlockScreenlockStateHandler::STATE_NO_BLUETOOTH);
+  states.push_back(EasyUnlockScreenlockStateHandler::STATE_NO_PHONE);
+  states.push_back(EasyUnlockScreenlockStateHandler::STATE_PHONE_UNSUPPORTED);
+  states.push_back(EasyUnlockScreenlockStateHandler::STATE_PHONE_UNLOCKABLE);
+  states.push_back(
+      EasyUnlockScreenlockStateHandler::STATE_PHONE_NOT_AUTHENTICATED);
+  states.push_back(EasyUnlockScreenlockStateHandler::STATE_PHONE_LOCKED);
+  states.push_back(EasyUnlockScreenlockStateHandler::STATE_PHONE_UNLOCKABLE);
+  states.push_back(EasyUnlockScreenlockStateHandler::STATE_PHONE_UNSUPPORTED);
+  states.push_back(EasyUnlockScreenlockStateHandler::STATE_RSSI_TOO_LOW);
+  states.push_back(EasyUnlockScreenlockStateHandler::STATE_TX_POWER_TOO_HIGH);
+  states.push_back(EasyUnlockScreenlockStateHandler::STATE_AUTHENTICATED);
+
+  for (size_t i = 0; i < states.size(); ++i) {
+    state_handler_->ChangeState(states[i]);
+    EXPECT_EQ(ScreenlockBridge::LockHandler::ONLINE_SIGN_IN,
+              lock_handler_->GetAuthType(user_email_));
+  }
+
+  std::vector<EasyUnlockScreenlockStateHandler::HardlockState> hardlock_states;
+  hardlock_states.push_back(EasyUnlockScreenlockStateHandler::NO_HARDLOCK);
+  hardlock_states.push_back(EasyUnlockScreenlockStateHandler::USER_HARDLOCK);
+  hardlock_states.push_back(EasyUnlockScreenlockStateHandler::PAIRING_CHANGED);
+  hardlock_states.push_back(EasyUnlockScreenlockStateHandler::PAIRING_ADDED);
+  hardlock_states.push_back(EasyUnlockScreenlockStateHandler::NO_PAIRING);
+  hardlock_states.push_back(EasyUnlockScreenlockStateHandler::LOGIN_FAILED);
+
+  for (size_t i = 0; i < hardlock_states.size(); ++i) {
+    state_handler_->SetHardlockState(hardlock_states[i]);
+    EXPECT_EQ(ScreenlockBridge::LockHandler::ONLINE_SIGN_IN,
+              lock_handler_->GetAuthType(user_email_));
+  }
+}
+
 }  // namespace
diff --git a/chrome/browser/signin/easy_unlock_service.cc b/chrome/browser/signin/easy_unlock_service.cc
index 794941e..9281513 100644
--- a/chrome/browser/signin/easy_unlock_service.cc
+++ b/chrome/browser/signin/easy_unlock_service.cc
@@ -301,13 +301,14 @@
 }
 
 void EasyUnlockService::ShowInitialUserState() {
+  if (!GetScreenlockStateHandler())
+    return;
+
   EasyUnlockScreenlockStateHandler::HardlockState state;
   bool has_persisted_state = GetPersistedHardlockState(&state);
   if (!has_persisted_state)
     return;
 
-  GetScreenlockStateHandler();
-
   if (state == EasyUnlockScreenlockStateHandler::NO_HARDLOCK) {
     // Show connecting icon early when there is a persisted non hardlock state.
     UpdateScreenlockState(
diff --git a/chrome/browser/signin/screenlock_bridge.cc b/chrome/browser/signin/screenlock_bridge.cc
index b11b51e..1883814 100644
--- a/chrome/browser/signin/screenlock_bridge.cc
+++ b/chrome/browser/signin/screenlock_bridge.cc
@@ -24,6 +24,7 @@
 // account picker as user pod custom icons.
 // The id's should be kept in sync with values used by user_pod_row.js.
 const char kLockedUserPodCustomIconId[] = "locked";
+const char kLockedToBeActivatedUserPodCustomIconId[] = "locked-to-be-activated";
 const char kLockedWithProximityHintUserPodCustomIconId[] =
     "locked-with-proximity-hint";
 const char kUnlockedUserPodCustomIconId[] = "unlocked";
@@ -35,6 +36,8 @@
   switch (icon) {
     case ScreenlockBridge::USER_POD_CUSTOM_ICON_LOCKED:
       return kLockedUserPodCustomIconId;
+    case ScreenlockBridge::USER_POD_CUSTOM_ICON_LOCKED_TO_BE_ACTIVATED:
+      return kLockedToBeActivatedUserPodCustomIconId;
     case ScreenlockBridge::USER_POD_CUSTOM_ICON_LOCKED_WITH_PROXIMITY_HINT:
       return kLockedWithProximityHintUserPodCustomIconId;
     case ScreenlockBridge::USER_POD_CUSTOM_ICON_UNLOCKED:
diff --git a/chrome/browser/signin/screenlock_bridge.h b/chrome/browser/signin/screenlock_bridge.h
index bf77832..1cfba53 100644
--- a/chrome/browser/signin/screenlock_bridge.h
+++ b/chrome/browser/signin/screenlock_bridge.h
@@ -42,6 +42,7 @@
     USER_POD_CUSTOM_ICON_NONE,
     USER_POD_CUSTOM_ICON_HARDLOCKED,
     USER_POD_CUSTOM_ICON_LOCKED,
+    USER_POD_CUSTOM_ICON_LOCKED_TO_BE_ACTIVATED,
     // TODO(isherman): The "locked with proximity hint" icon is currently the
     // same as the "locked" icon. It's treated as a separate case to allow an
     // easy asset swap without changing the code, in case we decide to use a
diff --git a/chrome/browser/ssl/ssl_error_info.cc b/chrome/browser/ssl/ssl_error_info.cc
index 80aaf9b..9737bdf 100644
--- a/chrome/browser/ssl/ssl_error_info.cc
+++ b/chrome/browser/ssl/ssl_error_info.cc
@@ -145,13 +145,6 @@
       short_description = l10n_util::GetStringUTF16(
           IDS_CERT_ERROR_NAME_CONSTRAINT_VIOLATION_DESCRIPTION);
       break;
-    case CERT_VALIDITY_TOO_LONG:
-      details =
-          l10n_util::GetStringFUTF16(IDS_CERT_ERROR_VALIDITY_TOO_LONG_DETAILS,
-                                     UTF8ToUTF16(request_url.host()));
-      short_description = l10n_util::GetStringUTF16(
-          IDS_CERT_ERROR_VALIDITY_TOO_LONG_DESCRIPTION);
-      break;
     case CERT_PINNED_KEY_MISSING:
       details = l10n_util::GetStringUTF16(
           IDS_ERRORPAGES_SUMMARY_PINNING_FAILURE);
@@ -198,8 +191,6 @@
       return CERT_WEAK_KEY;
     case net::ERR_CERT_NAME_CONSTRAINT_VIOLATION:
       return CERT_NAME_CONSTRAINT_VIOLATION;
-    case net::ERR_CERT_VALIDITY_TOO_LONG:
-      return CERT_VALIDITY_TOO_LONG;
     case net::ERR_SSL_WEAK_SERVER_EPHEMERAL_DH_KEY:
       return CERT_WEAK_KEY_DH;
     case net::ERR_SSL_PINNED_KEY_NOT_IN_CERT_CHAIN:
@@ -216,31 +207,29 @@
                                          const GURL& url,
                                          std::vector<SSLErrorInfo>* errors) {
   const net::CertStatus kErrorFlags[] = {
-      net::CERT_STATUS_COMMON_NAME_INVALID,
-      net::CERT_STATUS_DATE_INVALID,
-      net::CERT_STATUS_AUTHORITY_INVALID,
-      net::CERT_STATUS_NO_REVOCATION_MECHANISM,
-      net::CERT_STATUS_UNABLE_TO_CHECK_REVOCATION,
-      net::CERT_STATUS_REVOKED,
-      net::CERT_STATUS_INVALID,
-      net::CERT_STATUS_WEAK_SIGNATURE_ALGORITHM,
-      net::CERT_STATUS_WEAK_KEY,
-      net::CERT_STATUS_NAME_CONSTRAINT_VIOLATION,
-      net::CERT_STATUS_VALIDITY_TOO_LONG,
+    net::CERT_STATUS_COMMON_NAME_INVALID,
+    net::CERT_STATUS_DATE_INVALID,
+    net::CERT_STATUS_AUTHORITY_INVALID,
+    net::CERT_STATUS_NO_REVOCATION_MECHANISM,
+    net::CERT_STATUS_UNABLE_TO_CHECK_REVOCATION,
+    net::CERT_STATUS_REVOKED,
+    net::CERT_STATUS_INVALID,
+    net::CERT_STATUS_WEAK_SIGNATURE_ALGORITHM,
+    net::CERT_STATUS_WEAK_KEY,
+    net::CERT_STATUS_NAME_CONSTRAINT_VIOLATION,
   };
 
   const ErrorType kErrorTypes[] = {
-      CERT_COMMON_NAME_INVALID,
-      CERT_DATE_INVALID,
-      CERT_AUTHORITY_INVALID,
-      CERT_NO_REVOCATION_MECHANISM,
-      CERT_UNABLE_TO_CHECK_REVOCATION,
-      CERT_REVOKED,
-      CERT_INVALID,
-      CERT_WEAK_SIGNATURE_ALGORITHM,
-      CERT_WEAK_KEY,
-      CERT_NAME_CONSTRAINT_VIOLATION,
-      CERT_VALIDITY_TOO_LONG,
+    CERT_COMMON_NAME_INVALID,
+    CERT_DATE_INVALID,
+    CERT_AUTHORITY_INVALID,
+    CERT_NO_REVOCATION_MECHANISM,
+    CERT_UNABLE_TO_CHECK_REVOCATION,
+    CERT_REVOKED,
+    CERT_INVALID,
+    CERT_WEAK_SIGNATURE_ALGORITHM,
+    CERT_WEAK_KEY,
+    CERT_NAME_CONSTRAINT_VIOLATION,
   };
   DCHECK(arraysize(kErrorFlags) == arraysize(kErrorTypes));
 
@@ -254,10 +243,9 @@
             cert_id, &cert);
         DCHECK(r);
       }
-      if (errors) {
+      if (errors)
         errors->push_back(
             SSLErrorInfo::CreateError(kErrorTypes[i], cert.get(), url));
-      }
     }
   }
   return count;
diff --git a/chrome/browser/ssl/ssl_error_info.h b/chrome/browser/ssl/ssl_error_info.h
index 2980305..bcc169a 100644
--- a/chrome/browser/ssl/ssl_error_info.h
+++ b/chrome/browser/ssl/ssl_error_info.h
@@ -33,7 +33,6 @@
     CERT_WEAK_SIGNATURE_ALGORITHM,
     CERT_WEAK_KEY,
     CERT_NAME_CONSTRAINT_VIOLATION,
-    CERT_VALIDITY_TOO_LONG,
     UNKNOWN,
     CERT_WEAK_KEY_DH,
     CERT_PINNED_KEY_MISSING,
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index dcc96d7..f08a99f 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -224,13 +224,7 @@
           gypi_values.chrome_browser_ui_views_non_chromeos_sources,
           ".", "//chrome")
     }
-    if (is_mac) {
-      if (mac_views_browser) {
-        sources -= [ "cocoa/browser_window_factory_cocoa.mm" ]
-      } else {
-        sources -= [ "views/frame/browser_window_factory.cc" ]
-      }
-    } else {
+    if (!is_mac) {
       sources += rebase_path(
           gypi_values.chrome_browser_ui_views_non_mac_sources,
           ".", "//chrome")
diff --git a/chrome/browser/ui/android/tab_model/tab_model.h b/chrome/browser/ui/android/tab_model/tab_model.h
index f6678d5..0125f97 100644
--- a/chrome/browser/ui/android/tab_model/tab_model.h
+++ b/chrome/browser/ui/android/tab_model/tab_model.h
@@ -38,6 +38,7 @@
   virtual int GetTabCount() const = 0;
   virtual int GetActiveIndex() const = 0;
   virtual content::WebContents* GetWebContentsAt(int index) const = 0;
+  // This will return NULL if the tab has not yet been initialized.
   virtual TabAndroid* GetTabAt(int index) const = 0;
 
   virtual void SetActiveIndex(int index) = 0;
diff --git a/chrome/browser/ui/android/tab_model/tab_model_list.cc b/chrome/browser/ui/android/tab_model/tab_model_list.cc
index 42e24ec..04985b7 100644
--- a/chrome/browser/ui/android/tab_model/tab_model_list.cc
+++ b/chrome/browser/ui/android/tab_model/tab_model_list.cc
@@ -52,8 +52,7 @@
       i != TabModelList::end(); ++i) {
     TabModel* model = *i;
     for (int index = 0; index < model->GetTabCount(); index++) {
-      TabAndroid* tab = model->GetTabAt(index);
-      if (web_contents == tab->web_contents())
+      if (web_contents == model->GetWebContentsAt(index))
         return model;
     }
   }
diff --git a/chrome/browser/ui/android/tab_model/tab_model_list_unittest.cc b/chrome/browser/ui/android/tab_model/tab_model_list_unittest.cc
new file mode 100644
index 0000000..1fb6b4b
--- /dev/null
+++ b/chrome/browser/ui/android/tab_model/tab_model_list_unittest.cc
@@ -0,0 +1,56 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/android/tab_model/tab_model.h"
+#include "chrome/browser/ui/android/tab_model/tab_model_list.h"
+#include "chrome/test/base/chrome_render_view_host_test_harness.h"
+#include "chrome/test/base/testing_profile.h"
+#include "content/public/browser/web_contents.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace {
+class TabModelListTest : public ChromeRenderViewHostTestHarness {};
+}  // namespace
+
+class TestTabModel : public TabModel {
+ public:
+  explicit TestTabModel(Profile* profile) : TabModel(profile), tab_count_(0) {}
+
+  virtual int GetTabCount() const override { return tab_count_; }
+  virtual int GetActiveIndex() const override { return 0; }
+  virtual content::WebContents* GetWebContentsAt(int index) const override {
+    return nullptr;
+  }
+  virtual void CreateTab(content::WebContents* web_contents,
+                         int parent_tab_id) override {}
+  virtual content::WebContents* CreateNewTabForDevTools(
+      const GURL& url) override {
+    return nullptr;
+  }
+  virtual bool IsSessionRestoreInProgress() const override { return false; }
+  virtual TabAndroid* GetTabAt(int index) const override { return nullptr; }
+  virtual void SetActiveIndex(int index) override {}
+  virtual void CloseTabAt(int index) override {}
+
+  // A fake value for the current number of tabs.
+  int tab_count_;
+};
+
+// Regression test for http://crbug.com/432685.
+TEST_F(TabModelListTest, TestGetTabModelForWebContents) {
+  TestTabModel tab_model(profile());
+  TabModelList::AddTabModel(&tab_model);
+
+  scoped_ptr<content::WebContents> contents(CreateTestWebContents());
+
+  // Should not crash when there are no tabs.
+  EXPECT_EQ(NULL, TabModelList::GetTabModelForWebContents(contents.get()));
+
+  // Should not crash when there is an uninitialized tab, i.e. when
+  // TabModel::GetTabAt returns NULL.
+  tab_model.tab_count_ = 1;
+  EXPECT_EQ(NULL, TabModelList::GetTabModelForWebContents(contents.get()));
+
+  TabModelList::RemoveTabModel(&tab_model);
+}
diff --git a/chrome/browser/ui/ash/launcher/app_window_launcher_controller.cc b/chrome/browser/ui/ash/launcher/app_window_launcher_controller.cc
index 9113e3b..f07f122 100644
--- a/chrome/browser/ui/ash/launcher/app_window_launcher_controller.cc
+++ b/chrome/browser/ui/ash/launcher/app_window_launcher_controller.cc
@@ -99,7 +99,8 @@
                                app_window->app_icon().AsImageSkia());
 }
 
-void AppWindowLauncherController::OnAppWindowShown(AppWindow* app_window) {
+void AppWindowLauncherController::OnAppWindowShown(AppWindow* app_window,
+                                                   bool was_hidden) {
   aura::Window* window = app_window->GetNativeWindow();
   if (!ControlsWindow(window))
     return;
diff --git a/chrome/browser/ui/ash/launcher/app_window_launcher_controller.h b/chrome/browser/ui/ash/launcher/app_window_launcher_controller.h
index 8f2ca87..4ff452e 100644
--- a/chrome/browser/ui/ash/launcher/app_window_launcher_controller.h
+++ b/chrome/browser/ui/ash/launcher/app_window_launcher_controller.h
@@ -51,7 +51,8 @@
 
   // Overridden from AppWindowRegistry::Observer:
   void OnAppWindowIconChanged(extensions::AppWindow* app_window) override;
-  void OnAppWindowShown(extensions::AppWindow* app_window) override;
+  void OnAppWindowShown(extensions::AppWindow* app_window,
+                        bool was_hidden) override;
   void OnAppWindowHidden(extensions::AppWindow* app_window) override;
 
   // Overriden from aura::WindowObserver:
diff --git a/chrome/browser/ui/ash/launcher/multi_profile_app_window_launcher_controller.cc b/chrome/browser/ui/ash/launcher/multi_profile_app_window_launcher_controller.cc
index 95c6f41..00e8c73 100644
--- a/chrome/browser/ui/ash/launcher/multi_profile_app_window_launcher_controller.cc
+++ b/chrome/browser/ui/ash/launcher/multi_profile_app_window_launcher_controller.cc
@@ -91,7 +91,8 @@
 }
 
 void MultiProfileAppWindowLauncherController::OnAppWindowShown(
-    extensions::AppWindow* app_window) {
+    extensions::AppWindow* app_window,
+    bool was_hidden) {
   if (!ControlsWindow(app_window->GetNativeWindow()))
     return;
 
diff --git a/chrome/browser/ui/ash/launcher/multi_profile_app_window_launcher_controller.h b/chrome/browser/ui/ash/launcher/multi_profile_app_window_launcher_controller.h
index 9e30906..d998ab6 100644
--- a/chrome/browser/ui/ash/launcher/multi_profile_app_window_launcher_controller.h
+++ b/chrome/browser/ui/ash/launcher/multi_profile_app_window_launcher_controller.h
@@ -23,7 +23,8 @@
   // Overridden from AppWindowRegistry::Observer:
   void OnAppWindowAdded(extensions::AppWindow* app_window) override;
   void OnAppWindowRemoved(extensions::AppWindow* app_window) override;
-  void OnAppWindowShown(extensions::AppWindow* app_window) override;
+  void OnAppWindowShown(extensions::AppWindow* app_window,
+                        bool was_hidden) override;
   void OnAppWindowHidden(extensions::AppWindow* app_window) override;
 
  private:
diff --git a/chrome/browser/ui/cocoa/browser_window_factory_cocoa.mm b/chrome/browser/ui/cocoa/browser_window_factory.mm
similarity index 100%
rename from chrome/browser/ui/cocoa/browser_window_factory_cocoa.mm
rename to chrome/browser/ui/cocoa/browser_window_factory.mm
diff --git a/chrome/browser/ui/passwords/manage_passwords_bubble_model.cc b/chrome/browser/ui/passwords/manage_passwords_bubble_model.cc
index 1e1b433..dd59671 100644
--- a/chrome/browser/ui/passwords/manage_passwords_bubble_model.cc
+++ b/chrome/browser/ui/passwords/manage_passwords_bubble_model.cc
@@ -8,6 +8,7 @@
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_finder.h"
 #include "chrome/browser/ui/passwords/manage_passwords_ui_controller.h"
+#include "chrome/browser/ui/passwords/password_bubble_experiment.h"
 #include "chrome/grit/generated_resources.h"
 #include "components/password_manager/core/browser/password_store.h"
 #include "components/password_manager/core/common/password_manager_ui.h"
@@ -33,6 +34,15 @@
                                                    : kPasswordFieldSize);
 }
 
+void RecordExperimentStatistics(content::WebContents* web_contents,
+                                metrics_util::UIDismissalReason reason) {
+  if (!web_contents)
+    return;
+  Profile* profile =
+      Profile::FromBrowserContext(web_contents->GetBrowserContext());
+  password_bubble_experiment::RecordBubbleClosed(profile->GetPrefs(), reason);
+}
+
 }  // namespace
 
 ManagePasswordsBubbleModel::ManagePasswordsBubbleModel(
@@ -109,15 +119,20 @@
     return;
 
   metrics_util::LogUIDismissalReason(dismissal_reason_);
+  // Other use cases have been reported in the callbacks like OnSaveClicked().
+  if (dismissal_reason_ == metrics_util::NO_DIRECT_INTERACTION)
+    RecordExperimentStatistics(web_contents(), dismissal_reason_);
 }
 
 void ManagePasswordsBubbleModel::OnNopeClicked() {
   dismissal_reason_ = metrics_util::CLICKED_NOPE;
+  RecordExperimentStatistics(web_contents(), dismissal_reason_);
   state_ = password_manager::ui::PENDING_PASSWORD_STATE;
 }
 
 void ManagePasswordsBubbleModel::OnNeverForThisSiteClicked() {
   dismissal_reason_ = metrics_util::CLICKED_NEVER;
+  RecordExperimentStatistics(web_contents(), dismissal_reason_);
   ManagePasswordsUIController* manage_passwords_ui_controller =
       ManagePasswordsUIController::FromWebContents(web_contents());
   manage_passwords_ui_controller->NeverSavePassword();
@@ -134,6 +149,7 @@
 
 void ManagePasswordsBubbleModel::OnSaveClicked() {
   dismissal_reason_ = metrics_util::CLICKED_SAVE;
+  RecordExperimentStatistics(web_contents(), dismissal_reason_);
   ManagePasswordsUIController* manage_passwords_ui_controller =
       ManagePasswordsUIController::FromWebContents(web_contents());
   manage_passwords_ui_controller->SavePassword();
diff --git a/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc b/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc
index 039f589..4afd320 100644
--- a/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc
+++ b/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc
@@ -15,6 +15,7 @@
 #include "chrome/browser/ui/chrome_pages.h"
 #include "chrome/browser/ui/location_bar/location_bar.h"
 #include "chrome/browser/ui/passwords/manage_passwords_icon.h"
+#include "chrome/browser/ui/passwords/password_bubble_experiment.h"
 #include "chrome/common/url_constants.h"
 #include "components/password_manager/core/browser/password_store.h"
 #include "content/public/browser/notification_service.h"
@@ -268,6 +269,10 @@
   Browser* browser = chrome::FindBrowserWithWebContents(web_contents());
   if (!browser || browser->toolbar_model()->input_in_progress())
     return;
+  if (state_ == password_manager::ui::PENDING_PASSWORD_AND_BUBBLE_STATE &&
+      !password_bubble_experiment::ShouldShowBubble(
+          browser->profile()->GetPrefs()))
+    return;
   CommandUpdater* updater = browser->command_controller()->command_updater();
   updater->ExecuteCommand(IDC_MANAGE_PASSWORDS_FOR_PAGE);
 #endif
diff --git a/chrome/browser/ui/passwords/password_bubble_experiment.cc b/chrome/browser/ui/passwords/password_bubble_experiment.cc
new file mode 100644
index 0000000..276a038
--- /dev/null
+++ b/chrome/browser/ui/passwords/password_bubble_experiment.cc
@@ -0,0 +1,205 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/passwords/password_bubble_experiment.h"
+
+#include "base/metrics/field_trial.h"
+#include "base/prefs/pref_service.h"
+#include "base/rand_util.h"
+#include "base/strings/string_number_conversions.h"
+#include "base/time/time.h"
+#include "chrome/common/pref_names.h"
+#include "components/pref_registry/pref_registry_syncable.h"
+#include "components/variations/variations_associated_data.h"
+
+namespace password_bubble_experiment {
+namespace {
+
+bool IsNegativeEvent(password_manager::metrics_util::UIDismissalReason reason) {
+  return (reason == password_manager::metrics_util::NO_DIRECT_INTERACTION ||
+          reason == password_manager::metrics_util::CLICKED_NOPE ||
+          reason == password_manager::metrics_util::CLICKED_NEVER);
+}
+
+// "TimeSpan" experiment -----------------------------------------------------
+
+bool ExtractTimeSpanParams(base::TimeDelta* time_delta, int* nopes_limit) {
+  std::map<std::string, std::string> params;
+  bool retrieved = variations::GetVariationParams(kExperimentName, &params);
+  if (!retrieved)
+    return false;
+  int days = 0;
+  if (!base::StringToInt(params[kParamTimeSpan], &days) ||
+      !base::StringToInt(params[kParamTimeSpanNopeThreshold], nopes_limit))
+    return false;
+  *time_delta = base::TimeDelta::FromDays(days);
+  return true;
+}
+
+bool OverwriteTimeSpanPrefsIfNeeded(PrefService* prefs,
+                                    base::TimeDelta time_span) {
+  base::Time beginning = base::Time::FromInternalValue(
+      prefs->GetInt64(prefs::kPasswordBubbleTimeStamp));
+  base::Time now = base::Time::Now();
+  if (beginning + time_span < now) {
+    prefs->SetInt64(prefs::kPasswordBubbleTimeStamp, now.ToInternalValue());
+    prefs->SetInteger(prefs::kPasswordBubbleNopesCount, 0);
+    return true;
+  }
+  return false;
+}
+
+// If user dismisses the bubble >= kParamTimeSpanNopeThreshold times during
+// kParamTimeSpan days then the bubble isn't shown until the end of this time
+// span.
+bool ShouldShowBubbleTimeSpanExperiment(PrefService* prefs) {
+  base::TimeDelta time_span;
+  int nopes_limit = 0;
+  if (!ExtractTimeSpanParams(&time_span, &nopes_limit)) {
+    VLOG(2) << "Can't read parameters for "
+        << kExperimentName  << " experiment";
+    return true;
+  }
+  // Check if the new time span has started.
+  if (OverwriteTimeSpanPrefsIfNeeded(prefs, time_span))
+    return true;
+  int current_nopes = prefs->GetInteger(prefs::kPasswordBubbleNopesCount);
+  return current_nopes < nopes_limit;
+}
+
+// Increase the "Nope" counter in prefs and start a new time span if needed.
+void UpdateTimeSpanPrefs(
+    PrefService* prefs,
+    password_manager::metrics_util::UIDismissalReason reason) {
+  if (!IsNegativeEvent(reason))
+    return;
+  base::TimeDelta time_span;
+  int nopes_limit = 0;
+  if (!ExtractTimeSpanParams(&time_span, &nopes_limit)) {
+    VLOG(2) << "Can't read parameters for "
+        << kExperimentName << " experiment";
+    return;
+  }
+  OverwriteTimeSpanPrefsIfNeeded(prefs, time_span);
+  int current_nopes = prefs->GetInteger(prefs::kPasswordBubbleNopesCount);
+  prefs->SetInteger(prefs::kPasswordBubbleNopesCount, current_nopes + 1);
+}
+
+// "Probability" experiment --------------------------------------------------
+
+bool ExtractProbabilityParams(unsigned* history_length, unsigned* saves) {
+  std::map<std::string, std::string> params;
+  bool retrieved = variations::GetVariationParams(kExperimentName, &params);
+  if (!retrieved)
+    return false;
+  return base::StringToUint(params[kParamProbabilityInteractionsCount],
+                            history_length) &&
+      base::StringToUint(params[kParamProbabilityFakeSaves], saves);
+}
+
+std::vector<int> ReadInteractionHistory(PrefService* prefs) {
+  std::vector<int> interactions;
+  const base::ListValue* list =
+      prefs->GetList(prefs::kPasswordBubbleLastInteractions);
+  if (!list)
+    return interactions;
+  for (const base::Value* value : *list) {
+    int out_value;
+    if (value->GetAsInteger(&out_value))
+      interactions.push_back(out_value);
+  }
+  return interactions;
+}
+
+// We keep the history of last kParamProbabilityInteractionsCount interactions
+// with the bubble. We implicitly add kParamProbabilityFakeSaves "Save" clicks.
+// If there are x "Save" clicks among those kParamProbabilityInteractionsCount
+// then the bubble is shown with probability (x + kParamProbabilityFakeSaves)/
+// (kParamProbabilityInteractionsCount + kParamProbabilityFakeSaves).
+bool ShouldShowBubbleProbabilityExperiment(PrefService* prefs) {
+  unsigned history_length = 0, fake_saves = 0;
+  if (!ExtractProbabilityParams(&history_length, &fake_saves)) {
+    VLOG(2) << "Can't read parameters for "
+        << kExperimentName << " experiment";
+    return true;
+  }
+  std::vector<int> interactions = ReadInteractionHistory(prefs);
+  unsigned real_saves =
+      std::count(interactions.begin(), interactions.end(),
+                 password_manager::metrics_util::CLICKED_SAVE);
+  return (interactions.size() + fake_saves) * base::RandDouble() <=
+      real_saves + fake_saves;
+}
+
+void UpdateProbabilityPrefs(
+    PrefService* prefs,
+    password_manager::metrics_util::UIDismissalReason reason) {
+  if (!IsNegativeEvent(reason) &&
+      reason != password_manager::metrics_util::CLICKED_SAVE)
+    return;
+  unsigned history_length = 0, fake_saves = 0;
+  if (!ExtractProbabilityParams(&history_length, &fake_saves)) {
+    VLOG(2) << "Can't read parameters for "
+        << kExperimentName << " experiment";
+    return;
+  }
+  std::vector<int> interactions = ReadInteractionHistory(prefs);
+  interactions.push_back(reason);
+  size_t history_beginning = interactions.size() > history_length ?
+      interactions.size() - history_length : 0;
+  base::ListValue value;
+  for (size_t i = history_beginning; i < interactions.size(); ++i)
+    value.AppendInteger(interactions[i]);
+  prefs->Set(prefs::kPasswordBubbleLastInteractions, value);
+}
+
+} // namespace
+
+const char kExperimentName[] = "PasswordBubbleAlgorithm";
+const char kGroupTimeSpanBased[] = "TimeSpan";
+const char kGroupProbabilityBased[] = "Probability";
+const char kParamProbabilityFakeSaves[] = "saves_count";
+const char kParamProbabilityInteractionsCount[] = "last_interactions_count";
+const char kParamTimeSpan[] = "time_span";
+const char kParamTimeSpanNopeThreshold[] = "nope_threshold";
+
+void RegisterPrefs(user_prefs::PrefRegistrySyncable* registry) {
+  registry->RegisterInt64Pref(
+      prefs::kPasswordBubbleTimeStamp,
+      0,
+      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
+  registry->RegisterIntegerPref(
+      prefs::kPasswordBubbleNopesCount,
+      0,
+      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
+  registry->RegisterListPref(
+      prefs::kPasswordBubbleLastInteractions,
+      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
+}
+
+bool ShouldShowBubble(PrefService* prefs) {
+  if (!base::FieldTrialList::TrialExists(kExperimentName))
+    return true;
+  std::string group_name =
+      base::FieldTrialList::FindFullName(kExperimentName);
+
+  if (group_name == kGroupTimeSpanBased) {
+    return ShouldShowBubbleTimeSpanExperiment(prefs);
+  }
+  if (group_name == kGroupProbabilityBased) {
+    return ShouldShowBubbleProbabilityExperiment(prefs);
+  }
+
+  // The "Show Always" should be the default case.
+  return true;
+}
+
+void RecordBubbleClosed(
+    PrefService* prefs,
+    password_manager::metrics_util::UIDismissalReason reason) {
+  UpdateTimeSpanPrefs(prefs, reason);
+  UpdateProbabilityPrefs(prefs, reason);
+}
+
+}  // namespace password_bubble_experiment
diff --git a/chrome/browser/ui/passwords/password_bubble_experiment.h b/chrome/browser/ui/passwords/password_bubble_experiment.h
new file mode 100644
index 0000000..9c4d302
--- /dev/null
+++ b/chrome/browser/ui/passwords/password_bubble_experiment.h
@@ -0,0 +1,57 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_UI_PASSWORDS_PASSWORD_BUBBLE_EXPERIMENT_H_
+#define CHROME_BROWSER_UI_PASSWORDS_PASSWORD_BUBBLE_EXPERIMENT_H_
+
+#include "base/macros.h"
+#include "components/password_manager/core/browser/password_manager_metrics_util.h"
+
+namespace user_prefs {
+class PrefRegistrySyncable;
+}
+
+class PrefService;
+
+// These functions handle the algorithms according to which the "Save password?"
+// bubble is shown to user.
+namespace password_bubble_experiment {
+
+void RegisterPrefs(user_prefs::PrefRegistrySyncable* registry);
+
+// The decision is made based on the "PasswordBubbleAlgorithm" finch experiment.
+// The default value is true.
+// It should be called before showing the "Save Password?" dialog.
+bool ShouldShowBubble(PrefService* prefs);
+
+// Should be called when user dismisses the "Save Password?" dialog. It stores
+// the statistics about interactions with the bubble.
+void RecordBubbleClosed(
+    PrefService* prefs,
+    password_manager::metrics_util::UIDismissalReason reason);
+
+// The name of the finch experiment controlling the algorithm.
+extern const char kExperimentName[];
+
+// The group name for the time based algorithm.
+extern const char kGroupTimeSpanBased[];
+
+// The group name for the probability algorithm.
+extern const char kGroupProbabilityBased[];
+
+// For "Probability" group. The additional "Saves" to be added to the model.
+extern const char kParamProbabilityFakeSaves[];
+
+// For "Probability" group. The interaction history length.
+extern const char kParamProbabilityInteractionsCount[];
+
+// For "TimeSpan" group. The time span until the nope counter is zeroed.
+extern const char kParamTimeSpan[];
+
+// For "TimeSpan" group. The nopes threshold.
+extern const char kParamTimeSpanNopeThreshold[];
+
+}  // namespace password_bubble_experiment
+
+#endif  // CHROME_BROWSER_UI_PASSWORDS_PASSWORD_BUBBLE_EXPERIMENT_H_
diff --git a/chrome/browser/ui/passwords/password_bubble_experiment_unittest.cc b/chrome/browser/ui/passwords/password_bubble_experiment_unittest.cc
new file mode 100644
index 0000000..96265b5
--- /dev/null
+++ b/chrome/browser/ui/passwords/password_bubble_experiment_unittest.cc
@@ -0,0 +1,139 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/passwords/password_bubble_experiment.h"
+
+#include "base/files/scoped_temp_dir.h"
+#include "base/metrics/field_trial.h"
+#include "base/prefs/pref_service.h"
+#include "base/strings/string_number_conversions.h"
+#include "chrome/common/pref_names.h"
+#include "chrome/test/base/testing_profile.h"
+#include "components/variations/entropy_provider.h"
+#include "components/variations/variations_associated_data.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace {
+
+const int kTimeSpanDays = 2;
+const int kTimeSpanThreshold = 3;
+const int kProbabilityFakeSaves = 0;
+const int kProbabilityHistory = 10;
+
+void SetupTimeSpanExperiment() {
+  ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial(
+      password_bubble_experiment::kExperimentName,
+      password_bubble_experiment::kGroupTimeSpanBased));
+  std::map<std::string, std::string> params;
+  params[password_bubble_experiment::kParamTimeSpan] =
+      base::IntToString(kTimeSpanDays);
+  params[password_bubble_experiment::kParamTimeSpanNopeThreshold] =
+      base::IntToString(kTimeSpanThreshold);
+  ASSERT_TRUE(variations::AssociateVariationParams(
+      password_bubble_experiment::kExperimentName,
+      password_bubble_experiment::kGroupTimeSpanBased,
+      params));
+}
+
+void SetupProbabilityExperiment() {
+  ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial(
+      password_bubble_experiment::kExperimentName,
+      password_bubble_experiment::kGroupProbabilityBased));
+  std::map<std::string, std::string> params;
+  params[password_bubble_experiment::kParamProbabilityFakeSaves] =
+      base::IntToString(kProbabilityFakeSaves);
+  params[password_bubble_experiment::kParamProbabilityInteractionsCount] =
+      base::IntToString(kProbabilityHistory);
+  ASSERT_TRUE(variations::AssociateVariationParams(
+      password_bubble_experiment::kExperimentName,
+      password_bubble_experiment::kGroupProbabilityBased,
+      params));
+}
+
+} // namespace
+
+class PasswordBubbleExperimentTest : public testing::Test {
+ public:
+  void SetUp() override {
+    ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
+    profile_.reset(new TestingProfile(temp_dir_.path()));
+
+    field_trial_list_.reset(new base::FieldTrialList(
+        new metrics::SHA1EntropyProvider("foo")));
+    variations::testing::ClearAllVariationParams();
+  }
+
+  PrefService* prefs() { return profile_->GetPrefs(); }
+
+ private:
+  base::ScopedTempDir temp_dir_;
+  scoped_ptr<TestingProfile> profile_;
+  scoped_ptr<base::FieldTrialList> field_trial_list_;
+};
+
+TEST_F(PasswordBubbleExperimentTest, TimeSpan) {
+  SetupTimeSpanExperiment();
+
+  EXPECT_TRUE(password_bubble_experiment::ShouldShowBubble(prefs()));
+  // Don't save password enough times.
+  for (int i = 0; i < kTimeSpanThreshold; ++i) {
+    password_manager::metrics_util::UIDismissalReason reason = i % 2 ?
+        password_manager::metrics_util::NO_DIRECT_INTERACTION :
+        password_manager::metrics_util::CLICKED_NOPE;
+    password_bubble_experiment::RecordBubbleClosed(prefs(), reason);
+  }
+  EXPECT_FALSE(password_bubble_experiment::ShouldShowBubble(prefs()));
+
+  // Save password many times. It doesn't bring the bubble back while the time
+  // span isn't over.
+  for (int i = 0; i < 2*kTimeSpanThreshold; ++i) {
+    password_bubble_experiment::RecordBubbleClosed(
+        prefs(),
+        password_manager::metrics_util::CLICKED_SAVE);
+  }
+  EXPECT_FALSE(password_bubble_experiment::ShouldShowBubble(prefs()));
+}
+
+TEST_F(PasswordBubbleExperimentTest, TimeSpanOver) {
+  SetupTimeSpanExperiment();
+
+  base::Time past_interval =
+      base::Time::Now() - base::TimeDelta::FromDays(kTimeSpanDays + 1);
+  prefs()->SetInt64(prefs::kPasswordBubbleTimeStamp,
+                    past_interval.ToInternalValue());
+  prefs()->SetInteger(prefs::kPasswordBubbleNopesCount, kTimeSpanThreshold);
+  // The time span is over. The bubble should be shown.
+  EXPECT_TRUE(password_bubble_experiment::ShouldShowBubble(prefs()));
+  EXPECT_EQ(0, prefs()->GetInteger(prefs::kPasswordBubbleNopesCount));
+
+  // Set the old time span again and record "Nope". The counter restarts from 0.
+  prefs()->SetInt64(prefs::kPasswordBubbleTimeStamp,
+                    past_interval.ToInternalValue());
+  password_bubble_experiment::RecordBubbleClosed(
+      prefs(), password_manager::metrics_util::CLICKED_NOPE);
+  EXPECT_TRUE(password_bubble_experiment::ShouldShowBubble(prefs()));
+  EXPECT_EQ(1, prefs()->GetInteger(prefs::kPasswordBubbleNopesCount));
+}
+
+TEST_F(PasswordBubbleExperimentTest, Probability) {
+  SetupProbabilityExperiment();
+
+  EXPECT_TRUE(password_bubble_experiment::ShouldShowBubble(prefs()));
+  // Don't save password enough times.
+  for (int i = 0; i < kProbabilityHistory; ++i) {
+    password_manager::metrics_util::UIDismissalReason reason = i % 2 ?
+        password_manager::metrics_util::NO_DIRECT_INTERACTION :
+        password_manager::metrics_util::CLICKED_NOPE;
+    password_bubble_experiment::RecordBubbleClosed(prefs(), reason);
+  }
+  EXPECT_FALSE(password_bubble_experiment::ShouldShowBubble(prefs()));
+
+  // Save password enough times.
+  for (int i = 0; i < kProbabilityHistory; ++i) {
+    password_bubble_experiment::RecordBubbleClosed(
+        prefs(),
+        password_manager::metrics_util::CLICKED_SAVE);
+  }
+  EXPECT_TRUE(password_bubble_experiment::ShouldShowBubble(prefs()));
+}
diff --git a/chrome/browser/ui/views/frame/browser_command_handler_x11.cc b/chrome/browser/ui/views/frame/browser_command_handler_x11.cc
index 4afe77a..ce37fcc 100644
--- a/chrome/browser/ui/views/frame/browser_command_handler_x11.cc
+++ b/chrome/browser/ui/views/frame/browser_command_handler_x11.cc
@@ -8,26 +8,15 @@
 
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
-#include "chrome/browser/ui/views/frame/browser_view.h"
 #include "content/public/browser/navigation_controller.h"
 #include "content/public/browser/web_contents.h"
-#include "ui/aura/window.h"
 #include "ui/events/event.h"
 #include "ui/events/event_utils.h"
 
-BrowserCommandHandlerX11::BrowserCommandHandlerX11(BrowserView* browser_view)
-    : browser_view_(browser_view) {
-  aura::Window* window = browser_view_->frame()->GetNativeWindow();
-  DCHECK(window);
-  if (window)
-    window->AddPreTargetHandler(this);
-}
+BrowserCommandHandlerX11::BrowserCommandHandlerX11(Browser* browser)
+    : browser_(browser) {}
 
-BrowserCommandHandlerX11::~BrowserCommandHandlerX11() {
-  aura::Window* window = browser_view_->frame()->GetNativeWindow();
-  if (window)
-    window->RemovePreTargetHandler(this);
-}
+BrowserCommandHandlerX11::~BrowserCommandHandlerX11() {}
 
 void BrowserCommandHandlerX11::OnMouseEvent(ui::MouseEvent* event) {
   if (event->type() != ui::ET_MOUSE_PRESSED)
@@ -43,7 +32,7 @@
   const int kForwardMouseButton = 9;
   if (button == kBackMouseButton || button == kForwardMouseButton) {
     content::WebContents* contents =
-        browser_view_->browser()->tab_strip_model()->GetActiveWebContents();
+        browser_->tab_strip_model()->GetActiveWebContents();
     if (!contents)
       return;
     content::NavigationController& controller = contents->GetController();
diff --git a/chrome/browser/ui/views/frame/browser_command_handler_x11.h b/chrome/browser/ui/views/frame/browser_command_handler_x11.h
index fdc9294..0542401 100644
--- a/chrome/browser/ui/views/frame/browser_command_handler_x11.h
+++ b/chrome/browser/ui/views/frame/browser_command_handler_x11.h
@@ -6,20 +6,19 @@
 #define CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_COMMAND_HANDLER_X11_H_
 
 #include "ui/events/event_handler.h"
-#include "ui/gfx/native_widget_types.h"
 
-class BrowserView;
+class Browser;
 
 class BrowserCommandHandlerX11 : public ui::EventHandler {
  public:
-  explicit BrowserCommandHandlerX11(BrowserView* browser_view);
+  explicit BrowserCommandHandlerX11(Browser* browser);
   ~BrowserCommandHandlerX11() override;
 
  private:
   // ui::EventHandler:
   void OnMouseEvent(ui::MouseEvent* event) override;
 
-  BrowserView* browser_view_;
+  Browser* browser_;
 
   DISALLOW_COPY_AND_ASSIGN(BrowserCommandHandlerX11);
 };
diff --git a/chrome/browser/ui/views/frame/browser_frame.cc b/chrome/browser/ui/views/frame/browser_frame.cc
index a4e9535..890d1de 100644
--- a/chrome/browser/ui/views/frame/browser_frame.cc
+++ b/chrome/browser/ui/views/frame/browser_frame.cc
@@ -4,11 +4,14 @@
 
 #include "chrome/browser/ui/views/frame/browser_frame.h"
 
+#include "ash/shell.h"
+#include "base/command_line.h"
 #include "base/debug/leak_annotations.h"
 #include "base/i18n/rtl.h"
 #include "chrome/browser/app_mode/app_mode_utils.h"
 #include "chrome/browser/themes/theme_service.h"
 #include "chrome/browser/themes/theme_service_factory.h"
+#include "chrome/browser/ui/ash/ash_util.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_list.h"
 #include "chrome/browser/ui/browser_window_state.h"
@@ -20,7 +23,11 @@
 #include "chrome/browser/ui/views/frame/native_browser_frame_factory.h"
 #include "chrome/browser/ui/views/frame/system_menu_model_builder.h"
 #include "chrome/browser/ui/views/frame/top_container_view.h"
+#include "chrome/browser/web_applications/web_app.h"
+#include "chrome/common/chrome_switches.h"
 #include "chrome/common/pref_names.h"
+#include "ui/aura/window.h"
+#include "ui/aura/window_event_dispatcher.h"
 #include "ui/base/hit_test.h"
 #include "ui/base/theme_provider.h"
 #include "ui/events/event_handler.h"
@@ -29,9 +36,12 @@
 #include "ui/views/controls/menu/menu_runner.h"
 #include "ui/views/widget/native_widget.h"
 
+#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
+#include "chrome/browser/shell_integration_linux.h"
+#endif
+
 #if defined(OS_CHROMEOS)
 #include "ash/session/session_state_delegate.h"
-#include "ash/shell.h"
 #endif
 
 #if defined(USE_X11)
@@ -52,9 +62,16 @@
   set_is_secondary_widget(false);
   // Don't focus anything on creation, selecting a tab will set the focus.
   set_focus_on_creation(false);
+
+#if defined(USE_X11)
+  browser_command_handler_.reset(
+      new BrowserCommandHandlerX11(browser_view_->browser()));
+#endif
 }
 
 BrowserFrame::~BrowserFrame() {
+  if (browser_command_handler_ && GetNativeView())
+    GetNativeView()->RemovePreTargetHandler(browser_command_handler_.get());
 }
 
 // static
@@ -73,8 +90,9 @@
 
   native_browser_frame_ =
       NativeBrowserFrameFactory::CreateNativeBrowserFrame(this, browser_view_);
-  views::Widget::InitParams params = native_browser_frame_->GetWidgetParams();
+  views::Widget::InitParams params;
   params.delegate = browser_view_;
+  params.native_widget = native_browser_frame_->AsNativeWidget();
   if (browser_view_->browser()->is_type_tabbed()) {
     // Typed panel/popup can only return a size once the widget has been
     // created.
@@ -82,9 +100,46 @@
                                              &params.bounds,
                                              &params.show_state);
   }
+
+  if (browser_view_->browser()->host_desktop_type() ==
+      chrome::HOST_DESKTOP_TYPE_ASH || chrome::ShouldOpenAshOnStartup()) {
+    params.context = ash::Shell::GetPrimaryRootWindow();
+#if defined(OS_WIN)
+    // If this window is under ASH on Windows, we need it to be translucent.
+    params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW;
+#endif
+  }
+
+#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
+  // Set up a custom WM_CLASS for some sorts of window types. This allows
+  // task switchers in X11 environments to distinguish between main browser
+  // windows and e.g app windows.
+  const CommandLine& command_line = *CommandLine::ForCurrentProcess();
+  const Browser& browser = *browser_view_->browser();
+  params.wm_class_class = shell_integration_linux::GetProgramClassName();
+  params.wm_class_name = params.wm_class_class;
+  if (browser.is_app() && !browser.is_devtools()) {
+    // This window is a hosted app or v1 packaged app.
+    // NOTE: v2 packaged app windows are created by ChromeNativeAppWindowViews.
+    params.wm_class_name = web_app::GetWMClassFromAppName(browser.app_name());
+  } else if (command_line.HasSwitch(switches::kUserDataDir)) {
+    // Set the class name to e.g. "Chrome (/tmp/my-user-data)".  The
+    // class name will show up in the alt-tab list in gnome-shell if
+    // you're running a binary that doesn't have a matching .desktop
+    // file.
+    const std::string user_data_dir =
+        command_line.GetSwitchValueNative(switches::kUserDataDir);
+    params.wm_class_name += " (" + user_data_dir + ")";
+  }
+  const char kX11WindowRoleBrowser[] = "browser";
+  const char kX11WindowRolePopup[] = "pop-up";
+  params.wm_role_name = browser_view_->browser()->is_type_tabbed() ?
+      std::string(kX11WindowRoleBrowser) : std::string(kX11WindowRolePopup);
+
   params.remove_standard_frame = UseCustomFrame();
   set_frame_type(UseCustomFrame() ? Widget::FRAME_TYPE_FORCE_CUSTOM
                                   : Widget::FRAME_TYPE_FORCE_NATIVE);
+#endif  // defined(OS_LINUX)
 
   Init(params);
 
@@ -93,9 +148,8 @@
     non_client_view()->set_context_menu_controller(this);
   }
 
-#if defined(USE_X11)
-  browser_command_handler_.reset(new BrowserCommandHandlerX11(browser_view_));
-#endif
+  if (browser_command_handler_)
+    GetNativeWindow()->AddPreTargetHandler(browser_command_handler_.get());
 }
 
 void BrowserFrame::SetThemeProvider(scoped_ptr<ui::ThemeProvider> provider) {
diff --git a/chrome/browser/ui/views/frame/browser_frame_ash.cc b/chrome/browser/ui/views/frame/browser_frame_ash.cc
index 563f309..9f576dc 100644
--- a/chrome/browser/ui/views/frame/browser_frame_ash.cc
+++ b/chrome/browser/ui/views/frame/browser_frame_ash.cc
@@ -4,7 +4,6 @@
 
 #include "chrome/browser/ui/views/frame/browser_frame_ash.h"
 
-#include "ash/shell.h"
 #include "ash/wm/window_properties.h"
 #include "ash/wm/window_state.h"
 #include "ash/wm/window_state_delegate.h"
@@ -18,6 +17,8 @@
 #include "ui/aura/window_observer.h"
 #include "ui/views/view.h"
 
+using aura::Window;
+
 namespace {
 
 // BrowserWindowStateDelegate class handles a user's fullscreen
@@ -126,17 +127,12 @@
 ////////////////////////////////////////////////////////////////////////////////
 // BrowserFrameAsh, NativeBrowserFrame implementation:
 
-views::Widget::InitParams BrowserFrameAsh::GetWidgetParams() {
-  views::Widget::InitParams params;
-  params.native_widget = this;
+views::NativeWidget* BrowserFrameAsh::AsNativeWidget() {
+  return this;
+}
 
-  params.context = ash::Shell::GetPrimaryRootWindow();
-#if defined(OS_WIN)
-  // If this window is under ASH on Windows, we need it to be translucent.
-  params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW;
-#endif
-
-  return params;
+const views::NativeWidget* BrowserFrameAsh::AsNativeWidget() const {
+  return this;
 }
 
 bool BrowserFrameAsh::UsesNativeSystemMenu() const {
diff --git a/chrome/browser/ui/views/frame/browser_frame_ash.h b/chrome/browser/ui/views/frame/browser_frame_ash.h
index 55c82be..bd827c6 100644
--- a/chrome/browser/ui/views/frame/browser_frame_ash.h
+++ b/chrome/browser/ui/views/frame/browser_frame_ash.h
@@ -34,7 +34,8 @@
   void OnWindowTargetVisibilityChanged(bool visible) override;
 
   // Overridden from NativeBrowserFrame:
-  views::Widget::InitParams GetWidgetParams() override;
+  views::NativeWidget* AsNativeWidget() override;
+  const views::NativeWidget* AsNativeWidget() const override;
   bool UsesNativeSystemMenu() const override;
   int GetMinimizeButtonOffset() const override;
   bool ShouldSaveWindowPlacement() const override;
diff --git a/chrome/browser/ui/views/frame/browser_frame_mac.h b/chrome/browser/ui/views/frame/browser_frame_mac.h
deleted file mode 100644
index 86f7445..0000000
--- a/chrome/browser/ui/views/frame/browser_frame_mac.h
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_FRAME_MAC_H_
-#define CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_FRAME_MAC_H_
-
-#include "chrome/browser/ui/views/frame/native_browser_frame.h"
-#include "ui/views/widget/native_widget_mac.h"
-
-class BrowserFrame;
-class BrowserView;
-
-////////////////////////////////////////////////////////////////////////////////
-//  BrowserFrameMac is a NativeWidgetMac subclass that provides
-//  the window frame for the Chrome browser window.
-//
-class BrowserFrameMac : public views::NativeWidgetMac,
-                        public NativeBrowserFrame {
- public:
-  BrowserFrameMac(BrowserFrame* browser_frame, BrowserView* browser_view);
-
-  // Overridden from NativeBrowserFrame:
-  views::Widget::InitParams GetWidgetParams() override;
-  bool UsesNativeSystemMenu() const override;
-  bool ShouldSaveWindowPlacement() const override;
-  void GetWindowPlacement(gfx::Rect* bounds,
-                          ui::WindowShowState* show_state) const override;
-
- protected:
-  ~BrowserFrameMac() override;
-
-  // Overridden from NativeBrowserFrame:
-  int GetMinimizeButtonOffset() const override;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(BrowserFrameMac);
-};
-
-#endif  // CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_FRAME_MAC_H_
diff --git a/chrome/browser/ui/views/frame/browser_frame_mac.mm b/chrome/browser/ui/views/frame/browser_frame_mac.mm
deleted file mode 100644
index ee6c55c..0000000
--- a/chrome/browser/ui/views/frame/browser_frame_mac.mm
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/ui/views/frame/browser_frame_mac.h"
-
-#include "chrome/browser/ui/views/frame/browser_frame.h"
-
-BrowserFrameMac::BrowserFrameMac(BrowserFrame* browser_frame,
-                                 BrowserView* browser_view)
-    : views::NativeWidgetMac(browser_frame) {
-}
-
-BrowserFrameMac::~BrowserFrameMac() {
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// BrowserFrameMac, NativeBrowserFrame implementation:
-
-views::Widget::InitParams BrowserFrameMac::GetWidgetParams() {
-  views::Widget::InitParams params;
-  params.native_widget = this;
-  return params;
-}
-
-bool BrowserFrameMac::UsesNativeSystemMenu() const {
-  return true;
-}
-
-bool BrowserFrameMac::ShouldSaveWindowPlacement() const {
-  return true;
-}
-
-void BrowserFrameMac::GetWindowPlacement(
-    gfx::Rect* bounds,
-    ui::WindowShowState* show_state) const {
-  return NativeWidgetMac::GetWindowPlacement(bounds, show_state);
-}
-
-int BrowserFrameMac::GetMinimizeButtonOffset() const {
-  NOTIMPLEMENTED();
-  return 0;
-}
diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc
index 0720573..258cbd1 100644
--- a/chrome/browser/ui/views/frame/browser_view.cc
+++ b/chrome/browser/ui/views/frame/browser_view.cc
@@ -68,6 +68,7 @@
 #include "chrome/browser/ui/views/frame/browser_view_layout_delegate.h"
 #include "chrome/browser/ui/views/frame/contents_layout_manager.h"
 #include "chrome/browser/ui/views/frame/immersive_mode_controller.h"
+#include "chrome/browser/ui/views/frame/native_browser_frame_factory.h"
 #include "chrome/browser/ui/views/frame/top_container_view.h"
 #include "chrome/browser/ui/views/frame/web_contents_close_handler.h"
 #include "chrome/browser/ui/views/fullscreen_exit_bubble_views.h"
@@ -107,12 +108,14 @@
 #include "content/public/browser/notification_service.h"
 #include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/render_view_host.h"
-#include "content/public/browser/render_widget_host_view.h"
 #include "content/public/browser/user_metrics.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/common/content_switches.h"
 #include "grit/theme_resources.h"
 #include "ui/accessibility/ax_view_state.h"
+#include "ui/aura/client/window_tree_client.h"
+#include "ui/aura/window.h"
+#include "ui/aura/window_tree_host.h"
 #include "ui/base/accelerators/accelerator.h"
 #include "ui/base/hit_test.h"
 #include "ui/base/l10n/l10n_util.h"
@@ -135,12 +138,6 @@
 #include "ui/views/widget/widget.h"
 #include "ui/views/window/dialog_delegate.h"
 
-#if defined(USE_AURA)
-#include "ui/aura/client/window_tree_client.h"
-#include "ui/aura/window.h"
-#include "ui/aura/window_tree_host.h"
-#endif
-
 #if defined(OS_WIN)
 #include "base/win/windows_version.h"
 #include "chrome/browser/jumplist_win.h"
@@ -1419,7 +1416,6 @@
 void BrowserView::TabInsertedAt(WebContents* contents,
                                 int index,
                                 bool foreground) {
-#if defined(USE_AURA)
   // WebContents inserted in tabs might not have been added to the root
   // window yet. Per http://crbug/342672 add them now since drawing the
   // WebContents requires root window specific data - information about
@@ -1431,7 +1427,6 @@
         window, root_window, root_window->GetBoundsInScreen());
     DCHECK(contents->GetNativeView()->GetRootWindow());
   }
-#endif
   web_contents_close_handler_->TabInserted();
 
   if (foreground)
@@ -2371,6 +2366,24 @@
 #endif
 }
 
+// static
+BrowserWindow* BrowserWindow::CreateBrowserWindow(Browser* browser) {
+  // Create the view and the frame. The frame will attach itself via the view
+  // so we don't need to do anything with the pointer.
+  BrowserView* view = new BrowserView();
+  view->Init(browser);
+  (new BrowserFrame(view))->InitBrowserFrame();
+  view->GetWidget()->non_client_view()->SetAccessibleName(
+      l10n_util::GetStringUTF16(IDS_PRODUCT_NAME));
+  return view;
+}
+
+// static
+chrome::HostDesktopType BrowserWindow::AdjustHostDesktopType(
+    chrome::HostDesktopType desktop_type) {
+  return NativeBrowserFrameFactory::AdjustHostDesktopType(desktop_type);
+}
+
 void BrowserView::ShowAvatarBubble(WebContents* web_contents,
                                    const gfx::Rect& rect) {
   gfx::Point origin(rect.origin());
@@ -2464,7 +2477,10 @@
 bool BrowserView::DoCutCopyPasteForWebContents(
     WebContents* contents,
     void (WebContents::*method)()) {
-  if (contents->GetRenderWidgetHostView()->HasFocus()) {
+  gfx::NativeView native_view = contents->GetContentNativeView();
+  if (!native_view)
+    return false;
+  if (native_view->HasFocus()) {
     (contents->*method)();
     return true;
   }
diff --git a/chrome/browser/ui/views/frame/browser_window_factory.cc b/chrome/browser/ui/views/frame/browser_window_factory.cc
deleted file mode 100644
index 7db63a8..0000000
--- a/chrome/browser/ui/views/frame/browser_window_factory.cc
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/ui/views/frame/browser_frame.h"
-#include "chrome/browser/ui/views/frame/browser_view.h"
-#include "chrome/browser/ui/views/frame/native_browser_frame_factory.h"
-#include "chrome/grit/chromium_strings.h"
-#include "ui/base/l10n/l10n_util.h"
-#include "ui/views/widget/widget.h"
-
-// static
-BrowserWindow* BrowserWindow::CreateBrowserWindow(Browser* browser) {
-  // Create the view and the frame. The frame will attach itself via the view
-  // so we don't need to do anything with the pointer.
-  BrowserView* view = new BrowserView();
-  view->Init(browser);
-  (new BrowserFrame(view))->InitBrowserFrame();
-  view->GetWidget()->non_client_view()->SetAccessibleName(
-      l10n_util::GetStringUTF16(IDS_PRODUCT_NAME));
-  return view;
-}
-
-// static
-chrome::HostDesktopType BrowserWindow::AdjustHostDesktopType(
-    chrome::HostDesktopType desktop_type) {
-  return NativeBrowserFrameFactory::AdjustHostDesktopType(desktop_type);
-}
diff --git a/chrome/browser/ui/views/frame/contents_web_view.cc b/chrome/browser/ui/views/frame/contents_web_view.cc
index 68f0243..a86e39c 100644
--- a/chrome/browser/ui/views/frame/contents_web_view.cc
+++ b/chrome/browser/ui/views/frame/contents_web_view.cc
@@ -7,14 +7,11 @@
 #include "chrome/browser/themes/theme_properties.h"
 #include "chrome/browser/ui/views/status_bubble_views.h"
 #include "content/public/browser/web_contents.h"
+#include "ui/aura/window.h"
 #include "ui/base/theme_provider.h"
 #include "ui/compositor/layer_tree_owner.h"
 #include "ui/views/background.h"
-
-#if defined(USE_AURA)
-#include "ui/aura/window.h"
 #include "ui/wm/core/window_util.h"
-#endif
 
 ContentsWebView::ContentsWebView(content::BrowserContext* browser_context)
     : views::WebView(browser_context),
@@ -86,11 +83,7 @@
 void ContentsWebView::CloneWebContentsLayer() {
   if (!web_contents())
     return;
-#if defined(USE_AURA)
-  // We don't need to clone the layers on non-Aura (Mac), because closing an
-  // NSWindow does not animate.
   cloned_layer_tree_ = wm::RecreateLayers(web_contents()->GetNativeView());
-#endif
   if (!cloned_layer_tree_ || !cloned_layer_tree_->root()) {
     cloned_layer_tree_.reset();
     return;
diff --git a/chrome/browser/ui/views/frame/desktop_browser_frame_aura.cc b/chrome/browser/ui/views/frame/desktop_browser_frame_aura.cc
index 6063c76..d251f4f 100644
--- a/chrome/browser/ui/views/frame/desktop_browser_frame_aura.cc
+++ b/chrome/browser/ui/views/frame/desktop_browser_frame_aura.cc
@@ -4,13 +4,10 @@
 
 #include "chrome/browser/ui/views/frame/desktop_browser_frame_aura.h"
 
-#include "base/command_line.h"
 #include "chrome/app/chrome_command_ids.h"
 #include "chrome/browser/ui/views/frame/browser_desktop_window_tree_host.h"
 #include "chrome/browser/ui/views/frame/browser_shutdown.h"
 #include "chrome/browser/ui/views/frame/browser_view.h"
-#include "chrome/browser/web_applications/web_app.h"
-#include "chrome/common/chrome_switches.h"
 #include "ui/aura/client/aura_constants.h"
 #include "ui/aura/window.h"
 #include "ui/aura/window_event_dispatcher.h"
@@ -21,10 +18,6 @@
 #include "ui/views/view.h"
 #include "ui/wm/core/visibility_controller.h"
 
-#if defined(OS_LINUX)
-#include "chrome/browser/shell_integration_linux.h"
-#endif
-
 using aura::Window;
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -81,39 +74,12 @@
 ////////////////////////////////////////////////////////////////////////////////
 // DesktopBrowserFrameAura, NativeBrowserFrame implementation:
 
-views::Widget::InitParams DesktopBrowserFrameAura::GetWidgetParams() {
-  views::Widget::InitParams params;
-  params.native_widget = this;
+views::NativeWidget* DesktopBrowserFrameAura::AsNativeWidget() {
+  return this;
+}
 
-#if defined(OS_LINUX)
-  // Set up a custom WM_CLASS for some sorts of window types. This allows
-  // task switchers in X11 environments to distinguish between main browser
-  // windows and e.g app windows.
-  const base::CommandLine& command_line =
-      *base::CommandLine::ForCurrentProcess();
-  const Browser& browser = *browser_view_->browser();
-  params.wm_class_class = shell_integration_linux::GetProgramClassName();
-  params.wm_class_name = params.wm_class_class;
-  if (browser.is_app() && !browser.is_devtools()) {
-    // This window is a hosted app or v1 packaged app.
-    // NOTE: v2 packaged app windows are created by ChromeNativeAppWindowViews.
-    params.wm_class_name = web_app::GetWMClassFromAppName(browser.app_name());
-  } else if (command_line.HasSwitch(switches::kUserDataDir)) {
-    // Set the class name to e.g. "Chrome (/tmp/my-user-data)".  The
-    // class name will show up in the alt-tab list in gnome-shell if
-    // you're running a binary that doesn't have a matching .desktop
-    // file.
-    const std::string user_data_dir =
-        command_line.GetSwitchValueNative(switches::kUserDataDir);
-    params.wm_class_name += " (" + user_data_dir + ")";
-  }
-  const char kX11WindowRoleBrowser[] = "browser";
-  const char kX11WindowRolePopup[] = "pop-up";
-  params.wm_role_name = browser_view_->browser()->is_type_tabbed() ?
-      std::string(kX11WindowRoleBrowser) : std::string(kX11WindowRolePopup);
-#endif  // defined(OS_LINUX)
-
-  return params;
+const views::NativeWidget* DesktopBrowserFrameAura::AsNativeWidget() const {
+  return this;
 }
 
 bool DesktopBrowserFrameAura::UsesNativeSystemMenu() const {
diff --git a/chrome/browser/ui/views/frame/desktop_browser_frame_aura.h b/chrome/browser/ui/views/frame/desktop_browser_frame_aura.h
index cd86478..901fa3e 100644
--- a/chrome/browser/ui/views/frame/desktop_browser_frame_aura.h
+++ b/chrome/browser/ui/views/frame/desktop_browser_frame_aura.h
@@ -41,7 +41,8 @@
   void InitNativeWidget(const views::Widget::InitParams& params) override;
 
   // Overridden from NativeBrowserFrame:
-  views::Widget::InitParams GetWidgetParams() override;
+  views::NativeWidget* AsNativeWidget() override;
+  const views::NativeWidget* AsNativeWidget() const override;
   bool UsesNativeSystemMenu() const override;
   int GetMinimizeButtonOffset() const override;
   bool ShouldSaveWindowPlacement() const override;
diff --git a/chrome/browser/ui/views/frame/immersive_mode_controller.h b/chrome/browser/ui/views/frame/immersive_mode_controller.h
index 2e059f3..6f24ddd 100644
--- a/chrome/browser/ui/views/frame/immersive_mode_controller.h
+++ b/chrome/browser/ui/views/frame/immersive_mode_controller.h
@@ -5,6 +5,7 @@
 #ifndef CHROME_BROWSER_UI_VIEWS_FRAME_IMMERSIVE_MODE_CONTROLLER_H_
 #define CHROME_BROWSER_UI_VIEWS_FRAME_IMMERSIVE_MODE_CONTROLLER_H_
 
+#include "ash/wm/immersive_revealed_lock.h"
 #include "base/compiler_specific.h"
 #include "base/observer_list.h"
 #include "chrome/browser/ui/host_desktop.h"
@@ -16,16 +17,7 @@
 class Size;
 }
 
-// A lock which will keep the top-of-window views revealed for its
-// lifetime.
-// See ImmersiveModeController::GetRevealedLock for details.
-class ImmersiveRevealedLock {
- public:
-  virtual ~ImmersiveRevealedLock() {}
-
- protected:
-  ImmersiveRevealedLock() {}
-};
+typedef ash::ImmersiveRevealedLock ImmersiveRevealedLock;
 
 // Controller for an "immersive mode" similar to MacOS presentation mode where
 // the top-of-window views are hidden until the mouse hits the top of the
@@ -90,7 +82,6 @@
   // If acquiring the lock causes a reveal, the top-of-window views will animate
   // according to |animate_reveal|.
   // The caller takes ownership of the returned lock.
-  // This is currently only supported on Ash.
   virtual ImmersiveRevealedLock* GetRevealedLock(
       AnimateReveal animate_reveal) WARN_UNUSED_RESULT = 0;
 
diff --git a/chrome/browser/ui/views/frame/immersive_mode_controller_ash.cc b/chrome/browser/ui/views/frame/immersive_mode_controller_ash.cc
index 17928ea..d7f12d2 100644
--- a/chrome/browser/ui/views/frame/immersive_mode_controller_ash.cc
+++ b/chrome/browser/ui/views/frame/immersive_mode_controller_ash.cc
@@ -5,7 +5,6 @@
 #include "chrome/browser/ui/views/frame/immersive_mode_controller_ash.h"
 
 #include "ash/shell.h"
-#include "ash/wm/immersive_revealed_lock.h"
 #include "ash/wm/window_state.h"
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/ui/fullscreen/fullscreen_controller.h"
@@ -41,17 +40,6 @@
   return ash::ImmersiveFullscreenController::ANIMATE_REVEAL_NO;
 }
 
-class ImmersiveRevealedLockAsh : public ImmersiveRevealedLock {
- public:
-  explicit ImmersiveRevealedLockAsh(ash::ImmersiveRevealedLock* lock)
-      : lock_(lock) {}
-
- private:
-  scoped_ptr<ash::ImmersiveRevealedLock> lock_;
-
-  DISALLOW_COPY_AND_ASSIGN(ImmersiveRevealedLockAsh);
-};
-
 }  // namespace
 
 ImmersiveModeControllerAsh::ImmersiveModeControllerAsh()
@@ -120,8 +108,8 @@
 
 ImmersiveRevealedLock* ImmersiveModeControllerAsh::GetRevealedLock(
     AnimateReveal animate_reveal) {
-  return new ImmersiveRevealedLockAsh(controller_->GetRevealedLock(
-      ToImmersiveFullscreenControllerAnimateReveal(animate_reveal)));
+  return controller_->GetRevealedLock(
+      ToImmersiveFullscreenControllerAnimateReveal(animate_reveal));
 }
 
 void ImmersiveModeControllerAsh::OnFindBarVisibleBoundsChanged(
diff --git a/chrome/browser/ui/views/frame/immersive_mode_controller_factory_ash.cc b/chrome/browser/ui/views/frame/immersive_mode_controller_factory.cc
similarity index 99%
rename from chrome/browser/ui/views/frame/immersive_mode_controller_factory_ash.cc
rename to chrome/browser/ui/views/frame/immersive_mode_controller_factory.cc
index 1d8848a..7edd140 100644
--- a/chrome/browser/ui/views/frame/immersive_mode_controller_factory_ash.cc
+++ b/chrome/browser/ui/views/frame/immersive_mode_controller_factory.cc
@@ -3,8 +3,8 @@
 // found in the LICENSE file.
 
 #include "chrome/browser/ui/host_desktop.h"
-#include "chrome/browser/ui/views/frame/immersive_mode_controller_ash.h"
 #include "chrome/browser/ui/views/frame/immersive_mode_controller_stub.h"
+#include "chrome/browser/ui/views/frame/immersive_mode_controller_ash.h"
 
 namespace chrome {
 
diff --git a/chrome/browser/ui/views/frame/immersive_mode_controller_factory_mac.cc b/chrome/browser/ui/views/frame/immersive_mode_controller_factory_mac.cc
deleted file mode 100644
index 9a0849f..0000000
--- a/chrome/browser/ui/views/frame/immersive_mode_controller_factory_mac.cc
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/ui/views/frame/immersive_mode_controller_stub.h"
-
-namespace chrome {
-
-ImmersiveModeController* CreateImmersiveModeController(
-    chrome::HostDesktopType host_desktop_type) {
-  return new ImmersiveModeControllerStub();
-}
-
-}  // namespace chrome
diff --git a/chrome/browser/ui/views/frame/native_browser_frame.h b/chrome/browser/ui/views/frame/native_browser_frame.h
index f1d2f38..846d9e7 100644
--- a/chrome/browser/ui/views/frame/native_browser_frame.h
+++ b/chrome/browser/ui/views/frame/native_browser_frame.h
@@ -7,7 +7,6 @@
 
 #include "ui/base/ui_base_types.h"
 #include "ui/gfx/rect.h"
-#include "ui/views/widget/widget.h"
 
 class BrowserFrame;
 class BrowserView;
@@ -20,8 +19,8 @@
  public:
   virtual ~NativeBrowserFrame() {}
 
-  // Returns the platform specific InitParams for initializing our widget.
-  virtual views::Widget::InitParams GetWidgetParams() = 0;
+  virtual views::NativeWidget* AsNativeWidget() = 0;
+  virtual const views::NativeWidget* AsNativeWidget() const = 0;
 
   // Returns true if the OS takes care of showing the system menu. Returning
   // false means BrowserFrame handles showing the system menu.
diff --git a/chrome/browser/ui/views/frame/native_browser_frame_factory_mac.cc b/chrome/browser/ui/views/frame/native_browser_frame_factory_mac.cc
deleted file mode 100644
index 27ca192..0000000
--- a/chrome/browser/ui/views/frame/native_browser_frame_factory_mac.cc
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/ui/views/frame/native_browser_frame_factory.h"
-
-#include "chrome/browser/ui/views/frame/browser_frame_mac.h"
-
-NativeBrowserFrame* NativeBrowserFrameFactory::Create(
-    BrowserFrame* browser_frame,
-    BrowserView* browser_view) {
-  return new BrowserFrameMac(browser_frame, browser_view);
-}
diff --git a/chrome/browser/ui/views/select_file_dialog_extension_browsertest.cc b/chrome/browser/ui/views/select_file_dialog_extension_browsertest.cc
index 7c1ede9..40c5167 100644
--- a/chrome/browser/ui/views/select_file_dialog_extension_browsertest.cc
+++ b/chrome/browser/ui/views/select_file_dialog_extension_browsertest.cc
@@ -138,8 +138,7 @@
                   const std::string& additional_message) {
     // Spawn a dialog to open a file.  The dialog will signal that it is ready
     // via chrome.test.sendMessage() in the extension JavaScript.
-    ExtensionTestMessageListener init_listener("worker-initialized",
-                                               false /* will_reply */);
+    ExtensionTestMessageListener init_listener("ready", false /* will_reply */);
 
     scoped_ptr<ExtensionTestMessageListener> additional_listener;
     if (!additional_message.empty()) {
@@ -278,8 +277,6 @@
   // Spawn a dialog to open a file.  Provide the path to the file so the dialog
   // will automatically select it.  Ensure that the OK button is enabled by
   // waiting for chrome.test.sendMessage('selection-change-complete').
-  // The extension starts a Web Worker to read file metadata, so it may send
-  // 'selection-change-complete' before 'worker-initialized'.  This is OK.
   ASSERT_NO_FATAL_FAILURE(OpenDialog(ui::SelectFileDialog::SELECT_OPEN_FILE,
                                      test_file, owning_window,
                                      "selection-change-complete"));
@@ -306,8 +303,6 @@
   // Spawn a dialog to save a file, providing a suggested path.
   // Ensure "Save" button is enabled by waiting for notification from
   // chrome.test.sendMessage().
-  // The extension starts a Web Worker to read file metadata, so it may send
-  // 'directory-change-complete' before 'worker-initialized'.  This is OK.
   ASSERT_NO_FATAL_FAILURE(OpenDialog(ui::SelectFileDialog::SELECT_SAVEAS_FILE,
                                      test_file, owning_window,
                                      "directory-change-complete"));
diff --git a/chrome/browser/ui/webui/chromeos/login/reset_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/reset_screen_handler.cc
index f616b60..4971756 100644
--- a/chrome/browser/ui/webui/chromeos/login/reset_screen_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/login/reset_screen_handler.cc
@@ -97,7 +97,6 @@
       switches::kFirstExecAfterBoot);
 
   reboot_was_requested_ = false;
-  rollback_available_ = false;
   preparing_for_rollback_ = false;
   if (!restart_required_)  // First exec after boot.
     reboot_was_requested_ = prefs->GetBoolean(prefs::kFactoryResetRequested);
@@ -106,19 +105,17 @@
           switches::kDisableRollbackOption)) {
     rollback_available_ = false;
     ShowWithParams();
-  } else if (!restart_required_ && reboot_was_requested_) {
-    // First exec after boot.
+  } else if (restart_required_) {
+    // Will require restart.
+    ShowWithParams();
+  } else {
     chromeos::DBusThreadManager::Get()->GetUpdateEngineClient()->
         CanRollbackCheck(base::Bind(&ResetScreenHandler::OnRollbackCheck,
         weak_ptr_factory_.GetWeakPtr()));
-  } else {
-    // Will require restart.
-    ShowWithParams();
   }
 }
 
 void ResetScreenHandler::Hide() {
-  DBusThreadManager::Get()->GetUpdateEngineClient()->RemoveObserver(this);
 }
 
 void ResetScreenHandler::SetDelegate(Delegate* delegate) {
diff --git a/chrome/chrome_browser_ui.gypi b/chrome/chrome_browser_ui.gypi
index 58b1acc..81c6d34 100644
--- a/chrome/chrome_browser_ui.gypi
+++ b/chrome/chrome_browser_ui.gypi
@@ -301,7 +301,7 @@
       'browser/ui/cocoa/browser_window_layout.mm',
       'browser/ui/cocoa/browser_window_controller_private.h',
       'browser/ui/cocoa/browser_window_controller_private.mm',
-      'browser/ui/cocoa/browser_window_factory_cocoa.mm',
+      'browser/ui/cocoa/browser_window_factory.mm',
       'browser/ui/cocoa/browser_window_utils.h',
       'browser/ui/cocoa/browser_window_utils.mm',
       'browser/ui/cocoa/bubble_combobox.h',
@@ -804,6 +804,8 @@
       'browser/ui/passwords/manage_passwords_icon.h',
       'browser/ui/passwords/manage_passwords_ui_controller.cc',
       'browser/ui/passwords/manage_passwords_ui_controller.h',
+      'browser/ui/passwords/password_bubble_experiment.cc',
+      'browser/ui/passwords/password_bubble_experiment.h',
       'browser/ui/passwords/password_manager_presenter.cc',
       'browser/ui/passwords/password_manager_presenter.h',
       'browser/ui/passwords/password_ui_view.h',
@@ -2006,11 +2008,9 @@
       'browser/ui/views/first_run_bubble.cc',
       'browser/ui/views/first_run_bubble.h',
       'browser/ui/views/frame/browser_frame.cc',
-      'browser/ui/views/frame/browser_frame.h',
       'browser/ui/views/frame/browser_frame_common_win.cc',
       'browser/ui/views/frame/browser_frame_common_win.h',
-      'browser/ui/views/frame/browser_frame_mac.h',
-      'browser/ui/views/frame/browser_frame_mac.mm',
+      'browser/ui/views/frame/browser_frame.h',
       'browser/ui/views/frame/browser_non_client_frame_view.cc',
       'browser/ui/views/frame/browser_non_client_frame_view_factory_aura.cc',
       'browser/ui/views/frame/browser_non_client_frame_view.h',
@@ -2023,7 +2023,6 @@
       'browser/ui/views/frame/browser_view_layout.cc',
       'browser/ui/views/frame/browser_view_layout_delegate.h',
       'browser/ui/views/frame/browser_view_layout.h',
-      'browser/ui/views/frame/browser_window_factory.cc',
       'browser/ui/views/frame/browser_window_property_manager_win.cc',
       'browser/ui/views/frame/browser_window_property_manager_win.h',
       'browser/ui/views/frame/contents_layout_manager.cc',
@@ -2031,8 +2030,7 @@
       'browser/ui/views/frame/contents_web_view.cc',
       'browser/ui/views/frame/contents_web_view.h',
       'browser/ui/views/frame/immersive_mode_controller.cc',
-      'browser/ui/views/frame/immersive_mode_controller_factory_ash.cc',
-      'browser/ui/views/frame/immersive_mode_controller_factory_mac.cc',
+      'browser/ui/views/frame/immersive_mode_controller_factory.cc',
       'browser/ui/views/frame/immersive_mode_controller.h',
       'browser/ui/views/frame/immersive_mode_controller_stub.cc',
       'browser/ui/views/frame/immersive_mode_controller_stub.h',
@@ -2041,7 +2039,6 @@
       'browser/ui/views/frame/native_browser_frame_factory.cc',
       'browser/ui/views/frame/native_browser_frame_factory.h',
       'browser/ui/views/frame/native_browser_frame_factory_chromeos.cc',
-      'browser/ui/views/frame/native_browser_frame_factory_mac.cc',
       'browser/ui/views/frame/native_browser_frame.h',
       'browser/ui/views/frame/opaque_browser_frame_view_layout.cc',
       'browser/ui/views/frame/opaque_browser_frame_view_layout_delegate.h',
@@ -2803,15 +2800,7 @@
             ['use_ash == 1', {
               'sources': [ '<@(chrome_browser_ui_ash_views_sources)' ],
             }],
-            ['OS=="mac"', {
-              'conditions': [
-                ['mac_views_browser==1', {
-                  'sources!': [ 'browser/ui/cocoa/browser_window_factory_cocoa.mm', ],
-                }, {
-                  'sources!': [ 'browser/ui/views/frame/browser_window_factory.cc', ],              
-                }],
-              ],
-            }, {
+            ['OS!="mac"', {
               'sources': [ '<@(chrome_browser_ui_views_non_mac_sources)' ],
               'dependencies': [
                 '<(DEPTH)/extensions/components/extensions_components.gyp:native_app_window',
diff --git a/chrome/chrome_tests_unit.gypi b/chrome/chrome_tests_unit.gypi
index f774021..0440fad 100644
--- a/chrome/chrome_tests_unit.gypi
+++ b/chrome/chrome_tests_unit.gypi
@@ -875,6 +875,7 @@
       'browser/thumbnails/thumbnail_service_unittest.cc',
       'browser/translate/translate_manager_render_view_host_unittest.cc',
       'browser/translate/translate_service_unittest.cc',
+      'browser/ui/android/tab_model/tab_model_list_unittest.cc',
       'browser/ui/android/tab_model/tab_model_unittest.cc',
       'browser/ui/app_list/app_list_positioner_unittest.cc',
       'browser/ui/app_list/app_list_service_mac_unittest.mm',
@@ -1145,6 +1146,7 @@
       'browser/ui/passwords/manage_passwords_bubble_model_unittest.cc',
       'browser/ui/passwords/manage_passwords_icon_mock.cc',
       'browser/ui/passwords/manage_passwords_ui_controller_unittest.cc',
+      'browser/ui/passwords/password_bubble_experiment_unittest.cc',
       'browser/ui/passwords/password_manager_presenter_unittest.cc',
       'browser/ui/search/instant_page_unittest.cc',
       'browser/ui/search/instant_search_prerenderer_unittest.cc',
diff --git a/chrome/common/extensions/api/_permission_features.json b/chrome/common/extensions/api/_permission_features.json
index 1f4a968..f17470e 100644
--- a/chrome/common/extensions/api/_permission_features.json
+++ b/chrome/common/extensions/api/_permission_features.json
@@ -269,7 +269,8 @@
         "BD8781D757D830FC2E85470A1B6E8A718B7EE0D9",  // http://crbug.com/407693
         "4AC2B6C63C6480D150DFDA13E4A5956EB1D0DDBB",  // http://crbug.com/407693
         "81986D4F846CEDDDB962643FA501D1780DD441BB",  // http://crbug.com/407693
-        "FF78670081967CE21DB86A04AD94A0498F01E20A"   // http://crbug.com/409192
+        "FF78670081967CE21DB86A04AD94A0498F01E20A",  // http://crbug.com/409192
+        "05EBA3051DFCA6AF17070AEE5FE8C66322FF4738"   // http://crbug.com/431978
       ]
     }
   ],
diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc
index 2c2d7d4..fef4477 100644
--- a/chrome/common/pref_names.cc
+++ b/chrome/common/pref_names.cc
@@ -2279,4 +2279,14 @@
 // A dictionary that maps user id to hardlock state.
 const char kEasyUnlockHardlockState[] = "easy_unlock.hardlock_state";
 
+// The beginning of time span when we count user's "Nope" for the password
+// bubble.
+const char kPasswordBubbleTimeStamp[] = "password_bubble.timestamp";
+
+// The count of user's "Nope" for the password bubble.
+const char kPasswordBubbleNopesCount[] = "password_bubble.nopes";
+
+// Last user's interaction with the password bubble.
+const char kPasswordBubbleLastInteractions[] = "password_bubble.interactions";
+
 }  // namespace prefs
diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h
index 01a0089..214a3b5 100644
--- a/chrome/common/pref_names.h
+++ b/chrome/common/pref_names.h
@@ -805,6 +805,10 @@
 
 extern const char kEasyUnlockHardlockState[];
 
+extern const char kPasswordBubbleTimeStamp[];
+extern const char kPasswordBubbleNopesCount[];
+extern const char kPasswordBubbleLastInteractions[];
+
 }  // namespace prefs
 
 #endif  // CHROME_COMMON_PREF_NAMES_H_
diff --git a/chromeos/chromeos.gyp b/chromeos/chromeos.gyp
index 98ddfc3..c7d613a 100644
--- a/chromeos/chromeos.gyp
+++ b/chromeos/chromeos.gyp
@@ -275,6 +275,8 @@
       'login/user_names.h',
       'login_event_recorder.cc',
       'login_event_recorder.h',
+      'network/auto_connect_handler.cc',
+      'network/auto_connect_handler.h',
       'network/certificate_pattern.cc',
       'network/certificate_pattern.h',
       'network/client_cert_resolver.cc',
@@ -423,6 +425,7 @@
       'ime/input_method_whitelist_unittest.cc',
       'login/auth/key_unittest.cc',
       'login/login_state_unittest.cc',
+      'network/auto_connect_handler_unittest.cc',
       'network/client_cert_resolver_unittest.cc',
       'network/geolocation_handler_unittest.cc',
       'network/host_resolver_impl_chromeos_unittest.cc',
diff --git a/chromeos/dbus/fake_session_manager_client.cc b/chromeos/dbus/fake_session_manager_client.cc
index c5fe549..b6d2d8e 100644
--- a/chromeos/dbus/fake_session_manager_client.cc
+++ b/chromeos/dbus/fake_session_manager_client.cc
@@ -56,6 +56,12 @@
 void FakeSessionManagerClient::StopSession() {
 }
 
+void FakeSessionManagerClient::NotifySupervisedUserCreationStarted() {
+}
+
+void FakeSessionManagerClient::NotifySupervisedUserCreationFinished() {
+}
+
 void FakeSessionManagerClient::StartDeviceWipe() {
   start_device_wipe_call_count_++;
 }
diff --git a/chromeos/dbus/fake_session_manager_client.h b/chromeos/dbus/fake_session_manager_client.h
index f69e262..367f2d7 100644
--- a/chromeos/dbus/fake_session_manager_client.h
+++ b/chromeos/dbus/fake_session_manager_client.h
@@ -33,6 +33,8 @@
   virtual void RestartJob(int pid, const std::string& command_line) override;
   virtual void StartSession(const std::string& user_email) override;
   virtual void StopSession() override;
+  virtual void NotifySupervisedUserCreationStarted() override;
+  virtual void NotifySupervisedUserCreationFinished() override;
   virtual void StartDeviceWipe() override;
   virtual void RequestLockScreen() override;
   virtual void NotifyLockScreenShown() override;
diff --git a/chromeos/dbus/mock_session_manager_client.h b/chromeos/dbus/mock_session_manager_client.h
index c0e4531..4e1ffbc 100644
--- a/chromeos/dbus/mock_session_manager_client.h
+++ b/chromeos/dbus/mock_session_manager_client.h
@@ -26,6 +26,8 @@
   MOCK_METHOD2(RestartJob, void(int, const std::string&));
   MOCK_METHOD1(StartSession, void(const std::string&));
   MOCK_METHOD0(StopSession, void(void));
+  MOCK_METHOD0(NotifySupervisedUserCreationStarted, void(void));
+  MOCK_METHOD0(NotifySupervisedUserCreationFinished, void(void));
   MOCK_METHOD0(StartDeviceWipe, void(void));
   MOCK_METHOD0(RequestLockScreen, void(void));
   MOCK_METHOD0(NotifyLockScreenShown, void(void));
diff --git a/chromeos/dbus/session_manager_client.cc b/chromeos/dbus/session_manager_client.cc
index 5a67ee8..af81816 100644
--- a/chromeos/dbus/session_manager_client.cc
+++ b/chromeos/dbus/session_manager_client.cc
@@ -156,6 +156,16 @@
         login_manager::kSessionManagerHandleLockScreenDismissed);
   }
 
+  virtual void NotifySupervisedUserCreationStarted() override {
+    SimpleMethodCallToSessionManager(
+        login_manager::kSessionManagerHandleSupervisedUserCreationStarting);
+  }
+
+  virtual void NotifySupervisedUserCreationFinished() override {
+    SimpleMethodCallToSessionManager(
+        login_manager::kSessionManagerHandleSupervisedUserCreationFinished);
+  }
+
   virtual void RetrieveActiveSessions(
       const ActiveSessionsCallback& callback) override {
     dbus::MethodCall method_call(
@@ -590,6 +600,8 @@
   virtual void RestartJob(int pid, const std::string& command_line) override {}
   virtual void StartSession(const std::string& user_email) override {}
   virtual void StopSession() override {}
+  virtual void NotifySupervisedUserCreationStarted() override {}
+  virtual void NotifySupervisedUserCreationFinished() override {}
   virtual void StartDeviceWipe() override {}
   virtual void RequestLockScreen() override {
     if (delegate_)
diff --git a/chromeos/dbus/session_manager_client.h b/chromeos/dbus/session_manager_client.h
index d4c0706..75d7277 100644
--- a/chromeos/dbus/session_manager_client.h
+++ b/chromeos/dbus/session_manager_client.h
@@ -89,6 +89,12 @@
   // Notifies that the lock screen is dismissed.
   virtual void NotifyLockScreenDismissed() = 0;
 
+  // Notifies that supervised user creation have started.
+  virtual void NotifySupervisedUserCreationStarted() = 0;
+
+  // Notifies that supervised user creation have finished.
+  virtual void NotifySupervisedUserCreationFinished() = 0;
+
   // Map that is used to describe the set of active user sessions where |key|
   // is user_id and |value| is user_id_hash.
   typedef std::map<std::string, std::string> ActiveSessionsMap;
diff --git a/chromeos/ime/component_extension_ime_manager.cc b/chromeos/ime/component_extension_ime_manager.cc
index 9a8cce1..6c7f068 100644
--- a/chromeos/ime/component_extension_ime_manager.cc
+++ b/chromeos/ime/component_extension_ime_manager.cc
@@ -59,6 +59,27 @@
   "us(intl)"
 };
 
+// Gets the input method category according to the given input method id.
+// This is used for sorting a list of input methods.
+int GetInputMethodCategory(const std::string& id) {
+  const std::string engine_id =
+      chromeos::extension_ime_util::GetComponentIDByInputMethodID(id);
+  if (StartsWithASCII(engine_id, "xkb:", true))
+    return 0;
+  if (StartsWithASCII(engine_id, "vkd_", true))
+    return 1;
+  if (engine_id.find("-t-i0-") != std::string::npos &&
+      !StartsWithASCII(engine_id, "zh-", true)) {
+    return 2;
+  }
+  return 3;
+}
+
+bool InputMethodCompare(const input_method::InputMethodDescriptor& im1,
+                        const input_method::InputMethodDescriptor& im2) {
+  return GetInputMethodCategory(im1.id()) < GetInputMethodCategory(im2.id());
+}
+
 } // namespace
 
 ComponentExtensionEngine::ComponentExtensionEngine() {
@@ -173,6 +194,7 @@
               ime.input_view_url));
     }
   }
+  std::stable_sort(result.begin(), result.end(), InputMethodCompare);
   return result;
 }
 
diff --git a/chromeos/ime/component_extension_ime_manager_unittest.cc b/chromeos/ime/component_extension_ime_manager_unittest.cc
index 9e8bdb3..840f3c4 100644
--- a/chromeos/ime/component_extension_ime_manager_unittest.cc
+++ b/chromeos/ime/component_extension_ime_manager_unittest.cc
@@ -28,24 +28,24 @@
     ext1.path = base::FilePath("ext1_file_path");
 
     ComponentExtensionEngine ext1_engine1;
-    ext1_engine1.engine_id = "ext1_engine1_engine_id";
+    ext1_engine1.engine_id = "zh-t-i0-pinyin";
     ext1_engine1.display_name = "ext1_engine_1_display_name";
-    ext1_engine1.language_codes.push_back("en");
+    ext1_engine1.language_codes.push_back("zh-CN");
     ext1_engine1.layouts.push_back("us");
     ext1.engines.push_back(ext1_engine1);
 
     ComponentExtensionEngine ext1_engine2;
-    ext1_engine2.engine_id = "ext1_engine2_engine_id";
+    ext1_engine2.engine_id = "mozc_us";
     ext1_engine2.display_name = "ext1_engine2_display_name";
-    ext1_engine2.language_codes.push_back("en");
+    ext1_engine2.language_codes.push_back("jp");
     ext1_engine2.layouts.push_back("us");
     ext1.engines.push_back(ext1_engine2);
 
     ComponentExtensionEngine ext1_engine3;
-    ext1_engine3.engine_id = "ext1_engine3_engine_id";
+    ext1_engine3.engine_id = "xkb:ru::rus";
     ext1_engine3.display_name = "ext1_engine3_display_name";
-    ext1_engine3.language_codes.push_back("ja");
-    ext1_engine3.layouts.push_back("us");
+    ext1_engine3.language_codes.push_back("ru");
+    ext1_engine3.layouts.push_back("ru");
     ext1.engines.push_back(ext1_engine3);
 
     ime_list_.push_back(ext1);
@@ -56,24 +56,24 @@
     ext2.path = base::FilePath("ext2_file_path");
 
     ComponentExtensionEngine ext2_engine1;
-    ext2_engine1.engine_id = "ext2_engine1_engine_id";
+    ext2_engine1.engine_id = "vkd_ru_phone_aatseel";
     ext2_engine1.display_name = "ext2_engine_1_display_name";
-    ext2_engine1.language_codes.push_back("en");
+    ext2_engine1.language_codes.push_back("ru");
     ext2_engine1.layouts.push_back("us");
     ext2.engines.push_back(ext2_engine1);
 
     ComponentExtensionEngine ext2_engine2;
-    ext2_engine2.engine_id = "ext2_engine2_engine_id";
+    ext2_engine2.engine_id = "vkd_vi_telex";
     ext2_engine2.display_name = "ext2_engine2_display_name";
     ext2_engine2.language_codes.push_back("hi");
     ext2_engine2.layouts.push_back("us");
     ext2.engines.push_back(ext2_engine2);
 
     ComponentExtensionEngine ext2_engine3;
-    ext2_engine3.engine_id = "ext2_engine3_engine_id";
+    ext2_engine3.engine_id = "xkb:us::eng";
     ext2_engine3.display_name = "ext2_engine3_display_name";
-    ext2_engine3.language_codes.push_back("ja");
-    ext2_engine3.layouts.push_back("jp");
+    ext2_engine3.language_codes.push_back("us");
+    ext2_engine3.layouts.push_back("us");
     ext2.engines.push_back(ext2_engine3);
 
     ime_list_.push_back(ext2);
@@ -191,6 +191,16 @@
     total_ime_size += ime_list_[i].engines.size();
   }
   EXPECT_EQ(total_ime_size, descriptors.size());
+
+  // Verify order
+  for (size_t i = 0; i < descriptors.size(); ++i) {
+    const input_method::InputMethodDescriptor& d = descriptors[i];
+    if (i < 2) {
+      EXPECT_TRUE(d.id().find("xkb:") != std::string::npos);
+    } else if (i >= 2 && i < 4) {
+      EXPECT_TRUE(d.id().find("vkd_") != std::string::npos);
+    }
+  }
 }
 
 }  // namespace
diff --git a/chromeos/network/auto_connect_handler.cc b/chromeos/network/auto_connect_handler.cc
new file mode 100644
index 0000000..37f0344
--- /dev/null
+++ b/chromeos/network/auto_connect_handler.cc
@@ -0,0 +1,214 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chromeos/network/auto_connect_handler.h"
+
+#include <string>
+
+#include "base/bind.h"
+#include "base/bind_helpers.h"
+#include "base/values.h"
+#include "chromeos/dbus/dbus_thread_manager.h"
+#include "chromeos/dbus/shill_service_client.h"
+#include "chromeos/network/managed_network_configuration_handler.h"
+#include "chromeos/network/network_event_log.h"
+#include "chromeos/network/network_state.h"
+#include "dbus/object_path.h"
+
+namespace chromeos {
+
+AutoConnectHandler::AutoConnectHandler()
+    : client_cert_resolver_(nullptr),
+      request_best_connection_pending_(false),
+      device_policy_applied_(false),
+      user_policy_applied_(false),
+      client_certs_resolved_(false),
+      applied_autoconnect_policy_(false) {
+}
+
+AutoConnectHandler::~AutoConnectHandler() {
+  if (client_cert_resolver_)
+    client_cert_resolver_->RemoveObserver(this);
+  if (LoginState::IsInitialized())
+    LoginState::Get()->RemoveObserver(this);
+  if (managed_configuration_handler_)
+    managed_configuration_handler_->RemoveObserver(this);
+}
+
+void AutoConnectHandler::Init(
+    ClientCertResolver* client_cert_resolver,
+    NetworkConnectionHandler* network_connection_handler,
+    NetworkStateHandler* network_state_handler,
+    ManagedNetworkConfigurationHandler* managed_network_configuration_handler) {
+  if (LoginState::IsInitialized())
+    LoginState::Get()->AddObserver(this);
+
+  client_cert_resolver_ = client_cert_resolver;
+  if (client_cert_resolver_)
+    client_cert_resolver_->AddObserver(this);
+
+  network_connection_handler_ = network_connection_handler;
+  if (network_connection_handler_)
+    network_connection_handler_->AddObserver(this);
+
+  network_state_handler_ = network_state_handler;
+
+  if (managed_network_configuration_handler) {
+    managed_configuration_handler_ = managed_network_configuration_handler;
+    managed_configuration_handler_->AddObserver(this);
+  }
+
+  if (LoginState::IsInitialized())
+    LoggedInStateChanged();
+}
+
+void AutoConnectHandler::LoggedInStateChanged() {
+  if (!LoginState::Get()->IsUserLoggedIn())
+    return;
+
+  // Disconnect before connecting, to ensure that we do not disconnect a network
+  // that we just connected.
+  DisconnectIfPolicyRequires();
+  NET_LOG_DEBUG("RequestBestConnection", "User logged in");
+  RequestBestConnection();
+}
+
+void AutoConnectHandler::ConnectToNetworkRequested(
+    const std::string& /*service_path*/) {
+  // Stop any pending request to connect to the best newtork.
+  request_best_connection_pending_ = false;
+}
+
+void AutoConnectHandler::PoliciesChanged(const std::string& userhash) {
+  // Ignore user policies.
+  if (!userhash.empty())
+    return;
+  DisconnectIfPolicyRequires();
+}
+
+void AutoConnectHandler::PoliciesApplied(const std::string& userhash) {
+  if (userhash.empty())
+    device_policy_applied_ = true;
+  else
+    user_policy_applied_ = true;
+
+  // Request to connect to the best network only if there is at least one
+  // managed network. Otherwise only process existing requests.
+  const ManagedNetworkConfigurationHandler::GuidToPolicyMap* managed_networks =
+      managed_configuration_handler_->GetNetworkConfigsFromPolicy(userhash);
+  DCHECK(managed_networks);
+  if (!managed_networks->empty()) {
+    NET_LOG_DEBUG("RequestBestConnection", "Policy applied");
+    RequestBestConnection();
+  } else {
+    CheckBestConnection();
+  }
+}
+
+void AutoConnectHandler::ResolveRequestCompleted(
+    bool network_properties_changed) {
+  client_certs_resolved_ = true;
+
+  // Only request to connect to the best network if network properties were
+  // actually changed. Otherwise only process existing requests.
+  if (network_properties_changed) {
+    NET_LOG_DEBUG("RequestBestConnection",
+                  "Client certificate patterns resolved");
+    RequestBestConnection();
+  } else {
+    CheckBestConnection();
+  }
+}
+
+void AutoConnectHandler::RequestBestConnection() {
+  request_best_connection_pending_ = true;
+  CheckBestConnection();
+}
+
+void AutoConnectHandler::CheckBestConnection() {
+  // Return immediately if there is currently no request pending to change to
+  // the best network.
+  if (!request_best_connection_pending_)
+    return;
+
+  bool policy_application_running =
+      managed_configuration_handler_->IsAnyPolicyApplicationRunning();
+  bool client_cert_resolve_task_running =
+      client_cert_resolver_->IsAnyResolveTaskRunning();
+  VLOG(2) << "device policy applied: " << device_policy_applied_
+          << "\nuser policy applied: " << user_policy_applied_
+          << "\npolicy application running: " << policy_application_running
+          << "\nclient cert patterns resolved: " << client_certs_resolved_
+          << "\nclient cert resolve task running: "
+          << client_cert_resolve_task_running;
+  if (!device_policy_applied_ || policy_application_running ||
+      client_cert_resolve_task_running) {
+    return;
+  }
+
+  if (LoginState::Get()->IsUserLoggedIn()) {
+    // Before changing connection after login, we wait at least for:
+    //  - user policy applied at least once
+    //  - client certificate patterns resolved
+    if (!user_policy_applied_ || !client_certs_resolved_)
+      return;
+  }
+
+  request_best_connection_pending_ = false;
+  NET_LOG_EVENT("ConnectToBestWifiNetwork", "");
+  network_state_handler_->ConnectToBestWifiNetwork();
+}
+
+void AutoConnectHandler::DisconnectIfPolicyRequires() {
+  if (applied_autoconnect_policy_ || !LoginState::Get()->IsUserLoggedIn())
+    return;
+
+  const base::DictionaryValue* global_network_config =
+      managed_configuration_handler_->GetGlobalConfigFromPolicy(
+          std::string() /* no username hash, device policy */);
+
+  if (!global_network_config)
+    return;  // Device policy is not set, yet.
+
+  applied_autoconnect_policy_ = true;
+
+  bool only_policy_autoconnect = false;
+  global_network_config->GetBooleanWithoutPathExpansion(
+      ::onc::global_network_config::kAllowOnlyPolicyNetworksToAutoconnect,
+      &only_policy_autoconnect);
+
+  if (only_policy_autoconnect)
+    DisconnectFromUnmanagedSharedWiFiNetworks();
+}
+
+void AutoConnectHandler::DisconnectFromUnmanagedSharedWiFiNetworks() {
+  NET_LOG_DEBUG("DisconnectFromUnmanagedSharedWiFiNetworks", "");
+
+  NetworkStateHandler::NetworkStateList networks;
+  network_state_handler_->GetVisibleNetworkListByType(
+      NetworkTypePattern::Wireless(), &networks);
+  for (const NetworkState* network : networks) {
+    if (!(network->IsConnectingState() || network->IsConnectedState()))
+      break;  // Connected and connecting networks are listed first.
+
+    if (network->IsPrivate())
+      continue;
+
+    const bool network_is_policy_managed =
+        !network->profile_path().empty() && !network->guid().empty() &&
+        managed_configuration_handler_->FindPolicyByGuidAndProfile(
+            network->guid(), network->profile_path());
+    if (network_is_policy_managed)
+      continue;
+
+    NET_LOG_EVENT("Disconnect Forced by Policy", network->path());
+    DBusThreadManager::Get()->GetShillServiceClient()->Disconnect(
+        dbus::ObjectPath(network->path()), base::Bind(&base::DoNothing),
+        base::Bind(&network_handler::ShillErrorCallbackFunction,
+                   "AutoConnectHandler.Disconnect failed", network->path(),
+                   network_handler::ErrorCallback()));
+  }
+}
+
+}  // namespace chromeos
diff --git a/chromeos/network/auto_connect_handler.h b/chromeos/network/auto_connect_handler.h
new file mode 100644
index 0000000..3d0eb54
--- /dev/null
+++ b/chromeos/network/auto_connect_handler.h
@@ -0,0 +1,108 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROMEOS_NETWORK_AUTO_CONNECT_HANDLER_H_
+#define CHROMEOS_NETWORK_AUTO_CONNECT_HANDLER_H_
+
+#include <string>
+
+#include "base/macros.h"
+#include "chromeos/chromeos_export.h"
+#include "chromeos/login/login_state.h"
+#include "chromeos/network/client_cert_resolver.h"
+#include "chromeos/network/network_connection_handler.h"
+#include "chromeos/network/network_handler.h"
+#include "chromeos/network/network_policy_observer.h"
+
+namespace chromeos {
+
+class CHROMEOS_EXPORT AutoConnectHandler
+    : public LoginState::Observer,
+      public NetworkPolicyObserver,
+      public NetworkConnectionHandler::Observer,
+      public ClientCertResolver::Observer {
+ public:
+  ~AutoConnectHandler() override;
+
+  // LoginState::Observer
+  void LoggedInStateChanged() override;
+
+  // NetworkConnectionHandler::Observer
+  void ConnectToNetworkRequested(const std::string& service_path) override;
+
+  // NetworkPolicyObserver
+  void PoliciesChanged(const std::string& userhash) override;
+  void PoliciesApplied(const std::string& userhash) override;
+
+  // ClientCertResolver::Observer
+  void ResolveRequestCompleted(bool network_properties_changed) override;
+
+ private:
+  friend class NetworkHandler;
+  friend class AutoConnectHandlerTest;
+
+  AutoConnectHandler();
+
+  void Init(ClientCertResolver* client_cert_resolver,
+            NetworkConnectionHandler* network_connection_handler,
+            NetworkStateHandler* network_state_handler,
+            ManagedNetworkConfigurationHandler*
+                managed_network_configuration_handler);
+
+  // If the user logged in already and the policy to prevent unmanaged & shared
+  // networks to autoconnect is enabled, then disconnects all such networks
+  // except wired networks. It will do this only once after the user logged in
+  // and the device policy was available.
+  // This is enforced once after a user logs in 1) to allow mananged networks to
+  // autoconnect and 2) to prevent a previous user from foisting a network on
+  // the new user. Therefore, this function is called at login and when the
+  // device policy is changed.
+  void DisconnectIfPolicyRequires();
+
+  // Disconnects from all unmanaged and shared WiFi networks that are currently
+  // connected or connecting.
+  void DisconnectFromUnmanagedSharedWiFiNetworks();
+
+  // Requests and if possible connects to the 'best' available network, see
+  // CheckBestConnection().
+  void RequestBestConnection();
+
+  // If a request to connect to the best network is pending and all requirements
+  // are fulfilled (like policy loaded, certificate patterns being resolved),
+  // then this will call ConnectToBestWifiNetwork of |network_state_handler_|.
+  void CheckBestConnection();
+
+  // Local references to the associated handler instances.
+  ClientCertResolver* client_cert_resolver_;
+  NetworkConnectionHandler* network_connection_handler_;
+  NetworkStateHandler* network_state_handler_;
+  ManagedNetworkConfigurationHandler* managed_configuration_handler_;
+
+  // Whether a request to connect to the best network is pending. If true, once
+  // all requirements are met (like policy loaded, certificate patterns being
+  // resolved), the request is forwarded to the |network_state_handler_|.
+  bool request_best_connection_pending_;
+
+  // Whether the device policy, which might be empty, is already applied.
+  bool device_policy_applied_;
+
+  // Whether the user policy of the first user who logged in is already applied.
+  // The policy might be empty.
+  bool user_policy_applied_;
+
+  // Whether at least once client certificate patterns were checked and if any
+  // existed resolved. Even if there are no certificate patterns, this will be
+  // eventually true.
+  bool client_certs_resolved_;
+
+  // Whether the autoconnect policy was applied already, see
+  // DisconnectIfPolicyRequires().
+  bool applied_autoconnect_policy_;
+
+  DISALLOW_COPY_AND_ASSIGN(AutoConnectHandler);
+};
+
+}  // namespace chromeos
+
+#endif  // CHROMEOS_NETWORK_AUTO_CONNECT_HANDLER_H_
diff --git a/chromeos/network/auto_connect_handler_unittest.cc b/chromeos/network/auto_connect_handler_unittest.cc
new file mode 100644
index 0000000..dda7ecc
--- /dev/null
+++ b/chromeos/network/auto_connect_handler_unittest.cc
@@ -0,0 +1,475 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chromeos/network/auto_connect_handler.h"
+
+#include <string>
+
+#include "base/bind.h"
+#include "base/callback.h"
+#include "base/files/file_util.h"
+#include "base/json/json_reader.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/message_loop/message_loop.h"
+#include "base/run_loop.h"
+#include "base/strings/stringprintf.h"
+#include "chromeos/cert_loader.h"
+#include "chromeos/dbus/dbus_thread_manager.h"
+#include "chromeos/dbus/shill_device_client.h"
+#include "chromeos/dbus/shill_manager_client.h"
+#include "chromeos/dbus/shill_profile_client.h"
+#include "chromeos/dbus/shill_service_client.h"
+#include "chromeos/network/client_cert_resolver.h"
+#include "chromeos/network/managed_network_configuration_handler_impl.h"
+#include "chromeos/network/network_configuration_handler.h"
+#include "chromeos/network/network_profile_handler.h"
+#include "chromeos/network/network_state_handler.h"
+#include "chromeos/network/onc/onc_utils.h"
+#include "components/onc/onc_constants.h"
+#include "crypto/scoped_nss_types.h"
+#include "crypto/scoped_test_nss_db.h"
+#include "net/base/net_errors.h"
+#include "net/base/test_data_directory.h"
+#include "net/cert/nss_cert_database_chromeos.h"
+#include "net/cert/x509_certificate.h"
+#include "net/test/cert_test_util.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/cros_system_api/dbus/service_constants.h"
+
+// http://crbug.com/418369
+#ifdef NDEBUG
+
+namespace chromeos {
+
+namespace {
+
+const char* kUserHash = "user_hash";
+
+void ConfigureCallback(const dbus::ObjectPath& result) {
+}
+
+void FailErrorCallback(const std::string& error_name,
+                            const std::string& error_message) {
+  // This function is not expected to be called.
+  EXPECT_TRUE(false);
+}
+
+class TestCertResolveObserver : public ClientCertResolver::Observer {
+ public:
+  explicit TestCertResolveObserver(ClientCertResolver* cert_resolver)
+      : changed_network_properties_(false), cert_resolver_(cert_resolver) {
+    cert_resolver_->AddObserver(this);
+  }
+
+  void ResolveRequestCompleted(bool changed_network_properties) override {
+    cert_resolver_->RemoveObserver(this);
+    changed_network_properties_ = changed_network_properties;
+  }
+
+  bool DidNetworkPropertiesChange() { return changed_network_properties_; }
+
+ private:
+  bool changed_network_properties_;
+  ClientCertResolver* cert_resolver_;
+};
+
+}  // namespace
+
+class AutoConnectHandlerTest : public testing::Test {
+ public:
+  AutoConnectHandlerTest()
+      : test_manager_client_(nullptr), test_service_client_(nullptr) {}
+
+  void SetUp() override {
+    ASSERT_TRUE(test_nssdb_.is_open());
+
+    // Use the same DB for public and private slot.
+    test_nsscertdb_.reset(new net::NSSCertDatabaseChromeOS(
+        crypto::ScopedPK11Slot(PK11_ReferenceSlot(test_nssdb_.slot())),
+        crypto::ScopedPK11Slot(PK11_ReferenceSlot(test_nssdb_.slot()))));
+    test_nsscertdb_->SetSlowTaskRunnerForTest(message_loop_.task_runner());
+
+    CertLoader::Initialize();
+    CertLoader::ForceHardwareBackedForTesting();
+
+    DBusThreadManager::Initialize();
+    DBusThreadManager* dbus_manager = DBusThreadManager::Get();
+    test_manager_client_ =
+        dbus_manager->GetShillManagerClient()->GetTestInterface();
+    test_service_client_ =
+        dbus_manager->GetShillServiceClient()->GetTestInterface();
+
+    test_manager_client_->AddTechnology(shill::kTypeWifi, true /* enabled */);
+    dbus_manager->GetShillDeviceClient()->GetTestInterface()->AddDevice(
+        "/device/wifi1", shill::kTypeWifi, "wifi_device1");
+    test_manager_client_->AddTechnology(shill::kTypeCellular,
+                                        true /* enabled */);
+    dbus_manager->GetShillProfileClient()->GetTestInterface()->AddProfile(
+        "shared_profile_path", std::string() /* shared profile */);
+    dbus_manager->GetShillProfileClient()->GetTestInterface()->AddProfile(
+        "user_profile_path", kUserHash);
+
+    base::RunLoop().RunUntilIdle();
+    LoginState::Initialize();
+    network_state_handler_.reset(NetworkStateHandler::InitializeForTest());
+    network_config_handler_.reset(
+        NetworkConfigurationHandler::InitializeForTest(
+            network_state_handler_.get()));
+
+    network_profile_handler_.reset(new NetworkProfileHandler());
+    network_profile_handler_->Init();
+
+    managed_config_handler_.reset(new ManagedNetworkConfigurationHandlerImpl());
+    managed_config_handler_->Init(
+        network_state_handler_.get(), network_profile_handler_.get(),
+        network_config_handler_.get(), nullptr /* network_device_handler */);
+
+    client_cert_resolver_.reset(new ClientCertResolver());
+    client_cert_resolver_->Init(network_state_handler_.get(),
+                                managed_config_handler_.get());
+    client_cert_resolver_->SetSlowTaskRunnerForTest(
+        message_loop_.task_runner());
+
+    auto_connect_handler_.reset(new AutoConnectHandler());
+    auto_connect_handler_->Init(client_cert_resolver_.get(),
+                                nullptr,  // no connection handler
+                                network_state_handler_.get(),
+                                managed_config_handler_.get());
+
+    base::RunLoop().RunUntilIdle();
+  }
+
+  void TearDown() override {
+    auto_connect_handler_.reset();
+    client_cert_resolver_.reset();
+    managed_config_handler_.reset();
+    network_profile_handler_.reset();
+    network_config_handler_.reset();
+    network_state_handler_.reset();
+    CertLoader::Shutdown();
+    LoginState::Shutdown();
+    DBusThreadManager::Shutdown();
+  }
+
+ protected:
+  bool Configure(const std::string& json_string) {
+    scoped_ptr<base::DictionaryValue> json_dict =
+        onc::ReadDictionaryFromJson(json_string);
+    if (!json_dict) {
+      LOG(ERROR) << "Error parsing json: " << json_string;
+      return false;
+    }
+    DBusThreadManager::Get()->GetShillManagerClient()->ConfigureService(
+        *json_dict, base::Bind(&ConfigureCallback),
+        base::Bind(&FailErrorCallback));
+    base::RunLoop().RunUntilIdle();
+    return true;
+  }
+
+  std::string GetServiceState(const std::string& service_path) {
+    const base::DictionaryValue* properties =
+        test_service_client_->GetServiceProperties(service_path);
+    std::string result;
+    if (properties)
+      properties->GetStringWithoutPathExpansion(shill::kStateProperty, &result);
+    return result;
+  }
+
+  void StartCertLoader() {
+    CertLoader::Get()->StartWithNSSDB(test_nsscertdb_.get());
+    base::RunLoop().RunUntilIdle();
+  }
+
+  void LoginToRegularUser() {
+    LoginState::Get()->SetLoggedInState(LoginState::LOGGED_IN_ACTIVE,
+                                        LoginState::LOGGED_IN_USER_REGULAR);
+    base::RunLoop().RunUntilIdle();
+  }
+
+  scoped_refptr<net::X509Certificate> ImportTestClientCert() {
+    net::CertificateList ca_cert_list = net::CreateCertificateListFromFile(
+        net::GetTestCertsDirectory(), "client_1_ca.pem",
+        net::X509Certificate::FORMAT_AUTO);
+    if (ca_cert_list.empty()) {
+      LOG(ERROR) << "No CA cert loaded.";
+      return nullptr;
+    }
+    net::NSSCertDatabase::ImportCertFailureList failures;
+    EXPECT_TRUE(test_nsscertdb_->ImportCACerts(
+        ca_cert_list, net::NSSCertDatabase::TRUST_DEFAULT, &failures));
+    if (!failures.empty()) {
+      LOG(ERROR) << net::ErrorToString(failures[0].net_error);
+      return nullptr;
+    }
+
+    // Import a client cert signed by that CA.
+    scoped_refptr<net::X509Certificate> client_cert(
+        net::ImportClientCertAndKeyFromFile(net::GetTestCertsDirectory(),
+                                            "client_1.pem", "client_1.pk8",
+                                            test_nssdb_.slot()));
+    return client_cert;
+  }
+
+  void SetupPolicy(const std::string& network_configs_json,
+                   const base::DictionaryValue& global_config,
+                   bool user_policy) {
+    scoped_ptr<base::ListValue> network_configs(new base::ListValue);
+    if (!network_configs_json.empty()) {
+      std::string error;
+      base::Value* network_configs_value = base::JSONReader::ReadAndReturnError(
+          network_configs_json, base::JSON_ALLOW_TRAILING_COMMAS, nullptr,
+          &error);
+      ASSERT_TRUE(network_configs_value) << error;
+      base::ListValue* network_configs_list = nullptr;
+      ASSERT_TRUE(network_configs_value->GetAsList(&network_configs_list));
+      network_configs.reset(network_configs_list);
+    }
+
+    if (user_policy) {
+      managed_config_handler_->SetPolicy(::onc::ONC_SOURCE_USER_POLICY,
+                                         kUserHash, *network_configs,
+                                         global_config);
+    } else {
+      managed_config_handler_->SetPolicy(::onc::ONC_SOURCE_DEVICE_POLICY,
+                                         std::string(),  // no username hash
+                                         *network_configs, global_config);
+    }
+    base::RunLoop().RunUntilIdle();
+  }
+
+  scoped_ptr<AutoConnectHandler> auto_connect_handler_;
+  scoped_ptr<ClientCertResolver> client_cert_resolver_;
+  scoped_ptr<NetworkStateHandler> network_state_handler_;
+  scoped_ptr<NetworkConfigurationHandler> network_config_handler_;
+  scoped_ptr<ManagedNetworkConfigurationHandlerImpl> managed_config_handler_;
+  scoped_ptr<NetworkProfileHandler> network_profile_handler_;
+  ShillManagerClient::TestInterface* test_manager_client_;
+  ShillServiceClient::TestInterface* test_service_client_;
+  crypto::ScopedTestNSSDB test_nssdb_;
+  scoped_ptr<net::NSSCertDatabaseChromeOS> test_nsscertdb_;
+  base::MessageLoopForUI message_loop_;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(AutoConnectHandlerTest);
+};
+
+namespace {
+
+const char* kConfigUnmanagedSharedConnected =
+    "{ \"GUID\": \"wifi0\", \"Type\": \"wifi\", \"State\": \"online\", "
+    "  \"Security\": \"wpa\" }";
+const char* kConfigManagedSharedConnectable =
+    "{ \"GUID\": \"wifi1\", \"Type\": \"wifi\", \"State\": \"idle\", "
+    "  \"Connectable\": true, \"Security\": \"wpa\" }";
+
+const char* kPolicy =
+    "[ { \"GUID\": \"wifi1\","
+    "    \"Name\": \"wifi1\","
+    "    \"Type\": \"WiFi\","
+    "    \"WiFi\": {"
+    "      \"Security\": \"WPA-PSK\","
+    "      \"SSID\": \"wifi1\","
+    "      \"Passphrase\": \"passphrase\""
+    "    }"
+    "} ]";
+
+const char* kPolicyCertPattern =
+    "[ { \"GUID\": \"wifi1\","
+    "    \"Name\": \"wifi1\","
+    "    \"Type\": \"WiFi\","
+    "    \"WiFi\": {"
+    "      \"Security\": \"WPA-EAP\","
+    "      \"SSID\": \"wifi1\","
+    "      \"EAP\": {"
+    "        \"Outer\": \"EAP-TLS\","
+    "        \"ClientCertType\": \"Pattern\","
+    "        \"ClientCertPattern\": {"
+    "          \"Issuer\": {"
+    "            \"CommonName\": \"B CA\""
+    "          }"
+    "        }"
+    "      }"
+    "    }"
+    "} ]";
+}  // namespace
+
+TEST_F(AutoConnectHandlerTest, ReconnectOnCertLoading) {
+  EXPECT_TRUE(Configure(kConfigUnmanagedSharedConnected));
+  EXPECT_TRUE(Configure(kConfigManagedSharedConnectable));
+  test_manager_client_->SetBestServiceToConnect("wifi1");
+
+  // User login shouldn't trigger any change until the certificates and policy
+  // are loaded.
+  LoginToRegularUser();
+  EXPECT_EQ(shill::kStateOnline, GetServiceState("wifi0"));
+  EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi1"));
+
+  // Applying the policy which restricts autoconnect should disconnect from the
+  // shared, unmanaged network.
+  base::DictionaryValue global_config;
+  global_config.SetBooleanWithoutPathExpansion(
+      ::onc::global_network_config::kAllowOnlyPolicyNetworksToAutoconnect,
+      true);
+
+  SetupPolicy(std::string(),            // no network configs
+              base::DictionaryValue(),  // no global config
+              true);                    // load as user policy
+  SetupPolicy(kPolicy, global_config, false /* load as device policy */);
+  EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi0"));
+  EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi1"));
+
+  // Certificate loading should trigger connecting to the 'best' network.
+  StartCertLoader();
+  EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi0"));
+  EXPECT_EQ(shill::kStateOnline, GetServiceState("wifi1"));
+}
+
+TEST_F(AutoConnectHandlerTest, ReconnectOnCertPatternResolved) {
+  EXPECT_TRUE(Configure(kConfigUnmanagedSharedConnected));
+  EXPECT_TRUE(Configure(kConfigManagedSharedConnectable));
+  test_manager_client_->SetBestServiceToConnect("wifi0");
+
+  SetupPolicy(std::string(),            // no device policy
+              base::DictionaryValue(),  // no global config
+              false);                   // load as device policy
+  LoginToRegularUser();
+  StartCertLoader();
+  SetupPolicy(kPolicyCertPattern,
+              base::DictionaryValue(),  // no global config
+              true);                    // load as user policy
+
+  EXPECT_EQ(shill::kStateOnline, GetServiceState("wifi0"));
+  EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi1"));
+
+  test_manager_client_->SetBestServiceToConnect("wifi1");
+  TestCertResolveObserver observer(client_cert_resolver_.get());
+
+  scoped_refptr<net::X509Certificate> cert = ImportTestClientCert();
+  ASSERT_TRUE(cert.get());
+
+  base::RunLoop().RunUntilIdle();
+  EXPECT_TRUE(observer.DidNetworkPropertiesChange());
+
+  EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi0"));
+  EXPECT_EQ(shill::kStateOnline, GetServiceState("wifi1"));
+}
+
+// Ensure that resolving of certificate patterns only triggers a reconnect if at
+// least one pattern was resolved.
+TEST_F(AutoConnectHandlerTest, NoReconnectIfNoCertResolved) {
+  EXPECT_TRUE(Configure(kConfigUnmanagedSharedConnected));
+  EXPECT_TRUE(Configure(kConfigManagedSharedConnectable));
+  test_manager_client_->SetBestServiceToConnect("wifi0");
+
+  SetupPolicy(std::string(),            // no device policy
+              base::DictionaryValue(),  // no global config
+              false);                   // load as device policy
+  LoginToRegularUser();
+  StartCertLoader();
+  SetupPolicy(kPolicy,
+              base::DictionaryValue(),  // no global config
+              true);                    // load as user policy
+
+  EXPECT_EQ(shill::kStateOnline, GetServiceState("wifi0"));
+  EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi1"));
+
+  test_manager_client_->SetBestServiceToConnect("wifi1");
+  TestCertResolveObserver observer(client_cert_resolver_.get());
+  scoped_refptr<net::X509Certificate> cert = ImportTestClientCert();
+  ASSERT_TRUE(cert.get());
+
+  base::RunLoop().RunUntilIdle();
+  EXPECT_FALSE(observer.DidNetworkPropertiesChange());
+
+  EXPECT_EQ(shill::kStateOnline, GetServiceState("wifi0"));
+  EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi1"));
+}
+
+TEST_F(AutoConnectHandlerTest, DisconnectOnPolicyLoading) {
+  EXPECT_TRUE(Configure(kConfigUnmanagedSharedConnected));
+  EXPECT_TRUE(Configure(kConfigManagedSharedConnectable));
+
+  // User login and certificate loading shouldn't trigger any change until the
+  // policy is loaded.
+  LoginToRegularUser();
+  StartCertLoader();
+  EXPECT_EQ(shill::kStateOnline, GetServiceState("wifi0"));
+  EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi1"));
+
+  base::DictionaryValue global_config;
+  global_config.SetBooleanWithoutPathExpansion(
+      ::onc::global_network_config::kAllowOnlyPolicyNetworksToAutoconnect,
+      true);
+
+  // Applying the policy which restricts autoconnect should disconnect from the
+  // shared, unmanaged network.
+  // Because no best service is set, the fake implementation of
+  // ConnectToBestServices will be a no-op.
+  SetupPolicy(kPolicy, global_config, false /* load as device policy */);
+  EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi0"));
+  EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi1"));
+}
+
+// After login a reconnect is triggered even if there is no managed network.
+TEST_F(AutoConnectHandlerTest, ReconnectAfterLogin) {
+  EXPECT_TRUE(Configure(kConfigUnmanagedSharedConnected));
+  EXPECT_TRUE(Configure(kConfigManagedSharedConnectable));
+  test_manager_client_->SetBestServiceToConnect("wifi1");
+
+  // User login and certificate loading shouldn't trigger any change until the
+  // policy is loaded.
+  LoginToRegularUser();
+  StartCertLoader();
+  EXPECT_EQ(shill::kStateOnline, GetServiceState("wifi0"));
+  EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi1"));
+
+  // Applying an empty device policy will not trigger anything yet, until also
+  // the user policy is applied.
+  SetupPolicy(std::string(),            // no network configs
+              base::DictionaryValue(),  // no global config
+              false);                   // load as device policy
+  EXPECT_EQ(shill::kStateOnline, GetServiceState("wifi0"));
+  EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi1"));
+
+  // Applying also an empty user policy should trigger connecting to the 'best'
+  // network.
+  SetupPolicy(std::string(),            // no network configs
+              base::DictionaryValue(),  // no global config
+              true);                    // load as user policy
+  EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi0"));
+  EXPECT_EQ(shill::kStateOnline, GetServiceState("wifi1"));
+}
+
+TEST_F(AutoConnectHandlerTest, ManualConnectAbortsReconnectAfterLogin) {
+  EXPECT_TRUE(Configure(kConfigUnmanagedSharedConnected));
+  EXPECT_TRUE(Configure(kConfigManagedSharedConnectable));
+  test_manager_client_->SetBestServiceToConnect("wifi1");
+
+  // User login and certificate loading shouldn't trigger any change until the
+  // policy is loaded.
+  LoginToRegularUser();
+  StartCertLoader();
+  SetupPolicy(std::string(),            // no network configs
+              base::DictionaryValue(),  // no global config
+              false);                   // load as device policy
+
+  EXPECT_EQ(shill::kStateOnline, GetServiceState("wifi0"));
+  EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi1"));
+
+  // A manual connect request should prevent a reconnect after login.
+  auto_connect_handler_->ConnectToNetworkRequested(
+      std::string() /* service_path */);
+
+  // Applying the user policy after login would usually trigger connecting to
+  // the 'best' network. But the manual connect prevents this.
+  SetupPolicy(std::string(),            // no network configs
+              base::DictionaryValue(),  // no global config
+              true);                    // load as user policy
+  EXPECT_EQ(shill::kStateOnline, GetServiceState("wifi0"));
+  EXPECT_EQ(shill::kStateIdle, GetServiceState("wifi1"));
+}
+
+}  // namespace chromeos
+
+#endif
diff --git a/chromeos/network/managed_network_configuration_handler_impl.cc b/chromeos/network/managed_network_configuration_handler_impl.cc
index 527dd5a..ebe5d54 100644
--- a/chromeos/network/managed_network_configuration_handler_impl.cc
+++ b/chromeos/network/managed_network_configuration_handler_impl.cc
@@ -404,7 +404,8 @@
 
   STLDeleteValues(&old_per_network_config);
   ApplyOrQueuePolicies(userhash, &modified_policies);
-  FOR_EACH_OBSERVER(NetworkPolicyObserver, observers_, PolicyChanged(userhash));
+  FOR_EACH_OBSERVER(NetworkPolicyObserver, observers_,
+                    PoliciesChanged(userhash));
 }
 
 bool ManagedNetworkConfigurationHandlerImpl::IsAnyPolicyApplicationRunning()
diff --git a/chromeos/network/managed_network_configuration_handler_impl.h b/chromeos/network/managed_network_configuration_handler_impl.h
index d9a89bd..433987c 100644
--- a/chromeos/network/managed_network_configuration_handler_impl.h
+++ b/chromeos/network/managed_network_configuration_handler_impl.h
@@ -106,6 +106,7 @@
   void OnPoliciesApplied(const NetworkProfile& profile) override;
 
  private:
+  friend class AutoConnectHandlerTest;
   friend class ClientCertResolverTest;
   friend class ManagedNetworkConfigurationHandlerTest;
   friend class NetworkConnectionHandlerTest;
diff --git a/chromeos/network/network_connection_handler.cc b/chromeos/network/network_connection_handler.cc
index 018d924..79e4ea2 100644
--- a/chromeos/network/network_connection_handler.cc
+++ b/chromeos/network/network_connection_handler.cc
@@ -152,9 +152,7 @@
       network_state_handler_(NULL),
       configuration_handler_(NULL),
       logged_in_(false),
-      certificates_loaded_(false),
-      applied_autoconnect_policy_(false),
-      requested_connect_to_best_network_(false) {
+      certificates_loaded_(false) {
 }
 
 NetworkConnectionHandler::~NetworkConnectionHandler() {
@@ -191,11 +189,7 @@
     network_state_handler_->AddObserver(this, FROM_HERE);
   }
   configuration_handler_ = network_configuration_handler;
-
-  if (managed_network_configuration_handler) {
-    managed_configuration_handler_ = managed_network_configuration_handler;
-    managed_configuration_handler_->AddObserver(this);
-  }
+  managed_configuration_handler_ = managed_network_configuration_handler;
 
   // After this point, the NetworkConnectionHandler is fully initialized (all
   // handler references set, observers registered, ...).
@@ -204,6 +198,14 @@
     LoggedInStateChanged();
 }
 
+void NetworkConnectionHandler::AddObserver(Observer* observer) {
+  observers_.AddObserver(observer);
+}
+
+void NetworkConnectionHandler::RemoveObserver(Observer* observer) {
+  observers_.RemoveObserver(observer);
+}
+
 void NetworkConnectionHandler::LoggedInStateChanged() {
   LoginState* login_state = LoginState::Get();
   if (logged_in_ || !login_state->IsUserLoggedIn())
@@ -212,8 +214,6 @@
   NET_LOG_EVENT("Logged In", "");
   logged_in_ = true;
   logged_in_time_ = base::TimeTicks::Now();
-
-  DisconnectIfPolicyRequires();
 }
 
 void NetworkConnectionHandler::OnCertificatesLoaded(
@@ -221,20 +221,8 @@
     bool initial_load) {
   certificates_loaded_ = true;
   NET_LOG_EVENT("Certificates Loaded", "");
-  if (queued_connect_) {
+  if (queued_connect_)
     ConnectToQueuedNetwork();
-  } else if (initial_load) {
-    // Connecting to the "best" available network requires certificates to be
-    // loaded. Try to connect now.
-    ConnectToBestNetworkAfterLogin();
-  }
-}
-
-void NetworkConnectionHandler::PolicyChanged(const std::string& userhash) {
-  // Ignore user policies.
-  if (!userhash.empty())
-    return;
-  DisconnectIfPolicyRequires();
 }
 
 void NetworkConnectionHandler::ConnectToNetwork(
@@ -243,6 +231,9 @@
     const network_handler::ErrorCallback& error_callback,
     bool check_error_state) {
   NET_LOG_USER("ConnectToNetwork", service_path);
+  FOR_EACH_OBSERVER(Observer, observers_,
+                    ConnectToNetworkRequested(service_path));
+
   // Clear any existing queued connect request.
   queued_connect_.reset();
   if (HasConnectingNetwork(service_path)) {
@@ -761,66 +752,4 @@
     success_callback.Run();
 }
 
-void NetworkConnectionHandler::ConnectToBestNetworkAfterLogin() {
-  if (requested_connect_to_best_network_ || !applied_autoconnect_policy_ ||
-      !certificates_loaded_) {
-    return;
-  }
-
-  requested_connect_to_best_network_ = true;
-  network_state_handler_->ConnectToBestWifiNetwork();
-}
-
-void NetworkConnectionHandler::DisconnectIfPolicyRequires() {
-  if (applied_autoconnect_policy_ || !LoginState::Get()->IsUserLoggedIn())
-    return;
-
-  const base::DictionaryValue* global_network_config =
-      managed_configuration_handler_->GetGlobalConfigFromPolicy(std::string());
-  if (!global_network_config)
-    return;
-
-  applied_autoconnect_policy_ = true;
-
-  bool only_policy_autoconnect = false;
-  global_network_config->GetBooleanWithoutPathExpansion(
-      ::onc::global_network_config::kAllowOnlyPolicyNetworksToAutoconnect,
-      &only_policy_autoconnect);
-
-  if (only_policy_autoconnect)
-    DisconnectFromUnmanagedSharedWiFiNetworks();
-
-  ConnectToBestNetworkAfterLogin();
-}
-
-void NetworkConnectionHandler::DisconnectFromUnmanagedSharedWiFiNetworks() {
-  NET_LOG_DEBUG("DisconnectFromUnmanagedSharedWiFiNetworks", "");
-
-  NetworkStateHandler::NetworkStateList networks;
-  network_state_handler_->GetVisibleNetworkListByType(
-      NetworkTypePattern::Wireless(), &networks);
-  for (NetworkStateHandler::NetworkStateList::const_iterator it =
-           networks.begin();
-       it != networks.end();
-       ++it) {
-    const NetworkState* network = *it;
-    if (!(network->IsConnectingState() || network->IsConnectedState()))
-      break;  // Connected and connecting networks are listed first.
-
-    if (network->IsPrivate())
-      continue;
-
-    const bool network_is_policy_managed =
-        !network->profile_path().empty() && !network->guid().empty() &&
-        managed_configuration_handler_->FindPolicyByGuidAndProfile(
-            network->guid(), network->profile_path());
-    if (network_is_policy_managed)
-      continue;
-
-    NET_LOG_EVENT("Disconnect Forced by Policy", network->path());
-    CallShillDisconnect(
-        network->path(), base::Closure(), network_handler::ErrorCallback());
-  }
-}
-
 }  // namespace chromeos
diff --git a/chromeos/network/network_connection_handler.h b/chromeos/network/network_connection_handler.h
index 73ecd66..bdcf89d 100644
--- a/chromeos/network/network_connection_handler.h
+++ b/chromeos/network/network_connection_handler.h
@@ -5,12 +5,14 @@
 #ifndef CHROMEOS_NETWORK_NETWORK_CONNECTION_HANDLER_H_
 #define CHROMEOS_NETWORK_NETWORK_CONNECTION_HANDLER_H_
 
+#include <map>
 #include <set>
 #include <string>
 
 #include "base/basictypes.h"
 #include "base/callback.h"
 #include "base/memory/weak_ptr.h"
+#include "base/observer_list.h"
 #include "base/time/time.h"
 #include "base/values.h"
 #include "chromeos/cert_loader.h"
@@ -19,7 +21,6 @@
 #include "chromeos/login/login_state.h"
 #include "chromeos/network/network_handler.h"
 #include "chromeos/network/network_handler_callbacks.h"
-#include "chromeos/network/network_policy_observer.h"
 #include "chromeos/network/network_state_handler_observer.h"
 
 namespace chromeos {
@@ -46,9 +47,21 @@
     : public LoginState::Observer,
       public CertLoader::Observer,
       public NetworkStateHandlerObserver,
-      public NetworkPolicyObserver,
       public base::SupportsWeakPtr<NetworkConnectionHandler> {
  public:
+  class Observer {
+   public:
+    // Called if a connection to network |service_path| was requested, by
+    // calling ConnectToNetwork.
+    virtual void ConnectToNetworkRequested(const std::string& service_path) = 0;
+
+   protected:
+    virtual ~Observer() {}
+
+   private:
+    DISALLOW_ASSIGN(Observer);
+  };
+
   // Constants for |error_name| from |error_callback| for Connect.
 
   //  No network matching |service_path| is found (hidden networks must be
@@ -93,6 +106,9 @@
 
   virtual ~NetworkConnectionHandler();
 
+  void AddObserver(Observer* observer);
+  void RemoveObserver(Observer* observer);
+
   // ConnectToNetwork() will start an asynchronous connection attempt.
   // On success, |success_callback| will be called.
   // On failure, |error_callback| will be called with |error_name| one of the
@@ -137,9 +153,6 @@
   virtual void OnCertificatesLoaded(const net::CertificateList& cert_list,
                                     bool initial_load) override;
 
-  // NetworkPolicyObserver
-  virtual void PolicyChanged(const std::string& userhash) override;
-
  private:
   friend class NetworkHandler;
   friend class NetworkConnectionHandlerTest;
@@ -206,26 +219,7 @@
   void HandleShillDisconnectSuccess(const std::string& service_path,
                                     const base::Closure& success_callback);
 
-  // If the policy to prevent unmanaged & shared networks to autoconnect is
-  // enabled, then disconnect all such networks except wired networks. Does
-  // nothing on consecutive calls.
-  // This is enforced once after a user logs in 1) to allow mananged networks to
-  // autoconnect and 2) to prevent a previous user from foisting a network on
-  // the new user. Therefore, this function is called on startup, at login and
-  // when the device policy is changed.
-  void DisconnectIfPolicyRequires();
-
-  // Disconnects from all unmanaged and shared WiFi networks that are currently
-  // connected or connecting.
-  void DisconnectFromUnmanagedSharedWiFiNetworks();
-
-  // Requests a connect to the 'best' available network once after login and
-  // after any disconnect required by policy is executed (see
-  // DisconnectIfPolicyRequires()). To include networks with client
-  // certificates, no request is sent until certificates are loaded. Therefore,
-  // this function is called on the initial certificate load and by
-  // DisconnectIfPolicyRequires().
-  void ConnectToBestNetworkAfterLogin();
+  ObserverList<Observer> observers_;
 
   // Local references to the associated handler instances.
   CertLoader* cert_loader_;
@@ -243,14 +237,6 @@
   bool certificates_loaded_;
   base::TimeTicks logged_in_time_;
 
-  // Whether the autoconnect policy was applied already, see
-  // DisconnectIfPolicyRequires().
-  bool applied_autoconnect_policy_;
-
-  // Whether the handler already requested a 'ConnectToBestNetwork' after login,
-  // see ConnectToBestNetworkAfterLogin().
-  bool requested_connect_to_best_network_;
-
   DISALLOW_COPY_AND_ASSIGN(NetworkConnectionHandler);
 };
 
diff --git a/chromeos/network/network_connection_handler_unittest.cc b/chromeos/network/network_connection_handler_unittest.cc
index b2c61ac..31b04c2 100644
--- a/chromeos/network/network_connection_handler_unittest.cc
+++ b/chromeos/network/network_connection_handler_unittest.cc
@@ -426,114 +426,6 @@
   EXPECT_EQ(NetworkConnectionHandler::kErrorNotConnected, GetResultAndReset());
 }
 
-namespace {
-
-const char* kConfigUnmanagedSharedConnected =
-    "{ \"GUID\": \"wifi0\", \"Type\": \"wifi\", \"State\": \"online\", "
-    "  \"Security\": \"wpa\" }";
-const char* kConfigManagedSharedConnectable =
-    "{ \"GUID\": \"wifi1\", \"Type\": \"wifi\", \"State\": \"idle\", "
-    "  \"Connectable\": true, \"Security\": \"wpa\" }";
-
-const char* kPolicy =
-    "[ { \"GUID\": \"wifi1\","
-    "    \"Name\": \"wifi1\","
-    "    \"Type\": \"WiFi\","
-    "    \"WiFi\": {"
-    "      \"Security\": \"WPA-PSK\","
-    "      \"SSID\": \"wifi1\","
-    "      \"Passphrase\": \"passphrase\""
-    "    }"
-    "} ]";
-
-}  // namespace
-
-TEST_F(NetworkConnectionHandlerTest, ReconnectOnCertLoading) {
-  EXPECT_TRUE(Configure(kConfigUnmanagedSharedConnected));
-  EXPECT_TRUE(Configure(kConfigManagedSharedConnectable));
-  test_manager_client_->SetBestServiceToConnect("wifi1");
-
-  // User login shouldn't trigger any change until the certificates and policy
-  // are loaded.
-  LoginToRegularUser();
-  EXPECT_EQ(shill::kStateOnline,
-            GetServiceStringProperty("wifi0", shill::kStateProperty));
-  EXPECT_EQ(shill::kStateIdle,
-            GetServiceStringProperty("wifi1", shill::kStateProperty));
-
-  // Applying the policy which restricts autoconnect should disconnect from the
-  // shared, unmanaged network.
-  base::DictionaryValue global_config;
-  global_config.SetBooleanWithoutPathExpansion(
-      ::onc::global_network_config::kAllowOnlyPolicyNetworksToAutoconnect,
-      true);
-
-  SetupPolicy(kPolicy, global_config, false /* load as device policy */);
-  EXPECT_EQ(shill::kStateIdle,
-            GetServiceStringProperty("wifi0", shill::kStateProperty));
-  EXPECT_EQ(shill::kStateIdle,
-            GetServiceStringProperty("wifi1", shill::kStateProperty));
-
-  // Certificate loading should trigger connecting to the 'best' network.
-  StartCertLoader();
-  EXPECT_EQ(shill::kStateIdle,
-            GetServiceStringProperty("wifi0", shill::kStateProperty));
-  EXPECT_EQ(shill::kStateOnline,
-            GetServiceStringProperty("wifi1", shill::kStateProperty));
-}
-
-TEST_F(NetworkConnectionHandlerTest, DisconnectOnPolicyLoading) {
-  EXPECT_TRUE(Configure(kConfigUnmanagedSharedConnected));
-  EXPECT_TRUE(Configure(kConfigManagedSharedConnectable));
-
-  // User login and certificate loading shouldn't trigger any change until the
-  // policy is loaded.
-  LoginToRegularUser();
-  StartCertLoader();
-  EXPECT_EQ(shill::kStateOnline,
-            GetServiceStringProperty("wifi0", shill::kStateProperty));
-  EXPECT_EQ(shill::kStateIdle,
-            GetServiceStringProperty("wifi1", shill::kStateProperty));
-
-  base::DictionaryValue global_config;
-  global_config.SetBooleanWithoutPathExpansion(
-      ::onc::global_network_config::kAllowOnlyPolicyNetworksToAutoconnect,
-      true);
-
-  // Applying the policy which restricts autoconnect should disconnect from the
-  // shared, unmanaged network.
-  // Because no best service is set, the fake implementation of
-  // ConnectToBestServices will be a no-op.
-  SetupPolicy(kPolicy, global_config, false /* load as device policy */);
-  EXPECT_EQ(shill::kStateIdle,
-            GetServiceStringProperty("wifi0", shill::kStateProperty));
-  EXPECT_EQ(shill::kStateIdle,
-            GetServiceStringProperty("wifi1", shill::kStateProperty));
-}
-
-TEST_F(NetworkConnectionHandlerTest, ReconnectOnEmptyPolicyLoading) {
-  EXPECT_TRUE(Configure(kConfigUnmanagedSharedConnected));
-  EXPECT_TRUE(Configure(kConfigManagedSharedConnectable));
-  test_manager_client_->SetBestServiceToConnect("wifi1");
-
-  // User login and certificate loading shouldn't trigger any change until the
-  // policy is loaded.
-  LoginToRegularUser();
-  StartCertLoader();
-  EXPECT_EQ(shill::kStateOnline,
-            GetServiceStringProperty("wifi0", shill::kStateProperty));
-  EXPECT_EQ(shill::kStateIdle,
-            GetServiceStringProperty("wifi1", shill::kStateProperty));
-
-  // Apply an empty policy should trigger connecting to the 'best' network.
-  base::DictionaryValue global_config;
-  SetupPolicy(kPolicy, global_config, false /* load as device policy */);
-  EXPECT_EQ(shill::kStateIdle,
-            GetServiceStringProperty("wifi0", shill::kStateProperty));
-  EXPECT_EQ(shill::kStateOnline,
-            GetServiceStringProperty("wifi1", shill::kStateProperty));
-}
-
 }  // namespace chromeos
 
 #endif
diff --git a/chromeos/network/network_handler.cc b/chromeos/network/network_handler.cc
index ae26710..e54c935 100644
--- a/chromeos/network/network_handler.cc
+++ b/chromeos/network/network_handler.cc
@@ -6,6 +6,7 @@
 
 #include "base/threading/worker_pool.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
+#include "chromeos/network/auto_connect_handler.h"
 #include "chromeos/network/client_cert_resolver.h"
 #include "chromeos/network/geolocation_handler.h"
 #include "chromeos/network/managed_network_configuration_handler_impl.h"
@@ -38,6 +39,7 @@
   managed_network_configuration_handler_.reset(
       new ManagedNetworkConfigurationHandlerImpl());
   if (CertLoader::IsInitialized()) {
+    auto_connect_handler_.reset(new AutoConnectHandler());
     network_cert_migrator_.reset(new NetworkCertMigrator());
     client_cert_resolver_.reset(new ClientCertResolver());
   }
@@ -71,6 +73,12 @@
     client_cert_resolver_->Init(network_state_handler_.get(),
                                 managed_network_configuration_handler_.get());
   }
+  if (auto_connect_handler_) {
+    auto_connect_handler_->Init(client_cert_resolver_.get(),
+                                network_connection_handler_.get(),
+                                network_state_handler_.get(),
+                                managed_network_configuration_handler_.get());
+  }
   network_sms_handler_->Init();
   geolocation_handler_->Init();
 }
diff --git a/chromeos/network/network_handler.h b/chromeos/network/network_handler.h
index 6949d70..d5dc403 100644
--- a/chromeos/network/network_handler.h
+++ b/chromeos/network/network_handler.h
@@ -13,6 +13,7 @@
 
 namespace chromeos {
 
+class AutoConnectHandler;
 class ClientCertResolver;
 class GeolocationHandler;
 class ManagedNetworkConfigurationHandler;
@@ -79,6 +80,7 @@
   scoped_ptr<ClientCertResolver> client_cert_resolver_;
   scoped_ptr<NetworkActivationHandler> network_activation_handler_;
   scoped_ptr<NetworkConnectionHandler> network_connection_handler_;
+  scoped_ptr<AutoConnectHandler> auto_connect_handler_;
   scoped_ptr<NetworkSmsHandler> network_sms_handler_;
   scoped_ptr<GeolocationHandler> geolocation_handler_;
 
diff --git a/chromeos/network/network_policy_observer.h b/chromeos/network/network_policy_observer.h
index c7af61e..924a036 100644
--- a/chromeos/network/network_policy_observer.h
+++ b/chromeos/network/network_policy_observer.h
@@ -13,10 +13,11 @@
 
 class NetworkPolicyObserver {
  public:
-  // Called when the policy for |userhash| was set (also when it was updated).
-  // Note that the policy might not have been applied yet at that time.
-  // An empty |userhash| designates the device policy.
-  virtual void PolicyChanged(const std::string& userhash) {}
+  // Called when the policies for |userhash| were set (also when they were
+  // updated). An empty |userhash| designates the device policy.
+  // Note that the policies might be empty and might not have been applied yet
+  // at that time.
+  virtual void PoliciesChanged(const std::string& userhash) {}
 
   // Called every time a policy application for |userhash| finished. This is
   // only called once no more policies are pending for |userhash|.
diff --git a/chromeos/network/network_profile_handler.h b/chromeos/network/network_profile_handler.h
index f3970ad..4d088bd 100644
--- a/chromeos/network/network_profile_handler.h
+++ b/chromeos/network/network_profile_handler.h
@@ -61,6 +61,7 @@
   static std::string GetSharedProfilePath();
 
  protected:
+  friend class AutoConnectHandlerTest;
   friend class ClientCertResolverTest;
   friend class NetworkConnectionHandlerTest;
   friend class NetworkHandler;
diff --git a/components/components_tests.gyp b/components/components_tests.gyp
index 76b656a..bfd0b92 100644
--- a/components/components_tests.gyp
+++ b/components/components_tests.gyp
@@ -284,6 +284,7 @@
             # TODO(blundell): Eliminate the need for this dependency in code
             # that iOS shares. crbug.com/325243
             '../content/content_shell_and_tests.gyp:test_support_content',
+            '../sql/sql.gyp:test_support_sql',
             '../sync/sync.gyp:sync',
             '../sync/sync.gyp:test_support_sync_api',
             '../testing/gmock.gyp:gmock',
diff --git a/components/copresence/handlers/directive_handler.cc b/components/copresence/handlers/directive_handler.cc
index c2f3b8a..22138ac 100644
--- a/components/copresence/handlers/directive_handler.cc
+++ b/components/copresence/handlers/directive_handler.cc
@@ -5,11 +5,18 @@
 #include "components/copresence/handlers/directive_handler.h"
 
 #include "base/bind.h"
+#include "base/guid.h"
 #include "base/logging.h"
 #include "base/time/time.h"
 #include "components/copresence/handlers/audio/audio_directive_handler_impl.h"
 #include "components/copresence/proto/data.pb.h"
 
+namespace {
+
+const int kMaxUnlabeledDirectiveTtl = 60000;  // 1 minute
+
+}  // namespace
+
 namespace copresence {
 
 // Public functions
@@ -24,6 +31,7 @@
 void DirectiveHandler::Start(WhispernetClient* whispernet_client,
                              const TokensCallback& tokens_cb) {
   audio_handler_->Initialize(whispernet_client, tokens_cb);
+  DVLOG(2) << "Directive handler starting";
 
   is_started_ = true;
 
@@ -35,7 +43,10 @@
   pending_directives_.clear();
 }
 
-void DirectiveHandler::AddDirective(const Directive& directive) {
+void DirectiveHandler::AddDirective(const Directive& original_directive) {
+  // We may need to modify the directive's TTL.
+  Directive directive(original_directive);
+
   // We only handle transmit and receive directives.
   // WiFi and BLE scans aren't implemented.
   DCHECK_EQ(directive.instruction_type(), TOKEN);
@@ -43,9 +54,20 @@
   std::string op_id = directive.published_message_id();
   if (op_id.empty())
     op_id = directive.subscription_id();
+
+  // GCM directives will not have a publish or subscribe ID populated.
   if (op_id.empty()) {
-    NOTREACHED() << "No operation associated with directive!";
-    return;
+    op_id = base::GenerateGUID();
+    DVLOG(3) << "No operation associated with directive. Setting op id to "
+             << op_id;
+
+    // The app can't cancel these directives, so make sure they're not too long.
+    if (directive.ttl_millis() > kMaxUnlabeledDirectiveTtl) {
+      DVLOG(2) << "Cutting TTL of unlabeled directive from "
+               << directive.ttl_millis() << " down to "
+               << kMaxUnlabeledDirectiveTtl << " milliseconds";
+      directive.set_ttl_millis(kMaxUnlabeledDirectiveTtl);
+    }
   }
 
   if (!is_started_) {
diff --git a/components/copresence/handlers/directive_handler_unittest.cc b/components/copresence/handlers/directive_handler_unittest.cc
index 30a0a96..c388b72 100644
--- a/components/copresence/handlers/directive_handler_unittest.cc
+++ b/components/copresence/handlers/directive_handler_unittest.cc
@@ -13,15 +13,25 @@
 using testing::ElementsAre;
 using testing::IsEmpty;
 
+namespace {
+
+const int64 kMaxUnlabeledTtl = 60000;  // 1 minute
+const int64 kExcessiveUnlabeledTtl = 120000;  // 2 minutes
+const int64 kDefaultTtl = 600000;  // 10 minutes
+
+}  // namespace
+
 namespace copresence {
 
 Directive CreateDirective(const std::string& publish_id,
                           const std::string& subscribe_id,
-                          const std::string& token) {
+                          const std::string& token,
+                          int64 ttl_ms) {
   Directive directive;
   directive.set_instruction_type(TOKEN);
   directive.set_published_message_id(publish_id);
   directive.set_subscription_id(subscribe_id);
+  directive.set_ttl_millis(ttl_ms);
 
   TokenInstruction* instruction = new TokenInstruction;
   instruction->set_token_id(token);
@@ -31,6 +41,12 @@
   return directive;
 }
 
+Directive CreateDirective(const std::string& publish_id,
+                          const std::string& subscribe_id,
+                          const std::string& token) {
+  return CreateDirective(publish_id, subscribe_id, token, kDefaultTtl);
+}
+
 class FakeAudioDirectiveHandler final : public AudioDirectiveHandler {
  public:
   FakeAudioDirectiveHandler() {}
@@ -40,8 +56,9 @@
 
   void AddInstruction(const TokenInstruction& instruction,
                       const std::string& /* op_id */,
-                      base::TimeDelta /* ttl_ms */) override {
+                      base::TimeDelta ttl) override {
     added_tokens_.push_back(instruction.token_id());
+    added_ttls_.push_back(ttl.InMilliseconds());
   }
 
   void RemoveInstructions(const std::string& op_id) override {
@@ -62,12 +79,17 @@
     return added_tokens_;
   }
 
+  const std::vector<int64>& added_ttls() const {
+    return added_ttls_;
+  }
+
   const std::vector<std::string>& removed_operations() const {
     return removed_operations_;
   }
 
  private:
   std::vector<std::string> added_tokens_;
+  std::vector<int64> added_ttls_;
   std::vector<std::string> removed_operations_;
 };
 
@@ -80,11 +102,25 @@
             make_scoped_ptr<AudioDirectiveHandler>(audio_handler_)) {}
 
  protected:
+  void StartDirectiveHandler() {
+    directive_handler_.Start(whispernet_client_.get(), TokensCallback());
+  }
+
   scoped_ptr<WhispernetClient> whispernet_client_;
   FakeAudioDirectiveHandler* audio_handler_;
   DirectiveHandler directive_handler_;
 };
 
+TEST_F(DirectiveHandlerTest, DirectiveTtl) {
+  StartDirectiveHandler();
+  directive_handler_.AddDirective(
+      CreateDirective("", "", "token 1", kMaxUnlabeledTtl));
+  directive_handler_.AddDirective(
+      CreateDirective("", "", "token 2", kExcessiveUnlabeledTtl));
+  EXPECT_THAT(audio_handler_->added_ttls(),
+      ElementsAre(kMaxUnlabeledTtl, kMaxUnlabeledTtl));
+}
+
 TEST_F(DirectiveHandlerTest, Queuing) {
   directive_handler_.AddDirective(CreateDirective("id 1", "", "token 1"));
   directive_handler_.AddDirective(CreateDirective("", "id 1", "token 2"));
@@ -94,10 +130,11 @@
   EXPECT_THAT(audio_handler_->added_tokens(), IsEmpty());
   EXPECT_THAT(audio_handler_->removed_operations(), IsEmpty());
 
-  directive_handler_.Start(whispernet_client_.get(), TokensCallback());
+  StartDirectiveHandler();
   directive_handler_.RemoveDirectives("id 3");
 
   EXPECT_THAT(audio_handler_->added_tokens(), ElementsAre("token 3"));
+  EXPECT_THAT(audio_handler_->added_ttls(), ElementsAre(kDefaultTtl));
   EXPECT_THAT(audio_handler_->removed_operations(), ElementsAre("id 3"));
 }
 
diff --git a/components/data_reduction_proxy_version_header.target.darwin-arm.mk b/components/data_reduction_proxy_version_header.target.darwin-arm.mk
index b0dad4b..8a56cd5 100644
--- a/components/data_reduction_proxy_version_header.target.darwin-arm.mk
+++ b/components/data_reduction_proxy_version_header.target.darwin-arm.mk
@@ -22,7 +22,7 @@
 $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
 $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h: $(LOCAL_PATH)/chrome/VERSION $(LOCAL_PATH)/components/data_reduction_proxy/core/common/version.h.in $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating version header file: "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h" ($@)"
-	$(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common; python ../build/util/version.py -e "VERSION_FULL=\"40.0.2214.0\"" data_reduction_proxy/core/common/version.h.in "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h"
+	$(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common; python ../build/util/version.py -e "VERSION_FULL=\"40.0.2214.10\"" data_reduction_proxy/core/common/version.h.in "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h"
 
 
 
diff --git a/components/data_reduction_proxy_version_header.target.darwin-arm64.mk b/components/data_reduction_proxy_version_header.target.darwin-arm64.mk
index b0dad4b..8a56cd5 100644
--- a/components/data_reduction_proxy_version_header.target.darwin-arm64.mk
+++ b/components/data_reduction_proxy_version_header.target.darwin-arm64.mk
@@ -22,7 +22,7 @@
 $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
 $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h: $(LOCAL_PATH)/chrome/VERSION $(LOCAL_PATH)/components/data_reduction_proxy/core/common/version.h.in $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating version header file: "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h" ($@)"
-	$(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common; python ../build/util/version.py -e "VERSION_FULL=\"40.0.2214.0\"" data_reduction_proxy/core/common/version.h.in "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h"
+	$(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common; python ../build/util/version.py -e "VERSION_FULL=\"40.0.2214.10\"" data_reduction_proxy/core/common/version.h.in "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h"
 
 
 
diff --git a/components/data_reduction_proxy_version_header.target.darwin-mips.mk b/components/data_reduction_proxy_version_header.target.darwin-mips.mk
index b0dad4b..8a56cd5 100644
--- a/components/data_reduction_proxy_version_header.target.darwin-mips.mk
+++ b/components/data_reduction_proxy_version_header.target.darwin-mips.mk
@@ -22,7 +22,7 @@
 $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
 $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h: $(LOCAL_PATH)/chrome/VERSION $(LOCAL_PATH)/components/data_reduction_proxy/core/common/version.h.in $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating version header file: "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h" ($@)"
-	$(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common; python ../build/util/version.py -e "VERSION_FULL=\"40.0.2214.0\"" data_reduction_proxy/core/common/version.h.in "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h"
+	$(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common; python ../build/util/version.py -e "VERSION_FULL=\"40.0.2214.10\"" data_reduction_proxy/core/common/version.h.in "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h"
 
 
 
diff --git a/components/data_reduction_proxy_version_header.target.darwin-mips64.mk b/components/data_reduction_proxy_version_header.target.darwin-mips64.mk
index b0dad4b..8a56cd5 100644
--- a/components/data_reduction_proxy_version_header.target.darwin-mips64.mk
+++ b/components/data_reduction_proxy_version_header.target.darwin-mips64.mk
@@ -22,7 +22,7 @@
 $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
 $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h: $(LOCAL_PATH)/chrome/VERSION $(LOCAL_PATH)/components/data_reduction_proxy/core/common/version.h.in $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating version header file: "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h" ($@)"
-	$(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common; python ../build/util/version.py -e "VERSION_FULL=\"40.0.2214.0\"" data_reduction_proxy/core/common/version.h.in "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h"
+	$(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common; python ../build/util/version.py -e "VERSION_FULL=\"40.0.2214.10\"" data_reduction_proxy/core/common/version.h.in "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h"
 
 
 
diff --git a/components/data_reduction_proxy_version_header.target.darwin-x86.mk b/components/data_reduction_proxy_version_header.target.darwin-x86.mk
index b0dad4b..8a56cd5 100644
--- a/components/data_reduction_proxy_version_header.target.darwin-x86.mk
+++ b/components/data_reduction_proxy_version_header.target.darwin-x86.mk
@@ -22,7 +22,7 @@
 $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
 $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h: $(LOCAL_PATH)/chrome/VERSION $(LOCAL_PATH)/components/data_reduction_proxy/core/common/version.h.in $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating version header file: "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h" ($@)"
-	$(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common; python ../build/util/version.py -e "VERSION_FULL=\"40.0.2214.0\"" data_reduction_proxy/core/common/version.h.in "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h"
+	$(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common; python ../build/util/version.py -e "VERSION_FULL=\"40.0.2214.10\"" data_reduction_proxy/core/common/version.h.in "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h"
 
 
 
diff --git a/components/data_reduction_proxy_version_header.target.darwin-x86_64.mk b/components/data_reduction_proxy_version_header.target.darwin-x86_64.mk
index b0dad4b..8a56cd5 100644
--- a/components/data_reduction_proxy_version_header.target.darwin-x86_64.mk
+++ b/components/data_reduction_proxy_version_header.target.darwin-x86_64.mk
@@ -22,7 +22,7 @@
 $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
 $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h: $(LOCAL_PATH)/chrome/VERSION $(LOCAL_PATH)/components/data_reduction_proxy/core/common/version.h.in $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating version header file: "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h" ($@)"
-	$(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common; python ../build/util/version.py -e "VERSION_FULL=\"40.0.2214.0\"" data_reduction_proxy/core/common/version.h.in "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h"
+	$(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common; python ../build/util/version.py -e "VERSION_FULL=\"40.0.2214.10\"" data_reduction_proxy/core/common/version.h.in "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h"
 
 
 
diff --git a/components/data_reduction_proxy_version_header.target.linux-arm.mk b/components/data_reduction_proxy_version_header.target.linux-arm.mk
index b0dad4b..8a56cd5 100644
--- a/components/data_reduction_proxy_version_header.target.linux-arm.mk
+++ b/components/data_reduction_proxy_version_header.target.linux-arm.mk
@@ -22,7 +22,7 @@
 $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
 $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h: $(LOCAL_PATH)/chrome/VERSION $(LOCAL_PATH)/components/data_reduction_proxy/core/common/version.h.in $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating version header file: "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h" ($@)"
-	$(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common; python ../build/util/version.py -e "VERSION_FULL=\"40.0.2214.0\"" data_reduction_proxy/core/common/version.h.in "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h"
+	$(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common; python ../build/util/version.py -e "VERSION_FULL=\"40.0.2214.10\"" data_reduction_proxy/core/common/version.h.in "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h"
 
 
 
diff --git a/components/data_reduction_proxy_version_header.target.linux-arm64.mk b/components/data_reduction_proxy_version_header.target.linux-arm64.mk
index b0dad4b..8a56cd5 100644
--- a/components/data_reduction_proxy_version_header.target.linux-arm64.mk
+++ b/components/data_reduction_proxy_version_header.target.linux-arm64.mk
@@ -22,7 +22,7 @@
 $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
 $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h: $(LOCAL_PATH)/chrome/VERSION $(LOCAL_PATH)/components/data_reduction_proxy/core/common/version.h.in $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating version header file: "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h" ($@)"
-	$(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common; python ../build/util/version.py -e "VERSION_FULL=\"40.0.2214.0\"" data_reduction_proxy/core/common/version.h.in "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h"
+	$(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common; python ../build/util/version.py -e "VERSION_FULL=\"40.0.2214.10\"" data_reduction_proxy/core/common/version.h.in "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h"
 
 
 
diff --git a/components/data_reduction_proxy_version_header.target.linux-mips.mk b/components/data_reduction_proxy_version_header.target.linux-mips.mk
index b0dad4b..8a56cd5 100644
--- a/components/data_reduction_proxy_version_header.target.linux-mips.mk
+++ b/components/data_reduction_proxy_version_header.target.linux-mips.mk
@@ -22,7 +22,7 @@
 $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
 $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h: $(LOCAL_PATH)/chrome/VERSION $(LOCAL_PATH)/components/data_reduction_proxy/core/common/version.h.in $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating version header file: "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h" ($@)"
-	$(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common; python ../build/util/version.py -e "VERSION_FULL=\"40.0.2214.0\"" data_reduction_proxy/core/common/version.h.in "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h"
+	$(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common; python ../build/util/version.py -e "VERSION_FULL=\"40.0.2214.10\"" data_reduction_proxy/core/common/version.h.in "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h"
 
 
 
diff --git a/components/data_reduction_proxy_version_header.target.linux-mips64.mk b/components/data_reduction_proxy_version_header.target.linux-mips64.mk
index b0dad4b..8a56cd5 100644
--- a/components/data_reduction_proxy_version_header.target.linux-mips64.mk
+++ b/components/data_reduction_proxy_version_header.target.linux-mips64.mk
@@ -22,7 +22,7 @@
 $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
 $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h: $(LOCAL_PATH)/chrome/VERSION $(LOCAL_PATH)/components/data_reduction_proxy/core/common/version.h.in $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating version header file: "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h" ($@)"
-	$(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common; python ../build/util/version.py -e "VERSION_FULL=\"40.0.2214.0\"" data_reduction_proxy/core/common/version.h.in "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h"
+	$(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common; python ../build/util/version.py -e "VERSION_FULL=\"40.0.2214.10\"" data_reduction_proxy/core/common/version.h.in "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h"
 
 
 
diff --git a/components/data_reduction_proxy_version_header.target.linux-x86.mk b/components/data_reduction_proxy_version_header.target.linux-x86.mk
index b0dad4b..8a56cd5 100644
--- a/components/data_reduction_proxy_version_header.target.linux-x86.mk
+++ b/components/data_reduction_proxy_version_header.target.linux-x86.mk
@@ -22,7 +22,7 @@
 $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
 $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h: $(LOCAL_PATH)/chrome/VERSION $(LOCAL_PATH)/components/data_reduction_proxy/core/common/version.h.in $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating version header file: "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h" ($@)"
-	$(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common; python ../build/util/version.py -e "VERSION_FULL=\"40.0.2214.0\"" data_reduction_proxy/core/common/version.h.in "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h"
+	$(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common; python ../build/util/version.py -e "VERSION_FULL=\"40.0.2214.10\"" data_reduction_proxy/core/common/version.h.in "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h"
 
 
 
diff --git a/components/data_reduction_proxy_version_header.target.linux-x86_64.mk b/components/data_reduction_proxy_version_header.target.linux-x86_64.mk
index b0dad4b..8a56cd5 100644
--- a/components/data_reduction_proxy_version_header.target.linux-x86_64.mk
+++ b/components/data_reduction_proxy_version_header.target.linux-x86_64.mk
@@ -22,7 +22,7 @@
 $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
 $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h: $(LOCAL_PATH)/chrome/VERSION $(LOCAL_PATH)/components/data_reduction_proxy/core/common/version.h.in $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating version header file: "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h" ($@)"
-	$(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common; python ../build/util/version.py -e "VERSION_FULL=\"40.0.2214.0\"" data_reduction_proxy/core/common/version.h.in "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h"
+	$(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common; python ../build/util/version.py -e "VERSION_FULL=\"40.0.2214.10\"" data_reduction_proxy/core/common/version.h.in "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h"
 
 
 
diff --git a/components/gcm_driver/gcm_client_impl.cc b/components/gcm_driver/gcm_client_impl.cc
index 4a68dc0..8fe3df7 100644
--- a/components/gcm_driver/gcm_client_impl.cc
+++ b/components/gcm_driver/gcm_client_impl.cc
@@ -474,7 +474,7 @@
 void GCMClientImpl::SetLastTokenFetchTime(const base::Time& time) {
   gcm_store_->SetLastTokenFetchTime(
       time,
-      base::Bind(&GCMClientImpl::IgnoreWriteResultCallback,
+      base::Bind(&GCMClientImpl::DefaultStoreCallback,
                  weak_ptr_factory_.GetWeakPtr()));
 }
 
@@ -597,11 +597,6 @@
   DCHECK(success);
 }
 
-void GCMClientImpl::IgnoreWriteResultCallback(bool success) {
-  // TODO(fgorski): Ignoring the write result for now to make sure
-  // sync_intergration_tests are not broken.
-}
-
 void GCMClientImpl::Stop() {
   DVLOG(1) << "Stopping the GCM Client";
   weak_ptr_factory_.InvalidateWeakPtrs();
diff --git a/components/gcm_driver/gcm_client_impl.h b/components/gcm_driver/gcm_client_impl.h
index c27bb7b..b6a1ab5 100644
--- a/components/gcm_driver/gcm_client_impl.h
+++ b/components/gcm_driver/gcm_client_impl.h
@@ -230,9 +230,6 @@
   // |gcm_store_| fails.
   void DefaultStoreCallback(bool success);
 
-  // Callback for store operation where result does not matter.
-  void IgnoreWriteResultCallback(bool success);
-
   // Completes the registration request.
   void OnRegisterCompleted(const std::string& app_id,
                            const std::vector<std::string>& sender_ids,
diff --git a/components/gcm_driver/gcm_driver_desktop.cc b/components/gcm_driver/gcm_driver_desktop.cc
index 352007a..6902efb 100644
--- a/components/gcm_driver/gcm_driver_desktop.cc
+++ b/components/gcm_driver/gcm_driver_desktop.cc
@@ -363,10 +363,6 @@
       gcm_enabled_(true),
       connected_(false),
       account_mapper_(new GCMAccountMapper(this)),
-      // Setting to max, to make sure it does not prompt for token reporting
-      // Before reading a reasonable value from the DB, which might be never,
-      // in which case the fetching will be triggered.
-      last_token_fetch_time_(base::Time::Max()),
       ui_thread_(ui_thread),
       io_thread_(io_thread),
       weak_ptr_factory_(this) {
@@ -776,10 +772,9 @@
     const base::Time& last_token_fetch_time) {
   DCHECK(ui_thread_->RunsTasksOnCurrentThread());
 
-  last_token_fetch_time_ = last_token_fetch_time;
-
   GCMDriver::AddAppHandler(kGCMAccountMapperAppId, account_mapper_.get());
   account_mapper_->Initialize(account_mappings);
+  last_token_fetch_time_ = last_token_fetch_time;
 
   delayed_task_controller_->SetReady();
 }
diff --git a/components/ownership/owner_settings_service.h b/components/ownership/owner_settings_service.h
index a1d7c52..9be4a0a 100644
--- a/components/ownership/owner_settings_service.h
+++ b/components/ownership/owner_settings_service.h
@@ -41,8 +41,8 @@
     // policy storage..
     virtual void OnSignedPolicyStored(bool success) {}
 
-    // Called when tentative changes were made to policy, but the policy still
-    // not signed and stored.
+    // Called when tentative changes were made to policy, but the
+    // policy is not signed and stored yet.
     //
     // TODO (ygorshenin@, crbug.com/230018): get rid of the method
     // since it creates DeviceSettingsService's dependency on
diff --git a/components/password_manager/core/browser/login_database.cc b/components/password_manager/core/browser/login_database.cc
index e1cf8a2..f2ab2e4 100644
--- a/components/password_manager/core/browser/login_database.cc
+++ b/components/password_manager/core/browser/login_database.cc
@@ -27,7 +27,7 @@
 
 namespace password_manager {
 
-static const int kCurrentVersionNumber = 8;
+static const int kCurrentVersionNumber = 9;
 static const int kCompatibleVersionNumber = 1;
 
 Pickle SerializeVector(const std::vector<base::string16>& vec) {
@@ -91,7 +91,7 @@
   s->BindString(COLUMN_SIGNON_REALM, form.signon_realm);
   s->BindInt(COLUMN_SSL_VALID, form.ssl_valid);
   s->BindInt(COLUMN_PREFERRED, form.preferred);
-  s->BindInt64(COLUMN_DATE_CREATED, form.date_created.ToTimeT());
+  s->BindInt64(COLUMN_DATE_CREATED, form.date_created.ToInternalValue());
   s->BindInt(COLUMN_BLACKLISTED_BY_USER, form.blacklisted_by_user);
   s->BindInt(COLUMN_SCHEME, form.scheme);
   s->BindInt(COLUMN_PASSWORD_TYPE, form.type);
@@ -257,6 +257,19 @@
       // Fall through.
       // TODO(gcasto): Remove use_additional_auth by copying table.
       // https://www.sqlite.org/lang_altertable.html
+    case 8: {
+      sql::Statement s;
+      s.Assign(db_.GetCachedStatement(SQL_FROM_HERE,
+                                      "UPDATE logins SET "
+                                      "date_created = "
+                                      "(date_created * ?) + ?"));
+      s.BindInt64(0, base::Time::kMicrosecondsPerSecond);
+      s.BindInt64(1, base::Time::kTimeTToMicrosecondsOffset);
+      if (!s.Run())
+        return false;
+      meta_table_.SetVersionNumber(9);
+      // Fall through.
+    }
     case kCurrentVersionNumber:
       // Already up to date
       return true;
@@ -476,7 +489,7 @@
   s.BindInt(5, form.times_used);
   s.BindString16(6, form.submit_element);
   s.BindInt64(7, form.date_synced.ToInternalValue());
-  s.BindInt64(8, form.date_created.ToTimeT());
+  s.BindInt64(8, form.date_created.ToInternalValue());
   s.BindInt(9, form.blacklisted_by_user);
   s.BindInt(10, form.scheme);
   s.BindInt(11, form.type);
@@ -527,9 +540,9 @@
   sql::Statement s(db_.GetCachedStatement(SQL_FROM_HERE,
       "DELETE FROM logins WHERE "
       "date_created >= ? AND date_created < ?"));
-  s.BindInt64(0, delete_begin.ToTimeT());
+  s.BindInt64(0, delete_begin.ToInternalValue());
   s.BindInt64(1, delete_end.is_null() ? std::numeric_limits<int64>::max()
-                                      : delete_end.ToTimeT());
+                                      : delete_end.ToInternalValue());
 
   return s.Run();
 }
@@ -571,8 +584,8 @@
   form->signon_realm = tmp;
   form->ssl_valid = (s.ColumnInt(COLUMN_SSL_VALID) > 0);
   form->preferred = (s.ColumnInt(COLUMN_PREFERRED) > 0);
-  form->date_created = base::Time::FromTimeT(
-      s.ColumnInt64(COLUMN_DATE_CREATED));
+  form->date_created =
+      base::Time::FromInternalValue(s.ColumnInt64(COLUMN_DATE_CREATED));
   form->blacklisted_by_user = (s.ColumnInt(COLUMN_BLACKLISTED_BY_USER) > 0);
   int scheme_int = s.ColumnInt(COLUMN_SCHEME);
   DCHECK((scheme_int >= 0) && (scheme_int <= PasswordForm::SCHEME_OTHER));
@@ -711,9 +724,9 @@
       "federation_url, is_zero_click FROM logins "
       "WHERE date_created >= ? AND date_created < ?"
       "ORDER BY origin_url"));
-  s.BindInt64(0, begin.ToTimeT());
+  s.BindInt64(0, begin.ToInternalValue());
   s.BindInt64(1, end.is_null() ? std::numeric_limits<int64>::max()
-                               : end.ToTimeT());
+                               : end.ToInternalValue());
 
   while (s.Step()) {
     scoped_ptr<PasswordForm> new_form(new PasswordForm());
diff --git a/components/password_manager/core/browser/login_database_unittest.cc b/components/password_manager/core/browser/login_database_unittest.cc
index d738ab4..4faaa8c 100644
--- a/components/password_manager/core/browser/login_database_unittest.cc
+++ b/components/password_manager/core/browser/login_database_unittest.cc
@@ -8,11 +8,15 @@
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/memory/scoped_vector.h"
+#include "base/path_service.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/time/time.h"
 #include "components/autofill/core/common/password_form.h"
 #include "components/password_manager/core/browser/psl_matching_helper.h"
+#include "sql/connection.h"
+#include "sql/statement.h"
+#include "sql/test/test_helpers.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -927,8 +931,6 @@
   form.submit_element = ASCIIToUTF16("submit_element");
   form.date_synced = base::Time::Now();
   form.date_created = base::Time::Now() - base::TimeDelta::FromDays(1);
-  // Remove this line after crbug/374132 is fixed.
-  form.date_created = base::Time::FromTimeT(form.date_created.ToTimeT());
   form.blacklisted_by_user = true;
   form.scheme = PasswordForm::SCHEME_BASIC;
   form.type = PasswordForm::TYPE_GENERATED;
@@ -962,4 +964,82 @@
 }
 #endif  // defined(OS_POSIX)
 
+class LoginDatabaseMigrationTest : public testing::Test {
+ protected:
+  void SetUp() override {
+    PathService::Get(base::DIR_SOURCE_ROOT, &database_dump_);
+    database_dump_ = database_dump_.AppendASCII("components")
+                         .AppendASCII("test")
+                         .AppendASCII("data")
+                         .AppendASCII("password_manager")
+                         .AppendASCII("login_db_v8.sql");
+
+    ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
+    database_path_ = temp_dir_.path().AppendASCII("test.db");
+    ASSERT_TRUE(
+        sql::test::CreateDatabaseFromSQL(database_path_, database_dump_));
+  }
+
+  void TearDown() override {
+    if (!database_path_.empty())
+      base::DeleteFile(database_path_, false);
+  }
+
+  // Returns an empty vector on failure. Otherwise returns the values of the
+  // date_created field from the logins table. The order of the returned rows
+  // is well-defined.
+  std::vector<int64_t> GetDateCreated(const base::FilePath& db_path) {
+    sql::Connection db;
+    std::vector<int64_t> results;
+    if (!db.Open(db_path))
+      return results;
+
+    sql::Statement s(db.GetCachedStatement(
+        SQL_FROM_HERE,
+        "SELECT date_created from logins order by username_value"));
+    if (!s.is_valid()) {
+      db.Close();
+      return results;
+    }
+
+    while (s.Step())
+      results.push_back(s.ColumnInt64(0));
+
+    s.Clear();
+    db.Close();
+    return results;
+  }
+
+  base::FilePath database_path_;
+
+ private:
+  base::FilePath database_dump_;
+  base::ScopedTempDir temp_dir_;
+};
+
+// Tests the migration of the login database from version 8 to version 9.
+TEST_F(LoginDatabaseMigrationTest, MigrationV8ToV9) {
+  // Original date, in seconds since UTC epoch.
+  std::vector<int64_t> date_created(GetDateCreated(database_path_));
+  ASSERT_EQ(1402955745, date_created[0]);
+  ASSERT_EQ(1402950000, date_created[1]);
+
+  // Assert that the database was successfully opened and migrated.
+  {
+    LoginDatabase db;
+    ASSERT_TRUE(db.Init(database_path_));
+  }
+
+  // New date, in microseconds since platform independent epoch.
+  std::vector<int64_t> new_date_created(GetDateCreated(database_path_));
+  ASSERT_EQ(13047429345000000, new_date_created[0]);
+  ASSERT_EQ(13047423600000000, new_date_created[1]);
+
+  // Check that the two dates match up.
+  for (size_t i = 0; i < date_created.size(); ++i) {
+    EXPECT_EQ(base::Time::FromInternalValue(new_date_created[i]),
+              base::Time::FromTimeT(date_created[i]));
+  }
+}
+
 }  // namespace password_manager
diff --git a/components/rappor/rappor_service.cc b/components/rappor/rappor_service.cc
index de814c4..e6879d2 100644
--- a/components/rappor/rappor_service.cc
+++ b/components/rappor/rappor_service.cc
@@ -108,7 +108,7 @@
     return;
   DVLOG(1) << "RapporService started. Reporting to " << server_url.spec();
   DCHECK(!uploader_);
-  Initialize(LoadCohort(), LoadSecret(), reporting_level_);
+  Initialize(LoadCohort(), LoadSecret(), reporting_level);
   uploader_.reset(new LogUploader(server_url, kMimeType, request_context));
   log_rotation_timer_.Start(
       FROM_HERE,
@@ -192,8 +192,10 @@
 }
 
 bool RapporService::ExportMetrics(RapporReports* reports) {
-  if (metrics_map_.empty())
+  if (metrics_map_.empty()) {
+    DVLOG(2) << "metrics_map_ is empty.";
     return false;
+  }
 
   DCHECK_GE(cohort_, 0);
   reports->set_cohort(cohort_);
@@ -236,8 +238,11 @@
   DCHECK(IsInitialized());
   // Skip this metric if it's reporting level is less than the enabled
   // reporting level.
-  if (reporting_level_ < parameters.reporting_level)
+  if (reporting_level_ < parameters.reporting_level) {
+    DVLOG(2) << "Metric not logged due to reporting_level "
+             << reporting_level_ << " < " << parameters.reporting_level;
     return;
+  }
   RapporMetric* metric = LookUpMetric(metric_name, parameters);
   metric->AddSample(sample);
 }
diff --git a/components/test/data/password_manager/login_db_v8.sql b/components/test/data/password_manager/login_db_v8.sql
new file mode 100644
index 0000000..57b4db6
--- /dev/null
+++ b/components/test/data/password_manager/login_db_v8.sql
@@ -0,0 +1,11 @@
+PRAGMA foreign_keys=OFF;
+BEGIN TRANSACTION;
+CREATE TABLE meta(key LONGVARCHAR NOT NULL UNIQUE PRIMARY KEY, value LONGVARCHAR);
+INSERT INTO "meta" VALUES('last_compatible_version','1');
+INSERT INTO "meta" VALUES('version','8');
+CREATE TABLE logins (origin_url VARCHAR NOT NULL, action_url VARCHAR, username_element VARCHAR, username_value VARCHAR, password_element VARCHAR, password_value BLOB, submit_element VARCHAR, signon_realm VARCHAR NOT NULL,ssl_valid INTEGER NOT NULL,preferred INTEGER NOT NULL,date_created INTEGER NOT NULL,blacklisted_by_user INTEGER NOT NULL,scheme INTEGER NOT NULL,password_type INTEGER,possible_usernames BLOB,times_used INTEGER,form_data BLOB,use_additional_auth INTEGER,date_synced INTEGER, display_name VARCHAR, avatar_url VARCHAR, federation_url VARCHAR, is_zero_click INTEGER,UNIQUE (origin_url, username_element, username_value, password_element, submit_element, signon_realm));
+INSERT INTO "logins" VALUES('https://accounts.google.com/ServiceLogin','https://accounts.google.com/ServiceLoginAuth','Email','theerikchen','Passwd',X'','','https://accounts.google.com/',1,1,1402955745,0,0,0,X'00000000',1,X'18000000020000000000000000000000000000000000000000000000',NULL,0,'','','',0);
+INSERT INTO "logins" VALUES('https://accounts.google.com/ServiceLogin','https://accounts.google.com/ServiceLoginAuth','Email','theerikchen2','Passwd',X'','','https://accounts.google.com/',1,1,1402950000,0,0,0,X'00000000',1,X'18000000020000000000000000000000000000000000000000000000',NULL,0,'','','',0);
+CREATE INDEX logins_signon ON logins (signon_realm);
+COMMIT;
+
diff --git a/content/app/resources/content_resources.grd b/content/app/resources/content_resources.grd
index 0c189f3..9c4373b 100644
--- a/content/app/resources/content_resources.grd
+++ b/content/app/resources/content_resources.grd
@@ -47,6 +47,7 @@
       <structure type="chrome_scaled_image" name="IDR_MEDIAPLAYER_FULLSCREEN_BUTTON_DISABLED" file="mediaplayer_fullscreen_disabled.png" />
       <structure type="chrome_scaled_image" name="IDR_MEDIAPLAYER_CAST_BUTTON_OFF" file="mediaplayer_cast_off.png" />
       <structure type="chrome_scaled_image" name="IDR_MEDIAPLAYER_CAST_BUTTON_ON" file="mediaplayer_cast_on.png" />
+      <structure type="chrome_scaled_image" name="IDR_MEDIAPLAYER_OVERLAY_CAST_BUTTON_OFF" file="mediaplayer_overlay_cast_off.png" />
       <structure type="chrome_scaled_image" name="IDR_MEDIAPLAYER_OVERLAY_PLAY_BUTTON" file="mediaplayer_overlay_play.png" />
       <if expr="is_macosx">
         <structure type="chrome_scaled_image" name="IDR_OVERHANG_PATTERN" file="overhang_pattern.png" />
diff --git a/content/app/resources/content_resources.target.darwin-arm.mk b/content/app/resources/content_resources.target.darwin-arm.mk
index 07859bd..68634ed 100644
--- a/content/app/resources/content_resources.target.darwin-arm.mk
+++ b/content/app/resources/content_resources.target.darwin-arm.mk
@@ -20,7 +20,7 @@
 $(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/content/app/resources/content_resources.grd $(LOCAL_PATH)/content/app/resources/default_100_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_off.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_on.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_overlay_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel_pressed.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier_results.png $(LOCAL_PATH)/content/app/resources/default_100_percent/textarea_resize_corner.png $(LOCAL_PATH)/content/app/resources/default_200_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_200_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_200_percent/textarea_resize_corner.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/content/app/resources/content_resources.grd $(LOCAL_PATH)/content/app/resources/default_100_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_off.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_on.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_overlay_cast_off.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_overlay_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel_pressed.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier_results.png $(LOCAL_PATH)/content/app/resources/default_100_percent/textarea_resize_corner.png $(LOCAL_PATH)/content/app/resources/default_200_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_200_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_200_percent/textarea_resize_corner.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from content_resources.grd ($@)"
 	$(hide)cd $(gyp_local_path)/content/app/resources; mkdir -p $(gyp_shared_intermediate_dir)/content/app/resources/grit $(gyp_shared_intermediate_dir)/content/app/resources; python ../../../tools/grit/grit.py -i content_resources.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/content/app/resources/" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" --no-output-all-resource-defines -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc -D enable_notifications
 
diff --git a/content/app/resources/content_resources.target.darwin-arm64.mk b/content/app/resources/content_resources.target.darwin-arm64.mk
index 07859bd..68634ed 100644
--- a/content/app/resources/content_resources.target.darwin-arm64.mk
+++ b/content/app/resources/content_resources.target.darwin-arm64.mk
@@ -20,7 +20,7 @@
 $(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/content/app/resources/content_resources.grd $(LOCAL_PATH)/content/app/resources/default_100_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_off.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_on.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_overlay_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel_pressed.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier_results.png $(LOCAL_PATH)/content/app/resources/default_100_percent/textarea_resize_corner.png $(LOCAL_PATH)/content/app/resources/default_200_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_200_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_200_percent/textarea_resize_corner.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/content/app/resources/content_resources.grd $(LOCAL_PATH)/content/app/resources/default_100_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_off.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_on.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_overlay_cast_off.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_overlay_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel_pressed.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier_results.png $(LOCAL_PATH)/content/app/resources/default_100_percent/textarea_resize_corner.png $(LOCAL_PATH)/content/app/resources/default_200_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_200_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_200_percent/textarea_resize_corner.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from content_resources.grd ($@)"
 	$(hide)cd $(gyp_local_path)/content/app/resources; mkdir -p $(gyp_shared_intermediate_dir)/content/app/resources/grit $(gyp_shared_intermediate_dir)/content/app/resources; python ../../../tools/grit/grit.py -i content_resources.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/content/app/resources/" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" --no-output-all-resource-defines -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc -D enable_notifications
 
diff --git a/content/app/resources/content_resources.target.darwin-mips.mk b/content/app/resources/content_resources.target.darwin-mips.mk
index 07859bd..68634ed 100644
--- a/content/app/resources/content_resources.target.darwin-mips.mk
+++ b/content/app/resources/content_resources.target.darwin-mips.mk
@@ -20,7 +20,7 @@
 $(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/content/app/resources/content_resources.grd $(LOCAL_PATH)/content/app/resources/default_100_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_off.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_on.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_overlay_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel_pressed.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier_results.png $(LOCAL_PATH)/content/app/resources/default_100_percent/textarea_resize_corner.png $(LOCAL_PATH)/content/app/resources/default_200_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_200_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_200_percent/textarea_resize_corner.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/content/app/resources/content_resources.grd $(LOCAL_PATH)/content/app/resources/default_100_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_off.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_on.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_overlay_cast_off.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_overlay_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel_pressed.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier_results.png $(LOCAL_PATH)/content/app/resources/default_100_percent/textarea_resize_corner.png $(LOCAL_PATH)/content/app/resources/default_200_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_200_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_200_percent/textarea_resize_corner.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from content_resources.grd ($@)"
 	$(hide)cd $(gyp_local_path)/content/app/resources; mkdir -p $(gyp_shared_intermediate_dir)/content/app/resources/grit $(gyp_shared_intermediate_dir)/content/app/resources; python ../../../tools/grit/grit.py -i content_resources.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/content/app/resources/" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" --no-output-all-resource-defines -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc -D enable_notifications
 
diff --git a/content/app/resources/content_resources.target.darwin-mips64.mk b/content/app/resources/content_resources.target.darwin-mips64.mk
index 07859bd..68634ed 100644
--- a/content/app/resources/content_resources.target.darwin-mips64.mk
+++ b/content/app/resources/content_resources.target.darwin-mips64.mk
@@ -20,7 +20,7 @@
 $(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/content/app/resources/content_resources.grd $(LOCAL_PATH)/content/app/resources/default_100_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_off.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_on.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_overlay_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel_pressed.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier_results.png $(LOCAL_PATH)/content/app/resources/default_100_percent/textarea_resize_corner.png $(LOCAL_PATH)/content/app/resources/default_200_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_200_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_200_percent/textarea_resize_corner.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/content/app/resources/content_resources.grd $(LOCAL_PATH)/content/app/resources/default_100_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_off.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_on.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_overlay_cast_off.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_overlay_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel_pressed.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier_results.png $(LOCAL_PATH)/content/app/resources/default_100_percent/textarea_resize_corner.png $(LOCAL_PATH)/content/app/resources/default_200_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_200_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_200_percent/textarea_resize_corner.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from content_resources.grd ($@)"
 	$(hide)cd $(gyp_local_path)/content/app/resources; mkdir -p $(gyp_shared_intermediate_dir)/content/app/resources/grit $(gyp_shared_intermediate_dir)/content/app/resources; python ../../../tools/grit/grit.py -i content_resources.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/content/app/resources/" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" --no-output-all-resource-defines -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc -D enable_notifications
 
diff --git a/content/app/resources/content_resources.target.darwin-x86.mk b/content/app/resources/content_resources.target.darwin-x86.mk
index 07859bd..68634ed 100644
--- a/content/app/resources/content_resources.target.darwin-x86.mk
+++ b/content/app/resources/content_resources.target.darwin-x86.mk
@@ -20,7 +20,7 @@
 $(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/content/app/resources/content_resources.grd $(LOCAL_PATH)/content/app/resources/default_100_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_off.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_on.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_overlay_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel_pressed.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier_results.png $(LOCAL_PATH)/content/app/resources/default_100_percent/textarea_resize_corner.png $(LOCAL_PATH)/content/app/resources/default_200_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_200_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_200_percent/textarea_resize_corner.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/content/app/resources/content_resources.grd $(LOCAL_PATH)/content/app/resources/default_100_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_off.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_on.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_overlay_cast_off.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_overlay_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel_pressed.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier_results.png $(LOCAL_PATH)/content/app/resources/default_100_percent/textarea_resize_corner.png $(LOCAL_PATH)/content/app/resources/default_200_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_200_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_200_percent/textarea_resize_corner.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from content_resources.grd ($@)"
 	$(hide)cd $(gyp_local_path)/content/app/resources; mkdir -p $(gyp_shared_intermediate_dir)/content/app/resources/grit $(gyp_shared_intermediate_dir)/content/app/resources; python ../../../tools/grit/grit.py -i content_resources.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/content/app/resources/" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" --no-output-all-resource-defines -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc -D enable_notifications
 
diff --git a/content/app/resources/content_resources.target.darwin-x86_64.mk b/content/app/resources/content_resources.target.darwin-x86_64.mk
index 07859bd..68634ed 100644
--- a/content/app/resources/content_resources.target.darwin-x86_64.mk
+++ b/content/app/resources/content_resources.target.darwin-x86_64.mk
@@ -20,7 +20,7 @@
 $(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/content/app/resources/content_resources.grd $(LOCAL_PATH)/content/app/resources/default_100_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_off.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_on.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_overlay_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel_pressed.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier_results.png $(LOCAL_PATH)/content/app/resources/default_100_percent/textarea_resize_corner.png $(LOCAL_PATH)/content/app/resources/default_200_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_200_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_200_percent/textarea_resize_corner.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/content/app/resources/content_resources.grd $(LOCAL_PATH)/content/app/resources/default_100_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_off.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_on.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_overlay_cast_off.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_overlay_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel_pressed.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier_results.png $(LOCAL_PATH)/content/app/resources/default_100_percent/textarea_resize_corner.png $(LOCAL_PATH)/content/app/resources/default_200_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_200_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_200_percent/textarea_resize_corner.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from content_resources.grd ($@)"
 	$(hide)cd $(gyp_local_path)/content/app/resources; mkdir -p $(gyp_shared_intermediate_dir)/content/app/resources/grit $(gyp_shared_intermediate_dir)/content/app/resources; python ../../../tools/grit/grit.py -i content_resources.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/content/app/resources/" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" --no-output-all-resource-defines -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc -D enable_notifications
 
diff --git a/content/app/resources/content_resources.target.linux-arm.mk b/content/app/resources/content_resources.target.linux-arm.mk
index 07859bd..68634ed 100644
--- a/content/app/resources/content_resources.target.linux-arm.mk
+++ b/content/app/resources/content_resources.target.linux-arm.mk
@@ -20,7 +20,7 @@
 $(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/content/app/resources/content_resources.grd $(LOCAL_PATH)/content/app/resources/default_100_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_off.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_on.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_overlay_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel_pressed.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier_results.png $(LOCAL_PATH)/content/app/resources/default_100_percent/textarea_resize_corner.png $(LOCAL_PATH)/content/app/resources/default_200_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_200_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_200_percent/textarea_resize_corner.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/content/app/resources/content_resources.grd $(LOCAL_PATH)/content/app/resources/default_100_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_off.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_on.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_overlay_cast_off.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_overlay_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel_pressed.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier_results.png $(LOCAL_PATH)/content/app/resources/default_100_percent/textarea_resize_corner.png $(LOCAL_PATH)/content/app/resources/default_200_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_200_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_200_percent/textarea_resize_corner.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from content_resources.grd ($@)"
 	$(hide)cd $(gyp_local_path)/content/app/resources; mkdir -p $(gyp_shared_intermediate_dir)/content/app/resources/grit $(gyp_shared_intermediate_dir)/content/app/resources; python ../../../tools/grit/grit.py -i content_resources.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/content/app/resources/" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" --no-output-all-resource-defines -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc -D enable_notifications
 
diff --git a/content/app/resources/content_resources.target.linux-arm64.mk b/content/app/resources/content_resources.target.linux-arm64.mk
index 07859bd..68634ed 100644
--- a/content/app/resources/content_resources.target.linux-arm64.mk
+++ b/content/app/resources/content_resources.target.linux-arm64.mk
@@ -20,7 +20,7 @@
 $(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/content/app/resources/content_resources.grd $(LOCAL_PATH)/content/app/resources/default_100_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_off.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_on.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_overlay_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel_pressed.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier_results.png $(LOCAL_PATH)/content/app/resources/default_100_percent/textarea_resize_corner.png $(LOCAL_PATH)/content/app/resources/default_200_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_200_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_200_percent/textarea_resize_corner.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/content/app/resources/content_resources.grd $(LOCAL_PATH)/content/app/resources/default_100_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_off.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_on.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_overlay_cast_off.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_overlay_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel_pressed.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier_results.png $(LOCAL_PATH)/content/app/resources/default_100_percent/textarea_resize_corner.png $(LOCAL_PATH)/content/app/resources/default_200_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_200_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_200_percent/textarea_resize_corner.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from content_resources.grd ($@)"
 	$(hide)cd $(gyp_local_path)/content/app/resources; mkdir -p $(gyp_shared_intermediate_dir)/content/app/resources/grit $(gyp_shared_intermediate_dir)/content/app/resources; python ../../../tools/grit/grit.py -i content_resources.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/content/app/resources/" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" --no-output-all-resource-defines -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc -D enable_notifications
 
diff --git a/content/app/resources/content_resources.target.linux-mips.mk b/content/app/resources/content_resources.target.linux-mips.mk
index 07859bd..68634ed 100644
--- a/content/app/resources/content_resources.target.linux-mips.mk
+++ b/content/app/resources/content_resources.target.linux-mips.mk
@@ -20,7 +20,7 @@
 $(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/content/app/resources/content_resources.grd $(LOCAL_PATH)/content/app/resources/default_100_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_off.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_on.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_overlay_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel_pressed.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier_results.png $(LOCAL_PATH)/content/app/resources/default_100_percent/textarea_resize_corner.png $(LOCAL_PATH)/content/app/resources/default_200_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_200_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_200_percent/textarea_resize_corner.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/content/app/resources/content_resources.grd $(LOCAL_PATH)/content/app/resources/default_100_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_off.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_on.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_overlay_cast_off.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_overlay_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel_pressed.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier_results.png $(LOCAL_PATH)/content/app/resources/default_100_percent/textarea_resize_corner.png $(LOCAL_PATH)/content/app/resources/default_200_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_200_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_200_percent/textarea_resize_corner.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from content_resources.grd ($@)"
 	$(hide)cd $(gyp_local_path)/content/app/resources; mkdir -p $(gyp_shared_intermediate_dir)/content/app/resources/grit $(gyp_shared_intermediate_dir)/content/app/resources; python ../../../tools/grit/grit.py -i content_resources.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/content/app/resources/" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" --no-output-all-resource-defines -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc -D enable_notifications
 
diff --git a/content/app/resources/content_resources.target.linux-mips64.mk b/content/app/resources/content_resources.target.linux-mips64.mk
index 07859bd..68634ed 100644
--- a/content/app/resources/content_resources.target.linux-mips64.mk
+++ b/content/app/resources/content_resources.target.linux-mips64.mk
@@ -20,7 +20,7 @@
 $(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/content/app/resources/content_resources.grd $(LOCAL_PATH)/content/app/resources/default_100_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_off.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_on.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_overlay_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel_pressed.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier_results.png $(LOCAL_PATH)/content/app/resources/default_100_percent/textarea_resize_corner.png $(LOCAL_PATH)/content/app/resources/default_200_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_200_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_200_percent/textarea_resize_corner.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/content/app/resources/content_resources.grd $(LOCAL_PATH)/content/app/resources/default_100_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_off.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_on.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_overlay_cast_off.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_overlay_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel_pressed.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier_results.png $(LOCAL_PATH)/content/app/resources/default_100_percent/textarea_resize_corner.png $(LOCAL_PATH)/content/app/resources/default_200_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_200_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_200_percent/textarea_resize_corner.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from content_resources.grd ($@)"
 	$(hide)cd $(gyp_local_path)/content/app/resources; mkdir -p $(gyp_shared_intermediate_dir)/content/app/resources/grit $(gyp_shared_intermediate_dir)/content/app/resources; python ../../../tools/grit/grit.py -i content_resources.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/content/app/resources/" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" --no-output-all-resource-defines -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc -D enable_notifications
 
diff --git a/content/app/resources/content_resources.target.linux-x86.mk b/content/app/resources/content_resources.target.linux-x86.mk
index 07859bd..68634ed 100644
--- a/content/app/resources/content_resources.target.linux-x86.mk
+++ b/content/app/resources/content_resources.target.linux-x86.mk
@@ -20,7 +20,7 @@
 $(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/content/app/resources/content_resources.grd $(LOCAL_PATH)/content/app/resources/default_100_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_off.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_on.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_overlay_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel_pressed.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier_results.png $(LOCAL_PATH)/content/app/resources/default_100_percent/textarea_resize_corner.png $(LOCAL_PATH)/content/app/resources/default_200_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_200_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_200_percent/textarea_resize_corner.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/content/app/resources/content_resources.grd $(LOCAL_PATH)/content/app/resources/default_100_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_off.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_on.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_overlay_cast_off.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_overlay_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel_pressed.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier_results.png $(LOCAL_PATH)/content/app/resources/default_100_percent/textarea_resize_corner.png $(LOCAL_PATH)/content/app/resources/default_200_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_200_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_200_percent/textarea_resize_corner.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from content_resources.grd ($@)"
 	$(hide)cd $(gyp_local_path)/content/app/resources; mkdir -p $(gyp_shared_intermediate_dir)/content/app/resources/grit $(gyp_shared_intermediate_dir)/content/app/resources; python ../../../tools/grit/grit.py -i content_resources.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/content/app/resources/" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" --no-output-all-resource-defines -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc -D enable_notifications
 
diff --git a/content/app/resources/content_resources.target.linux-x86_64.mk b/content/app/resources/content_resources.target.linux-x86_64.mk
index 07859bd..68634ed 100644
--- a/content/app/resources/content_resources.target.linux-x86_64.mk
+++ b/content/app/resources/content_resources.target.linux-x86_64.mk
@@ -20,7 +20,7 @@
 $(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/content/app/resources/content_resources.grd $(LOCAL_PATH)/content/app/resources/default_100_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_off.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_on.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_overlay_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel_pressed.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier_results.png $(LOCAL_PATH)/content/app/resources/default_100_percent/textarea_resize_corner.png $(LOCAL_PATH)/content/app/resources/default_200_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_200_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_200_percent/textarea_resize_corner.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/app/resources/grit/content_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/content/app/resources/content_resources.grd $(LOCAL_PATH)/content/app/resources/default_100_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_off.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_cast_on.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_closedcaption_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_fullscreen_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_overlay_cast_off.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_overlay_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_pause_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_play_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level0_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level1_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level2_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_sound_level3_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_disabled.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_down.png $(LOCAL_PATH)/content/app/resources/default_100_percent/mediaplayer_volume_slider_thumb_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation.png $(LOCAL_PATH)/content/app/resources/default_100_percent/password_generation_hover.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_cancel_pressed.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier.png $(LOCAL_PATH)/content/app/resources/default_100_percent/search_magnifier_results.png $(LOCAL_PATH)/content/app/resources/default_100_percent/textarea_resize_corner.png $(LOCAL_PATH)/content/app/resources/default_200_percent/broken_image.png $(LOCAL_PATH)/content/app/resources/default_200_percent/pan_icon.png $(LOCAL_PATH)/content/app/resources/default_200_percent/textarea_resize_corner.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from content_resources.grd ($@)"
 	$(hide)cd $(gyp_local_path)/content/app/resources; mkdir -p $(gyp_shared_intermediate_dir)/content/app/resources/grit $(gyp_shared_intermediate_dir)/content/app/resources; python ../../../tools/grit/grit.py -i content_resources.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/content/app/resources/" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" --no-output-all-resource-defines -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc -D enable_notifications
 
diff --git a/content/app/resources/default_100_percent/mediaplayer_cast_off.png b/content/app/resources/default_100_percent/mediaplayer_cast_off.png
index e16f58e..050022d 100644
--- a/content/app/resources/default_100_percent/mediaplayer_cast_off.png
+++ b/content/app/resources/default_100_percent/mediaplayer_cast_off.png
Binary files differ
diff --git a/content/app/resources/default_100_percent/mediaplayer_overlay_cast_off.png b/content/app/resources/default_100_percent/mediaplayer_overlay_cast_off.png
new file mode 100644
index 0000000..e16f58e
--- /dev/null
+++ b/content/app/resources/default_100_percent/mediaplayer_overlay_cast_off.png
Binary files differ
diff --git a/content/browser/accessibility/browser_accessibility_manager_android.cc b/content/browser/accessibility/browser_accessibility_manager_android.cc
index 45c5026..7dbc149 100644
--- a/content/browser/accessibility/browser_accessibility_manager_android.cc
+++ b/content/browser/accessibility/browser_accessibility_manager_android.cc
@@ -261,10 +261,13 @@
   Java_BrowserAccessibilityManager_setAccessibilityNodeInfoClassName(
       env, obj, info,
       base::android::ConvertUTF8ToJavaString(env, node->GetClassName()).obj());
-  Java_BrowserAccessibilityManager_setAccessibilityNodeInfoContentDescription(
-      env, obj, info,
-      base::android::ConvertUTF16ToJavaString(env, node->GetText()).obj(),
-      node->IsLink());
+  if (!node->IsPassword() ||
+      Java_BrowserAccessibilityManager_shouldExposePasswordText(env, obj)) {
+    Java_BrowserAccessibilityManager_setAccessibilityNodeInfoContentDescription(
+        env, obj, info,
+        base::android::ConvertUTF16ToJavaString(env, node->GetText()).obj(),
+        node->IsLink());
+  }
 
   gfx::Rect absolute_rect = node->GetLocalBoundsRect();
   gfx::Rect parent_relative_rect = absolute_rect;
@@ -346,24 +349,37 @@
       node->GetMaxScrollY());
 
   switch (event_type) {
-    case ANDROID_ACCESSIBILITY_EVENT_TEXT_CHANGED:
+    case ANDROID_ACCESSIBILITY_EVENT_TEXT_CHANGED: {
+      base::string16 before_text, text;
+      if (!node->IsPassword() ||
+          Java_BrowserAccessibilityManager_shouldExposePasswordText(env, obj)) {
+        before_text = node->GetTextChangeBeforeText();
+        text = node->GetText();
+      }
       Java_BrowserAccessibilityManager_setAccessibilityEventTextChangedAttrs(
           env, obj, event,
           node->GetTextChangeFromIndex(),
           node->GetTextChangeAddedCount(),
           node->GetTextChangeRemovedCount(),
           base::android::ConvertUTF16ToJavaString(
-              env, node->GetTextChangeBeforeText()).obj(),
-          base::android::ConvertUTF16ToJavaString(env, node->GetText()).obj());
+              env, before_text).obj(),
+          base::android::ConvertUTF16ToJavaString(env, text).obj());
       break;
-    case ANDROID_ACCESSIBILITY_EVENT_TEXT_SELECTION_CHANGED:
+    }
+    case ANDROID_ACCESSIBILITY_EVENT_TEXT_SELECTION_CHANGED: {
+      base::string16 text;
+      if (!node->IsPassword() ||
+          Java_BrowserAccessibilityManager_shouldExposePasswordText(env, obj)) {
+        text = node->GetText();
+      }
       Java_BrowserAccessibilityManager_setAccessibilityEventSelectionAttrs(
           env, obj, event,
           node->GetSelectionStart(),
           node->GetSelectionEnd(),
           node->GetEditableTextLength(),
-          base::android::ConvertUTF16ToJavaString(env, node->GetText()).obj());
+          base::android::ConvertUTF16ToJavaString(env, text).obj());
       break;
+    }
     default:
       break;
   }
@@ -541,9 +557,14 @@
   int end_index = -1;
   if (NextAtGranularity(granularity, cursor_index, node,
                         &start_index, &end_index)) {
+    base::string16 text;
+    if (!node->IsPassword() ||
+        Java_BrowserAccessibilityManager_shouldExposePasswordText(env, obj)) {
+      text = node->GetText();
+    }
     Java_BrowserAccessibilityManager_finishGranularityMove(
         env, obj, base::android::ConvertUTF16ToJavaString(
-            env, node->GetText()).obj(),
+            env, text).obj(),
         extend_selection, start_index, end_index, true);
     return true;
   }
diff --git a/content/browser/android/content_view_core_impl.cc b/content/browser/android/content_view_core_impl.cc
index 9aa69cd..12117bf 100644
--- a/content/browser/android/content_view_core_impl.cc
+++ b/content/browser/android/content_view_core_impl.cc
@@ -1086,15 +1086,23 @@
 
 void ContentViewCoreImpl::MoveCaret(JNIEnv* env, jobject obj,
                                     jfloat x, jfloat y) {
-  if (GetRenderWidgetHostViewAndroid()) {
-    GetRenderWidgetHostViewAndroid()->MoveCaret(
-        gfx::Point(x / dpi_scale_, y / dpi_scale_));
-  }
+  RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid();
+  if (rwhv)
+    rwhv->MoveCaret(gfx::Point(x / dpi_scale_, y / dpi_scale_));
 }
 
-void ContentViewCoreImpl::HideTextHandles(JNIEnv* env, jobject obj) {
-  if (GetRenderWidgetHostViewAndroid())
-    GetRenderWidgetHostViewAndroid()->HideTextHandles();
+void ContentViewCoreImpl::DismissTextHandles(JNIEnv* env, jobject obj) {
+  RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid();
+  if (rwhv)
+    rwhv->DismissTextHandles();
+}
+
+void ContentViewCoreImpl::SetTextHandlesTemporarilyHidden(JNIEnv* env,
+                                                          jobject obj,
+                                                          jboolean hidden) {
+  RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid();
+  if (rwhv)
+    rwhv->SetTextHandlesTemporarilyHidden(hidden);
 }
 
 void ContentViewCoreImpl::ResetGestureDetection(JNIEnv* env, jobject obj) {
diff --git a/content/browser/android/content_view_core_impl.h b/content/browser/android/content_view_core_impl.h
index 6e90696..8a823ee 100644
--- a/content/browser/android/content_view_core_impl.h
+++ b/content/browser/android/content_view_core_impl.h
@@ -143,7 +143,10 @@
                                 jfloat x1, jfloat y1,
                                 jfloat x2, jfloat y2);
   void MoveCaret(JNIEnv* env, jobject obj, jfloat x, jfloat y);
-  void HideTextHandles(JNIEnv* env, jobject obj);
+  void DismissTextHandles(JNIEnv* env, jobject obj);
+  void SetTextHandlesTemporarilyHidden(JNIEnv* env,
+                                       jobject obj,
+                                       jboolean hidden);
 
   void ResetGestureDetection(JNIEnv* env, jobject obj);
   void SetDoubleTapSupportEnabled(JNIEnv* env, jobject obj, jboolean enabled);
diff --git a/content/browser/android/popup_touch_handle_drawable.cc b/content/browser/android/popup_touch_handle_drawable.cc
index ac2f57b..8a7cf84 100644
--- a/content/browser/android/popup_touch_handle_drawable.cc
+++ b/content/browser/android/popup_touch_handle_drawable.cc
@@ -16,6 +16,9 @@
 }
 
 PopupTouchHandleDrawable::~PopupTouchHandleDrawable() {
+  // Explicitly disabling ensures that any external references to the Java
+  // object are cleared, allowing it to be GC'ed in a timely fashion.
+  SetEnabled(false);
 }
 
 void PopupTouchHandleDrawable::SetEnabled(bool enabled) {
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
index f66fad6..a589114 100644
--- a/content/browser/frame_host/render_frame_host_impl.cc
+++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -1035,10 +1035,9 @@
 }
 
 void RenderFrameHostImpl::OnCancelDesktopNotification(int notification_id) {
-  if (!cancel_notification_callbacks_.count(notification_id)) {
-    NOTREACHED();
+  if (!cancel_notification_callbacks_.count(notification_id))
     return;
-  }
+
   cancel_notification_callbacks_[notification_id].Run();
   cancel_notification_callbacks_.erase(notification_id);
 }
diff --git a/content/browser/plugin_service_impl.cc b/content/browser/plugin_service_impl.cc
index 176e80e..49b6638 100644
--- a/content/browser/plugin_service_impl.cc
+++ b/content/browser/plugin_service_impl.cc
@@ -200,7 +200,7 @@
                        KEY_NOTIFY) == ERROR_SUCCESS) {
     base::win::RegKey::ChangeCallback callback =
         base::Bind(&PluginServiceImpl::OnKeyChanged, base::Unretained(this),
-                   base::Unretained(&hkcu_key_));
+                   base::Unretained(&hklm_key_));
     hklm_key_.StartWatching(callback);
   }
 #endif
@@ -630,7 +630,7 @@
 void PluginServiceImpl::OnKeyChanged(base::win::RegKey* key) {
   key->StartWatching(base::Bind(&PluginServiceImpl::OnKeyChanged,
                                 base::Unretained(this),
-                                base::Unretained(&hkcu_key_)));
+                                base::Unretained(key)));
 
   PluginList::Singleton()->RefreshPlugins();
   PurgePluginListCache(NULL, false);
diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc
index 3a2dc88..e8a4f55 100644
--- a/content/browser/renderer_host/render_widget_host_view_android.cc
+++ b/content/browser/renderer_host/render_widget_host_view_android.cc
@@ -477,8 +477,6 @@
   host_->SetInputMethodActive(true);
   if (overscroll_effect_)
     overscroll_effect_->Enable();
-  if (selection_controller_)
-    selection_controller_->SetTemporarilyHidden(false);
 }
 
 void RenderWidgetHostViewAndroid::Blur() {
@@ -486,8 +484,6 @@
   host_->Blur();
   if (overscroll_effect_)
     overscroll_effect_->Disable();
-  if (selection_controller_)
-    selection_controller_->SetTemporarilyHidden(true);
 }
 
 bool RenderWidgetHostViewAndroid::HasFocus() const {
@@ -1517,11 +1513,16 @@
     host_->MoveCaret(point);
 }
 
-void RenderWidgetHostViewAndroid::HideTextHandles() {
+void RenderWidgetHostViewAndroid::DismissTextHandles() {
   if (selection_controller_)
     selection_controller_->HideAndDisallowShowingAutomatically();
 }
 
+void RenderWidgetHostViewAndroid::SetTextHandlesTemporarilyHidden(bool hidden) {
+  if (selection_controller_)
+    selection_controller_->SetTemporarilyHidden(hidden);
+}
+
 void RenderWidgetHostViewAndroid::OnShowingPastePopup(
     const gfx::PointF& point) {
   if (!selection_controller_)
@@ -1536,7 +1537,7 @@
   insertion_bound.visible = true;
   insertion_bound.edge_top = point;
   insertion_bound.edge_bottom = point;
-  HideTextHandles();
+  DismissTextHandles();
   ShowSelectionHandlesAutomatically();
   selection_controller_->OnSelectionEditable(true);
   selection_controller_->OnSelectionEmpty(true);
diff --git a/content/browser/renderer_host/render_widget_host_view_android.h b/content/browser/renderer_host/render_widget_host_view_android.h
index 063a515..129b773 100644
--- a/content/browser/renderer_host/render_widget_host_view_android.h
+++ b/content/browser/renderer_host/render_widget_host_view_android.h
@@ -250,7 +250,8 @@
   bool HasValidFrame() const;
 
   void MoveCaret(const gfx::Point& point);
-  void HideTextHandles();
+  void DismissTextHandles();
+  void SetTextHandlesTemporarilyHidden(bool hidden);
   void OnShowingPastePopup(const gfx::PointF& point);
 
   void SynchronousFrameMetadata(
diff --git a/content/browser/service_worker/service_worker_cache_listener.cc b/content/browser/service_worker/service_worker_cache_listener.cc
index 911517a..e52c940 100644
--- a/content/browser/service_worker/service_worker_cache_listener.cc
+++ b/content/browser/service_worker/service_worker_cache_listener.cc
@@ -417,7 +417,8 @@
     return;
   }
 
-  StoreBlobDataHandle(blob_data_handle.Pass());
+  if (blob_data_handle)
+    StoreBlobDataHandle(blob_data_handle.Pass());
 
   std::vector<ServiceWorkerResponse> responses;
   responses.push_back(*response);
@@ -438,6 +439,7 @@
 
 void ServiceWorkerCacheListener::StoreBlobDataHandle(
     scoped_ptr<storage::BlobDataHandle> blob_data_handle) {
+  DCHECK(blob_data_handle);
   std::pair<UUIDToBlobDataHandleList::iterator, bool> rv =
       blob_handle_store_.insert(std::make_pair(
           blob_data_handle->uuid(), std::list<storage::BlobDataHandle>()));
diff --git a/content/browser/ssl/ssl_policy.cc b/content/browser/ssl/ssl_policy.cc
index 610f741..51ae7b2 100644
--- a/content/browser/ssl/ssl_policy.cc
+++ b/content/browser/ssl/ssl_policy.cc
@@ -56,7 +56,6 @@
     case net::ERR_CERT_WEAK_SIGNATURE_ALGORITHM:
     case net::ERR_CERT_WEAK_KEY:
     case net::ERR_CERT_NAME_CONSTRAINT_VIOLATION:
-    case net::ERR_CERT_VALIDITY_TOO_LONG:
       if (!handler->fatal())
         options_mask |= OVERRIDABLE;
       else
diff --git a/content/browser/web_contents/web_contents_view_mac.mm b/content/browser/web_contents/web_contents_view_mac.mm
index 20c97b8..3c99ac3 100644
--- a/content/browser/web_contents/web_contents_view_mac.mm
+++ b/content/browser/web_contents/web_contents_view_mac.mm
@@ -605,6 +605,12 @@
   // Occlusion notification APIs are new in Mavericks.
   bool supportsOcclusionAPIs = base::mac::IsOSMavericksOrLater();
 
+  // Use of occlusion APIs is causing bugs:
+  // http://crbug.com/430968: focus set incorrectly.
+  // http://crbug.com/431272: flashes of incorrect content.
+  // http://crbug.com/310374: white flashes (comment 22).
+  supportsOcclusionAPIs = false;
+
   if (supportsOcclusionAPIs) {
     if (oldWindow) {
       [notificationCenter
diff --git a/content/child/blink_platform_impl.cc b/content/child/blink_platform_impl.cc
index 79f72ad..144a983 100644
--- a/content/child/blink_platform_impl.cc
+++ b/content/child/blink_platform_impl.cc
@@ -786,6 +786,8 @@
     IDR_MEDIAPLAYER_CAST_BUTTON_ON, ui::SCALE_FACTOR_100P },
   { "mediaplayerFullscreenDisabled",
     IDR_MEDIAPLAYER_FULLSCREEN_BUTTON_DISABLED, ui::SCALE_FACTOR_100P },
+  { "mediaplayerOverlayCastOff",
+    IDR_MEDIAPLAYER_OVERLAY_CAST_BUTTON_OFF, ui::SCALE_FACTOR_100P },
   { "mediaplayerOverlayPlay",
     IDR_MEDIAPLAYER_OVERLAY_PLAY_BUTTON, ui::SCALE_FACTOR_100P },
 #if defined(OS_MACOSX)
diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc
index 1651927..891e22b 100644
--- a/content/child/runtime_features.cc
+++ b/content/child/runtime_features.cc
@@ -114,6 +114,9 @@
   if (!command_line.HasSwitch(switches::kEnableSpeechRecognition))
     WebRuntimeFeatures::enableScriptedSpeech(false);
 
+  if (command_line.HasSwitch(switches::kEnableExperimentalWebPlatformFeatures))
+    WebRuntimeFeatures::enableNotifications(true);
+
   // WebAudio is enabled by default on ARM and X86, if the MediaCodec
   // API is available.
   WebRuntimeFeatures::enableWebAudio(
diff --git a/content/child/web_url_loader_impl.cc b/content/child/web_url_loader_impl.cc
index 7249d16..b51d799 100644
--- a/content/child/web_url_loader_impl.cc
+++ b/content/child/web_url_loader_impl.cc
@@ -551,6 +551,9 @@
   new_request.setDownloadToFile(request_.downloadToFile());
   new_request.setRequestContext(request_.requestContext());
   new_request.setFrameType(request_.frameType());
+  new_request.setSkipServiceWorker(request_.skipServiceWorker());
+  new_request.setFetchRequestMode(request_.fetchRequestMode());
+  new_request.setFetchCredentialsMode(request_.fetchCredentialsMode());
 
   new_request.setHTTPReferrer(WebString::fromUTF8(redirect_info.new_referrer),
                               referrer_policy_);
diff --git a/content/common/gpu/media/dxva_video_decode_accelerator.cc b/content/common/gpu/media/dxva_video_decode_accelerator.cc
index c5cc291..530358e 100644
--- a/content/common/gpu/media/dxva_video_decode_accelerator.cc
+++ b/content/common/gpu/media/dxva_video_decode_accelerator.cc
@@ -323,7 +323,7 @@
 
   glBindTexture(GL_TEXTURE_2D, picture_buffer_.texture_id());
 
-  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
 
   base::win::ScopedComPtr<IDirect3DSurface9> d3d_surface;
   hr = decoding_texture_->GetSurfaceLevel(0, d3d_surface.Receive());
@@ -362,7 +362,7 @@
       egl_display,
       decoding_surface_,
       EGL_BACK_BUFFER);
-  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
   glBindTexture(GL_TEXTURE_2D, current_texture);
   return true;
 }
diff --git a/content/content_tests.gypi b/content/content_tests.gypi
index d48ac71..ceb8a35 100644
--- a/content/content_tests.gypi
+++ b/content/content_tests.gypi
@@ -854,21 +854,6 @@
             '../third_party/webrtc/modules/modules.gyp:desktop_capture',
           ],
         }],
-        ['enable_webrtc==1 and OS=="mac"', {
-          'variables': {
-            'libpeer_target_type%': 'static_library',
-          },
-          'conditions': [
-            ['libpeer_target_type!="static_library"', {
-              'copies': [{
-                'destination': '<(PRODUCT_DIR)/Libraries',
-                'files': [
-                  '<(PRODUCT_DIR)/libpeerconnection.so',
-                ],
-              }],
-            }],
-          ],
-        }],
         ['enable_webrtc==1 and chromeos==1', {
           'sources': [
             'browser/media/capture/desktop_capture_device_aura_unittest.cc',
diff --git a/content/content_unittests.isolate b/content/content_unittests.isolate
index 72d8d3d..bc982e2 100644
--- a/content/content_unittests.isolate
+++ b/content/content_unittests.isolate
@@ -58,13 +58,6 @@
         ],
       },
     }],
-    ['OS=="linux" and libpeer_target_type=="loadable_module"', {
-      'variables': {
-        'files': [
-          '<(PRODUCT_DIR)/lib/libpeerconnection.so',
-        ],
-      },
-    }],
     ['OS=="mac"', {
       'variables': {
         'command': [
@@ -104,13 +97,6 @@
         ],
       },
     }],
-    ['OS=="win" and libpeer_target_type=="loadable_module"', {
-      'variables': {
-        'files': [
-          '<(PRODUCT_DIR)/libpeerconnection.dll',
-        ],
-      },
-    }],
   ],
   'includes': [
     '../base/base.isolate',
diff --git a/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java b/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java
index 7d34565..effba1e 100644
--- a/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java
+++ b/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java
@@ -618,7 +618,7 @@
                     public void onImeEvent() {
                         mPopupZoomer.hide(true);
                         getContentViewClient().onImeEvent();
-                        if (mFocusedNodeEditable) hideTextHandles();
+                        if (mFocusedNodeEditable) dismissTextHandles();
                     }
 
                     @Override
@@ -1319,6 +1319,10 @@
     private void hidePopupsAndClearSelection() {
         mUnselectAllOnActionModeDismiss = true;
         hidePopups();
+        // Clear the selection. The selection is cleared on destroying IME
+        // and also here since we may receive destroy first, for example
+        // when focus is lost in webview.
+        clearUserSelection();
     }
 
     private void hidePopupsAndPreserveSelection() {
@@ -1326,12 +1330,23 @@
         hidePopups();
     }
 
+    private void clearUserSelection() {
+        if (isSelectionEditable()) {
+            if (mInputConnection != null) {
+                int selectionEnd = Selection.getSelectionEnd(mEditable);
+                mInputConnection.setSelection(selectionEnd, selectionEnd);
+            }
+        } else if (mImeAdapter != null) {
+            mImeAdapter.unselect();
+        }
+    }
+
     private void hidePopups() {
         hideSelectActionBar();
         hidePastePopup();
         hideSelectPopup();
         mPopupZoomer.hide(false);
-        if (mUnselectAllOnActionModeDismiss) hideTextHandles();
+        if (mUnselectAllOnActionModeDismiss) dismissTextHandles();
     }
 
     private void restoreSelectionPopupsIfNecessary() {
@@ -1360,6 +1375,7 @@
     @SuppressWarnings("javadoc")
     public void onAttachedToWindow() {
         setAccessibilityState(mAccessibilityManager.isEnabled());
+        setTextHandlesTemporarilyHidden(false);
         restoreSelectionPopupsIfNecessary();
         ScreenOrientationListener.getInstance().addObserver(this, mContext);
         GamepadList.onAttachedToWindow(mContext);
@@ -1372,12 +1388,19 @@
     @SuppressLint("MissingSuperCall")
     public void onDetachedFromWindow() {
         setInjectedAccessibility(false);
-        hidePopupsAndPreserveSelection();
         mZoomControlsDelegate.dismissZoomPicker();
         unregisterAccessibilityContentObserver();
 
         ScreenOrientationListener.getInstance().removeObserver(this);
         GamepadList.onDetachedFromWindow();
+
+        // WebView uses PopupWindows for handle rendering, which may remain
+        // unintentionally visible even after the WebView has been detached.
+        // Override the handle visibility explicitly to address this, but
+        // preserve the underlying selection for detachment cases like screen
+        // locking and app switching.
+        setTextHandlesTemporarilyHidden(true);
+        hidePopupsAndPreserveSelection();
     }
 
     /**
@@ -1930,13 +1953,8 @@
                 public void onDestroyActionMode() {
                     mActionMode = null;
                     if (mUnselectAllOnActionModeDismiss) {
-                        hideTextHandles();
-                        if (isSelectionEditable()) {
-                            int selectionEnd = Selection.getSelectionEnd(mEditable);
-                            mInputConnection.setSelection(selectionEnd, selectionEnd);
-                        } else {
-                            mImeAdapter.unselect();
-                        }
+                        dismissTextHandles();
+                        clearUserSelection();
                     }
                     getContentViewClient().onContextualActionBarHidden();
                 }
@@ -2074,10 +2092,15 @@
         getContentViewClient().onSelectionEvent(eventType, posXDip * scale, posYDip * scale);
     }
 
-    private void hideTextHandles() {
+    private void dismissTextHandles() {
         mHasSelection = false;
         mHasInsertion = false;
-        if (mNativeContentViewCore != 0) nativeHideTextHandles(mNativeContentViewCore);
+        if (mNativeContentViewCore != 0) nativeDismissTextHandles(mNativeContentViewCore);
+    }
+
+    private void setTextHandlesTemporarilyHidden(boolean hide) {
+        if (mNativeContentViewCore == 0) return;
+        nativeSetTextHandlesTemporarilyHidden(mNativeContentViewCore, hide);
     }
 
     /**
@@ -2327,7 +2350,7 @@
                     @Override
                     public void paste() {
                         mImeAdapter.paste();
-                        hideTextHandles();
+                        dismissTextHandles();
                     }
                 });
         }
@@ -3001,7 +3024,9 @@
 
     private native void nativeMoveCaret(long nativeContentViewCoreImpl, float x, float y);
 
-    private native void nativeHideTextHandles(long nativeContentViewCoreImpl);
+    private native void nativeDismissTextHandles(long nativeContentViewCoreImpl);
+    private native void nativeSetTextHandlesTemporarilyHidden(
+            long nativeContentViewCoreImpl, boolean hidden);
 
     private native void nativeResetGestureDetection(long nativeContentViewCoreImpl);
 
diff --git a/content/public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java b/content/public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java
index 81cf595..f349a0a 100644
--- a/content/public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java
+++ b/content/public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java
@@ -8,6 +8,7 @@
 import android.graphics.Rect;
 import android.os.Build;
 import android.os.Bundle;
+import android.provider.Settings;
 import android.text.SpannableString;
 import android.text.style.URLSpan;
 import android.view.MotionEvent;
@@ -821,9 +822,9 @@
 
     @CalledByNative
     private void setAccessibilityEventSelectionAttrs(AccessibilityEvent event,
-            int fromIndex, int addedCount, int itemCount, String text) {
+            int fromIndex, int toIndex, int itemCount, String text) {
         event.setFromIndex(fromIndex);
-        event.setAddedCount(addedCount);
+        event.setToIndex(toIndex);
         event.setItemCount(itemCount);
         event.getText().add(text);
     }
@@ -886,6 +887,13 @@
         bundle.putFloat("AccessibilityNodeInfo.RangeInfo.current", current);
     }
 
+    @CalledByNative
+    boolean shouldExposePasswordText() {
+        return (Settings.Secure.getInt(
+                        mContentViewCore.getContext().getContentResolver(),
+                        Settings.Secure.ACCESSIBILITY_SPEAK_PASSWORD, 0) == 1);
+    }
+
     private native int nativeGetRootId(long nativeBrowserAccessibilityManagerAndroid);
     private native boolean nativeIsNodeValid(long nativeBrowserAccessibilityManagerAndroid, int id);
     private native boolean nativeIsEditableText(
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/PopupTouchHandleDrawable.java b/content/public/android/java/src/org/chromium/content/browser/input/PopupTouchHandleDrawable.java
index b9542e9..03cc014 100644
--- a/content/public/android/java/src/org/chromium/content/browser/input/PopupTouchHandleDrawable.java
+++ b/content/public/android/java/src/org/chromium/content/browser/input/PopupTouchHandleDrawable.java
@@ -224,6 +224,7 @@
     }
 
     private void doInvalidate() {
+        if (!mContainer.isShowing()) return;
         updatePosition();
         updateVisibility();
         invalidate();
diff --git a/content/renderer/accessibility/renderer_accessibility.cc b/content/renderer/accessibility/renderer_accessibility.cc
index 707f193..3f580f1 100644
--- a/content/renderer/accessibility/renderer_accessibility.cc
+++ b/content/renderer/accessibility/renderer_accessibility.cc
@@ -47,6 +47,10 @@
   // moving by granularities.
   settings->setInlineTextBoxAccessibilityEnabled(true);
 
+#if defined(OS_ANDROID)
+  settings->setAccessibilityPasswordValuesEnabled(true);
+#endif
+
   const WebDocument& document = GetMainDocument();
   if (!document.isNull()) {
     // It's possible that the webview has already loaded a webpage without
diff --git a/content/renderer/media/media_stream_audio_processor.cc b/content/renderer/media/media_stream_audio_processor.cc
index 68d69c7..548e74f 100644
--- a/content/renderer/media/media_stream_audio_processor.cc
+++ b/content/renderer/media/media_stream_audio_processor.cc
@@ -19,7 +19,6 @@
 #include "media/base/audio_fifo.h"
 #include "media/base/channel_layout.h"
 #include "third_party/WebKit/public/platform/WebMediaConstraints.h"
-#include "third_party/libjingle/overrides/init_webrtc.h"
 #include "third_party/libjingle/source/talk/app/webrtc/mediaconstraintsinterface.h"
 #include "third_party/webrtc/modules/audio_processing/typing_detection.h"
 
@@ -455,7 +454,7 @@
 #endif
 
   // Create and configure the webrtc::AudioProcessing.
-  audio_processing_.reset(CreateWebRtcAudioProcessing(config));
+  audio_processing_.reset(webrtc::AudioProcessing::Create(config));
 
   // Enable the audio processing components.
   if (echo_cancellation) {
diff --git a/content/renderer/media/media_stream_audio_processor_options.cc b/content/renderer/media/media_stream_audio_processor_options.cc
index d7e773d..537ef90 100644
--- a/content/renderer/media/media_stream_audio_processor_options.cc
+++ b/content/renderer/media/media_stream_audio_processor_options.cc
@@ -326,10 +326,15 @@
 void StartEchoCancellationDump(AudioProcessing* audio_processing,
                                base::File aec_dump_file) {
   DCHECK(aec_dump_file.IsValid());
-  if (audio_processing->StartDebugRecordingForPlatformFile(
-      aec_dump_file.TakePlatformFile())) {
-    DLOG(ERROR) << "Fail to start AEC debug recording";
+
+  FILE* stream = base::FileToFILE(aec_dump_file.Pass(), "w");
+  if (!stream) {
+    LOG(ERROR) << "Failed to open AEC dump file";
+    return;
   }
+
+  if (audio_processing->StartDebugRecording(stream))
+    DLOG(ERROR) << "Fail to start AEC debug recording";
 }
 
 void StopEchoCancellationDump(AudioProcessing* audio_processing) {
diff --git a/content/renderer/media/webrtc_audio_capturer.cc b/content/renderer/media/webrtc_audio_capturer.cc
index 3299987..45034e8 100644
--- a/content/renderer/media/webrtc_audio_capturer.cc
+++ b/content/renderer/media/webrtc_audio_capturer.cc
@@ -579,10 +579,13 @@
 
   // Use the native hardware buffer size in non peer connection mode when the
   // platform is using a native buffer size smaller than the PeerConnection
-  // buffer size.
+  // buffer size and audio processing is off.
   int hardware_buffer_size = device_info_.device.input.frames_per_buffer;
   if (!peer_connection_mode_ && hardware_buffer_size &&
-      hardware_buffer_size <= peer_connection_buffer_size) {
+      hardware_buffer_size <= peer_connection_buffer_size &&
+      !audio_processor_->has_audio_processing()) {
+    DVLOG(1) << "WebRtcAudioCapturer is using hardware buffer size "
+             << hardware_buffer_size;
     return hardware_buffer_size;
   }
 
diff --git a/content/renderer/pepper/pepper_plugin_instance_impl.cc b/content/renderer/pepper/pepper_plugin_instance_impl.cc
index 4efdbb6..5886cf1 100644
--- a/content/renderer/pepper/pepper_plugin_instance_impl.cc
+++ b/content/renderer/pepper/pepper_plugin_instance_impl.cc
@@ -12,6 +12,7 @@
 #include "base/memory/linked_ptr.h"
 #include "base/message_loop/message_loop.h"
 #include "base/metrics/histogram.h"
+#include "base/metrics/sparse_histogram.h"
 #include "base/stl_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_offset_string_conversions.h"
@@ -186,6 +187,13 @@
 
 namespace {
 
+static const int kInfiniteRatio = 99999;
+
+#define UMA_HISTOGRAM_ASPECT_RATIO(name, width, height) \
+    UMA_HISTOGRAM_SPARSE_SLOWLY( \
+        name, \
+        (height) ? ((width) * 100) / (height) : kInfiniteRatio);
+
 // Check PP_TextInput_Type and ui::TextInputType are kept in sync.
 COMPILE_ASSERT(int(ui::TEXT_INPUT_TYPE_NONE) == int(PP_TEXTINPUT_TYPE_NONE),
                mismatching_enums);
@@ -391,6 +399,15 @@
   }
 }
 
+// Histogram tracking prevalence of tiny Flash instances. Units in pixels.
+enum PluginFlashTinyContentSize {
+  TINY_CONTENT_SIZE_1_1 = 0,
+  TINY_CONTENT_SIZE_5_5 = 1,
+  TINY_CONTENT_SIZE_10_10 = 2,
+  TINY_CONTENT_SIZE_LARGE = 3,
+  TINY_CONTENT_SIZE_NUM_ITEMS
+};
+
 // How the throttled power saver is unthrottled, if ever.
 // These numeric values are used in UMA logs; do not change them.
 enum PowerSaverUnthrottleMethod {
@@ -400,7 +417,49 @@
   UNTHROTTLE_METHOD_NUM_ITEMS
 };
 
-const char kPowerSaverUnthrottleHistogram[] = "Plugin.PowerSaverUnthrottle";
+const char kFlashClickSizeAspectRatioHistogram[] =
+    "Plugin.Flash.ClickSize.AspectRatio";
+const char kFlashClickSizeHeightHistogram[] = "Plugin.Flash.ClickSize.Height";
+const char kFlashClickSizeWidthHistogram[] = "Plugin.Flash.ClickSize.Width";
+const char kFlashTinyContentSizeHistogram[] = "Plugin.Flash.TinyContentSize";
+const char kPowerSaverUnthrottleHistogram[] = "Plugin.PowerSaver.Unthrottle";
+
+// Record size metrics for all Flash instances.
+void RecordFlashSizeMetric(int width, int height) {
+  PluginFlashTinyContentSize size = TINY_CONTENT_SIZE_LARGE;
+
+  if (width <= 1 && height <= 1)
+    size = TINY_CONTENT_SIZE_1_1;
+  else if (width <= 5 && height <= 5)
+    size = TINY_CONTENT_SIZE_5_5;
+  else if (width <= 10 && height <= 10)
+    size = TINY_CONTENT_SIZE_10_10;
+
+  UMA_HISTOGRAM_ENUMERATION(kFlashTinyContentSizeHistogram, size,
+                            TINY_CONTENT_SIZE_NUM_ITEMS);
+}
+
+// Records size metrics for Flash instances that are clicked.
+void RecordFlashClickSizeMetric(int width, int height) {
+  base::HistogramBase* width_histogram = base::LinearHistogram::FactoryGet(
+      kFlashClickSizeWidthHistogram,
+      0,    // minimum width
+      500,  // maximum width
+      100,  // number of buckets.
+      base::HistogramBase::kUmaTargetedHistogramFlag);
+  width_histogram->Add(width);
+
+  base::HistogramBase* height_histogram = base::LinearHistogram::FactoryGet(
+      kFlashClickSizeHeightHistogram,
+      0,    // minimum height
+      400,  // maximum height
+      100,  // number of buckets.
+      base::HistogramBase::kUmaTargetedHistogramFlag);
+  height_histogram->Add(height);
+
+  UMA_HISTOGRAM_ASPECT_RATIO(kFlashClickSizeAspectRatioHistogram, width,
+                             height);
+}
 
 void RecordUnthrottleMethodMetric(PowerSaverUnthrottleMethod method) {
   UMA_HISTOGRAM_ENUMERATION(kPowerSaverUnthrottleHistogram, method,
@@ -511,6 +570,7 @@
       layer_bound_to_fullscreen_(false),
       layer_is_hardware_(false),
       plugin_url_(plugin_url),
+      has_been_clicked_(false),
       power_saver_enabled_(false),
       is_peripheral_content_(false),
       plugin_throttled_(false),
@@ -606,11 +666,6 @@
   if (GetContentClient()->renderer() &&  // NULL in unit tests.
       GetContentClient()->renderer()->IsExternalPepperPlugin(module->name()))
     external_document_load_ = true;
-
-  if (IsFlashPlugin(module_.get())) {
-    RenderThread::Get()->RecordAction(
-        base::UserMetricsAction("Flash.PluginInstanceCreated"));
-  }
 }
 
 PepperPluginInstanceImpl::~PepperPluginInstanceImpl() {
@@ -871,10 +926,16 @@
   if (!render_frame_)
     return false;
 
+  blink::WebRect bounds = container_->element().boundsInViewportSpace();
+  if (IsFlashPlugin(module_.get())) {
+    RenderThread::Get()->RecordAction(
+        base::UserMetricsAction("Flash.PluginInstanceCreated"));
+    RecordFlashSizeMetric(bounds.width, bounds.height);
+  }
+
   PluginPowerSaverHelper* power_saver_helper =
       render_frame_->plugin_power_saver_helper();
   GURL content_origin = plugin_url_.GetOrigin();
-  blink::WebRect bounds = container_->element().boundsInViewportSpace();
 
   bool cross_origin = false;
   is_peripheral_content_ =
@@ -1158,6 +1219,13 @@
     WebCursorInfo* cursor_info) {
   TRACE_EVENT0("ppapi", "PepperPluginInstanceImpl::HandleInputEvent");
 
+  if (event.type == blink::WebInputEvent::MouseDown && !has_been_clicked_ &&
+      IsFlashPlugin(module_.get())) {
+    has_been_clicked_ = true;
+    blink::WebRect bounds = container_->element().boundsInViewportSpace();
+    RecordFlashClickSizeMetric(bounds.width, bounds.height);
+  }
+
   if (event.type == blink::WebInputEvent::MouseUp && is_peripheral_content_) {
     is_peripheral_content_ = false;
     power_saver_enabled_ = false;
diff --git a/content/renderer/pepper/pepper_plugin_instance_impl.h b/content/renderer/pepper/pepper_plugin_instance_impl.h
index 9f55084..c056a93 100644
--- a/content/renderer/pepper/pepper_plugin_instance_impl.h
+++ b/content/renderer/pepper/pepper_plugin_instance_impl.h
@@ -713,6 +713,9 @@
   // Plugin URL.
   GURL plugin_url_;
 
+  // Set to true first time plugin is clicked. Used to collect metrics.
+  bool has_been_clicked_;
+
   // Indicates whether this plugin may be throttled to reduce power consumption.
   // |power_saver_enabled_| implies |is_peripheral_content_|.
   bool power_saver_enabled_;
diff --git a/content/renderer/pepper/plugin_power_saver_helper.cc b/content/renderer/pepper/plugin_power_saver_helper.cc
index 365789c..3c60c16 100644
--- a/content/renderer/pepper/plugin_power_saver_helper.cc
+++ b/content/renderer/pepper/plugin_power_saver_helper.cc
@@ -28,7 +28,7 @@
 };
 
 const char kPeripheralHeuristicHistogram[] =
-    "Plugin.PowerSaverPeripheralHeuristic";
+    "Plugin.PowerSaver.PeripheralHeuristic";
 
 // Maximum dimensions plug-in content may have while still being considered
 // peripheral content. These match the sizes used by Safari.
diff --git a/extensions/browser/api/device_permissions_manager.cc b/extensions/browser/api/device_permissions_manager.cc
index 2c43a86..43c2b7a 100644
--- a/extensions/browser/api/device_permissions_manager.cc
+++ b/extensions/browser/api/device_permissions_manager.cc
@@ -324,11 +324,13 @@
   DCHECK(CalledOnValidThread());
 
   ClearDevicePermissionEntries(ExtensionPrefs::Get(context_), extension_id);
-  std::map<std::string, DevicePermissions*>::iterator it =
-      extension_id_to_device_permissions_.find(extension_id);
-  if (it != extension_id_to_device_permissions_.end()) {
-    delete it->second;
-    extension_id_to_device_permissions_.erase(it);
+  DevicePermissions* device_permissions = Get(extension_id);
+  if (device_permissions) {
+    for (const auto& device_entry : device_permissions->ephemeral_devices_) {
+      device_entry->RemoveObserver(this);
+    }
+    extension_id_to_device_permissions_.erase(extension_id);
+    delete device_permissions;
   }
 }
 
@@ -340,7 +342,11 @@
 
 DevicePermissionsManager::~DevicePermissionsManager() {
   for (const auto& map_entry : extension_id_to_device_permissions_) {
-    delete map_entry.second;
+    DevicePermissions* device_permissions = map_entry.second;
+    for (const auto& device_entry : device_permissions->ephemeral_devices_) {
+      device_entry->RemoveObserver(this);
+    }
+    delete device_permissions;
   }
 }
 
diff --git a/extensions/browser/app_window/app_window.cc b/extensions/browser/app_window/app_window.cc
index c7990e1..8ce9cf6 100644
--- a/extensions/browser/app_window/app_window.cc
+++ b/extensions/browser/app_window/app_window.cc
@@ -656,6 +656,7 @@
 }
 
 void AppWindow::Show(ShowType show_type) {
+  bool was_hidden = is_hidden_ || !has_been_shown_;
   is_hidden_ = false;
 
   if (CommandLine::ForCurrentProcess()->HasSwitch(
@@ -676,7 +677,7 @@
       GetBaseWindow()->ShowInactive();
       break;
   }
-  AppWindowRegistry::Get(browser_context_)->AppWindowShown(this);
+  AppWindowRegistry::Get(browser_context_)->AppWindowShown(this, was_hidden);
 
   has_been_shown_ = true;
   SendOnWindowShownIfShown();
diff --git a/extensions/browser/app_window/app_window_registry.cc b/extensions/browser/app_window/app_window_registry.cc
index 48397f5..572c4b2 100644
--- a/extensions/browser/app_window/app_window_registry.cc
+++ b/extensions/browser/app_window/app_window_registry.cc
@@ -60,7 +60,8 @@
 void AppWindowRegistry::Observer::OnAppWindowHidden(AppWindow* app_window) {
 }
 
-void AppWindowRegistry::Observer::OnAppWindowShown(AppWindow* app_window) {
+void AppWindowRegistry::Observer::OnAppWindowShown(AppWindow* app_window,
+                                                   bool was_shown) {
 }
 
 AppWindowRegistry::Observer::~Observer() {
@@ -100,8 +101,9 @@
   FOR_EACH_OBSERVER(Observer, observers_, OnAppWindowHidden(app_window));
 }
 
-void AppWindowRegistry::AppWindowShown(AppWindow* app_window) {
-  FOR_EACH_OBSERVER(Observer, observers_, OnAppWindowShown(app_window));
+void AppWindowRegistry::AppWindowShown(AppWindow* app_window, bool was_hidden) {
+  FOR_EACH_OBSERVER(Observer, observers_,
+                    OnAppWindowShown(app_window, was_hidden));
 }
 
 void AppWindowRegistry::RemoveAppWindow(AppWindow* app_window) {
diff --git a/extensions/browser/app_window/app_window_registry.h b/extensions/browser/app_window/app_window_registry.h
index 7037953..ed2cdc6 100644
--- a/extensions/browser/app_window/app_window_registry.h
+++ b/extensions/browser/app_window/app_window_registry.h
@@ -44,7 +44,7 @@
     // it not visible.
     virtual void OnAppWindowHidden(AppWindow* app_window);
     // Called just after a app window was shown.
-    virtual void OnAppWindowShown(AppWindow* app_window);
+    virtual void OnAppWindowShown(AppWindow* app_window, bool was_hidden);
 
    protected:
     virtual ~Observer();
@@ -67,7 +67,7 @@
   // Called by |app_window| when it is activated.
   void AppWindowActivated(AppWindow* app_window);
   void AppWindowHidden(AppWindow* app_window);
-  void AppWindowShown(AppWindow* app_window);
+  void AppWindowShown(AppWindow* app_window, bool was_hidden);
   void RemoveAppWindow(AppWindow* app_window);
 
   void AddObserver(Observer* observer);
diff --git a/google_apis/gcm/engine/gcm_store_impl.cc b/google_apis/gcm/engine/gcm_store_impl.cc
index 25bc847..14e382e 100644
--- a/google_apis/gcm/engine/gcm_store_impl.cc
+++ b/google_apis/gcm/engine/gcm_store_impl.cc
@@ -552,11 +552,11 @@
   // Remove all existing settings.
   leveldb::ReadOptions read_options;
   read_options.verify_checksums = true;
-  scoped_ptr<leveldb::Iterator> db_iter(db_->NewIterator(read_options));
-  for (db_iter->Seek(MakeSlice(kGServiceSettingKeyStart));
-       db_iter->Valid() && db_iter->key().ToString() < kGServiceSettingKeyEnd;
-       db_iter->Next()) {
-    write_batch.Delete(db_iter->key());
+  scoped_ptr<leveldb::Iterator> iter(db_->NewIterator(read_options));
+  for (iter->Seek(MakeSlice(kGServiceSettingKeyStart));
+       iter->Valid() && iter->key().ToString() < kGServiceSettingKeyEnd;
+       iter->Next()) {
+    write_batch.Delete(iter->key());
   }
 
   // Add the new settings.
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc
index 6905d2a..8577d82 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -628,7 +628,7 @@
     return vertex_array_manager_.get();
   }
   ImageManager* GetImageManager() override { return image_manager_.get(); }
-  bool ProcessPendingQueries() override;
+  bool ProcessPendingQueries(bool did_finish) override;
   bool HasMoreIdleWork() override;
   void PerformIdleWork() override;
 
@@ -3998,12 +3998,12 @@
 void GLES2DecoderImpl::DoFinish() {
   glFinish();
   ProcessPendingReadPixels();
-  ProcessPendingQueries();
+  ProcessPendingQueries(true);
 }
 
 void GLES2DecoderImpl::DoFlush() {
   glFlush();
-  ProcessPendingQueries();
+  ProcessPendingQueries(false);
 }
 
 void GLES2DecoderImpl::DoActiveTexture(GLenum texture_unit) {
@@ -9957,11 +9957,11 @@
   }
 }
 
-bool GLES2DecoderImpl::ProcessPendingQueries() {
+bool GLES2DecoderImpl::ProcessPendingQueries(bool did_finish) {
   if (query_manager_.get() == NULL) {
     return false;
   }
-  if (!query_manager_->ProcessPendingQueries()) {
+  if (!query_manager_->ProcessPendingQueries(did_finish)) {
     current_decoder_error_ = error::kOutOfBounds;
   }
   return query_manager_->HavePendingQueries();
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.h b/gpu/command_buffer/service/gles2_cmd_decoder.h
index 8d72335..63618c2 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder.h
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.h
@@ -171,7 +171,7 @@
   virtual ImageManager* GetImageManager() = 0;
 
   // Process any pending queries. Returns false if there are no pending queries.
-  virtual bool ProcessPendingQueries() = 0;
+  virtual bool ProcessPendingQueries(bool did_finish) = 0;
 
   // Returns false if there are no idle work to be made.
   virtual bool HasMoreIdleWork() = 0;
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_mock.h b/gpu/command_buffer/service/gles2_cmd_decoder_mock.h
index 7346d8e..d855c87 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_mock.h
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_mock.h
@@ -57,7 +57,7 @@
   MOCK_METHOD0(GetContextGroup, ContextGroup*());
   MOCK_METHOD0(GetContextState, const ContextState*());
   MOCK_METHOD0(GetCapabilities, Capabilities());
-  MOCK_METHOD0(ProcessPendingQueries, bool());
+  MOCK_METHOD1(ProcessPendingQueries, bool(bool));
   MOCK_METHOD0(HasMoreIdleWork, bool());
   MOCK_METHOD0(PerformIdleWork, void());
   MOCK_METHOD1(RestoreState, void(const ContextState* prev_state));
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc
index e97b4c4..43f8606 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc
@@ -636,7 +636,7 @@
 
   QueryManager* query_manager = test->GetDecoder()->GetQueryManager();
   ASSERT_TRUE(query_manager != NULL);
-  bool process_success = query_manager->ProcessPendingQueries();
+  bool process_success = query_manager->ProcessPendingQueries(false);
 
   EXPECT_TRUE(error1 != error::kNoError || error2 != error::kNoError ||
               !process_success);
@@ -797,7 +797,7 @@
   EXPECT_CALL(*gl_, ClientWaitSync(kGlSync, _, _))
       .WillOnce(Return(GL_TIMEOUT_EXPIRED))
       .RetiresOnSaturation();
-  bool process_success = query_manager->ProcessPendingQueries();
+  bool process_success = query_manager->ProcessPendingQueries(false);
 
   EXPECT_TRUE(process_success);
   EXPECT_TRUE(query->pending());
@@ -810,7 +810,7 @@
   EXPECT_CALL(*gl_, ClientWaitSync(kGlSync, _, _))
       .WillOnce(Return(GL_ALREADY_SIGNALED))
       .RetiresOnSaturation();
-  process_success = query_manager->ProcessPendingQueries();
+  process_success = query_manager->ProcessPendingQueries(false);
 
   EXPECT_TRUE(process_success);
   EXPECT_FALSE(query->pending());
diff --git a/gpu/command_buffer/service/gpu_scheduler.cc b/gpu/command_buffer/service/gpu_scheduler.cc
index 058a546..48df8dd 100644
--- a/gpu/command_buffer/service/gpu_scheduler.cc
+++ b/gpu/command_buffer/service/gpu_scheduler.cc
@@ -170,7 +170,7 @@
 
 bool GpuScheduler::HasMoreWork() {
   return !unschedule_fences_.empty() ||
-         (decoder_ && decoder_->ProcessPendingQueries()) ||
+         (decoder_ && decoder_->ProcessPendingQueries(false)) ||
          HasMoreIdleWork();
 }
 
diff --git a/gpu/command_buffer/service/query_manager.cc b/gpu/command_buffer/service/query_manager.cc
index 5f518ec..fdb5fa8 100644
--- a/gpu/command_buffer/service/query_manager.cc
+++ b/gpu/command_buffer/service/query_manager.cc
@@ -64,7 +64,7 @@
 
   bool Begin() override;
   bool End(base::subtle::Atomic32 submit_count) override;
-  bool Process() override;
+  bool Process(bool did_finish) override;
   void Destroy(bool have_context) override;
 
  protected:
@@ -105,7 +105,7 @@
   return AddToPendingTransferQueue(submit_count);
 }
 
-bool AsyncPixelTransfersCompletedQuery::Process() {
+bool AsyncPixelTransfersCompletedQuery::Process(bool did_finish) {
   QuerySync* sync = manager()->decoder()->GetSharedMemoryAs<QuerySync*>(
       shm_id(), shm_offset(), sizeof(*sync));
   if (!sync)
@@ -141,7 +141,7 @@
       GLuint service_id);
   bool Begin() override;
   bool End(base::subtle::Atomic32 submit_count) override;
-  bool Process() override;
+  bool Process(bool did_finish) override;
   void Destroy(bool have_context) override;
 
  protected:
@@ -169,7 +169,7 @@
   return AddToPendingQueue(submit_count);
 }
 
-bool AllSamplesPassedQuery::Process() {
+bool AllSamplesPassedQuery::Process(bool did_finish) {
   GLuint available = 0;
   glGetQueryObjectuivARB(
       service_id_, GL_QUERY_RESULT_AVAILABLE_EXT, &available);
@@ -200,7 +200,7 @@
 
   bool Begin() override;
   bool End(base::subtle::Atomic32 submit_count) override;
-  bool Process() override;
+  bool Process(bool did_finish) override;
   void Destroy(bool have_context) override;
 
  protected:
@@ -226,7 +226,7 @@
   return MarkAsCompleted(elapsed.InMicroseconds());
 }
 
-bool CommandsIssuedQuery::Process() {
+bool CommandsIssuedQuery::Process(bool did_finish) {
   NOTREACHED();
   return true;
 }
@@ -247,7 +247,7 @@
 
   bool Begin() override;
   bool End(base::subtle::Atomic32 submit_count) override;
-  bool Process() override;
+  bool Process(bool did_finish) override;
   void Destroy(bool have_context) override;
 
  protected:
@@ -269,7 +269,7 @@
     return MarkAsCompleted(now.InMicroseconds());
 }
 
-bool CommandLatencyQuery::Process() {
+bool CommandLatencyQuery::Process(bool did_finish) {
   NOTREACHED();
   return true;
 }
@@ -293,7 +293,7 @@
 
   bool Begin() override;
   bool End(base::subtle::Atomic32 submit_count) override;
-  bool Process() override;
+  bool Process(bool did_finish) override;
   void Destroy(bool have_context) override;
 
  protected:
@@ -324,7 +324,7 @@
       base::Bind(&AsyncReadPixelsCompletedQuery::Complete,
                  AsWeakPtr()));
 
-  return Process();
+  return Process(false);
 }
 
 void AsyncReadPixelsCompletedQuery::Complete() {
@@ -332,7 +332,7 @@
   complete_result_ = MarkAsCompleted(1);
 }
 
-bool AsyncReadPixelsCompletedQuery::Process() {
+bool AsyncReadPixelsCompletedQuery::Process(bool did_finish) {
   return !completed_ || complete_result_;
 }
 
@@ -353,7 +353,7 @@
 
   bool Begin() override;
   bool End(base::subtle::Atomic32 submit_count) override;
-  bool Process() override;
+  bool Process(bool did_finish) override;
   void Destroy(bool have_context) override;
 
  protected:
@@ -376,7 +376,7 @@
   return MarkAsCompleted(manager()->decoder()->GetErrorState()->GetGLError());
 }
 
-bool GetErrorQuery::Process() {
+bool GetErrorQuery::Process(bool did_finish) {
   NOTREACHED();
   return true;
 }
@@ -400,7 +400,7 @@
   // Overridden from QueryManager::Query:
   bool Begin() override;
   bool End(base::subtle::Atomic32 submit_count) override;
-  bool Process() override;
+  bool Process(bool did_finish) override;
   void Destroy(bool have_context) override;
 
  protected:
@@ -424,9 +424,16 @@
   return AddToPendingQueue(submit_count);
 }
 
-bool CommandsCompletedQuery::Process() {
-  if (fence_ && !fence_->HasCompleted())
+bool CommandsCompletedQuery::Process(bool did_finish) {
+  // Note: |did_finish| guarantees that the GPU has passed the fence but
+  // we cannot assume that GLFence::HasCompleted() will return true yet as
+  // that's not guaranteed by all GLFence implementations.
+  //
+  // TODO(reveman): Add UMA stats to determine how common it is that glFinish()
+  // needs to be called for these queries to complete. crbug.com/431845
+  if (!did_finish && fence_ && !fence_->HasCompleted())
     return true;
+
   return MarkAsCompleted(0);
 }
 
@@ -635,10 +642,10 @@
   return true;
 }
 
-bool QueryManager::ProcessPendingQueries() {
+bool QueryManager::ProcessPendingQueries(bool did_finish) {
   while (!pending_queries_.empty()) {
     Query* query = pending_queries_.front().get();
-    if (!query->Process()) {
+    if (!query->Process(did_finish)) {
       return false;
     }
     if (query->pending()) {
@@ -658,7 +665,7 @@
 bool QueryManager::ProcessPendingTransferQueries() {
   while (!pending_transfer_queries_.empty()) {
     Query* query = pending_transfer_queries_.front().get();
-    if (!query->Process()) {
+    if (!query->Process(false)) {
       return false;
     }
     if (query->pending()) {
diff --git a/gpu/command_buffer/service/query_manager.h b/gpu/command_buffer/service/query_manager.h
index 62da3b8..5f14929 100644
--- a/gpu/command_buffer/service/query_manager.h
+++ b/gpu/command_buffer/service/query_manager.h
@@ -64,7 +64,7 @@
     virtual bool End(base::subtle::Atomic32 submit_count) = 0;
 
     // Returns false if shared memory for sync is invalid.
-    virtual bool Process() = 0;
+    virtual bool Process(bool did_finish) = 0;
 
     virtual void Destroy(bool have_context) = 0;
 
@@ -170,8 +170,9 @@
   bool EndQuery(Query* query, base::subtle::Atomic32 submit_count);
 
   // Processes pending queries. Returns false if any queries are pointing
-  // to invalid shared memory.
-  bool ProcessPendingQueries();
+  // to invalid shared memory. |did_finish| is true if this is called as
+  // a result of calling glFinish().
+  bool ProcessPendingQueries(bool did_finish);
 
   // True if there are pending queries.
   bool HavePendingQueries();
diff --git a/gpu/command_buffer/service/query_manager_unittest.cc b/gpu/command_buffer/service/query_manager_unittest.cc
index 80efd69..7c8e93c 100644
--- a/gpu/command_buffer/service/query_manager_unittest.cc
+++ b/gpu/command_buffer/service/query_manager_unittest.cc
@@ -214,7 +214,7 @@
   const GLuint kResult = 1;
 
   // Check nothing happens if there are no pending queries.
-  EXPECT_TRUE(manager_->ProcessPendingQueries());
+  EXPECT_TRUE(manager_->ProcessPendingQueries(false));
 
   // Create Query.
   scoped_refptr<QueryManager::Query> query(
@@ -239,7 +239,7 @@
       GetQueryObjectuivARB(kService1Id, GL_QUERY_RESULT_AVAILABLE_EXT, _))
       .WillOnce(SetArgumentPointee<2>(0))
       .RetiresOnSaturation();
-  EXPECT_TRUE(manager_->ProcessPendingQueries());
+  EXPECT_TRUE(manager_->ProcessPendingQueries(false));
   EXPECT_TRUE(query->pending());
   EXPECT_EQ(0, sync->process_count);
   EXPECT_EQ(0u, sync->result);
@@ -254,7 +254,7 @@
       GetQueryObjectuivARB(kService1Id, GL_QUERY_RESULT_EXT, _))
       .WillOnce(SetArgumentPointee<2>(kResult))
       .RetiresOnSaturation();
-  EXPECT_TRUE(manager_->ProcessPendingQueries());
+  EXPECT_TRUE(manager_->ProcessPendingQueries(false));
   EXPECT_FALSE(query->pending());
   EXPECT_EQ(kSubmitCount, sync->process_count);
   EXPECT_EQ(kResult, sync->result);
@@ -262,7 +262,7 @@
 
   // Process with no queries.
   // Expect no GL commands/
-  EXPECT_TRUE(manager_->ProcessPendingQueries());
+  EXPECT_TRUE(manager_->ProcessPendingQueries(false));
 }
 
 TEST_F(QueryManagerTest, ProcessPendingQueries) {
@@ -342,7 +342,7 @@
         GetQueryObjectuivARB(kService3Id, GL_QUERY_RESULT_AVAILABLE_EXT, _))
         .WillOnce(SetArgumentPointee<2>(0))
         .RetiresOnSaturation();
-    EXPECT_TRUE(manager_->ProcessPendingQueries());
+    EXPECT_TRUE(manager_->ProcessPendingQueries(false));
   }
   EXPECT_FALSE(query1->pending());
   EXPECT_FALSE(query2->pending());
@@ -361,7 +361,7 @@
       GetQueryObjectuivARB(kService3Id, GL_QUERY_RESULT_AVAILABLE_EXT, _))
       .WillOnce(SetArgumentPointee<2>(0))
       .RetiresOnSaturation();
-  EXPECT_TRUE(manager_->ProcessPendingQueries());
+  EXPECT_TRUE(manager_->ProcessPendingQueries(false));
   EXPECT_TRUE(query3->pending());
   EXPECT_EQ(0, sync3->process_count);
   EXPECT_EQ(0u, sync3->result);
@@ -377,7 +377,7 @@
       GetQueryObjectuivARB(kService3Id, GL_QUERY_RESULT_EXT, _))
       .WillOnce(SetArgumentPointee<2>(kResult3))
       .RetiresOnSaturation();
-  EXPECT_TRUE(manager_->ProcessPendingQueries());
+  EXPECT_TRUE(manager_->ProcessPendingQueries(false));
   EXPECT_FALSE(query3->pending());
   EXPECT_EQ(kSubmitCount3, sync3->process_count);
   EXPECT_EQ(kResult3, sync3->result);
@@ -410,7 +410,7 @@
       GetQueryObjectuivARB(kService1Id, GL_QUERY_RESULT_EXT, _))
       .WillOnce(SetArgumentPointee<2>(kResult))
       .RetiresOnSaturation();
-  EXPECT_FALSE(manager_->ProcessPendingQueries());
+  EXPECT_FALSE(manager_->ProcessPendingQueries(false));
 }
 
 TEST_F(QueryManagerTest, ProcessPendingBadSharedMemoryOffset) {
@@ -439,7 +439,7 @@
       GetQueryObjectuivARB(kService1Id, GL_QUERY_RESULT_EXT, _))
       .WillOnce(SetArgumentPointee<2>(kResult))
       .RetiresOnSaturation();
-  EXPECT_FALSE(manager_->ProcessPendingQueries());
+  EXPECT_FALSE(manager_->ProcessPendingQueries(false));
 }
 
 TEST_F(QueryManagerTest, ExitWithPendingQuery) {
diff --git a/media/audio/mac/audio_low_latency_input_mac.cc b/media/audio/mac/audio_low_latency_input_mac.cc
index 5e1c973..6e01eda 100644
--- a/media/audio/mac/audio_low_latency_input_mac.cc
+++ b/media/audio/mac/audio_low_latency_input_mac.cc
@@ -461,6 +461,28 @@
   if (!audio_input)
     return kAudioUnitErr_InvalidElement;
 
+  // Update the |mDataByteSize| value in the audio_buffer_list() since
+  // |number_of_frames| can be changed on the fly.
+  // |mDataByteSize| needs to be exactly mapping to |number_of_frames|,
+  // otherwise it will put CoreAudio into bad state and results in
+  // AudioUnitRender() returning -50 for the new created stream.
+  // See crbug/428706 for details.
+  UInt32 new_size = number_of_frames * audio_input->format_.mBytesPerFrame;
+  AudioBuffer* audio_buffer = audio_input->audio_buffer_list()->mBuffers;
+  if (new_size != audio_buffer->mDataByteSize) {
+    if (new_size > audio_buffer->mDataByteSize) {
+      // This can happen iff the device is unpluged during recording. In such
+      // case the buffer will not be used anymore since |audio_unit_| becomes
+      // invalid. We allocate enough memory here to avoid depending on
+      // how CoreAudio handles it.
+      audio_input->audio_data_buffer_.reset(new uint8[new_size]);
+      audio_buffer->mData = audio_input->audio_data_buffer_.get();
+    }
+
+    // Update the |mDataByteSize| to match |number_of_frames|.
+    audio_buffer->mDataByteSize = new_size;
+  }
+
   // Receive audio from the AUHAL from the output scope of the Audio Unit.
   OSStatus result = AudioUnitRender(audio_input->audio_unit(),
                                     flags,
diff --git a/media/cast/logging/logging_defines.h b/media/cast/logging/logging_defines.h
index 021a3c9..0f57fe9 100644
--- a/media/cast/logging/logging_defines.h
+++ b/media/cast/logging/logging_defines.h
@@ -65,7 +65,10 @@
 
   EventMediaType media_type;
 
-  // Render / playout delay. Only set for FRAME_PLAYOUT events.
+  // Only set for FRAME_PLAYOUT events.
+  // If this value is zero the frame is rendered on time.
+  // If this value is positive it means the frame is rendered late.
+  // If this value is negative it means the frame is rendered early.
   base::TimeDelta delay_delta;
 
   // Whether the frame is a key frame. Only set for video FRAME_ENCODED event.
diff --git a/media/cast/logging/stats_event_subscriber.cc b/media/cast/logging/stats_event_subscriber.cc
index b22812e..c42affa 100644
--- a/media/cast/logging/stats_event_subscriber.cc
+++ b/media/cast/logging/stats_event_subscriber.cc
@@ -101,7 +101,12 @@
     : event_media_type_(event_media_type),
       clock_(clock),
       offset_estimator_(offset_estimator),
+      capture_latency_datapoints_(0),
+      encode_time_datapoints_(0),
+      queueing_latency_datapoints_(0),
       network_latency_datapoints_(0),
+      packet_latency_datapoints_(0),
+      frame_latency_datapoints_(0),
       e2e_latency_datapoints_(0),
       num_frames_dropped_by_encoder_(0),
       num_frames_late_(0),
@@ -150,7 +155,9 @@
     RecordE2ELatency(frame_event);
     base::TimeDelta delay_delta = frame_event.delay_delta;
     histograms_[PLAYOUT_DELAY_MS_HISTO]->Add(delay_delta.InMillisecondsF());
-    if (delay_delta <= base::TimeDelta())
+
+    // Positive delay_delta means the frame is late.
+    if (delay_delta > base::TimeDelta())
       num_frames_late_++;
   }
 
@@ -182,7 +189,7 @@
 
   if (type == PACKET_SENT_TO_NETWORK ||
       type == PACKET_RECEIVED) {
-    RecordNetworkLatency(packet_event);
+    RecordPacketRelatedLatencies(packet_event);
   } else if (type == PACKET_RETRANSMITTED) {
     // We only measure network latency using packets that doesn't have to be
     // retransmitted as there is precisely one sent-receive timestamp pairs.
@@ -226,6 +233,8 @@
     stats->SetDouble(CastStatToString(it->first),
                      round(it->second * 1000.0) / 1000.0);
   }
+
+  // Populate all histograms.
   for (HistogramMap::const_iterator it = histograms_.begin();
        it != histograms_.end();
        ++it) {
@@ -244,8 +253,18 @@
 
   frame_stats_.clear();
   packet_stats_.clear();
+  total_capture_latency_ = base::TimeDelta();
+  capture_latency_datapoints_ = 0;
+  total_encode_time_ = base::TimeDelta();
+  encode_time_datapoints_ = 0;
+  total_queueing_latency_ = base::TimeDelta();
+  queueing_latency_datapoints_ = 0;
   total_network_latency_ = base::TimeDelta();
   network_latency_datapoints_ = 0;
+  total_packet_latency_ = base::TimeDelta();
+  packet_latency_datapoints_ = 0;
+  total_frame_latency_ = base::TimeDelta();
+  frame_latency_datapoints_ = 0;
   total_e2e_latency_ = base::TimeDelta();
   e2e_latency_datapoints_ = 0;
   num_frames_dropped_by_encoder_ = 0;
@@ -269,47 +288,75 @@
     STAT_ENUM_TO_STRING(CAPTURE_FPS);
     STAT_ENUM_TO_STRING(ENCODE_FPS);
     STAT_ENUM_TO_STRING(DECODE_FPS);
+    STAT_ENUM_TO_STRING(AVG_CAPTURE_LATENCY_MS);
     STAT_ENUM_TO_STRING(AVG_ENCODE_TIME_MS);
-    STAT_ENUM_TO_STRING(AVG_PLAYOUT_DELAY_MS);
+    STAT_ENUM_TO_STRING(AVG_QUEUEING_LATENCY_MS);
     STAT_ENUM_TO_STRING(AVG_NETWORK_LATENCY_MS);
+    STAT_ENUM_TO_STRING(AVG_PACKET_LATENCY_MS);
+    STAT_ENUM_TO_STRING(AVG_FRAME_LATENCY_MS);
     STAT_ENUM_TO_STRING(AVG_E2E_LATENCY_MS);
     STAT_ENUM_TO_STRING(ENCODE_KBPS);
     STAT_ENUM_TO_STRING(TRANSMISSION_KBPS);
     STAT_ENUM_TO_STRING(RETRANSMISSION_KBPS);
-    STAT_ENUM_TO_STRING(PACKET_LOSS_FRACTION);
     STAT_ENUM_TO_STRING(MS_SINCE_LAST_RECEIVER_RESPONSE);
     STAT_ENUM_TO_STRING(NUM_FRAMES_CAPTURED);
     STAT_ENUM_TO_STRING(NUM_FRAMES_DROPPED_BY_ENCODER);
     STAT_ENUM_TO_STRING(NUM_FRAMES_LATE);
     STAT_ENUM_TO_STRING(NUM_PACKETS_SENT);
     STAT_ENUM_TO_STRING(NUM_PACKETS_RETRANSMITTED);
+    STAT_ENUM_TO_STRING(NUM_PACKETS_RECEIVED);
     STAT_ENUM_TO_STRING(NUM_PACKETS_RTX_REJECTED);
     STAT_ENUM_TO_STRING(FIRST_EVENT_TIME_MS);
     STAT_ENUM_TO_STRING(LAST_EVENT_TIME_MS);
     STAT_ENUM_TO_STRING(CAPTURE_LATENCY_MS_HISTO);
-    STAT_ENUM_TO_STRING(ENCODE_LATENCY_MS_HISTO);
+    STAT_ENUM_TO_STRING(ENCODE_TIME_MS_HISTO);
+    STAT_ENUM_TO_STRING(QUEUEING_LATENCY_MS_HISTO);
+    STAT_ENUM_TO_STRING(NETWORK_LATENCY_MS_HISTO);
     STAT_ENUM_TO_STRING(PACKET_LATENCY_MS_HISTO);
     STAT_ENUM_TO_STRING(FRAME_LATENCY_MS_HISTO);
+    STAT_ENUM_TO_STRING(E2E_LATENCY_MS_HISTO);
     STAT_ENUM_TO_STRING(PLAYOUT_DELAY_MS_HISTO);
   }
   NOTREACHED();
   return "";
 }
 
-const int kMaxLatencyBucketMs = 800;
-const int kBucketWidthMs = 20;
+const int kDefaultMaxLatencyBucketMs = 800;
+const int kDefaultBucketWidthMs = 20;
+
+// For small latency values.
+const int kSmallMaxLatencyBucketMs = 100;
+const int kSmallBucketWidthMs = 5;
+
+// For large latency values.
+const int kLargeMaxLatencyBucketMs = 1200;
+const int kLargeBucketWidthMs = 50;
 
 void StatsEventSubscriber::InitHistograms() {
-  histograms_[CAPTURE_LATENCY_MS_HISTO].reset(
-      new SimpleHistogram(0, kMaxLatencyBucketMs, kBucketWidthMs));
-  histograms_[ENCODE_LATENCY_MS_HISTO].reset(
-      new SimpleHistogram(0, kMaxLatencyBucketMs, kBucketWidthMs));
+  histograms_[E2E_LATENCY_MS_HISTO].reset(
+      new SimpleHistogram(0, kLargeMaxLatencyBucketMs,
+                          kLargeBucketWidthMs));
+  histograms_[QUEUEING_LATENCY_MS_HISTO].reset(
+      new SimpleHistogram(0, kDefaultMaxLatencyBucketMs,
+                          kDefaultBucketWidthMs));
+  histograms_[NETWORK_LATENCY_MS_HISTO].reset(
+      new SimpleHistogram(0, kDefaultMaxLatencyBucketMs,
+                          kDefaultBucketWidthMs));
   histograms_[PACKET_LATENCY_MS_HISTO].reset(
-      new SimpleHistogram(0, kMaxLatencyBucketMs, kBucketWidthMs));
+      new SimpleHistogram(0, kDefaultMaxLatencyBucketMs,
+                          kDefaultBucketWidthMs));
   histograms_[FRAME_LATENCY_MS_HISTO].reset(
-      new SimpleHistogram(0, kMaxLatencyBucketMs, kBucketWidthMs));
+      new SimpleHistogram(0, kDefaultMaxLatencyBucketMs,
+                          kDefaultBucketWidthMs));
   histograms_[PLAYOUT_DELAY_MS_HISTO].reset(
-      new SimpleHistogram(0, kMaxLatencyBucketMs, kBucketWidthMs));
+      new SimpleHistogram(0, kSmallMaxLatencyBucketMs,
+                          kSmallBucketWidthMs));
+  histograms_[CAPTURE_LATENCY_MS_HISTO].reset(
+      new SimpleHistogram(0, kSmallMaxLatencyBucketMs,
+                          kSmallBucketWidthMs));
+  histograms_[ENCODE_TIME_MS_HISTO].reset(
+      new SimpleHistogram(0, kSmallMaxLatencyBucketMs,
+                          kSmallBucketWidthMs));
 }
 
 void StatsEventSubscriber::GetStatsInternal(StatsMap* stats_map) const {
@@ -325,7 +372,6 @@
       end_time, FRAME_ENCODED, ENCODE_FPS, stats_map);
   PopulateFpsStat(
       end_time, FRAME_DECODED, DECODE_FPS, stats_map);
-  PopulatePlayoutDelayStat(stats_map);
   PopulateFrameBitrateStat(end_time, stats_map);
   PopulatePacketBitrateStat(end_time,
                             PACKET_SENT_TO_NETWORK,
@@ -335,14 +381,38 @@
                             PACKET_RETRANSMITTED,
                             RETRANSMISSION_KBPS,
                             stats_map);
-  PopulatePacketLossPercentageStat(stats_map);
   PopulateFrameCountStat(FRAME_CAPTURE_END, NUM_FRAMES_CAPTURED, stats_map);
   PopulatePacketCountStat(PACKET_SENT_TO_NETWORK, NUM_PACKETS_SENT, stats_map);
   PopulatePacketCountStat(
       PACKET_RETRANSMITTED, NUM_PACKETS_RETRANSMITTED, stats_map);
+  PopulatePacketCountStat(PACKET_RECEIVED, NUM_PACKETS_RECEIVED, stats_map);
   PopulatePacketCountStat(
       PACKET_RTX_REJECTED, NUM_PACKETS_RTX_REJECTED, stats_map);
 
+  if (capture_latency_datapoints_ > 0) {
+    double avg_capture_latency_ms =
+        total_capture_latency_.InMillisecondsF() /
+        capture_latency_datapoints_;
+    stats_map->insert(
+        std::make_pair(AVG_CAPTURE_LATENCY_MS, avg_capture_latency_ms));
+  }
+
+  if (encode_time_datapoints_ > 0) {
+    double avg_encode_time_ms =
+        total_encode_time_.InMillisecondsF() /
+        encode_time_datapoints_;
+    stats_map->insert(
+        std::make_pair(AVG_ENCODE_TIME_MS, avg_encode_time_ms));
+  }
+
+  if (queueing_latency_datapoints_ > 0) {
+    double avg_queueing_latency_ms =
+        total_queueing_latency_.InMillisecondsF() /
+        queueing_latency_datapoints_;
+    stats_map->insert(
+        std::make_pair(AVG_QUEUEING_LATENCY_MS, avg_queueing_latency_ms));
+  }
+
   if (network_latency_datapoints_ > 0) {
     double avg_network_latency_ms =
         total_network_latency_.InMillisecondsF() /
@@ -351,6 +421,21 @@
         std::make_pair(AVG_NETWORK_LATENCY_MS, avg_network_latency_ms));
   }
 
+  if (packet_latency_datapoints_ > 0) {
+    double avg_packet_latency_ms =
+        total_packet_latency_.InMillisecondsF() /
+        packet_latency_datapoints_;
+    stats_map->insert(
+        std::make_pair(AVG_PACKET_LATENCY_MS, avg_packet_latency_ms));
+  }
+
+  if (frame_latency_datapoints_ > 0) {
+    double avg_frame_latency_ms =
+        total_frame_latency_.InMillisecondsF() / frame_latency_datapoints_;
+    stats_map->insert(
+        std::make_pair(AVG_FRAME_LATENCY_MS, avg_frame_latency_ms));
+  }
+
   if (e2e_latency_datapoints_ > 0) {
     double avg_e2e_latency_ms =
         total_e2e_latency_.InMillisecondsF() / e2e_latency_datapoints_;
@@ -378,6 +463,13 @@
   }
 }
 
+StatsEventSubscriber::SimpleHistogram*
+StatsEventSubscriber::GetHistogramForTesting(
+    CastStat stats) const {
+  DCHECK(histograms_.find(stats) != histograms_.end());
+  return histograms_.find(stats)->second.get();
+}
+
 bool StatsEventSubscriber::GetReceiverOffset(base::TimeDelta* offset) {
   base::TimeDelta receiver_offset_lower_bound;
   base::TimeDelta receiver_offset_upper_bound;
@@ -403,7 +495,7 @@
 
   if (recent_frame_infos_.size() >= kMaxFrameInfoMapSize) {
     FrameInfoMap::iterator erase_it = recent_frame_infos_.begin();
-    if (erase_it->second.encode_time.is_null())
+    if (erase_it->second.encode_end_time.is_null())
       num_frames_dropped_by_encoder_++;
     recent_frame_infos_.erase(erase_it);
   }
@@ -419,13 +511,15 @@
 void StatsEventSubscriber::RecordCaptureLatency(const FrameEvent& frame_event) {
   FrameInfoMap::iterator it =
       recent_frame_infos_.find(frame_event.rtp_timestamp);
-  if (it == recent_frame_infos_.end())
+  if (it == recent_frame_infos_.end()) {
     return;
+  }
 
   if (!it->second.capture_time.is_null()) {
-    double capture_latency_ms =
-        (it->second.capture_time - frame_event.timestamp).InMillisecondsF();
-    histograms_[CAPTURE_LATENCY_MS_HISTO]->Add(capture_latency_ms);
+    base::TimeDelta latency = frame_event.timestamp - it->second.capture_time;
+    total_capture_latency_ += latency;
+    capture_latency_datapoints_++;
+    histograms_[CAPTURE_LATENCY_MS_HISTO]->Add(latency.InMillisecondsF());
   }
 
   it->second.capture_end_time = frame_event.timestamp;
@@ -436,18 +530,20 @@
       recent_frame_infos_.find(frame_event.rtp_timestamp);
   if (it == recent_frame_infos_.end()) {
     FrameInfo frame_info;
-    frame_info.encode_time = frame_event.timestamp;
+    frame_info.encode_end_time = frame_event.timestamp;
     MaybeInsertFrameInfo(frame_event.rtp_timestamp, frame_info);
     return;
   }
 
   if (!it->second.capture_end_time.is_null()) {
-    double encode_latency_ms =
-        (frame_event.timestamp - it->second.capture_end_time).InMillisecondsF();
-    histograms_[ENCODE_LATENCY_MS_HISTO]->Add(encode_latency_ms);
+    base::TimeDelta latency =
+        frame_event.timestamp - it->second.capture_end_time;
+    total_encode_time_ += latency;
+    encode_time_datapoints_++;
+    histograms_[ENCODE_TIME_MS_HISTO]->Add(latency.InMillisecondsF());
   }
 
-  it->second.encode_time = frame_event.timestamp;
+  it->second.encode_end_time = frame_event.timestamp;
 }
 
 void StatsEventSubscriber::RecordFrameTxLatency(const FrameEvent& frame_event) {
@@ -456,7 +552,7 @@
   if (it == recent_frame_infos_.end())
     return;
 
-  if (it->second.encode_time.is_null())
+  if (it->second.encode_end_time.is_null())
     return;
 
   base::TimeDelta receiver_offset;
@@ -464,9 +560,10 @@
     return;
 
   base::TimeTicks sender_time = frame_event.timestamp - receiver_offset;
-  double frame_tx_latency_ms =
-      (sender_time - it->second.encode_time).InMillisecondsF();
-  histograms_[FRAME_LATENCY_MS_HISTO]->Add(frame_tx_latency_ms);
+  base::TimeDelta latency = sender_time - it->second.encode_end_time;
+  total_frame_latency_ += latency;
+  frame_latency_datapoints_++;
+  histograms_[FRAME_LATENCY_MS_HISTO]->Add(latency.InMillisecondsF());
 }
 
 void StatsEventSubscriber::RecordE2ELatency(const FrameEvent& frame_event) {
@@ -482,8 +579,10 @@
   // Playout time is event time + playout delay.
   base::TimeTicks playout_time =
       frame_event.timestamp + frame_event.delay_delta - receiver_offset;
-  total_e2e_latency_ += playout_time - it->second.capture_time;
+  base::TimeDelta latency = playout_time - it->second.capture_time;
+  total_e2e_latency_ += latency;
   e2e_latency_datapoints_++;
+  histograms_[E2E_LATENCY_MS_HISTO]->Add(latency.InMillisecondsF());
 }
 
 void StatsEventSubscriber::UpdateLastResponseTime(
@@ -502,8 +601,23 @@
   packet_sent_times_.erase(key);
 }
 
-void StatsEventSubscriber::RecordNetworkLatency(
+void StatsEventSubscriber::RecordPacketRelatedLatencies(
     const PacketEvent& packet_event) {
+  // Log queueing latency.
+  if (packet_event.type == PACKET_SENT_TO_NETWORK) {
+    FrameInfoMap::iterator it =
+        recent_frame_infos_.find(packet_event.rtp_timestamp);
+    if (it != recent_frame_infos_.end()) {
+      base::TimeDelta latency =
+          packet_event.timestamp - it->second.encode_end_time;
+      total_queueing_latency_ += latency;
+      queueing_latency_datapoints_++;
+      histograms_[QUEUEING_LATENCY_MS_HISTO]->Add(
+          latency.InMillisecondsF());
+    }
+  }
+
+  // Log network latency and total packet latency;
   base::TimeDelta receiver_offset;
   if (!GetReceiverOffset(&receiver_offset))
     return;
@@ -535,17 +649,28 @@
       match = true;
     }
     if (match) {
+      packet_sent_times_.erase(it);
+
       // Subtract by offset.
       packet_received_time -= receiver_offset;
       base::TimeDelta latency_delta = packet_received_time - packet_sent_time;
 
       total_network_latency_ += latency_delta;
       network_latency_datapoints_++;
-
-      histograms_[PACKET_LATENCY_MS_HISTO]->Add(
+      histograms_[NETWORK_LATENCY_MS_HISTO]->Add(
           latency_delta.InMillisecondsF());
 
-      packet_sent_times_.erase(it);
+      // Log total network latency.
+      FrameInfoMap::iterator frame_it =
+          recent_frame_infos_.find(packet_event.rtp_timestamp);
+      if (frame_it != recent_frame_infos_.end()) {
+        base::TimeDelta latency =
+            packet_received_time - frame_it->second.encode_end_time;
+        total_packet_latency_ += latency;
+        packet_latency_datapoints_++;
+        histograms_[PACKET_LATENCY_MS_HISTO]->Add(
+            latency.InMillisecondsF());
+      }
     }
   }
 }
@@ -583,18 +708,6 @@
   }
 }
 
-void StatsEventSubscriber::PopulatePlayoutDelayStat(StatsMap* stats_map) const {
-  FrameStatsMap::const_iterator it = frame_stats_.find(FRAME_PLAYOUT);
-  if (it != frame_stats_.end()) {
-    double avg_delay_ms = 0.0;
-    base::TimeDelta sum_delay = it->second.sum_delay;
-    int count = it->second.event_counter;
-    if (count != 0)
-      avg_delay_ms = sum_delay.InMillisecondsF() / count;
-    stats_map->insert(std::make_pair(AVG_PLAYOUT_DELAY_MS, avg_delay_ms));
-  }
-}
-
 void StatsEventSubscriber::PopulateFrameBitrateStat(base::TimeTicks end_time,
                                                     StatsMap* stats_map) const {
   FrameStatsMap::const_iterator it = frame_stats_.find(FRAME_ENCODED);
@@ -626,28 +739,6 @@
   }
 }
 
-void StatsEventSubscriber::PopulatePacketLossPercentageStat(
-    StatsMap* stats_map) const {
-  // We assume that retransmission means that the packet's previous
-  // (re)transmission was lost.
-  // This means the percentage of packet loss is
-  // (# of retransmit events) / (# of transmit + retransmit events).
-  PacketStatsMap::const_iterator sent_it =
-      packet_stats_.find(PACKET_SENT_TO_NETWORK);
-  if (sent_it == packet_stats_.end())
-    return;
-  PacketStatsMap::const_iterator retransmitted_it =
-      packet_stats_.find(PACKET_RETRANSMITTED);
-  int sent_count = sent_it->second.event_counter;
-  int retransmitted_count = 0;
-  if (retransmitted_it != packet_stats_.end())
-    retransmitted_count = retransmitted_it->second.event_counter;
-  double packet_loss_fraction = static_cast<double>(retransmitted_count) /
-                                (sent_count + retransmitted_count);
-  stats_map->insert(
-      std::make_pair(PACKET_LOSS_FRACTION, packet_loss_fraction));
-}
-
 StatsEventSubscriber::FrameLogStats::FrameLogStats()
     : event_counter(0), sum_size(0) {}
 StatsEventSubscriber::FrameLogStats::~FrameLogStats() {}
diff --git a/media/cast/logging/stats_event_subscriber.h b/media/cast/logging/stats_event_subscriber.h
index 2039402..3e8c83b 100644
--- a/media/cast/logging/stats_event_subscriber.h
+++ b/media/cast/logging/stats_event_subscriber.h
@@ -57,6 +57,7 @@
   FRIEND_TEST_ALL_PREFIXES(StatsEventSubscriberTest, PlayoutDelay);
   FRIEND_TEST_ALL_PREFIXES(StatsEventSubscriberTest, E2ELatency);
   FRIEND_TEST_ALL_PREFIXES(StatsEventSubscriberTest, Packets);
+  FRIEND_TEST_ALL_PREFIXES(StatsEventSubscriberTest, Histograms);
 
   static const size_t kMaxFrameInfoMapSize = 100;
 
@@ -113,15 +114,22 @@
     ENCODE_FPS,
     // Decode frame rate.
     DECODE_FPS,
+    // Average capture latency in milliseconds.
+    AVG_CAPTURE_LATENCY_MS,
     // Average encode duration in milliseconds.
-    // TODO(imcheng): This stat is not populated yet because we do not have
-    // the time when encode started. Record it in FRAME_ENCODED event.
     AVG_ENCODE_TIME_MS,
-    // Average playout delay in milliseconds.
-    AVG_PLAYOUT_DELAY_MS,
+    // Duration from when a frame is encoded to when the packet is first
+    // sent.
+    AVG_QUEUEING_LATENCY_MS,
     // Duration from when a packet is transmitted to when it is received.
     // This measures latency from sender to receiver.
     AVG_NETWORK_LATENCY_MS,
+    // Duration from when a frame is encoded to when the packet is first
+    // received.
+    AVG_PACKET_LATENCY_MS,
+    // Average latency between frame encoded and the moment when the frame
+    // is fully received.
+    AVG_FRAME_LATENCY_MS,
     // Duration from when a frame is captured to when it should be played out.
     AVG_E2E_LATENCY_MS,
     // Encode bitrate in kbps.
@@ -130,8 +138,6 @@
     TRANSMISSION_KBPS,
     // Packet retransmission bitrate in kbps.
     RETRANSMISSION_KBPS,
-    // Fraction of packet loss.
-    PACKET_LOSS_FRACTION,
     // Duration in milliseconds since last receiver response.
     MS_SINCE_LAST_RECEIVER_RESPONSE,
     // Number of frames captured.
@@ -144,6 +150,8 @@
     NUM_PACKETS_SENT,
     // Number of packets that were retransmitted.
     NUM_PACKETS_RETRANSMITTED,
+    // Number of packets that were received by receiver.
+    NUM_PACKETS_RECEIVED,
     // Number of packets that had their retransmission cancelled.
     NUM_PACKETS_RTX_REJECTED,
     // Unix time in milliseconds of first event since reset.
@@ -153,9 +161,12 @@
 
     // Histograms
     CAPTURE_LATENCY_MS_HISTO,
-    ENCODE_LATENCY_MS_HISTO,
+    ENCODE_TIME_MS_HISTO,
+    QUEUEING_LATENCY_MS_HISTO,
+    NETWORK_LATENCY_MS_HISTO,
     PACKET_LATENCY_MS_HISTO,
     FRAME_LATENCY_MS_HISTO,
+    E2E_LATENCY_MS_HISTO,
     PLAYOUT_DELAY_MS_HISTO
   };
 
@@ -165,7 +176,7 @@
 
     base::TimeTicks capture_time;
     base::TimeTicks capture_end_time;
-    base::TimeTicks encode_time;
+    base::TimeTicks encode_end_time;
     bool encoded;
   };
 
@@ -186,6 +197,9 @@
   // Assigns |stats_map| with stats data. Used for testing.
   void GetStatsInternal(StatsMap* stats_map) const;
 
+  // Return a histogram of the type specified.
+  SimpleHistogram* GetHistogramForTesting(CastStat stats) const;
+
   void UpdateFirstLastEventTime(base::TimeTicks timestamp,
                                 bool is_receiver_event);
   bool GetReceiverOffset(base::TimeDelta* offset);
@@ -198,7 +212,7 @@
   void RecordE2ELatency(const FrameEvent& frame_event);
   void RecordPacketSentTime(const PacketEvent& packet_event);
   void ErasePacketSentTime(const PacketEvent& packet_event);
-  void RecordNetworkLatency(const PacketEvent& packet_event);
+  void RecordPacketRelatedLatencies(const PacketEvent& packet_event);
   void UpdateLastResponseTime(base::TimeTicks receiver_time);
 
   void PopulateFpsStat(base::TimeTicks now,
@@ -211,13 +225,11 @@
   void PopulatePacketCountStat(CastLoggingEvent event,
                                CastStat stat,
                                StatsMap* stats_map) const;
-  void PopulatePlayoutDelayStat(StatsMap* stats_map) const;
   void PopulateFrameBitrateStat(base::TimeTicks now, StatsMap* stats_map) const;
   void PopulatePacketBitrateStat(base::TimeTicks now,
                                  CastLoggingEvent event,
                                  CastStat stat,
                                  StatsMap* stats_map) const;
-  void PopulatePacketLossPercentageStat(StatsMap* stats_map) const;
 
   const EventMediaType event_media_type_;
 
@@ -230,8 +242,18 @@
   FrameStatsMap frame_stats_;
   PacketStatsMap packet_stats_;
 
+  base::TimeDelta total_capture_latency_;
+  int capture_latency_datapoints_;
+  base::TimeDelta total_encode_time_;
+  int encode_time_datapoints_;
+  base::TimeDelta total_queueing_latency_;
+  int queueing_latency_datapoints_;
   base::TimeDelta total_network_latency_;
   int network_latency_datapoints_;
+  base::TimeDelta total_packet_latency_;
+  int packet_latency_datapoints_;
+  base::TimeDelta total_frame_latency_;
+  int frame_latency_datapoints_;
   base::TimeDelta total_e2e_latency_;
   int e2e_latency_datapoints_;
 
diff --git a/media/cast/logging/stats_event_subscriber_unittest.cc b/media/cast/logging/stats_event_subscriber_unittest.cc
index 41388e0..570e2cc 100644
--- a/media/cast/logging/stats_event_subscriber_unittest.cc
+++ b/media/cast/logging/stats_event_subscriber_unittest.cc
@@ -131,6 +131,11 @@
   ASSERT_TRUE(it != stats_map.end());
 
   EXPECT_DOUBLE_EQ(it->second, static_cast<double>(dropped_frames));
+
+  it = stats_map.find(StatsEventSubscriber::AVG_CAPTURE_LATENCY_MS);
+  ASSERT_TRUE(it != stats_map.end());
+
+  EXPECT_DOUBLE_EQ(it->second, static_cast<double>(0.01));
 }
 
 TEST_F(StatsEventSubscriberTest, Encode) {
@@ -236,12 +241,10 @@
   uint32 rtp_timestamp = 0;
   uint32 frame_id = 0;
   int num_frames = 10;
-  int total_delay_ms = 0;
   int late_frames = 0;
   for (int i = 0, delay_ms = -50; i < num_frames; i++, delay_ms += 10) {
     base::TimeDelta delay = base::TimeDelta::FromMilliseconds(delay_ms);
-    total_delay_ms += delay_ms;
-    if (delay_ms <= 0)
+    if (delay_ms > 0)
       late_frames++;
     cast_environment_->Logging()->InsertFrameEventWithDelay(
         receiver_clock_.NowTicks(),
@@ -259,14 +262,8 @@
   StatsEventSubscriber::StatsMap stats_map;
   subscriber_->GetStatsInternal(&stats_map);
 
-  StatsEventSubscriber::StatsMap::iterator it =
-      stats_map.find(StatsEventSubscriber::AVG_PLAYOUT_DELAY_MS);
-  ASSERT_TRUE(it != stats_map.end());
-
-  EXPECT_DOUBLE_EQ(
-      it->second, static_cast<double>(total_delay_ms) / num_frames);
-
-  it = stats_map.find(StatsEventSubscriber::NUM_FRAMES_LATE);
+  StatsEventSubscriber::StatsMap::iterator it = stats_map.find(
+      StatsEventSubscriber::NUM_FRAMES_LATE);
   ASSERT_TRUE(it != stats_map.end());
 
   EXPECT_DOUBLE_EQ(it->second, late_frames);
@@ -326,10 +323,22 @@
   base::TimeTicks start_time = sender_clock_->NowTicks();
   int total_size = 0;
   int retransmit_total_size = 0;
-  base::TimeDelta total_latency;
+  base::TimeDelta total_network_latency;
+  base::TimeDelta total_queueing_latency;
+  base::TimeDelta total_packet_latency;
   int num_packets_transmitted = 0;
+  int num_packets_received = 0;
   int num_packets_retransmitted = 0;
   int num_packets_rtx_rejected = 0;
+
+  base::TimeTicks sender_encoded_time = sender_clock_->NowTicks();
+  base::TimeTicks receiver_encoded_time = receiver_clock_.NowTicks();
+  cast_environment_->Logging()->InsertFrameEvent(sender_encoded_time,
+                                                 FRAME_ENCODED,
+                                                 VIDEO_EVENT,
+                                                 rtp_timestamp,
+                                                 0);
+
   // Every 2nd packet will be retransmitted once.
   // Every 4th packet will be retransmitted twice.
   // Every 8th packet will be retransmitted 3 times + 1 rejected retransmission.
@@ -346,12 +355,15 @@
                                                     num_packets - 1,
                                                     size);
     num_packets_transmitted++;
+    total_queueing_latency += sender_clock_->NowTicks() - sender_encoded_time;
 
     int latency_micros = 20000 + base::RandInt(-10000, 10000);
     base::TimeDelta latency = base::TimeDelta::FromMicroseconds(latency_micros);
     // Latency is only recorded for packets that aren't retransmitted.
     if (i % 2 != 0) {
-      total_latency += latency;
+      total_network_latency += latency;
+      total_packet_latency +=
+          receiver_clock_.NowTicks() - receiver_encoded_time + latency;
       num_latency_recorded_packets++;
     }
 
@@ -428,6 +440,7 @@
                                                     i,
                                                     num_packets - 1,
                                                     size);
+    num_packets_received++;
   }
 
   base::TimeTicks end_time = sender_clock_->NowTicks();
@@ -436,15 +449,28 @@
   StatsEventSubscriber::StatsMap stats_map;
   subscriber_->GetStatsInternal(&stats_map);
 
-  // Measure AVG_NETWORK_LATENCY_MS, TRANSMISSION_KBPS, RETRANSMISSION_KBPS,
-  // and PACKET_LOSS_FRACTION.
+  // Measure AVG_NETWORK_LATENCY_MS, TRANSMISSION_KBPS, RETRANSMISSION_KBPS.
   StatsEventSubscriber::StatsMap::iterator it =
       stats_map.find(StatsEventSubscriber::AVG_NETWORK_LATENCY_MS);
   ASSERT_TRUE(it != stats_map.end());
 
   EXPECT_DOUBLE_EQ(
       it->second,
-      total_latency.InMillisecondsF() / num_latency_recorded_packets);
+      total_network_latency.InMillisecondsF() / num_latency_recorded_packets);
+
+  it = stats_map.find(StatsEventSubscriber::AVG_QUEUEING_LATENCY_MS);
+  ASSERT_TRUE(it != stats_map.end());
+
+  EXPECT_DOUBLE_EQ(
+      it->second,
+      total_queueing_latency.InMillisecondsF() / num_packets);
+
+  it = stats_map.find(StatsEventSubscriber::AVG_PACKET_LATENCY_MS);
+  ASSERT_TRUE(it != stats_map.end());
+
+  EXPECT_DOUBLE_EQ(
+      it->second,
+      total_packet_latency.InMillisecondsF() / num_latency_recorded_packets);
 
   it = stats_map.find(StatsEventSubscriber::TRANSMISSION_KBPS);
   ASSERT_TRUE(it != stats_map.end());
@@ -459,18 +485,16 @@
               static_cast<double>(retransmit_total_size) /
                   duration.InMillisecondsF() * 8);
 
-  it = stats_map.find(StatsEventSubscriber::PACKET_LOSS_FRACTION);
-  ASSERT_TRUE(it != stats_map.end());
-
-  EXPECT_DOUBLE_EQ(
-      it->second,
-      static_cast<double>(num_packets_retransmitted) / num_packets_transmitted);
-
   it = stats_map.find(StatsEventSubscriber::NUM_PACKETS_SENT);
   ASSERT_TRUE(it != stats_map.end());
 
   EXPECT_DOUBLE_EQ(it->second, static_cast<double>(num_packets));
 
+  it = stats_map.find(StatsEventSubscriber::NUM_PACKETS_RECEIVED);
+  ASSERT_TRUE(it != stats_map.end());
+
+  EXPECT_DOUBLE_EQ(it->second, static_cast<double>(num_packets_received));
+
   it = stats_map.find(StatsEventSubscriber::NUM_PACKETS_RETRANSMITTED);
   ASSERT_TRUE(it != stats_map.end());
 
@@ -482,5 +506,122 @@
   EXPECT_DOUBLE_EQ(it->second, static_cast<double>(num_packets_rtx_rejected));
 }
 
+bool CheckHistogramHasValue(base::ListValue* values,
+                            const std::string& bucket, int expected_count) {
+  for (size_t i = 0; i < values->GetSize(); ++i) {
+    const base::DictionaryValue* dict = NULL;
+    values->GetDictionary(i, &dict);
+    if (!dict->HasKey(bucket))
+      continue;
+    int bucket_count = 0;
+    if (!dict->GetInteger(bucket, &bucket_count))
+      return false;
+    return bucket_count == expected_count;
+  }
+  return false;
+}
+
+TEST_F(StatsEventSubscriberTest, Histograms) {
+  Init(VIDEO_EVENT);
+  AdvanceClocks(base::TimeDelta::FromMilliseconds(123));
+
+  uint32 rtp_timestamp = 123;
+  uint32 frame_id = 0;
+
+  // 10 Frames with capture latency in the bucket of "10-14"ms.
+  // 10 Frames with encode time in the bucket of "15-19"ms.
+  for (int i = 0; i < 10; ++i) {
+    ++frame_id;
+    ++rtp_timestamp;
+    cast_environment_->Logging()->InsertFrameEvent(sender_clock_->NowTicks(),
+                                                   FRAME_CAPTURE_BEGIN,
+                                                   VIDEO_EVENT,
+                                                   rtp_timestamp,
+                                                   frame_id);
+    AdvanceClocks(base::TimeDelta::FromMilliseconds(10));
+    cast_environment_->Logging()->InsertFrameEvent(sender_clock_->NowTicks(),
+                                                   FRAME_CAPTURE_END,
+                                                   VIDEO_EVENT,
+                                                   rtp_timestamp,
+                                                   frame_id);
+    AdvanceClocks(base::TimeDelta::FromMilliseconds(15));
+    cast_environment_->Logging()->InsertEncodedFrameEvent(
+        sender_clock_->NowTicks(),
+        FRAME_ENCODED,
+        VIDEO_EVENT,
+        rtp_timestamp,
+        frame_id,
+        1024,
+        true,
+        5678);
+  }
+
+  // Send 3 packets for the last frame.
+  // Queueing latencies are 100ms, 200ms and 300ms.
+  for (int i = 0; i < 3; ++i) {
+    AdvanceClocks(base::TimeDelta::FromMilliseconds(100));
+    cast_environment_->Logging()->InsertPacketEvent(sender_clock_->NowTicks(),
+                                                    PACKET_SENT_TO_NETWORK,
+                                                    VIDEO_EVENT,
+                                                    rtp_timestamp,
+                                                    0,
+                                                    i,
+                                                    2,
+                                                    123);
+  }
+
+  // Receive 3 packets for the last frame.
+  // Network latencies are 100ms, 200ms and 300ms.
+  // Packet latencies are 400ms.
+  AdvanceClocks(base::TimeDelta::FromMilliseconds(100));
+  for (int i = 0; i < 3; ++i) {
+    cast_environment_->Logging()->InsertPacketEvent(receiver_clock_.NowTicks(),
+                                                    PACKET_RECEIVED,
+                                                    VIDEO_EVENT,
+                                                    rtp_timestamp,
+                                                    0,
+                                                    i,
+                                                    2,
+                                                    123);
+  }
+
+  StatsEventSubscriber::SimpleHistogram* histogram;
+  scoped_ptr<base::ListValue> values;
+
+  histogram = subscriber_->GetHistogramForTesting(
+      StatsEventSubscriber::CAPTURE_LATENCY_MS_HISTO);
+  ASSERT_TRUE(histogram);
+  values = histogram->GetHistogram().Pass();
+  EXPECT_TRUE(CheckHistogramHasValue(values.get(), "10-14", 10));
+
+  histogram = subscriber_->GetHistogramForTesting(
+      StatsEventSubscriber::ENCODE_TIME_MS_HISTO);
+  ASSERT_TRUE(histogram);
+  values = histogram->GetHistogram().Pass();
+  EXPECT_TRUE(CheckHistogramHasValue(values.get(), "15-19", 10));
+
+  histogram = subscriber_->GetHistogramForTesting(
+      StatsEventSubscriber::QUEUEING_LATENCY_MS_HISTO);
+  ASSERT_TRUE(histogram);
+  values = histogram->GetHistogram().Pass();
+  EXPECT_TRUE(CheckHistogramHasValue(values.get(), "100-119", 1));
+  EXPECT_TRUE(CheckHistogramHasValue(values.get(), "200-219", 1));
+  EXPECT_TRUE(CheckHistogramHasValue(values.get(), "300-319", 1));
+
+  histogram = subscriber_->GetHistogramForTesting(
+      StatsEventSubscriber::NETWORK_LATENCY_MS_HISTO);
+  ASSERT_TRUE(histogram);
+  values = histogram->GetHistogram().Pass();
+  EXPECT_TRUE(CheckHistogramHasValue(values.get(), "100-119", 1));
+  EXPECT_TRUE(CheckHistogramHasValue(values.get(), "200-219", 1));
+  EXPECT_TRUE(CheckHistogramHasValue(values.get(), "300-319", 1));
+
+  histogram = subscriber_->GetHistogramForTesting(
+      StatsEventSubscriber::PACKET_LATENCY_MS_HISTO);
+  ASSERT_TRUE(histogram);
+  values = histogram->GetHistogram().Pass();
+  EXPECT_TRUE(CheckHistogramHasValue(values.get(), "400-419", 3));
+}
+
 }  // namespace cast
 }  // namespace media
diff --git a/net/base/net_error_list.h b/net/base/net_error_list.h
index 4b61e0e..89fbfff 100644
--- a/net/base/net_error_list.h
+++ b/net/base/net_error_list.h
@@ -444,16 +444,13 @@
 // The certificate claimed DNS names that are in violation of name constraints.
 NET_ERROR(CERT_NAME_CONSTRAINT_VIOLATION, -212)
 
-// The certificate's validity period is too long.
-NET_ERROR(CERT_VALIDITY_TOO_LONG, -213)
-
 // Add new certificate error codes here.
 //
 // Update the value of CERT_END whenever you add a new certificate error
 // code.
 
 // The value immediately past the last certificate error code.
-NET_ERROR(CERT_END, -214)
+NET_ERROR(CERT_END, -213)
 
 // The URL is invalid.
 NET_ERROR(INVALID_URL, -300)
diff --git a/net/cert/cert_status_flags.cc b/net/cert/cert_status_flags.cc
index e8d9aab..d278ea4 100644
--- a/net/cert/cert_status_flags.cc
+++ b/net/cert/cert_status_flags.cc
@@ -49,8 +49,6 @@
       return CERT_STATUS_PINNED_KEY_MISSING;
     case ERR_CERT_NAME_CONSTRAINT_VIOLATION:
       return CERT_STATUS_NAME_CONSTRAINT_VIOLATION;
-    case ERR_CERT_VALIDITY_TOO_LONG:
-      return CERT_STATUS_VALIDITY_TOO_LONG;
     default:
       return 0;
   }
@@ -83,8 +81,6 @@
     return ERR_CERT_WEAK_KEY;
   if (cert_status & CERT_STATUS_DATE_INVALID)
     return ERR_CERT_DATE_INVALID;
-  if (cert_status & CERT_STATUS_VALIDITY_TOO_LONG)
-    return ERR_CERT_VALIDITY_TOO_LONG;
 
   // Unknown status.  Give it the benefit of the doubt.
   if (cert_status & CERT_STATUS_UNABLE_TO_CHECK_REVOCATION)
diff --git a/net/cert/cert_status_flags_list.h b/net/cert/cert_status_flags_list.h
index 932e938..c660a7b 100644
--- a/net/cert/cert_status_flags_list.h
+++ b/net/cert/cert_status_flags_list.h
@@ -24,7 +24,6 @@
 // 1 << 12 was used for CERT_STATUS_WEAK_DH_KEY
 CERT_STATUS_FLAG(PINNED_KEY_MISSING, 1 << 13)
 CERT_STATUS_FLAG(NAME_CONSTRAINT_VIOLATION, 1 << 14)
-CERT_STATUS_FLAG(VALIDITY_TOO_LONG, 1 << 15)
 
 // Bits 16 to 31 are for non-error statuses.
 CERT_STATUS_FLAG(IS_EV, 1 << 16)
diff --git a/net/cert/cert_verify_proc.cc b/net/cert/cert_verify_proc.cc
index 981bea0..222ba47 100644
--- a/net/cert/cert_verify_proc.cc
+++ b/net/cert/cert_verify_proc.cc
@@ -4,13 +4,10 @@
 
 #include "net/cert/cert_verify_proc.h"
 
-#include <stdint.h>
-
 #include "base/basictypes.h"
 #include "base/metrics/histogram.h"
 #include "base/sha1.h"
 #include "base/strings/stringprintf.h"
-#include "base/time/time.h"
 #include "build/build_config.h"
 #include "net/base/net_errors.h"
 #include "net/base/net_util.h"
@@ -36,6 +33,7 @@
 #error Implement certificate verification.
 #endif
 
+
 namespace net {
 
 namespace {
@@ -278,13 +276,6 @@
     // now treat it as a warning and do not map it to an error return value.
   }
 
-  // Flag certificates using too long validity periods.
-  if (verify_result->is_issued_by_known_root && HasTooLongValidity(*cert)) {
-    verify_result->cert_status |= CERT_STATUS_VALIDITY_TOO_LONG;
-    if (rv == OK)
-      rv = MapCertStatusToNetError(verify_result->cert_status);
-  }
-
   return rv;
 }
 
@@ -623,41 +614,4 @@
   return false;
 }
 
-// static
-bool CertVerifyProc::HasTooLongValidity(const X509Certificate& cert) {
-  const base::Time& start = cert.valid_start();
-  const base::Time& expiry = cert.valid_expiry();
-  if (start.is_max() || start.is_null() || expiry.is_max() ||
-      expiry.is_null() || start > expiry) {
-    return true;
-  }
-
-  base::Time::Exploded exploded_start;
-  base::Time::Exploded exploded_expiry;
-  cert.valid_start().UTCExplode(&exploded_start);
-  cert.valid_expiry().UTCExplode(&exploded_expiry);
-
-  if (exploded_expiry.year - exploded_start.year > 10)
-    return true;
-  int month_diff = (exploded_expiry.year - exploded_start.year) * 12 +
-                   (exploded_expiry.month - exploded_start.month);
-
-  // Add any remainder as a full month.
-  if (exploded_expiry.day_of_month > exploded_start.day_of_month)
-    ++month_diff;
-
-  static const base::Time time_2015_04_01 =
-      base::Time::FromInternalValue(INT64_C(1427871600));
-  static const base::Time time_2012_07_01 =
-      base::Time::FromInternalValue(INT64_C(1341126000));
-  static const base::Time time_2019_07_01 =
-      base::Time::FromInternalValue(INT64_C(1561964400));
-
-  if (start >= time_2015_04_01)
-    return month_diff > 39;
-  if (start >= time_2012_07_01)
-    return month_diff > 60;
-  return month_diff > 120 || expiry > time_2019_07_01;
-}
-
 }  // namespace net
diff --git a/net/cert/cert_verify_proc.h b/net/cert/cert_verify_proc.h
index f60ed6d..95e464e 100644
--- a/net/cert/cert_verify_proc.h
+++ b/net/cert/cert_verify_proc.h
@@ -73,7 +73,6 @@
  private:
   friend class base::RefCountedThreadSafe<CertVerifyProc>;
   FRIEND_TEST_ALL_PREFIXES(CertVerifyProcTest, DigiNotarCerts);
-  FRIEND_TEST_ALL_PREFIXES(CertVerifyProcTest, TestHasTooLongValidity);
 
   // Performs the actual verification using the desired underlying
   // cryptographic library.
@@ -100,18 +99,6 @@
       const std::vector<std::string>& dns_names,
       const std::vector<std::string>& ip_addrs);
 
-  // The CA/Browser Forum's Baseline Requirements specify maximum validity
-  // periods (https://cabforum.org/Baseline_Requirements_V1.pdf):
-  //
-  // For certificates issued after 1 July 2012: 60 months.
-  // For certificates issued after 1 April 2015: 39 months.
-  //
-  // For certificates issued before the BRs took effect, there were no
-  // guidelines, but clamp them at a maximum of 10 year validity, with the
-  // requirement they expire within 7 years after the effective date of the BRs
-  // (i.e. by 1 July 2019).
-  static bool HasTooLongValidity(const X509Certificate& cert);
-
   DISALLOW_COPY_AND_ASSIGN(CertVerifyProc);
 };
 
diff --git a/net/cert/cert_verify_proc_unittest.cc b/net/cert/cert_verify_proc_unittest.cc
index a004f98..10a880b 100644
--- a/net/cert/cert_verify_proc_unittest.cc
+++ b/net/cert/cert_verify_proc_unittest.cc
@@ -615,36 +615,16 @@
             verify_result.cert_status & CERT_STATUS_NAME_CONSTRAINT_VIOLATION);
 }
 
-TEST_F(CertVerifyProcTest, TestHasTooLongValidity) {
-  base::FilePath certs_dir = GetTestCertsDirectory();
-
-  scoped_refptr<X509Certificate> twitter =
-      ImportCertFromFile(certs_dir, "twitter-chain.pem");
-  EXPECT_FALSE(CertVerifyProc::HasTooLongValidity(*twitter));
-
-  scoped_refptr<X509Certificate> eleven_years =
-      ImportCertFromFile(certs_dir, "11_year_validity.pem");
-  EXPECT_TRUE(CertVerifyProc::HasTooLongValidity(*eleven_years));
-
-  scoped_refptr<X509Certificate> forty_months =
-      ImportCertFromFile(certs_dir, "40_months_after_2015_04.pem");
-  EXPECT_TRUE(CertVerifyProc::HasTooLongValidity(*forty_months));
-
-  scoped_refptr<X509Certificate> sixty_one_months =
-      ImportCertFromFile(certs_dir, "61_months_after_2012_07.pem");
-  EXPECT_TRUE(CertVerifyProc::HasTooLongValidity(*sixty_one_months));
-}
-
 TEST_F(CertVerifyProcTest, TestKnownRoot) {
   if (!SupportsDetectingKnownRoots()) {
-    LOG(INFO) << "Skipping this test on this platform.";
+    LOG(INFO) << "Skipping this test in this platform.";
     return;
   }
 
   base::FilePath certs_dir = GetTestCertsDirectory();
   CertificateList certs = CreateCertificateListFromFile(
-      certs_dir, "twitter-chain.pem", X509Certificate::FORMAT_AUTO);
-  ASSERT_EQ(3U, certs.size());
+      certs_dir, "satveda.pem", X509Certificate::FORMAT_AUTO);
+  ASSERT_EQ(2U, certs.size());
 
   X509Certificate::OSCertHandles intermediates;
   intermediates.push_back(certs[1]->os_cert_handle());
@@ -655,18 +635,20 @@
 
   int flags = 0;
   CertVerifyResult verify_result;
-  // This will blow up, May 9th, 2016. Sorry! Please disable and file a bug
+  // This will blow up, May 24th, 2019. Sorry! Please disable and file a bug
   // against agl. See also PublicKeyHashes.
   int error = Verify(cert_chain.get(),
-                     "twitter.com",
+                     "satveda.com",
                      flags,
                      NULL,
                      empty_cert_list_,
                      &verify_result);
   EXPECT_EQ(OK, error);
+  EXPECT_EQ(CERT_STATUS_SHA1_SIGNATURE_PRESENT, verify_result.cert_status);
   EXPECT_TRUE(verify_result.is_issued_by_known_root);
 }
 
+// The certse.pem certificate has been revoked. crbug.com/259723.
 TEST_F(CertVerifyProcTest, PublicKeyHashes) {
   if (!SupportsReturningVerifiedChain()) {
     LOG(INFO) << "Skipping this test in this platform.";
@@ -675,8 +657,8 @@
 
   base::FilePath certs_dir = GetTestCertsDirectory();
   CertificateList certs = CreateCertificateListFromFile(
-      certs_dir, "twitter-chain.pem", X509Certificate::FORMAT_AUTO);
-  ASSERT_EQ(3U, certs.size());
+      certs_dir, "satveda.pem", X509Certificate::FORMAT_AUTO);
+  ASSERT_EQ(2U, certs.size());
 
   X509Certificate::OSCertHandles intermediates;
   intermediates.push_back(certs[1]->os_cert_handle());
@@ -687,16 +669,17 @@
   int flags = 0;
   CertVerifyResult verify_result;
 
-  // This will blow up, May 9th, 2016. Sorry! Please disable and file a bug
+  // This will blow up, May 24th, 2019. Sorry! Please disable and file a bug
   // against agl. See also TestKnownRoot.
   int error = Verify(cert_chain.get(),
-                     "twitter.com",
+                     "satveda.com",
                      flags,
                      NULL,
                      empty_cert_list_,
                      &verify_result);
   EXPECT_EQ(OK, error);
-  ASSERT_LE(3U, verify_result.public_key_hashes.size());
+  EXPECT_EQ(CERT_STATUS_SHA1_SIGNATURE_PRESENT, verify_result.cert_status);
+  ASSERT_LE(2U, verify_result.public_key_hashes.size());
 
   HashValueVector sha1_hashes;
   for (size_t i = 0; i < verify_result.public_key_hashes.size(); ++i) {
@@ -704,10 +687,10 @@
       continue;
     sha1_hashes.push_back(verify_result.public_key_hashes[i]);
   }
-  ASSERT_LE(3u, sha1_hashes.size());
+  ASSERT_LE(2u, sha1_hashes.size());
 
-  for (size_t i = 0; i < 3; ++i) {
-    EXPECT_EQ(HexEncode(kTwitterSPKIs[i], base::kSHA1Length),
+  for (size_t i = 0; i < 2; ++i) {
+    EXPECT_EQ(HexEncode(kSatvedaSPKIs[i], base::kSHA1Length),
               HexEncode(sha1_hashes[i].data(), base::kSHA1Length));
   }
 
@@ -717,10 +700,10 @@
       continue;
     sha256_hashes.push_back(verify_result.public_key_hashes[i]);
   }
-  ASSERT_LE(3u, sha256_hashes.size());
+  ASSERT_LE(2u, sha256_hashes.size());
 
-  for (size_t i = 0; i < 3; ++i) {
-    EXPECT_EQ(HexEncode(kTwitterSPKIsSHA256[i], crypto::kSHA256Length),
+  for (size_t i = 0; i < 2; ++i) {
+    EXPECT_EQ(HexEncode(kSatvedaSPKIsSHA256[i], crypto::kSHA256Length),
               HexEncode(sha256_hashes[i].data(), crypto::kSHA256Length));
   }
 }
@@ -827,7 +810,7 @@
   }
 
   CertificateList cert_list = CreateCertificateListFromFile(
-      GetTestCertsDirectory(), "reject_intranet_hosts.pem",
+      GetTestCertsDirectory(), "ok_cert.pem",
       X509Certificate::FORMAT_AUTO);
   ASSERT_EQ(1U, cert_list.size());
   scoped_refptr<X509Certificate> cert(cert_list[0]);
diff --git a/net/data/ssl/certificates/11_year_validity.pem b/net/data/ssl/certificates/11_year_validity.pem
deleted file mode 100644
index 742da09..0000000
--- a/net/data/ssl/certificates/11_year_validity.pem
+++ /dev/null
@@ -1,81 +0,0 @@
-Certificate:
-    Data:
-        Version: 3 (0x2)
-        Serial Number: 5 (0x5)
-    Signature Algorithm: sha256WithRSAEncryption
-        Issuer: CN=Test Root CA
-        Validity
-            Not Before: Oct 30 00:00:00 2014 GMT
-            Not After : Oct 27 19:26:19 2025 GMT
-        Subject: CN=xn--wgv71a119e.com
-        Subject Public Key Info:
-            Public Key Algorithm: rsaEncryption
-                Public-Key: (2048 bit)
-                Modulus:
-                    00:bc:20:51:b0:06:00:cb:4d:f0:82:41:9e:a7:df:
-                    e0:15:cf:bc:e5:4b:13:5c:19:51:9d:6c:18:9b:e6:
-                    77:4e:94:01:64:41:57:33:0d:9b:67:23:2d:8c:22:
-                    3f:c2:a1:db:d0:ec:20:af:88:95:29:62:0c:74:76:
-                    fc:5b:26:d6:6d:f7:36:cf:b2:ed:64:5d:cc:c0:f6:
-                    54:3a:c3:89:b1:2a:6f:28:c9:11:05:74:f4:3e:bc:
-                    1f:e2:e6:04:ab:ad:8f:59:05:f2:03:3d:8e:fb:0c:
-                    9d:18:c1:12:f8:60:98:b3:e2:a5:ba:00:59:e5:e4:
-                    19:a1:d9:3b:b1:0a:77:10:e2:72:90:0e:93:50:d8:
-                    b2:f9:39:4b:14:80:4a:18:93:c8:d7:fb:b3:32:0c:
-                    af:c7:f3:d1:d5:48:87:9f:8f:ef:ff:8c:13:61:a5:
-                    17:32:9d:63:91:c6:93:e9:7c:66:ad:27:b7:9a:fa:
-                    49:b8:4c:68:c6:ff:18:94:62:4a:f5:03:e4:20:5a:
-                    7b:96:fd:d6:76:a7:73:9a:e6:ac:1e:9c:83:de:5c:
-                    ce:7d:67:2d:71:ad:33:fc:7e:ba:4a:1d:15:22:32:
-                    05:9c:65:c5:9d:fa:a5:16:9e:d2:85:fc:c7:a1:cb:
-                    ca:84:d2:bb:8d:11:7b:c3:0c:5f:e5:25:c3:4c:a2:
-                    cb:cb
-                Exponent: 65537 (0x10001)
-        X509v3 extensions:
-            X509v3 Basic Constraints: critical
-                CA:FALSE
-            X509v3 Subject Key Identifier: 
-                C1:6A:E8:21:0E:C3:F4:D7:73:21:43:E3:B1:FA:65:2C:6F:2D:46:01
-            X509v3 Authority Key Identifier: 
-                keyid:CC:56:4D:CF:92:F0:A5:B8:36:08:B0:46:B5:84:E2:4A:00:56:20:57
-
-            X509v3 Extended Key Usage: 
-                TLS Web Server Authentication, TLS Web Client Authentication
-            X509v3 Subject Alternative Name: 
-                IP Address:127.0.0.1
-    Signature Algorithm: sha256WithRSAEncryption
-         d0:30:42:a6:35:ce:60:1c:10:56:d0:de:14:d2:8e:6b:97:4b:
-         0c:bc:5b:a0:ad:95:99:c1:a3:0b:61:06:e2:7b:7d:4f:94:09:
-         f1:d6:ca:2f:c9:c6:b3:96:4c:3e:0b:be:15:b2:1d:85:7c:f7:
-         c4:02:33:e5:c5:1b:99:c5:24:a6:34:e1:19:53:ff:7e:5b:0c:
-         be:cf:b7:32:86:6c:91:8a:ee:db:8e:ad:44:cf:d7:bc:97:a3:
-         ff:aa:d0:73:52:21:63:e1:7e:1e:06:58:c1:ac:76:ee:67:a8:
-         37:bd:a6:51:3d:53:ec:f5:a9:a3:e0:b1:3b:d3:7e:f7:2d:4e:
-         91:b0:77:a5:40:47:98:d9:04:66:83:71:dd:6f:91:f4:e7:6e:
-         f4:3c:89:a9:65:51:82:ac:43:f0:c0:e7:cf:4f:17:40:dd:10:
-         22:d7:e1:37:2d:44:31:d0:d7:d6:73:9f:83:ce:69:bd:50:0e:
-         e3:12:e4:21:84:da:ca:e0:10:5e:7c:4d:48:d4:72:49:d9:cd:
-         35:d3:34:92:d0:4c:a6:33:cc:a5:a4:a0:03:fe:0f:37:1b:f6:
-         59:aa:8d:c1:3a:0d:b7:f0:dc:d9:0d:b4:a8:8a:eb:d3:b1:e4:
-         d0:56:bf:99:6a:f4:a1:09:ff:6e:fd:c0:78:02:03:51:54:ee:
-         3a:a7:5e:3f
------BEGIN CERTIFICATE-----
-MIIDMDCCAhigAwIBAgIBBTANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxUZXN0
-IFJvb3QgQ0EwHhcNMTQxMDMwMDAwMDAwWhcNMjUxMDI3MTkyNjE5WjAdMRswGQYD
-VQQDDBJ4bi0td2d2NzFhMTE5ZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQC8IFGwBgDLTfCCQZ6n3+AVz7zlSxNcGVGdbBib5ndOlAFkQVczDZtn
-Iy2MIj/CodvQ7CCviJUpYgx0dvxbJtZt9zbPsu1kXczA9lQ6w4mxKm8oyREFdPQ+
-vB/i5gSrrY9ZBfIDPY77DJ0YwRL4YJiz4qW6AFnl5Bmh2TuxCncQ4nKQDpNQ2LL5
-OUsUgEoYk8jX+7MyDK/H89HVSIefj+//jBNhpRcynWORxpPpfGatJ7ea+km4TGjG
-/xiUYkr1A+QgWnuW/dZ2p3Oa5qwenIPeXM59Zy1xrTP8frpKHRUiMgWcZcWd+qUW
-ntKF/Mehy8qE0ruNEXvDDF/lJcNMosvLAgMBAAGjgYAwfjAMBgNVHRMBAf8EAjAA
-MB0GA1UdDgQWBBTBaughDsP013MhQ+Ox+mUsby1GATAfBgNVHSMEGDAWgBTMVk3P
-kvCluDYIsEa1hOJKAFYgVzAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw
-DwYDVR0RBAgwBocEfwAAATANBgkqhkiG9w0BAQsFAAOCAQEA0DBCpjXOYBwQVtDe
-FNKOa5dLDLxboK2VmcGjC2EG4nt9T5QJ8dbKL8nGs5ZMPgu+FbIdhXz3xAIz5cUb
-mcUkpjThGVP/flsMvs+3MoZskYru246tRM/XvJej/6rQc1IhY+F+HgZYwax27meo
-N72mUT1T7PWpo+CxO9N+9y1OkbB3pUBHmNkEZoNx3W+R9Odu9DyJqWVRgqxD8MDn
-z08XQN0QItfhNy1EMdDX1nOfg85pvVAO4xLkIYTayuAQXnxNSNRySdnNNdM0ktBM
-pjPMpaSgA/4PNxv2WaqNwToNt/Dc2Q20qIrr07Hk0Fa/mWr0oQn/bv3AeAIDUVTu
-OqdePw==
------END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/40_months_after_2015_04.pem b/net/data/ssl/certificates/40_months_after_2015_04.pem
deleted file mode 100644
index 34128a9..0000000
--- a/net/data/ssl/certificates/40_months_after_2015_04.pem
+++ /dev/null
@@ -1,81 +0,0 @@
-Certificate:
-    Data:
-        Version: 3 (0x2)
-        Serial Number: 6 (0x6)
-    Signature Algorithm: sha256WithRSAEncryption
-        Issuer: CN=Test Root CA
-        Validity
-            Not Before: Apr  2 00:00:00 2015 GMT
-            Not After : Sep  1 00:00:00 2018 GMT
-        Subject: CN=xn--wgv71a119e.com
-        Subject Public Key Info:
-            Public Key Algorithm: rsaEncryption
-                Public-Key: (2048 bit)
-                Modulus:
-                    00:c1:86:e0:72:bf:df:69:da:78:b1:87:99:03:40:
-                    19:d1:8b:a9:a3:80:2e:75:25:27:c7:bc:dd:4b:8c:
-                    8d:11:b1:dd:24:68:12:8d:46:b8:45:19:fc:24:e8:
-                    2a:15:21:84:9d:a2:08:6b:3e:38:34:3f:29:00:5f:
-                    04:68:ed:33:4e:35:41:c3:06:54:f3:41:8b:61:83:
-                    3e:1b:78:59:6b:d2:c3:83:ea:16:99:1f:a7:1c:13:
-                    34:b5:25:c6:01:6d:34:b5:90:0f:7c:70:f0:ab:18:
-                    0c:59:a8:7f:ec:20:21:a7:7e:3b:b9:0c:bb:ef:a9:
-                    ce:1b:75:6d:ac:23:c1:56:c1:28:95:70:85:99:a3:
-                    94:86:ee:c6:45:97:af:29:e1:86:ee:b6:b3:95:97:
-                    4e:38:9a:03:a8:50:a8:21:ae:48:ae:dd:9a:89:0c:
-                    81:c6:98:b1:07:5f:55:44:26:6a:3a:cb:8c:d4:07:
-                    67:71:5d:b1:33:25:2a:ef:f8:af:6b:72:78:f1:9b:
-                    95:c6:3e:0c:57:77:5f:63:1f:99:1d:b0:a3:ac:f6:
-                    7d:65:04:7d:aa:f2:99:b9:6f:e7:75:01:34:ec:c5:
-                    60:b0:c1:bc:c1:f0:d9:10:28:fb:10:ac:ad:3f:ba:
-                    2f:40:96:c7:59:57:d8:f0:f2:c2:3d:96:bf:86:1f:
-                    95:55
-                Exponent: 65537 (0x10001)
-        X509v3 extensions:
-            X509v3 Basic Constraints: critical
-                CA:FALSE
-            X509v3 Subject Key Identifier: 
-                DF:3C:D7:74:E3:7F:2B:EC:C9:44:98:6A:8B:E8:9B:46:23:9B:A4:3C
-            X509v3 Authority Key Identifier: 
-                keyid:98:AF:9A:51:3C:AB:23:88:17:DB:39:AB:FA:17:91:96:8B:83:C5:F1
-
-            X509v3 Extended Key Usage: 
-                TLS Web Server Authentication, TLS Web Client Authentication
-            X509v3 Subject Alternative Name: 
-                IP Address:127.0.0.1
-    Signature Algorithm: sha256WithRSAEncryption
-         45:0b:b9:a7:3d:d4:a7:c9:0e:d8:a1:df:bf:e0:93:26:c1:da:
-         48:ac:70:3b:15:82:30:c9:4d:0f:02:fc:ba:03:24:ab:df:10:
-         47:8e:14:ab:e9:20:95:91:56:41:bd:0c:2e:c9:7c:61:d9:69:
-         6c:9f:fb:25:eb:34:d4:7a:70:9c:36:ba:64:80:8b:4a:c4:8c:
-         23:92:8b:7c:b5:47:e9:f7:37:4c:e0:db:22:ad:67:d0:66:b6:
-         9e:01:9e:9f:6e:63:e1:5d:97:90:3f:e0:5c:4c:d5:f5:23:11:
-         b1:2e:db:c9:79:0f:37:7a:78:67:86:87:14:1b:ab:5b:65:67:
-         61:44:ab:43:c5:6e:19:83:99:64:23:d5:61:bc:4c:36:a2:59:
-         88:4a:69:18:57:33:c5:38:22:4b:33:64:77:43:81:47:55:f2:
-         b2:0f:dc:d3:0e:62:4f:19:6b:6b:89:37:33:3b:6a:d5:15:b6:
-         be:7f:03:ad:88:d2:e2:8e:9e:77:44:39:8e:93:b4:87:87:f6:
-         5a:5a:d1:20:94:cc:de:d9:9d:5c:7f:42:dd:81:ce:fa:77:23:
-         05:11:bd:8c:2e:06:c3:94:65:cf:8f:9b:db:9a:58:d7:e7:36:
-         ff:49:4a:9c:99:c7:3a:9a:d1:32:bb:a4:66:d2:80:7d:80:d7:
-         c9:1d:d7:e7
------BEGIN CERTIFICATE-----
-MIIDMDCCAhigAwIBAgIBBjANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxUZXN0
-IFJvb3QgQ0EwHhcNMTUwNDAyMDAwMDAwWhcNMTgwOTAxMDAwMDAwWjAdMRswGQYD
-VQQDDBJ4bi0td2d2NzFhMTE5ZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQDBhuByv99p2nixh5kDQBnRi6mjgC51JSfHvN1LjI0Rsd0kaBKNRrhF
-Gfwk6CoVIYSdoghrPjg0PykAXwRo7TNONUHDBlTzQYthgz4beFlr0sOD6haZH6cc
-EzS1JcYBbTS1kA98cPCrGAxZqH/sICGnfju5DLvvqc4bdW2sI8FWwSiVcIWZo5SG
-7sZFl68p4YbutrOVl044mgOoUKghrkiu3ZqJDIHGmLEHX1VEJmo6y4zUB2dxXbEz
-JSrv+K9rcnjxm5XGPgxXd19jH5kdsKOs9n1lBH2q8pm5b+d1ATTsxWCwwbzB8NkQ
-KPsQrK0/ui9AlsdZV9jw8sI9lr+GH5VVAgMBAAGjgYAwfjAMBgNVHRMBAf8EAjAA
-MB0GA1UdDgQWBBTfPNd0438r7MlEmGqL6JtGI5ukPDAfBgNVHSMEGDAWgBSYr5pR
-PKsjiBfbOav6F5GWi4PF8TAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw
-DwYDVR0RBAgwBocEfwAAATANBgkqhkiG9w0BAQsFAAOCAQEARQu5pz3Up8kO2KHf
-v+CTJsHaSKxwOxWCMMlNDwL8ugMkq98QR44Uq+kglZFWQb0MLsl8YdlpbJ/7Jes0
-1HpwnDa6ZICLSsSMI5KLfLVH6fc3TODbIq1n0Ga2ngGen25j4V2XkD/gXEzV9SMR
-sS7byXkPN3p4Z4aHFBurW2VnYUSrQ8VuGYOZZCPVYbxMNqJZiEppGFczxTgiSzNk
-d0OBR1Xysg/c0w5iTxlra4k3Mztq1RW2vn8DrYjS4o6ed0Q5jpO0h4f2WlrRIJTM
-3tmdXH9C3YHO+ncjBRG9jC4Gw5Rlz4+b25pY1+c2/0lKnJnHOprRMrukZtKAfYDX
-yR3X5w==
------END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/61_months_after_2012_07.pem b/net/data/ssl/certificates/61_months_after_2012_07.pem
deleted file mode 100644
index 49dc04e..0000000
--- a/net/data/ssl/certificates/61_months_after_2012_07.pem
+++ /dev/null
@@ -1,81 +0,0 @@
-Certificate:
-    Data:
-        Version: 3 (0x2)
-        Serial Number: 7 (0x7)
-    Signature Algorithm: sha256WithRSAEncryption
-        Issuer: CN=Test Root CA
-        Validity
-            Not Before: Oct 30 00:00:00 2014 GMT
-            Not After : Nov  3 19:26:20 2019 GMT
-        Subject: CN=xn--wgv71a119e.com
-        Subject Public Key Info:
-            Public Key Algorithm: rsaEncryption
-                Public-Key: (2048 bit)
-                Modulus:
-                    00:ca:83:f9:aa:c5:28:81:20:c9:a9:62:66:9b:10:
-                    75:c1:e7:9a:15:5b:ef:13:ce:c6:d1:aa:be:23:7b:
-                    ca:28:7b:bc:62:27:4a:9d:16:e0:ac:db:07:54:f1:
-                    3a:79:4f:24:4d:52:2c:35:12:aa:fd:cb:f7:98:5d:
-                    40:03:56:01:36:b1:1a:34:71:9c:98:5d:76:96:2f:
-                    91:ca:9f:49:e2:f0:1e:86:fc:d3:66:37:1a:27:b4:
-                    db:4d:b3:ca:85:04:59:b5:2f:35:32:d5:59:a6:31:
-                    f5:85:35:63:88:e5:0a:1b:3b:9a:7c:29:e2:6d:b3:
-                    ed:23:19:36:6d:62:fd:be:77:10:cc:69:2d:32:ce:
-                    98:59:29:ec:e4:27:e9:c2:ae:86:79:37:76:cb:ba:
-                    ee:86:5f:39:02:25:b2:50:aa:43:7e:77:fe:03:16:
-                    d1:05:56:b5:31:a0:0b:41:88:3e:69:b4:b9:89:70:
-                    d1:e5:7d:a7:77:ed:8d:13:db:20:3b:4b:c0:a0:6e:
-                    48:61:47:c2:6f:57:f4:4a:ac:bd:28:e3:0f:e4:40:
-                    3f:a3:05:86:46:1a:95:13:d1:be:76:69:92:d5:6b:
-                    71:59:1d:a0:fc:b7:4c:9a:e6:2b:f6:82:50:a9:35:
-                    19:9b:b4:3c:0d:0b:7a:10:0e:3d:84:2f:c3:68:61:
-                    2f:03
-                Exponent: 65537 (0x10001)
-        X509v3 extensions:
-            X509v3 Basic Constraints: critical
-                CA:FALSE
-            X509v3 Subject Key Identifier: 
-                74:7C:2F:56:AE:BF:08:E2:6F:5B:D4:6C:B0:4C:04:3F:11:59:15:0E
-            X509v3 Authority Key Identifier: 
-                keyid:CC:56:4D:CF:92:F0:A5:B8:36:08:B0:46:B5:84:E2:4A:00:56:20:57
-
-            X509v3 Extended Key Usage: 
-                TLS Web Server Authentication, TLS Web Client Authentication
-            X509v3 Subject Alternative Name: 
-                IP Address:127.0.0.1
-    Signature Algorithm: sha256WithRSAEncryption
-         19:42:64:03:f7:2a:90:ee:82:93:de:69:49:28:32:42:ba:db:
-         37:16:0d:db:b3:81:ad:50:a8:b2:f7:20:35:e4:bb:89:7d:f3:
-         e5:75:7f:3e:bd:41:05:24:eb:5a:94:18:cc:c4:ac:d2:0a:24:
-         39:4b:2e:6d:a4:2f:99:6b:19:9e:c8:44:53:3f:15:52:c7:51:
-         af:37:64:a2:d7:27:74:72:6a:d0:cc:c0:ac:8b:7e:7c:0c:f1:
-         ee:e9:bf:03:19:20:e3:44:88:56:a2:1f:36:59:7f:35:22:13:
-         d1:48:a0:7a:59:16:85:df:31:e9:30:ae:df:54:b7:8b:78:a8:
-         20:27:5c:cc:0c:8b:43:65:4f:71:41:c2:5b:42:4a:a7:1b:f8:
-         44:e3:6b:50:1f:85:0f:e3:30:9a:5f:01:8a:19:80:b1:9d:d8:
-         34:c4:54:87:ff:ad:8a:56:d7:3b:9f:13:dd:0c:a5:b7:0d:a9:
-         a8:66:91:4a:0e:d4:7d:5c:40:39:5a:12:e1:ab:fc:88:9f:b7:
-         26:c7:11:f0:1b:7d:2d:29:77:20:97:0c:ea:14:d4:24:13:9f:
-         8f:b2:49:eb:3b:2b:79:d3:d2:ef:65:82:d7:75:09:26:61:9b:
-         ef:45:0d:95:65:1b:42:76:f6:db:98:fa:3f:45:c0:7b:8d:94:
-         9a:62:8a:88
------BEGIN CERTIFICATE-----
-MIIDMDCCAhigAwIBAgIBBzANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxUZXN0
-IFJvb3QgQ0EwHhcNMTQxMDMwMDAwMDAwWhcNMTkxMTAzMTkyNjIwWjAdMRswGQYD
-VQQDDBJ4bi0td2d2NzFhMTE5ZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQDKg/mqxSiBIMmpYmabEHXB55oVW+8TzsbRqr4je8ooe7xiJ0qdFuCs
-2wdU8Tp5TyRNUiw1Eqr9y/eYXUADVgE2sRo0cZyYXXaWL5HKn0ni8B6G/NNmNxon
-tNtNs8qFBFm1LzUy1VmmMfWFNWOI5QobO5p8KeJts+0jGTZtYv2+dxDMaS0yzphZ
-KezkJ+nCroZ5N3bLuu6GXzkCJbJQqkN+d/4DFtEFVrUxoAtBiD5ptLmJcNHlfad3
-7Y0T2yA7S8CgbkhhR8JvV/RKrL0o4w/kQD+jBYZGGpUT0b52aZLVa3FZHaD8t0ya
-5iv2glCpNRmbtDwNC3oQDj2EL8NoYS8DAgMBAAGjgYAwfjAMBgNVHRMBAf8EAjAA
-MB0GA1UdDgQWBBR0fC9Wrr8I4m9b1GywTAQ/EVkVDjAfBgNVHSMEGDAWgBTMVk3P
-kvCluDYIsEa1hOJKAFYgVzAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw
-DwYDVR0RBAgwBocEfwAAATANBgkqhkiG9w0BAQsFAAOCAQEAGUJkA/cqkO6Ck95p
-SSgyQrrbNxYN27OBrVCosvcgNeS7iX3z5XV/Pr1BBSTrWpQYzMSs0gokOUsubaQv
-mWsZnshEUz8VUsdRrzdkotcndHJq0MzArIt+fAzx7um/Axkg40SIVqIfNll/NSIT
-0UigelkWhd8x6TCu31S3i3ioICdczAyLQ2VPcUHCW0JKpxv4RONrUB+FD+Mwml8B
-ihmAsZ3YNMRUh/+tilbXO58T3Qyltw2pqGaRSg7UfVxAOVoS4av8iJ+3JscR8Bt9
-LSl3IJcM6hTUJBOfj7JJ6zsredPS72WC13UJJmGb70UNlWUbQnb225j6P0XAe42U
-mmKKiA==
------END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/README b/net/data/ssl/certificates/README
index c9e1dc5..5d1faf2 100644
--- a/net/data/ssl/certificates/README
+++ b/net/data/ssl/certificates/README
@@ -129,8 +129,8 @@
 - expired_cert.pem
 - ok_cert.pem
 - root_ca_cert.pem
-    These certificates are the common certificates used by the Python test
-    server for simulating HTTPS connections.
+     These certificates are the common certificates used by the Python test
+     server for simulating HTTPS connections.
 
 - name_constraint_bad.pem
 - name_constraint_good.pem
@@ -147,12 +147,6 @@
 - punycodetest.pem : A test self-signed server certificate with punycode name.
      The common name is "xn--wgv71a119e.com" (日本語.com)
 
-- 40_months_after_2015_04.pem
-- 61_months_after_2012_07.pem
-- 11_year_validity.pem
-    Certs to test that the maximum validity durations set by the CA/Browser
-    Forum Baseline Requirements are enforced.
-
 ===== From net/data/ssl/scripts/generate-weak-test-chains.sh
 - 2048-rsa-root.pem
 - {768-rsa,1024-rsa,2048-rsa,prime256v1-ecdsa}-intermediate.pem
@@ -258,3 +252,5 @@
      containing the intermediate, which can be served via a URLRequestFilter.
      aia-intermediate.der is stored in DER form for convenience, since that is
      the form expected of certificates discovered via AIA.
+
+
diff --git a/net/data/ssl/certificates/reject_intranet_hosts.pem b/net/data/ssl/certificates/reject_intranet_hosts.pem
deleted file mode 100644
index d5040cc..0000000
--- a/net/data/ssl/certificates/reject_intranet_hosts.pem
+++ /dev/null
@@ -1,69 +0,0 @@
-Certificate:
-    Data:
-        Version: 1 (0x0)
-        Serial Number: 15207369410964614739 (0xd30b6de83cafee53)
-    Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1
-        Validity
-            Not Before: Oct 31 19:51:55 2014 GMT
-            Not After : Oct 30 19:51:55 2017 GMT
-        Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1
-        Subject Public Key Info:
-            Public Key Algorithm: rsaEncryption
-                Public-Key: (2048 bit)
-                Modulus:
-                    00:a0:5c:e4:0d:5d:e4:01:47:d8:8c:06:41:12:f8:
-                    63:a9:d9:41:3d:e9:75:ad:80:ae:e9:32:2a:d6:6a:
-                    42:7c:be:f5:1b:02:99:36:a4:dd:02:db:32:36:ab:
-                    ac:8b:c5:78:cb:a2:03:28:db:95:83:56:9a:03:f4:
-                    37:70:dc:16:56:d9:0a:c6:34:23:f5:58:36:21:c8:
-                    fd:b7:41:1e:2f:85:50:50:d9:76:c0:7d:9e:0d:d7:
-                    ad:df:94:06:c1:b6:a4:c9:ee:61:16:5a:54:c2:1d:
-                    5e:d9:79:73:4a:21:d0:d3:fe:88:ee:27:3a:5f:e6:
-                    a3:cf:89:44:93:80:64:53:50:36:98:c5:da:1f:87:
-                    1e:a1:2e:e0:5a:60:c7:80:a7:93:eb:b8:39:33:c3:
-                    d7:e7:2b:bd:9b:48:5d:a4:af:ee:7d:93:5a:d0:9f:
-                    3b:6d:a8:52:95:ce:d1:bf:0b:a4:60:34:ee:77:80:
-                    50:35:0d:af:eb:0f:48:69:ab:c7:87:a8:31:44:69:
-                    9c:21:d6:01:de:61:04:95:a4:85:d0:d6:2e:a6:7c:
-                    d1:fd:61:45:51:fd:bb:bc:be:6b:d3:87:54:50:b8:
-                    36:f8:f0:0f:a4:07:e0:28:86:13:5b:72:ae:5d:b3:
-                    a2:fa:b7:54:8d:c9:6a:b3:82:88:4f:40:6d:36:1a:
-                    f5:2d
-                Exponent: 65537 (0x10001)
-    Signature Algorithm: sha256WithRSAEncryption
-         47:0d:cd:15:ec:51:89:2f:e0:d1:4e:04:7a:8e:cf:f5:16:ec:
-         11:55:bc:48:92:3b:98:60:ba:f1:97:98:a7:22:bf:9e:00:ac:
-         4a:5b:a7:e1:b5:aa:b7:20:c5:fc:85:d5:3f:cf:53:da:60:94:
-         75:93:78:87:e0:99:d7:f0:c7:35:e5:6d:82:f7:e7:23:e1:fe:
-         88:4d:f0:bf:3b:68:70:61:c1:e8:8d:e1:2a:c9:75:c9:28:66:
-         71:79:ff:58:a7:79:c3:1c:97:db:9c:3c:25:84:e0:c2:da:77:
-         08:9e:4e:9a:5a:c8:48:83:fe:74:41:73:13:46:c2:69:27:31:
-         71:d9:7d:40:46:43:59:6d:cd:54:d8:63:44:5b:5f:22:b9:8e:
-         2b:ba:99:d1:38:89:0c:ac:b8:f2:c2:b9:a2:67:ae:3d:56:b6:
-         c7:c0:cd:4c:e6:70:ce:8e:50:67:3c:93:c5:20:c2:45:66:e5:
-         79:7b:29:54:0e:fc:eb:39:75:51:54:5d:fc:69:ad:80:dc:88:
-         b0:6c:be:0c:e4:9f:e3:81:3c:aa:6b:b6:a6:34:b6:1e:f7:a9:
-         8a:3f:bd:3f:2e:e4:da:c0:27:cb:50:fd:8a:7f:44:bd:a3:70:
-         ad:4e:e4:1b:16:9a:fd:82:4d:55:26:06:ca:c7:25:49:fc:2b:
-         9e:54:87:7f
------BEGIN CERTIFICATE-----
-MIIDPDCCAiQCCQDTC23oPK/uUzANBgkqhkiG9w0BAQsFADBgMQswCQYDVQQGEwJV
-UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQ
-MA4GA1UECgwHVGVzdCBDQTESMBAGA1UEAwwJMTI3LjAuMC4xMB4XDTE0MTAzMTE5
-NTE1NVoXDTE3MTAzMDE5NTE1NVowYDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNh
-bGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3Qg
-Q0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBAKBc5A1d5AFH2IwGQRL4Y6nZQT3pda2ArukyKtZqQny+9RsCmTak3QLb
-MjarrIvFeMuiAyjblYNWmgP0N3DcFlbZCsY0I/VYNiHI/bdBHi+FUFDZdsB9ng3X
-rd+UBsG2pMnuYRZaVMIdXtl5c0oh0NP+iO4nOl/mo8+JRJOAZFNQNpjF2h+HHqEu
-4Fpgx4Cnk+u4OTPD1+crvZtIXaSv7n2TWtCfO22oUpXO0b8LpGA07neAUDUNr+sP
-SGmrx4eoMURpnCHWAd5hBJWkhdDWLqZ80f1hRVH9u7y+a9OHVFC4NvjwD6QH4CiG
-E1tyrl2zovq3VI3JarOCiE9AbTYa9S0CAwEAATANBgkqhkiG9w0BAQsFAAOCAQEA
-Rw3NFexRiS/g0U4Eeo7P9RbsEVW8SJI7mGC68ZeYpyK/ngCsSlun4bWqtyDF/IXV
-P89T2mCUdZN4h+CZ1/DHNeVtgvfnI+H+iE3wvztocGHB6I3hKsl1yShmcXn/WKd5
-wxyX25w8JYTgwtp3CJ5OmlrISIP+dEFzE0bCaScxcdl9QEZDWW3NVNhjRFtfIrmO
-K7qZ0TiJDKy48sK5omeuPVa2x8DNTOZwzo5QZzyTxSDCRWbleXspVA786zl1UVRd
-/GmtgNyIsGy+DOSf44E8qmu2pjS2Hvepij+9Py7k2sAny1D9in9EvaNwrU7kGxaa
-/YJNVSYGysclSfwrnlSHfw==
------END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/satveda.pem b/net/data/ssl/certificates/satveda.pem
new file mode 100644
index 0000000..4f79703
--- /dev/null
+++ b/net/data/ssl/certificates/satveda.pem
@@ -0,0 +1,207 @@
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 21120020890699950 (0x4b088c0ed6c8ae)
+    Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, ST=Arizona, L=Scottsdale, O=GoDaddy.com, Inc., OU=http://certificates.godaddy.com/repository, CN=Go Daddy Secure Certification Authority/serialNumber=07969287
+        Validity
+            Not Before: Mar  9 07:19:24 2013 GMT
+            Not After : May 24 09:39:06 2019 GMT
+        Subject: OU=Domain Control Validated, CN=www.satveda.com
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+                Public-Key: (2048 bit)
+                Modulus:
+                    00:bb:e0:ea:82:8e:50:bf:ba:94:89:e3:f4:dc:b4:
+                    a1:06:91:c1:46:bc:33:37:74:e0:c6:71:e7:f0:09:
+                    ec:d8:8e:ac:48:82:3f:b6:b4:49:80:98:04:04:61:
+                    f7:ea:d2:ad:23:ed:2b:28:54:f2:14:e2:f4:84:88:
+                    9c:4f:d1:b1:1b:52:98:a6:3e:85:e3:eb:22:df:09:
+                    86:ff:14:9c:41:46:dd:13:ed:d9:f0:5d:a5:fe:7f:
+                    6f:31:6b:a0:50:a5:f2:9a:ba:ea:8c:77:4d:1c:64:
+                    82:7a:ea:f4:54:5b:f3:92:81:5e:5c:b1:04:da:c1:
+                    d6:72:7d:e1:e5:ec:ad:53:ae:3d:14:21:44:2e:67:
+                    f3:a2:c9:7d:9e:0b:98:4d:89:fc:c8:1e:a6:00:45:
+                    8b:b6:a7:b9:dc:5e:5a:ff:0c:52:c6:92:7e:60:08:
+                    d4:8d:34:6c:00:98:bc:43:e9:7b:e1:92:0b:f5:81:
+                    f0:48:09:18:5a:35:8a:e2:74:f2:9d:da:48:b0:7d:
+                    02:f8:a4:2b:5e:a0:22:cf:a0:15:9f:fb:ca:4d:8c:
+                    f3:26:cb:62:74:a3:04:6e:e2:38:aa:0a:19:42:e8:
+                    e3:57:a5:d3:97:64:38:31:89:3e:af:93:af:d6:e3:
+                    60:c1:c3:6a:9c:58:da:16:60:c7:78:01:cf:dc:7c:
+                    e1:11
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: critical
+                CA:FALSE
+            X509v3 Extended Key Usage: 
+                TLS Web Server Authentication, TLS Web Client Authentication
+            X509v3 Key Usage: critical
+                Digital Signature, Key Encipherment
+            X509v3 CRL Distribution Points: 
+
+                Full Name:
+                  URI:http://crl.godaddy.com/gds1-87.crl
+
+            X509v3 Certificate Policies: 
+                Policy: 2.16.840.1.114413.1.7.23.1
+                  CPS: http://certificates.godaddy.com/repository/
+
+            Authority Information Access: 
+                OCSP - URI:http://ocsp.godaddy.com/
+                CA Issuers - URI:http://certificates.godaddy.com/repository/gd_intermediate.crt
+
+            X509v3 Authority Key Identifier: 
+                keyid:FD:AC:61:32:93:6C:45:D6:E2:EE:85:5F:9A:BA:E7:76:99:68:CC:E7
+
+            X509v3 Subject Alternative Name: 
+                DNS:www.satveda.com, DNS:satveda.com
+            X509v3 Subject Key Identifier: 
+                A7:39:2E:DC:0F:22:D5:D6:C6:B1:3B:35:65:3D:0D:B1:75:5B:F7:69
+    Signature Algorithm: sha1WithRSAEncryption
+         15:a9:fd:28:f6:cd:d1:f0:2d:d7:1c:df:b5:48:5c:c5:2c:44:
+         59:ad:ba:3d:bc:08:30:6f:50:a4:9f:0b:05:28:d7:5e:62:87:
+         f9:5d:24:c0:b1:ce:a1:d2:eb:aa:77:9b:01:21:1b:56:dd:e5:
+         32:18:38:44:24:60:76:14:4d:4a:6a:d2:37:8b:64:45:5a:ba:
+         4f:bf:b0:33:dd:f6:59:dc:fd:47:a9:3b:4f:29:65:3d:a4:0e:
+         c7:89:22:48:e7:6b:e4:38:b7:d4:e2:27:1f:22:9c:99:b0:bd:
+         b4:59:6d:8d:53:30:fa:28:ef:6c:66:b8:af:6c:9b:93:52:72:
+         37:b3:2f:c1:bd:73:22:b4:2e:fa:08:fd:0c:95:89:21:eb:01:
+         34:82:18:15:12:3c:a1:2c:d9:fc:f3:f9:48:1f:09:44:18:b8:
+         7a:5b:57:ea:10:62:59:90:8c:dc:6f:52:f2:2a:a2:da:fc:2d:
+         b4:8a:fb:11:cd:60:da:f9:dd:31:08:31:04:11:81:4e:4b:8a:
+         81:40:70:5e:00:99:87:cb:d6:e0:d8:85:fe:4a:2e:97:99:a0:
+         3d:6e:6f:26:a9:4d:e6:97:cb:c5:09:ef:49:24:c7:96:27:7e:
+         bf:e4:cb:02:f8:00:63:43:7f:ca:05:75:d2:89:7a:f0:25:52:
+         ac:47:fb:e6
+-----BEGIN CERTIFICATE-----
+MIIFRTCCBC2gAwIBAgIHSwiMDtbIrjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
+BhMCVVMxEDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAY
+BgNVBAoTEUdvRGFkZHkuY29tLCBJbmMuMTMwMQYDVQQLEypodHRwOi8vY2VydGlm
+aWNhdGVzLmdvZGFkZHkuY29tL3JlcG9zaXRvcnkxMDAuBgNVBAMTJ0dvIERhZGR5
+IFNlY3VyZSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTERMA8GA1UEBRMIMDc5Njky
+ODcwHhcNMTMwMzA5MDcxOTI0WhcNMTkwNTI0MDkzOTA2WjA9MSEwHwYDVQQLExhE
+b21haW4gQ29udHJvbCBWYWxpZGF0ZWQxGDAWBgNVBAMTD3d3dy5zYXR2ZWRhLmNv
+bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALvg6oKOUL+6lInj9Ny0
+oQaRwUa8Mzd04MZx5/AJ7NiOrEiCP7a0SYCYBARh9+rSrSPtKyhU8hTi9ISInE/R
+sRtSmKY+hePrIt8Jhv8UnEFG3RPt2fBdpf5/bzFroFCl8pq66ox3TRxkgnrq9FRb
+85KBXlyxBNrB1nJ94eXsrVOuPRQhRC5n86LJfZ4LmE2J/MgepgBFi7anudxeWv8M
+UsaSfmAI1I00bACYvEPpe+GSC/WB8EgJGFo1iuJ08p3aSLB9AvikK16gIs+gFZ/7
+yk2M8ybLYnSjBG7iOKoKGULo41el05dkODGJPq+Tr9bjYMHDapxY2hZgx3gBz9x8
+4RECAwEAAaOCAbowggG2MA8GA1UdEwEB/wQFMAMBAQAwHQYDVR0lBBYwFAYIKwYB
+BQUHAwEGCCsGAQUFBwMCMA4GA1UdDwEB/wQEAwIFoDAzBgNVHR8ELDAqMCigJqAk
+hiJodHRwOi8vY3JsLmdvZGFkZHkuY29tL2dkczEtODcuY3JsMFMGA1UdIARMMEow
+SAYLYIZIAYb9bQEHFwEwOTA3BggrBgEFBQcCARYraHR0cDovL2NlcnRpZmljYXRl
+cy5nb2RhZGR5LmNvbS9yZXBvc2l0b3J5LzCBgAYIKwYBBQUHAQEEdDByMCQGCCsG
+AQUFBzABhhhodHRwOi8vb2NzcC5nb2RhZGR5LmNvbS8wSgYIKwYBBQUHMAKGPmh0
+dHA6Ly9jZXJ0aWZpY2F0ZXMuZ29kYWRkeS5jb20vcmVwb3NpdG9yeS9nZF9pbnRl
+cm1lZGlhdGUuY3J0MB8GA1UdIwQYMBaAFP2sYTKTbEXW4u6FX5q653aZaMznMCcG
+A1UdEQQgMB6CD3d3dy5zYXR2ZWRhLmNvbYILc2F0dmVkYS5jb20wHQYDVR0OBBYE
+FKc5LtwPItXWxrE7NWU9DbF1W/dpMA0GCSqGSIb3DQEBBQUAA4IBAQAVqf0o9s3R
+8C3XHN+1SFzFLERZrbo9vAgwb1CknwsFKNdeYof5XSTAsc6h0uuqd5sBIRtW3eUy
+GDhEJGB2FE1KatI3i2RFWrpPv7Az3fZZ3P1HqTtPKWU9pA7HiSJI52vkOLfU4icf
+IpyZsL20WW2NUzD6KO9sZrivbJuTUnI3sy/BvXMitC76CP0MlYkh6wE0ghgVEjyh
+LNn88/lIHwlEGLh6W1fqEGJZkIzcb1LyKqLa/C20ivsRzWDa+d0xCDEEEYFOS4qB
+QHBeAJmHy9bg2IX+Si6XmaA9bm8mqU3ml8vFCe9JJMeWJ36/5MsC+ABjQ3/KBXXS
+iXrwJVKsR/vm
+-----END CERTIFICATE-----
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 769 (0x301)
+    Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, O=The Go Daddy Group, Inc., OU=Go Daddy Class 2 Certification Authority
+        Validity
+            Not Before: Nov 16 01:54:37 2006 GMT
+            Not After : Nov 16 01:54:37 2026 GMT
+        Subject: C=US, ST=Arizona, L=Scottsdale, O=GoDaddy.com, Inc., OU=http://certificates.godaddy.com/repository, CN=Go Daddy Secure Certification Authority/serialNumber=07969287
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+                Public-Key: (2048 bit)
+                Modulus:
+                    00:c4:2d:d5:15:8c:9c:26:4c:ec:32:35:eb:5f:b8:
+                    59:01:5a:a6:61:81:59:3b:70:63:ab:e3:dc:3d:c7:
+                    2a:b8:c9:33:d3:79:e4:3a:ed:3c:30:23:84:8e:b3:
+                    30:14:b6:b2:87:c3:3d:95:54:04:9e:df:99:dd:0b:
+                    25:1e:21:de:65:29:7e:35:a8:a9:54:eb:f6:f7:32:
+                    39:d4:26:55:95:ad:ef:fb:fe:58:86:d7:9e:f4:00:
+                    8d:8c:2a:0c:bd:42:04:ce:a7:3f:04:f6:ee:80:f2:
+                    aa:ef:52:a1:69:66:da:be:1a:ad:5d:da:2c:66:ea:
+                    1a:6b:bb:e5:1a:51:4a:00:2f:48:c7:98:75:d8:b9:
+                    29:c8:ee:f8:66:6d:0a:9c:b3:f3:fc:78:7c:a2:f8:
+                    a3:f2:b5:c3:f3:b9:7a:91:c1:a7:e6:25:2e:9c:a8:
+                    ed:12:65:6e:6a:f6:12:44:53:70:30:95:c3:9c:2b:
+                    58:2b:3d:08:74:4a:f2:be:51:b0:bf:87:d0:4c:27:
+                    58:6b:b5:35:c5:9d:af:17:31:f8:0b:8f:ee:ad:81:
+                    36:05:89:08:98:cf:3a:af:25:87:c0:49:ea:a7:fd:
+                    67:f7:45:8e:97:cc:14:39:e2:36:85:b5:7e:1a:37:
+                    fd:16:f6:71:11:9a:74:30:16:fe:13:94:a3:3f:84:
+                    0d:4f
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Subject Key Identifier: 
+                FD:AC:61:32:93:6C:45:D6:E2:EE:85:5F:9A:BA:E7:76:99:68:CC:E7
+            X509v3 Authority Key Identifier: 
+                keyid:D2:C4:B0:D2:91:D4:4C:11:71:B3:61:CB:3D:A1:FE:DD:A8:6A:D4:E3
+
+            X509v3 Basic Constraints: critical
+                CA:TRUE, pathlen:0
+            Authority Information Access: 
+                OCSP - URI:http://ocsp.godaddy.com
+
+            X509v3 CRL Distribution Points: 
+
+                Full Name:
+                  URI:http://certificates.godaddy.com/repository/gdroot.crl
+
+            X509v3 Certificate Policies: 
+                Policy: X509v3 Any Policy
+                  CPS: http://certificates.godaddy.com/repository
+
+            X509v3 Key Usage: critical
+                Certificate Sign, CRL Sign
+    Signature Algorithm: sha1WithRSAEncryption
+         d2:86:c0:ec:bd:f9:a1:b6:67:ee:66:0b:a2:06:3a:04:50:8e:
+         15:72:ac:4a:74:95:53:cb:37:cb:44:49:ef:07:90:6b:33:d9:
+         96:f0:94:56:a5:13:30:05:3c:85:32:21:7b:c9:c7:0a:a8:24:
+         a4:90:de:46:d3:25:23:14:03:67:c2:10:d6:6f:0f:5d:7b:7a:
+         cc:9f:c5:58:2a:c1:c4:9e:21:a8:5a:f3:ac:a4:46:f3:9e:e4:
+         63:cb:2f:90:a4:29:29:01:d9:72:2c:29:df:37:01:27:bc:4f:
+         ee:68:d3:21:8f:c0:b3:e4:f5:09:ed:d2:10:aa:53:b4:be:f0:
+         cc:59:0b:d6:3b:96:1c:95:24:49:df:ce:ec:fd:a7:48:91:14:
+         45:0e:3a:36:6f:da:45:b3:45:a2:41:c9:d4:d7:44:4e:3e:b9:
+         74:76:d5:a2:13:55:2c:c6:87:a3:b5:99:ac:06:84:87:7f:75:
+         06:fc:bf:14:4c:0e:cc:6e:c4:df:3d:b7:12:71:f4:e8:f1:51:
+         40:22:28:49:e0:1d:4b:87:a8:34:cc:06:a2:dd:12:5a:d1:86:
+         36:64:03:35:6f:6f:77:6e:eb:f2:85:50:98:5e:ab:03:53:ad:
+         91:23:63:1f:16:9c:cd:b9:b2:05:63:3a:e1:f4:68:1b:17:05:
+         35:95:53:ee
+-----BEGIN CERTIFICATE-----
+MIIE3jCCA8agAwIBAgICAwEwDQYJKoZIhvcNAQEFBQAwYzELMAkGA1UEBhMCVVMx
+ITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
+RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMTYw
+MTU0MzdaFw0yNjExMTYwMTU0MzdaMIHKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMH
+QXJpem9uYTETMBEGA1UEBxMKU2NvdHRzZGFsZTEaMBgGA1UEChMRR29EYWRkeS5j
+b20sIEluYy4xMzAxBgNVBAsTKmh0dHA6Ly9jZXJ0aWZpY2F0ZXMuZ29kYWRkeS5j
+b20vcmVwb3NpdG9yeTEwMC4GA1UEAxMnR28gRGFkZHkgU2VjdXJlIENlcnRpZmlj
+YXRpb24gQXV0aG9yaXR5MREwDwYDVQQFEwgwNzk2OTI4NzCCASIwDQYJKoZIhvcN
+AQEBBQADggEPADCCAQoCggEBAMQt1RWMnCZM7DI161+4WQFapmGBWTtwY6vj3D3H
+KrjJM9N55DrtPDAjhI6zMBS2sofDPZVUBJ7fmd0LJR4h3mUpfjWoqVTr9vcyOdQm
+VZWt7/v+WIbXnvQAjYwqDL1CBM6nPwT27oDyqu9SoWlm2r4arV3aLGbqGmu75RpR
+SgAvSMeYddi5Kcju+GZtCpyz8/x4fKL4o/K1w/O5epHBp+YlLpyo7RJlbmr2EkRT
+cDCVw5wrWCs9CHRK8r5RsL+H0EwnWGu1NcWdrxcx+AuP7q2BNgWJCJjPOq8lh8BJ
+6qf9Z/dFjpfMFDniNoW1fho3/Rb2cRGadDAW/hOUoz+EDU8CAwEAAaOCATIwggEu
+MB0GA1UdDgQWBBT9rGEyk2xF1uLuhV+auud2mWjM5zAfBgNVHSMEGDAWgBTSxLDS
+kdRMEXGzYcs9of7dqGrU4zASBgNVHRMBAf8ECDAGAQH/AgEAMDMGCCsGAQUFBwEB
+BCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZ29kYWRkeS5jb20wRgYDVR0f
+BD8wPTA7oDmgN4Y1aHR0cDovL2NlcnRpZmljYXRlcy5nb2RhZGR5LmNvbS9yZXBv
+c2l0b3J5L2dkcm9vdC5jcmwwSwYDVR0gBEQwQjBABgRVHSAAMDgwNgYIKwYBBQUH
+AgEWKmh0dHA6Ly9jZXJ0aWZpY2F0ZXMuZ29kYWRkeS5jb20vcmVwb3NpdG9yeTAO
+BgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBANKGwOy9+aG2Z+5mC6IG
+OgRQjhVyrEp0lVPLN8tESe8HkGsz2ZbwlFalEzAFPIUyIXvJxwqoJKSQ3kbTJSMU
+A2fCENZvD117esyfxVgqwcSeIaha86ykRvOe5GPLL5CkKSkB2XIsKd83ASe8T+5o
+0yGPwLPk9Qnt0hCqU7S+8MxZC9Y7lhyVJEnfzuz9p0iRFEUOOjZv2kWzRaJBydTX
+RE4+uXR21aITVSzGh6O1mawGhId/dQb8vxRMDsxuxN89txJx9OjxUUAiKEngHUuH
+qDTMBqLdElrRhjZkAzVvb3du6/KFUJheqwNTrZEjYx8WnM25sgVjOuH0aBsXBTWV
+U+4=
+-----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/twitter-chain.pem b/net/data/ssl/certificates/twitter-chain.pem
deleted file mode 100644
index 0d66f4a..0000000
--- a/net/data/ssl/certificates/twitter-chain.pem
+++ /dev/null
@@ -1,302 +0,0 @@
-Certificate:
-    Data:
-        Version: 3 (0x2)
-        Serial Number:
-            1a:c8:5e:b7:ae:c3:51:3c:d8:0d:85:38:5e:cf:d2:08
-    Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, O=Symantec Corporation, OU=Symantec Trust Network, CN=Symantec Class 3 EV SSL CA - G3
-        Validity
-            Not Before: Sep 10 00:00:00 2014 GMT
-            Not After : May  9 23:59:59 2016 GMT
-        Subject: 1.3.6.1.4.1.311.60.2.1.3=US/1.3.6.1.4.1.311.60.2.1.2=Delaware/businessCategory=Private Organization/serialNumber=4337446, C=US/postalCode=94103-1307, ST=California, L=San Francisco/street=1355 Market St, O=Twitter, Inc., OU=Twitter Security, CN=twitter.com
-        Subject Public Key Info:
-            Public Key Algorithm: rsaEncryption
-                Public-Key: (2048 bit)
-                Modulus:
-                    00:e3:ac:59:34:07:dc:11:f8:1c:ca:b3:0f:93:44:
-                    8a:54:34:76:90:6a:c0:22:00:be:95:9a:da:58:3c:
-                    6c:38:31:a2:a2:1f:3b:64:e2:9d:e0:f5:c2:ab:07:
-                    90:5b:7c:fe:f9:88:8c:6a:9d:69:3b:e0:23:65:b7:
-                    11:d6:e8:88:d6:3e:6d:8b:ed:ca:ea:58:0b:fe:4d:
-                    bf:2a:95:ca:bb:21:bb:ce:d6:e2:10:02:11:21:68:
-                    26:f7:92:7e:9c:a3:80:b1:82:d7:e5:a6:a0:86:47:
-                    42:1a:c6:5b:04:d9:c3:b5:b2:9b:38:d4:a1:6d:3b:
-                    bd:d8:05:f0:51:9b:bd:95:77:7f:e9:02:8e:60:a3:
-                    7a:65:20:52:23:db:8d:01:27:24:c2:00:66:0d:14:
-                    66:b3:52:2b:cc:6b:5b:a5:44:2f:e2:40:6d:da:21:
-                    a1:92:5a:57:12:d3:47:01:ef:e9:df:af:c6:91:8c:
-                    21:af:77:65:13:36:1c:63:7a:2d:05:e6:63:c5:0b:
-                    d8:39:e9:ac:f2:3b:ff:9d:c5:a7:46:0a:6e:1a:66:
-                    10:1e:4a:e7:ba:c7:89:79:1f:ae:f1:f3:84:03:ca:
-                    e7:50:8a:19:63:bf:3c:20:10:78:c5:f4:53:3c:7d:
-                    5e:0d:af:96:70:89:92:b9:7f:9a:19:0c:f6:78:6a:
-                    8f:73
-                Exponent: 65537 (0x10001)
-        X509v3 extensions:
-            X509v3 Subject Alternative Name: 
-                DNS:twitter.com, DNS:www.twitter.com
-            X509v3 Basic Constraints: 
-                CA:FALSE
-            X509v3 Key Usage: critical
-                Digital Signature, Key Encipherment
-            X509v3 Extended Key Usage: 
-                TLS Web Server Authentication, TLS Web Client Authentication
-            X509v3 Certificate Policies: 
-                Policy: 2.16.840.1.113733.1.7.23.6
-                  CPS: https://d.symcb.com/cps
-                  User Notice:
-                    Explicit Text: https://d.symcb.com/rpa
-
-            X509v3 Authority Key Identifier: 
-                keyid:01:59:AB:E7:DD:3A:0B:59:A6:64:63:D6:CF:20:07:57:D5:91:E7:6A
-
-            X509v3 CRL Distribution Points: 
-
-                Full Name:
-                  URI:http://sr.symcb.com/sr.crl
-
-            Authority Information Access: 
-                OCSP - URI:http://sr.symcd.com
-                CA Issuers - URI:http://sr.symcb.com/sr.crt
-
-    Signature Algorithm: sha256WithRSAEncryption
-         d1:53:68:e9:d6:20:d0:56:7a:10:80:b8:e9:7e:00:c9:9e:d5:
-         35:4a:a2:d2:a0:16:8a:e2:fb:eb:96:88:77:c2:6e:35:f4:a7:
-         a9:aa:dc:35:7b:c6:7d:5e:3c:f6:c9:5b:a0:d1:58:ae:7d:96:
-         e7:54:02:5c:69:1b:56:92:26:ad:06:2c:c1:5a:ff:59:f3:8a:
-         8c:94:32:0d:1a:42:d1:6e:bc:1c:bd:a8:c6:08:01:1b:73:17:
-         93:28:30:ae:ce:4d:4e:2d:4b:bf:22:af:9a:61:32:7a:a8:68:
-         25:19:3c:6d:fb:67:cc:29:3f:5b:f5:d1:af:4c:bf:67:a3:60:
-         c4:dd:b0:fb:83:55:6d:b5:2c:a9:7d:34:ad:b0:08:c7:2c:f0:
-         cb:4c:d8:2b:79:f4:e9:da:7f:6e:c0:de:55:7c:d6:d6:47:cf:
-         c4:90:ef:4f:be:eb:c9:3d:05:71:6b:5e:c7:36:8d:4f:0c:3c:
-         47:83:a5:11:88:22:f8:46:e0:f8:9b:1a:fe:e9:a2:df:90:81:
-         10:71:f3:97:9c:b7:69:60:77:20:d6:87:85:ee:5a:77:d2:92:
-         ec:d9:5d:1f:31:3b:3a:e2:5b:35:d1:92:36:db:44:d4:79:d9:
-         6c:03:24:87:5d:c3:86:c6:10:e2:ea:65:7c:cf:b8:ef:c2:31:
-         02:55:72:12
------BEGIN CERTIFICATE-----
-MIIFjTCCBHWgAwIBAgIQGshet67DUTzYDYU4Xs/SCDANBgkqhkiG9w0BAQsFADB3
-MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAd
-BgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMTH1N5bWFudGVj
-IENsYXNzIDMgRVYgU1NMIENBIC0gRzMwHhcNMTQwOTEwMDAwMDAwWhcNMTYwNTA5
-MjM1OTU5WjCCARIxEzARBgsrBgEEAYI3PAIBAxMCVVMxGTAXBgsrBgEEAYI3PAIB
-AgwIRGVsYXdhcmUxHTAbBgNVBA8TFFByaXZhdGUgT3JnYW5pemF0aW9uMRAwDgYD
-VQQFEwc0MzM3NDQ2MQswCQYDVQQGEwJVUzETMBEGA1UEEQwKOTQxMDMtMTMwNzET
-MBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzEXMBUG
-A1UECQwOMTM1NSBNYXJrZXQgU3QxFjAUBgNVBAoMDVR3aXR0ZXIsIEluYy4xGTAX
-BgNVBAsMEFR3aXR0ZXIgU2VjdXJpdHkxFDASBgNVBAMMC3R3aXR0ZXIuY29tMIIB
-IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA46xZNAfcEfgcyrMPk0SKVDR2
-kGrAIgC+lZraWDxsODGioh87ZOKd4PXCqweQW3z++YiMap1pO+AjZbcR1uiI1j5t
-i+3K6lgL/k2/KpXKuyG7ztbiEAIRIWgm95J+nKOAsYLX5aaghkdCGsZbBNnDtbKb
-ONShbTu92AXwUZu9lXd/6QKOYKN6ZSBSI9uNASckwgBmDRRms1IrzGtbpUQv4kBt
-2iGhklpXEtNHAe/p36/GkYwhr3dlEzYcY3otBeZjxQvYOems8jv/ncWnRgpuGmYQ
-HkrnuseJeR+u8fOEA8rnUIoZY788IBB4xfRTPH1eDa+WcImSuX+aGQz2eGqPcwID
-AQABo4IBdjCCAXIwJwYDVR0RBCAwHoILdHdpdHRlci5jb22CD3d3dy50d2l0dGVy
-LmNvbTAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEF
-BQcDAQYIKwYBBQUHAwIwZgYDVR0gBF8wXTBbBgtghkgBhvhFAQcXBjBMMCMGCCsG
-AQUFBwIBFhdodHRwczovL2Quc3ltY2IuY29tL2NwczAlBggrBgEFBQcCAjAZGhdo
-dHRwczovL2Quc3ltY2IuY29tL3JwYTAfBgNVHSMEGDAWgBQBWavn3ToLWaZkY9bP
-IAdX1ZHnajArBgNVHR8EJDAiMCCgHqAchhpodHRwOi8vc3Iuc3ltY2IuY29tL3Ny
-LmNybDBXBggrBgEFBQcBAQRLMEkwHwYIKwYBBQUHMAGGE2h0dHA6Ly9zci5zeW1j
-ZC5jb20wJgYIKwYBBQUHMAKGGmh0dHA6Ly9zci5zeW1jYi5jb20vc3IuY3J0MA0G
-CSqGSIb3DQEBCwUAA4IBAQDRU2jp1iDQVnoQgLjpfgDJntU1SqLSoBaK4vvrloh3
-wm419Kepqtw1e8Z9Xjz2yVug0ViufZbnVAJcaRtWkiatBizBWv9Z84qMlDINGkLR
-brwcvajGCAEbcxeTKDCuzk1OLUu/Iq+aYTJ6qGglGTxt+2fMKT9b9dGvTL9no2DE
-3bD7g1VttSypfTStsAjHLPDLTNgrefTp2n9uwN5VfNbWR8/EkO9PvuvJPQVxa17H
-No1PDDxHg6URiCL4RuD4mxr+6aLfkIEQcfOXnLdpYHcg1oeF7lp30pLs2V0fMTs6
-4ls10ZI220TUedlsAySHXcOGxhDi6mV8z7jvwjECVXIS
------END CERTIFICATE-----
-Certificate:
-    Data:
-        Version: 3 (0x2)
-        Serial Number:
-            7e:e1:4a:6f:6f:ef:f2:d3:7f:3f:ad:65:4d:3a:da:b4
-    Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 2006 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 3 Public Primary Certification Authority - G5
-        Validity
-            Not Before: Oct 31 00:00:00 2013 GMT
-            Not After : Oct 30 23:59:59 2023 GMT
-        Subject: C=US, O=Symantec Corporation, OU=Symantec Trust Network, CN=Symantec Class 3 EV SSL CA - G3
-        Subject Public Key Info:
-            Public Key Algorithm: rsaEncryption
-                Public-Key: (2048 bit)
-                Modulus:
-                    00:d8:a1:65:74:23:e8:2b:64:e2:32:d7:33:37:3d:
-                    8e:f5:34:16:48:dd:4f:7f:87:1c:f8:44:23:13:8e:
-                    fb:11:d8:44:5a:18:71:8e:60:16:26:92:9b:fd:17:
-                    0b:e1:71:70:42:fe:bf:fa:1c:c0:aa:a3:a7:b5:71:
-                    e8:ff:18:83:f6:df:10:0a:13:62:c8:3d:9c:a7:de:
-                    2e:3f:0c:d9:1d:e7:2e:fb:2a:ce:c8:9a:7f:87:bf:
-                    d8:4c:04:15:32:c9:d1:cc:95:71:a0:4e:28:4f:84:
-                    d9:35:fb:e3:86:6f:94:53:e6:72:8a:63:67:2e:be:
-                    69:f6:f7:6e:8e:9c:60:04:eb:29:fa:c4:47:42:d2:
-                    78:98:e3:ec:0b:a5:92:dc:b7:9a:bd:80:64:2b:38:
-                    7c:38:09:5b:66:f6:2d:95:7a:86:b2:34:2e:85:9e:
-                    90:0e:5f:b7:5d:a4:51:72:46:70:13:bf:67:f2:b6:
-                    a7:4d:14:1e:6c:b9:53:ee:23:1a:4e:8d:48:55:43:
-                    41:b1:89:75:6a:40:28:c5:7d:dd:d2:6e:d2:02:19:
-                    2f:7b:24:94:4b:eb:f1:1a:a9:9b:e3:23:9a:ea:fa:
-                    33:ab:0a:2c:b7:f4:60:08:dd:9f:1c:cd:dd:2d:01:
-                    66:80:af:b3:2f:29:1d:23:b8:8a:e1:a1:70:07:0c:
-                    34:0f
-                Exponent: 65537 (0x10001)
-        X509v3 extensions:
-            Authority Information Access: 
-                OCSP - URI:http://s2.symcb.com
-
-            X509v3 Basic Constraints: critical
-                CA:TRUE, pathlen:0
-            X509v3 Certificate Policies: 
-                Policy: X509v3 Any Policy
-                  CPS: http://www.symauth.com/cps
-                  User Notice:
-                    Explicit Text: http://www.symauth.com/rpa
-
-            X509v3 CRL Distribution Points: 
-
-                Full Name:
-                  URI:http://s1.symcb.com/pca3-g5.crl
-
-            X509v3 Key Usage: critical
-                Certificate Sign, CRL Sign
-            X509v3 Subject Alternative Name: 
-                DirName:/CN=SymantecPKI-1-533
-            X509v3 Subject Key Identifier: 
-                01:59:AB:E7:DD:3A:0B:59:A6:64:63:D6:CF:20:07:57:D5:91:E7:6A
-            X509v3 Authority Key Identifier: 
-                keyid:7F:D3:65:A7:C2:DD:EC:BB:F0:30:09:F3:43:39:FA:02:AF:33:31:33
-
-    Signature Algorithm: sha256WithRSAEncryption
-         42:01:55:7b:d0:16:1a:5d:58:e8:bb:9b:a8:4d:d7:f3:d7:eb:
-         13:94:86:d6:7f:21:0b:47:bc:57:9b:92:5d:4f:05:9f:38:a4:
-         10:7c:cf:83:be:06:43:46:8d:08:bc:6a:d7:10:a6:fa:ab:af:
-         2f:61:a8:63:f2:65:df:7f:4c:88:12:88:4f:b3:69:d9:ff:27:
-         c0:0a:97:91:8f:56:fb:89:c4:a8:bb:92:2d:1b:73:b0:c6:ab:
-         36:f4:96:6c:20:08:ef:0a:1e:66:24:45:4f:67:00:40:c8:07:
-         54:74:33:3b:a6:ad:bb:23:9f:66:ed:a2:44:70:34:fb:0e:ea:
-         01:fd:cf:78:74:df:a7:ad:55:b7:5f:4d:f6:d6:3f:e0:86:ce:
-         24:c7:42:a9:13:14:44:35:4b:b6:df:c9:60:ac:0c:7f:d9:93:
-         21:4b:ee:9c:e4:49:02:98:d3:60:7b:5c:bc:d5:30:2f:07:ce:
-         44:42:c4:0b:99:fe:e6:9f:fc:b0:78:86:51:6d:d1:2c:9d:c6:
-         96:fb:85:82:bb:04:2f:f7:62:80:ef:62:da:7f:f6:0e:ac:90:
-         b8:56:bd:79:3f:f2:80:6e:a3:d9:b9:0f:5d:3a:07:1d:91:93:
-         86:4b:29:4c:e1:dc:b5:e1:e0:33:9d:b3:cb:36:91:4b:fe:a1:
-         b4:ee:f0:f9
------BEGIN CERTIFICATE-----
-MIIFKzCCBBOgAwIBAgIQfuFKb2/v8tN/P61lTTratDANBgkqhkiG9w0BAQsFADCB
-yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
-ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp
-U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW
-ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5IC0gRzUwHhcNMTMxMDMxMDAwMDAwWhcNMjMxMDMwMjM1OTU5WjB3MQsw
-CQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNV
-BAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMTH1N5bWFudGVjIENs
-YXNzIDMgRVYgU1NMIENBIC0gRzMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
-AoIBAQDYoWV0I+grZOIy1zM3PY71NBZI3U9/hxz4RCMTjvsR2ERaGHGOYBYmkpv9
-FwvhcXBC/r/6HMCqo6e1cej/GIP23xAKE2LIPZyn3i4/DNkd5y77Ks7Imn+Hv9hM
-BBUyydHMlXGgTihPhNk1++OGb5RT5nKKY2cuvmn2926OnGAE6yn6xEdC0niY4+wL
-pZLct5q9gGQrOHw4CVtm9i2VeoayNC6FnpAOX7ddpFFyRnATv2fytqdNFB5suVPu
-IxpOjUhVQ0GxiXVqQCjFfd3SbtICGS97JJRL6/EaqZvjI5rq+jOrCiy39GAI3Z8c
-zd0tAWaAr7MvKR0juIrhoXAHDDQPAgMBAAGjggFdMIIBWTAvBggrBgEFBQcBAQQj
-MCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9zMi5zeW1jYi5jb20wEgYDVR0TAQH/BAgw
-BgEB/wIBADBlBgNVHSAEXjBcMFoGBFUdIAAwUjAmBggrBgEFBQcCARYaaHR0cDov
-L3d3dy5zeW1hdXRoLmNvbS9jcHMwKAYIKwYBBQUHAgIwHBoaaHR0cDovL3d3dy5z
-eW1hdXRoLmNvbS9ycGEwMAYDVR0fBCkwJzAloCOgIYYfaHR0cDovL3MxLnN5bWNi
-LmNvbS9wY2EzLWc1LmNybDAOBgNVHQ8BAf8EBAMCAQYwKQYDVR0RBCIwIKQeMBwx
-GjAYBgNVBAMTEVN5bWFudGVjUEtJLTEtNTMzMB0GA1UdDgQWBBQBWavn3ToLWaZk
-Y9bPIAdX1ZHnajAfBgNVHSMEGDAWgBR/02Wnwt3su/AwCfNDOfoCrzMxMzANBgkq
-hkiG9w0BAQsFAAOCAQEAQgFVe9AWGl1Y6LubqE3X89frE5SG1n8hC0e8V5uSXU8F
-nzikEHzPg74GQ0aNCLxq1xCm+quvL2GoY/Jl339MiBKIT7Np2f8nwAqXkY9W+4nE
-qLuSLRtzsMarNvSWbCAI7woeZiRFT2cAQMgHVHQzO6atuyOfZu2iRHA0+w7qAf3P
-eHTfp61Vt19N9tY/4IbOJMdCqRMURDVLtt/JYKwMf9mTIUvunORJApjTYHtcvNUw
-LwfORELEC5n+5p/8sHiGUW3RLJ3GlvuFgrsEL/digO9i2n/2DqyQuFa9eT/ygG6j
-2bkPXToHHZGThkspTOHcteHgM52zyzaRS/6htO7w+Q==
------END CERTIFICATE-----
-Certificate:
-    Data:
-        Version: 3 (0x2)
-        Serial Number:
-            18:da:d1:9e:26:7d:e8:bb:4a:21:58:cd:cc:6b:3b:4a
-    Signature Algorithm: sha1WithRSAEncryption
-        Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 2006 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 3 Public Primary Certification Authority - G5
-        Validity
-            Not Before: Nov  8 00:00:00 2006 GMT
-            Not After : Jul 16 23:59:59 2036 GMT
-        Subject: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 2006 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 3 Public Primary Certification Authority - G5
-        Subject Public Key Info:
-            Public Key Algorithm: rsaEncryption
-                Public-Key: (2048 bit)
-                Modulus:
-                    00:af:24:08:08:29:7a:35:9e:60:0c:aa:e7:4b:3b:
-                    4e:dc:7c:bc:3c:45:1c:bb:2b:e0:fe:29:02:f9:57:
-                    08:a3:64:85:15:27:f5:f1:ad:c8:31:89:5d:22:e8:
-                    2a:aa:a6:42:b3:8f:f8:b9:55:b7:b1:b7:4b:b3:fe:
-                    8f:7e:07:57:ec:ef:43:db:66:62:15:61:cf:60:0d:
-                    a4:d8:de:f8:e0:c3:62:08:3d:54:13:eb:49:ca:59:
-                    54:85:26:e5:2b:8f:1b:9f:eb:f5:a1:91:c2:33:49:
-                    d8:43:63:6a:52:4b:d2:8f:e8:70:51:4d:d1:89:69:
-                    7b:c7:70:f6:b3:dc:12:74:db:7b:5d:4b:56:d3:96:
-                    bf:15:77:a1:b0:f4:a2:25:f2:af:1c:92:67:18:e5:
-                    f4:06:04:ef:90:b9:e4:00:e4:dd:3a:b5:19:ff:02:
-                    ba:f4:3c:ee:e0:8b:eb:37:8b:ec:f4:d7:ac:f2:f6:
-                    f0:3d:af:dd:75:91:33:19:1d:1c:40:cb:74:24:19:
-                    21:93:d9:14:fe:ac:2a:52:c7:8f:d5:04:49:e4:8d:
-                    63:47:88:3c:69:83:cb:fe:47:bd:2b:7e:4f:c5:95:
-                    ae:0e:9d:d4:d1:43:c0:67:73:e3:14:08:7e:e5:3f:
-                    9f:73:b8:33:0a:cf:5d:3f:34:87:96:8a:ee:53:e8:
-                    25:15
-                Exponent: 65537 (0x10001)
-        X509v3 extensions:
-            X509v3 Basic Constraints: critical
-                CA:TRUE
-            X509v3 Key Usage: critical
-                Certificate Sign, CRL Sign
-            1.3.6.1.5.5.7.1.12: 
-                0_.].[0Y0W0U..image/gif0!0.0...+..............k...j.H.,{..0%.#http://logo.verisign.com/vslogo.gif
-            X509v3 Subject Key Identifier: 
-                7F:D3:65:A7:C2:DD:EC:BB:F0:30:09:F3:43:39:FA:02:AF:33:31:33
-    Signature Algorithm: sha1WithRSAEncryption
-         93:24:4a:30:5f:62:cf:d8:1a:98:2f:3d:ea:dc:99:2d:bd:77:
-         f6:a5:79:22:38:ec:c4:a7:a0:78:12:ad:62:0e:45:70:64:c5:
-         e7:97:66:2d:98:09:7e:5f:af:d6:cc:28:65:f2:01:aa:08:1a:
-         47:de:f9:f9:7c:92:5a:08:69:20:0d:d9:3e:6d:6e:3c:0d:6e:
-         d8:e6:06:91:40:18:b9:f8:c1:ed:df:db:41:aa:e0:96:20:c9:
-         cd:64:15:38:81:c9:94:ee:a2:84:29:0b:13:6f:8e:db:0c:dd:
-         25:02:db:a4:8b:19:44:d2:41:7a:05:69:4a:58:4f:60:ca:7e:
-         82:6a:0b:02:aa:25:17:39:b5:db:7f:e7:84:65:2a:95:8a:bd:
-         86:de:5e:81:16:83:2d:10:cc:de:fd:a8:82:2a:6d:28:1f:0d:
-         0b:c4:e5:e7:1a:26:19:e1:f4:11:6f:10:b5:95:fc:e7:42:05:
-         32:db:ce:9d:51:5e:28:b6:9e:85:d3:5b:ef:a5:7d:45:40:72:
-         8e:b7:0e:6b:0e:06:fb:33:35:48:71:b8:9d:27:8b:c4:65:5f:
-         0d:86:76:9c:44:7a:f6:95:5c:f6:5d:32:08:33:a4:54:b6:18:
-         3f:68:5c:f2:42:4a:85:38:54:83:5f:d1:e8:2c:f2:ac:11:d6:
-         a8:ed:63:6a
------BEGIN CERTIFICATE-----
-MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB
-yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
-ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp
-U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW
-ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL
-MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
-ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln
-biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
-U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
-aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1
-nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex
-t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz
-SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG
-BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+
-rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/
-NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E
-BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH
-BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
-aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv
-MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE
-p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y
-5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK
-WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ
-4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N
-hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
------END CERTIFICATE-----
diff --git a/net/data/ssl/scripts/generate-test-certs.sh b/net/data/ssl/scripts/generate-test-certs.sh
index c94ca6c..d62bb98 100755
--- a/net/data/ssl/scripts/generate-test-certs.sh
+++ b/net/data/ssl/scripts/generate-test-certs.sh
@@ -124,51 +124,7 @@
 SUBJECT_NAME="req_punycode_dn" \
   try openssl req -x509 -days 3650 -extensions req_punycode \
     -config ../scripts/ee.cnf -newkey rsa:2048 -text \
-    -out ../certificates/punycodetest.pem
-
-## Reject intranet hostnames in "publicly" trusted certs
-# 365 * 3 = 1095
-SUBJECT_NAME="req_dn" \
-  try openssl req -x509 -days 1095 \
-    -config ../scripts/ee.cnf -newkey rsa:2048 -text \
-    -out ../certificates/reject_intranet_hosts.pem
-
-## Validity too long
-# 365 * 11 = 4015
-try openssl req -config ../scripts/ee.cnf \
-  -newkey rsa:2048 -text -out ../certificates/11_year_validity.req
-CA_COMMON_NAME="Test Root CA" \
-  try openssl ca \
-    -batch \
-    -extensions user_cert \
-    -startdate 141030000000Z \
-    -days 4015 \
-    -in ../certificates/11_year_validity.req \
-    -out ../certificates/11_year_validity.pem \
-    -config ca.cnf
-try openssl req -config ../scripts/ee.cnf \
-  -newkey rsa:2048 -text -out ../certificates/40_months_after_2015_04.req
-CA_COMMON_NAME="Test Root CA" \
-  try openssl ca \
-    -batch \
-    -extensions user_cert \
-    -startdate 150402000000Z \
-    -enddate 180901000000Z \
-    -in ../certificates/40_months_after_2015_04.req \
-    -out ../certificates/40_months_after_2015_04.pem \
-    -config ca.cnf
-try openssl req -config ../scripts/ee.cnf \
-  -newkey rsa:2048 -text -out ../certificates/61_months_after_2012_07.req
-# 30 * 61 = 1830
-CA_COMMON_NAME="Test Root CA" \
-  try openssl ca \
-    -batch \
-    -extensions user_cert \
-    -startdate 141030000000Z \
-    -days 1830 \
-    -in ../certificates/61_months_after_2012_07.req \
-    -out ../certificates/61_months_after_2012_07.pem \
-    -config ca.cnf
+     -out ../certificates/punycodetest.pem
 
 # Regenerate CRLSets
 ## Block a leaf cert directly by SPKI
diff --git a/net/http/http_response_info.cc b/net/http/http_response_info.cc
index 2ec0fb5..9569b38 100644
--- a/net/http/http_response_info.cc
+++ b/net/http/http_response_info.cc
@@ -396,9 +396,9 @@
     case CONNECTION_INFO_SPDY3:
       return "spdy/3";
     case CONNECTION_INFO_SPDY4:
-      // This is the HTTP/2 draft-15 identifier. For internal
+      // This is the HTTP/2 draft 14 identifier. For internal
       // consistency, HTTP/2 is named SPDY4 within Chromium.
-      return "h2-15";
+      return "h2-14";
     case CONNECTION_INFO_QUIC1_SPDY3:
       return "quic/1+spdy/3";
     case NUM_OF_CONNECTION_INFOS:
diff --git a/net/http/http_server_properties.cc b/net/http/http_server_properties.cc
index cc41ea8..4433b4e 100644
--- a/net/http/http_server_properties.cc
+++ b/net/http/http_server_properties.cc
@@ -20,7 +20,7 @@
   "npn-spdy/2",
   "npn-spdy/3",
   "npn-spdy/3.1",
-  "npn-h2-15",  // HTTP/2 draft-15. Called SPDY4 internally.
+  "npn-h2-14",  // HTTP/2 draft 14. Called SPDY4 internally.
   "quic"
 };
 
diff --git a/net/quic/crypto/quic_crypto_client_config.cc b/net/quic/crypto/quic_crypto_client_config.cc
index 5b120c9..4828c3a 100644
--- a/net/quic/crypto/quic_crypto_client_config.cc
+++ b/net/quic/crypto/quic_crypto_client_config.cc
@@ -32,25 +32,21 @@
 
 namespace {
 
-enum ServerConfigState {
-  // WARNING: Do not change the numerical values of any of server config state.
-  // Do not remove deprecated server config states - just comment them as
-  // deprecated.
-  SERVER_CONFIG_EMPTY = 0,
-  SERVER_CONFIG_INVALID = 1,
-  SERVER_CONFIG_CORRUPTED = 2,
-  SERVER_CONFIG_EXPIRED = 3,
-  SERVER_CONFIG_INVALID_EXPIRY = 4,
+// Tracks the reason (the state of the server config) for sending inchoate
+// ClientHello to the server.
+void RecordInchoateClientHelloReason(
+    QuicCryptoClientConfig::CachedState::ServerConfigState state) {
+  UMA_HISTOGRAM_ENUMERATION(
+      "Net.QuicInchoateClientHelloReason", state,
+      QuicCryptoClientConfig::CachedState::SERVER_CONFIG_COUNT);
+}
 
-  // NOTE: Add new server config states only immediately above this line. Make
-  // sure to update the QuicServerConfigState enum in
-  // tools/metrics/histograms/histograms.xml accordingly.
-  SERVER_CONFIG_COUNT
-};
-
-void RecordServerConfigState(ServerConfigState server_config_state) {
-  UMA_HISTOGRAM_ENUMERATION("Net.QuicClientHelloServerConfigState",
-                            server_config_state, SERVER_CONFIG_COUNT);
+// Tracks the state of the QUIC server information loaded from the disk cache.
+void RecordDiskCacheServerConfigState(
+    QuicCryptoClientConfig::CachedState::ServerConfigState state) {
+  UMA_HISTOGRAM_ENUMERATION(
+      "Net.QuicServerInfo.DiskCacheState", state,
+      QuicCryptoClientConfig::CachedState::SERVER_CONFIG_COUNT);
 }
 
 }  // namespace
@@ -72,12 +68,12 @@
 
 bool QuicCryptoClientConfig::CachedState::IsComplete(QuicWallTime now) const {
   if (server_config_.empty()) {
-    RecordServerConfigState(SERVER_CONFIG_EMPTY);
+    RecordInchoateClientHelloReason(SERVER_CONFIG_EMPTY);
     return false;
   }
 
   if (!server_config_valid_) {
-    RecordServerConfigState(SERVER_CONFIG_INVALID);
+    RecordInchoateClientHelloReason(SERVER_CONFIG_INVALID);
     return false;
   }
 
@@ -85,13 +81,13 @@
   if (!scfg) {
     // Should be impossible short of cache corruption.
     DCHECK(false);
-    RecordServerConfigState(SERVER_CONFIG_CORRUPTED);
+    RecordInchoateClientHelloReason(SERVER_CONFIG_CORRUPTED);
     return false;
   }
 
   uint64 expiry_seconds;
   if (scfg->GetUint64(kEXPY, &expiry_seconds) != QUIC_NO_ERROR) {
-    RecordServerConfigState(SERVER_CONFIG_INVALID_EXPIRY);
+    RecordInchoateClientHelloReason(SERVER_CONFIG_INVALID_EXPIRY);
     return false;
   }
   if (now.ToUNIXSeconds() >= expiry_seconds) {
@@ -99,7 +95,7 @@
         "Net.QuicClientHelloServerConfig.InvalidDuration",
         base::TimeDelta::FromSeconds(now.ToUNIXSeconds() - expiry_seconds),
         base::TimeDelta::FromMinutes(1), base::TimeDelta::FromDays(20), 50);
-    RecordServerConfigState(SERVER_CONFIG_EXPIRED);
+    RecordInchoateClientHelloReason(SERVER_CONFIG_EXPIRED);
     return false;
   }
 
@@ -123,7 +119,8 @@
   return scfg_.get();
 }
 
-QuicErrorCode QuicCryptoClientConfig::CachedState::SetServerConfig(
+QuicCryptoClientConfig::CachedState::ServerConfigState
+QuicCryptoClientConfig::CachedState::SetServerConfig(
     StringPiece server_config, QuicWallTime now, string* error_details) {
   const bool matches_existing = server_config == server_config_;
 
@@ -141,18 +138,18 @@
 
   if (!new_scfg) {
     *error_details = "SCFG invalid";
-    return QUIC_INVALID_CRYPTO_MESSAGE_PARAMETER;
+    return SERVER_CONFIG_INVALID;
   }
 
   uint64 expiry_seconds;
   if (new_scfg->GetUint64(kEXPY, &expiry_seconds) != QUIC_NO_ERROR) {
     *error_details = "SCFG missing EXPY";
-    return QUIC_INVALID_CRYPTO_MESSAGE_PARAMETER;
+    return SERVER_CONFIG_INVALID_EXPIRY;
   }
 
   if (now.ToUNIXSeconds() >= expiry_seconds) {
     *error_details = "SCFG has expired";
-    return QUIC_CRYPTO_SERVER_CONFIG_EXPIRED;
+    return SERVER_CONFIG_EXPIRED;
   }
 
   if (!matches_existing) {
@@ -160,7 +157,7 @@
     SetProofInvalid();
     scfg_.reset(new_scfg_storage.release());
   }
-  return QUIC_NO_ERROR;
+  return SERVER_CONFIG_VALID;
 }
 
 void QuicCryptoClientConfig::CachedState::InvalidateServerConfig() {
@@ -228,13 +225,15 @@
   DCHECK(server_config_.empty());
 
   if (server_config.empty()) {
+    RecordDiskCacheServerConfigState(SERVER_CONFIG_EMPTY);
     return false;
   }
 
   string error_details;
-  QuicErrorCode error = SetServerConfig(server_config, now,
-                                        &error_details);
-  if (error != QUIC_NO_ERROR) {
+  ServerConfigState state = SetServerConfig(server_config, now,
+                                            &error_details);
+  RecordDiskCacheServerConfigState(state);
+  if (state != SERVER_CONFIG_VALID) {
     DVLOG(1) << "SetServerConfig failed with " << error_details;
     return false;
   }
@@ -594,9 +593,15 @@
     return QUIC_CRYPTO_MESSAGE_PARAMETER_NOT_FOUND;
   }
 
-  QuicErrorCode error = cached->SetServerConfig(scfg, now, error_details);
-  if (error != QUIC_NO_ERROR) {
-    return error;
+  CachedState::ServerConfigState state = cached->SetServerConfig(
+      scfg, now, error_details);
+  if (state == CachedState::SERVER_CONFIG_EXPIRED) {
+    return QUIC_CRYPTO_SERVER_CONFIG_EXPIRED;
+  }
+  // TODO(rtenneti): Return more specific error code than returning
+  // QUIC_INVALID_CRYPTO_MESSAGE_PARAMETER.
+  if (state != CachedState::SERVER_CONFIG_VALID) {
+    return QUIC_INVALID_CRYPTO_MESSAGE_PARAMETER;
   }
 
   StringPiece token;
diff --git a/net/quic/crypto/quic_crypto_client_config.h b/net/quic/crypto/quic_crypto_client_config.h
index 584e487..4bfed1b 100644
--- a/net/quic/crypto/quic_crypto_client_config.h
+++ b/net/quic/crypto/quic_crypto_client_config.h
@@ -35,6 +35,24 @@
   // over several connections to the same server.
   class NET_EXPORT_PRIVATE CachedState {
    public:
+    // Enum to track if the server config is valid or not. If it is not valid,
+    // it specifies why it is invalid.
+    enum ServerConfigState {
+      // WARNING: Do not change the numerical values of any of server config
+      // state. Do not remove deprecated server config states - just comment
+      // them as deprecated.
+      SERVER_CONFIG_EMPTY = 0,
+      SERVER_CONFIG_INVALID = 1,
+      SERVER_CONFIG_CORRUPTED = 2,
+      SERVER_CONFIG_EXPIRED = 3,
+      SERVER_CONFIG_INVALID_EXPIRY = 4,
+      SERVER_CONFIG_VALID = 5,
+      // NOTE: Add new server config states only immediately above this line.
+      // Make sure to update the QuicServerConfigState enum in
+      // tools/metrics/histograms/histograms.xml accordingly.
+      SERVER_CONFIG_COUNT
+    };
+
     CachedState();
     ~CachedState();
 
@@ -54,9 +72,9 @@
     // SetServerConfig checks that |server_config| parses correctly and stores
     // it in |server_config_|. |now| is used to judge whether |server_config|
     // has expired.
-    QuicErrorCode SetServerConfig(base::StringPiece server_config,
-                                  QuicWallTime now,
-                                  std::string* error_details);
+    ServerConfigState SetServerConfig(base::StringPiece server_config,
+                                      QuicWallTime now,
+                                      std::string* error_details);
 
     // InvalidateServerConfig clears the cached server config (if any).
     void InvalidateServerConfig();
diff --git a/net/quic/quic_protocol.h b/net/quic/quic_protocol.h
index afd5ed4..ad920d0 100644
--- a/net/quic/quic_protocol.h
+++ b/net/quic/quic_protocol.h
@@ -76,6 +76,9 @@
 // Smaller values are ignored.
 const QuicByteCount kMinSocketReceiveBuffer = 16 * 1024;
 
+// Don't allow a client to suggest an RTT shorter than 10ms.
+const uint32 kMinInitialRoundTripTimeUs = 10 * kNumMicrosPerMilli;
+
 // Don't allow a client to suggest an RTT longer than 15 seconds.
 const uint32 kMaxInitialRoundTripTimeUs = 15 * kNumMicrosPerSecond;
 
diff --git a/net/quic/quic_sent_packet_manager.cc b/net/quic/quic_sent_packet_manager.cc
index bdf8690..9e2d04f 100644
--- a/net/quic/quic_sent_packet_manager.cc
+++ b/net/quic/quic_sent_packet_manager.cc
@@ -97,12 +97,16 @@
 void QuicSentPacketManager::SetFromConfig(const QuicConfig& config) {
   if (config.HasReceivedInitialRoundTripTimeUs() &&
       config.ReceivedInitialRoundTripTimeUs() > 0) {
-    rtt_stats_.set_initial_rtt_us(min(kMaxInitialRoundTripTimeUs,
-                                      config.ReceivedInitialRoundTripTimeUs()));
-  } else if (config.HasInitialRoundTripTimeUsToSend()) {
     rtt_stats_.set_initial_rtt_us(
-        min(kMaxInitialRoundTripTimeUs,
-            config.GetInitialRoundTripTimeUsToSend()));
+        max(kMinInitialRoundTripTimeUs,
+            min(kMaxInitialRoundTripTimeUs,
+                config.ReceivedInitialRoundTripTimeUs())));
+  } else if (config.HasInitialRoundTripTimeUsToSend() &&
+             config.GetInitialRoundTripTimeUsToSend() > 0) {
+    rtt_stats_.set_initial_rtt_us(
+        max(kMinInitialRoundTripTimeUs,
+            min(kMaxInitialRoundTripTimeUs,
+                config.GetInitialRoundTripTimeUsToSend())));
   }
   // TODO(ianswett): BBR is currently a server only feature.
   if (FLAGS_quic_allow_bbr &&
diff --git a/net/quic/quic_stream_factory.cc b/net/quic/quic_stream_factory.cc
index 0ea6d7c..076797a 100644
--- a/net/quic/quic_stream_factory.cc
+++ b/net/quic/quic_stream_factory.cc
@@ -993,6 +993,8 @@
 void QuicStreamFactory::InitializeCachedStateInCryptoConfig(
     const QuicServerId& server_id,
     const scoped_ptr<QuicServerInfo>& server_info) {
+  // |server_info| will be NULL, if a non-empty server config already exists in
+  // the memory cache. This is a minor optimization to avoid LookupOrCreate.
   if (!server_info)
     return;
 
@@ -1001,6 +1003,27 @@
   if (!cached->IsEmpty())
     return;
 
+  if (http_server_properties_) {
+    if (quic_supported_servers_at_startup_.empty()) {
+      for (const std::pair<net::HostPortPair, net::AlternateProtocolInfo>&
+               key_value : http_server_properties_->alternate_protocol_map()) {
+        if (key_value.second.protocol == QUIC) {
+          quic_supported_servers_at_startup_.insert(key_value.first);
+        }
+      }
+    }
+
+    // TODO(rtenneti): Delete the following histogram after collecting stats.
+    // If the AlternateProtocolMap contained an entry for this host, check if
+    // the disk cache contained an entry for it.
+    if (ContainsKey(quic_supported_servers_at_startup_,
+                    server_id.host_port_pair())) {
+      UMA_HISTOGRAM_BOOLEAN(
+          "Net.QuicServerInfo.ExpectConfigMissingFromDiskCache",
+          server_info->state().server_config.empty());
+    }
+  }
+
   if (!cached->Initialize(server_info->state().server_config,
                           server_info->state().source_address_token,
                           server_info->state().certs,
diff --git a/net/quic/quic_stream_factory.h b/net/quic/quic_stream_factory.h
index c892cb2..2fad1fc 100644
--- a/net/quic/quic_stream_factory.h
+++ b/net/quic/quic_stream_factory.h
@@ -299,6 +299,7 @@
   // Local address of socket that was created in CreateSession.
   IPEndPoint local_address_;
   bool check_persisted_supports_quic_;
+  std::set<HostPortPair> quic_supported_servers_at_startup_;
 
   base::TaskRunner* task_runner_;
 
diff --git a/net/quic/quic_time.h b/net/quic/quic_time.h
index 5fbe30c..53e5ebe 100644
--- a/net/quic/quic_time.h
+++ b/net/quic/quic_time.h
@@ -18,6 +18,8 @@
 namespace net {
 
 static const uint64 kNumMicrosPerSecond = base::Time::kMicrosecondsPerSecond;
+static const uint64 kNumMicrosPerMilli =
+    base::Time::kMicrosecondsPerMillisecond;
 
 // A QuicTime is a purely relative time. QuicTime values from different clocks
 // cannot be compared to each other. If you need an absolute time, see
diff --git a/net/socket/next_proto.h b/net/socket/next_proto.h
index 89400a9..4df6e9b 100644
--- a/net/socket/next_proto.h
+++ b/net/socket/next_proto.h
@@ -27,8 +27,7 @@
   kProtoSPDYMinimumVersion = kProtoDeprecatedSPDY2,
   kProtoSPDY3 = 101,
   kProtoSPDY31 = 102,
-  // HTTP/2 draft-14 was 103,
-  kProtoSPDY4 = 104,  // SPDY4 is HTTP/2 draft-15.
+  kProtoSPDY4 = 103,  // SPDY4 is HTTP/2.
   kProtoSPDYMaximumVersion = kProtoSPDY4,
 
   kProtoQUIC1SPDY3 = 200,
diff --git a/net/socket/ssl_client_socket.cc b/net/socket/ssl_client_socket.cc
index 269ca7e..3184e04 100644
--- a/net/socket/ssl_client_socket.cc
+++ b/net/socket/ssl_client_socket.cc
@@ -37,8 +37,8 @@
     return kProtoSPDY3;
   } else if (proto_string == "spdy/3.1") {
     return kProtoSPDY31;
-  } else if (proto_string == "h2-15") {
-    // This is the HTTP/2 draft-15 identifier. For internal
+  } else if (proto_string == "h2-14") {
+    // This is the HTTP/2 draft 14 identifier. For internal
     // consistency, HTTP/2 is named SPDY4 within Chromium.
     return kProtoSPDY4;
   } else if (proto_string == "quic/1+spdy/3") {
@@ -60,9 +60,9 @@
     case kProtoSPDY31:
       return "spdy/3.1";
     case kProtoSPDY4:
-      // This is the HTTP/2 draft-15 identifier. For internal
+      // This is the HTTP/2 draft 14 identifier. For internal
       // consistency, HTTP/2 is named SPDY4 within Chromium.
-      return "h2-15";
+      return "h2-14";
     case kProtoQUIC1SPDY3:
       return "quic/1+spdy/3";
     case kProtoUnknown:
diff --git a/net/test/test_certificate_data.h b/net/test/test_certificate_data.h
index 17de41f..3ccda5e 100644
--- a/net/test/test_certificate_data.h
+++ b/net/test/test_certificate_data.h
@@ -9,26 +9,22 @@
     "\x15\x60\xde\x65\x4e\x03\x9f\xd0\x08\x82"
     "\xa9\x6a\xc4\x65\x8e\x6f\x92\x06\x84\x35";
 
-// kTwitterSPKIs contains the SHA1 hashes of the SPKIs of the twitter-chain.pem
+// kSatvedaSPKIs contains the SHA1 hashes of the SPKIs of the satveda.pem
 // certificate chain, in order.
-static const char kTwitterSPKIs[3][21] = {
-  "\x26\x9a\x19\xa3\x88\x28\xc1\xdd\x70\x1b"
-  "\xa0\xca\x2c\x98\xdb\xc6\xe1\x4f\x37\x3e",
-  "\x47\x49\xdf\x16\x57\xf4\x6c\x8b\xd2\x8c"
-  "\x79\x1b\x99\xfb\x9f\x28\x81\x2a\x60\xe0",
-  "\xb1\x81\x08\x1a\x19\xa4\xc0\x94\x1f\xfa"
-  "\xe8\x95\x28\xc1\x24\xc9\x9b\x34\xac\xc7",
+static const char kSatvedaSPKIs[2][21] = {
+  "\xd6\x2d\x7a\x12\x02\x7f\x9b\x8e\x4f\x2b"
+  "\x07\xc5\xfb\xf9\x2a\x2e\x9a\xcc\x0e\xe3",
+  "\xba\x2e\xb5\xa8\x3e\x13\x23\xd9\x53\x4b"
+  "\x5e\x65\xbc\xe7\xa3\x13\x5d\xd0\xa9\x96",
 };
 
-// kTwitterSPKIsSHA256 contains the SHA256 hashes of the SPKIs of the
-// twitter-chain.pem certificate chain, in order.
-static const char kTwitterSPKIsSHA256[3][33] = {
-  "\x20\xec\x5d\x0a\xfb\xc6\xc0\xe2\xe1\x95\x56\xc5\x35\x2b\x3c\x60"
-  "\x78\xa6\xed\x95\x55\xc2\xfa\x86\x82\x40\x4f\xdb\x55\x29\xd3\xad",
-  "\x80\xcc\x56\x3a\xb5\xf8\x3c\xc4\x1e\xb0\xaf\x6a\x14\xd6\xd8\x07"
-  "\x18\xc1\x7e\x35\x2f\x96\x49\xff\xbc\xdd\x67\xf8\xbf\x65\x13\x91",
-  "\x25\xb4\x1b\x50\x6e\x49\x30\x95\x28\x23\xa6\xeb\x9f\x1d\x31\xde"
-  "\xf6\x45\xea\x38\xa5\xc6\xc6\xa9\x6d\x71\x95\x7e\x38\x4d\xf0\x58",
+// kSatvedaSPKIsSHA256 contains the SHA256 hashes of the SPKIs of the
+// satveda.pem certificate chain, in order.
+static const char kSatvedaSPKIsSHA256[2][33] = {
+  "\xb9\x42\xab\xf2\x08\x63\xef\x81\x70\x88\x45\xc4\x39\xa2\x6e\x9c"
+  "\x2f\x9a\xf9\xf4\xcb\x23\x61\xd4\x83\x97\x61\x6d\xf2\x5b\x27\xa8",
+  "\x32\xb6\x4b\x66\x72\x7a\x20\x63\xe4\x06\x6f\x3b\x95\x8c\xb0\xaa"
+  "\xee\x57\x6a\x5e\xce\xfd\x95\x33\x99\xbb\x88\x74\x73\x1d\x95\x87",
 };
 
 // Certificates for test data. They're obtained with:
diff --git a/net/tools/quic/end_to_end_test.cc b/net/tools/quic/end_to_end_test.cc
index 55e2d88..1fb3e79 100644
--- a/net/tools/quic/end_to_end_test.cc
+++ b/net/tools/quic/end_to_end_test.cc
@@ -924,7 +924,7 @@
   // Client tries to request twice the server's max initial window, and the
   // server limits it to the max.
   client_config_.SetInitialCongestionWindowToSend(2 * kMaxInitialWindow);
-  client_config_.SetInitialRoundTripTimeUsToSend(1000);
+  client_config_.SetInitialRoundTripTimeUsToSend(20000);
 
   ASSERT_TRUE(Initialize());
   client_->client()->WaitForCryptoHandshakeConfirmed();
@@ -949,9 +949,9 @@
   EXPECT_EQ(GetParam().use_pacing, server_sent_packet_manager.using_pacing());
   EXPECT_EQ(GetParam().use_pacing, client_sent_packet_manager.using_pacing());
 
-  // The client *should* set the intitial RTT.
-  EXPECT_EQ(1000u, client_sent_packet_manager.GetRttStats()->initial_rtt_us());
-  EXPECT_EQ(1000u, server_sent_packet_manager.GetRttStats()->initial_rtt_us());
+  // The client *should* set the intitial RTT, but it's increased to 10ms.
+  EXPECT_EQ(20000u, client_sent_packet_manager.GetRttStats()->initial_rtt_us());
+  EXPECT_EQ(20000u, server_sent_packet_manager.GetRttStats()->initial_rtt_us());
 
   // Now use the negotiated limits with packet loss.
   SetPacketLossPercentage(30);
diff --git a/net/url_request/url_request_context_builder.cc b/net/url_request/url_request_context_builder.cc
index 666bd03..c3b1cad 100644
--- a/net/url_request/url_request_context_builder.cc
+++ b/net/url_request/url_request_context_builder.cc
@@ -214,7 +214,8 @@
       ftp_enabled_(false),
 #endif
       http_cache_enabled_(true),
-      throttling_enabled_(false) {
+      throttling_enabled_(false),
+      channel_id_enabled_(true) {
 }
 
 URLRequestContextBuilder::~URLRequestContextBuilder() {}
@@ -296,12 +297,14 @@
   storage->set_http_auth_handler_factory(http_auth_handler_registry_factory);
   storage->set_cookie_store(new CookieMonster(NULL, NULL));
 
-  // TODO(mmenke):  This always creates a file thread, even when it ends up
-  // not being used.  Consider lazily creating the thread.
-  storage->set_channel_id_service(
-      new ChannelIDService(
-          new DefaultChannelIDStore(NULL),
-          context->GetFileThread()->message_loop_proxy()));
+  if (channel_id_enabled_) {
+    // TODO(mmenke):  This always creates a file thread, even when it ends up
+    // not being used.  Consider lazily creating the thread.
+    storage->set_channel_id_service(
+        new ChannelIDService(
+            new DefaultChannelIDStore(NULL),
+            context->GetFileThread()->message_loop_proxy()));
+  }
 
   storage->set_transport_security_state(new net::TransportSecurityState());
   if (!transport_security_persister_path_.empty()) {
diff --git a/net/url_request/url_request_context_builder.h b/net/url_request/url_request_context_builder.h
index 9053372..233918c 100644
--- a/net/url_request/url_request_context_builder.h
+++ b/net/url_request/url_request_context_builder.h
@@ -166,6 +166,10 @@
     throttling_enabled_ = throttling_enabled;
   }
 
+  void set_channel_id_enabled(bool enable) {
+    channel_id_enabled_ = enable;
+  }
+
   URLRequestContext* Build();
 
  private:
@@ -192,6 +196,7 @@
 #endif
   bool http_cache_enabled_;
   bool throttling_enabled_;
+  bool channel_id_enabled_;
 
   HttpCacheParams http_cache_params_;
   HttpNetworkSessionParams http_network_session_params_;
diff --git a/ppapi/proxy/host_dispatcher.cc b/ppapi/proxy/host_dispatcher.cc
index 0e821db..ee7e919 100644
--- a/ppapi/proxy/host_dispatcher.cc
+++ b/ppapi/proxy/host_dispatcher.cc
@@ -224,7 +224,10 @@
     // Need to query. Cache the result so we only do this once.
     bool supported = false;
 
-    Send(new PpapiMsg_IsInterfaceSupported(iface_name, &supported));
+    bool previous_reentrancy_value = allow_plugin_reentrancy_;
+    allow_plugin_reentrancy_ = true;
+    Send(new PpapiMsg_SupportsInterface(iface_name, &supported));
+    allow_plugin_reentrancy_ = previous_reentrancy_value;
 
     std::pair<PluginSupportedMap::iterator, bool> iter_success_pair;
     iter_success_pair = plugin_supported_.insert(
@@ -271,11 +274,6 @@
   }
 }
 
-void HostDispatcher::OnHostMsgPluginSupportsInterface(
-    const std::string& interface_name) {
-  plugin_supported_[interface_name] = true;
-}
-
 // ScopedModuleReference -------------------------------------------------------
 
 ScopedModuleReference::ScopedModuleReference(Dispatcher* dispatcher)
diff --git a/ppapi/proxy/host_dispatcher.h b/ppapi/proxy/host_dispatcher.h
index 0f503ff..345f8ea 100644
--- a/ppapi/proxy/host_dispatcher.h
+++ b/ppapi/proxy/host_dispatcher.h
@@ -122,7 +122,6 @@
                               int int_log_level,
                               const std::string& source,
                               const std::string& value);
-  void OnHostMsgPluginSupportsInterface(const std::string& interface_name);
 
   void RemoveSyncMessageStatusObserver(SyncMessageStatusObserver* obs);
 
diff --git a/ppapi/proxy/plugin_dispatcher.cc b/ppapi/proxy/plugin_dispatcher.cc
index c3e96e2..ad3e7a0 100644
--- a/ppapi/proxy/plugin_dispatcher.cc
+++ b/ppapi/proxy/plugin_dispatcher.cc
@@ -223,8 +223,7 @@
     // Handle some plugin-specific control messages.
     bool handled = true;
     IPC_BEGIN_MESSAGE_MAP(PluginDispatcher, msg)
-      IPC_MESSAGE_HANDLER(PpapiMsg_IsInterfaceSupported,
-                          OnMsgIsInterfaceSupported)
+      IPC_MESSAGE_HANDLER(PpapiMsg_SupportsInterface, OnMsgSupportsInterface)
       IPC_MESSAGE_HANDLER(PpapiMsg_SetPreferences, OnMsgSetPreferences)
       IPC_MESSAGE_UNHANDLED(handled = false);
     IPC_END_MESSAGE_MAP()
@@ -298,7 +297,7 @@
   }
 }
 
-void PluginDispatcher::OnMsgIsInterfaceSupported(
+void PluginDispatcher::OnMsgSupportsInterface(
     const std::string& interface_name,
     bool* result) {
   *result = !!GetPluginInterface(interface_name);
diff --git a/ppapi/proxy/plugin_dispatcher.h b/ppapi/proxy/plugin_dispatcher.h
index 2dc526f..f8e22f6 100644
--- a/ppapi/proxy/plugin_dispatcher.h
+++ b/ppapi/proxy/plugin_dispatcher.h
@@ -175,8 +175,7 @@
   void ForceFreeAllInstances();
 
   // IPC message handlers.
-  void OnMsgIsInterfaceSupported(
-      const std::string& interface_name, bool* result);
+  void OnMsgSupportsInterface(const std::string& interface_name, bool* result);
   void OnMsgSetPreferences(const Preferences& prefs);
 
   virtual bool SendMessage(IPC::Message* msg);
diff --git a/ppapi/proxy/plugin_dispatcher_unittest.cc b/ppapi/proxy/plugin_dispatcher_unittest.cc
index 83a5cf4..821ecad 100644
--- a/ppapi/proxy/plugin_dispatcher_unittest.cc
+++ b/ppapi/proxy/plugin_dispatcher_unittest.cc
@@ -62,10 +62,10 @@
   RegisterTestInterface(PPP_INSTANCE_INTERFACE, &dummy_ppp_instance_interface);
 
   // Sending a request for a random interface should fail.
-  EXPECT_FALSE(IsInterfaceSupported("Random interface"));
+  EXPECT_FALSE(SupportsInterface("Random interface"));
 
   // Sending a request for a supported PPP interface should succeed.
-  EXPECT_TRUE(IsInterfaceSupported(PPP_INSTANCE_INTERFACE));
+  EXPECT_TRUE(SupportsInterface(PPP_INSTANCE_INTERFACE));
 }
 
 TEST_F(PluginDispatcherTest, PPBCreation) {
diff --git a/ppapi/proxy/ppapi_messages.h b/ppapi/proxy/ppapi_messages.h
index 135786c..484e6c7 100644
--- a/ppapi/proxy/ppapi_messages.h
+++ b/ppapi/proxy/ppapi_messages.h
@@ -486,13 +486,9 @@
 
 // Sent in both directions to see if the other side supports the given
 // interface.
-IPC_SYNC_MESSAGE_CONTROL1_1(PpapiMsg_IsInterfaceSupported,
+IPC_SYNC_MESSAGE_CONTROL1_1(PpapiMsg_SupportsInterface,
                             std::string /* interface_name */,
                             bool /* result */)
-// Sent by the plugin side of the proxy to inform the renderer that a given
-// plugin interface (PPP_*) is supported.
-IPC_MESSAGE_CONTROL1(PpapiHostMsg_PluginSupportsInterface,
-                     std::string /* interface_name */)
 
 IPC_MESSAGE_CONTROL1(PpapiHostMsg_LogInterfaceUsage,
                      int /* interface_hash */)
@@ -1184,9 +1180,9 @@
 IPC_SYNC_MESSAGE_ROUTED1_1(PpapiHostMsg_PPBTesting_GetLiveObjectsForInstance,
                            PP_Instance /* instance */,
                            uint32 /* result */)
-IPC_MESSAGE_ROUTED2(PpapiHostMsg_PPBTesting_SimulateInputEvent,
-                    PP_Instance /* instance */,
-                    ppapi::InputEventData /* input_event */)
+IPC_SYNC_MESSAGE_ROUTED2_0(PpapiHostMsg_PPBTesting_SimulateInputEvent,
+                           PP_Instance /* instance */,
+                           ppapi::InputEventData /* input_event */)
 IPC_SYNC_MESSAGE_ROUTED1_0(
     PpapiHostMsg_PPBTesting_SetMinimumArrayBufferSizeForShmem,
     uint32_t /* threshold */)
diff --git a/ppapi/proxy/ppapi_proxy_test.cc b/ppapi/proxy/ppapi_proxy_test.cc
index b75f4b8..2c0b136 100644
--- a/ppapi/proxy/ppapi_proxy_test.cc
+++ b/ppapi/proxy/ppapi_proxy_test.cc
@@ -122,13 +122,13 @@
   registered_interfaces_[name] = test_interface;
 }
 
-bool ProxyTestHarnessBase::IsInterfaceSupported(const char* name) {
+bool ProxyTestHarnessBase::SupportsInterface(const char* name) {
   sink().ClearMessages();
 
   // IPC doesn't actually write to this when we send a message manually
   // not actually using IPC.
   bool unused_result = false;
-  PpapiMsg_IsInterfaceSupported msg(name, &unused_result);
+  PpapiMsg_SupportsInterface msg(name, &unused_result);
   GetDispatcher()->OnMessageReceived(msg);
 
   const IPC::Message* reply_msg =
@@ -137,8 +137,8 @@
   if (!reply_msg)
     return false;
 
-  TupleTypes<PpapiMsg_IsInterfaceSupported::ReplyParam>::ValueTuple reply_data;
-  EXPECT_TRUE(PpapiMsg_IsInterfaceSupported::ReadReplyParam(
+  TupleTypes<PpapiMsg_SupportsInterface::ReplyParam>::ValueTuple reply_data;
+  EXPECT_TRUE(PpapiMsg_SupportsInterface::ReadReplyParam(
       reply_msg, &reply_data));
 
   sink().ClearMessages();
diff --git a/ppapi/proxy/ppapi_proxy_test.h b/ppapi/proxy/ppapi_proxy_test.h
index c0c11cd..ce9ec65 100644
--- a/ppapi/proxy/ppapi_proxy_test.h
+++ b/ppapi/proxy/ppapi_proxy_test.h
@@ -76,7 +76,7 @@
 
   // Sends a "supports interface" message to the current dispatcher and returns
   // true if it's supported. This is just for the convenience of tests.
-  bool IsInterfaceSupported(const char* name);
+  bool SupportsInterface(const char* name);
 
  private:
   // Destination for IPC messages sent by the test.
diff --git a/ppapi/proxy/ppb_video_decoder_proxy.cc b/ppapi/proxy/ppb_video_decoder_proxy.cc
index 8913c01..7699c84 100644
--- a/ppapi/proxy/ppb_video_decoder_proxy.cc
+++ b/ppapi/proxy/ppb_video_decoder_proxy.cc
@@ -6,7 +6,6 @@
 
 #include "base/logging.h"
 #include "gpu/command_buffer/client/gles2_implementation.h"
-#include "ppapi/c/dev/ppp_video_decoder_dev.h"
 #include "ppapi/proxy/enter_proxy.h"
 #include "ppapi/proxy/plugin_dispatcher.h"
 #include "ppapi/proxy/ppapi_messages.h"
@@ -196,14 +195,6 @@
   if (!dispatcher->preferences().is_accelerated_video_decode_enabled)
     return 0;
 
-  // We must get the plugin interface now, prior to doing Create synchronously.
-  // Otherwise, the browser will try to get the interface via a re-entrant
-  // sync message back to us, which would deadlock.
-  const std::string if_name = PPP_VIDEODECODER_DEV_INTERFACE_0_11;
-  if (!dispatcher->GetPluginInterface(if_name))
-    return 0;
-  dispatcher->Send(new PpapiHostMsg_PluginSupportsInterface(if_name));
-
   EnterResourceNoLock<PPB_Graphics3D_API> enter_context(graphics_context,
                                                         true);
   if (enter_context.failed())
diff --git a/remoting/webapp/base/html/main.css b/remoting/webapp/base/html/main.css
index d1ffd11..8d7a52c 100644
--- a/remoting/webapp/base/html/main.css
+++ b/remoting/webapp/base/html/main.css
@@ -673,11 +673,9 @@
 #session-client-plugin {
   box-shadow: 0 0 8px 0 black;
   -webkit-user-select: none;
-}
-
-#session-client-plugin {
   display: block;
   flex-shrink: 0;
+  z-index: 2;  /* Show above the dialog screen so that click-to-play works. */
 }
 
 .session-client-inactive {
diff --git a/third_party/libjingle/BUILD.gn b/third_party/libjingle/BUILD.gn
index 38f0a02..f56e81e 100644
--- a/third_party/libjingle/BUILD.gn
+++ b/third_party/libjingle/BUILD.gn
@@ -552,7 +552,6 @@
     deps = [
       ":libjingle_webrtc_common",
       "//third_party/webrtc",
-      "//third_party/webrtc/modules/audio_processing",
       "//third_party/webrtc/system_wrappers",
       "//third_party/webrtc/voice_engine",
     ]
diff --git a/third_party/libjingle/libjingle.gyp b/third_party/libjingle/libjingle.gyp
index cc48f24..f062841 100644
--- a/third_party/libjingle/libjingle.gyp
+++ b/third_party/libjingle/libjingle.gyp
@@ -598,7 +598,6 @@
             '<(libjingle_source)/talk/media/webrtc/webrtcvoiceengine.h',
           ],
           'dependencies': [
-            '<(DEPTH)/third_party/webrtc/modules/modules.gyp:audio_processing',
             '<(DEPTH)/third_party/webrtc/system_wrappers/source/system_wrappers.gyp:system_wrappers',
             '<(DEPTH)/third_party/webrtc/voice_engine/voice_engine.gyp:voice_engine',
             '<(DEPTH)/third_party/webrtc/webrtc.gyp:webrtc',
diff --git a/third_party/libjingle/overrides/init_webrtc.cc b/third_party/libjingle/overrides/init_webrtc.cc
index b160cbb..041fb20 100644
--- a/third_party/libjingle/overrides/init_webrtc.cc
+++ b/third_party/libjingle/overrides/init_webrtc.cc
@@ -12,8 +12,6 @@
 #include "base/metrics/histogram.h"
 #include "base/native_library.h"
 #include "base/path_service.h"
-#include "third_party/webrtc/common.h"
-#include "third_party/webrtc/modules/audio_processing/include/audio_processing.h"
 #include "webrtc/base/basictypes.h"
 #include "webrtc/base/logging.h"
 
@@ -82,13 +80,6 @@
   return true;
 }
 
-webrtc::AudioProcessing* CreateWebRtcAudioProcessing(
-    const webrtc::Config& config) {
-  // libpeerconnection is being compiled as a static lib, use
-  // webrtc::AudioProcessing directly.
-  return webrtc::AudioProcessing::Create(config);
-}
-
 #else  // !LIBPEERCONNECTION_LIB
 
 // When being compiled as a shared library, we need to bridge the gap between
@@ -98,7 +89,6 @@
 // Global function pointers to the factory functions in the shared library.
 CreateWebRtcMediaEngineFunction g_create_webrtc_media_engine = NULL;
 DestroyWebRtcMediaEngineFunction g_destroy_webrtc_media_engine = NULL;
-CreateWebRtcAudioProcessingFunction g_create_webrtc_audio_processing = NULL;
 
 // Returns the full or relative path to the libpeerconnection module depending
 // on what platform we're on.
@@ -175,8 +165,8 @@
       &AddTraceEvent,
       &g_create_webrtc_media_engine,
       &g_destroy_webrtc_media_engine,
-      &init_diagnostic_logging,
-      &g_create_webrtc_audio_processing);
+      &init_diagnostic_logging);
+
   if (init_ok)
     rtc::SetExtraLoggingInit(init_diagnostic_logging);
   return init_ok;
@@ -200,12 +190,4 @@
   g_destroy_webrtc_media_engine(media_engine);
 }
 
-webrtc::AudioProcessing* CreateWebRtcAudioProcessing(
-    const webrtc::Config& config) {
-  // The same as CreateWebRtcMediaEngine(), we call InitializeWebRtcModule here
-  // for convenience of tests.
-  InitializeWebRtcModule();
-  return g_create_webrtc_audio_processing(config);
-}
-
 #endif  // LIBPEERCONNECTION_LIB
diff --git a/third_party/libjingle/overrides/init_webrtc.h b/third_party/libjingle/overrides/init_webrtc.h
index c29bd71..714f9c6 100644
--- a/third_party/libjingle/overrides/init_webrtc.h
+++ b/third_party/libjingle/overrides/init_webrtc.h
@@ -23,8 +23,6 @@
 
 namespace webrtc {
 class AudioDeviceModule;
-class AudioProcessing;
-class Config;
 namespace metrics {
 class Histogram;
 }  // namespace metrics
@@ -53,9 +51,6 @@
 typedef void (*InitDiagnosticLoggingDelegateFunctionFunction)(
     void (*DelegateFunction)(const std::string&));
 
-typedef webrtc::AudioProcessing* (*CreateWebRtcAudioProcessingFunction)(
-    const webrtc::Config& config);
-
 // A typedef for the main initialize function in libpeerconnection.
 // This will initialize logging in the module with the proper arguments
 // as well as provide pointers back to a couple webrtc factory functions.
@@ -77,8 +72,7 @@
     webrtc::AddTraceEventPtr trace_add_trace_event,
     CreateWebRtcMediaEngineFunction* create_media_engine,
     DestroyWebRtcMediaEngineFunction* destroy_media_engine,
-    InitDiagnosticLoggingDelegateFunctionFunction* init_diagnostic_logging,
-    CreateWebRtcAudioProcessingFunction* create_audio_processing);
+    InitDiagnosticLoggingDelegateFunctionFunction* init_diagnostic_logging);
 
 #if !defined(LIBPEERCONNECTION_IMPLEMENTATION)
 // Load and initialize the shared WebRTC module (libpeerconnection).
@@ -87,11 +81,6 @@
 // If not called explicitly, this function will still be called from the main
 // CreateWebRtcMediaEngine factory function the first time it is called.
 bool InitializeWebRtcModule();
-
-// Return a webrtc::AudioProcessing object.
-webrtc::AudioProcessing* CreateWebRtcAudioProcessing(
-    const webrtc::Config& config);
-
 #endif
 
 #endif // THIRD_PARTY_LIBJINGLE_OVERRIDES_INIT_WEBRTC_H_
diff --git a/third_party/libjingle/overrides/initialize_module.cc b/third_party/libjingle/overrides/initialize_module.cc
index 1250cfb..09afbc2 100644
--- a/third_party/libjingle/overrides/initialize_module.cc
+++ b/third_party/libjingle/overrides/initialize_module.cc
@@ -8,7 +8,6 @@
 #include "base/logging.h"
 #include "init_webrtc.h"
 #include "talk/media/webrtc/webrtcmediaengine.h"
-#include "third_party/webrtc/modules/audio_processing/include/audio_processing.h"
 #include "webrtc/base/basictypes.h"
 #include "webrtc/base/logging.h"
 
@@ -99,9 +98,7 @@
                       CreateWebRtcMediaEngineFunction* create_media_engine,
                       DestroyWebRtcMediaEngineFunction* destroy_media_engine,
                       InitDiagnosticLoggingDelegateFunctionFunction*
-                          init_diagnostic_logging,
-                      CreateWebRtcAudioProcessingFunction*
-                          create_audio_processing) {
+                          init_diagnostic_logging) {
 #if !defined(OS_MACOSX) && !defined(OS_ANDROID)
   g_alloc = alloc;
   g_dealloc = dealloc;
@@ -115,7 +112,6 @@
   *create_media_engine = &CreateWebRtcMediaEngine;
   *destroy_media_engine = &DestroyWebRtcMediaEngine;
   *init_diagnostic_logging = &rtc::InitDiagnosticLoggingDelegateFunction;
-  *create_audio_processing = &webrtc::AudioProcessing::Create;
 
   if (CommandLine::Init(0, NULL)) {
 #if !defined(OS_WIN)
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index e077c0a..915dec4 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -17334,6 +17334,9 @@
 
 <histogram name="Net.QuicClientHelloServerConfigState"
     enum="QuicServerConfigState">
+  <obsolete>
+    Deprecated as of 11/2014. Replaced by Net.QuicInchoateClientHelloReason.
+  </obsolete>
   <owner>rtenneti@chromium.org</owner>
   <summary>
     The reason (the state of the server config) for sending inchoate ClientHello
@@ -17399,6 +17402,15 @@
   </summary>
 </histogram>
 
+<histogram name="Net.QuicInchoateClientHelloReason"
+    enum="QuicServerConfigState">
+  <owner>rtenneti@chromium.org</owner>
+  <summary>
+    The reason (the state of the server config) for sending inchoate ClientHello
+    to the server.
+  </summary>
+</histogram>
+
 <histogram name="Net.QuicNumSentClientHellos">
   <owner>rch@chromium.org</owner>
   <summary>The number of client hello messages sent.</summary>
@@ -17448,6 +17460,15 @@
   <summary>Time spent to load QUIC server information from disk cache.</summary>
 </histogram>
 
+<histogram name="Net.QuicServerInfo.DiskCacheState"
+    enum="QuicServerConfigState">
+  <owner>rtenneti@chromium.org</owner>
+  <summary>
+    The state of the QUIC server information when it's loaded from the disk
+    cache.
+  </summary>
+</histogram>
+
 <histogram name="Net.QuicServerInfo.DiskCacheWaitForDataReadyTime"
     units="milliseconds">
   <owner>rtenneti@chromium.org</owner>
@@ -17456,6 +17477,16 @@
   </summary>
 </histogram>
 
+<histogram name="Net.QuicServerInfo.ExpectConfigMissingFromDiskCache"
+    enum="BooleanMissingFromDiskCache">
+  <owner>rtenneti@chromium.org</owner>
+  <summary>
+    The number of times AlternateProtocolMap supports QUIC, but there is no QUIC
+    server information in the disk cache. This is recorded whenever QUIC server
+    information is loaded from the disk cache.
+  </summary>
+</histogram>
+
 <histogram name="Net.QuicSession.21CumulativePacketsReceived"
     units="Received in Ranges">
   <owner>rch@chromium.org</owner>
@@ -25112,6 +25143,32 @@
   </summary>
 </histogram>
 
+<histogram name="Plugin.Flash.ClickSize.AspectRatio">
+  <owner>tommycli@chromium.org</owner>
+  <summary>
+    Aspect ratio of Flash plugins users click at least once. The aspect ratio is
+    multiplied by 100 and stored as a rounded integer.
+  </summary>
+</histogram>
+
+<histogram name="Plugin.Flash.ClickSize.Height" units="pixels">
+  <owner>tommycli@chromium.org</owner>
+  <summary>Height of Flash plugins users click at least once.</summary>
+</histogram>
+
+<histogram name="Plugin.Flash.ClickSize.Width" units="pixels">
+  <owner>tommycli@chromium.org</owner>
+  <summary>Width of Flash plugins users click at least once.</summary>
+</histogram>
+
+<histogram name="Plugin.Flash.TinyContentSize" enum="FlashTinyContentSize">
+  <owner>tommycli@chromium.org</owner>
+  <summary>
+    Collects the sizes of all loaded Flash plugin instances. This is for
+    determining the prevalence of tiny flash plugin instances.
+  </summary>
+</histogram>
+
 <histogram name="Plugin.FlashNavigateUsage" enum="FlashNavigateUsageType">
   <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
   <summary>Record usage of PPB_Flash.Navigate() Pepper API.</summary>
@@ -25123,7 +25180,7 @@
   <summary>Collects Flash usage data.</summary>
 </histogram>
 
-<histogram name="Plugin.PowerSaverPeripheralHeuristic"
+<histogram name="Plugin.PowerSaver.PeripheralHeuristic"
     enum="PluginPowerSaverPeripheralHeuristicDecision">
   <owner>tommycli@chromium.org</owner>
   <summary>
@@ -25135,7 +25192,7 @@
   </summary>
 </histogram>
 
-<histogram name="Plugin.PowerSaverUnthrottle"
+<histogram name="Plugin.PowerSaver.Unthrottle"
     enum="PluginPowerSaverUnthrottleMethod">
   <owner>tommycli@chromium.org</owner>
   <summary>
@@ -41293,6 +41350,11 @@
   <int value="1" label="Migrated"/>
 </enum>
 
+<enum name="BooleanMissingFromDiskCache" type="int">
+  <int value="0" label="Has data in disk cache"/>
+  <int value="1" label="Missing data in disk cache"/>
+</enum>
+
 <enum name="BooleanOrphan" type="int">
   <int value="0" label="Non-orphan"/>
   <int value="1" label="Orphan"/>
@@ -45907,6 +45969,13 @@
   <int value="15" label="The total number of navigate requests."/>
 </enum>
 
+<enum name="FlashTinyContentSize" type="int">
+  <int value="0" label="1x1 or smaller"/>
+  <int value="1" label="5x5 or smaller"/>
+  <int value="2" label="10x10 or smaller"/>
+  <int value="3" label="Large"/>
+</enum>
+
 <enum name="FlashUsage" type="int">
   <int value="0" label="Started NPAPI Flash at least once">
     Number of browser processes that have started at least one NPAPI Flash
@@ -52557,6 +52626,7 @@
   <int value="2" label="SERVER_CONFIG_CORRUPTED"/>
   <int value="3" label="SERVER_CONFIG_EXPIRED"/>
   <int value="4" label="SERVER_CONFIG_INVALID_EXPIRY"/>
+  <int value="5" label="SERVER_CONFIG_VALID"/>
 </enum>
 
 <enum name="QuicSessionErrorCodes" type="int">
diff --git a/ui/android/java/src/org/chromium/ui/DropdownPopupWindow.java b/ui/android/java/src/org/chromium/ui/DropdownPopupWindow.java
index b80de90..c1056b0 100644
--- a/ui/android/java/src/org/chromium/ui/DropdownPopupWindow.java
+++ b/ui/android/java/src/org/chromium/ui/DropdownPopupWindow.java
@@ -74,6 +74,9 @@
         });
 
         setAnchorView(mAnchorView);
+        Rect originalPadding = new Rect();
+        getBackground().getPadding(originalPadding);
+        setVerticalOffset(-originalPadding.top);
     }
 
     /**
@@ -111,8 +114,8 @@
         setInputMethodMode(INPUT_METHOD_NEEDED);
 
         int contentWidth = measureContentWidth();
-        float contentWidthInDip = contentWidth /
-                mContext.getResources().getDisplayMetrics().density;
+        float contentWidthInDip = contentWidth
+                / mContext.getResources().getDisplayMetrics().density;
         if (contentWidthInDip > mAnchorWidth) {
             setContentWidth(contentWidth);
             final Rect displayFrame = new Rect();
diff --git a/ui/base/win/shell.cc b/ui/base/win/shell.cc
index ee656ed..91eaf93 100644
--- a/ui/base/win/shell.cc
+++ b/ui/base/win/shell.cc
@@ -10,6 +10,7 @@
 #include <shellapi.h>
 
 #include "base/command_line.h"
+#include "base/debug/alias.h"
 #include "base/files/file_path.h"
 #include "base/native_library.h"
 #include "base/strings/string_util.h"
@@ -146,7 +147,9 @@
       switches::kDisableDwmComposition))
     return false;
 
-  if (base::win::GetVersion() < base::win::VERSION_VISTA)
+  base::win::Version version = base::win::GetVersion();
+  base::debug::Alias(&version);  // TODO(scottmg): http://crbug.com/431549.
+  if (version < base::win::VERSION_VISTA)
     return false;
   // If composition is not enabled, we behave like on XP.
   BOOL enabled = FALSE;
diff --git a/ui/file_manager/file_manager/foreground/js/file_transfer_controller.js b/ui/file_manager/file_manager/foreground/js/file_transfer_controller.js
index 78d4004..cb0c6b1 100644
--- a/ui/file_manager/file_manager/foreground/js/file_transfer_controller.js
+++ b/ui/file_manager/file_manager/foreground/js/file_transfer_controller.js
@@ -200,7 +200,10 @@
     var externalFileUrl;
     for (var i = 0; i < this.selectedEntries_.length; i++) {
       var url = this.selectedEntries_[i].toURL();
-      dataTransfer.items.add(this.selectedAsyncData_[url].file);
+      if (!this.selectedAsyncData_[url])
+        continue;
+      if (this.selectedAsyncData_[url].file)
+        dataTransfer.items.add(this.selectedAsyncData_[url].file);
       if (!externalFileUrl)
         externalFileUrl = this.selectedAsyncData_[url].externalFileUrl;
     }
diff --git a/ui/file_manager/file_manager/foreground/js/ui/file_manager_ui.js b/ui/file_manager/file_manager/foreground/js/ui/file_manager_ui.js
index edb3dc2..0df02c3 100644
--- a/ui/file_manager/file_manager/foreground/js/ui/file_manager_ui.js
+++ b/ui/file_manager/file_manager/foreground/js/ui/file_manager_ui.js
@@ -209,7 +209,10 @@
  */
 FileManagerUI.prototype.relayout = function() {
   this.locationLine.truncate();
-  this.listContainer.currentView.relayout();
+  if (this.listContainer.currentListType !==
+      ListContainer.ListType.UNINITIALIZED) {
+    this.listContainer.currentView.relayout();
+  }
 };
 
 /**
@@ -221,13 +224,13 @@
 
   switch (listType) {
     case ListContainer.ListType.DETAIL:
-      this.toggleViewButton.classList.add('table');
-      this.toggleViewButton.classList.remove('grid');
+      this.toggleViewButton.classList.remove('table');
+      this.toggleViewButton.classList.add('grid');
       break;
 
     case ListContainer.ListType.THUMBNAIL:
-      this.toggleViewButton.classList.add('grid');
-      this.toggleViewButton.classList.remove('table');
+      this.toggleViewButton.classList.remove('grid');
+      this.toggleViewButton.classList.add('table');
       break;
 
     default:
diff --git a/ui/gfx/render_text_harfbuzz.cc b/ui/gfx/render_text_harfbuzz.cc
index 1aba788..768be0b 100644
--- a/ui/gfx/render_text_harfbuzz.cc
+++ b/ui/gfx/render_text_harfbuzz.cc
@@ -1206,11 +1206,9 @@
     const SkScalar y_offset = SkFixedToScalar(hb_positions[i].y_offset);
     run->positions[i].set(run->width + x_offset, -y_offset);
     run->width += SkFixedToScalar(hb_positions[i].x_advance);
-#if defined(OS_LINUX)
-    // Match Pango's glyph rounding logic on Linux.
+    // Round run widths if subpixel positioning is off to match native behavior.
     if (!run->render_params.subpixel_positioning)
       run->width = std::floor(run->width + 0.5f);
-#endif
   }
 
   hb_buffer_destroy(buffer);
diff --git a/ui/login/account_picker/user_pod_row.css b/ui/login/account_picker/user_pod_row.css
index 246c1fb..780fec9 100644
--- a/ui/login/account_picker/user_pod_row.css
+++ b/ui/login/account_picker/user_pod_row.css
@@ -259,6 +259,21 @@
   background-image: url('chrome://theme/IDR_EASY_UNLOCK_LOCKED_PRESSED');
 }
 
+.custom-icon-locked-to-be-activated {
+  background-image:
+      url('chrome://theme/IDR_EASY_UNLOCK_LOCKED_TO_BE_ACTIVATED');
+}
+
+.custom-icon-locked-to-be-activated.icon-with-tooltip:hover {
+  background-image:
+      url('chrome://theme/IDR_EASY_UNLOCK_LOCKED_TO_BE_ACTIVATED_HOVER');
+}
+
+.custom-icon-locked-to-be-activated.interactive-custom-icon:active {
+  background-image:
+      url('chrome://theme/IDR_EASY_UNLOCK_LOCKED_TO_BE_ACTIVATED_PRESSED');
+}
+
 .custom-icon-locked-with-proximity-hint {
   background-image:
       url('chrome://theme/IDR_EASY_UNLOCK_LOCKED_WITH_PROXIMITY_HINT');
@@ -299,6 +314,12 @@
     url('chrome://theme/IDR_EASY_UNLOCK_LOCKED')
     url('chrome://theme/IDR_EASY_UNLOCK_LOCKED_HOVER')
     url('chrome://theme/IDR_EASY_UNLOCK_LOCKED_PRESSED')
+    url('chrome://theme/IDR_EASY_UNLOCK_LOCKED_TO_BE_ACTIVATED')
+    url('chrome://theme/IDR_EASY_UNLOCK_LOCKED_TO_BE_ACTIVATED_HOVER')
+    url('chrome://theme/IDR_EASY_UNLOCK_LOCKED_TO_BE_ACTIVATED_PRESSED')
+    url('chrome://theme/IDR_EASY_UNLOCK_LOCKED_WITH_PROXIMITY_HINT')
+    url('chrome://theme/IDR_EASY_UNLOCK_LOCKED_WITH_PROXIMITY_HINT_HOVER')
+    url('chrome://theme/IDR_EASY_UNLOCK_LOCKED_WITH_PROXIMITY_HINT_PRESSED')
     url('chrome://theme/IDR_EASY_UNLOCK_UNLOCKED')
     url('chrome://theme/IDR_EASY_UNLOCK_UNLOCKED_HOVER')
     url('chrome://theme/IDR_EASY_UNLOCK_UNLOCKED_PRESSED');
diff --git a/ui/login/account_picker/user_pod_row.js b/ui/login/account_picker/user_pod_row.js
index ec32f89..f4adf57 100644
--- a/ui/login/account_picker/user_pod_row.js
+++ b/ui/login/account_picker/user_pod_row.js
@@ -191,6 +191,8 @@
    */
   UserPodCustomIcon.ICONS = [
     {id: 'locked', class: 'custom-icon-locked'},
+    {id: 'locked-to-be-activated',
+     class: 'custom-icon-locked-to-be-activated'},
     {id: 'locked-with-proximity-hint',
      class: 'custom-icon-locked-with-proximity-hint'},
     {id: 'unlocked', class: 'custom-icon-unlocked'},
diff --git a/ui/message_center/views/message_center_view.cc b/ui/message_center/views/message_center_view.cc
index b9b6f16..983febf 100644
--- a/ui/message_center/views/message_center_view.cc
+++ b/ui/message_center/views/message_center_view.cc
@@ -54,13 +54,6 @@
 
 const int kDefaultAnimationDurationMs = 120;
 const int kDefaultFrameRateHz = 60;
-
-void SetViewHierarchyEnabled(views::View* view, bool enabled) {
-  for (int i = 0; i < view->child_count(); i++)
-    SetViewHierarchyEnabled(view->child_at(i), enabled);
-  view->SetEnabled(enabled);
-}
-
 }  // namespace
 
 class NoNotificationMessageView : public views::View {
@@ -692,13 +685,13 @@
   if (is_closing_)
     return;
 
-  SetViewHierarchyEnabled(scroller_, false);
+  scroller_->SetEnabled(false);
   button_bar_->SetAllButtonsEnabled(false);
   message_list_view_->ClearAllNotifications(scroller_->GetVisibleRect());
 }
 
 void MessageCenterView::OnAllNotificationsCleared() {
-  SetViewHierarchyEnabled(scroller_, true);
+  scroller_->SetEnabled(true);
   button_bar_->SetAllButtonsEnabled(true);
   button_bar_->SetCloseAllButtonEnabled(false);
   message_center_->RemoveAllVisibleNotifications(true);  // Action by user.
@@ -870,13 +863,12 @@
         next_focused_view = message_list_view_->child_at(index - 1);
 
       if (next_focused_view) {
-        if (view->IsCloseButtonFocused()) {
+        if (view->IsCloseButtonFocused())
           // Safe cast since all views in MessageListView are MessageViews.
           static_cast<MessageView*>(
               next_focused_view)->RequestFocusOnCloseButton();
-        } else {
+        else
           next_focused_view->RequestFocus();
-        }
       }
     }
   }
diff --git a/ui/resources/default_100_percent/common/easy_unlock_locked_to_be_activated.png b/ui/resources/default_100_percent/common/easy_unlock_locked_to_be_activated.png
new file mode 100644
index 0000000..73a83c0
--- /dev/null
+++ b/ui/resources/default_100_percent/common/easy_unlock_locked_to_be_activated.png
Binary files differ
diff --git a/ui/resources/default_100_percent/common/easy_unlock_locked_to_be_activated_hover.png b/ui/resources/default_100_percent/common/easy_unlock_locked_to_be_activated_hover.png
new file mode 100644
index 0000000..45abc6e
--- /dev/null
+++ b/ui/resources/default_100_percent/common/easy_unlock_locked_to_be_activated_hover.png
Binary files differ
diff --git a/ui/resources/default_100_percent/common/easy_unlock_locked_to_be_activated_pressed.png b/ui/resources/default_100_percent/common/easy_unlock_locked_to_be_activated_pressed.png
new file mode 100644
index 0000000..a41cbeb
--- /dev/null
+++ b/ui/resources/default_100_percent/common/easy_unlock_locked_to_be_activated_pressed.png
Binary files differ
diff --git a/ui/resources/default_200_percent/common/easy_unlock_locked_to_be_activated.png b/ui/resources/default_200_percent/common/easy_unlock_locked_to_be_activated.png
new file mode 100644
index 0000000..37c36b9
--- /dev/null
+++ b/ui/resources/default_200_percent/common/easy_unlock_locked_to_be_activated.png
Binary files differ
diff --git a/ui/resources/default_200_percent/common/easy_unlock_locked_to_be_activated_hover.png b/ui/resources/default_200_percent/common/easy_unlock_locked_to_be_activated_hover.png
new file mode 100644
index 0000000..4b488c2
--- /dev/null
+++ b/ui/resources/default_200_percent/common/easy_unlock_locked_to_be_activated_hover.png
Binary files differ
diff --git a/ui/resources/default_200_percent/common/easy_unlock_locked_to_be_activated_pressed.png b/ui/resources/default_200_percent/common/easy_unlock_locked_to_be_activated_pressed.png
new file mode 100644
index 0000000..dd7de16
--- /dev/null
+++ b/ui/resources/default_200_percent/common/easy_unlock_locked_to_be_activated_pressed.png
Binary files differ
diff --git a/ui/resources/ui_resources.grd b/ui/resources/ui_resources.grd
index 7b33c23..cadb517 100644
--- a/ui/resources/ui_resources.grd
+++ b/ui/resources/ui_resources.grd
@@ -270,6 +270,9 @@
       <structure type="chrome_scaled_image" name="IDR_EASY_UNLOCK_LOCKED" file="common/easy_unlock_locked.png" />
       <structure type="chrome_scaled_image" name="IDR_EASY_UNLOCK_LOCKED_HOVER" file="common/easy_unlock_locked_hover.png" />
       <structure type="chrome_scaled_image" name="IDR_EASY_UNLOCK_LOCKED_PRESSED" file="common/easy_unlock_locked_pressed.png" />
+      <structure type="chrome_scaled_image" name="IDR_EASY_UNLOCK_LOCKED_TO_BE_ACTIVATED" file="common/easy_unlock_locked_to_be_activated.png" />
+      <structure type="chrome_scaled_image" name="IDR_EASY_UNLOCK_LOCKED_TO_BE_ACTIVATED_HOVER" file="common/easy_unlock_locked_to_be_activated_hover.png" />
+      <structure type="chrome_scaled_image" name="IDR_EASY_UNLOCK_LOCKED_TO_BE_ACTIVATED_PRESSED" file="common/easy_unlock_locked_to_be_activated_pressed.png" />
       <structure type="chrome_scaled_image" name="IDR_EASY_UNLOCK_LOCKED_WITH_PROXIMITY_HINT" file="common/easy_unlock_locked_with_proximity_hint.png" />
       <structure type="chrome_scaled_image" name="IDR_EASY_UNLOCK_LOCKED_WITH_PROXIMITY_HINT_HOVER" file="common/easy_unlock_locked_with_proximity_hint_hover.png" />
       <structure type="chrome_scaled_image" name="IDR_EASY_UNLOCK_LOCKED_WITH_PROXIMITY_HINT_PRESSED" file="common/easy_unlock_locked_with_proximity_hint_pressed.png" />
diff --git a/ui/resources/ui_resources.target.darwin-arm.mk b/ui/resources/ui_resources.target.darwin-arm.mk
index 884c2db..6b7e62c 100644
--- a/ui/resources/ui_resources.target.darwin-arm.mk
+++ b/ui/resources/ui_resources.target.darwin-arm.mk
@@ -20,7 +20,7 @@
 $(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_64.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_to_be_activated.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_to_be_activated_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_to_be_activated_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_to_be_activated.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_to_be_activated_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_to_be_activated_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_64.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from ui_resources.grd ($@)"
 	$(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/resources/grit $(gyp_shared_intermediate_dir)/ui/resources; python ../../tools/grit/grit.py -i ui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" --no-output-all-resource-defines -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc -D enable_notifications
 
diff --git a/ui/resources/ui_resources.target.darwin-arm64.mk b/ui/resources/ui_resources.target.darwin-arm64.mk
index 884c2db..6b7e62c 100644
--- a/ui/resources/ui_resources.target.darwin-arm64.mk
+++ b/ui/resources/ui_resources.target.darwin-arm64.mk
@@ -20,7 +20,7 @@
 $(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_64.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_to_be_activated.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_to_be_activated_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_to_be_activated_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_to_be_activated.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_to_be_activated_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_to_be_activated_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_64.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from ui_resources.grd ($@)"
 	$(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/resources/grit $(gyp_shared_intermediate_dir)/ui/resources; python ../../tools/grit/grit.py -i ui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" --no-output-all-resource-defines -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc -D enable_notifications
 
diff --git a/ui/resources/ui_resources.target.darwin-mips.mk b/ui/resources/ui_resources.target.darwin-mips.mk
index 884c2db..6b7e62c 100644
--- a/ui/resources/ui_resources.target.darwin-mips.mk
+++ b/ui/resources/ui_resources.target.darwin-mips.mk
@@ -20,7 +20,7 @@
 $(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_64.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_to_be_activated.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_to_be_activated_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_to_be_activated_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_to_be_activated.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_to_be_activated_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_to_be_activated_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_64.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from ui_resources.grd ($@)"
 	$(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/resources/grit $(gyp_shared_intermediate_dir)/ui/resources; python ../../tools/grit/grit.py -i ui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" --no-output-all-resource-defines -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc -D enable_notifications
 
diff --git a/ui/resources/ui_resources.target.darwin-mips64.mk b/ui/resources/ui_resources.target.darwin-mips64.mk
index 884c2db..6b7e62c 100644
--- a/ui/resources/ui_resources.target.darwin-mips64.mk
+++ b/ui/resources/ui_resources.target.darwin-mips64.mk
@@ -20,7 +20,7 @@
 $(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_64.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_to_be_activated.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_to_be_activated_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_to_be_activated_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_to_be_activated.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_to_be_activated_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_to_be_activated_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_64.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from ui_resources.grd ($@)"
 	$(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/resources/grit $(gyp_shared_intermediate_dir)/ui/resources; python ../../tools/grit/grit.py -i ui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" --no-output-all-resource-defines -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc -D enable_notifications
 
diff --git a/ui/resources/ui_resources.target.darwin-x86.mk b/ui/resources/ui_resources.target.darwin-x86.mk
index 884c2db..6b7e62c 100644
--- a/ui/resources/ui_resources.target.darwin-x86.mk
+++ b/ui/resources/ui_resources.target.darwin-x86.mk
@@ -20,7 +20,7 @@
 $(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_64.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_to_be_activated.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_to_be_activated_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_to_be_activated_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_to_be_activated.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_to_be_activated_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_to_be_activated_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_64.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from ui_resources.grd ($@)"
 	$(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/resources/grit $(gyp_shared_intermediate_dir)/ui/resources; python ../../tools/grit/grit.py -i ui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" --no-output-all-resource-defines -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc -D enable_notifications
 
diff --git a/ui/resources/ui_resources.target.darwin-x86_64.mk b/ui/resources/ui_resources.target.darwin-x86_64.mk
index 884c2db..6b7e62c 100644
--- a/ui/resources/ui_resources.target.darwin-x86_64.mk
+++ b/ui/resources/ui_resources.target.darwin-x86_64.mk
@@ -20,7 +20,7 @@
 $(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_64.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_to_be_activated.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_to_be_activated_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_to_be_activated_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_to_be_activated.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_to_be_activated_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_to_be_activated_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_64.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from ui_resources.grd ($@)"
 	$(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/resources/grit $(gyp_shared_intermediate_dir)/ui/resources; python ../../tools/grit/grit.py -i ui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" --no-output-all-resource-defines -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc -D enable_notifications
 
diff --git a/ui/resources/ui_resources.target.linux-arm.mk b/ui/resources/ui_resources.target.linux-arm.mk
index 884c2db..6b7e62c 100644
--- a/ui/resources/ui_resources.target.linux-arm.mk
+++ b/ui/resources/ui_resources.target.linux-arm.mk
@@ -20,7 +20,7 @@
 $(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_64.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_to_be_activated.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_to_be_activated_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_to_be_activated_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_to_be_activated.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_to_be_activated_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_to_be_activated_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_64.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from ui_resources.grd ($@)"
 	$(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/resources/grit $(gyp_shared_intermediate_dir)/ui/resources; python ../../tools/grit/grit.py -i ui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" --no-output-all-resource-defines -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc -D enable_notifications
 
diff --git a/ui/resources/ui_resources.target.linux-arm64.mk b/ui/resources/ui_resources.target.linux-arm64.mk
index 884c2db..6b7e62c 100644
--- a/ui/resources/ui_resources.target.linux-arm64.mk
+++ b/ui/resources/ui_resources.target.linux-arm64.mk
@@ -20,7 +20,7 @@
 $(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_64.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_to_be_activated.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_to_be_activated_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_to_be_activated_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_to_be_activated.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_to_be_activated_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_to_be_activated_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_64.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from ui_resources.grd ($@)"
 	$(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/resources/grit $(gyp_shared_intermediate_dir)/ui/resources; python ../../tools/grit/grit.py -i ui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" --no-output-all-resource-defines -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc -D enable_notifications
 
diff --git a/ui/resources/ui_resources.target.linux-mips.mk b/ui/resources/ui_resources.target.linux-mips.mk
index 884c2db..6b7e62c 100644
--- a/ui/resources/ui_resources.target.linux-mips.mk
+++ b/ui/resources/ui_resources.target.linux-mips.mk
@@ -20,7 +20,7 @@
 $(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_64.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_to_be_activated.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_to_be_activated_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_to_be_activated_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_to_be_activated.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_to_be_activated_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_to_be_activated_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_64.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from ui_resources.grd ($@)"
 	$(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/resources/grit $(gyp_shared_intermediate_dir)/ui/resources; python ../../tools/grit/grit.py -i ui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" --no-output-all-resource-defines -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc -D enable_notifications
 
diff --git a/ui/resources/ui_resources.target.linux-mips64.mk b/ui/resources/ui_resources.target.linux-mips64.mk
index 884c2db..6b7e62c 100644
--- a/ui/resources/ui_resources.target.linux-mips64.mk
+++ b/ui/resources/ui_resources.target.linux-mips64.mk
@@ -20,7 +20,7 @@
 $(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_64.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_to_be_activated.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_to_be_activated_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_to_be_activated_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_to_be_activated.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_to_be_activated_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_to_be_activated_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_64.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from ui_resources.grd ($@)"
 	$(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/resources/grit $(gyp_shared_intermediate_dir)/ui/resources; python ../../tools/grit/grit.py -i ui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" --no-output-all-resource-defines -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc -D enable_notifications
 
diff --git a/ui/resources/ui_resources.target.linux-x86.mk b/ui/resources/ui_resources.target.linux-x86.mk
index 884c2db..6b7e62c 100644
--- a/ui/resources/ui_resources.target.linux-x86.mk
+++ b/ui/resources/ui_resources.target.linux-x86.mk
@@ -20,7 +20,7 @@
 $(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_64.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_to_be_activated.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_to_be_activated_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_to_be_activated_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_to_be_activated.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_to_be_activated_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_to_be_activated_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_64.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from ui_resources.grd ($@)"
 	$(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/resources/grit $(gyp_shared_intermediate_dir)/ui/resources; python ../../tools/grit/grit.py -i ui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" --no-output-all-resource-defines -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc -D enable_notifications
 
diff --git a/ui/resources/ui_resources.target.linux-x86_64.mk b/ui/resources/ui_resources.target.linux-x86_64.mk
index 884c2db..6b7e62c 100644
--- a/ui/resources/ui_resources.target.linux-x86_64.mk
+++ b/ui/resources/ui_resources.target.linux-x86_64.mk
@@ -20,7 +20,7 @@
 $(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_64.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/ui/resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_to_be_activated.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_to_be_activated_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_to_be_activated_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/back_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/close_3_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_hardlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_to_be_activated.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_to_be_activated_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_to_be_activated_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_locked_with_proximity_hint_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_spinner.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/easy_unlock_unlocked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/forward_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/menu_check.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/ntp_white_google_logo.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/disable_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_300_percent/common/default_favicon_64.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from ui_resources.grd ($@)"
 	$(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/resources/grit $(gyp_shared_intermediate_dir)/ui/resources; python ../../tools/grit/grit.py -i ui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" --no-output-all-resource-defines -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc -D enable_notifications
 
diff --git a/ui/views/controls/label.cc b/ui/views/controls/label.cc
index 1078d0b..9d71a98 100644
--- a/ui/views/controls/label.cc
+++ b/ui/views/controls/label.cc
@@ -437,7 +437,10 @@
       NOTREACHED();
       break;
   }
-  text_size.set_height(available.height());
+  if (!multi_line_)
+    text_size.set_height(available.height());
+  // Support vertical centering of multi-line labels: http://crbug.com/429595
+  origin.Offset(0, std::max(0, (available.height() - text_size.height())) / 2);
   return gfx::Rect(origin, text_size);
 }
 
diff --git a/ui/views/controls/label_unittest.cc b/ui/views/controls/label_unittest.cc
index 076ec46..3a99557 100644
--- a/ui/views/controls/label_unittest.cc
+++ b/ui/views/controls/label_unittest.cc
@@ -523,9 +523,9 @@
   label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
   EXPECT_EQ(label.text(), paint_text);
   EXPECT_EQ(extra.width() / 2, text_bounds.x());
-  EXPECT_EQ(0, text_bounds.y());
+  EXPECT_EQ(extra.height() / 2, text_bounds.y());
   EXPECT_GT(text_bounds.width(), kMinTextDimension);
-  EXPECT_EQ(text_bounds.height(), label.height());
+  EXPECT_GT(text_bounds.height(), kMinTextDimension);
   int expected_flags = gfx::Canvas::MULTI_LINE |
                        gfx::Canvas::TEXT_ALIGN_CENTER |
                        gfx::Canvas::FORCE_LTR_DIRECTIONALITY;
@@ -541,9 +541,9 @@
   label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
   EXPECT_EQ(label.text(), paint_text);
   EXPECT_EQ(0, text_bounds.x());
-  EXPECT_EQ(0, text_bounds.y());
+  EXPECT_EQ(extra.height() / 2, text_bounds.y());
   EXPECT_GT(text_bounds.width(), kMinTextDimension);
-  EXPECT_EQ(text_bounds.height(), label.height());
+  EXPECT_GT(text_bounds.height(), kMinTextDimension);
   expected_flags = gfx::Canvas::MULTI_LINE |
                    gfx::Canvas::TEXT_ALIGN_LEFT |
                    gfx::Canvas::FORCE_LTR_DIRECTIONALITY;
@@ -558,9 +558,9 @@
   label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
   EXPECT_EQ(label.text(), paint_text);
   EXPECT_EQ(extra.width(), text_bounds.x());
-  EXPECT_EQ(0, text_bounds.y());
+  EXPECT_EQ(extra.height() / 2, text_bounds.y());
   EXPECT_GT(text_bounds.width(), kMinTextDimension);
-  EXPECT_EQ(text_bounds.height(), label.height());
+  EXPECT_GT(text_bounds.height(), kMinTextDimension);
   expected_flags = gfx::Canvas::MULTI_LINE |
                    gfx::Canvas::TEXT_ALIGN_RIGHT |
                    gfx::Canvas::FORCE_LTR_DIRECTIONALITY;
@@ -584,7 +584,7 @@
   label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
   EXPECT_EQ(label.text(), paint_text);
   EXPECT_EQ(border.left() + extra.width() / 2, text_bounds.x());
-  EXPECT_EQ(border.top(), text_bounds.y());
+  EXPECT_EQ(border.top() + extra.height() / 2, text_bounds.y());
   EXPECT_EQ(center_bounds.width(), text_bounds.width());
   EXPECT_EQ(center_bounds.height(), text_bounds.height());
   expected_flags = gfx::Canvas::MULTI_LINE |
@@ -601,7 +601,7 @@
   label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
   EXPECT_EQ(label.text(), paint_text);
   EXPECT_EQ(border.left(), text_bounds.x());
-  EXPECT_EQ(border.top(), text_bounds.y());
+  EXPECT_EQ(border.top() + extra.height() / 2, text_bounds.y());
   EXPECT_EQ(center_bounds.width(), text_bounds.width());
   EXPECT_EQ(center_bounds.height(), text_bounds.height());
   expected_flags = gfx::Canvas::MULTI_LINE |
@@ -618,7 +618,7 @@
   label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
   EXPECT_EQ(label.text(), paint_text);
   EXPECT_EQ(extra.width() + border.left(), text_bounds.x());
-  EXPECT_EQ(border.top(), text_bounds.y());
+  EXPECT_EQ(border.top() + extra.height() / 2, text_bounds.y());
   EXPECT_EQ(center_bounds.width(), text_bounds.width());
   EXPECT_EQ(center_bounds.height(), text_bounds.height());
   expected_flags = gfx::Canvas::MULTI_LINE |
@@ -785,9 +785,9 @@
   label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
   EXPECT_EQ(label.text(), paint_text);
   EXPECT_EQ(extra.width() / 2, text_bounds.x());
-  EXPECT_EQ(0, text_bounds.y());
+  EXPECT_EQ(extra.height() / 2, text_bounds.y());
   EXPECT_GT(text_bounds.width(), kMinTextDimension);
-  EXPECT_EQ(text_bounds.height(), label.height());
+  EXPECT_GT(text_bounds.height(), kMinTextDimension);
   EXPECT_TRUE(gfx::Canvas::MULTI_LINE & flags);
   EXPECT_TRUE(gfx::Canvas::TEXT_ALIGN_CENTER & flags);
 #if !defined(OS_WIN)
@@ -801,9 +801,9 @@
   label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
   EXPECT_EQ(label.text(), paint_text);
   EXPECT_EQ(extra.width(), text_bounds.x());
-  EXPECT_EQ(0, text_bounds.y());
+  EXPECT_EQ(extra.height() / 2, text_bounds.y());
   EXPECT_GT(text_bounds.width(), kMinTextDimension);
-  EXPECT_EQ(text_bounds.height(), label.height());
+  EXPECT_GT(text_bounds.height(), kMinTextDimension);
   EXPECT_TRUE(gfx::Canvas::MULTI_LINE & flags);
   EXPECT_TRUE(gfx::Canvas::TEXT_ALIGN_RIGHT & flags);
 #if !defined(OS_WIN)
@@ -816,9 +816,9 @@
   label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
   EXPECT_EQ(label.text(), paint_text);
   EXPECT_EQ(0, text_bounds.x());
-  EXPECT_EQ(0, text_bounds.y());
+  EXPECT_EQ(extra.height() / 2, text_bounds.y());
   EXPECT_GT(text_bounds.width(), kMinTextDimension);
-  EXPECT_EQ(text_bounds.height(), label.height());
+  EXPECT_GT(text_bounds.height(), kMinTextDimension);
   EXPECT_TRUE(gfx::Canvas::MULTI_LINE & flags);
   EXPECT_TRUE(gfx::Canvas::TEXT_ALIGN_LEFT & flags);
 #if !defined(OS_WIN)
@@ -840,9 +840,9 @@
   label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
   EXPECT_EQ(label.text(), paint_text);
   EXPECT_EQ(border.left() + extra.width() / 2, text_bounds.x());
-  EXPECT_EQ(border.top(), text_bounds.y());
+  EXPECT_EQ(border.top() + extra.height() / 2, text_bounds.y());
   EXPECT_EQ(center_bounds.width(), text_bounds.width());
-  EXPECT_EQ(label.GetContentsBounds().height(), text_bounds.height());
+  EXPECT_EQ(center_bounds.height(), text_bounds.height());
   EXPECT_TRUE(gfx::Canvas::MULTI_LINE & flags);
   EXPECT_TRUE(gfx::Canvas::TEXT_ALIGN_CENTER & flags);
 #if !defined(OS_WIN)
@@ -855,9 +855,9 @@
   label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
   EXPECT_EQ(label.text(), paint_text);
   EXPECT_EQ(border.left() + extra.width(), text_bounds.x());
-  EXPECT_EQ(border.top(), text_bounds.y());
+  EXPECT_EQ(border.top() + extra.height() / 2, text_bounds.y());
   EXPECT_EQ(center_bounds.width(), text_bounds.width());
-  EXPECT_EQ(label.GetContentsBounds().height(), text_bounds.height());
+  EXPECT_EQ(center_bounds.height(), text_bounds.height());
   EXPECT_TRUE(gfx::Canvas::MULTI_LINE & flags);
   EXPECT_TRUE(gfx::Canvas::TEXT_ALIGN_RIGHT & flags);
 #if !defined(OS_WIN)
@@ -870,9 +870,9 @@
   label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
   EXPECT_EQ(label.text(), paint_text);
   EXPECT_EQ(border.left(), text_bounds.x());
-  EXPECT_EQ(border.top(), text_bounds.y());
+  EXPECT_EQ(border.top() + extra.height() / 2, text_bounds.y());
   EXPECT_EQ(center_bounds.width(), text_bounds.width());
-  EXPECT_EQ(label.GetContentsBounds().height(), text_bounds.height());
+  EXPECT_EQ(center_bounds.height(), text_bounds.height());
   EXPECT_TRUE(gfx::Canvas::MULTI_LINE & flags);
   EXPECT_TRUE(gfx::Canvas::TEXT_ALIGN_LEFT & flags);
 #if !defined(OS_WIN)
diff --git a/ui/views/win/hwnd_message_handler.cc b/ui/views/win/hwnd_message_handler.cc
index fe562a7..08e337f 100644
--- a/ui/views/win/hwnd_message_handler.cc
+++ b/ui/views/win/hwnd_message_handler.cc
@@ -871,8 +871,7 @@
 void HWNDMessageHandler::SizeConstraintsChanged() {
   LONG style = GetWindowLong(hwnd(), GWL_STYLE);
   // Ignore if this is not a standard window.
-  // WS_OVERLAPPED is just the *absence* of WS_POPUP and WS_CHILD.
-  if ((style & (WS_POPUP | WS_CHILD)) == WS_OVERLAPPED)
+  if (!(style & WS_OVERLAPPED))
     return;
 
   if (delegate_->CanResize()) {