Merge from Chromium at DEPS revision 40.0.2214.87

This commit was generated by merge_to_master.py.

Change-Id: I327855d5ff2f6fff543271e71e90eb43d72bb003
diff --git a/DEPS b/DEPS
index 96d5aef..b0c93f5 100644
--- a/DEPS
+++ b/DEPS
@@ -76,7 +76,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling BoringSSL
   # and whatever else without interference from each other.
-  'boringssl_revision': '817ec3462e246b8301a73e44854e2bb3df90d5e6',
+  'boringssl_revision': '54e455157a6e1899eb6fef9440d2410cb7fedeff',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling nss
   # and whatever else without interference from each other.
diff --git a/ash/display/display_controller.cc b/ash/display/display_controller.cc
index 0cc4f90..b2eaf9e 100644
--- a/ash/display/display_controller.cc
+++ b/ash/display/display_controller.cc
@@ -134,6 +134,10 @@
         base::TimeDelta::FromMicroseconds(
             base::Time::kMicrosecondsPerSecond / mode.refresh_rate));
   }
+
+  // Just movnig the display requires the full redraw.
+  // chrome-os-partner:33558.
+  host->compositor()->ScheduleFullRedraw();
 }
 
 aura::Window* GetWindow(AshWindowTreeHost* ash_host) {
@@ -602,8 +606,9 @@
       primary_tree_host_for_replace_ = host_to_delete;
       return;
     }
-    DCHECK_EQ(1U, window_tree_hosts_.size());
-    primary_display_id = ScreenUtil::GetSecondaryDisplay().id();
+    primary_display_id = window_tree_hosts_.begin()->first;
+    CHECK_NE(gfx::Display::kInvalidDisplayID, primary_display_id);
+
     AshWindowTreeHost* primary_host = host_to_delete;
 
     // Delete the other host instead.
diff --git a/ash/display/display_controller_unittest.cc b/ash/display/display_controller_unittest.cc
index e9dd69f..ed8dd6d 100644
--- a/ash/display/display_controller_unittest.cc
+++ b/ash/display/display_controller_unittest.cc
@@ -531,10 +531,17 @@
 namespace {
 
 DisplayInfo CreateDisplayInfo(int64 id,
-                              const gfx::Rect& bounds,
-                              float device_scale_factor) {
+                              int y,
+                              gfx::Display::Rotation rotation) {
   DisplayInfo info(id, "", false);
-  info.SetBounds(bounds);
+  info.SetBounds(gfx::Rect(0, y, 500, 500));
+  info.set_rotation(rotation);
+  return info;
+}
+
+DisplayInfo CreateMirroredDisplayInfo(int64 id,
+                                      float device_scale_factor) {
+  DisplayInfo info = CreateDisplayInfo(id, 0, gfx::Display::ROTATE_0);
   info.set_device_scale_factor(device_scale_factor);
   return info;
 }
@@ -553,9 +560,9 @@
   DisplayManager* display_manager = Shell::GetInstance()->display_manager();
 
   const DisplayInfo internal_display_info =
-      CreateDisplayInfo(1, gfx::Rect(0, 0, 500, 500), 2.0f);
+      CreateMirroredDisplayInfo(1, 2.0f);
   const DisplayInfo external_display_info =
-      CreateDisplayInfo(2, gfx::Rect(0, 0, 500, 500), 1.0f);
+      CreateMirroredDisplayInfo(2, 1.0f);
 
   std::vector<DisplayInfo> display_info_list;
   // Mirror.
@@ -1251,19 +1258,6 @@
   Shell::GetInstance()->RemovePreTargetHandler(&event_handler);
 }
 
-namespace {
-
-DisplayInfo CreateDisplayInfo(int64 id,
-                              int y,
-                              gfx::Display::Rotation rotation) {
-  DisplayInfo info(id, "", false);
-  info.SetBounds(gfx::Rect(0, y, 500, 500));
-  info.set_rotation(rotation);
-  return info;
-}
-
-}  // namespace
-
 // Make sure that the compositor based mirroring can switch
 // from/to dock mode.
 TEST_F(DisplayControllerTest, DockToSingle) {
@@ -1307,6 +1301,40 @@
               GetRootTransform().IsIdentityOrIntegerTranslation());
 }
 
+// Tests if switching two displays at the same time while the primary display
+// is swapped should not cause a crash. (crbug.com/426292)
+TEST_F(DisplayControllerTest, ReplaceSwappedPrimary) {
+  if (!SupportsMultipleDisplays())
+    return;
+  DisplayManager* display_manager = Shell::GetInstance()->display_manager();
+
+  const DisplayInfo first_display_info =
+      CreateDisplayInfo(10, 0, gfx::Display::ROTATE_0);
+  const DisplayInfo second_display_info =
+      CreateDisplayInfo(11, 1, gfx::Display::ROTATE_0);
+
+  std::vector<DisplayInfo> display_info_list;
+  // Extended
+  display_info_list.push_back(first_display_info);
+  display_info_list.push_back(second_display_info);
+  display_manager->OnNativeDisplaysChanged(display_info_list);
+
+  Shell::GetInstance()->display_controller()->SwapPrimaryDisplay();
+
+  EXPECT_EQ(11, Shell::GetScreen()->GetPrimaryDisplay().id());
+
+  display_info_list.clear();
+  const DisplayInfo new_first_display_info =
+      CreateDisplayInfo(20, 0, gfx::Display::ROTATE_0);
+  const DisplayInfo new_second_display_info =
+      CreateDisplayInfo(21, 1, gfx::Display::ROTATE_0);
+  display_info_list.push_back(new_first_display_info);
+  display_info_list.push_back(new_second_display_info);
+  display_manager->OnNativeDisplaysChanged(display_info_list);
+
+  EXPECT_EQ(20, Shell::GetScreen()->GetPrimaryDisplay().id());
+}
+
 #if defined(USE_X11)
 TEST_F(DisplayControllerTest, XWidowNameForRootWindow) {
   EXPECT_EQ("aura_root_0", GetXWindowName(
diff --git a/ash/shell.cc b/ash/shell.cc
index 9de2e15..7640d26 100644
--- a/ash/shell.cc
+++ b/ash/shell.cc
@@ -695,6 +695,12 @@
   // TooltipController is deleted with the Shell so removing its references.
   RemovePreTargetHandler(tooltip_controller_.get());
 
+// Destroy the virtual keyboard controller before the maximize mode controller
+// since the latters destructor triggers events that the former is listening
+// to but no longer cares about.
+#if defined(OS_CHROMEOS)
+  virtual_keyboard_controller_.reset();
+#endif
   // Destroy maximize mode controller early on since it has some observers which
   // need to be removed.
   maximize_mode_controller_->Shutdown();
@@ -794,9 +800,6 @@
   display_manager_->CreateScreenForShutdown();
   display_controller_->Shutdown();
   display_controller_.reset();
-#if defined(OS_CHROMEOS)
-  virtual_keyboard_controller_.reset();
-#endif
   screen_position_controller_.reset();
   accessibility_delegate_.reset();
   new_window_delegate_.reset();
diff --git a/ash/virtual_keyboard_controller_unittest.cc b/ash/virtual_keyboard_controller_unittest.cc
index dc45cc1..df04ae4 100644
--- a/ash/virtual_keyboard_controller_unittest.cc
+++ b/ash/virtual_keyboard_controller_unittest.cc
@@ -4,10 +4,13 @@
 
 #include "ash/virtual_keyboard_controller.h"
 
+#include <vector>
+
 #include "ash/shell.h"
 #include "ash/system/chromeos/virtual_keyboard/virtual_keyboard_observer.h"
 #include "ash/test/ash_test_base.h"
 #include "ash/wm/maximize_mode/maximize_mode_controller.h"
+#include "ash/wm/maximize_mode/scoped_disable_internal_mouse_and_keyboard.h"
 #include "base/command_line.h"
 #include "ui/events/devices/device_data_manager.h"
 #include "ui/events/devices/device_hotplug_event_observer.h"
@@ -39,6 +42,14 @@
     manager->OnKeyboardDevicesUpdated(keyboard_devices);
   }
 
+  // Sets the event blocker on the maximized window controller.
+  void SetEventBlocker(
+      scoped_ptr<ScopedDisableInternalMouseAndKeyboard> blocker) {
+    Shell::GetInstance()
+        ->maximize_mode_controller()
+        ->event_blocker_ = blocker.Pass();
+  }
+
   void SetUp() override {
     AshTestBase::SetUp();
     UpdateKeyboardDevices(std::vector<ui::KeyboardDevice>());
@@ -63,6 +74,36 @@
   EXPECT_FALSE(keyboard::IsKeyboardEnabled());
 }
 
+// Mock event blocker that enables the internal keyboard when it's destructor
+// is called.
+class MockEventBlocker : public ScopedDisableInternalMouseAndKeyboard {
+ public:
+  MockEventBlocker() {}
+  ~MockEventBlocker() override {
+    std::vector<ui::KeyboardDevice> keyboards;
+    keyboards.push_back(ui::KeyboardDevice(
+        1, ui::InputDeviceType::INPUT_DEVICE_INTERNAL, "keyboard"));
+    ui::DeviceHotplugEventObserver* manager =
+        ui::DeviceDataManager::GetInstance();
+    manager->OnKeyboardDevicesUpdated(keyboards);
+  }
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(MockEventBlocker);
+};
+
+// Tests that reenabling keyboard devices while shutting down does not
+// cause the Virtual Keyboard Controller to crash. See crbug.com/446204.
+TEST_F(VirtualKeyboardControllerTest, RestoreKeyboardDevices) {
+  // Toggle maximized mode on.
+  Shell::GetInstance()
+      ->maximize_mode_controller()
+      ->EnableMaximizeModeWindowManager(true);
+  scoped_ptr<ScopedDisableInternalMouseAndKeyboard>
+      blocker(new MockEventBlocker);
+  SetEventBlocker(blocker.Pass());
+}
+
 class VirtualKeyboardControllerAutoTest : public VirtualKeyboardControllerTest,
                                           public VirtualKeyboardObserver {
  public:
diff --git a/ash/wm/lock_state_controller.cc b/ash/wm/lock_state_controller.cc
index a03a958..4610313 100644
--- a/ash/wm/lock_state_controller.cc
+++ b/ash/wm/lock_state_controller.cc
@@ -235,8 +235,7 @@
 
 void LockStateController::OnLockFailTimeout() {
   DCHECK(!system_is_locked_);
-  CHECK(false) << "We can not be sure about the lock state. Crash and let the "
-               << "SessionManager end the session";
+  LOG(FATAL) << "Screen lock took too long; crashing intentionally";
 }
 
 void LockStateController::StartLockToShutdownTimer() {
@@ -491,7 +490,8 @@
   const std::string board = base::SysInfo::GetLsbReleaseBoard();
   if (board == "x86-mario" ||
       StartsWithASCII(board, "x86-alex", true /* case_sensitive */) ||
-      StartsWithASCII(board, "x86-zgb", true /* case_sensitive */)) {
+      StartsWithASCII(board, "x86-zgb", true /* case_sensitive */) ||
+      StartsWithASCII(board, "daisy", true /* case_sensitive */)) {
     timeout *= 2;
   }
 #endif
diff --git a/ash/wm/maximize_mode/maximize_mode_controller.h b/ash/wm/maximize_mode/maximize_mode_controller.h
index 4210f27..29c58fa 100644
--- a/ash/wm/maximize_mode/maximize_mode_controller.h
+++ b/ash/wm/maximize_mode/maximize_mode_controller.h
@@ -35,6 +35,7 @@
 class MaximizeModeWindowManagerTest;
 namespace test {
 class MultiUserWindowManagerChromeOSTest;
+class VirtualKeyboardControllerTest;
 }
 
 // MaximizeModeController listens to accelerometer events and automatically
@@ -131,6 +132,7 @@
   friend class MaximizeModeControllerTest;
   friend class MaximizeModeWindowManagerTest;
   friend class test::MultiUserWindowManagerChromeOSTest;
+  friend class test::VirtualKeyboardControllerTest;
 
   // Set the TickClock. This is only to be used by tests that need to
   // artificially and deterministically control the current time.
diff --git a/build/ios/grit_whitelist.txt b/build/ios/grit_whitelist.txt
index aa579ce..0d6e48b 100644
--- a/build/ios/grit_whitelist.txt
+++ b/build/ios/grit_whitelist.txt
@@ -616,10 +616,6 @@
 IDS_GENERIC_EXPERIMENT_CHOICE_DEFAULT
 IDS_GENERIC_EXPERIMENT_CHOICE_DISABLED
 IDS_GENERIC_EXPERIMENT_CHOICE_ENABLED
-IDS_GOOGLE_URL_TRACKER_INFOBAR_DONT_SWITCH
-IDS_GOOGLE_URL_TRACKER_INFOBAR_LEARN_MORE
-IDS_GOOGLE_URL_TRACKER_INFOBAR_MESSAGE
-IDS_GOOGLE_URL_TRACKER_INFOBAR_SWITCH
 IDS_GROUP_BY_DOMAIN_LABEL
 IDS_GUEST_PROFILE_NAME
 IDS_HARMFUL_V3_EXPLANATION_PARAGRAPH
diff --git a/build/util/LASTCHANGE b/build/util/LASTCHANGE
index 2039349..da4f812 100644
--- a/build/util/LASTCHANGE
+++ b/build/util/LASTCHANGE
@@ -1 +1 @@
-LASTCHANGE=cada861900be
+LASTCHANGE=f7ea06d7fca4
diff --git a/build/util/LASTCHANGE.blink b/build/util/LASTCHANGE.blink
index dce6657..90859f4 100644
--- a/build/util/LASTCHANGE.blink
+++ b/build/util/LASTCHANGE.blink
@@ -1 +1 @@
-LASTCHANGE=187938
+LASTCHANGE=188344
diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc
index 023a1cd..6665c89 100644
--- a/cc/resources/resource_provider.cc
+++ b/cc/resources/resource_provider.cc
@@ -1058,6 +1058,13 @@
     GLES2Interface* gl = resource_provider_->ContextGL();
     DCHECK(gl);
 
+#if defined(OS_CHROMEOS)
+    // TODO(reveman): GL_COMMANDS_ISSUED_CHROMIUM is used for synchronization
+    // on ChromeOS to avoid some performance issues. This only works with
+    // shared memory backed buffers. crbug.com/436314
+    DCHECK_EQ(gpu_memory_buffer_->GetHandle().type, gfx::SHARED_MEMORY_BUFFER);
+#endif
+
     resource_->image_id =
         gl->CreateImageCHROMIUM(gpu_memory_buffer_->AsClientBuffer(),
                                 size_.width(),
@@ -2061,8 +2068,16 @@
   if (use_sync_query_) {
     if (!source_resource->gl_read_lock_query_id)
       gl->GenQueriesEXT(1, &source_resource->gl_read_lock_query_id);
+#if defined(OS_CHROMEOS)
+    // TODO(reveman): This avoids a performance problem on some ChromeOS
+    // devices. This needs to be removed to support native GpuMemoryBuffer
+    // implementations. crbug.com/436314
+    gl->BeginQueryEXT(GL_COMMANDS_ISSUED_CHROMIUM,
+                      source_resource->gl_read_lock_query_id);
+#else
     gl->BeginQueryEXT(GL_COMMANDS_COMPLETED_CHROMIUM,
                       source_resource->gl_read_lock_query_id);
+#endif
   }
   DCHECK(!dest_resource->image_id);
   dest_resource->allocated = true;
@@ -2075,7 +2090,11 @@
   if (source_resource->gl_read_lock_query_id) {
     // End query and create a read lock fence that will prevent access to
     // source resource until CopyTextureCHROMIUM command has completed.
+#if defined(OS_CHROMEOS)
+    gl->EndQueryEXT(GL_COMMANDS_ISSUED_CHROMIUM);
+#else
     gl->EndQueryEXT(GL_COMMANDS_COMPLETED_CHROMIUM);
+#endif
     source_resource->read_lock_fence = make_scoped_refptr(
         new QueryFence(gl, source_resource->gl_read_lock_query_id));
   } else {
diff --git a/chrome/VERSION b/chrome/VERSION
index 145cfc7..f9f622d 100644
--- a/chrome/VERSION
+++ b/chrome/VERSION
@@ -1,4 +1,4 @@
 MAJOR=40
 MINOR=0
 BUILD=2214
-PATCH=69
+PATCH=87
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/Tab.java b/chrome/android/java/src/org/chromium/chrome/browser/Tab.java
index c81d98b..e8b4781 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/Tab.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/Tab.java
@@ -10,6 +10,7 @@
 import android.graphics.Color;
 import android.view.ContextMenu;
 import android.view.View;
+import android.widget.FrameLayout;
 
 import org.chromium.base.CalledByNative;
 import org.chromium.base.ObserverList;
@@ -114,6 +115,9 @@
      */
     private ContentViewCore mContentViewCore;
 
+    /** The parent view of the ContentView and the InfoBarContainer. */
+    private FrameLayout mContentViewParent;
+
     /**
      * A list of Tab observers.  These are used to broadcast Tab events to listeners.
      */
@@ -502,8 +506,7 @@
      *         This can be {@code null}, if the tab is frozen or being initialized or destroyed.
      */
     public View getView() {
-        return mNativePage != null ? mNativePage.getView() :
-                (mContentViewCore != null ? mContentViewCore.getContainerView() : null);
+        return mNativePage != null ? mNativePage.getView() : mContentViewParent;
     }
 
     /**
@@ -835,6 +838,18 @@
 
         mContentViewCore = cvc;
 
+        // Wrap the ContentView in a FrameLayout, which will contain both the ContentView and the
+        // InfoBarContainer. The alternative -- placing the InfoBarContainer inside the ContentView
+        // -- causes problems since then the ContentView would contain both real views (the
+        // infobars) and virtual views (the web page elements), which breaks Android accessibility.
+        // http://crbug.com/416663
+        if (mContentViewParent != null) {
+            assert false;
+            mContentViewParent.removeAllViews();
+        }
+        mContentViewParent = new FrameLayout(mContext);
+        mContentViewParent.addView(cvc.getContainerView());
+
         mWebContentsDelegate = createWebContentsDelegate();
         mWebContentsObserver = new TabWebContentsObserver(mContentViewCore.getWebContents());
         mVoiceSearchTabHelper = new VoiceSearchTabHelper(mContentViewCore.getWebContents());
@@ -854,9 +869,9 @@
             WebContents webContents = mContentViewCore.getWebContents();
             mInfoBarContainer = new InfoBarContainer(
                     (Activity) mContext, createAutoLoginProcessor(), getId(),
-                    mContentViewCore.getContainerView(), webContents);
+                    mContentViewParent, webContents);
         } else {
-            mInfoBarContainer.onParentViewChanged(getId(), mContentViewCore.getContainerView());
+            mInfoBarContainer.onParentViewChanged(getId(), mContentViewParent);
         }
 
         if (AppBannerManager.isEnabled() && mAppBannerManager == null) {
@@ -937,13 +952,12 @@
         // If we have no content or a native page, return null.
         if (getContentViewCore() == null) return null;
 
-        if (mFavicon != null) return mFavicon;
+        // Use the cached favicon only if the page wasn't changed.
+        if (mFavicon != null && mFaviconUrl != null && mFaviconUrl.equals(getUrl())) {
+            return mFavicon;
+        }
 
-        // Cache the result so we don't keep querying it.
-        mFavicon = nativeGetFavicon(mNativeTabAndroid);
-        // Invalidate the favicon URL so that if we do get a favicon for this page we don't drop it.
-        mFaviconUrl = null;
-        return mFavicon;
+        return nativeGetFavicon(mNativeTabAndroid);
     }
 
     /**
@@ -1009,9 +1023,8 @@
 
         destroyContentViewCoreInternal(mContentViewCore);
 
-        if (mInfoBarContainer != null && mInfoBarContainer.getParent() != null) {
-            mInfoBarContainer.removeFromParentView();
-        }
+        mContentViewParent.removeAllViews();
+        mContentViewParent = null;
         mContentViewCore.destroy();
 
         mContentViewCore = null;
@@ -1088,7 +1101,6 @@
         if (url == null) return;
 
         boolean pageUrlChanged = !url.equals(mFaviconUrl);
-
         // This method will be called multiple times if the page has more than one favicon.
         // we are trying to use the 16x16 DP icon here, Bitmap.createScaledBitmap will return
         // the origin bitmap if it is already 16x16 DP.
diff --git a/chrome/browser/android/logo_service.cc b/chrome/browser/android/logo_service.cc
index 141b09f..f9d3252 100644
--- a/chrome/browser/android/logo_service.cc
+++ b/chrome/browser/android/logo_service.cc
@@ -9,7 +9,6 @@
 #include "chrome/browser/image_decoder.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/search_engines/template_url_service_factory.h"
-#include "components/google/core/browser/google_url_tracker.h"
 #include "components/google/core/browser/google_util.h"
 #include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/search_engines/template_url_service.h"
diff --git a/chrome/browser/android/tab_android.cc b/chrome/browser/android/tab_android.cc
index abb5269..eff5cc8 100644
--- a/chrome/browser/android/tab_android.cc
+++ b/chrome/browser/android/tab_android.cc
@@ -13,7 +13,6 @@
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/content_settings/tab_specific_content_settings.h"
 #include "chrome/browser/favicon/favicon_tab_helper.h"
-#include "chrome/browser/google/google_url_tracker_factory.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/prerender/prerender_contents.h"
 #include "chrome/browser/prerender/prerender_manager.h"
@@ -40,8 +39,6 @@
 #include "chrome/browser/ui/tab_helpers.h"
 #include "chrome/common/instant_types.h"
 #include "chrome/common/url_constants.h"
-#include "components/google/core/browser/google_url_tracker.h"
-#include "components/google/core/browser/google_util.h"
 #include "components/infobars/core/infobar_container.h"
 #include "components/url_fixer/url_fixer.h"
 #include "content/public/browser/android/content_view_core.h"
@@ -552,20 +549,6 @@
     return PAGE_LOAD_FAILED;
 
   if (!HandleNonNavigationAboutURL(fixed_url)) {
-    // Notify the GoogleURLTracker of searches, it might want to change the
-    // actual Google site used (for instance when in the UK, google.co.uk, when
-    // in the US google.com).
-    // Note that this needs to happen before we initiate the navigation as the
-    // GoogleURLTracker uses the navigation pending notification to trigger the
-    // infobar.
-    if (google_util::IsGoogleSearchUrl(fixed_url) &&
-        (page_transition & ui::PAGE_TRANSITION_GENERATED)) {
-      GoogleURLTracker* tracker =
-          GoogleURLTrackerFactory::GetForProfile(GetProfile());
-      if (tracker)
-        tracker->SearchCommitted();
-    }
-
     // Record UMA "ShowHistory" here. That way it'll pick up both user
     // typing chrome://history as well as selecting from the drop down menu.
     if (fixed_url.spec() == chrome::kChromeUIHistoryURL) {
diff --git a/chrome/browser/chromeos/login/saml/saml_browsertest.cc b/chrome/browser/chromeos/login/saml/saml_browsertest.cc
index 44e8402..523b555 100644
--- a/chrome/browser/chromeos/login/saml/saml_browsertest.cc
+++ b/chrome/browser/chromeos/login/saml/saml_browsertest.cc
@@ -2,13 +2,17 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include <cstring>
+
 #include "base/bind.h"
 #include "base/bind_helpers.h"
 #include "base/callback.h"
 #include "base/command_line.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/files/scoped_temp_dir.h"
 #include "base/location.h"
+#include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/path_service.h"
@@ -31,6 +35,7 @@
 #include "chrome/browser/chromeos/profiles/profile_helper.h"
 #include "chrome/browser/chromeos/settings/cros_settings.h"
 #include "chrome/browser/lifetime/application_lifetime.h"
+#include "chrome/browser/policy/test/local_policy_test_server.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/webui/signin/inline_login_ui.h"
 #include "chrome/common/chrome_paths.h"
@@ -45,15 +50,20 @@
 #include "components/policy/core/browser/browser_policy_connector.h"
 #include "components/policy/core/common/mock_configuration_policy_provider.h"
 #include "components/policy/core/common/policy_map.h"
+#include "components/policy/core/common/policy_switches.h"
 #include "components/policy/core/common/policy_types.h"
 #include "components/user_manager/user.h"
 #include "components/user_manager/user_manager.h"
 #include "content/public/browser/browser_thread.h"
+#include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/web_contents.h"
+#include "content/public/browser/web_contents_observer.h"
 #include "content/public/test/browser_test_utils.h"
 #include "content/public/test/test_utils.h"
 #include "google_apis/gaia/fake_gaia.h"
+#include "google_apis/gaia/gaia_constants.h"
 #include "google_apis/gaia/gaia_switches.h"
+#include "google_apis/gaia/gaia_urls.h"
 #include "net/base/url_util.h"
 #include "net/cookies/canonical_cookie.h"
 #include "net/cookies/cookie_monster.h"
@@ -103,6 +113,10 @@
 
 const char kRelayState[] = "RelayState";
 
+const char kTestUserinfoToken[] = "fake-userinfo-token";
+const char kTestRefreshToken[] = "fake-refresh-token";
+const char kPolicy[] = "{\"managed_users\": [\"*\"]}";
+
 // FakeSamlIdp serves IdP auth form and the form submission. The form is
 // served with the template's RelayState placeholder expanded to the real
 // RelayState parameter from request. The form submission redirects back to
@@ -242,7 +256,7 @@
 
 class SamlTest : public InProcessBrowserTest {
  public:
-  SamlTest() : saml_load_injected_(false) {}
+  SamlTest() : gaia_frame_parent_("signin-frame"), saml_load_injected_(false) {}
   virtual ~SamlTest() {}
 
   virtual void SetUp() override {
@@ -340,7 +354,7 @@
     login_screen_load_observer_->Wait();
   }
 
-  void StartSamlAndWaitForIdpPageLoad(const std::string& gaia_email) {
+  virtual void StartSamlAndWaitForIdpPageLoad(const std::string& gaia_email) {
     WaitForSigninScreen();
 
     if (!saml_load_injected_) {
@@ -415,7 +429,7 @@
   // Executes JavaScript code in the auth iframe hosted by gaia_auth extension.
   void ExecuteJsInSigninFrame(const std::string& js) {
     content::RenderFrameHost* frame = InlineLoginUI::GetAuthIframe(
-        GetLoginUI()->GetWebContents(), GURL(), "signin-frame");
+        GetLoginUI()->GetWebContents(), GURL(), gaia_frame_parent_);
     ASSERT_TRUE(content::ExecuteScript(frame, js));
   }
 
@@ -425,11 +439,14 @@
   scoped_ptr<content::WindowedNotificationObserver> login_screen_load_observer_;
   FakeGaia fake_gaia_;
 
- private:
-  FakeSamlIdp fake_saml_idp_;
+  std::string gaia_frame_parent_;
+
   scoped_ptr<HTTPSForwarder> gaia_https_forwarder_;
   scoped_ptr<HTTPSForwarder> saml_https_forwarder_;
 
+ private:
+  FakeSamlIdp fake_saml_idp_;
+
   bool saml_load_injected_;
 
   DISALLOW_COPY_AND_ASSIGN(SamlTest);
@@ -639,6 +656,170 @@
             WaitForAndGetFatalErrorMessage());
 }
 
+class SAMLEnrollmentTest : public SamlTest,
+                           public content::WebContentsObserver {
+ public:
+  SAMLEnrollmentTest();
+  ~SAMLEnrollmentTest() override;
+
+  // SamlTest:
+  void SetUp() override;
+  void SetUpCommandLine(CommandLine* command_line) override;
+  void SetUpOnMainThread() override;
+  void StartSamlAndWaitForIdpPageLoad(const std::string& gaia_email) override;
+
+  // content::WebContentsObserver:
+  void RenderFrameCreated(content::RenderFrameHost* render_frame_host) override;
+  void DidFinishLoad(content::RenderFrameHost* render_frame_host,
+                     const GURL& validated_url) override;
+
+  void WaitForEnrollmentSuccess();
+
+ private:
+  scoped_ptr<policy::LocalPolicyTestServer> test_server_;
+  base::ScopedTempDir temp_dir_;
+
+  scoped_ptr<base::RunLoop> run_loop_;
+  content::RenderFrameHost* auth_frame_;
+
+  DISALLOW_COPY_AND_ASSIGN(SAMLEnrollmentTest);
+};
+
+SAMLEnrollmentTest::SAMLEnrollmentTest() : auth_frame_(nullptr) {
+  gaia_frame_parent_ = "oauth-enroll-signin-frame";
+}
+
+SAMLEnrollmentTest::~SAMLEnrollmentTest() {
+}
+
+void SAMLEnrollmentTest::SetUp() {
+  ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
+  const base::FilePath policy_file =
+      temp_dir_.path().AppendASCII("policy.json");
+  ASSERT_EQ(static_cast<int>(strlen(kPolicy)),
+            base::WriteFile(policy_file, kPolicy, strlen(kPolicy)));
+
+  test_server_.reset(new policy::LocalPolicyTestServer(policy_file));
+  ASSERT_TRUE(test_server_->Start());
+
+  SamlTest::SetUp();
+}
+
+void SAMLEnrollmentTest::SetUpCommandLine(CommandLine* command_line) {
+  command_line->AppendSwitchASCII(policy::switches::kDeviceManagementUrl,
+                                  test_server_->GetServiceURL().spec());
+  command_line->AppendSwitch(policy::switches::kDisablePolicyKeyVerification);
+  command_line->AppendSwitch(switches::kEnterpriseEnrollmentSkipRobotAuth);
+
+  SamlTest::SetUpCommandLine(command_line);
+}
+
+void SAMLEnrollmentTest::SetUpOnMainThread() {
+  Observe(GetLoginUI()->GetWebContents());
+
+  FakeGaia::AccessTokenInfo token_info;
+  token_info.token = kTestUserinfoToken;
+  token_info.scopes.insert(GaiaConstants::kDeviceManagementServiceOAuth);
+  token_info.scopes.insert(GaiaConstants::kOAuthWrapBridgeUserInfoScope);
+  token_info.audience = GaiaUrls::GetInstance()->oauth2_chrome_client_id();
+  token_info.email = kFirstSAMLUserEmail;
+  fake_gaia_.IssueOAuthToken(kTestRefreshToken, token_info);
+
+  SamlTest::SetUpOnMainThread();
+}
+
+void SAMLEnrollmentTest::StartSamlAndWaitForIdpPageLoad(
+    const std::string& gaia_email) {
+  WaitForSigninScreen();
+  run_loop_.reset(new base::RunLoop);
+  ExistingUserController::current_controller()->OnStartEnterpriseEnrollment();
+  run_loop_->Run();
+
+  SetSignFormField("Email", gaia_email);
+
+  run_loop_.reset(new base::RunLoop);
+  ExecuteJsInSigninFrame("document.getElementById('signIn').click();");
+  run_loop_->Run();
+}
+
+void SAMLEnrollmentTest::RenderFrameCreated(
+    content::RenderFrameHost* render_frame_host) {
+  content::RenderFrameHost* parent = render_frame_host->GetParent();
+  if (!parent || parent->GetFrameName() != gaia_frame_parent_)
+    return;
+
+  // The GAIA extension created the iframe in which the login form will be
+  // shown. Now wait for the login form to finish loading.
+  auth_frame_ = render_frame_host;
+  Observe(content::WebContents::FromRenderFrameHost(auth_frame_));
+}
+
+void SAMLEnrollmentTest::DidFinishLoad(
+    content::RenderFrameHost* render_frame_host,
+    const GURL& validated_url) {
+  if (render_frame_host != auth_frame_)
+    return;
+
+  const GURL origin = validated_url.GetOrigin();
+  if (origin != gaia_https_forwarder_->GetURL("") &&
+      origin != saml_https_forwarder_->GetURL("")) {
+    return;
+  }
+
+  // The GAIA or SAML IdP login form finished loading.
+  if (run_loop_)
+    run_loop_->Quit();
+}
+
+// Waits until the class |oauth-enroll-state-success| becomes set for the
+// enrollment screen, indicating enrollment success.
+void SAMLEnrollmentTest::WaitForEnrollmentSuccess() {
+  bool done = false;
+  ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
+      GetLoginUI()->GetWebContents(),
+      "var enrollmentScreen = document.getElementById('oauth-enrollment');"
+      "function SendReplyIfEnrollmentDone() {"
+      "  if (!enrollmentScreen.classList.contains("
+      "           'oauth-enroll-state-success')) {"
+      "    return false;"
+      "  }"
+      "  domAutomationController.send(true);"
+      "  observer.disconnect();"
+      "  return true;"
+      "}"
+      "var observer = new MutationObserver(SendReplyIfEnrollmentDone);"
+      "if (!SendReplyIfEnrollmentDone()) {"
+      "  var options = { attributes: true, attributeFilter: [ 'class' ] };"
+      "  observer.observe(enrollmentScreen, options);"
+      "}",
+      &done));
+}
+
+IN_PROC_BROWSER_TEST_F(SAMLEnrollmentTest, WithoutCredentialsPassingAPI) {
+  fake_saml_idp()->SetLoginHTMLTemplate("saml_login.html");
+  StartSamlAndWaitForIdpPageLoad(kFirstSAMLUserEmail);
+
+  // Fill-in the SAML IdP form and submit.
+  SetSignFormField("Email", "fake_user");
+  SetSignFormField("Password", "fake_password");
+  ExecuteJsInSigninFrame("document.getElementById('Submit').click();");
+
+  WaitForEnrollmentSuccess();
+}
+
+IN_PROC_BROWSER_TEST_F(SAMLEnrollmentTest, WithCredentialsPassingAPI) {
+  fake_saml_idp()->SetLoginHTMLTemplate("saml_api_login.html");
+  fake_saml_idp()->SetLoginAuthHTMLTemplate("saml_api_login_auth.html");
+  StartSamlAndWaitForIdpPageLoad(kFirstSAMLUserEmail);
+
+  // Fill-in the SAML IdP form and submit.
+  SetSignFormField("Email", "fake_user");
+  SetSignFormField("Password", "fake_password");
+  ExecuteJsInSigninFrame("document.getElementById('Submit').click();");
+
+  WaitForEnrollmentSuccess();
+}
+
 class SAMLPolicyTest : public SamlTest {
  public:
   SAMLPolicyTest();
diff --git a/chrome/browser/google/DEPS b/chrome/browser/google/DEPS
deleted file mode 100644
index f40a6ca..0000000
--- a/chrome/browser/google/DEPS
+++ /dev/null
@@ -1,8 +0,0 @@
-specific_include_rules = {
-  # GoogleURLTracker can't use WebContents, since it is used by iOS.
-  # If WebContents functionality is needed, add it to
-  # GoogleURLTrackerNavigationHelperImpl.
-  'google_url_tracker\.': [
-    "-content/public/browser/web_contents.h",
-  ],
-}
diff --git a/chrome/browser/google/chrome_google_url_tracker_client.cc b/chrome/browser/google/chrome_google_url_tracker_client.cc
index d8bc86d..3b6ff8f 100644
--- a/chrome/browser/google/chrome_google_url_tracker_client.cc
+++ b/chrome/browser/google/chrome_google_url_tracker_client.cc
@@ -5,16 +5,8 @@
 #include "chrome/browser/google/chrome_google_url_tracker_client.h"
 
 #include "base/command_line.h"
-#include "chrome/browser/chrome_notification_types.h"
-#include "chrome/browser/google/google_url_tracker_navigation_helper_impl.h"
-#include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/common/chrome_switches.h"
-#include "components/google/core/browser/google_url_tracker.h"
-#include "content/public/browser/navigation_controller.h"
-#include "content/public/browser/navigation_entry.h"
-#include "content/public/browser/notification_service.h"
-#include "content/public/browser/web_contents.h"
 
 ChromeGoogleURLTrackerClient::ChromeGoogleURLTrackerClient(Profile* profile)
     : profile_(profile) {
@@ -23,27 +15,6 @@
 ChromeGoogleURLTrackerClient::~ChromeGoogleURLTrackerClient() {
 }
 
-void ChromeGoogleURLTrackerClient::SetListeningForNavigationStart(bool listen) {
-  if (listen) {
-    registrar_.Add(
-        this,
-        content::NOTIFICATION_NAV_ENTRY_PENDING,
-        content::NotificationService::AllBrowserContextsAndSources());
-  } else {
-    registrar_.Remove(
-        this,
-        content::NOTIFICATION_NAV_ENTRY_PENDING,
-        content::NotificationService::AllBrowserContextsAndSources());
-  }
-}
-
-bool ChromeGoogleURLTrackerClient::IsListeningForNavigationStart() {
-  return registrar_.IsRegistered(
-      this,
-      content::NOTIFICATION_NAV_ENTRY_PENDING,
-      content::NotificationService::AllBrowserContextsAndSources());
-}
-
 bool ChromeGoogleURLTrackerClient::IsBackgroundNetworkingEnabled() {
   return !CommandLine::ForCurrentProcess()->HasSwitch(
       switches::kDisableBackgroundNetworking);
@@ -57,24 +28,3 @@
 ChromeGoogleURLTrackerClient::GetRequestContext() {
   return profile_->GetRequestContext();
 }
-
-void ChromeGoogleURLTrackerClient::Observe(
-    int type,
-    const content::NotificationSource& source,
-    const content::NotificationDetails& details) {
-  DCHECK_EQ(content::NOTIFICATION_NAV_ENTRY_PENDING, type);
-  content::NavigationController* controller =
-      content::Source<content::NavigationController>(source).ptr();
-  InfoBarService* infobar_service =
-      InfoBarService::FromWebContents(controller->GetWebContents());
-  // Because we're listening to all sources, there may be no InfoBarService for
-  // some notifications, e.g. navigations in bubbles/balloons etc.
-  if (infobar_service) {
-    google_url_tracker()->OnNavigationPending(
-        scoped_ptr<GoogleURLTrackerNavigationHelper>(
-            new GoogleURLTrackerNavigationHelperImpl(
-                controller->GetWebContents(), google_url_tracker())),
-        infobar_service,
-        controller->GetPendingEntry()->GetUniqueID());
-  }
-}
diff --git a/chrome/browser/google/chrome_google_url_tracker_client.h b/chrome/browser/google/chrome_google_url_tracker_client.h
index 2687809..2e0d567 100644
--- a/chrome/browser/google/chrome_google_url_tracker_client.h
+++ b/chrome/browser/google/chrome_google_url_tracker_client.h
@@ -6,34 +6,22 @@
 #define CHROME_BROWSER_GOOGLE_CHROME_GOOGLE_URL_TRACKER_CLIENT_H_
 
 #include "components/google/core/browser/google_url_tracker_client.h"
-#include "content/public/browser/notification_observer.h"
-#include "content/public/browser/notification_registrar.h"
 
 class Profile;
 
-class ChromeGoogleURLTrackerClient : public GoogleURLTrackerClient,
-                                     public content::NotificationObserver {
+class ChromeGoogleURLTrackerClient : public GoogleURLTrackerClient {
  public:
   explicit ChromeGoogleURLTrackerClient(Profile* profile);
   ~ChromeGoogleURLTrackerClient() override;
 
   // GoogleURLTrackerClient:
-  void SetListeningForNavigationStart(bool listen) override;
-  bool IsListeningForNavigationStart() override;
   bool IsBackgroundNetworkingEnabled() override;
   PrefService* GetPrefs() override;
   net::URLRequestContextGetter* GetRequestContext() override;
 
  private:
-  // content::NotificationObserver:
-  void Observe(int type,
-               const content::NotificationSource& source,
-               const content::NotificationDetails& details) override;
-
   Profile* profile_;
 
-  content::NotificationRegistrar registrar_;
-
   DISALLOW_COPY_AND_ASSIGN(ChromeGoogleURLTrackerClient);
 };
 
diff --git a/chrome/browser/google/google_url_tracker_factory.cc b/chrome/browser/google/google_url_tracker_factory.cc
index bc6eb06..1ba3e69 100644
--- a/chrome/browser/google/google_url_tracker_factory.cc
+++ b/chrome/browser/google/google_url_tracker_factory.cc
@@ -13,6 +13,12 @@
 #include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/pref_registry/pref_registry_syncable.h"
 
+namespace {
+
+const char kLastPromptedGoogleURL[] = "browser.last_prompted_google_url";
+
+}  // namespace
+
 
 // static
 GoogleURLTracker* GoogleURLTrackerFactory::GetForProfile(Profile* profile) {
@@ -36,6 +42,11 @@
 
 KeyedService* GoogleURLTrackerFactory::BuildServiceInstanceFor(
     content::BrowserContext* context) const {
+  // Delete this now-unused pref.
+  // At some point in the future, this code can be removed entirely.
+  static_cast<Profile*>(context)->GetOriginalProfile()->GetPrefs()->ClearPref(
+      kLastPromptedGoogleURL);
+
   scoped_ptr<GoogleURLTrackerClient> client(
       new ChromeGoogleURLTrackerClient(Profile::FromBrowserContext(context)));
   return new GoogleURLTracker(client.Pass(), GoogleURLTracker::NORMAL_MODE);
@@ -48,7 +59,7 @@
       GoogleURLTracker::kDefaultGoogleHomepage,
       user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
   user_prefs->RegisterStringPref(
-      prefs::kLastPromptedGoogleURL,
+      kLastPromptedGoogleURL,
       std::string(),
       user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
 }
diff --git a/chrome/browser/google/google_url_tracker_navigation_helper_impl.cc b/chrome/browser/google/google_url_tracker_navigation_helper_impl.cc
deleted file mode 100644
index 080f611..0000000
--- a/chrome/browser/google/google_url_tracker_navigation_helper_impl.cc
+++ /dev/null
@@ -1,113 +0,0 @@
-// Copyright (c) 2012 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/google/google_url_tracker_navigation_helper_impl.h"
-
-#include "chrome/browser/chrome_notification_types.h"
-#include "chrome/browser/infobars/infobar_service.h"
-#include "components/google/core/browser/google_url_tracker.h"
-#include "content/public/browser/navigation_controller.h"
-#include "content/public/browser/navigation_entry.h"
-#include "content/public/browser/notification_service.h"
-#include "content/public/browser/web_contents.h"
-
-GoogleURLTrackerNavigationHelperImpl::GoogleURLTrackerNavigationHelperImpl(
-    content::WebContents* web_contents,
-    GoogleURLTracker* tracker)
-    : GoogleURLTrackerNavigationHelper(tracker),
-      web_contents_(web_contents) {
-}
-
-GoogleURLTrackerNavigationHelperImpl::~GoogleURLTrackerNavigationHelperImpl() {
-  web_contents_ = NULL;
-}
-
-void GoogleURLTrackerNavigationHelperImpl::SetListeningForNavigationCommit(
-    bool listen) {
-  content::NotificationSource navigation_controller_source =
-      content::Source<content::NavigationController>(
-          &web_contents_->GetController());
-  if (listen) {
-    registrar_.Add(this, content::NOTIFICATION_NAV_ENTRY_COMMITTED,
-                    navigation_controller_source);
-  } else {
-    registrar_.Remove(this, content::NOTIFICATION_NAV_ENTRY_COMMITTED,
-                      navigation_controller_source);
-  }
-}
-
-bool GoogleURLTrackerNavigationHelperImpl::IsListeningForNavigationCommit() {
-  content::NotificationSource navigation_controller_source =
-      content::Source<content::NavigationController>(
-          &web_contents_->GetController());
-  return registrar_.IsRegistered(
-      this, content::NOTIFICATION_NAV_ENTRY_COMMITTED,
-      navigation_controller_source);
-}
-
-void GoogleURLTrackerNavigationHelperImpl::SetListeningForTabDestruction(
-    bool listen) {
-  content::NotificationSource web_contents_source =
-      content::Source<content::WebContents>(web_contents_);
-  if (listen) {
-    registrar_.Add(this,
-                   content::NOTIFICATION_WEB_CONTENTS_DESTROYED,
-                   web_contents_source);
-  } else {
-    registrar_.Remove(this,
-                      content::NOTIFICATION_WEB_CONTENTS_DESTROYED,
-                      web_contents_source);
-  }
-}
-
-bool GoogleURLTrackerNavigationHelperImpl::IsListeningForTabDestruction() {
-  return registrar_.IsRegistered(
-      this,
-      content::NOTIFICATION_WEB_CONTENTS_DESTROYED,
-      content::Source<content::WebContents>(web_contents_));
-}
-
-void GoogleURLTrackerNavigationHelperImpl::OpenURL(
-    GURL url,
-    WindowOpenDisposition disposition,
-    bool user_clicked_on_link) {
-  ui::PageTransition transition_type = user_clicked_on_link ?
-      ui::PAGE_TRANSITION_LINK : ui::PAGE_TRANSITION_GENERATED;
-  web_contents_->OpenURL(content::OpenURLParams(
-      url, content::Referrer(), disposition, transition_type, false));
-}
-
-void GoogleURLTrackerNavigationHelperImpl::Observe(
-    int type,
-    const content::NotificationSource& source,
-    const content::NotificationDetails& details) {
-  switch (type) {
-    case content::NOTIFICATION_NAV_ENTRY_COMMITTED: {
-      content::NavigationController* controller =
-          content::Source<content::NavigationController>(source).ptr();
-      DCHECK_EQ(web_contents_, controller->GetWebContents());
-
-      // Here we're only listening to notifications where we already know
-      // there's an associated InfoBarService.
-      InfoBarService* infobar_service =
-          InfoBarService::FromWebContents(web_contents_);
-      DCHECK(infobar_service);
-      const GURL& search_url = controller->GetActiveEntry()->GetURL();
-      if (!search_url.is_valid())  // Not clear if this can happen.
-        google_url_tracker()->OnTabClosed(this);
-      google_url_tracker()->OnNavigationCommitted(infobar_service, search_url);
-      break;
-    }
-
-    case content::NOTIFICATION_WEB_CONTENTS_DESTROYED: {
-      DCHECK_EQ(web_contents_,
-                content::Source<content::WebContents>(source).ptr());
-      google_url_tracker()->OnTabClosed(this);
-      break;
-    }
-
-    default:
-      NOTREACHED() << "Unknown notification received:" << type;
-  }
-}
diff --git a/chrome/browser/google/google_url_tracker_navigation_helper_impl.h b/chrome/browser/google/google_url_tracker_navigation_helper_impl.h
deleted file mode 100644
index a0a3359..0000000
--- a/chrome/browser/google/google_url_tracker_navigation_helper_impl.h
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright (c) 2012 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_GOOGLE_GOOGLE_URL_TRACKER_NAVIGATION_HELPER_IMPL_H_
-#define CHROME_BROWSER_GOOGLE_GOOGLE_URL_TRACKER_NAVIGATION_HELPER_IMPL_H_
-
-#include "components/google/core/browser/google_url_tracker_navigation_helper.h"
-#include "content/public/browser/notification_observer.h"
-#include "content/public/browser/notification_registrar.h"
-#include "url/gurl.h"
-
-namespace content {
-class WebContents;
-}
-
-class GoogleURLTrackerNavigationHelperImpl
-    : public GoogleURLTrackerNavigationHelper,
-      public content::NotificationObserver {
- public:
-  GoogleURLTrackerNavigationHelperImpl(content::WebContents* web_contents,
-                                       GoogleURLTracker* tracker);
-  ~GoogleURLTrackerNavigationHelperImpl() override;
-
-  // GoogleURLTrackerNavigationHelper:
-  void SetListeningForNavigationCommit(bool listen) override;
-  bool IsListeningForNavigationCommit() override;
-  void SetListeningForTabDestruction(bool listen) override;
-  bool IsListeningForTabDestruction() override;
-  void OpenURL(GURL url,
-               WindowOpenDisposition disposition,
-               bool user_clicked_on_link) override;
-
- private:
-  // content::NotificationObserver:
-  void Observe(int type,
-               const content::NotificationSource& source,
-               const content::NotificationDetails& details) override;
-
-  content::WebContents* web_contents_;
-  content::NotificationRegistrar registrar_;
-
-  DISALLOW_COPY_AND_ASSIGN(GoogleURLTrackerNavigationHelperImpl);
-};
-
-#endif  // CHROME_BROWSER_GOOGLE_GOOGLE_URL_TRACKER_NAVIGATION_HELPER_IMPL_H_
diff --git a/chrome/browser/policy/test/local_policy_test_server.cc b/chrome/browser/policy/test/local_policy_test_server.cc
index e4c73f0..d4bb6c7 100644
--- a/chrome/browser/policy/test/local_policy_test_server.cc
+++ b/chrome/browser/policy/test/local_policy_test_server.cc
@@ -197,21 +197,15 @@
   }
 
   AppendToPythonPath(pyproto_dir
-                     .AppendASCII("chrome")
-                     .AppendASCII("browser")
-                     .AppendASCII("policy")
-                     .AppendASCII("proto")
-                     .AppendASCII("cloud"));
-  AppendToPythonPath(pyproto_dir
                      .AppendASCII("policy")
                      .AppendASCII("proto"));
 #if defined(OS_CHROMEOS)
   AppendToPythonPath(pyproto_dir
                      .AppendASCII("chrome")
                      .AppendASCII("browser")
+                     .AppendASCII("chromeos")
                      .AppendASCII("policy")
-                     .AppendASCII("proto")
-                     .AppendASCII("chromeos"));
+                     .AppendASCII("proto"));
 #endif
 
   return true;
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc
index 6ea64ff..29f7bc6 100644
--- a/chrome/browser/prefs/browser_prefs.cc
+++ b/chrome/browser/prefs/browser_prefs.cc
@@ -24,7 +24,6 @@
 #include "chrome/browser/external_protocol/external_protocol_handler.h"
 #include "chrome/browser/first_run/first_run.h"
 #include "chrome/browser/geolocation/geolocation_prefs.h"
-#include "chrome/browser/google/google_url_tracker_factory.h"
 #include "chrome/browser/gpu/gl_string_manager.h"
 #include "chrome/browser/gpu/gpu_mode_manager.h"
 #include "chrome/browser/intranet_redirect_detector.h"
@@ -86,8 +85,6 @@
 #include "components/dom_distiller/core/distilled_page_prefs.h"
 #include "components/enhanced_bookmarks/bookmark_server_cluster_service.h"
 #include "components/gcm_driver/gcm_channel_status_syncer.h"
-#include "components/google/core/browser/google_pref_names.h"
-#include "components/google/core/browser/google_url_tracker.h"
 #include "components/network_time/network_time_tracker.h"
 #include "components/password_manager/core/browser/password_manager.h"
 #include "components/pref_registry/pref_registry_syncable.h"
@@ -223,7 +220,6 @@
   NO_PREFS = 0,
   DNS_PREFS = 1 << 0,
   WINDOWS_PREFS = 1 << 1,
-  GOOGLE_URL_TRACKER_PREFS = 1 << 2,
 };
 
 // A previous feature (see
@@ -620,29 +616,6 @@
                             current_version);
   }
 
-  if (!(current_version & GOOGLE_URL_TRACKER_PREFS)) {
-    registry->RegisterStringPref(prefs::kLastKnownGoogleURL,
-                                 GoogleURLTracker::kDefaultGoogleHomepage);
-    if (local_state->HasPrefPath(prefs::kLastKnownGoogleURL)) {
-      user_prefs->SetString(prefs::kLastKnownGoogleURL,
-                            local_state->GetString(prefs::kLastKnownGoogleURL));
-    }
-    local_state->ClearPref(prefs::kLastKnownGoogleURL);
-
-    registry->RegisterStringPref(prefs::kLastPromptedGoogleURL,
-                                 std::string());
-    if (local_state->HasPrefPath(prefs::kLastPromptedGoogleURL)) {
-      user_prefs->SetString(
-          prefs::kLastPromptedGoogleURL,
-          local_state->GetString(prefs::kLastPromptedGoogleURL));
-    }
-    local_state->ClearPref(prefs::kLastPromptedGoogleURL);
-
-    current_version |= GOOGLE_URL_TRACKER_PREFS;
-    local_state->SetInteger(prefs::kMultipleProfilePrefMigration,
-                            current_version);
-  }
-
 #if !defined(OS_ANDROID)
   local_state->ClearPref(kLegacyProfileResetPromptMemento);
 #endif
diff --git a/chrome/browser/profile_resetter/profile_resetter.cc b/chrome/browser/profile_resetter/profile_resetter.cc
index 6b2d0af..cc3fdd1 100644
--- a/chrome/browser/profile_resetter/profile_resetter.cc
+++ b/chrome/browser/profile_resetter/profile_resetter.cc
@@ -21,7 +21,6 @@
 #include "chrome/common/pref_names.h"
 #include "chrome/installer/util/browser_distribution.h"
 #include "components/content_settings/core/browser/host_content_settings_map.h"
-#include "components/google/core/browser/google_pref_names.h"
 #include "components/google/core/browser/google_url_tracker.h"
 #include "components/search_engines/search_engines_pref_names.h"
 #include "components/search_engines/template_url_prepopulate_data.h"
@@ -171,7 +170,6 @@
     template_url_service_->RepairPrepopulatedSearchEngines();
 
     // Reset Google search URL.
-    prefs->ClearPref(prefs::kLastPromptedGoogleURL);
     const TemplateURL* default_search_provider =
         template_url_service_->GetDefaultSearchProvider();
     if (default_search_provider &&
diff --git a/chrome/browser/profile_resetter/profile_resetter_unittest.cc b/chrome/browser/profile_resetter/profile_resetter_unittest.cc
index b487a46..aee8bae 100644
--- a/chrome/browser/profile_resetter/profile_resetter_unittest.cc
+++ b/chrome/browser/profile_resetter/profile_resetter_unittest.cc
@@ -24,7 +24,6 @@
 #include "chrome/common/pref_names.h"
 #include "chrome/test/base/browser_with_test_window_test.h"
 #include "components/content_settings/core/browser/host_content_settings_map.h"
-#include "components/google/core/browser/google_pref_names.h"
 #include "components/search_engines/template_url_service.h"
 #include "components/search_engines/template_url_service_client.h"
 #include "content/public/browser/web_contents.h"
@@ -423,10 +422,6 @@
 }
 
 TEST_F(ProfileResetterTest, ResetDefaultSearchEngineNonOrganic) {
-  PrefService* prefs = profile()->GetPrefs();
-  DCHECK(prefs);
-  prefs->SetString(prefs::kLastPromptedGoogleURL, "http://www.foo.com/");
-
   ResetAndWait(ProfileResetter::DEFAULT_SEARCH_ENGINE, kDistributionConfig);
 
   TemplateURLService* model =
@@ -436,17 +431,11 @@
   EXPECT_EQ(base::ASCIIToUTF16("first"), default_engine->short_name());
   EXPECT_EQ(base::ASCIIToUTF16("firstkey"), default_engine->keyword());
   EXPECT_EQ("http://www.foo.com/s?q={searchTerms}", default_engine->url());
-
-  EXPECT_EQ("", prefs->GetString(prefs::kLastPromptedGoogleURL));
 }
 
 TEST_F(ProfileResetterTest, ResetDefaultSearchEnginePartially) {
   // Search engine's logic is tested by
   // TemplateURLServiceTest.RepairPrepopulatedSearchEngines.
-  PrefService* prefs = profile()->GetPrefs();
-  DCHECK(prefs);
-  prefs->SetString(prefs::kLastPromptedGoogleURL, "http://www.foo.com/");
-
   // Make sure TemplateURLService has loaded.
   ResetAndWait(ProfileResetter::DEFAULT_SEARCH_ENGINE);
 
@@ -458,7 +447,6 @@
   ResetAndWait(ProfileResetter::DEFAULT_SEARCH_ENGINE);
 
   EXPECT_EQ(urls, model->GetTemplateURLs());
-  EXPECT_EQ(std::string(), prefs->GetString(prefs::kLastPromptedGoogleURL));
 }
 
 TEST_F(ProfileResetterTest, ResetHomepageNonOrganic) {
diff --git a/chrome/browser/profiles/profile_manager.cc b/chrome/browser/profiles/profile_manager.cc
index 1eceba9..a7b0fc8 100644
--- a/chrome/browser/profiles/profile_manager.cc
+++ b/chrome/browser/profiles/profile_manager.cc
@@ -1168,12 +1168,16 @@
   if (profile->GetPath().DirName() != cache.GetUserDataDir())
     return;
 
-  if (cache.GetIndexOfProfileWithPath(profile->GetPath()) != std::string::npos)
-    return;
-
   base::string16 username = base::UTF8ToUTF16(profile->GetPrefs()->GetString(
       prefs::kGoogleServicesUsername));
 
+  size_t profile_index = cache.GetIndexOfProfileWithPath(profile->GetPath());
+  if (profile_index != std::string::npos) {
+    // The ProfileInfoCache's username must match the Signin Manager's username.
+    cache.SetUserNameOfProfileAtIndex(profile_index, username);
+    return;
+  }
+
   // Profile name and avatar are set by InitProfileUserPrefs and stored in the
   // profile. Use those values to setup the cache entry.
   base::string16 profile_name =
diff --git a/chrome/browser/resources/chromeos/login/oobe_screen_oauth_enrollment.js b/chrome/browser/resources/chromeos/login/oobe_screen_oauth_enrollment.js
index 7660fc9..f9f7d0c 100644
--- a/chrome/browser/resources/chromeos/login/oobe_screen_oauth_enrollment.js
+++ b/chrome/browser/resources/chromeos/login/oobe_screen_oauth_enrollment.js
@@ -151,6 +151,7 @@
     onBeforeShow: function(data) {
       var url = data.signin_url;
       url += '?gaiaUrl=' + encodeURIComponent(data.gaiaUrl);
+      url += '&needPassword=0';
       this.signInUrl_ = url;
       var modes = ['manual', 'forced', 'auto'];
       for (var i = 0; i < modes.length; ++i) {
diff --git a/chrome/browser/resources/contextual_search/promo.css b/chrome/browser/resources/contextual_search/promo.css
index c82d0bc..d23ba7f 100644
--- a/chrome/browser/resources/contextual_search/promo.css
+++ b/chrome/browser/resources/contextual_search/promo.css
@@ -30,7 +30,7 @@
 
 #container.hide {
   -webkit-transform: scale(0.95);
-  -webkit-transition-duration: 218ms;
+  -webkit-transition-duration: 130ms;
   -webkit-transition-property: opacity, -webkit-transform;
   opacity: 0;
 }
@@ -79,8 +79,11 @@
   }
 }
 
-.label {
+button {
+  background: none;
+  border: none;
   display: inline-block;
+  font-family: 'Roboto2', sans-serif;
   font-size: 14px;
   margin: 14px 0;
   /* We use a slightly different top-bottom padding because Roboto has a
@@ -90,21 +93,21 @@
   white-space: nowrap;
 }
 
-.label a {
+button .caption {
   text-transform: uppercase;
 }
 
-#optin-label {
+#optin-button {
   background: rgb(66, 133, 244);
   background-clip: padding-box;
   border-radius: 3px;
   margin-right: 24px;
 }
 
-#optin-label a {
+#optin-button .caption {
   color: white;
 }
 
-#optout-label a {
+#optout-button .caption {
   color: rgb(66, 133, 244);
 }
diff --git a/chrome/browser/resources/contextual_search/promo.html b/chrome/browser/resources/contextual_search/promo.html
index 03c79c8..502ed45 100644
--- a/chrome/browser/resources/contextual_search/promo.html
+++ b/chrome/browser/resources/contextual_search/promo.html
@@ -14,18 +14,24 @@
 <body>
   <div id="container">
     <img id="header-image" class="portrait" src="header.svg">
-    <p i18n-content="heading" id="heading"></p>
+    <p id="heading" i18n-content="heading"></p>
     <div>
       <img id="header-image" class="landscape" src="header.svg">
       <p id="description">
         <span i18n-content="description-1"></span>
-        <a class="colored-link" href="#learn-more" i18n-content="feature-name"></a>
+        <a class="colored-link" href="#learn-more"
+            i18n-content="feature-name">
+        </a>
         <span i18n-content="description-2"></span>
       </p>
     </div>
     <div id="button-container">
-      <span id="optout-label" class="label"><a href="#optout" i18n-content="optOut"></a></span>
-      <span id="optin-label" class="label"><a href="#optin" i18n-content="optIn"></a></span>
+      <button id="optout-button">
+        <span class="caption" i18n-content="optOut"></span>
+      </button>
+      <button id="optin-button">
+        <span class="caption" i18n-content="optIn"></span>
+      </button>
     </div>
   </div>
 </body>
diff --git a/chrome/browser/resources/contextual_search/promo.js b/chrome/browser/resources/contextual_search/promo.js
index 616acac..85c51c1 100644
--- a/chrome/browser/resources/contextual_search/promo.js
+++ b/chrome/browser/resources/contextual_search/promo.js
@@ -7,6 +7,14 @@
 <include src="../../../../ui/webui/resources/js/load_time_data.js">
 
 /**
+ * The amount of delay to use in the opt-in action in order to give time for
+ * the fade-out animation to execute, before navigating to the opt-in URL,
+ * in milliseconds.
+ * @const
+ */
+var OPT_IN_DELAY_MS = 65;
+
+/**
  * Once the DOM is loaded, determine if the header image is to be kept and
  * register a handler to add the 'hide' class to the container element in order
  * to hide it.
@@ -15,8 +23,14 @@
   if (config['hideHeader']) {
     $('container').removeChild($('header-image'));
   }
-  $('optin-label').addEventListener('click', function() {
+  $('optin-button').addEventListener('click', function() {
     $('container').classList.add('hide');
+    setTimeout(function() {
+      location.hash = 'optin';
+    }, OPT_IN_DELAY_MS);
+  });
+  $('optout-button').addEventListener('click', function() {
+    location.hash = 'optout';
   });
 });
 
diff --git a/chrome/browser/resources/gaia_auth/main.js b/chrome/browser/resources/gaia_auth/main.js
index 05271fb..97107f5 100644
--- a/chrome/browser/resources/gaia_auth/main.js
+++ b/chrome/browser/resources/gaia_auth/main.js
@@ -57,6 +57,7 @@
   // when support for key types other than plain text password is added.
   passwordBytes_: null,
 
+  needPassword_: false,
   chooseWhatToSync_: false,
   skipForNow_: false,
   sessionIndex_: null,
@@ -90,6 +91,7 @@
     this.isConstrainedWindow_ = params.constrained == '1';
     this.initialFrameUrl_ = params.frameUrl || this.constructInitialFrameUrl_();
     this.initialFrameUrlWithoutParams_ = stripParams(this.initialFrameUrl_);
+    this.needPassword_ = params.needPassword == '1';
 
     // For CrOS 'ServiceLogin' we assume that Gaia is loaded if we recieved
     // 'clearOldAttempts' message. For other scenarios Gaia doesn't send this
@@ -377,8 +379,15 @@
     this.sessionIndex_ = msg.sessionIndex;
 
     if (this.passwordBytes_) {
+      // If the credentials passing API was used, login is complete.
       window.parent.postMessage({method: 'samlApiUsed'}, this.parentPage_);
       this.completeLogin_(msg);
+    } else if (!this.needPassword_) {
+      // If the credentials passing API was not used, the password was obtained
+      // by scraping. It must be verified before use. However, the host may not
+      // be interested in the password at all. In that case, verification is
+      // unnecessary and login is complete.
+      this.completeLogin_(msg);
     } else {
       this.supportChannel_.sendWithCallback(
           {name: 'getScrapedPasswords'},
diff --git a/chrome/browser/resources/gaia_auth_host/gaia_auth_host.js b/chrome/browser/resources/gaia_auth_host/gaia_auth_host.js
index cf870cb..5aefaf7 100644
--- a/chrome/browser/resources/gaia_auth_host/gaia_auth_host.js
+++ b/chrome/browser/resources/gaia_auth_host/gaia_auth_host.js
@@ -253,6 +253,7 @@
       populateParams(SUPPORTED_PARAMS, data);
       populateParams(LOCALIZED_STRING_PARAMS, data.localizedStrings);
       params.push('parentPage=' + encodeURIComponent(window.location.origin));
+      params.push('needPassword=1');
 
       var url;
       switch (authMode) {
diff --git a/chrome/browser/resources/plugin_metadata/plugins_mac.json b/chrome/browser/resources/plugin_metadata/plugins_mac.json
index cb424a9..1a91f4a 100644
--- a/chrome/browser/resources/plugin_metadata/plugins_mac.json
+++ b/chrome/browser/resources/plugin_metadata/plugins_mac.json
@@ -1,5 +1,5 @@
 {
-  "x-version": 6,
+  "x-version": 7,
   "google-talk": {
     "mime_types": [
     ],
@@ -115,9 +115,9 @@
     ],
     "versions": [
       {
-        "version": "15.0.0.189",
-        "status": "up_to_date",
-        "reference": "http://helpx.adobe.com/security/products/flash-player/apsb14-22.html"
+        "version": "16.0.0.235",
+        "status": "requires_authorization",
+        "reference": "https://helpx.adobe.com/security/products/flash-player/apsb14-27.html"
       }
     ],
     "lang": "en-US",
@@ -198,8 +198,9 @@
     ],
     "versions": [
       {
-        "version": "7.6.6",
-        "status": "requires_authorization"
+        "version": "7.7.1",
+        "status": "requires_authorization",
+        "reference": "http://support.apple.com/en-us/HT5016"
       }
     ],
     "lang": "en-US",
diff --git a/chrome/browser/resources/plugin_metadata/plugins_win.json b/chrome/browser/resources/plugin_metadata/plugins_win.json
index 5d2229c..2157178 100644
--- a/chrome/browser/resources/plugin_metadata/plugins_win.json
+++ b/chrome/browser/resources/plugin_metadata/plugins_win.json
@@ -1,5 +1,5 @@
 {
-  "x-version": 15,
+  "x-version": 16,
   "google-talk": {
     "mime_types": [
     ],
@@ -137,9 +137,9 @@
     ],
     "versions": [
       {
-        "version": "15.0.0.189",
-        "status": "up_to_date",
-        "reference": "http://helpx.adobe.com/security/products/flash-player/apsb14-22.html"
+        "version": "16.0.0.235",
+        "status": "requires_authorization",
+        "reference": "https://helpx.adobe.com/security/products/flash-player/apsb14-27.html"
       }
     ],
     "lang": "en-US",
@@ -155,9 +155,9 @@
     ],
     "versions": [
       {
-        "version": "12.0.4.144",
+        "version": "12.1.0.150",
         "status": "requires_authorization",
-        "reference": "https://www.adobe.com/support/security/bulletins/apsb13-23.html"
+        "reference": "https://helpx.adobe.com/security/products/shockwave/apsb14-10.html"
       }
     ],
     "lang": "en-US",
@@ -177,18 +177,18 @@
     ],
     "versions": [
       {
-        "version": "10.1.12",
+        "version": "10.1.13",
         "status": "requires_authorization",
-        "reference": "https://helpx.adobe.com/security/products/reader/apsb14-20.html"
+        "reference": "https://helpx.adobe.com/security/products/reader/apsb14-28.html"
       },
       {
         "version": "11",
         "status": "out_of_date"
       },
       {
-        "version": "11.0.9",
+        "version": "11.0.10",
         "status": "requires_authorization",
-        "reference": "https://helpx.adobe.com/security/products/reader/apsb14-20.html"
+        "reference": "https://helpx.adobe.com/security/products/reader/apsb14-28.html"
       }
     ],
     "lang": "en-US",
@@ -252,9 +252,9 @@
     ],
     "versions": [
       {
-        "version": "7.7.5",
+        "version": "7.7.6",
         "status": "requires_authorization",
-        "reference": "http://support.apple.com/kb/HT6151"
+        "reference": "http://support.apple.com/kb/HT203092"
       }
     ],
     "lang": "en-US",
diff --git a/chrome/browser/search/instant_unittest_base.cc b/chrome/browser/search/instant_unittest_base.cc
index 23aa5ed..fe146fa 100644
--- a/chrome/browser/search/instant_unittest_base.cc
+++ b/chrome/browser/search/instant_unittest_base.cc
@@ -14,9 +14,7 @@
 #include "chrome/browser/search/search.h"
 #include "chrome/browser/search_engines/template_url_service_factory.h"
 #include "chrome/browser/search_engines/ui_thread_search_terms_data.h"
-#include "chrome/common/pref_names.h"
 #include "chrome/test/base/browser_with_test_window_test.h"
-#include "chrome/test/base/testing_pref_service_syncable.h"
 #include "chrome/test/base/ui_test_utils.h"
 #include "components/google/core/browser/google_pref_names.h"
 #include "components/google/core/browser/google_url_tracker.h"
@@ -96,9 +94,6 @@
   ui_test_utils::WaitForTemplateURLServiceToLoad(template_url_service_);
 
   UIThreadSearchTermsData::SetGoogleBaseURL("https://www.google.com/");
-  TestingPrefServiceSyncable* pref_service = profile()->GetTestingPrefService();
-  pref_service->SetUserPref(prefs::kLastPromptedGoogleURL,
-                            new base::StringValue("https://www.google.com/"));
   SetUserSelectedDefaultSearchProvider("{google:baseURL}");
   instant_service_ = InstantServiceFactory::GetForProfile(profile());
 }
diff --git a/chrome/browser/speech/tts_message_filter.cc b/chrome/browser/speech/tts_message_filter.cc
index 71c3df0..7550829 100644
--- a/chrome/browser/speech/tts_message_filter.cc
+++ b/chrome/browser/speech/tts_message_filter.cc
@@ -6,7 +6,10 @@
 
 #include "base/bind.h"
 #include "base/logging.h"
+#include "chrome/browser/chrome_notification_types.h"
+#include "chrome/browser/profiles/profile.h"
 #include "content/public/browser/browser_context.h"
+#include "content/public/browser/notification_service.h"
 #include "content/public/browser/render_process_host.h"
 
 using content::BrowserThread;
@@ -20,6 +23,13 @@
   CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
   TtsController::GetInstance()->AddVoicesChangedDelegate(this);
 
+  // TODO(dmazzoni): make it so that we can listen for a BrowserContext
+  // being destroyed rather than a Profile.  http://crbug.com/444668
+  Profile* profile = Profile::FromBrowserContext(browser_context);
+  notification_registrar_.Add(this,
+                              chrome::NOTIFICATION_PROFILE_DESTROYED,
+                              content::Source<Profile>(profile));
+
   // Balanced in OnChannelClosingInUIThread() to keep the ref-count be non-zero
   // until all pointers to this class are invalidated.
   AddRef();
@@ -79,6 +89,9 @@
 
 void TtsMessageFilter::OnInitializeVoiceList() {
   CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  if (!browser_context_)
+    return;
+
   TtsController* tts_controller = TtsController::GetInstance();
   std::vector<VoiceData> voices;
   tts_controller->GetVoices(browser_context_, &voices);
@@ -98,6 +111,8 @@
 
 void TtsMessageFilter::OnSpeak(const TtsUtteranceRequest& request) {
   CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  if (!browser_context_)
+    return;
 
   scoped_ptr<Utterance> utterance(new Utterance(browser_context_));
   utterance->set_src_id(request.id);
@@ -193,3 +208,11 @@
   TtsController::GetInstance()->RemoveVoicesChangedDelegate(this);
   TtsController::GetInstance()->RemoveUtteranceEventDelegate(this);
 }
+
+void TtsMessageFilter::Observe(
+    int type,
+    const content::NotificationSource& source,
+    const content::NotificationDetails& details) {
+  browser_context_ = nullptr;
+  notification_registrar_.RemoveAll();
+}
diff --git a/chrome/browser/speech/tts_message_filter.h b/chrome/browser/speech/tts_message_filter.h
index b44fe9e..54314fc 100644
--- a/chrome/browser/speech/tts_message_filter.h
+++ b/chrome/browser/speech/tts_message_filter.h
@@ -10,6 +10,8 @@
 #include "chrome/browser/speech/tts_controller.h"
 #include "chrome/common/tts_messages.h"
 #include "content/public/browser/browser_message_filter.h"
+#include "content/public/browser/notification_observer.h"
+#include "content/public/browser/notification_registrar.h"
 
 namespace content {
 class BrowserContext;
@@ -17,6 +19,7 @@
 
 class TtsMessageFilter
     : public content::BrowserMessageFilter,
+      public content::NotificationObserver,
       public UtteranceEventDelegate,
       public VoicesChangedDelegate {
  public:
@@ -59,10 +62,16 @@
   // about to be deleted.
   bool Valid();
 
+  // content::NotificationObserver implementation.
+  void Observe(int type,
+               const content::NotificationSource& source,
+               const content::NotificationDetails& details) override;
+
   int render_process_id_;
   content::BrowserContext* browser_context_;
   mutable base::Lock mutex_;
   mutable bool valid_;
+  content::NotificationRegistrar notification_registrar_;
 
   DISALLOW_COPY_AND_ASSIGN(TtsMessageFilter);
 };
diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc
index 4eb9f58..642f19b 100644
--- a/chrome/browser/ui/browser.cc
+++ b/chrome/browser/ui/browser.cc
@@ -154,7 +154,6 @@
 #include "components/bookmarks/browser/bookmark_model.h"
 #include "components/bookmarks/browser/bookmark_utils.h"
 #include "components/content_settings/core/browser/host_content_settings_map.h"
-#include "components/google/core/browser/google_url_tracker.h"
 #include "components/search/search.h"
 #include "components/startup_metric_utils/startup_metric_utils.h"
 #include "components/web_modal/popup_manager.h"
diff --git a/chrome/browser/ui/browser_navigator.cc b/chrome/browser/ui/browser_navigator.cc
index 9d12d45..e0e1c93 100644
--- a/chrome/browser/ui/browser_navigator.cc
+++ b/chrome/browser/ui/browser_navigator.cc
@@ -30,7 +30,6 @@
 #include "chrome/browser/ui/tab_helpers.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/common/url_constants.h"
-#include "components/google/core/browser/google_url_tracker.h"
 #include "content/public/browser/browser_url_handler.h"
 #include "content/public/browser/navigation_entry.h"
 #include "content/public/browser/notification_service.h"
diff --git a/chrome/browser/ui/cocoa/browser_window_controller_browsertest.mm b/chrome/browser/ui/cocoa/browser_window_controller_browsertest.mm
index 4852517..3215691 100644
--- a/chrome/browser/ui/cocoa/browser_window_controller_browsertest.mm
+++ b/chrome/browser/ui/cocoa/browser_window_controller_browsertest.mm
@@ -491,36 +491,37 @@
   EXPECT_TRUE([controller() hasToolbar]);
   EXPECT_FALSE([controller() isBookmarkBarVisible]);
 
-  NSRect defaultAlertFrame = NSMakeRect(0, 0, 300, 200);
-  id sheet = MockWindowWithFrame(defaultAlertFrame);
+  id sheet = MockWindowWithFrame(NSMakeRect(0, 0, 300, 200));
   NSWindow* window = browser()->window()->GetNativeWindow();
-  NSRect alertFrame = [controller() window:window
-                         willPositionSheet:nil
-                                 usingRect:defaultAlertFrame];
+  NSRect contentFrame = [[window contentView] frame];
+  NSRect defaultLocation =
+      NSMakeRect(0, NSMaxY(contentFrame), NSWidth(contentFrame), 0);
+
+  NSRect sheetLocation = [controller() window:window
+                            willPositionSheet:nil
+                                    usingRect:defaultLocation];
   NSRect toolbarFrame = [[[controller() toolbarController] view] frame];
-  EXPECT_EQ(NSMinY(alertFrame), NSMinY(toolbarFrame));
+  EXPECT_EQ(NSMinY(toolbarFrame), NSMinY(sheetLocation));
 
   // Open sheet with normal browser window, persistent bookmark bar.
   chrome::ToggleBookmarkBarWhenVisible(browser()->profile());
   EXPECT_TRUE([controller() isBookmarkBarVisible]);
-  alertFrame = [controller() window:window
-                  willPositionSheet:sheet
-                          usingRect:defaultAlertFrame];
+  sheetLocation = [controller() window:window
+                     willPositionSheet:sheet
+                             usingRect:defaultLocation];
   NSRect bookmarkBarFrame = [[[controller() bookmarkBarController] view] frame];
-  EXPECT_EQ(NSMinY(alertFrame), NSMinY(bookmarkBarFrame));
+  EXPECT_EQ(NSMinY(bookmarkBarFrame), NSMinY(sheetLocation));
 
   // If the sheet is too large, it should be positioned at the top of the
   // window.
-  defaultAlertFrame = NSMakeRect(0, 0, 300, 2000);
-  sheet = MockWindowWithFrame(defaultAlertFrame);
-  alertFrame = [controller() window:window
-                  willPositionSheet:sheet
-                          usingRect:defaultAlertFrame];
-  EXPECT_EQ(NSMinY(alertFrame), NSHeight([window frame]));
+  sheet = MockWindowWithFrame(NSMakeRect(0, 0, 300, 2000));
+  sheetLocation = [controller() window:window
+                     willPositionSheet:sheet
+                             usingRect:defaultLocation];
+  EXPECT_EQ(NSHeight([window frame]), NSMinY(sheetLocation));
 
   // Reset the sheet's size.
-  defaultAlertFrame = NSMakeRect(0, 0, 300, 200);
-  sheet = MockWindowWithFrame(defaultAlertFrame);
+  sheet = MockWindowWithFrame(NSMakeRect(0, 0, 300, 200));
 
   // Make sure the profile does not have the bookmark visible so that
   // we'll create the shortcut window without the bookmark bar.
@@ -541,12 +542,10 @@
 
   // Open sheet in an application window.
   [popupController showWindow:nil];
-  alertFrame = [popupController window:popupWindow
-                     willPositionSheet:sheet
-                             usingRect:defaultAlertFrame];
-  EXPECT_EQ(NSMinY(alertFrame),
-            NSHeight([[popupWindow contentView] frame]) -
-            defaultAlertFrame.size.height);
+  sheetLocation = [popupController window:popupWindow
+                        willPositionSheet:sheet
+                                usingRect:defaultLocation];
+  EXPECT_EQ(NSHeight([[popupWindow contentView] frame]), NSMinY(sheetLocation));
 
   // Close the application window.
   popup_browser->tab_strip_model()->CloseSelectedTabs();
diff --git a/chrome/browser/ui/cocoa/browser_window_controller_private.mm b/chrome/browser/ui/cocoa/browser_window_controller_private.mm
index 6ab1544..f9ba68f 100644
--- a/chrome/browser/ui/cocoa/browser_window_controller_private.mm
+++ b/chrome/browser/ui/cocoa/browser_window_controller_private.mm
@@ -171,35 +171,26 @@
 
 - (NSRect)window:(NSWindow*)window
 willPositionSheet:(NSWindow*)sheet
-       usingRect:(NSRect)defaultSheetRect {
+       usingRect:(NSRect)defaultSheetLocation {
   // Position the sheet as follows:
+  //  - If the bookmark bar is shown (attached to the normal toolbar), position
+  //    the sheet below the bookmark bar.
   //  - If the bookmark bar is hidden or shown as a bubble (on the NTP when the
   //    bookmark bar is disabled), position the sheet immediately below the
   //    normal toolbar.
-  //  - If the bookmark bar is shown (attached to the normal toolbar), position
-  //    the sheet below the bookmark bar.
   //  - If the bookmark bar is currently animating, position the sheet according
   //    to where the bar will be when the animation ends.
-  CGFloat defaultSheetY = defaultSheetRect.origin.y;
-  switch ([bookmarkBarController_ currentState]) {
-    case BookmarkBar::SHOW: {
-      NSRect bookmarkBarFrame = [[bookmarkBarController_ view] frame];
-      defaultSheetY = bookmarkBarFrame.origin.y;
-      break;
-    }
-    case BookmarkBar::HIDDEN:
-    case BookmarkBar::DETACHED: {
-      if ([self hasToolbar]) {
-        NSRect toolbarFrame = [[toolbarController_ view] frame];
-        defaultSheetY = toolbarFrame.origin.y;
-      } else {
-        // The toolbar is not shown in application mode. The sheet should be
-        // located at the top of the window, under the title of the window.
-        defaultSheetY = NSHeight([[window contentView] frame]) -
-                        defaultSheetRect.size.height;
-      }
-      break;
-    }
+  CGFloat defaultSheetY = defaultSheetLocation.origin.y;
+  if ([self supportsBookmarkBar] &&
+      [bookmarkBarController_ currentState] == BookmarkBar::SHOW) {
+    defaultSheetY = NSMinY([[bookmarkBarController_ view] frame]);
+  } else if ([self hasToolbar]) {
+    defaultSheetY = NSMinY([[toolbarController_ view] frame]);
+  } else {
+    // The toolbar is not shown in popup and application modes. The sheet
+    // should be located at the top of the window, under the title of the
+    // window.
+    defaultSheetY = NSMaxY([[window contentView] frame]);
   }
 
   // AppKit may shift the window up to fit the sheet on screen, but it will
@@ -217,8 +208,8 @@
   CGFloat windowHeight = NSHeight([window frame]);
   defaultSheetY = std::min(defaultSheetY, windowHeight);
 
-  defaultSheetRect.origin.y = defaultSheetY;
-  return defaultSheetRect;
+  defaultSheetLocation.origin.y = defaultSheetY;
+  return defaultSheetLocation;
 }
 
 - (void)layoutSubviews {
diff --git a/chrome/browser/ui/navigation_correction_tab_observer.cc b/chrome/browser/ui/navigation_correction_tab_observer.cc
index 53c4326..d59f3e9 100644
--- a/chrome/browser/ui/navigation_correction_tab_observer.cc
+++ b/chrome/browser/ui/navigation_correction_tab_observer.cc
@@ -41,6 +41,10 @@
   GoogleURLTracker* google_url_tracker =
       GoogleURLTrackerFactory::GetForProfile(profile_);
   if (google_url_tracker) {
+    if (google_util::IsGoogleDomainUrl(GetNavigationCorrectionURL(),
+                                       google_util::ALLOW_SUBDOMAIN,
+                                       google_util::ALLOW_NON_STANDARD_PORTS))
+      google_url_tracker->RequestServerCheck(false);
     google_url_updated_subscription_ = google_url_tracker->RegisterCallback(
         base::Bind(&NavigationCorrectionTabObserver::OnGoogleURLUpdated,
                    base::Unretained(this)));
diff --git a/chrome/browser/ui/omnibox/omnibox_edit_model.cc b/chrome/browser/ui/omnibox/omnibox_edit_model.cc
index 1fa637d..981b3d0 100644
--- a/chrome/browser/ui/omnibox/omnibox_edit_model.cc
+++ b/chrome/browser/ui/omnibox/omnibox_edit_model.cc
@@ -26,7 +26,6 @@
 #include "chrome/browser/command_updater.h"
 #include "chrome/browser/extensions/api/omnibox/omnibox_api.h"
 #include "chrome/browser/favicon/favicon_tab_helper.h"
-#include "chrome/browser/google/google_url_tracker_factory.h"
 #include "chrome/browser/net/predictor.h"
 #include "chrome/browser/omnibox/omnibox_log.h"
 #include "chrome/browser/predictors/autocomplete_action_predictor.h"
@@ -53,7 +52,6 @@
 #include "chrome/common/pref_names.h"
 #include "chrome/common/url_constants.h"
 #include "components/bookmarks/browser/bookmark_model.h"
-#include "components/google/core/browser/google_url_tracker.h"
 #include "components/metrics/proto/omnibox_event.pb.h"
 #include "components/omnibox/autocomplete_provider.h"
 #include "components/omnibox/keyword_provider.h"
@@ -688,17 +686,6 @@
     match.transition = ui::PAGE_TRANSITION_LINK;
   }
 
-  TemplateURLService* service =
-      TemplateURLServiceFactory::GetForProfile(profile_);
-  const TemplateURL* template_url = match.GetTemplateURL(service, false);
-  if (template_url && template_url->url_ref().HasGoogleBaseURLs(
-          UIThreadSearchTermsData(profile_))) {
-    GoogleURLTracker* tracker =
-        GoogleURLTrackerFactory::GetForProfile(profile_);
-    if (tracker)
-      tracker->SearchCommitted();
-  }
-
   DCHECK(popup_model());
   view_->OpenMatch(match, disposition, alternate_nav_url, base::string16(),
                    popup_model()->selected_line());
diff --git a/chrome/browser/ui/search/instant_extended_interactive_uitest.cc b/chrome/browser/ui/search/instant_extended_interactive_uitest.cc
index ba6d84c..a32a573 100644
--- a/chrome/browser/ui/search/instant_extended_interactive_uitest.cc
+++ b/chrome/browser/ui/search/instant_extended_interactive_uitest.cc
@@ -50,7 +50,6 @@
 #include "chrome/test/base/ui_test_utils.h"
 #include "components/bookmarks/browser/bookmark_utils.h"
 #include "components/bookmarks/test/bookmark_test_helpers.h"
-#include "components/google/core/browser/google_url_tracker.h"
 #include "components/history/core/browser/history_types.h"
 #include "components/history/core/common/thumbnail_score.h"
 #include "components/omnibox/autocomplete_match.h"
diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi
index 5925de3..25ea9d1 100644
--- a/chrome/chrome_browser.gypi
+++ b/chrome/chrome_browser.gypi
@@ -440,8 +440,6 @@
       'browser/google/google_update_win.h',
       'browser/google/google_url_tracker_factory.cc',
       'browser/google/google_url_tracker_factory.h',
-      'browser/google/google_url_tracker_navigation_helper_impl.cc',
-      'browser/google/google_url_tracker_navigation_helper_impl.h',
       'browser/google/google_brand.cc',
       'browser/google/google_brand.h',
       'browser/google/google_brand_chromeos.cc',
@@ -2730,8 +2728,6 @@
       'browser/google/google_update_win.h',
       'browser/google/google_url_tracker_factory.cc',
       'browser/google/google_url_tracker_factory.h',
-      'browser/google/google_url_tracker_navigation_helper_impl.cc',
-      'browser/google/google_url_tracker_navigation_helper_impl.h',
       'browser/net/spdyproxy/data_reduction_proxy_settings_ios.cc',
       'browser/net/spdyproxy/data_reduction_proxy_settings_ios.h',
       'browser/rlz/rlz.h',
diff --git a/chrome/renderer/autofill/password_generation_agent_browsertest.cc b/chrome/renderer/autofill/password_generation_agent_browsertest.cc
index 4415771..529bdd8 100644
--- a/chrome/renderer/autofill/password_generation_agent_browsertest.cc
+++ b/chrome/renderer/autofill/password_generation_agent_browsertest.cc
@@ -10,6 +10,7 @@
 #include "chrome/test/base/chrome_render_view_test.h"
 #include "components/autofill/content/common/autofill_messages.h"
 #include "components/autofill/content/renderer/autofill_agent.h"
+#include "components/autofill/content/renderer/form_autofill_util.h"
 #include "components/autofill/content/renderer/test_password_generation_agent.h"
 #include "components/autofill/core/common/form_data.h"
 #include "components/autofill/core/common/password_generation_util.h"
@@ -44,12 +45,23 @@
     password_generation_->OnMessageReceived(msg);
   }
 
-  void SetAccountCreationFormsDetectedMessage(const char* form_str) {
-    autofill::FormData form;
-    form.origin =
-        GURL(base::StringPrintf("data:text/html;charset=utf-8,%s", form_str));
+  // Sends a message that the |form_index| form on the page is valid for
+  // account creation.
+  void SetAccountCreationFormsDetectedMessage(int form_index) {
+    WebDocument document = GetMainFrame()->document();
+    blink::WebVector<blink::WebFormElement> web_forms;
+    document.forms(web_forms);
+
+    autofill::FormData form_data;
+    WebFormElementToFormData(web_forms[form_index],
+                             blink::WebFormControlElement(),
+                             REQUIRE_NONE,
+                             EXTRACT_NONE,
+                             &form_data,
+                             NULL /* FormFieldData */);
+
     std::vector<autofill::FormData> forms;
-    forms.push_back(form);
+    forms.push_back(form_data);
     AutofillMsg_AccountCreationFormsDetected msg(0, forms);
     password_generation_->OnMessageReceived(msg);
   }
@@ -110,6 +122,22 @@
     "  <INPUT type = 'submit' value = 'LOGIN' />"
     "</FORM>";
 
+const char kMultipleAccountCreationFormHTML[] =
+    "<FORM name = 'login' action = 'http://www.random.com/'> "
+    "  <INPUT type = 'text' id = 'random'/> "
+    "  <INPUT type = 'text' id = 'username'/> "
+    "  <INPUT type = 'password' id = 'password'/> "
+    "  <INPUT type = 'submit' value = 'LOGIN' />"
+    "</FORM>"
+    "<FORM name = 'signup' action = 'http://www.random.com/signup'> "
+    "  <INPUT type = 'text' id = 'username'/> "
+    "  <INPUT type = 'password' id = 'first_password' "
+    "         autocomplete = 'off' size = 5/>"
+    "  <INPUT type = 'password' id = 'second_password' size = 5/> "
+    "  <INPUT type = 'text' id = 'address'/> "
+    "  <INPUT type = 'submit' value = 'LOGIN' />"
+    "</FORM>";
+
 const char ChangeDetectionScript[] =
     "<script>"
     "  firstOnChangeCalled = false;"
@@ -136,20 +164,19 @@
   // ACCOUNT_CREATION_FORM form Autofill server. We should show the icon.
   LoadHTML(kAccountCreationFormHTML);
   SetNotBlacklistedMessage(kAccountCreationFormHTML);
-  SetAccountCreationFormsDetectedMessage(kAccountCreationFormHTML);
+  SetAccountCreationFormsDetectedMessage(0);
   ExpectPasswordGenerationAvailable("first_password", true);
 
   // Hidden fields are not treated differently.
   LoadHTML(kHiddenPasswordAccountCreationFormHTML);
   SetNotBlacklistedMessage(kHiddenPasswordAccountCreationFormHTML);
-  SetAccountCreationFormsDetectedMessage(
-      kHiddenPasswordAccountCreationFormHTML);
+  SetAccountCreationFormsDetectedMessage(0);
   ExpectPasswordGenerationAvailable("first_password", true);
 
   // This doesn't trigger because the form action is invalid.
   LoadHTML(kInvalidActionAccountCreationFormHTML);
   SetNotBlacklistedMessage(kInvalidActionAccountCreationFormHTML);
-  SetAccountCreationFormsDetectedMessage(kInvalidActionAccountCreationFormHTML);
+  SetAccountCreationFormsDetectedMessage(0);
   ExpectPasswordGenerationAvailable("first_password", false);
 }
 
@@ -158,6 +185,8 @@
   std::string html = std::string(kAccountCreationFormHTML) +
       ChangeDetectionScript;
   LoadHTML(html.c_str());
+  SetNotBlacklistedMessage(html.c_str());
+  SetAccountCreationFormsDetectedMessage(0);
 
   WebDocument document = GetMainFrame()->document();
   WebElement element =
@@ -207,7 +236,7 @@
 TEST_F(PasswordGenerationAgentTest, EditingTest) {
   LoadHTML(kAccountCreationFormHTML);
   SetNotBlacklistedMessage(kAccountCreationFormHTML);
-  SetAccountCreationFormsDetectedMessage(kAccountCreationFormHTML);
+  SetAccountCreationFormsDetectedMessage(0);
 
   WebDocument document = GetMainFrame()->document();
   WebElement element =
@@ -256,21 +285,21 @@
   // Did not receive not blacklisted message. Don't show password generation
   // icon.
   LoadHTML(kAccountCreationFormHTML);
-  SetAccountCreationFormsDetectedMessage(kAccountCreationFormHTML);
+  SetAccountCreationFormsDetectedMessage(0);
   ExpectPasswordGenerationAvailable("first_password", false);
 
   // Receive one not blacklisted message for non account creation form. Don't
   // show password generation icon.
   LoadHTML(kAccountCreationFormHTML);
   SetNotBlacklistedMessage(kSigninFormHTML);
-  SetAccountCreationFormsDetectedMessage(kAccountCreationFormHTML);
+  SetAccountCreationFormsDetectedMessage(0);
   ExpectPasswordGenerationAvailable("first_password", false);
 
   // Receive one not blackliste message for account creation form. Show password
   // generation icon.
   LoadHTML(kAccountCreationFormHTML);
   SetNotBlacklistedMessage(kAccountCreationFormHTML);
-  SetAccountCreationFormsDetectedMessage(kAccountCreationFormHTML);
+  SetAccountCreationFormsDetectedMessage(0);
   ExpectPasswordGenerationAvailable("first_password", true);
 
   // Receive two not blacklisted messages, one is for account creation form and
@@ -278,7 +307,7 @@
   LoadHTML(kAccountCreationFormHTML);
   SetNotBlacklistedMessage(kAccountCreationFormHTML);
   SetNotBlacklistedMessage(kSigninFormHTML);
-  SetAccountCreationFormsDetectedMessage(kAccountCreationFormHTML);
+  SetAccountCreationFormsDetectedMessage(0);
   ExpectPasswordGenerationAvailable("first_password", true);
 }
 
@@ -293,7 +322,7 @@
   // generation icon.
   LoadHTML(kAccountCreationFormHTML);
   SetNotBlacklistedMessage(kAccountCreationFormHTML);
-  SetAccountCreationFormsDetectedMessage(kAccountCreationFormHTML);
+  SetAccountCreationFormsDetectedMessage(0);
   ExpectPasswordGenerationAvailable("first_password", true);
 }
 
@@ -302,7 +331,7 @@
 
   LoadHTML(kAccountCreationFormHTML);
   SetNotBlacklistedMessage(kAccountCreationFormHTML);
-  SetAccountCreationFormsDetectedMessage(kAccountCreationFormHTML);
+  SetAccountCreationFormsDetectedMessage(0);
   ExpectPasswordGenerationAvailable("first_password", true);
 
   WebDocument document = GetMainFrame()->document();
@@ -386,7 +415,6 @@
 TEST_F(PasswordGenerationAgentTest, DynamicFormTest) {
   LoadHTML(kSigninFormHTML);
   SetNotBlacklistedMessage(kSigninFormHTML);
-  SetAccountCreationFormsDetectedMessage(kSigninFormHTML);
 
   ExecuteJavaScript(
       "var form = document.createElement('form');"
@@ -406,6 +434,10 @@
       "form.appendChild(second_password);"
       "document.body.appendChild(form);");
   ProcessPendingMessages();
+
+  // This needs to come after the DOM has been modified.
+  SetAccountCreationFormsDetectedMessage(1);
+
   // TODO(gcasto): I'm slighty worried about flakes in this test where
   // didAssociateFormControls() isn't called. If this turns out to be a problem
   // adding a call to OnDynamicFormsSeen(GetMainFrame()) will fix it, though
@@ -413,4 +445,19 @@
   ExpectPasswordGenerationAvailable("first_password", true);
 }
 
+TEST_F(PasswordGenerationAgentTest, MultiplePasswordFormsTest) {
+  // If two forms on the page looks like possible account creation forms, make
+  // sure to trigger on the one that is specified from Autofill.
+  LoadHTML(kMultipleAccountCreationFormHTML);
+  SetNotBlacklistedMessage(kMultipleAccountCreationFormHTML);
+
+  // Should trigger on the second form.
+  SetAccountCreationFormsDetectedMessage(1);
+
+  ExpectPasswordGenerationAvailable("password", false);
+
+  // TODO(gcasto): Enable this check once we examine multiple heuristic matches.
+  //ExpectPasswordGenerationAvailable("first_password", true);
+}
+
 }  // namespace autofill
diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer/chrome_content_renderer_client.cc
index c75b90c..8a0342e 100644
--- a/chrome/renderer/chrome_content_renderer_client.cc
+++ b/chrome/renderer/chrome_content_renderer_client.cc
@@ -177,11 +177,6 @@
   "6EAED1924DB611B6EEF2A664BD077BE7EAD33B8F",  // see crbug.com/383937
   "4EB74897CB187C7633357C2FE832E0AD6A44883A"   // see crbug.com/383937
 };
-
-const char* const kPredefinedAllowedVideoDecodeOrigins[] = {
-  "6EAED1924DB611B6EEF2A664BD077BE7EAD33B8F",  // see crbug.com/383937
-  "4EB74897CB187C7633357C2FE832E0AD6A44883A"   // see crbug.com/383937
-};
 #endif
 
 static void AppendParams(const std::vector<base::string16>& additional_names,
@@ -279,9 +274,6 @@
 #if defined(ENABLE_PLUGINS)
   for (size_t i = 0; i < arraysize(kPredefinedAllowedCompositorOrigins); ++i)
     allowed_compositor_origins_.insert(kPredefinedAllowedCompositorOrigins[i]);
-  for (size_t i = 0; i < arraysize(kPredefinedAllowedVideoDecodeOrigins); ++i)
-    allowed_video_decode_origins_.insert(
-        kPredefinedAllowedVideoDecodeOrigins[i]);
 #endif
 }
 
@@ -1570,23 +1562,6 @@
 #endif
 }
 
-bool ChromeContentRendererClient::IsPluginAllowedToUseVideoDecodeAPI(
-    const GURL& url) {
-#if defined(ENABLE_PLUGINS) && defined(ENABLE_EXTENSIONS)
-  if (CommandLine::ForCurrentProcess()->HasSwitch(
-          switches::kEnablePepperTesting))
-    return true;
-
-  if (IsExtensionOrSharedModuleWhitelisted(url, allowed_video_decode_origins_))
-    return true;
-
-  chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel();
-  return channel <= chrome::VersionInfo::CHANNEL_DEV;
-#else
-  return false;
-#endif
-}
-
 content::BrowserPluginDelegate*
 ChromeContentRendererClient::CreateBrowserPluginDelegate(
     content::RenderFrame* render_frame,
diff --git a/chrome/renderer/chrome_content_renderer_client.h b/chrome/renderer/chrome_content_renderer_client.h
index ac69cad..879dabb 100644
--- a/chrome/renderer/chrome_content_renderer_client.h
+++ b/chrome/renderer/chrome_content_renderer_client.h
@@ -141,7 +141,6 @@
   void AddKeySystems(std::vector<media::KeySystemInfo>* key_systems) override;
   bool IsPluginAllowedToUseDevChannelAPIs() override;
   bool IsPluginAllowedToUseCompositorAPI(const GURL& url) override;
-  bool IsPluginAllowedToUseVideoDecodeAPI(const GURL& url) override;
   content::BrowserPluginDelegate* CreateBrowserPluginDelegate(
       content::RenderFrame* render_frame,
       const std::string& mime_type,
diff --git a/chrome/renderer/resources/mobile_youtube_plugin.html b/chrome/renderer/resources/mobile_youtube_plugin.html
index d2788ff..aa83283 100644
--- a/chrome/renderer/resources/mobile_youtube_plugin.html
+++ b/chrome/renderer/resources/mobile_youtube_plugin.html
@@ -4,7 +4,7 @@
 <meta name="viewport" content="width=device-width, user-scalable=no">
 <script>
 function insertBackground() {
-  var video = templateData['video_id'];
+  var video = loadTimeData.getValue("video_id");
   document.body.style.backgroundImage = "url('http://img.youtube.com/vi/" + video + "/0.jpg')";
 }
 </script>
diff --git a/components/autofill/content/renderer/password_generation_agent.cc b/components/autofill/content/renderer/password_generation_agent.cc
index 4ed7c7c..2d7f0b5 100644
--- a/components/autofill/content/renderer/password_generation_agent.cc
+++ b/components/autofill/content/renderer/password_generation_agent.cc
@@ -69,21 +69,11 @@
   return std::find(urls.begin(), urls.end(), url) != urls.end();
 }
 
-// Returns true if the |form1| is essentially equal to |form2|.
-bool FormsAreEqual(const autofill::FormData& form1,
-                   const PasswordForm& form2) {
-  // TODO(zysxqn): use more signals than just origin to compare.
-  // Note that FormData strips the fragement from the url while PasswordForm
-  // strips both the fragement and the path, so we can't just compare these
-  // two directly.
-  return form1.origin.GetOrigin() == form2.origin.GetOrigin();
-}
-
 bool ContainsForm(const std::vector<autofill::FormData>& forms,
                   const PasswordForm& form) {
   for (std::vector<autofill::FormData>::const_iterator it =
            forms.begin(); it != forms.end(); ++it) {
-    if (FormsAreEqual(*it, form))
+    if (*it == form.form_data)
       return true;
   }
   return false;
diff --git a/components/components_strings.grd b/components/components_strings.grd
index 7cc8583..fad1fb7 100644
--- a/components/components_strings.grd
+++ b/components/components_strings.grd
@@ -172,7 +172,6 @@
       <part file="bookmark_bar_strings.grdp" />
       <part file="dom_distiller_strings.grdp" />
       <part file="error_page_strings.grdp" />
-      <part file="google_strings.grdp" />
       <part file="omnibox_strings.grdp" />
       <part file="pdf_strings.grdp" />
       <part file="policy_strings.grdp" />
diff --git a/components/components_strings.target.darwin-arm.mk b/components/components_strings.target.darwin-arm.mk
index fb6360c..e68a742 100644
--- a/components/components_strings.target.darwin-arm.mk
+++ b/components/components_strings.target.darwin-arm.mk
@@ -20,7 +20,7 @@
 $(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/components/components_strings.grd $(LOCAL_PATH)/components/app_modal_dialogs_strings.grdp $(LOCAL_PATH)/components/autofill_strings.grdp $(LOCAL_PATH)/components/bookmark_bar_strings.grdp $(LOCAL_PATH)/components/dom_distiller_strings.grdp $(LOCAL_PATH)/components/error_page_strings.grdp $(LOCAL_PATH)/components/google_strings.grdp $(LOCAL_PATH)/components/omnibox_strings.grdp $(LOCAL_PATH)/components/pdf_strings.grdp $(LOCAL_PATH)/components/policy_strings.grdp $(LOCAL_PATH)/components/strings/components_strings_am.xtb $(LOCAL_PATH)/components/strings/components_strings_ar.xtb $(LOCAL_PATH)/components/strings/components_strings_bg.xtb $(LOCAL_PATH)/components/strings/components_strings_bn.xtb $(LOCAL_PATH)/components/strings/components_strings_ca.xtb $(LOCAL_PATH)/components/strings/components_strings_cs.xtb $(LOCAL_PATH)/components/strings/components_strings_da.xtb $(LOCAL_PATH)/components/strings/components_strings_de.xtb $(LOCAL_PATH)/components/strings/components_strings_el.xtb $(LOCAL_PATH)/components/strings/components_strings_en-GB.xtb $(LOCAL_PATH)/components/strings/components_strings_es-419.xtb $(LOCAL_PATH)/components/strings/components_strings_es.xtb $(LOCAL_PATH)/components/strings/components_strings_et.xtb $(LOCAL_PATH)/components/strings/components_strings_fa.xtb $(LOCAL_PATH)/components/strings/components_strings_fi.xtb $(LOCAL_PATH)/components/strings/components_strings_fil.xtb $(LOCAL_PATH)/components/strings/components_strings_fr.xtb $(LOCAL_PATH)/components/strings/components_strings_gu.xtb $(LOCAL_PATH)/components/strings/components_strings_hi.xtb $(LOCAL_PATH)/components/strings/components_strings_hr.xtb $(LOCAL_PATH)/components/strings/components_strings_hu.xtb $(LOCAL_PATH)/components/strings/components_strings_id.xtb $(LOCAL_PATH)/components/strings/components_strings_it.xtb $(LOCAL_PATH)/components/strings/components_strings_iw.xtb $(LOCAL_PATH)/components/strings/components_strings_ja.xtb $(LOCAL_PATH)/components/strings/components_strings_kn.xtb $(LOCAL_PATH)/components/strings/components_strings_ko.xtb $(LOCAL_PATH)/components/strings/components_strings_lt.xtb $(LOCAL_PATH)/components/strings/components_strings_lv.xtb $(LOCAL_PATH)/components/strings/components_strings_ml.xtb $(LOCAL_PATH)/components/strings/components_strings_mr.xtb $(LOCAL_PATH)/components/strings/components_strings_ms.xtb $(LOCAL_PATH)/components/strings/components_strings_nl.xtb $(LOCAL_PATH)/components/strings/components_strings_no.xtb $(LOCAL_PATH)/components/strings/components_strings_pl.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-BR.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-PT.xtb $(LOCAL_PATH)/components/strings/components_strings_ro.xtb $(LOCAL_PATH)/components/strings/components_strings_ru.xtb $(LOCAL_PATH)/components/strings/components_strings_sk.xtb $(LOCAL_PATH)/components/strings/components_strings_sl.xtb $(LOCAL_PATH)/components/strings/components_strings_sr.xtb $(LOCAL_PATH)/components/strings/components_strings_sv.xtb $(LOCAL_PATH)/components/strings/components_strings_sw.xtb $(LOCAL_PATH)/components/strings/components_strings_ta.xtb $(LOCAL_PATH)/components/strings/components_strings_te.xtb $(LOCAL_PATH)/components/strings/components_strings_th.xtb $(LOCAL_PATH)/components/strings/components_strings_tr.xtb $(LOCAL_PATH)/components/strings/components_strings_uk.xtb $(LOCAL_PATH)/components/strings/components_strings_vi.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-CN.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-TW.xtb $(LOCAL_PATH)/components/translate_strings.grdp $(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)/components/strings/grit/components_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/components/components_strings.grd $(LOCAL_PATH)/components/app_modal_dialogs_strings.grdp $(LOCAL_PATH)/components/autofill_strings.grdp $(LOCAL_PATH)/components/bookmark_bar_strings.grdp $(LOCAL_PATH)/components/dom_distiller_strings.grdp $(LOCAL_PATH)/components/error_page_strings.grdp $(LOCAL_PATH)/components/omnibox_strings.grdp $(LOCAL_PATH)/components/pdf_strings.grdp $(LOCAL_PATH)/components/policy_strings.grdp $(LOCAL_PATH)/components/strings/components_strings_am.xtb $(LOCAL_PATH)/components/strings/components_strings_ar.xtb $(LOCAL_PATH)/components/strings/components_strings_bg.xtb $(LOCAL_PATH)/components/strings/components_strings_bn.xtb $(LOCAL_PATH)/components/strings/components_strings_ca.xtb $(LOCAL_PATH)/components/strings/components_strings_cs.xtb $(LOCAL_PATH)/components/strings/components_strings_da.xtb $(LOCAL_PATH)/components/strings/components_strings_de.xtb $(LOCAL_PATH)/components/strings/components_strings_el.xtb $(LOCAL_PATH)/components/strings/components_strings_en-GB.xtb $(LOCAL_PATH)/components/strings/components_strings_es-419.xtb $(LOCAL_PATH)/components/strings/components_strings_es.xtb $(LOCAL_PATH)/components/strings/components_strings_et.xtb $(LOCAL_PATH)/components/strings/components_strings_fa.xtb $(LOCAL_PATH)/components/strings/components_strings_fi.xtb $(LOCAL_PATH)/components/strings/components_strings_fil.xtb $(LOCAL_PATH)/components/strings/components_strings_fr.xtb $(LOCAL_PATH)/components/strings/components_strings_gu.xtb $(LOCAL_PATH)/components/strings/components_strings_hi.xtb $(LOCAL_PATH)/components/strings/components_strings_hr.xtb $(LOCAL_PATH)/components/strings/components_strings_hu.xtb $(LOCAL_PATH)/components/strings/components_strings_id.xtb $(LOCAL_PATH)/components/strings/components_strings_it.xtb $(LOCAL_PATH)/components/strings/components_strings_iw.xtb $(LOCAL_PATH)/components/strings/components_strings_ja.xtb $(LOCAL_PATH)/components/strings/components_strings_kn.xtb $(LOCAL_PATH)/components/strings/components_strings_ko.xtb $(LOCAL_PATH)/components/strings/components_strings_lt.xtb $(LOCAL_PATH)/components/strings/components_strings_lv.xtb $(LOCAL_PATH)/components/strings/components_strings_ml.xtb $(LOCAL_PATH)/components/strings/components_strings_mr.xtb $(LOCAL_PATH)/components/strings/components_strings_ms.xtb $(LOCAL_PATH)/components/strings/components_strings_nl.xtb $(LOCAL_PATH)/components/strings/components_strings_no.xtb $(LOCAL_PATH)/components/strings/components_strings_pl.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-BR.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-PT.xtb $(LOCAL_PATH)/components/strings/components_strings_ro.xtb $(LOCAL_PATH)/components/strings/components_strings_ru.xtb $(LOCAL_PATH)/components/strings/components_strings_sk.xtb $(LOCAL_PATH)/components/strings/components_strings_sl.xtb $(LOCAL_PATH)/components/strings/components_strings_sr.xtb $(LOCAL_PATH)/components/strings/components_strings_sv.xtb $(LOCAL_PATH)/components/strings/components_strings_sw.xtb $(LOCAL_PATH)/components/strings/components_strings_ta.xtb $(LOCAL_PATH)/components/strings/components_strings_te.xtb $(LOCAL_PATH)/components/strings/components_strings_th.xtb $(LOCAL_PATH)/components/strings/components_strings_tr.xtb $(LOCAL_PATH)/components/strings/components_strings_uk.xtb $(LOCAL_PATH)/components/strings/components_strings_vi.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-CN.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-TW.xtb $(LOCAL_PATH)/components/translate_strings.grdp $(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 components_strings.grd ($@)"
 	$(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/strings/grit $(gyp_shared_intermediate_dir)/components/strings; python ../tools/grit/grit.py -i components_strings.grd build -f ../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/components/strings" -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/components/components_strings.target.darwin-arm64.mk b/components/components_strings.target.darwin-arm64.mk
index fb6360c..e68a742 100644
--- a/components/components_strings.target.darwin-arm64.mk
+++ b/components/components_strings.target.darwin-arm64.mk
@@ -20,7 +20,7 @@
 $(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/components/components_strings.grd $(LOCAL_PATH)/components/app_modal_dialogs_strings.grdp $(LOCAL_PATH)/components/autofill_strings.grdp $(LOCAL_PATH)/components/bookmark_bar_strings.grdp $(LOCAL_PATH)/components/dom_distiller_strings.grdp $(LOCAL_PATH)/components/error_page_strings.grdp $(LOCAL_PATH)/components/google_strings.grdp $(LOCAL_PATH)/components/omnibox_strings.grdp $(LOCAL_PATH)/components/pdf_strings.grdp $(LOCAL_PATH)/components/policy_strings.grdp $(LOCAL_PATH)/components/strings/components_strings_am.xtb $(LOCAL_PATH)/components/strings/components_strings_ar.xtb $(LOCAL_PATH)/components/strings/components_strings_bg.xtb $(LOCAL_PATH)/components/strings/components_strings_bn.xtb $(LOCAL_PATH)/components/strings/components_strings_ca.xtb $(LOCAL_PATH)/components/strings/components_strings_cs.xtb $(LOCAL_PATH)/components/strings/components_strings_da.xtb $(LOCAL_PATH)/components/strings/components_strings_de.xtb $(LOCAL_PATH)/components/strings/components_strings_el.xtb $(LOCAL_PATH)/components/strings/components_strings_en-GB.xtb $(LOCAL_PATH)/components/strings/components_strings_es-419.xtb $(LOCAL_PATH)/components/strings/components_strings_es.xtb $(LOCAL_PATH)/components/strings/components_strings_et.xtb $(LOCAL_PATH)/components/strings/components_strings_fa.xtb $(LOCAL_PATH)/components/strings/components_strings_fi.xtb $(LOCAL_PATH)/components/strings/components_strings_fil.xtb $(LOCAL_PATH)/components/strings/components_strings_fr.xtb $(LOCAL_PATH)/components/strings/components_strings_gu.xtb $(LOCAL_PATH)/components/strings/components_strings_hi.xtb $(LOCAL_PATH)/components/strings/components_strings_hr.xtb $(LOCAL_PATH)/components/strings/components_strings_hu.xtb $(LOCAL_PATH)/components/strings/components_strings_id.xtb $(LOCAL_PATH)/components/strings/components_strings_it.xtb $(LOCAL_PATH)/components/strings/components_strings_iw.xtb $(LOCAL_PATH)/components/strings/components_strings_ja.xtb $(LOCAL_PATH)/components/strings/components_strings_kn.xtb $(LOCAL_PATH)/components/strings/components_strings_ko.xtb $(LOCAL_PATH)/components/strings/components_strings_lt.xtb $(LOCAL_PATH)/components/strings/components_strings_lv.xtb $(LOCAL_PATH)/components/strings/components_strings_ml.xtb $(LOCAL_PATH)/components/strings/components_strings_mr.xtb $(LOCAL_PATH)/components/strings/components_strings_ms.xtb $(LOCAL_PATH)/components/strings/components_strings_nl.xtb $(LOCAL_PATH)/components/strings/components_strings_no.xtb $(LOCAL_PATH)/components/strings/components_strings_pl.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-BR.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-PT.xtb $(LOCAL_PATH)/components/strings/components_strings_ro.xtb $(LOCAL_PATH)/components/strings/components_strings_ru.xtb $(LOCAL_PATH)/components/strings/components_strings_sk.xtb $(LOCAL_PATH)/components/strings/components_strings_sl.xtb $(LOCAL_PATH)/components/strings/components_strings_sr.xtb $(LOCAL_PATH)/components/strings/components_strings_sv.xtb $(LOCAL_PATH)/components/strings/components_strings_sw.xtb $(LOCAL_PATH)/components/strings/components_strings_ta.xtb $(LOCAL_PATH)/components/strings/components_strings_te.xtb $(LOCAL_PATH)/components/strings/components_strings_th.xtb $(LOCAL_PATH)/components/strings/components_strings_tr.xtb $(LOCAL_PATH)/components/strings/components_strings_uk.xtb $(LOCAL_PATH)/components/strings/components_strings_vi.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-CN.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-TW.xtb $(LOCAL_PATH)/components/translate_strings.grdp $(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)/components/strings/grit/components_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/components/components_strings.grd $(LOCAL_PATH)/components/app_modal_dialogs_strings.grdp $(LOCAL_PATH)/components/autofill_strings.grdp $(LOCAL_PATH)/components/bookmark_bar_strings.grdp $(LOCAL_PATH)/components/dom_distiller_strings.grdp $(LOCAL_PATH)/components/error_page_strings.grdp $(LOCAL_PATH)/components/omnibox_strings.grdp $(LOCAL_PATH)/components/pdf_strings.grdp $(LOCAL_PATH)/components/policy_strings.grdp $(LOCAL_PATH)/components/strings/components_strings_am.xtb $(LOCAL_PATH)/components/strings/components_strings_ar.xtb $(LOCAL_PATH)/components/strings/components_strings_bg.xtb $(LOCAL_PATH)/components/strings/components_strings_bn.xtb $(LOCAL_PATH)/components/strings/components_strings_ca.xtb $(LOCAL_PATH)/components/strings/components_strings_cs.xtb $(LOCAL_PATH)/components/strings/components_strings_da.xtb $(LOCAL_PATH)/components/strings/components_strings_de.xtb $(LOCAL_PATH)/components/strings/components_strings_el.xtb $(LOCAL_PATH)/components/strings/components_strings_en-GB.xtb $(LOCAL_PATH)/components/strings/components_strings_es-419.xtb $(LOCAL_PATH)/components/strings/components_strings_es.xtb $(LOCAL_PATH)/components/strings/components_strings_et.xtb $(LOCAL_PATH)/components/strings/components_strings_fa.xtb $(LOCAL_PATH)/components/strings/components_strings_fi.xtb $(LOCAL_PATH)/components/strings/components_strings_fil.xtb $(LOCAL_PATH)/components/strings/components_strings_fr.xtb $(LOCAL_PATH)/components/strings/components_strings_gu.xtb $(LOCAL_PATH)/components/strings/components_strings_hi.xtb $(LOCAL_PATH)/components/strings/components_strings_hr.xtb $(LOCAL_PATH)/components/strings/components_strings_hu.xtb $(LOCAL_PATH)/components/strings/components_strings_id.xtb $(LOCAL_PATH)/components/strings/components_strings_it.xtb $(LOCAL_PATH)/components/strings/components_strings_iw.xtb $(LOCAL_PATH)/components/strings/components_strings_ja.xtb $(LOCAL_PATH)/components/strings/components_strings_kn.xtb $(LOCAL_PATH)/components/strings/components_strings_ko.xtb $(LOCAL_PATH)/components/strings/components_strings_lt.xtb $(LOCAL_PATH)/components/strings/components_strings_lv.xtb $(LOCAL_PATH)/components/strings/components_strings_ml.xtb $(LOCAL_PATH)/components/strings/components_strings_mr.xtb $(LOCAL_PATH)/components/strings/components_strings_ms.xtb $(LOCAL_PATH)/components/strings/components_strings_nl.xtb $(LOCAL_PATH)/components/strings/components_strings_no.xtb $(LOCAL_PATH)/components/strings/components_strings_pl.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-BR.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-PT.xtb $(LOCAL_PATH)/components/strings/components_strings_ro.xtb $(LOCAL_PATH)/components/strings/components_strings_ru.xtb $(LOCAL_PATH)/components/strings/components_strings_sk.xtb $(LOCAL_PATH)/components/strings/components_strings_sl.xtb $(LOCAL_PATH)/components/strings/components_strings_sr.xtb $(LOCAL_PATH)/components/strings/components_strings_sv.xtb $(LOCAL_PATH)/components/strings/components_strings_sw.xtb $(LOCAL_PATH)/components/strings/components_strings_ta.xtb $(LOCAL_PATH)/components/strings/components_strings_te.xtb $(LOCAL_PATH)/components/strings/components_strings_th.xtb $(LOCAL_PATH)/components/strings/components_strings_tr.xtb $(LOCAL_PATH)/components/strings/components_strings_uk.xtb $(LOCAL_PATH)/components/strings/components_strings_vi.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-CN.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-TW.xtb $(LOCAL_PATH)/components/translate_strings.grdp $(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 components_strings.grd ($@)"
 	$(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/strings/grit $(gyp_shared_intermediate_dir)/components/strings; python ../tools/grit/grit.py -i components_strings.grd build -f ../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/components/strings" -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/components/components_strings.target.darwin-mips.mk b/components/components_strings.target.darwin-mips.mk
index fb6360c..e68a742 100644
--- a/components/components_strings.target.darwin-mips.mk
+++ b/components/components_strings.target.darwin-mips.mk
@@ -20,7 +20,7 @@
 $(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/components/components_strings.grd $(LOCAL_PATH)/components/app_modal_dialogs_strings.grdp $(LOCAL_PATH)/components/autofill_strings.grdp $(LOCAL_PATH)/components/bookmark_bar_strings.grdp $(LOCAL_PATH)/components/dom_distiller_strings.grdp $(LOCAL_PATH)/components/error_page_strings.grdp $(LOCAL_PATH)/components/google_strings.grdp $(LOCAL_PATH)/components/omnibox_strings.grdp $(LOCAL_PATH)/components/pdf_strings.grdp $(LOCAL_PATH)/components/policy_strings.grdp $(LOCAL_PATH)/components/strings/components_strings_am.xtb $(LOCAL_PATH)/components/strings/components_strings_ar.xtb $(LOCAL_PATH)/components/strings/components_strings_bg.xtb $(LOCAL_PATH)/components/strings/components_strings_bn.xtb $(LOCAL_PATH)/components/strings/components_strings_ca.xtb $(LOCAL_PATH)/components/strings/components_strings_cs.xtb $(LOCAL_PATH)/components/strings/components_strings_da.xtb $(LOCAL_PATH)/components/strings/components_strings_de.xtb $(LOCAL_PATH)/components/strings/components_strings_el.xtb $(LOCAL_PATH)/components/strings/components_strings_en-GB.xtb $(LOCAL_PATH)/components/strings/components_strings_es-419.xtb $(LOCAL_PATH)/components/strings/components_strings_es.xtb $(LOCAL_PATH)/components/strings/components_strings_et.xtb $(LOCAL_PATH)/components/strings/components_strings_fa.xtb $(LOCAL_PATH)/components/strings/components_strings_fi.xtb $(LOCAL_PATH)/components/strings/components_strings_fil.xtb $(LOCAL_PATH)/components/strings/components_strings_fr.xtb $(LOCAL_PATH)/components/strings/components_strings_gu.xtb $(LOCAL_PATH)/components/strings/components_strings_hi.xtb $(LOCAL_PATH)/components/strings/components_strings_hr.xtb $(LOCAL_PATH)/components/strings/components_strings_hu.xtb $(LOCAL_PATH)/components/strings/components_strings_id.xtb $(LOCAL_PATH)/components/strings/components_strings_it.xtb $(LOCAL_PATH)/components/strings/components_strings_iw.xtb $(LOCAL_PATH)/components/strings/components_strings_ja.xtb $(LOCAL_PATH)/components/strings/components_strings_kn.xtb $(LOCAL_PATH)/components/strings/components_strings_ko.xtb $(LOCAL_PATH)/components/strings/components_strings_lt.xtb $(LOCAL_PATH)/components/strings/components_strings_lv.xtb $(LOCAL_PATH)/components/strings/components_strings_ml.xtb $(LOCAL_PATH)/components/strings/components_strings_mr.xtb $(LOCAL_PATH)/components/strings/components_strings_ms.xtb $(LOCAL_PATH)/components/strings/components_strings_nl.xtb $(LOCAL_PATH)/components/strings/components_strings_no.xtb $(LOCAL_PATH)/components/strings/components_strings_pl.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-BR.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-PT.xtb $(LOCAL_PATH)/components/strings/components_strings_ro.xtb $(LOCAL_PATH)/components/strings/components_strings_ru.xtb $(LOCAL_PATH)/components/strings/components_strings_sk.xtb $(LOCAL_PATH)/components/strings/components_strings_sl.xtb $(LOCAL_PATH)/components/strings/components_strings_sr.xtb $(LOCAL_PATH)/components/strings/components_strings_sv.xtb $(LOCAL_PATH)/components/strings/components_strings_sw.xtb $(LOCAL_PATH)/components/strings/components_strings_ta.xtb $(LOCAL_PATH)/components/strings/components_strings_te.xtb $(LOCAL_PATH)/components/strings/components_strings_th.xtb $(LOCAL_PATH)/components/strings/components_strings_tr.xtb $(LOCAL_PATH)/components/strings/components_strings_uk.xtb $(LOCAL_PATH)/components/strings/components_strings_vi.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-CN.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-TW.xtb $(LOCAL_PATH)/components/translate_strings.grdp $(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)/components/strings/grit/components_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/components/components_strings.grd $(LOCAL_PATH)/components/app_modal_dialogs_strings.grdp $(LOCAL_PATH)/components/autofill_strings.grdp $(LOCAL_PATH)/components/bookmark_bar_strings.grdp $(LOCAL_PATH)/components/dom_distiller_strings.grdp $(LOCAL_PATH)/components/error_page_strings.grdp $(LOCAL_PATH)/components/omnibox_strings.grdp $(LOCAL_PATH)/components/pdf_strings.grdp $(LOCAL_PATH)/components/policy_strings.grdp $(LOCAL_PATH)/components/strings/components_strings_am.xtb $(LOCAL_PATH)/components/strings/components_strings_ar.xtb $(LOCAL_PATH)/components/strings/components_strings_bg.xtb $(LOCAL_PATH)/components/strings/components_strings_bn.xtb $(LOCAL_PATH)/components/strings/components_strings_ca.xtb $(LOCAL_PATH)/components/strings/components_strings_cs.xtb $(LOCAL_PATH)/components/strings/components_strings_da.xtb $(LOCAL_PATH)/components/strings/components_strings_de.xtb $(LOCAL_PATH)/components/strings/components_strings_el.xtb $(LOCAL_PATH)/components/strings/components_strings_en-GB.xtb $(LOCAL_PATH)/components/strings/components_strings_es-419.xtb $(LOCAL_PATH)/components/strings/components_strings_es.xtb $(LOCAL_PATH)/components/strings/components_strings_et.xtb $(LOCAL_PATH)/components/strings/components_strings_fa.xtb $(LOCAL_PATH)/components/strings/components_strings_fi.xtb $(LOCAL_PATH)/components/strings/components_strings_fil.xtb $(LOCAL_PATH)/components/strings/components_strings_fr.xtb $(LOCAL_PATH)/components/strings/components_strings_gu.xtb $(LOCAL_PATH)/components/strings/components_strings_hi.xtb $(LOCAL_PATH)/components/strings/components_strings_hr.xtb $(LOCAL_PATH)/components/strings/components_strings_hu.xtb $(LOCAL_PATH)/components/strings/components_strings_id.xtb $(LOCAL_PATH)/components/strings/components_strings_it.xtb $(LOCAL_PATH)/components/strings/components_strings_iw.xtb $(LOCAL_PATH)/components/strings/components_strings_ja.xtb $(LOCAL_PATH)/components/strings/components_strings_kn.xtb $(LOCAL_PATH)/components/strings/components_strings_ko.xtb $(LOCAL_PATH)/components/strings/components_strings_lt.xtb $(LOCAL_PATH)/components/strings/components_strings_lv.xtb $(LOCAL_PATH)/components/strings/components_strings_ml.xtb $(LOCAL_PATH)/components/strings/components_strings_mr.xtb $(LOCAL_PATH)/components/strings/components_strings_ms.xtb $(LOCAL_PATH)/components/strings/components_strings_nl.xtb $(LOCAL_PATH)/components/strings/components_strings_no.xtb $(LOCAL_PATH)/components/strings/components_strings_pl.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-BR.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-PT.xtb $(LOCAL_PATH)/components/strings/components_strings_ro.xtb $(LOCAL_PATH)/components/strings/components_strings_ru.xtb $(LOCAL_PATH)/components/strings/components_strings_sk.xtb $(LOCAL_PATH)/components/strings/components_strings_sl.xtb $(LOCAL_PATH)/components/strings/components_strings_sr.xtb $(LOCAL_PATH)/components/strings/components_strings_sv.xtb $(LOCAL_PATH)/components/strings/components_strings_sw.xtb $(LOCAL_PATH)/components/strings/components_strings_ta.xtb $(LOCAL_PATH)/components/strings/components_strings_te.xtb $(LOCAL_PATH)/components/strings/components_strings_th.xtb $(LOCAL_PATH)/components/strings/components_strings_tr.xtb $(LOCAL_PATH)/components/strings/components_strings_uk.xtb $(LOCAL_PATH)/components/strings/components_strings_vi.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-CN.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-TW.xtb $(LOCAL_PATH)/components/translate_strings.grdp $(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 components_strings.grd ($@)"
 	$(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/strings/grit $(gyp_shared_intermediate_dir)/components/strings; python ../tools/grit/grit.py -i components_strings.grd build -f ../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/components/strings" -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/components/components_strings.target.darwin-mips64.mk b/components/components_strings.target.darwin-mips64.mk
index fb6360c..e68a742 100644
--- a/components/components_strings.target.darwin-mips64.mk
+++ b/components/components_strings.target.darwin-mips64.mk
@@ -20,7 +20,7 @@
 $(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/components/components_strings.grd $(LOCAL_PATH)/components/app_modal_dialogs_strings.grdp $(LOCAL_PATH)/components/autofill_strings.grdp $(LOCAL_PATH)/components/bookmark_bar_strings.grdp $(LOCAL_PATH)/components/dom_distiller_strings.grdp $(LOCAL_PATH)/components/error_page_strings.grdp $(LOCAL_PATH)/components/google_strings.grdp $(LOCAL_PATH)/components/omnibox_strings.grdp $(LOCAL_PATH)/components/pdf_strings.grdp $(LOCAL_PATH)/components/policy_strings.grdp $(LOCAL_PATH)/components/strings/components_strings_am.xtb $(LOCAL_PATH)/components/strings/components_strings_ar.xtb $(LOCAL_PATH)/components/strings/components_strings_bg.xtb $(LOCAL_PATH)/components/strings/components_strings_bn.xtb $(LOCAL_PATH)/components/strings/components_strings_ca.xtb $(LOCAL_PATH)/components/strings/components_strings_cs.xtb $(LOCAL_PATH)/components/strings/components_strings_da.xtb $(LOCAL_PATH)/components/strings/components_strings_de.xtb $(LOCAL_PATH)/components/strings/components_strings_el.xtb $(LOCAL_PATH)/components/strings/components_strings_en-GB.xtb $(LOCAL_PATH)/components/strings/components_strings_es-419.xtb $(LOCAL_PATH)/components/strings/components_strings_es.xtb $(LOCAL_PATH)/components/strings/components_strings_et.xtb $(LOCAL_PATH)/components/strings/components_strings_fa.xtb $(LOCAL_PATH)/components/strings/components_strings_fi.xtb $(LOCAL_PATH)/components/strings/components_strings_fil.xtb $(LOCAL_PATH)/components/strings/components_strings_fr.xtb $(LOCAL_PATH)/components/strings/components_strings_gu.xtb $(LOCAL_PATH)/components/strings/components_strings_hi.xtb $(LOCAL_PATH)/components/strings/components_strings_hr.xtb $(LOCAL_PATH)/components/strings/components_strings_hu.xtb $(LOCAL_PATH)/components/strings/components_strings_id.xtb $(LOCAL_PATH)/components/strings/components_strings_it.xtb $(LOCAL_PATH)/components/strings/components_strings_iw.xtb $(LOCAL_PATH)/components/strings/components_strings_ja.xtb $(LOCAL_PATH)/components/strings/components_strings_kn.xtb $(LOCAL_PATH)/components/strings/components_strings_ko.xtb $(LOCAL_PATH)/components/strings/components_strings_lt.xtb $(LOCAL_PATH)/components/strings/components_strings_lv.xtb $(LOCAL_PATH)/components/strings/components_strings_ml.xtb $(LOCAL_PATH)/components/strings/components_strings_mr.xtb $(LOCAL_PATH)/components/strings/components_strings_ms.xtb $(LOCAL_PATH)/components/strings/components_strings_nl.xtb $(LOCAL_PATH)/components/strings/components_strings_no.xtb $(LOCAL_PATH)/components/strings/components_strings_pl.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-BR.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-PT.xtb $(LOCAL_PATH)/components/strings/components_strings_ro.xtb $(LOCAL_PATH)/components/strings/components_strings_ru.xtb $(LOCAL_PATH)/components/strings/components_strings_sk.xtb $(LOCAL_PATH)/components/strings/components_strings_sl.xtb $(LOCAL_PATH)/components/strings/components_strings_sr.xtb $(LOCAL_PATH)/components/strings/components_strings_sv.xtb $(LOCAL_PATH)/components/strings/components_strings_sw.xtb $(LOCAL_PATH)/components/strings/components_strings_ta.xtb $(LOCAL_PATH)/components/strings/components_strings_te.xtb $(LOCAL_PATH)/components/strings/components_strings_th.xtb $(LOCAL_PATH)/components/strings/components_strings_tr.xtb $(LOCAL_PATH)/components/strings/components_strings_uk.xtb $(LOCAL_PATH)/components/strings/components_strings_vi.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-CN.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-TW.xtb $(LOCAL_PATH)/components/translate_strings.grdp $(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)/components/strings/grit/components_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/components/components_strings.grd $(LOCAL_PATH)/components/app_modal_dialogs_strings.grdp $(LOCAL_PATH)/components/autofill_strings.grdp $(LOCAL_PATH)/components/bookmark_bar_strings.grdp $(LOCAL_PATH)/components/dom_distiller_strings.grdp $(LOCAL_PATH)/components/error_page_strings.grdp $(LOCAL_PATH)/components/omnibox_strings.grdp $(LOCAL_PATH)/components/pdf_strings.grdp $(LOCAL_PATH)/components/policy_strings.grdp $(LOCAL_PATH)/components/strings/components_strings_am.xtb $(LOCAL_PATH)/components/strings/components_strings_ar.xtb $(LOCAL_PATH)/components/strings/components_strings_bg.xtb $(LOCAL_PATH)/components/strings/components_strings_bn.xtb $(LOCAL_PATH)/components/strings/components_strings_ca.xtb $(LOCAL_PATH)/components/strings/components_strings_cs.xtb $(LOCAL_PATH)/components/strings/components_strings_da.xtb $(LOCAL_PATH)/components/strings/components_strings_de.xtb $(LOCAL_PATH)/components/strings/components_strings_el.xtb $(LOCAL_PATH)/components/strings/components_strings_en-GB.xtb $(LOCAL_PATH)/components/strings/components_strings_es-419.xtb $(LOCAL_PATH)/components/strings/components_strings_es.xtb $(LOCAL_PATH)/components/strings/components_strings_et.xtb $(LOCAL_PATH)/components/strings/components_strings_fa.xtb $(LOCAL_PATH)/components/strings/components_strings_fi.xtb $(LOCAL_PATH)/components/strings/components_strings_fil.xtb $(LOCAL_PATH)/components/strings/components_strings_fr.xtb $(LOCAL_PATH)/components/strings/components_strings_gu.xtb $(LOCAL_PATH)/components/strings/components_strings_hi.xtb $(LOCAL_PATH)/components/strings/components_strings_hr.xtb $(LOCAL_PATH)/components/strings/components_strings_hu.xtb $(LOCAL_PATH)/components/strings/components_strings_id.xtb $(LOCAL_PATH)/components/strings/components_strings_it.xtb $(LOCAL_PATH)/components/strings/components_strings_iw.xtb $(LOCAL_PATH)/components/strings/components_strings_ja.xtb $(LOCAL_PATH)/components/strings/components_strings_kn.xtb $(LOCAL_PATH)/components/strings/components_strings_ko.xtb $(LOCAL_PATH)/components/strings/components_strings_lt.xtb $(LOCAL_PATH)/components/strings/components_strings_lv.xtb $(LOCAL_PATH)/components/strings/components_strings_ml.xtb $(LOCAL_PATH)/components/strings/components_strings_mr.xtb $(LOCAL_PATH)/components/strings/components_strings_ms.xtb $(LOCAL_PATH)/components/strings/components_strings_nl.xtb $(LOCAL_PATH)/components/strings/components_strings_no.xtb $(LOCAL_PATH)/components/strings/components_strings_pl.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-BR.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-PT.xtb $(LOCAL_PATH)/components/strings/components_strings_ro.xtb $(LOCAL_PATH)/components/strings/components_strings_ru.xtb $(LOCAL_PATH)/components/strings/components_strings_sk.xtb $(LOCAL_PATH)/components/strings/components_strings_sl.xtb $(LOCAL_PATH)/components/strings/components_strings_sr.xtb $(LOCAL_PATH)/components/strings/components_strings_sv.xtb $(LOCAL_PATH)/components/strings/components_strings_sw.xtb $(LOCAL_PATH)/components/strings/components_strings_ta.xtb $(LOCAL_PATH)/components/strings/components_strings_te.xtb $(LOCAL_PATH)/components/strings/components_strings_th.xtb $(LOCAL_PATH)/components/strings/components_strings_tr.xtb $(LOCAL_PATH)/components/strings/components_strings_uk.xtb $(LOCAL_PATH)/components/strings/components_strings_vi.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-CN.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-TW.xtb $(LOCAL_PATH)/components/translate_strings.grdp $(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 components_strings.grd ($@)"
 	$(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/strings/grit $(gyp_shared_intermediate_dir)/components/strings; python ../tools/grit/grit.py -i components_strings.grd build -f ../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/components/strings" -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/components/components_strings.target.darwin-x86.mk b/components/components_strings.target.darwin-x86.mk
index fb6360c..e68a742 100644
--- a/components/components_strings.target.darwin-x86.mk
+++ b/components/components_strings.target.darwin-x86.mk
@@ -20,7 +20,7 @@
 $(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/components/components_strings.grd $(LOCAL_PATH)/components/app_modal_dialogs_strings.grdp $(LOCAL_PATH)/components/autofill_strings.grdp $(LOCAL_PATH)/components/bookmark_bar_strings.grdp $(LOCAL_PATH)/components/dom_distiller_strings.grdp $(LOCAL_PATH)/components/error_page_strings.grdp $(LOCAL_PATH)/components/google_strings.grdp $(LOCAL_PATH)/components/omnibox_strings.grdp $(LOCAL_PATH)/components/pdf_strings.grdp $(LOCAL_PATH)/components/policy_strings.grdp $(LOCAL_PATH)/components/strings/components_strings_am.xtb $(LOCAL_PATH)/components/strings/components_strings_ar.xtb $(LOCAL_PATH)/components/strings/components_strings_bg.xtb $(LOCAL_PATH)/components/strings/components_strings_bn.xtb $(LOCAL_PATH)/components/strings/components_strings_ca.xtb $(LOCAL_PATH)/components/strings/components_strings_cs.xtb $(LOCAL_PATH)/components/strings/components_strings_da.xtb $(LOCAL_PATH)/components/strings/components_strings_de.xtb $(LOCAL_PATH)/components/strings/components_strings_el.xtb $(LOCAL_PATH)/components/strings/components_strings_en-GB.xtb $(LOCAL_PATH)/components/strings/components_strings_es-419.xtb $(LOCAL_PATH)/components/strings/components_strings_es.xtb $(LOCAL_PATH)/components/strings/components_strings_et.xtb $(LOCAL_PATH)/components/strings/components_strings_fa.xtb $(LOCAL_PATH)/components/strings/components_strings_fi.xtb $(LOCAL_PATH)/components/strings/components_strings_fil.xtb $(LOCAL_PATH)/components/strings/components_strings_fr.xtb $(LOCAL_PATH)/components/strings/components_strings_gu.xtb $(LOCAL_PATH)/components/strings/components_strings_hi.xtb $(LOCAL_PATH)/components/strings/components_strings_hr.xtb $(LOCAL_PATH)/components/strings/components_strings_hu.xtb $(LOCAL_PATH)/components/strings/components_strings_id.xtb $(LOCAL_PATH)/components/strings/components_strings_it.xtb $(LOCAL_PATH)/components/strings/components_strings_iw.xtb $(LOCAL_PATH)/components/strings/components_strings_ja.xtb $(LOCAL_PATH)/components/strings/components_strings_kn.xtb $(LOCAL_PATH)/components/strings/components_strings_ko.xtb $(LOCAL_PATH)/components/strings/components_strings_lt.xtb $(LOCAL_PATH)/components/strings/components_strings_lv.xtb $(LOCAL_PATH)/components/strings/components_strings_ml.xtb $(LOCAL_PATH)/components/strings/components_strings_mr.xtb $(LOCAL_PATH)/components/strings/components_strings_ms.xtb $(LOCAL_PATH)/components/strings/components_strings_nl.xtb $(LOCAL_PATH)/components/strings/components_strings_no.xtb $(LOCAL_PATH)/components/strings/components_strings_pl.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-BR.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-PT.xtb $(LOCAL_PATH)/components/strings/components_strings_ro.xtb $(LOCAL_PATH)/components/strings/components_strings_ru.xtb $(LOCAL_PATH)/components/strings/components_strings_sk.xtb $(LOCAL_PATH)/components/strings/components_strings_sl.xtb $(LOCAL_PATH)/components/strings/components_strings_sr.xtb $(LOCAL_PATH)/components/strings/components_strings_sv.xtb $(LOCAL_PATH)/components/strings/components_strings_sw.xtb $(LOCAL_PATH)/components/strings/components_strings_ta.xtb $(LOCAL_PATH)/components/strings/components_strings_te.xtb $(LOCAL_PATH)/components/strings/components_strings_th.xtb $(LOCAL_PATH)/components/strings/components_strings_tr.xtb $(LOCAL_PATH)/components/strings/components_strings_uk.xtb $(LOCAL_PATH)/components/strings/components_strings_vi.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-CN.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-TW.xtb $(LOCAL_PATH)/components/translate_strings.grdp $(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)/components/strings/grit/components_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/components/components_strings.grd $(LOCAL_PATH)/components/app_modal_dialogs_strings.grdp $(LOCAL_PATH)/components/autofill_strings.grdp $(LOCAL_PATH)/components/bookmark_bar_strings.grdp $(LOCAL_PATH)/components/dom_distiller_strings.grdp $(LOCAL_PATH)/components/error_page_strings.grdp $(LOCAL_PATH)/components/omnibox_strings.grdp $(LOCAL_PATH)/components/pdf_strings.grdp $(LOCAL_PATH)/components/policy_strings.grdp $(LOCAL_PATH)/components/strings/components_strings_am.xtb $(LOCAL_PATH)/components/strings/components_strings_ar.xtb $(LOCAL_PATH)/components/strings/components_strings_bg.xtb $(LOCAL_PATH)/components/strings/components_strings_bn.xtb $(LOCAL_PATH)/components/strings/components_strings_ca.xtb $(LOCAL_PATH)/components/strings/components_strings_cs.xtb $(LOCAL_PATH)/components/strings/components_strings_da.xtb $(LOCAL_PATH)/components/strings/components_strings_de.xtb $(LOCAL_PATH)/components/strings/components_strings_el.xtb $(LOCAL_PATH)/components/strings/components_strings_en-GB.xtb $(LOCAL_PATH)/components/strings/components_strings_es-419.xtb $(LOCAL_PATH)/components/strings/components_strings_es.xtb $(LOCAL_PATH)/components/strings/components_strings_et.xtb $(LOCAL_PATH)/components/strings/components_strings_fa.xtb $(LOCAL_PATH)/components/strings/components_strings_fi.xtb $(LOCAL_PATH)/components/strings/components_strings_fil.xtb $(LOCAL_PATH)/components/strings/components_strings_fr.xtb $(LOCAL_PATH)/components/strings/components_strings_gu.xtb $(LOCAL_PATH)/components/strings/components_strings_hi.xtb $(LOCAL_PATH)/components/strings/components_strings_hr.xtb $(LOCAL_PATH)/components/strings/components_strings_hu.xtb $(LOCAL_PATH)/components/strings/components_strings_id.xtb $(LOCAL_PATH)/components/strings/components_strings_it.xtb $(LOCAL_PATH)/components/strings/components_strings_iw.xtb $(LOCAL_PATH)/components/strings/components_strings_ja.xtb $(LOCAL_PATH)/components/strings/components_strings_kn.xtb $(LOCAL_PATH)/components/strings/components_strings_ko.xtb $(LOCAL_PATH)/components/strings/components_strings_lt.xtb $(LOCAL_PATH)/components/strings/components_strings_lv.xtb $(LOCAL_PATH)/components/strings/components_strings_ml.xtb $(LOCAL_PATH)/components/strings/components_strings_mr.xtb $(LOCAL_PATH)/components/strings/components_strings_ms.xtb $(LOCAL_PATH)/components/strings/components_strings_nl.xtb $(LOCAL_PATH)/components/strings/components_strings_no.xtb $(LOCAL_PATH)/components/strings/components_strings_pl.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-BR.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-PT.xtb $(LOCAL_PATH)/components/strings/components_strings_ro.xtb $(LOCAL_PATH)/components/strings/components_strings_ru.xtb $(LOCAL_PATH)/components/strings/components_strings_sk.xtb $(LOCAL_PATH)/components/strings/components_strings_sl.xtb $(LOCAL_PATH)/components/strings/components_strings_sr.xtb $(LOCAL_PATH)/components/strings/components_strings_sv.xtb $(LOCAL_PATH)/components/strings/components_strings_sw.xtb $(LOCAL_PATH)/components/strings/components_strings_ta.xtb $(LOCAL_PATH)/components/strings/components_strings_te.xtb $(LOCAL_PATH)/components/strings/components_strings_th.xtb $(LOCAL_PATH)/components/strings/components_strings_tr.xtb $(LOCAL_PATH)/components/strings/components_strings_uk.xtb $(LOCAL_PATH)/components/strings/components_strings_vi.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-CN.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-TW.xtb $(LOCAL_PATH)/components/translate_strings.grdp $(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 components_strings.grd ($@)"
 	$(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/strings/grit $(gyp_shared_intermediate_dir)/components/strings; python ../tools/grit/grit.py -i components_strings.grd build -f ../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/components/strings" -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/components/components_strings.target.darwin-x86_64.mk b/components/components_strings.target.darwin-x86_64.mk
index fb6360c..e68a742 100644
--- a/components/components_strings.target.darwin-x86_64.mk
+++ b/components/components_strings.target.darwin-x86_64.mk
@@ -20,7 +20,7 @@
 $(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/components/components_strings.grd $(LOCAL_PATH)/components/app_modal_dialogs_strings.grdp $(LOCAL_PATH)/components/autofill_strings.grdp $(LOCAL_PATH)/components/bookmark_bar_strings.grdp $(LOCAL_PATH)/components/dom_distiller_strings.grdp $(LOCAL_PATH)/components/error_page_strings.grdp $(LOCAL_PATH)/components/google_strings.grdp $(LOCAL_PATH)/components/omnibox_strings.grdp $(LOCAL_PATH)/components/pdf_strings.grdp $(LOCAL_PATH)/components/policy_strings.grdp $(LOCAL_PATH)/components/strings/components_strings_am.xtb $(LOCAL_PATH)/components/strings/components_strings_ar.xtb $(LOCAL_PATH)/components/strings/components_strings_bg.xtb $(LOCAL_PATH)/components/strings/components_strings_bn.xtb $(LOCAL_PATH)/components/strings/components_strings_ca.xtb $(LOCAL_PATH)/components/strings/components_strings_cs.xtb $(LOCAL_PATH)/components/strings/components_strings_da.xtb $(LOCAL_PATH)/components/strings/components_strings_de.xtb $(LOCAL_PATH)/components/strings/components_strings_el.xtb $(LOCAL_PATH)/components/strings/components_strings_en-GB.xtb $(LOCAL_PATH)/components/strings/components_strings_es-419.xtb $(LOCAL_PATH)/components/strings/components_strings_es.xtb $(LOCAL_PATH)/components/strings/components_strings_et.xtb $(LOCAL_PATH)/components/strings/components_strings_fa.xtb $(LOCAL_PATH)/components/strings/components_strings_fi.xtb $(LOCAL_PATH)/components/strings/components_strings_fil.xtb $(LOCAL_PATH)/components/strings/components_strings_fr.xtb $(LOCAL_PATH)/components/strings/components_strings_gu.xtb $(LOCAL_PATH)/components/strings/components_strings_hi.xtb $(LOCAL_PATH)/components/strings/components_strings_hr.xtb $(LOCAL_PATH)/components/strings/components_strings_hu.xtb $(LOCAL_PATH)/components/strings/components_strings_id.xtb $(LOCAL_PATH)/components/strings/components_strings_it.xtb $(LOCAL_PATH)/components/strings/components_strings_iw.xtb $(LOCAL_PATH)/components/strings/components_strings_ja.xtb $(LOCAL_PATH)/components/strings/components_strings_kn.xtb $(LOCAL_PATH)/components/strings/components_strings_ko.xtb $(LOCAL_PATH)/components/strings/components_strings_lt.xtb $(LOCAL_PATH)/components/strings/components_strings_lv.xtb $(LOCAL_PATH)/components/strings/components_strings_ml.xtb $(LOCAL_PATH)/components/strings/components_strings_mr.xtb $(LOCAL_PATH)/components/strings/components_strings_ms.xtb $(LOCAL_PATH)/components/strings/components_strings_nl.xtb $(LOCAL_PATH)/components/strings/components_strings_no.xtb $(LOCAL_PATH)/components/strings/components_strings_pl.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-BR.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-PT.xtb $(LOCAL_PATH)/components/strings/components_strings_ro.xtb $(LOCAL_PATH)/components/strings/components_strings_ru.xtb $(LOCAL_PATH)/components/strings/components_strings_sk.xtb $(LOCAL_PATH)/components/strings/components_strings_sl.xtb $(LOCAL_PATH)/components/strings/components_strings_sr.xtb $(LOCAL_PATH)/components/strings/components_strings_sv.xtb $(LOCAL_PATH)/components/strings/components_strings_sw.xtb $(LOCAL_PATH)/components/strings/components_strings_ta.xtb $(LOCAL_PATH)/components/strings/components_strings_te.xtb $(LOCAL_PATH)/components/strings/components_strings_th.xtb $(LOCAL_PATH)/components/strings/components_strings_tr.xtb $(LOCAL_PATH)/components/strings/components_strings_uk.xtb $(LOCAL_PATH)/components/strings/components_strings_vi.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-CN.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-TW.xtb $(LOCAL_PATH)/components/translate_strings.grdp $(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)/components/strings/grit/components_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/components/components_strings.grd $(LOCAL_PATH)/components/app_modal_dialogs_strings.grdp $(LOCAL_PATH)/components/autofill_strings.grdp $(LOCAL_PATH)/components/bookmark_bar_strings.grdp $(LOCAL_PATH)/components/dom_distiller_strings.grdp $(LOCAL_PATH)/components/error_page_strings.grdp $(LOCAL_PATH)/components/omnibox_strings.grdp $(LOCAL_PATH)/components/pdf_strings.grdp $(LOCAL_PATH)/components/policy_strings.grdp $(LOCAL_PATH)/components/strings/components_strings_am.xtb $(LOCAL_PATH)/components/strings/components_strings_ar.xtb $(LOCAL_PATH)/components/strings/components_strings_bg.xtb $(LOCAL_PATH)/components/strings/components_strings_bn.xtb $(LOCAL_PATH)/components/strings/components_strings_ca.xtb $(LOCAL_PATH)/components/strings/components_strings_cs.xtb $(LOCAL_PATH)/components/strings/components_strings_da.xtb $(LOCAL_PATH)/components/strings/components_strings_de.xtb $(LOCAL_PATH)/components/strings/components_strings_el.xtb $(LOCAL_PATH)/components/strings/components_strings_en-GB.xtb $(LOCAL_PATH)/components/strings/components_strings_es-419.xtb $(LOCAL_PATH)/components/strings/components_strings_es.xtb $(LOCAL_PATH)/components/strings/components_strings_et.xtb $(LOCAL_PATH)/components/strings/components_strings_fa.xtb $(LOCAL_PATH)/components/strings/components_strings_fi.xtb $(LOCAL_PATH)/components/strings/components_strings_fil.xtb $(LOCAL_PATH)/components/strings/components_strings_fr.xtb $(LOCAL_PATH)/components/strings/components_strings_gu.xtb $(LOCAL_PATH)/components/strings/components_strings_hi.xtb $(LOCAL_PATH)/components/strings/components_strings_hr.xtb $(LOCAL_PATH)/components/strings/components_strings_hu.xtb $(LOCAL_PATH)/components/strings/components_strings_id.xtb $(LOCAL_PATH)/components/strings/components_strings_it.xtb $(LOCAL_PATH)/components/strings/components_strings_iw.xtb $(LOCAL_PATH)/components/strings/components_strings_ja.xtb $(LOCAL_PATH)/components/strings/components_strings_kn.xtb $(LOCAL_PATH)/components/strings/components_strings_ko.xtb $(LOCAL_PATH)/components/strings/components_strings_lt.xtb $(LOCAL_PATH)/components/strings/components_strings_lv.xtb $(LOCAL_PATH)/components/strings/components_strings_ml.xtb $(LOCAL_PATH)/components/strings/components_strings_mr.xtb $(LOCAL_PATH)/components/strings/components_strings_ms.xtb $(LOCAL_PATH)/components/strings/components_strings_nl.xtb $(LOCAL_PATH)/components/strings/components_strings_no.xtb $(LOCAL_PATH)/components/strings/components_strings_pl.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-BR.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-PT.xtb $(LOCAL_PATH)/components/strings/components_strings_ro.xtb $(LOCAL_PATH)/components/strings/components_strings_ru.xtb $(LOCAL_PATH)/components/strings/components_strings_sk.xtb $(LOCAL_PATH)/components/strings/components_strings_sl.xtb $(LOCAL_PATH)/components/strings/components_strings_sr.xtb $(LOCAL_PATH)/components/strings/components_strings_sv.xtb $(LOCAL_PATH)/components/strings/components_strings_sw.xtb $(LOCAL_PATH)/components/strings/components_strings_ta.xtb $(LOCAL_PATH)/components/strings/components_strings_te.xtb $(LOCAL_PATH)/components/strings/components_strings_th.xtb $(LOCAL_PATH)/components/strings/components_strings_tr.xtb $(LOCAL_PATH)/components/strings/components_strings_uk.xtb $(LOCAL_PATH)/components/strings/components_strings_vi.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-CN.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-TW.xtb $(LOCAL_PATH)/components/translate_strings.grdp $(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 components_strings.grd ($@)"
 	$(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/strings/grit $(gyp_shared_intermediate_dir)/components/strings; python ../tools/grit/grit.py -i components_strings.grd build -f ../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/components/strings" -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/components/components_strings.target.linux-arm.mk b/components/components_strings.target.linux-arm.mk
index fb6360c..e68a742 100644
--- a/components/components_strings.target.linux-arm.mk
+++ b/components/components_strings.target.linux-arm.mk
@@ -20,7 +20,7 @@
 $(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/components/components_strings.grd $(LOCAL_PATH)/components/app_modal_dialogs_strings.grdp $(LOCAL_PATH)/components/autofill_strings.grdp $(LOCAL_PATH)/components/bookmark_bar_strings.grdp $(LOCAL_PATH)/components/dom_distiller_strings.grdp $(LOCAL_PATH)/components/error_page_strings.grdp $(LOCAL_PATH)/components/google_strings.grdp $(LOCAL_PATH)/components/omnibox_strings.grdp $(LOCAL_PATH)/components/pdf_strings.grdp $(LOCAL_PATH)/components/policy_strings.grdp $(LOCAL_PATH)/components/strings/components_strings_am.xtb $(LOCAL_PATH)/components/strings/components_strings_ar.xtb $(LOCAL_PATH)/components/strings/components_strings_bg.xtb $(LOCAL_PATH)/components/strings/components_strings_bn.xtb $(LOCAL_PATH)/components/strings/components_strings_ca.xtb $(LOCAL_PATH)/components/strings/components_strings_cs.xtb $(LOCAL_PATH)/components/strings/components_strings_da.xtb $(LOCAL_PATH)/components/strings/components_strings_de.xtb $(LOCAL_PATH)/components/strings/components_strings_el.xtb $(LOCAL_PATH)/components/strings/components_strings_en-GB.xtb $(LOCAL_PATH)/components/strings/components_strings_es-419.xtb $(LOCAL_PATH)/components/strings/components_strings_es.xtb $(LOCAL_PATH)/components/strings/components_strings_et.xtb $(LOCAL_PATH)/components/strings/components_strings_fa.xtb $(LOCAL_PATH)/components/strings/components_strings_fi.xtb $(LOCAL_PATH)/components/strings/components_strings_fil.xtb $(LOCAL_PATH)/components/strings/components_strings_fr.xtb $(LOCAL_PATH)/components/strings/components_strings_gu.xtb $(LOCAL_PATH)/components/strings/components_strings_hi.xtb $(LOCAL_PATH)/components/strings/components_strings_hr.xtb $(LOCAL_PATH)/components/strings/components_strings_hu.xtb $(LOCAL_PATH)/components/strings/components_strings_id.xtb $(LOCAL_PATH)/components/strings/components_strings_it.xtb $(LOCAL_PATH)/components/strings/components_strings_iw.xtb $(LOCAL_PATH)/components/strings/components_strings_ja.xtb $(LOCAL_PATH)/components/strings/components_strings_kn.xtb $(LOCAL_PATH)/components/strings/components_strings_ko.xtb $(LOCAL_PATH)/components/strings/components_strings_lt.xtb $(LOCAL_PATH)/components/strings/components_strings_lv.xtb $(LOCAL_PATH)/components/strings/components_strings_ml.xtb $(LOCAL_PATH)/components/strings/components_strings_mr.xtb $(LOCAL_PATH)/components/strings/components_strings_ms.xtb $(LOCAL_PATH)/components/strings/components_strings_nl.xtb $(LOCAL_PATH)/components/strings/components_strings_no.xtb $(LOCAL_PATH)/components/strings/components_strings_pl.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-BR.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-PT.xtb $(LOCAL_PATH)/components/strings/components_strings_ro.xtb $(LOCAL_PATH)/components/strings/components_strings_ru.xtb $(LOCAL_PATH)/components/strings/components_strings_sk.xtb $(LOCAL_PATH)/components/strings/components_strings_sl.xtb $(LOCAL_PATH)/components/strings/components_strings_sr.xtb $(LOCAL_PATH)/components/strings/components_strings_sv.xtb $(LOCAL_PATH)/components/strings/components_strings_sw.xtb $(LOCAL_PATH)/components/strings/components_strings_ta.xtb $(LOCAL_PATH)/components/strings/components_strings_te.xtb $(LOCAL_PATH)/components/strings/components_strings_th.xtb $(LOCAL_PATH)/components/strings/components_strings_tr.xtb $(LOCAL_PATH)/components/strings/components_strings_uk.xtb $(LOCAL_PATH)/components/strings/components_strings_vi.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-CN.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-TW.xtb $(LOCAL_PATH)/components/translate_strings.grdp $(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)/components/strings/grit/components_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/components/components_strings.grd $(LOCAL_PATH)/components/app_modal_dialogs_strings.grdp $(LOCAL_PATH)/components/autofill_strings.grdp $(LOCAL_PATH)/components/bookmark_bar_strings.grdp $(LOCAL_PATH)/components/dom_distiller_strings.grdp $(LOCAL_PATH)/components/error_page_strings.grdp $(LOCAL_PATH)/components/omnibox_strings.grdp $(LOCAL_PATH)/components/pdf_strings.grdp $(LOCAL_PATH)/components/policy_strings.grdp $(LOCAL_PATH)/components/strings/components_strings_am.xtb $(LOCAL_PATH)/components/strings/components_strings_ar.xtb $(LOCAL_PATH)/components/strings/components_strings_bg.xtb $(LOCAL_PATH)/components/strings/components_strings_bn.xtb $(LOCAL_PATH)/components/strings/components_strings_ca.xtb $(LOCAL_PATH)/components/strings/components_strings_cs.xtb $(LOCAL_PATH)/components/strings/components_strings_da.xtb $(LOCAL_PATH)/components/strings/components_strings_de.xtb $(LOCAL_PATH)/components/strings/components_strings_el.xtb $(LOCAL_PATH)/components/strings/components_strings_en-GB.xtb $(LOCAL_PATH)/components/strings/components_strings_es-419.xtb $(LOCAL_PATH)/components/strings/components_strings_es.xtb $(LOCAL_PATH)/components/strings/components_strings_et.xtb $(LOCAL_PATH)/components/strings/components_strings_fa.xtb $(LOCAL_PATH)/components/strings/components_strings_fi.xtb $(LOCAL_PATH)/components/strings/components_strings_fil.xtb $(LOCAL_PATH)/components/strings/components_strings_fr.xtb $(LOCAL_PATH)/components/strings/components_strings_gu.xtb $(LOCAL_PATH)/components/strings/components_strings_hi.xtb $(LOCAL_PATH)/components/strings/components_strings_hr.xtb $(LOCAL_PATH)/components/strings/components_strings_hu.xtb $(LOCAL_PATH)/components/strings/components_strings_id.xtb $(LOCAL_PATH)/components/strings/components_strings_it.xtb $(LOCAL_PATH)/components/strings/components_strings_iw.xtb $(LOCAL_PATH)/components/strings/components_strings_ja.xtb $(LOCAL_PATH)/components/strings/components_strings_kn.xtb $(LOCAL_PATH)/components/strings/components_strings_ko.xtb $(LOCAL_PATH)/components/strings/components_strings_lt.xtb $(LOCAL_PATH)/components/strings/components_strings_lv.xtb $(LOCAL_PATH)/components/strings/components_strings_ml.xtb $(LOCAL_PATH)/components/strings/components_strings_mr.xtb $(LOCAL_PATH)/components/strings/components_strings_ms.xtb $(LOCAL_PATH)/components/strings/components_strings_nl.xtb $(LOCAL_PATH)/components/strings/components_strings_no.xtb $(LOCAL_PATH)/components/strings/components_strings_pl.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-BR.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-PT.xtb $(LOCAL_PATH)/components/strings/components_strings_ro.xtb $(LOCAL_PATH)/components/strings/components_strings_ru.xtb $(LOCAL_PATH)/components/strings/components_strings_sk.xtb $(LOCAL_PATH)/components/strings/components_strings_sl.xtb $(LOCAL_PATH)/components/strings/components_strings_sr.xtb $(LOCAL_PATH)/components/strings/components_strings_sv.xtb $(LOCAL_PATH)/components/strings/components_strings_sw.xtb $(LOCAL_PATH)/components/strings/components_strings_ta.xtb $(LOCAL_PATH)/components/strings/components_strings_te.xtb $(LOCAL_PATH)/components/strings/components_strings_th.xtb $(LOCAL_PATH)/components/strings/components_strings_tr.xtb $(LOCAL_PATH)/components/strings/components_strings_uk.xtb $(LOCAL_PATH)/components/strings/components_strings_vi.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-CN.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-TW.xtb $(LOCAL_PATH)/components/translate_strings.grdp $(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 components_strings.grd ($@)"
 	$(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/strings/grit $(gyp_shared_intermediate_dir)/components/strings; python ../tools/grit/grit.py -i components_strings.grd build -f ../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/components/strings" -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/components/components_strings.target.linux-arm64.mk b/components/components_strings.target.linux-arm64.mk
index fb6360c..e68a742 100644
--- a/components/components_strings.target.linux-arm64.mk
+++ b/components/components_strings.target.linux-arm64.mk
@@ -20,7 +20,7 @@
 $(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/components/components_strings.grd $(LOCAL_PATH)/components/app_modal_dialogs_strings.grdp $(LOCAL_PATH)/components/autofill_strings.grdp $(LOCAL_PATH)/components/bookmark_bar_strings.grdp $(LOCAL_PATH)/components/dom_distiller_strings.grdp $(LOCAL_PATH)/components/error_page_strings.grdp $(LOCAL_PATH)/components/google_strings.grdp $(LOCAL_PATH)/components/omnibox_strings.grdp $(LOCAL_PATH)/components/pdf_strings.grdp $(LOCAL_PATH)/components/policy_strings.grdp $(LOCAL_PATH)/components/strings/components_strings_am.xtb $(LOCAL_PATH)/components/strings/components_strings_ar.xtb $(LOCAL_PATH)/components/strings/components_strings_bg.xtb $(LOCAL_PATH)/components/strings/components_strings_bn.xtb $(LOCAL_PATH)/components/strings/components_strings_ca.xtb $(LOCAL_PATH)/components/strings/components_strings_cs.xtb $(LOCAL_PATH)/components/strings/components_strings_da.xtb $(LOCAL_PATH)/components/strings/components_strings_de.xtb $(LOCAL_PATH)/components/strings/components_strings_el.xtb $(LOCAL_PATH)/components/strings/components_strings_en-GB.xtb $(LOCAL_PATH)/components/strings/components_strings_es-419.xtb $(LOCAL_PATH)/components/strings/components_strings_es.xtb $(LOCAL_PATH)/components/strings/components_strings_et.xtb $(LOCAL_PATH)/components/strings/components_strings_fa.xtb $(LOCAL_PATH)/components/strings/components_strings_fi.xtb $(LOCAL_PATH)/components/strings/components_strings_fil.xtb $(LOCAL_PATH)/components/strings/components_strings_fr.xtb $(LOCAL_PATH)/components/strings/components_strings_gu.xtb $(LOCAL_PATH)/components/strings/components_strings_hi.xtb $(LOCAL_PATH)/components/strings/components_strings_hr.xtb $(LOCAL_PATH)/components/strings/components_strings_hu.xtb $(LOCAL_PATH)/components/strings/components_strings_id.xtb $(LOCAL_PATH)/components/strings/components_strings_it.xtb $(LOCAL_PATH)/components/strings/components_strings_iw.xtb $(LOCAL_PATH)/components/strings/components_strings_ja.xtb $(LOCAL_PATH)/components/strings/components_strings_kn.xtb $(LOCAL_PATH)/components/strings/components_strings_ko.xtb $(LOCAL_PATH)/components/strings/components_strings_lt.xtb $(LOCAL_PATH)/components/strings/components_strings_lv.xtb $(LOCAL_PATH)/components/strings/components_strings_ml.xtb $(LOCAL_PATH)/components/strings/components_strings_mr.xtb $(LOCAL_PATH)/components/strings/components_strings_ms.xtb $(LOCAL_PATH)/components/strings/components_strings_nl.xtb $(LOCAL_PATH)/components/strings/components_strings_no.xtb $(LOCAL_PATH)/components/strings/components_strings_pl.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-BR.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-PT.xtb $(LOCAL_PATH)/components/strings/components_strings_ro.xtb $(LOCAL_PATH)/components/strings/components_strings_ru.xtb $(LOCAL_PATH)/components/strings/components_strings_sk.xtb $(LOCAL_PATH)/components/strings/components_strings_sl.xtb $(LOCAL_PATH)/components/strings/components_strings_sr.xtb $(LOCAL_PATH)/components/strings/components_strings_sv.xtb $(LOCAL_PATH)/components/strings/components_strings_sw.xtb $(LOCAL_PATH)/components/strings/components_strings_ta.xtb $(LOCAL_PATH)/components/strings/components_strings_te.xtb $(LOCAL_PATH)/components/strings/components_strings_th.xtb $(LOCAL_PATH)/components/strings/components_strings_tr.xtb $(LOCAL_PATH)/components/strings/components_strings_uk.xtb $(LOCAL_PATH)/components/strings/components_strings_vi.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-CN.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-TW.xtb $(LOCAL_PATH)/components/translate_strings.grdp $(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)/components/strings/grit/components_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/components/components_strings.grd $(LOCAL_PATH)/components/app_modal_dialogs_strings.grdp $(LOCAL_PATH)/components/autofill_strings.grdp $(LOCAL_PATH)/components/bookmark_bar_strings.grdp $(LOCAL_PATH)/components/dom_distiller_strings.grdp $(LOCAL_PATH)/components/error_page_strings.grdp $(LOCAL_PATH)/components/omnibox_strings.grdp $(LOCAL_PATH)/components/pdf_strings.grdp $(LOCAL_PATH)/components/policy_strings.grdp $(LOCAL_PATH)/components/strings/components_strings_am.xtb $(LOCAL_PATH)/components/strings/components_strings_ar.xtb $(LOCAL_PATH)/components/strings/components_strings_bg.xtb $(LOCAL_PATH)/components/strings/components_strings_bn.xtb $(LOCAL_PATH)/components/strings/components_strings_ca.xtb $(LOCAL_PATH)/components/strings/components_strings_cs.xtb $(LOCAL_PATH)/components/strings/components_strings_da.xtb $(LOCAL_PATH)/components/strings/components_strings_de.xtb $(LOCAL_PATH)/components/strings/components_strings_el.xtb $(LOCAL_PATH)/components/strings/components_strings_en-GB.xtb $(LOCAL_PATH)/components/strings/components_strings_es-419.xtb $(LOCAL_PATH)/components/strings/components_strings_es.xtb $(LOCAL_PATH)/components/strings/components_strings_et.xtb $(LOCAL_PATH)/components/strings/components_strings_fa.xtb $(LOCAL_PATH)/components/strings/components_strings_fi.xtb $(LOCAL_PATH)/components/strings/components_strings_fil.xtb $(LOCAL_PATH)/components/strings/components_strings_fr.xtb $(LOCAL_PATH)/components/strings/components_strings_gu.xtb $(LOCAL_PATH)/components/strings/components_strings_hi.xtb $(LOCAL_PATH)/components/strings/components_strings_hr.xtb $(LOCAL_PATH)/components/strings/components_strings_hu.xtb $(LOCAL_PATH)/components/strings/components_strings_id.xtb $(LOCAL_PATH)/components/strings/components_strings_it.xtb $(LOCAL_PATH)/components/strings/components_strings_iw.xtb $(LOCAL_PATH)/components/strings/components_strings_ja.xtb $(LOCAL_PATH)/components/strings/components_strings_kn.xtb $(LOCAL_PATH)/components/strings/components_strings_ko.xtb $(LOCAL_PATH)/components/strings/components_strings_lt.xtb $(LOCAL_PATH)/components/strings/components_strings_lv.xtb $(LOCAL_PATH)/components/strings/components_strings_ml.xtb $(LOCAL_PATH)/components/strings/components_strings_mr.xtb $(LOCAL_PATH)/components/strings/components_strings_ms.xtb $(LOCAL_PATH)/components/strings/components_strings_nl.xtb $(LOCAL_PATH)/components/strings/components_strings_no.xtb $(LOCAL_PATH)/components/strings/components_strings_pl.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-BR.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-PT.xtb $(LOCAL_PATH)/components/strings/components_strings_ro.xtb $(LOCAL_PATH)/components/strings/components_strings_ru.xtb $(LOCAL_PATH)/components/strings/components_strings_sk.xtb $(LOCAL_PATH)/components/strings/components_strings_sl.xtb $(LOCAL_PATH)/components/strings/components_strings_sr.xtb $(LOCAL_PATH)/components/strings/components_strings_sv.xtb $(LOCAL_PATH)/components/strings/components_strings_sw.xtb $(LOCAL_PATH)/components/strings/components_strings_ta.xtb $(LOCAL_PATH)/components/strings/components_strings_te.xtb $(LOCAL_PATH)/components/strings/components_strings_th.xtb $(LOCAL_PATH)/components/strings/components_strings_tr.xtb $(LOCAL_PATH)/components/strings/components_strings_uk.xtb $(LOCAL_PATH)/components/strings/components_strings_vi.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-CN.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-TW.xtb $(LOCAL_PATH)/components/translate_strings.grdp $(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 components_strings.grd ($@)"
 	$(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/strings/grit $(gyp_shared_intermediate_dir)/components/strings; python ../tools/grit/grit.py -i components_strings.grd build -f ../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/components/strings" -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/components/components_strings.target.linux-mips.mk b/components/components_strings.target.linux-mips.mk
index fb6360c..e68a742 100644
--- a/components/components_strings.target.linux-mips.mk
+++ b/components/components_strings.target.linux-mips.mk
@@ -20,7 +20,7 @@
 $(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/components/components_strings.grd $(LOCAL_PATH)/components/app_modal_dialogs_strings.grdp $(LOCAL_PATH)/components/autofill_strings.grdp $(LOCAL_PATH)/components/bookmark_bar_strings.grdp $(LOCAL_PATH)/components/dom_distiller_strings.grdp $(LOCAL_PATH)/components/error_page_strings.grdp $(LOCAL_PATH)/components/google_strings.grdp $(LOCAL_PATH)/components/omnibox_strings.grdp $(LOCAL_PATH)/components/pdf_strings.grdp $(LOCAL_PATH)/components/policy_strings.grdp $(LOCAL_PATH)/components/strings/components_strings_am.xtb $(LOCAL_PATH)/components/strings/components_strings_ar.xtb $(LOCAL_PATH)/components/strings/components_strings_bg.xtb $(LOCAL_PATH)/components/strings/components_strings_bn.xtb $(LOCAL_PATH)/components/strings/components_strings_ca.xtb $(LOCAL_PATH)/components/strings/components_strings_cs.xtb $(LOCAL_PATH)/components/strings/components_strings_da.xtb $(LOCAL_PATH)/components/strings/components_strings_de.xtb $(LOCAL_PATH)/components/strings/components_strings_el.xtb $(LOCAL_PATH)/components/strings/components_strings_en-GB.xtb $(LOCAL_PATH)/components/strings/components_strings_es-419.xtb $(LOCAL_PATH)/components/strings/components_strings_es.xtb $(LOCAL_PATH)/components/strings/components_strings_et.xtb $(LOCAL_PATH)/components/strings/components_strings_fa.xtb $(LOCAL_PATH)/components/strings/components_strings_fi.xtb $(LOCAL_PATH)/components/strings/components_strings_fil.xtb $(LOCAL_PATH)/components/strings/components_strings_fr.xtb $(LOCAL_PATH)/components/strings/components_strings_gu.xtb $(LOCAL_PATH)/components/strings/components_strings_hi.xtb $(LOCAL_PATH)/components/strings/components_strings_hr.xtb $(LOCAL_PATH)/components/strings/components_strings_hu.xtb $(LOCAL_PATH)/components/strings/components_strings_id.xtb $(LOCAL_PATH)/components/strings/components_strings_it.xtb $(LOCAL_PATH)/components/strings/components_strings_iw.xtb $(LOCAL_PATH)/components/strings/components_strings_ja.xtb $(LOCAL_PATH)/components/strings/components_strings_kn.xtb $(LOCAL_PATH)/components/strings/components_strings_ko.xtb $(LOCAL_PATH)/components/strings/components_strings_lt.xtb $(LOCAL_PATH)/components/strings/components_strings_lv.xtb $(LOCAL_PATH)/components/strings/components_strings_ml.xtb $(LOCAL_PATH)/components/strings/components_strings_mr.xtb $(LOCAL_PATH)/components/strings/components_strings_ms.xtb $(LOCAL_PATH)/components/strings/components_strings_nl.xtb $(LOCAL_PATH)/components/strings/components_strings_no.xtb $(LOCAL_PATH)/components/strings/components_strings_pl.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-BR.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-PT.xtb $(LOCAL_PATH)/components/strings/components_strings_ro.xtb $(LOCAL_PATH)/components/strings/components_strings_ru.xtb $(LOCAL_PATH)/components/strings/components_strings_sk.xtb $(LOCAL_PATH)/components/strings/components_strings_sl.xtb $(LOCAL_PATH)/components/strings/components_strings_sr.xtb $(LOCAL_PATH)/components/strings/components_strings_sv.xtb $(LOCAL_PATH)/components/strings/components_strings_sw.xtb $(LOCAL_PATH)/components/strings/components_strings_ta.xtb $(LOCAL_PATH)/components/strings/components_strings_te.xtb $(LOCAL_PATH)/components/strings/components_strings_th.xtb $(LOCAL_PATH)/components/strings/components_strings_tr.xtb $(LOCAL_PATH)/components/strings/components_strings_uk.xtb $(LOCAL_PATH)/components/strings/components_strings_vi.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-CN.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-TW.xtb $(LOCAL_PATH)/components/translate_strings.grdp $(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)/components/strings/grit/components_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/components/components_strings.grd $(LOCAL_PATH)/components/app_modal_dialogs_strings.grdp $(LOCAL_PATH)/components/autofill_strings.grdp $(LOCAL_PATH)/components/bookmark_bar_strings.grdp $(LOCAL_PATH)/components/dom_distiller_strings.grdp $(LOCAL_PATH)/components/error_page_strings.grdp $(LOCAL_PATH)/components/omnibox_strings.grdp $(LOCAL_PATH)/components/pdf_strings.grdp $(LOCAL_PATH)/components/policy_strings.grdp $(LOCAL_PATH)/components/strings/components_strings_am.xtb $(LOCAL_PATH)/components/strings/components_strings_ar.xtb $(LOCAL_PATH)/components/strings/components_strings_bg.xtb $(LOCAL_PATH)/components/strings/components_strings_bn.xtb $(LOCAL_PATH)/components/strings/components_strings_ca.xtb $(LOCAL_PATH)/components/strings/components_strings_cs.xtb $(LOCAL_PATH)/components/strings/components_strings_da.xtb $(LOCAL_PATH)/components/strings/components_strings_de.xtb $(LOCAL_PATH)/components/strings/components_strings_el.xtb $(LOCAL_PATH)/components/strings/components_strings_en-GB.xtb $(LOCAL_PATH)/components/strings/components_strings_es-419.xtb $(LOCAL_PATH)/components/strings/components_strings_es.xtb $(LOCAL_PATH)/components/strings/components_strings_et.xtb $(LOCAL_PATH)/components/strings/components_strings_fa.xtb $(LOCAL_PATH)/components/strings/components_strings_fi.xtb $(LOCAL_PATH)/components/strings/components_strings_fil.xtb $(LOCAL_PATH)/components/strings/components_strings_fr.xtb $(LOCAL_PATH)/components/strings/components_strings_gu.xtb $(LOCAL_PATH)/components/strings/components_strings_hi.xtb $(LOCAL_PATH)/components/strings/components_strings_hr.xtb $(LOCAL_PATH)/components/strings/components_strings_hu.xtb $(LOCAL_PATH)/components/strings/components_strings_id.xtb $(LOCAL_PATH)/components/strings/components_strings_it.xtb $(LOCAL_PATH)/components/strings/components_strings_iw.xtb $(LOCAL_PATH)/components/strings/components_strings_ja.xtb $(LOCAL_PATH)/components/strings/components_strings_kn.xtb $(LOCAL_PATH)/components/strings/components_strings_ko.xtb $(LOCAL_PATH)/components/strings/components_strings_lt.xtb $(LOCAL_PATH)/components/strings/components_strings_lv.xtb $(LOCAL_PATH)/components/strings/components_strings_ml.xtb $(LOCAL_PATH)/components/strings/components_strings_mr.xtb $(LOCAL_PATH)/components/strings/components_strings_ms.xtb $(LOCAL_PATH)/components/strings/components_strings_nl.xtb $(LOCAL_PATH)/components/strings/components_strings_no.xtb $(LOCAL_PATH)/components/strings/components_strings_pl.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-BR.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-PT.xtb $(LOCAL_PATH)/components/strings/components_strings_ro.xtb $(LOCAL_PATH)/components/strings/components_strings_ru.xtb $(LOCAL_PATH)/components/strings/components_strings_sk.xtb $(LOCAL_PATH)/components/strings/components_strings_sl.xtb $(LOCAL_PATH)/components/strings/components_strings_sr.xtb $(LOCAL_PATH)/components/strings/components_strings_sv.xtb $(LOCAL_PATH)/components/strings/components_strings_sw.xtb $(LOCAL_PATH)/components/strings/components_strings_ta.xtb $(LOCAL_PATH)/components/strings/components_strings_te.xtb $(LOCAL_PATH)/components/strings/components_strings_th.xtb $(LOCAL_PATH)/components/strings/components_strings_tr.xtb $(LOCAL_PATH)/components/strings/components_strings_uk.xtb $(LOCAL_PATH)/components/strings/components_strings_vi.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-CN.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-TW.xtb $(LOCAL_PATH)/components/translate_strings.grdp $(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 components_strings.grd ($@)"
 	$(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/strings/grit $(gyp_shared_intermediate_dir)/components/strings; python ../tools/grit/grit.py -i components_strings.grd build -f ../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/components/strings" -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/components/components_strings.target.linux-mips64.mk b/components/components_strings.target.linux-mips64.mk
index fb6360c..e68a742 100644
--- a/components/components_strings.target.linux-mips64.mk
+++ b/components/components_strings.target.linux-mips64.mk
@@ -20,7 +20,7 @@
 $(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/components/components_strings.grd $(LOCAL_PATH)/components/app_modal_dialogs_strings.grdp $(LOCAL_PATH)/components/autofill_strings.grdp $(LOCAL_PATH)/components/bookmark_bar_strings.grdp $(LOCAL_PATH)/components/dom_distiller_strings.grdp $(LOCAL_PATH)/components/error_page_strings.grdp $(LOCAL_PATH)/components/google_strings.grdp $(LOCAL_PATH)/components/omnibox_strings.grdp $(LOCAL_PATH)/components/pdf_strings.grdp $(LOCAL_PATH)/components/policy_strings.grdp $(LOCAL_PATH)/components/strings/components_strings_am.xtb $(LOCAL_PATH)/components/strings/components_strings_ar.xtb $(LOCAL_PATH)/components/strings/components_strings_bg.xtb $(LOCAL_PATH)/components/strings/components_strings_bn.xtb $(LOCAL_PATH)/components/strings/components_strings_ca.xtb $(LOCAL_PATH)/components/strings/components_strings_cs.xtb $(LOCAL_PATH)/components/strings/components_strings_da.xtb $(LOCAL_PATH)/components/strings/components_strings_de.xtb $(LOCAL_PATH)/components/strings/components_strings_el.xtb $(LOCAL_PATH)/components/strings/components_strings_en-GB.xtb $(LOCAL_PATH)/components/strings/components_strings_es-419.xtb $(LOCAL_PATH)/components/strings/components_strings_es.xtb $(LOCAL_PATH)/components/strings/components_strings_et.xtb $(LOCAL_PATH)/components/strings/components_strings_fa.xtb $(LOCAL_PATH)/components/strings/components_strings_fi.xtb $(LOCAL_PATH)/components/strings/components_strings_fil.xtb $(LOCAL_PATH)/components/strings/components_strings_fr.xtb $(LOCAL_PATH)/components/strings/components_strings_gu.xtb $(LOCAL_PATH)/components/strings/components_strings_hi.xtb $(LOCAL_PATH)/components/strings/components_strings_hr.xtb $(LOCAL_PATH)/components/strings/components_strings_hu.xtb $(LOCAL_PATH)/components/strings/components_strings_id.xtb $(LOCAL_PATH)/components/strings/components_strings_it.xtb $(LOCAL_PATH)/components/strings/components_strings_iw.xtb $(LOCAL_PATH)/components/strings/components_strings_ja.xtb $(LOCAL_PATH)/components/strings/components_strings_kn.xtb $(LOCAL_PATH)/components/strings/components_strings_ko.xtb $(LOCAL_PATH)/components/strings/components_strings_lt.xtb $(LOCAL_PATH)/components/strings/components_strings_lv.xtb $(LOCAL_PATH)/components/strings/components_strings_ml.xtb $(LOCAL_PATH)/components/strings/components_strings_mr.xtb $(LOCAL_PATH)/components/strings/components_strings_ms.xtb $(LOCAL_PATH)/components/strings/components_strings_nl.xtb $(LOCAL_PATH)/components/strings/components_strings_no.xtb $(LOCAL_PATH)/components/strings/components_strings_pl.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-BR.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-PT.xtb $(LOCAL_PATH)/components/strings/components_strings_ro.xtb $(LOCAL_PATH)/components/strings/components_strings_ru.xtb $(LOCAL_PATH)/components/strings/components_strings_sk.xtb $(LOCAL_PATH)/components/strings/components_strings_sl.xtb $(LOCAL_PATH)/components/strings/components_strings_sr.xtb $(LOCAL_PATH)/components/strings/components_strings_sv.xtb $(LOCAL_PATH)/components/strings/components_strings_sw.xtb $(LOCAL_PATH)/components/strings/components_strings_ta.xtb $(LOCAL_PATH)/components/strings/components_strings_te.xtb $(LOCAL_PATH)/components/strings/components_strings_th.xtb $(LOCAL_PATH)/components/strings/components_strings_tr.xtb $(LOCAL_PATH)/components/strings/components_strings_uk.xtb $(LOCAL_PATH)/components/strings/components_strings_vi.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-CN.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-TW.xtb $(LOCAL_PATH)/components/translate_strings.grdp $(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)/components/strings/grit/components_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/components/components_strings.grd $(LOCAL_PATH)/components/app_modal_dialogs_strings.grdp $(LOCAL_PATH)/components/autofill_strings.grdp $(LOCAL_PATH)/components/bookmark_bar_strings.grdp $(LOCAL_PATH)/components/dom_distiller_strings.grdp $(LOCAL_PATH)/components/error_page_strings.grdp $(LOCAL_PATH)/components/omnibox_strings.grdp $(LOCAL_PATH)/components/pdf_strings.grdp $(LOCAL_PATH)/components/policy_strings.grdp $(LOCAL_PATH)/components/strings/components_strings_am.xtb $(LOCAL_PATH)/components/strings/components_strings_ar.xtb $(LOCAL_PATH)/components/strings/components_strings_bg.xtb $(LOCAL_PATH)/components/strings/components_strings_bn.xtb $(LOCAL_PATH)/components/strings/components_strings_ca.xtb $(LOCAL_PATH)/components/strings/components_strings_cs.xtb $(LOCAL_PATH)/components/strings/components_strings_da.xtb $(LOCAL_PATH)/components/strings/components_strings_de.xtb $(LOCAL_PATH)/components/strings/components_strings_el.xtb $(LOCAL_PATH)/components/strings/components_strings_en-GB.xtb $(LOCAL_PATH)/components/strings/components_strings_es-419.xtb $(LOCAL_PATH)/components/strings/components_strings_es.xtb $(LOCAL_PATH)/components/strings/components_strings_et.xtb $(LOCAL_PATH)/components/strings/components_strings_fa.xtb $(LOCAL_PATH)/components/strings/components_strings_fi.xtb $(LOCAL_PATH)/components/strings/components_strings_fil.xtb $(LOCAL_PATH)/components/strings/components_strings_fr.xtb $(LOCAL_PATH)/components/strings/components_strings_gu.xtb $(LOCAL_PATH)/components/strings/components_strings_hi.xtb $(LOCAL_PATH)/components/strings/components_strings_hr.xtb $(LOCAL_PATH)/components/strings/components_strings_hu.xtb $(LOCAL_PATH)/components/strings/components_strings_id.xtb $(LOCAL_PATH)/components/strings/components_strings_it.xtb $(LOCAL_PATH)/components/strings/components_strings_iw.xtb $(LOCAL_PATH)/components/strings/components_strings_ja.xtb $(LOCAL_PATH)/components/strings/components_strings_kn.xtb $(LOCAL_PATH)/components/strings/components_strings_ko.xtb $(LOCAL_PATH)/components/strings/components_strings_lt.xtb $(LOCAL_PATH)/components/strings/components_strings_lv.xtb $(LOCAL_PATH)/components/strings/components_strings_ml.xtb $(LOCAL_PATH)/components/strings/components_strings_mr.xtb $(LOCAL_PATH)/components/strings/components_strings_ms.xtb $(LOCAL_PATH)/components/strings/components_strings_nl.xtb $(LOCAL_PATH)/components/strings/components_strings_no.xtb $(LOCAL_PATH)/components/strings/components_strings_pl.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-BR.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-PT.xtb $(LOCAL_PATH)/components/strings/components_strings_ro.xtb $(LOCAL_PATH)/components/strings/components_strings_ru.xtb $(LOCAL_PATH)/components/strings/components_strings_sk.xtb $(LOCAL_PATH)/components/strings/components_strings_sl.xtb $(LOCAL_PATH)/components/strings/components_strings_sr.xtb $(LOCAL_PATH)/components/strings/components_strings_sv.xtb $(LOCAL_PATH)/components/strings/components_strings_sw.xtb $(LOCAL_PATH)/components/strings/components_strings_ta.xtb $(LOCAL_PATH)/components/strings/components_strings_te.xtb $(LOCAL_PATH)/components/strings/components_strings_th.xtb $(LOCAL_PATH)/components/strings/components_strings_tr.xtb $(LOCAL_PATH)/components/strings/components_strings_uk.xtb $(LOCAL_PATH)/components/strings/components_strings_vi.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-CN.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-TW.xtb $(LOCAL_PATH)/components/translate_strings.grdp $(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 components_strings.grd ($@)"
 	$(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/strings/grit $(gyp_shared_intermediate_dir)/components/strings; python ../tools/grit/grit.py -i components_strings.grd build -f ../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/components/strings" -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/components/components_strings.target.linux-x86.mk b/components/components_strings.target.linux-x86.mk
index fb6360c..e68a742 100644
--- a/components/components_strings.target.linux-x86.mk
+++ b/components/components_strings.target.linux-x86.mk
@@ -20,7 +20,7 @@
 $(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/components/components_strings.grd $(LOCAL_PATH)/components/app_modal_dialogs_strings.grdp $(LOCAL_PATH)/components/autofill_strings.grdp $(LOCAL_PATH)/components/bookmark_bar_strings.grdp $(LOCAL_PATH)/components/dom_distiller_strings.grdp $(LOCAL_PATH)/components/error_page_strings.grdp $(LOCAL_PATH)/components/google_strings.grdp $(LOCAL_PATH)/components/omnibox_strings.grdp $(LOCAL_PATH)/components/pdf_strings.grdp $(LOCAL_PATH)/components/policy_strings.grdp $(LOCAL_PATH)/components/strings/components_strings_am.xtb $(LOCAL_PATH)/components/strings/components_strings_ar.xtb $(LOCAL_PATH)/components/strings/components_strings_bg.xtb $(LOCAL_PATH)/components/strings/components_strings_bn.xtb $(LOCAL_PATH)/components/strings/components_strings_ca.xtb $(LOCAL_PATH)/components/strings/components_strings_cs.xtb $(LOCAL_PATH)/components/strings/components_strings_da.xtb $(LOCAL_PATH)/components/strings/components_strings_de.xtb $(LOCAL_PATH)/components/strings/components_strings_el.xtb $(LOCAL_PATH)/components/strings/components_strings_en-GB.xtb $(LOCAL_PATH)/components/strings/components_strings_es-419.xtb $(LOCAL_PATH)/components/strings/components_strings_es.xtb $(LOCAL_PATH)/components/strings/components_strings_et.xtb $(LOCAL_PATH)/components/strings/components_strings_fa.xtb $(LOCAL_PATH)/components/strings/components_strings_fi.xtb $(LOCAL_PATH)/components/strings/components_strings_fil.xtb $(LOCAL_PATH)/components/strings/components_strings_fr.xtb $(LOCAL_PATH)/components/strings/components_strings_gu.xtb $(LOCAL_PATH)/components/strings/components_strings_hi.xtb $(LOCAL_PATH)/components/strings/components_strings_hr.xtb $(LOCAL_PATH)/components/strings/components_strings_hu.xtb $(LOCAL_PATH)/components/strings/components_strings_id.xtb $(LOCAL_PATH)/components/strings/components_strings_it.xtb $(LOCAL_PATH)/components/strings/components_strings_iw.xtb $(LOCAL_PATH)/components/strings/components_strings_ja.xtb $(LOCAL_PATH)/components/strings/components_strings_kn.xtb $(LOCAL_PATH)/components/strings/components_strings_ko.xtb $(LOCAL_PATH)/components/strings/components_strings_lt.xtb $(LOCAL_PATH)/components/strings/components_strings_lv.xtb $(LOCAL_PATH)/components/strings/components_strings_ml.xtb $(LOCAL_PATH)/components/strings/components_strings_mr.xtb $(LOCAL_PATH)/components/strings/components_strings_ms.xtb $(LOCAL_PATH)/components/strings/components_strings_nl.xtb $(LOCAL_PATH)/components/strings/components_strings_no.xtb $(LOCAL_PATH)/components/strings/components_strings_pl.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-BR.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-PT.xtb $(LOCAL_PATH)/components/strings/components_strings_ro.xtb $(LOCAL_PATH)/components/strings/components_strings_ru.xtb $(LOCAL_PATH)/components/strings/components_strings_sk.xtb $(LOCAL_PATH)/components/strings/components_strings_sl.xtb $(LOCAL_PATH)/components/strings/components_strings_sr.xtb $(LOCAL_PATH)/components/strings/components_strings_sv.xtb $(LOCAL_PATH)/components/strings/components_strings_sw.xtb $(LOCAL_PATH)/components/strings/components_strings_ta.xtb $(LOCAL_PATH)/components/strings/components_strings_te.xtb $(LOCAL_PATH)/components/strings/components_strings_th.xtb $(LOCAL_PATH)/components/strings/components_strings_tr.xtb $(LOCAL_PATH)/components/strings/components_strings_uk.xtb $(LOCAL_PATH)/components/strings/components_strings_vi.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-CN.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-TW.xtb $(LOCAL_PATH)/components/translate_strings.grdp $(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)/components/strings/grit/components_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/components/components_strings.grd $(LOCAL_PATH)/components/app_modal_dialogs_strings.grdp $(LOCAL_PATH)/components/autofill_strings.grdp $(LOCAL_PATH)/components/bookmark_bar_strings.grdp $(LOCAL_PATH)/components/dom_distiller_strings.grdp $(LOCAL_PATH)/components/error_page_strings.grdp $(LOCAL_PATH)/components/omnibox_strings.grdp $(LOCAL_PATH)/components/pdf_strings.grdp $(LOCAL_PATH)/components/policy_strings.grdp $(LOCAL_PATH)/components/strings/components_strings_am.xtb $(LOCAL_PATH)/components/strings/components_strings_ar.xtb $(LOCAL_PATH)/components/strings/components_strings_bg.xtb $(LOCAL_PATH)/components/strings/components_strings_bn.xtb $(LOCAL_PATH)/components/strings/components_strings_ca.xtb $(LOCAL_PATH)/components/strings/components_strings_cs.xtb $(LOCAL_PATH)/components/strings/components_strings_da.xtb $(LOCAL_PATH)/components/strings/components_strings_de.xtb $(LOCAL_PATH)/components/strings/components_strings_el.xtb $(LOCAL_PATH)/components/strings/components_strings_en-GB.xtb $(LOCAL_PATH)/components/strings/components_strings_es-419.xtb $(LOCAL_PATH)/components/strings/components_strings_es.xtb $(LOCAL_PATH)/components/strings/components_strings_et.xtb $(LOCAL_PATH)/components/strings/components_strings_fa.xtb $(LOCAL_PATH)/components/strings/components_strings_fi.xtb $(LOCAL_PATH)/components/strings/components_strings_fil.xtb $(LOCAL_PATH)/components/strings/components_strings_fr.xtb $(LOCAL_PATH)/components/strings/components_strings_gu.xtb $(LOCAL_PATH)/components/strings/components_strings_hi.xtb $(LOCAL_PATH)/components/strings/components_strings_hr.xtb $(LOCAL_PATH)/components/strings/components_strings_hu.xtb $(LOCAL_PATH)/components/strings/components_strings_id.xtb $(LOCAL_PATH)/components/strings/components_strings_it.xtb $(LOCAL_PATH)/components/strings/components_strings_iw.xtb $(LOCAL_PATH)/components/strings/components_strings_ja.xtb $(LOCAL_PATH)/components/strings/components_strings_kn.xtb $(LOCAL_PATH)/components/strings/components_strings_ko.xtb $(LOCAL_PATH)/components/strings/components_strings_lt.xtb $(LOCAL_PATH)/components/strings/components_strings_lv.xtb $(LOCAL_PATH)/components/strings/components_strings_ml.xtb $(LOCAL_PATH)/components/strings/components_strings_mr.xtb $(LOCAL_PATH)/components/strings/components_strings_ms.xtb $(LOCAL_PATH)/components/strings/components_strings_nl.xtb $(LOCAL_PATH)/components/strings/components_strings_no.xtb $(LOCAL_PATH)/components/strings/components_strings_pl.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-BR.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-PT.xtb $(LOCAL_PATH)/components/strings/components_strings_ro.xtb $(LOCAL_PATH)/components/strings/components_strings_ru.xtb $(LOCAL_PATH)/components/strings/components_strings_sk.xtb $(LOCAL_PATH)/components/strings/components_strings_sl.xtb $(LOCAL_PATH)/components/strings/components_strings_sr.xtb $(LOCAL_PATH)/components/strings/components_strings_sv.xtb $(LOCAL_PATH)/components/strings/components_strings_sw.xtb $(LOCAL_PATH)/components/strings/components_strings_ta.xtb $(LOCAL_PATH)/components/strings/components_strings_te.xtb $(LOCAL_PATH)/components/strings/components_strings_th.xtb $(LOCAL_PATH)/components/strings/components_strings_tr.xtb $(LOCAL_PATH)/components/strings/components_strings_uk.xtb $(LOCAL_PATH)/components/strings/components_strings_vi.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-CN.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-TW.xtb $(LOCAL_PATH)/components/translate_strings.grdp $(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 components_strings.grd ($@)"
 	$(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/strings/grit $(gyp_shared_intermediate_dir)/components/strings; python ../tools/grit/grit.py -i components_strings.grd build -f ../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/components/strings" -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/components/components_strings.target.linux-x86_64.mk b/components/components_strings.target.linux-x86_64.mk
index fb6360c..e68a742 100644
--- a/components/components_strings.target.linux-x86_64.mk
+++ b/components/components_strings.target.linux-x86_64.mk
@@ -20,7 +20,7 @@
 $(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/components/strings/grit/components_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/components/components_strings.grd $(LOCAL_PATH)/components/app_modal_dialogs_strings.grdp $(LOCAL_PATH)/components/autofill_strings.grdp $(LOCAL_PATH)/components/bookmark_bar_strings.grdp $(LOCAL_PATH)/components/dom_distiller_strings.grdp $(LOCAL_PATH)/components/error_page_strings.grdp $(LOCAL_PATH)/components/google_strings.grdp $(LOCAL_PATH)/components/omnibox_strings.grdp $(LOCAL_PATH)/components/pdf_strings.grdp $(LOCAL_PATH)/components/policy_strings.grdp $(LOCAL_PATH)/components/strings/components_strings_am.xtb $(LOCAL_PATH)/components/strings/components_strings_ar.xtb $(LOCAL_PATH)/components/strings/components_strings_bg.xtb $(LOCAL_PATH)/components/strings/components_strings_bn.xtb $(LOCAL_PATH)/components/strings/components_strings_ca.xtb $(LOCAL_PATH)/components/strings/components_strings_cs.xtb $(LOCAL_PATH)/components/strings/components_strings_da.xtb $(LOCAL_PATH)/components/strings/components_strings_de.xtb $(LOCAL_PATH)/components/strings/components_strings_el.xtb $(LOCAL_PATH)/components/strings/components_strings_en-GB.xtb $(LOCAL_PATH)/components/strings/components_strings_es-419.xtb $(LOCAL_PATH)/components/strings/components_strings_es.xtb $(LOCAL_PATH)/components/strings/components_strings_et.xtb $(LOCAL_PATH)/components/strings/components_strings_fa.xtb $(LOCAL_PATH)/components/strings/components_strings_fi.xtb $(LOCAL_PATH)/components/strings/components_strings_fil.xtb $(LOCAL_PATH)/components/strings/components_strings_fr.xtb $(LOCAL_PATH)/components/strings/components_strings_gu.xtb $(LOCAL_PATH)/components/strings/components_strings_hi.xtb $(LOCAL_PATH)/components/strings/components_strings_hr.xtb $(LOCAL_PATH)/components/strings/components_strings_hu.xtb $(LOCAL_PATH)/components/strings/components_strings_id.xtb $(LOCAL_PATH)/components/strings/components_strings_it.xtb $(LOCAL_PATH)/components/strings/components_strings_iw.xtb $(LOCAL_PATH)/components/strings/components_strings_ja.xtb $(LOCAL_PATH)/components/strings/components_strings_kn.xtb $(LOCAL_PATH)/components/strings/components_strings_ko.xtb $(LOCAL_PATH)/components/strings/components_strings_lt.xtb $(LOCAL_PATH)/components/strings/components_strings_lv.xtb $(LOCAL_PATH)/components/strings/components_strings_ml.xtb $(LOCAL_PATH)/components/strings/components_strings_mr.xtb $(LOCAL_PATH)/components/strings/components_strings_ms.xtb $(LOCAL_PATH)/components/strings/components_strings_nl.xtb $(LOCAL_PATH)/components/strings/components_strings_no.xtb $(LOCAL_PATH)/components/strings/components_strings_pl.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-BR.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-PT.xtb $(LOCAL_PATH)/components/strings/components_strings_ro.xtb $(LOCAL_PATH)/components/strings/components_strings_ru.xtb $(LOCAL_PATH)/components/strings/components_strings_sk.xtb $(LOCAL_PATH)/components/strings/components_strings_sl.xtb $(LOCAL_PATH)/components/strings/components_strings_sr.xtb $(LOCAL_PATH)/components/strings/components_strings_sv.xtb $(LOCAL_PATH)/components/strings/components_strings_sw.xtb $(LOCAL_PATH)/components/strings/components_strings_ta.xtb $(LOCAL_PATH)/components/strings/components_strings_te.xtb $(LOCAL_PATH)/components/strings/components_strings_th.xtb $(LOCAL_PATH)/components/strings/components_strings_tr.xtb $(LOCAL_PATH)/components/strings/components_strings_uk.xtb $(LOCAL_PATH)/components/strings/components_strings_vi.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-CN.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-TW.xtb $(LOCAL_PATH)/components/translate_strings.grdp $(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)/components/strings/grit/components_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/components/components_strings.grd $(LOCAL_PATH)/components/app_modal_dialogs_strings.grdp $(LOCAL_PATH)/components/autofill_strings.grdp $(LOCAL_PATH)/components/bookmark_bar_strings.grdp $(LOCAL_PATH)/components/dom_distiller_strings.grdp $(LOCAL_PATH)/components/error_page_strings.grdp $(LOCAL_PATH)/components/omnibox_strings.grdp $(LOCAL_PATH)/components/pdf_strings.grdp $(LOCAL_PATH)/components/policy_strings.grdp $(LOCAL_PATH)/components/strings/components_strings_am.xtb $(LOCAL_PATH)/components/strings/components_strings_ar.xtb $(LOCAL_PATH)/components/strings/components_strings_bg.xtb $(LOCAL_PATH)/components/strings/components_strings_bn.xtb $(LOCAL_PATH)/components/strings/components_strings_ca.xtb $(LOCAL_PATH)/components/strings/components_strings_cs.xtb $(LOCAL_PATH)/components/strings/components_strings_da.xtb $(LOCAL_PATH)/components/strings/components_strings_de.xtb $(LOCAL_PATH)/components/strings/components_strings_el.xtb $(LOCAL_PATH)/components/strings/components_strings_en-GB.xtb $(LOCAL_PATH)/components/strings/components_strings_es-419.xtb $(LOCAL_PATH)/components/strings/components_strings_es.xtb $(LOCAL_PATH)/components/strings/components_strings_et.xtb $(LOCAL_PATH)/components/strings/components_strings_fa.xtb $(LOCAL_PATH)/components/strings/components_strings_fi.xtb $(LOCAL_PATH)/components/strings/components_strings_fil.xtb $(LOCAL_PATH)/components/strings/components_strings_fr.xtb $(LOCAL_PATH)/components/strings/components_strings_gu.xtb $(LOCAL_PATH)/components/strings/components_strings_hi.xtb $(LOCAL_PATH)/components/strings/components_strings_hr.xtb $(LOCAL_PATH)/components/strings/components_strings_hu.xtb $(LOCAL_PATH)/components/strings/components_strings_id.xtb $(LOCAL_PATH)/components/strings/components_strings_it.xtb $(LOCAL_PATH)/components/strings/components_strings_iw.xtb $(LOCAL_PATH)/components/strings/components_strings_ja.xtb $(LOCAL_PATH)/components/strings/components_strings_kn.xtb $(LOCAL_PATH)/components/strings/components_strings_ko.xtb $(LOCAL_PATH)/components/strings/components_strings_lt.xtb $(LOCAL_PATH)/components/strings/components_strings_lv.xtb $(LOCAL_PATH)/components/strings/components_strings_ml.xtb $(LOCAL_PATH)/components/strings/components_strings_mr.xtb $(LOCAL_PATH)/components/strings/components_strings_ms.xtb $(LOCAL_PATH)/components/strings/components_strings_nl.xtb $(LOCAL_PATH)/components/strings/components_strings_no.xtb $(LOCAL_PATH)/components/strings/components_strings_pl.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-BR.xtb $(LOCAL_PATH)/components/strings/components_strings_pt-PT.xtb $(LOCAL_PATH)/components/strings/components_strings_ro.xtb $(LOCAL_PATH)/components/strings/components_strings_ru.xtb $(LOCAL_PATH)/components/strings/components_strings_sk.xtb $(LOCAL_PATH)/components/strings/components_strings_sl.xtb $(LOCAL_PATH)/components/strings/components_strings_sr.xtb $(LOCAL_PATH)/components/strings/components_strings_sv.xtb $(LOCAL_PATH)/components/strings/components_strings_sw.xtb $(LOCAL_PATH)/components/strings/components_strings_ta.xtb $(LOCAL_PATH)/components/strings/components_strings_te.xtb $(LOCAL_PATH)/components/strings/components_strings_th.xtb $(LOCAL_PATH)/components/strings/components_strings_tr.xtb $(LOCAL_PATH)/components/strings/components_strings_uk.xtb $(LOCAL_PATH)/components/strings/components_strings_vi.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-CN.xtb $(LOCAL_PATH)/components/strings/components_strings_zh-TW.xtb $(LOCAL_PATH)/components/translate_strings.grdp $(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 components_strings.grd ($@)"
 	$(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/strings/grit $(gyp_shared_intermediate_dir)/components/strings; python ../tools/grit/grit.py -i components_strings.grd build -f ../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/components/strings" -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/components/data_reduction_proxy/core/browser/data_reduction_proxy_protocol.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_protocol.cc
index f51ea87..1ed0a22 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_protocol.cc
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_protocol.cc
@@ -157,7 +157,7 @@
         params &&
         params->IsDataReductionProxy(result->proxy_server().host_port_pair(),
                                      NULL)) {
-      result->UseDirect();
+      result->RemoveProxiesWithoutScheme(net::ProxyServer::SCHEME_DIRECT);
     }
   }
 }
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_protocol_unittest.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_protocol_unittest.cc
index e7d3302..4222aa5 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_protocol_unittest.cc
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_protocol_unittest.cc
@@ -825,7 +825,10 @@
   net::ProxyInfo data_reduction_proxy_info;
   std::string data_reduction_proxy;
   base::TrimString(test_params.DefaultOrigin(), "/", &data_reduction_proxy);
-  data_reduction_proxy_info.UseNamedProxy(data_reduction_proxy);
+  data_reduction_proxy_info.UsePacString(
+      "PROXY " +
+      HostPortPair::FromURL(GURL(test_params.DefaultOrigin())).ToString() +
+      "; DIRECT");
   EXPECT_FALSE(data_reduction_proxy_info.is_empty());
 
   // Data reduction proxy config
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 de3535b..908c52f 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.69\"" 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.87\"" 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 de3535b..908c52f 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.69\"" 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.87\"" 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 de3535b..908c52f 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.69\"" 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.87\"" 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 de3535b..908c52f 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.69\"" 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.87\"" 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 de3535b..908c52f 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.69\"" 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.87\"" 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 de3535b..908c52f 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.69\"" 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.87\"" 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 de3535b..908c52f 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.69\"" 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.87\"" 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 de3535b..908c52f 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.69\"" 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.87\"" 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 de3535b..908c52f 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.69\"" 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.87\"" 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 de3535b..908c52f 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.69\"" 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.87\"" 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 de3535b..908c52f 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.69\"" 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.87\"" 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 de3535b..908c52f 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.69\"" 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.87\"" data_reduction_proxy/core/common/version.h.in "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/core/common/version.h"
 
 
 
diff --git a/components/google.gypi b/components/google.gypi
index 93cc4e4..5fb0dd0 100644
--- a/components/google.gypi
+++ b/components/google.gypi
@@ -11,11 +11,9 @@
       'dependencies': [
         '../base/base.gyp:base',
         '../net/net.gyp:net',
-        '../ui/base/ui_base.gyp:ui_base',
         '../url/url.gyp:url_lib',
         'components_strings.gyp:components_strings',
         'keyed_service_core',
-        'infobars_core',
         'url_fixer',
       ],
       'include_dirs': [
@@ -33,17 +31,9 @@
         'google/core/browser/google_url_tracker.h',
         'google/core/browser/google_url_tracker_client.cc',
         'google/core/browser/google_url_tracker_client.h',
-        'google/core/browser/google_url_tracker_infobar_delegate.cc',
-        'google/core/browser/google_url_tracker_infobar_delegate.h',
-        'google/core/browser/google_url_tracker_map_entry.cc',
-        'google/core/browser/google_url_tracker_map_entry.h',
-        'google/core/browser/google_url_tracker_navigation_helper.cc',
-        'google/core/browser/google_url_tracker_navigation_helper.h',
         'google/core/browser/google_util.cc',
         'google/core/browser/google_util.h',
       ],
-      # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
-      'msvs_disabled_warnings': [4267, ],
     },
   ],
 }
diff --git a/components/google/DEPS b/components/google/DEPS
index 0d4bff1..c39802b 100644
--- a/components/google/DEPS
+++ b/components/google/DEPS
@@ -1,6 +1,4 @@
 include_rules = [
   "+components/url_fixer",
-  "+grit",
   "+net",
-  "+ui",
 ]
diff --git a/components/google/core/browser/BUILD.gn b/components/google/core/browser/BUILD.gn
index 67c137e..86c4b9b 100644
--- a/components/google/core/browser/BUILD.gn
+++ b/components/google/core/browser/BUILD.gn
@@ -14,29 +14,16 @@
     "google_url_tracker.h",
     "google_url_tracker_client.cc",
     "google_url_tracker_client.h",
-    "google_url_tracker_infobar_delegate.cc",
-    "google_url_tracker_infobar_delegate.h",
-    "google_url_tracker_map_entry.cc",
-    "google_url_tracker_map_entry.h",
-    "google_url_tracker_navigation_helper.cc",
-    "google_url_tracker_navigation_helper.h",
     "google_util.cc",
     "google_util.h",
   ]
 
-  if (is_win) {
-    # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
-    cflags = [ "/wd4267" ]
-  }
-
   deps = [
     "//base",
     "//components/keyed_service/core",
-    "//components/infobars/core",
     "//components/strings",
     "//components/url_fixer",
     "//net",
-    "//ui/base",
     "//url",
   ]
 }
diff --git a/components/google/core/browser/DEPS b/components/google/core/browser/DEPS
index 91670bd..f0bf3d9 100644
--- a/components/google/core/browser/DEPS
+++ b/components/google/core/browser/DEPS
@@ -1,4 +1,3 @@
 include_rules = [
-  "+components/infobars/core",
   "+components/keyed_service/core",
 ]
diff --git a/components/google/core/browser/google_pref_names.cc b/components/google/core/browser/google_pref_names.cc
index 81e6749..eeb8de1 100644
--- a/components/google/core/browser/google_pref_names.cc
+++ b/components/google/core/browser/google_pref_names.cc
@@ -11,10 +11,4 @@
 // correct Google domain/country code for whatever location the user is in.
 const char kLastKnownGoogleURL[] = "browser.last_known_google_url";
 
-// String containing the last prompted Google URL to the user.
-// If the user is using .x TLD for Google URL and gets prompted about .y TLD
-// for Google URL, and says "no", we should leave the search engine set to .x
-// but not prompt again until the domain changes away from .y.
-const char kLastPromptedGoogleURL[] = "browser.last_prompted_google_url";
-
 }  // namespace prefs
diff --git a/components/google/core/browser/google_pref_names.h b/components/google/core/browser/google_pref_names.h
index 2c58dd2..4307c92 100644
--- a/components/google/core/browser/google_pref_names.h
+++ b/components/google/core/browser/google_pref_names.h
@@ -10,7 +10,6 @@
 // Alphabetical list of preference names specific to the Google
 // component. Keep alphabetized, and document each in the .cc file.
 extern const char kLastKnownGoogleURL[];
-extern const char kLastPromptedGoogleURL[];
 
 }  // namespace prefs
 
diff --git a/components/google/core/browser/google_url_tracker.cc b/components/google/core/browser/google_url_tracker.cc
index be9296b..fce813c 100644
--- a/components/google/core/browser/google_url_tracker.cc
+++ b/components/google/core/browser/google_url_tracker.cc
@@ -10,13 +10,8 @@
 #include "base/strings/string_util.h"
 #include "components/google/core/browser/google_pref_names.h"
 #include "components/google/core/browser/google_switches.h"
-#include "components/google/core/browser/google_url_tracker_infobar_delegate.h"
-#include "components/google/core/browser/google_url_tracker_navigation_helper.h"
 #include "components/google/core/browser/google_util.h"
-#include "components/infobars/core/infobar.h"
-#include "components/infobars/core/infobar_manager.h"
 #include "net/base/load_flags.h"
-#include "net/base/net_util.h"
 #include "net/url_request/url_fetcher.h"
 #include "net/url_request/url_request_status.h"
 
@@ -36,8 +31,6 @@
       in_startup_sleep_(true),
       already_fetched_(false),
       need_to_fetch_(false),
-      need_to_prompt_(false),
-      search_committed_(false),
       weak_ptr_factory_(this) {
   net::NetworkChangeNotifier::AddNetworkChangeObserver(this);
   client_->set_google_url_tracker(this);
@@ -61,9 +54,6 @@
 }
 
 GoogleURLTracker::~GoogleURLTracker() {
-  // We should only reach here after any tabs and their infobars have been torn
-  // down.
-  DCHECK(entry_map_.empty());
 }
 
 void GoogleURLTracker::RequestServerCheck(bool force) {
@@ -76,33 +66,9 @@
   }
 }
 
-void GoogleURLTracker::SearchCommitted() {
-  if (need_to_prompt_) {
-    search_committed_ = true;
-    // These notifications will fire a bit later in the same call chain we're
-    // currently in.
-    if (!client_->IsListeningForNavigationStart())
-      client_->SetListeningForNavigationStart(true);
-  }
-}
-
-void GoogleURLTracker::AcceptGoogleURL(bool redo_searches) {
-  GURL old_google_url = google_url_;
-  google_url_ = fetched_google_url_;
-  PrefService* prefs = client_->GetPrefs();
-  prefs->SetString(prefs::kLastKnownGoogleURL, google_url_.spec());
-  prefs->SetString(prefs::kLastPromptedGoogleURL, google_url_.spec());
-  NotifyGoogleURLUpdated();
-
-  need_to_prompt_ = false;
-  CloseAllEntries(redo_searches);
-}
-
-void GoogleURLTracker::CancelGoogleURL() {
-  client_->GetPrefs()->SetString(prefs::kLastPromptedGoogleURL,
-                                 fetched_google_url_.spec());
-  need_to_prompt_ = false;
-  CloseAllEntries(false);
+scoped_ptr<GoogleURLTracker::Subscription> GoogleURLTracker::RegisterCallback(
+    const OnGoogleURLUpdatedCallback& cb) {
+  return callback_list_.Add(cb);
 }
 
 void GoogleURLTracker::OnURLFetchComplete(const net::URLFetcher* source) {
@@ -128,54 +94,11 @@
                                       google_util::DISALLOW_NON_STANDARD_PORTS))
     return;
 
-  std::swap(url, fetched_google_url_);
-  GURL last_prompted_url(
-      client_->GetPrefs()->GetString(prefs::kLastPromptedGoogleURL));
-
-  if (last_prompted_url.is_empty()) {
-    // On the very first run of Chrome, when we've never looked up the URL at
-    // all, we should just silently switch over to whatever we get immediately.
-    AcceptGoogleURL(true);  // Arg is irrelevant.
-    return;
-  }
-
-  base::string16 fetched_host(net::StripWWWFromHost(fetched_google_url_));
-  if (fetched_google_url_ == google_url_) {
-    // Either the user has continually been on this URL, or we prompted for a
-    // different URL but have now changed back before they responded to any of
-    // the prompts.  In this latter case we want to close any infobars and stop
-    // prompting.
-    CancelGoogleURL();
-  } else if (fetched_host == net::StripWWWFromHost(google_url_)) {
-    // Similar to the above case, but this time the new URL differs from the
-    // existing one, probably due to switching between HTTP and HTTPS searching.
-    // Like before we want to close any infobars and stop prompting; we also
-    // want to silently accept the change in scheme.  We don't redo open
-    // searches so as to avoid suddenly changing a page the user might be
-    // interacting with; it's enough to simply get future searches right.
-    AcceptGoogleURL(false);
-  } else if (fetched_host == net::StripWWWFromHost(last_prompted_url)) {
-    // We've re-fetched a TLD the user previously turned down.  Although the new
-    // URL might have a different scheme than the old, we want to preserve the
-    // user's decision.  Note that it's possible that, like in the above two
-    // cases, we fetched yet another different URL in the meantime, which we
-    // have infobars prompting about; in this case, as in those above, we want
-    // to go ahead and close the infobars and stop prompting, since we've
-    // switched back away from that URL.
-    CancelGoogleURL();
-  } else {
-    // We've fetched a URL with a different TLD than the user is currently using
-    // or was previously prompted about.  This means we need to prompt again.
-    need_to_prompt_ = true;
-
-    // As in all the above cases, there could be infobars prompting about some
-    // URL.  If these URLs have the same TLD (e.g. for scheme changes), we can
-    // simply leave the existing infobars open as their messages will still be
-    // accurate.  Otherwise we go ahead and close them because we need to
-    // display a new message.
-    // Note: |url| is the previous |fetched_google_url_|.
-    if (url.is_valid() && (fetched_host != net::StripWWWFromHost(url)))
-      CloseAllEntries(false);
+  if (url != google_url_) {
+    google_url_ = url;
+    client_->GetPrefs()->SetString(prefs::kLastKnownGoogleURL,
+                                   google_url_.spec());
+    callback_list_.Notify();
   }
 }
 
@@ -195,19 +118,6 @@
   net::NetworkChangeNotifier::RemoveNetworkChangeObserver(this);
 }
 
-void GoogleURLTracker::DeleteMapEntryForManager(
-    const infobars::InfoBarManager* infobar_manager) {
-  // WARNING: |infobar_manager| may point to a deleted object.  Do not
-  // dereference it!  See OnTabClosed().
-  EntryMap::iterator i(entry_map_.find(infobar_manager));
-  DCHECK(i != entry_map_.end());
-  GoogleURLTrackerMapEntry* map_entry = i->second;
-
-  UnregisterForEntrySpecificNotifications(map_entry, false);
-  entry_map_.erase(i);
-  delete map_entry;
-}
-
 void GoogleURLTracker::SetNeedToFetch() {
   need_to_fetch_ = true;
   StartFetchIfDesirable();
@@ -260,156 +170,3 @@
 
   fetcher_->Start();
 }
-
-void GoogleURLTracker::OnNavigationPending(
-    scoped_ptr<GoogleURLTrackerNavigationHelper> nav_helper,
-    infobars::InfoBarManager* infobar_manager,
-    int pending_id) {
-  GoogleURLTrackerMapEntry* map_entry = NULL;
-
-  EntryMap::iterator i(entry_map_.find(infobar_manager));
-  if (i != entry_map_.end())
-    map_entry = i->second;
-
-  if (search_committed_) {
-    search_committed_ = false;
-    if (!map_entry) {
-      // This is a search on a tab that doesn't have one of our infobars, so
-      // prepare to add one.  Note that we only listen for the tab's destruction
-      // on this path; if there was already a map entry, then either it doesn't
-      // yet have an infobar and we're already registered for this, or it has an
-      // infobar and the infobar's owner will handle tearing it down when the
-      // tab is destroyed.
-      map_entry = new GoogleURLTrackerMapEntry(
-          this, infobar_manager, nav_helper.Pass());
-      map_entry->navigation_helper()->SetListeningForTabDestruction(true);
-      entry_map_.insert(std::make_pair(infobar_manager, map_entry));
-    } else if (map_entry->infobar_delegate()) {
-      // This is a new search on a tab where we already have an infobar.
-      map_entry->infobar_delegate()->set_pending_id(pending_id);
-    }
-
-    // Whether there's an existing infobar or not, we need to listen for the
-    // load to commit, so we can show and/or update the infobar when it does.
-    // (We may already be registered for this if there is an existing infobar
-    // that had a previous pending search that hasn't yet committed.)
-    if (!map_entry->navigation_helper()->IsListeningForNavigationCommit())
-      map_entry->navigation_helper()->SetListeningForNavigationCommit(true);
-  } else if (map_entry) {
-    if (map_entry->has_infobar_delegate()) {
-      // This is a non-search navigation on a tab with an infobar.  If there was
-      // a previous pending search on this tab, this means it won't commit, so
-      // undo anything we did in response to seeing that.  Note that if there
-      // was no pending search on this tab, these statements are effectively a
-      // no-op.
-      //
-      // If this navigation actually commits, that will trigger the infobar's
-      // owner to expire the infobar if need be.  If it doesn't commit, then
-      // simply leaving the infobar as-is will have been the right thing.
-      UnregisterForEntrySpecificNotifications(map_entry, false);
-      map_entry->infobar_delegate()->set_pending_id(0);
-    } else {
-      // Non-search navigation on a tab with an entry that has not yet created
-      // an infobar.  This means the original search won't commit, so delete the
-      // entry.
-      map_entry->Close(false);
-    }
-  } else {
-    // Non-search navigation on a tab without an infobars.  This is irrelevant
-    // to us.
-  }
-}
-
-void GoogleURLTracker::OnNavigationCommitted(
-    infobars::InfoBarManager* infobar_manager,
-    const GURL& search_url) {
-  EntryMap::iterator i(entry_map_.find(infobar_manager));
-  DCHECK(i != entry_map_.end());
-  GoogleURLTrackerMapEntry* map_entry = i->second;
-  DCHECK(search_url.is_valid());
-
-  UnregisterForEntrySpecificNotifications(map_entry, true);
-  if (map_entry->has_infobar_delegate()) {
-    map_entry->infobar_delegate()->Update(search_url);
-  } else {
-    infobars::InfoBar* infobar = GoogleURLTrackerInfoBarDelegate::Create(
-        infobar_manager, this, search_url);
-    if (infobar) {
-      map_entry->SetInfoBarDelegate(
-          static_cast<GoogleURLTrackerInfoBarDelegate*>(infobar->delegate()));
-    } else {
-      map_entry->Close(false);
-    }
-  }
-}
-
-void GoogleURLTracker::OnTabClosed(
-    GoogleURLTrackerNavigationHelper* nav_helper) {
-  // Because InfoBarManager tears itself down on tab destruction, it's possible
-  // to get a non-NULL InfoBarManager pointer here, depending on which order
-  // notifications fired in.  Likewise, the pointer in |entry_map_| (and in its
-  // associated MapEntry) may point to deleted memory.  Therefore, if we were
-  // to access the InfoBarManager* we have for this tab, we'd need to ensure we
-  // just looked at the raw pointer value, and never dereferenced it.  This
-  // function doesn't need to do even that, but others in the call chain from
-  // here might (and have comments pointing back here).
-  for (EntryMap::iterator i(entry_map_.begin()); i != entry_map_.end(); ++i) {
-    if (i->second->navigation_helper() == nav_helper) {
-      i->second->Close(false);
-      return;
-    }
-  }
-  NOTREACHED();
-}
-
-scoped_ptr<GoogleURLTracker::Subscription> GoogleURLTracker::RegisterCallback(
-    const OnGoogleURLUpdatedCallback& cb) {
-  return callback_list_.Add(cb);
-}
-
-void GoogleURLTracker::CloseAllEntries(bool redo_searches) {
-  // Delete all entries, whether they have infobars or not.
-  while (!entry_map_.empty())
-    entry_map_.begin()->second->Close(redo_searches);
-}
-
-void GoogleURLTracker::UnregisterForEntrySpecificNotifications(
-    GoogleURLTrackerMapEntry* map_entry,
-    bool must_be_listening_for_commit) {
-  // For tabs with map entries but no infobars, we should always be listening
-  // for both these notifications.  For tabs with infobars, we may be listening
-  // for navigation commits if the user has performed a new search on this tab.
-  if (map_entry->navigation_helper()->IsListeningForNavigationCommit()) {
-    map_entry->navigation_helper()->SetListeningForNavigationCommit(false);
-  } else {
-    DCHECK(!must_be_listening_for_commit);
-    DCHECK(map_entry->has_infobar_delegate());
-  }
-  const bool registered_for_tab_destruction =
-      map_entry->navigation_helper()->IsListeningForTabDestruction();
-  DCHECK_NE(registered_for_tab_destruction, map_entry->has_infobar_delegate());
-  if (registered_for_tab_destruction) {
-    map_entry->navigation_helper()->SetListeningForTabDestruction(false);
-  }
-
-  // Our global listeners for these other notifications should be in place iff
-  // we have any tabs still listening for commits.  These tabs either have no
-  // infobars or have received new pending searches atop existing infobars; in
-  // either case we want to catch subsequent pending non-search navigations.
-  // See the various cases inside OnNavigationPending().
-  for (EntryMap::const_iterator i(entry_map_.begin()); i != entry_map_.end();
-       ++i) {
-    if (i->second->navigation_helper()->IsListeningForNavigationCommit()) {
-      DCHECK(client_->IsListeningForNavigationStart());
-      return;
-    }
-  }
-  if (client_->IsListeningForNavigationStart()) {
-    DCHECK(!search_committed_);
-    client_->SetListeningForNavigationStart(false);
-  }
-}
-
-void GoogleURLTracker::NotifyGoogleURLUpdated() {
-  callback_list_.Notify();
-}
diff --git a/components/google/core/browser/google_url_tracker.h b/components/google/core/browser/google_url_tracker.h
index aaa2c4b..ad30b3a 100644
--- a/components/google/core/browser/google_url_tracker.h
+++ b/components/google/core/browser/google_url_tracker.h
@@ -5,17 +5,11 @@
 #ifndef COMPONENTS_GOOGLE_CORE_BROWSER_GOOGLE_URL_TRACKER_H_
 #define COMPONENTS_GOOGLE_CORE_BROWSER_GOOGLE_URL_TRACKER_H_
 
-#include <map>
-#include <string>
-#include <utility>
-
 #include "base/callback_forward.h"
 #include "base/callback_list.h"
-#include "base/gtest_prod_util.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "components/google/core/browser/google_url_tracker_client.h"
-#include "components/google/core/browser/google_url_tracker_map_entry.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "net/base/network_change_notifier.h"
 #include "net/url_request/url_fetcher.h"
@@ -30,8 +24,7 @@
 }
 
 // This object is responsible for checking the Google URL once per network
-// change, and if necessary prompting the user to see if they want to change to
-// using it.  The current and last prompted values are saved to prefs.
+// change.  The current value is saved to prefs.
 //
 // Most consumers should only call google_url().  Consumers who need to be
 // notified when things change should register a callback that provides the
@@ -77,44 +70,6 @@
   // check, it will check again.
   void RequestServerCheck(bool force);
 
-  // Notifies the tracker that the user has started a Google search.
-  // If prompting is necessary, we then listen for the subsequent pending
-  // navigation to get the appropriate NavigationHelper. When the load
-  // commits, we'll show the infobar.
-  void SearchCommitted();
-
-  // No one but GoogleURLTrackerInfoBarDelegate or test code should call these.
-  void AcceptGoogleURL(bool redo_searches);
-  void CancelGoogleURL();
-  const GURL& fetched_google_url() const { return fetched_google_url_; }
-  GoogleURLTrackerClient* client() { return client_.get(); }
-
-  // No one but GoogleURLTrackerMapEntry should call this.
-  void DeleteMapEntryForManager(
-      const infobars::InfoBarManager* infobar_manager);
-
-  // Called by the client after SearchCommitted() registers listeners,
-  // to indicate that we've received the "load now pending" notification.
-  // |nav_helper| is the GoogleURLTrackerNavigationHelper associated with this
-  // navigation; |infobar_manager| is the InfoBarManager of the associated tab;
-  // and |pending_id| is the unique ID of the newly pending NavigationEntry.
-  // If there is already a visible GoogleURLTracker infobar for this tab, this
-  // function resets its associated pending entry ID to the new ID.  Otherwise
-  // this function creates a map entry for the associated tab.
-  virtual void OnNavigationPending(
-      scoped_ptr<GoogleURLTrackerNavigationHelper> nav_helper,
-      infobars::InfoBarManager* infobar_manager,
-      int pending_id);
-
-  // Called by the navigation observer once a load we're watching commits.
-  // |infobar_manager| is the same as for OnNavigationPending();
-  // |search_url| is guaranteed to be valid.
-  virtual void OnNavigationCommitted(infobars::InfoBarManager* infobar_manager,
-                                     const GURL& search_url);
-
-  // Called by the navigation observer when a tab closes.
-  virtual void OnTabClosed(GoogleURLTrackerNavigationHelper* nav_helper);
-
   scoped_ptr<Subscription> RegisterCallback(
       const OnGoogleURLUpdatedCallback& cb);
 
@@ -122,9 +77,6 @@
   friend class GoogleURLTrackerTest;
   friend class SyncTest;
 
-  typedef std::map<const infobars::InfoBarManager*, GoogleURLTrackerMapEntry*>
-      EntryMap;
-
   static const char kSearchDomainCheckURL[];
 
   // net::URLFetcherDelegate:
@@ -137,9 +89,7 @@
   // KeyedService:
   void Shutdown() override;
 
-  // Registers consumer interest in getting an updated URL from the server.
-  // Observe chrome::NOTIFICATION_GOOGLE_URL_UPDATED to be notified when the URL
-  // changes.
+  // Sets |need_to_fetch_| and attempts to start a fetch.
   void SetNeedToFetch();
 
   // Called when the five second startup sleep has finished.  Runs any pending
@@ -150,29 +100,11 @@
   // it and can currently do so.
   void StartFetchIfDesirable();
 
-  // Closes all map entries.  If |redo_searches| is true, this also triggers
-  // each tab with an infobar to re-perform the user's search, but on the new
-  // Google TLD.
-  void CloseAllEntries(bool redo_searches);
-
-  // Unregisters any listeners for the navigation helper in |map_entry|.
-  // This sanity-DCHECKs that these are registered (or not) in the specific
-  // cases we expect.  (|must_be_listening_for_commit| is used purely for this
-  // sanity-checking.)  This also unregisters the global navigation pending
-  // listener if there are no remaining listeners for navigation commits, as we
-  // no longer need them until another search is committed.
-  void UnregisterForEntrySpecificNotifications(
-      GoogleURLTrackerMapEntry* map_entry,
-      bool must_be_listening_for_commit);
-
-  void NotifyGoogleURLUpdated();
-
   CallbackList callback_list_;
 
   scoped_ptr<GoogleURLTrackerClient> client_;
 
   GURL google_url_;
-  GURL fetched_google_url_;
   scoped_ptr<net::URLFetcher> fetcher_;
   int fetcher_id_;
   bool in_startup_sleep_;  // True if we're in the five-second "no fetching"
@@ -184,12 +116,6 @@
                            // bother to fetch anything.
                            // Consumers should register a callback via
                            // RegisterCallback().
-  bool need_to_prompt_;    // True if the last fetched Google URL is not
-                           // matched with current user's default Google URL
-                           // nor the last prompted Google URL.
-  bool search_committed_;  // True when we're expecting a notification of a new
-                           // pending search navigation.
-  EntryMap entry_map_;
   base::WeakPtrFactory<GoogleURLTracker> weak_ptr_factory_;
 
   DISALLOW_COPY_AND_ASSIGN(GoogleURLTracker);
diff --git a/components/google/core/browser/google_url_tracker_client.h b/components/google/core/browser/google_url_tracker_client.h
index 45c101b..58f51a7 100644
--- a/components/google/core/browser/google_url_tracker_client.h
+++ b/components/google/core/browser/google_url_tracker_client.h
@@ -26,14 +26,6 @@
     google_url_tracker_ = google_url_tracker;
   }
 
-  // Enables or disables listening for navigation starts. OnNavigationPending
-  // will be called for each navigation start if listening is enabled.
-  virtual void SetListeningForNavigationStart(bool listen) = 0;
-
-  // Returns whether or not the client is currently listening for navigation
-  // starts.
-  virtual bool IsListeningForNavigationStart() = 0;
-
   // Returns whether background networking is enabled.
   virtual bool IsBackgroundNetworkingEnabled() = 0;
 
diff --git a/components/google/core/browser/google_url_tracker_infobar_delegate.cc b/components/google/core/browser/google_url_tracker_infobar_delegate.cc
deleted file mode 100644
index c370002..0000000
--- a/components/google/core/browser/google_url_tracker_infobar_delegate.cc
+++ /dev/null
@@ -1,119 +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 "components/google/core/browser/google_url_tracker_infobar_delegate.h"
-
-#include "components/google/core/browser/google_url_tracker.h"
-#include "components/google/core/browser/google_url_tracker_navigation_helper.h"
-#include "components/infobars/core/infobar.h"
-#include "components/infobars/core/infobar_manager.h"
-#include "grit/components_strings.h"
-#include "net/base/net_util.h"
-#include "ui/base/l10n/l10n_util.h"
-
-
-// static
-infobars::InfoBar* GoogleURLTrackerInfoBarDelegate::Create(
-    infobars::InfoBarManager* infobar_manager,
-    GoogleURLTracker* google_url_tracker,
-    const GURL& search_url) {
-  return infobar_manager->AddInfoBar(ConfirmInfoBarDelegate::CreateInfoBar(
-      scoped_ptr<ConfirmInfoBarDelegate>(new GoogleURLTrackerInfoBarDelegate(
-          google_url_tracker, search_url))));
-}
-
-bool GoogleURLTrackerInfoBarDelegate::Accept() {
-  google_url_tracker_->AcceptGoogleURL(true);
-  return false;
-}
-
-bool GoogleURLTrackerInfoBarDelegate::Cancel() {
-  google_url_tracker_->CancelGoogleURL();
-  return false;
-}
-
-void GoogleURLTrackerInfoBarDelegate::Update(const GURL& search_url) {
-  StoreActiveEntryUniqueID();
-  search_url_ = search_url;
-  pending_id_ = 0;
-}
-
-void GoogleURLTrackerInfoBarDelegate::Close(bool redo_search) {
-  // Calling OpenURL() will auto-close us asynchronously.  It's easier for
-  // various classes (e.g. GoogleURLTrackerMapEntry) to reason about things if
-  // the closure always happens synchronously, so we always call RemoveInfoBar()
-  // directly, then OpenURL() if desirable.  (This calling order is safer if
-  // for some reason in the future OpenURL() were to close us synchronously.)
-  GURL new_search_url;
-  if (redo_search) {
-    // Re-do the user's search on the new domain.
-    DCHECK(search_url_.is_valid());
-    url::Replacements<char> replacements;
-    const std::string& host(google_url_tracker_->fetched_google_url().host());
-    replacements.SetHost(host.data(), url::Component(0, host.length()));
-    new_search_url = search_url_.ReplaceComponents(replacements);
-  }
-
-  // Take ownership of |navigation_helper_| in order to ensure that it stays
-  // alive for the duration of this method.
-  scoped_ptr<GoogleURLTrackerNavigationHelper> navigation_helper =
-      navigation_helper_.Pass();
-  infobar()->RemoveSelf();
-  // WARNING: |this| may be deleted at this point!  Do not access any members!
-
-  if (new_search_url.is_valid())
-    navigation_helper->OpenURL(new_search_url, CURRENT_TAB, false);
-}
-
-GoogleURLTrackerInfoBarDelegate::GoogleURLTrackerInfoBarDelegate(
-    GoogleURLTracker* google_url_tracker,
-    const GURL& search_url)
-    : ConfirmInfoBarDelegate(),
-      google_url_tracker_(google_url_tracker),
-      navigation_helper_weak_ptr_(NULL),
-      search_url_(search_url),
-      pending_id_(0) {
-}
-
-GoogleURLTrackerInfoBarDelegate::~GoogleURLTrackerInfoBarDelegate() {
-}
-
-base::string16 GoogleURLTrackerInfoBarDelegate::GetMessageText() const {
-  return l10n_util::GetStringFUTF16(
-      IDS_GOOGLE_URL_TRACKER_INFOBAR_MESSAGE,
-      net::StripWWWFromHost(google_url_tracker_->fetched_google_url()),
-      net::StripWWWFromHost(google_url_tracker_->google_url()));
-}
-
-base::string16 GoogleURLTrackerInfoBarDelegate::GetButtonLabel(
-    InfoBarButton button) const {
-  if (button == BUTTON_OK) {
-    return l10n_util::GetStringFUTF16(
-        IDS_GOOGLE_URL_TRACKER_INFOBAR_SWITCH,
-        net::StripWWWFromHost(google_url_tracker_->fetched_google_url()));
-  }
-  return l10n_util::GetStringFUTF16(
-      IDS_GOOGLE_URL_TRACKER_INFOBAR_DONT_SWITCH,
-      net::StripWWWFromHost(google_url_tracker_->google_url()));
-}
-
-base::string16 GoogleURLTrackerInfoBarDelegate::GetLinkText() const {
-  return l10n_util::GetStringUTF16(IDS_GOOGLE_URL_TRACKER_INFOBAR_LEARN_MORE);
-}
-
-bool GoogleURLTrackerInfoBarDelegate::LinkClicked(
-    WindowOpenDisposition disposition) {
-  navigation_helper_->OpenURL(
-      GURL("https://www.google.com/support/chrome/bin/answer.py?"
-           "answer=1618699"),
-      (disposition == CURRENT_TAB) ? NEW_FOREGROUND_TAB : disposition,
-      true);
-  return false;
-}
-
-bool GoogleURLTrackerInfoBarDelegate::ShouldExpireInternal(
-    const NavigationDetails& details) const {
-  return (details.entry_id != contents_unique_id()) &&
-      (details.entry_id != pending_id_);
-}
diff --git a/components/google/core/browser/google_url_tracker_infobar_delegate.h b/components/google/core/browser/google_url_tracker_infobar_delegate.h
deleted file mode 100644
index dac9874..0000000
--- a/components/google/core/browser/google_url_tracker_infobar_delegate.h
+++ /dev/null
@@ -1,82 +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 COMPONENTS_GOOGLE_CORE_BROWSER_GOOGLE_URL_TRACKER_INFOBAR_DELEGATE_H_
-#define COMPONENTS_GOOGLE_CORE_BROWSER_GOOGLE_URL_TRACKER_INFOBAR_DELEGATE_H_
-
-#include "components/infobars/core/confirm_infobar_delegate.h"
-#include "url/gurl.h"
-
-class GoogleURLTracker;
-class GoogleURLTrackerNavigationHelper;
-
-namespace infobars {
-class InfoBarManager;
-}
-
-// This infobar is shown by the GoogleURLTracker when the Google base URL has
-// changed.
-class GoogleURLTrackerInfoBarDelegate : public ConfirmInfoBarDelegate {
- public:
-  // Creates a Google URL tracker infobar and delegate and adds the infobar to
-  // |infobar_manager|.  Returns the infobar if it was successfully added.
-  static infobars::InfoBar* Create(
-      infobars::InfoBarManager* infobar_manager,
-      GoogleURLTracker* google_url_tracker,
-      const GURL& search_url);
-
-  // ConfirmInfoBarDelegate:
-  bool Accept() override;
-  bool Cancel() override;
-
-  GoogleURLTrackerNavigationHelper* navigation_helper() {
-    return navigation_helper_weak_ptr_;
-  }
-
-  void set_navigation_helper(
-      scoped_ptr<GoogleURLTrackerNavigationHelper> navigation_helper) {
-    navigation_helper_ = navigation_helper.Pass();
-    navigation_helper_weak_ptr_ = navigation_helper_.get();
-  }
-
-  // Other than set_pending_id(), these accessors are only used by test code.
-  const GURL& search_url() const { return search_url_; }
-  void set_search_url(const GURL& search_url) { search_url_ = search_url; }
-  int pending_id() const { return pending_id_; }
-  void set_pending_id(int pending_id) { pending_id_ = pending_id; }
-
-  // These are virtual so test code can override them in a subclass.
-  virtual void Update(const GURL& search_url);
-  virtual void Close(bool redo_search);
-
- protected:
-  GoogleURLTrackerInfoBarDelegate(
-      GoogleURLTracker* google_url_tracker,
-      const GURL& search_url);
-  ~GoogleURLTrackerInfoBarDelegate() override;
-
- private:
-  // ConfirmInfoBarDelegate:
-  base::string16 GetMessageText() const override;
-  base::string16 GetButtonLabel(InfoBarButton button) const override;
-  base::string16 GetLinkText() const override;
-  bool LinkClicked(WindowOpenDisposition disposition) override;
-  bool ShouldExpireInternal(const NavigationDetails& details) const override;
-
-  GoogleURLTracker* google_url_tracker_;
-  scoped_ptr<GoogleURLTrackerNavigationHelper> navigation_helper_;
-
-  // During Close(), this object gives up ownership of |navigation_helper_|,
-  // which then outlives this object. Sometimes after this point, other classes
-  // still attempt to call navigation_helper() to access the (still-valid)
-  // instance. The NavigationHelper instance is stored as a weak pointer in
-  // addition to a strong pointer to facilitate this case.
-  GoogleURLTrackerNavigationHelper* navigation_helper_weak_ptr_;
-  GURL search_url_;
-  int pending_id_;
-
-  DISALLOW_COPY_AND_ASSIGN(GoogleURLTrackerInfoBarDelegate);
-};
-
-#endif  // COMPONENTS_GOOGLE_CORE_BROWSER_GOOGLE_URL_TRACKER_INFOBAR_DELEGATE_H_
diff --git a/components/google/core/browser/google_url_tracker_map_entry.cc b/components/google/core/browser/google_url_tracker_map_entry.cc
deleted file mode 100644
index ef72281..0000000
--- a/components/google/core/browser/google_url_tracker_map_entry.cc
+++ /dev/null
@@ -1,66 +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 "components/google/core/browser/google_url_tracker_map_entry.h"
-
-#include "components/google/core/browser/google_url_tracker.h"
-#include "components/infobars/core/infobar.h"
-
-GoogleURLTrackerMapEntry::GoogleURLTrackerMapEntry(
-    GoogleURLTracker* google_url_tracker,
-    infobars::InfoBarManager* infobar_manager,
-    scoped_ptr<GoogleURLTrackerNavigationHelper> navigation_helper)
-    : google_url_tracker_(google_url_tracker),
-      infobar_manager_(infobar_manager),
-      infobar_delegate_(NULL),
-      navigation_helper_(navigation_helper.Pass()),
-      observing_(false) {
-  DCHECK(infobar_manager_);
-}
-
-GoogleURLTrackerMapEntry::~GoogleURLTrackerMapEntry() {
-  if (observing_)
-    infobar_manager_->RemoveObserver(this);
-}
-
-void GoogleURLTrackerMapEntry::SetInfoBarDelegate(
-    GoogleURLTrackerInfoBarDelegate* infobar_delegate) {
-  DCHECK(!infobar_delegate_);
-
-  // Transfer ownership of |navigation_helper_| to the infobar delegate as the
-  // infobar delegate has need of it after this object has been destroyed in
-  // the case where the user accepts the new Google URL.
-  infobar_delegate->set_navigation_helper(navigation_helper_.Pass());
-  infobar_delegate_ = infobar_delegate;
-  infobar_manager_->AddObserver(this);
-  observing_ = true;
-}
-
-void GoogleURLTrackerMapEntry::Close(bool redo_search) {
-  if (infobar_delegate_) {
-    infobar_delegate_->Close(redo_search);
-  } else {
-    // WARNING: |infobar_manager_| may point to a deleted object.  Do not
-    // dereference it!  See GoogleURLTracker::OnTabClosed().
-    google_url_tracker_->DeleteMapEntryForManager(infobar_manager_);
-  }
-  // WARNING: At this point |this| has been deleted!
-}
-
-void GoogleURLTrackerMapEntry::OnInfoBarRemoved(infobars::InfoBar* infobar,
-                                                bool animate) {
-  DCHECK(infobar_delegate_);
-  if (infobar->delegate() == infobar_delegate_) {
-    google_url_tracker_->DeleteMapEntryForManager(infobar_manager_);
-    // WARNING: At this point |this| has been deleted!
-  }
-}
-
-void GoogleURLTrackerMapEntry::OnManagerShuttingDown(
-    infobars::InfoBarManager* manager) {
-  DCHECK(observing_);
-  DCHECK_EQ(infobar_manager_, manager);
-  manager->RemoveObserver(this);
-  observing_ = false;
-}
diff --git a/components/google/core/browser/google_url_tracker_map_entry.h b/components/google/core/browser/google_url_tracker_map_entry.h
deleted file mode 100644
index 79c52b7..0000000
--- a/components/google/core/browser/google_url_tracker_map_entry.h
+++ /dev/null
@@ -1,62 +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 COMPONENTS_GOOGLE_CORE_BROWSER_GOOGLE_URL_TRACKER_MAP_ENTRY_H_
-#define COMPONENTS_GOOGLE_CORE_BROWSER_GOOGLE_URL_TRACKER_MAP_ENTRY_H_
-
-#include "base/memory/scoped_ptr.h"
-#include "components/google/core/browser/google_url_tracker_infobar_delegate.h"
-#include "components/google/core/browser/google_url_tracker_navigation_helper.h"
-#include "components/infobars/core/infobar_manager.h"
-
-class GoogleURLTracker;
-
-namespace infobars {
-class InfoBarManager;
-}
-
-class GoogleURLTrackerMapEntry : public infobars::InfoBarManager::Observer {
- public:
-  GoogleURLTrackerMapEntry(
-      GoogleURLTracker* google_url_tracker,
-      infobars::InfoBarManager* infobar_manager,
-      scoped_ptr<GoogleURLTrackerNavigationHelper> navigation_helper);
-  virtual ~GoogleURLTrackerMapEntry();
-
-  bool has_infobar_delegate() const { return !!infobar_delegate_; }
-  GoogleURLTrackerInfoBarDelegate* infobar_delegate() {
-    return infobar_delegate_;
-  }
-  void SetInfoBarDelegate(GoogleURLTrackerInfoBarDelegate* infobar_delegate);
-
-  GoogleURLTrackerNavigationHelper* navigation_helper() {
-    // This object gives ownership of |navigation_helper_| to the infobar
-    // delegate in SetInfoBarDelegate().
-    return has_infobar_delegate() ?
-        infobar_delegate_->navigation_helper() : navigation_helper_.get();
-  }
-
-  const infobars::InfoBarManager* infobar_manager() const {
-    return infobar_manager_;
-  }
-
-  void Close(bool redo_search);
-
- private:
-  friend class GoogleURLTrackerTest;
-
-  // infobars::InfoBarManager::Observer:
-  void OnInfoBarRemoved(infobars::InfoBar* infobar, bool animate) override;
-  void OnManagerShuttingDown(infobars::InfoBarManager* manager) override;
-
-  GoogleURLTracker* const google_url_tracker_;
-  infobars::InfoBarManager* const infobar_manager_;
-  GoogleURLTrackerInfoBarDelegate* infobar_delegate_;
-  scoped_ptr<GoogleURLTrackerNavigationHelper> navigation_helper_;
-  bool observing_;
-
-  DISALLOW_COPY_AND_ASSIGN(GoogleURLTrackerMapEntry);
-};
-
-#endif  // COMPONENTS_GOOGLE_CORE_BROWSER_GOOGLE_URL_TRACKER_MAP_ENTRY_H_
diff --git a/components/google/core/browser/google_url_tracker_navigation_helper.cc b/components/google/core/browser/google_url_tracker_navigation_helper.cc
deleted file mode 100644
index c420da6..0000000
--- a/components/google/core/browser/google_url_tracker_navigation_helper.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 "components/google/core/browser/google_url_tracker_navigation_helper.h"
-
-GoogleURLTrackerNavigationHelper::GoogleURLTrackerNavigationHelper(
-    GoogleURLTracker* google_url_tracker)
-    : google_url_tracker_(google_url_tracker) {
-}
-
-GoogleURLTrackerNavigationHelper::~GoogleURLTrackerNavigationHelper() {
-}
diff --git a/components/google/core/browser/google_url_tracker_navigation_helper.h b/components/google/core/browser/google_url_tracker_navigation_helper.h
deleted file mode 100644
index 2f64320..0000000
--- a/components/google/core/browser/google_url_tracker_navigation_helper.h
+++ /dev/null
@@ -1,54 +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 COMPONENTS_GOOGLE_CORE_BROWSER_GOOGLE_URL_TRACKER_NAVIGATION_HELPER_H_
-#define COMPONENTS_GOOGLE_CORE_BROWSER_GOOGLE_URL_TRACKER_NAVIGATION_HELPER_H_
-
-#include "base/macros.h"
-#include "ui/base/window_open_disposition.h"
-
-class GoogleURLTracker;
-class GURL;
-
-// Interface via which GoogleURLTracker communicates with its driver.
-// TODO(blundell): Rename this class to GoogleURLTrackerDriver.
-// crbug.com/373221
-class GoogleURLTrackerNavigationHelper {
- public:
-  explicit GoogleURLTrackerNavigationHelper(
-      GoogleURLTracker* google_url_tracker);
-  virtual ~GoogleURLTrackerNavigationHelper();
-
-  // Enables or disables listening for navigation commits.
-  // OnNavigationCommitted will be called for each navigation commit if
-  // listening is enabled.
-  virtual void SetListeningForNavigationCommit(bool listen) = 0;
-
-  // Returns whether or not this object is currently listening for navigation
-  // commits.
-  virtual bool IsListeningForNavigationCommit() = 0;
-
-  // Enables or disables listening for tab destruction. OnTabClosed will be
-  // called on tab destruction if listening is enabled.
-  virtual void SetListeningForTabDestruction(bool listen) = 0;
-
-  // Returns whether or not this object is currently listening for tab
-  // destruction.
-  virtual bool IsListeningForTabDestruction() = 0;
-
-  // Opens |url| with the given window disposition.
-  virtual void OpenURL(GURL url,
-                       WindowOpenDisposition disposition,
-                       bool user_clicked_on_link) = 0;
-
- protected:
-  GoogleURLTracker* google_url_tracker() { return google_url_tracker_; }
-
- private:
-  GoogleURLTracker* google_url_tracker_;
-
-  DISALLOW_COPY_AND_ASSIGN(GoogleURLTrackerNavigationHelper);
-};
-
-#endif  // COMPONENTS_GOOGLE_CORE_BROWSER_GOOGLE_URL_TRACKER_NAVIGATION_HELPER_H_
diff --git a/components/google/core/browser/google_url_tracker_unittest.cc b/components/google/core/browser/google_url_tracker_unittest.cc
index 675fc3d..a89dded 100644
--- a/components/google/core/browser/google_url_tracker_unittest.cc
+++ b/components/google/core/browser/google_url_tracker_unittest.cc
@@ -4,7 +4,6 @@
 
 #include "components/google/core/browser/google_url_tracker.h"
 
-#include <set>
 #include <string>
 
 #include "base/memory/scoped_ptr.h"
@@ -14,10 +13,6 @@
 #include "base/prefs/testing_pref_service.h"
 #include "components/google/core/browser/google_pref_names.h"
 #include "components/google/core/browser/google_url_tracker_client.h"
-#include "components/google/core/browser/google_url_tracker_infobar_delegate.h"
-#include "components/google/core/browser/google_url_tracker_navigation_helper.h"
-#include "components/infobars/core/infobar.h"
-#include "components/infobars/core/infobar_delegate.h"
 #include "net/url_request/test_url_fetcher_factory.h"
 #include "net/url_request/url_fetcher.h"
 #include "net/url_request/url_request_test_util.h"
@@ -74,8 +69,6 @@
   explicit TestGoogleURLTrackerClient(PrefService* prefs_);
   ~TestGoogleURLTrackerClient() override;
 
-  void SetListeningForNavigationStart(bool listen) override;
-  bool IsListeningForNavigationStart() override;
   bool IsBackgroundNetworkingEnabled() override;
   PrefService* GetPrefs() override;
   net::URLRequestContextGetter* GetRequestContext() override;
@@ -83,7 +76,6 @@
  private:
   PrefService* prefs_;
   scoped_refptr<net::TestURLRequestContextGetter> request_context_;
-  bool observe_nav_start_;
 
   DISALLOW_COPY_AND_ASSIGN(TestGoogleURLTrackerClient);
 };
@@ -91,21 +83,12 @@
 TestGoogleURLTrackerClient::TestGoogleURLTrackerClient(PrefService* prefs)
     : prefs_(prefs),
       request_context_(new net::TestURLRequestContextGetter(
-          base::MessageLoopProxy::current())),
-      observe_nav_start_(false) {
+          base::MessageLoopProxy::current())) {
 }
 
 TestGoogleURLTrackerClient::~TestGoogleURLTrackerClient() {
 }
 
-void TestGoogleURLTrackerClient::SetListeningForNavigationStart(bool listen) {
-  observe_nav_start_ = listen;
-}
-
-bool TestGoogleURLTrackerClient::IsListeningForNavigationStart() {
-  return observe_nav_start_;
-}
-
 bool TestGoogleURLTrackerClient::IsBackgroundNetworkingEnabled() {
   return true;
 }
@@ -119,87 +102,6 @@
 }
 
 
-// TestGoogleURLTrackerNavigationHelper ---------------------------------------
-
-class TestGoogleURLTrackerNavigationHelper
-    : public GoogleURLTrackerNavigationHelper {
- public:
-  explicit TestGoogleURLTrackerNavigationHelper(GoogleURLTracker* tracker);
-  ~TestGoogleURLTrackerNavigationHelper() override;
-
-  void SetListeningForNavigationCommit(bool listen) override;
-  bool IsListeningForNavigationCommit() override;
-  void SetListeningForTabDestruction(bool listen) override;
-  bool IsListeningForTabDestruction() override;
-  void OpenURL(GURL url,
-               WindowOpenDisposition disposition,
-               bool user_clicked_on_link) override;
-
- private:
-  bool listening_for_nav_commit_;
-  bool listening_for_tab_destruction_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestGoogleURLTrackerNavigationHelper);
-};
-
-TestGoogleURLTrackerNavigationHelper::TestGoogleURLTrackerNavigationHelper(
-    GoogleURLTracker* tracker)
-    : GoogleURLTrackerNavigationHelper(tracker),
-      listening_for_nav_commit_(false),
-      listening_for_tab_destruction_(false) {
-}
-
-TestGoogleURLTrackerNavigationHelper::~TestGoogleURLTrackerNavigationHelper() {
-}
-
-void TestGoogleURLTrackerNavigationHelper::SetListeningForNavigationCommit(
-    bool listen) {
-  listening_for_nav_commit_ = listen;
-}
-
-bool TestGoogleURLTrackerNavigationHelper::IsListeningForNavigationCommit() {
-  return listening_for_nav_commit_;
-}
-
-void TestGoogleURLTrackerNavigationHelper::SetListeningForTabDestruction(
-    bool listen) {
-  listening_for_tab_destruction_ = listen;
-}
-
-bool TestGoogleURLTrackerNavigationHelper::IsListeningForTabDestruction() {
-  return listening_for_tab_destruction_;
-}
-
-void TestGoogleURLTrackerNavigationHelper::OpenURL(
-    GURL url,
-    WindowOpenDisposition disposition,
-    bool user_clicked_on_link) {
-}
-
-// TestInfoBarManager ---------------------------------------------------------
-
-class TestInfoBarManager : public infobars::InfoBarManager {
- public:
-  explicit TestInfoBarManager(int unique_id);
-  ~TestInfoBarManager() override;
-  int GetActiveEntryID() override;
-
- private:
-  int unique_id_;
-  DISALLOW_COPY_AND_ASSIGN(TestInfoBarManager);
-};
-
-TestInfoBarManager::TestInfoBarManager(int unique_id) : unique_id_(unique_id) {
-}
-
-TestInfoBarManager::~TestInfoBarManager() {
-  ShutDown();
-}
-
-int TestInfoBarManager::GetActiveEntryID() {
-  return unique_id_;
-}
-
 }  // namespace
 
 // GoogleURLTrackerTest -------------------------------------------------------
@@ -218,30 +120,10 @@
   void RequestServerCheck();
   void FinishSleep();
   void NotifyNetworkChanged();
-  GURL fetched_google_url() const {
-    return google_url_tracker_->fetched_google_url();
-  }
   void set_google_url(const GURL& url) {
     google_url_tracker_->google_url_ = url;
   }
   GURL google_url() const { return google_url_tracker_->google_url(); }
-  void SetLastPromptedGoogleURL(const GURL& url);
-  GURL GetLastPromptedGoogleURL();
-  void SetNavigationPending(infobars::InfoBarManager* infobar_manager,
-                            bool is_search);
-  void CommitNonSearch(infobars::InfoBarManager* infobar_manager);
-  void CommitSearch(infobars::InfoBarManager* infobar_manager,
-                    const GURL& search_url);
-  void CloseTab(infobars::InfoBarManager* infobar_manager);
-  GoogleURLTrackerMapEntry* GetMapEntry(
-      infobars::InfoBarManager* infobar_manager);
-  GoogleURLTrackerInfoBarDelegate* GetInfoBarDelegate(
-      infobars::InfoBarManager* infobar_manager);
-  GoogleURLTrackerNavigationHelper* GetNavigationHelper(
-      infobars::InfoBarManager* infobar_manager);
-  void ExpectDefaultURLs() const;
-  void ExpectListeningForCommit(infobars::InfoBarManager* infobar_manager,
-                                bool listening);
   bool listener_notified() const { return listener_.notified(); }
   void clear_listener_notified() { listener_.clear_notified(); }
 
@@ -256,18 +138,12 @@
   GoogleURLTrackerClient* client_;
   scoped_ptr<GoogleURLTracker> google_url_tracker_;
   TestCallbackListener listener_;
-  // This tracks the different "tabs" a test has "opened", so we can close them
-  // properly before shutting down |google_url_tracker_|, which expects that.
-  std::set<infobars::InfoBarManager*> infobar_managers_seen_;
 };
 
 GoogleURLTrackerTest::GoogleURLTrackerTest() {
   prefs_.registry()->RegisterStringPref(
       prefs::kLastKnownGoogleURL,
       GoogleURLTracker::kDefaultGoogleHomepage);
-  prefs_.registry()->RegisterStringPref(
-      prefs::kLastPromptedGoogleURL,
-      std::string());
 }
 
 GoogleURLTrackerTest::~GoogleURLTrackerTest() {
@@ -284,8 +160,6 @@
 }
 
 void GoogleURLTrackerTest::TearDown() {
-  while (!infobar_managers_seen_.empty())
-    CloseTab(*infobar_managers_seen_.begin());
   google_url_tracker_->Shutdown();
 }
 
@@ -326,276 +200,104 @@
   base::MessageLoop::current()->RunUntilIdle();
 }
 
-void GoogleURLTrackerTest::SetLastPromptedGoogleURL(const GURL& url) {
-  prefs_.SetString(prefs::kLastPromptedGoogleURL, url.spec());
-}
-
-GURL GoogleURLTrackerTest::GetLastPromptedGoogleURL() {
-  return GURL(prefs_.GetString(prefs::kLastPromptedGoogleURL));
-}
-
-void GoogleURLTrackerTest::SetNavigationPending(
-    infobars::InfoBarManager* infobar_manager,
-    bool is_search) {
-  if (is_search) {
-    google_url_tracker_->SearchCommitted();
-    // Note that the call above might not have actually registered a listener
-    // for navigation starts if the searchdomaincheck response was bogus.
-  }
-  infobar_managers_seen_.insert(infobar_manager);
-  if (client_->IsListeningForNavigationStart()) {
-    google_url_tracker_->OnNavigationPending(
-        scoped_ptr<GoogleURLTrackerNavigationHelper>(
-            new TestGoogleURLTrackerNavigationHelper(
-                google_url_tracker_.get())),
-        infobar_manager,
-        infobar_manager->GetActiveEntryID());
-  }
-}
-
-void GoogleURLTrackerTest::CommitNonSearch(
-    infobars::InfoBarManager* infobar_manager) {
-  GoogleURLTrackerMapEntry* map_entry = GetMapEntry(infobar_manager);
-  if (!map_entry)
-    return;
-
-  ExpectListeningForCommit(infobar_manager, false);
-
-  // The infobar should be showing; otherwise the pending non-search should
-  // have closed it.
-  ASSERT_TRUE(map_entry->has_infobar_delegate());
-
-  // The pending_id should have been reset to 0 when the non-search became
-  // pending.
-  EXPECT_EQ(0, map_entry->infobar_delegate()->pending_id());
-
-  // Committing the navigation would close the infobar.
-  map_entry->infobar_delegate()->Close(false);
-}
-
-void GoogleURLTrackerTest::CommitSearch(
-    infobars::InfoBarManager* infobar_manager,
-    const GURL& search_url) {
-  DCHECK(search_url.is_valid());
-  GoogleURLTrackerNavigationHelper* nav_helper =
-      GetNavigationHelper(infobar_manager);
-  if (nav_helper && nav_helper->IsListeningForNavigationCommit()) {
-    google_url_tracker_->OnNavigationCommitted(infobar_manager, search_url);
-  }
-}
-
-void GoogleURLTrackerTest::CloseTab(infobars::InfoBarManager* infobar_manager) {
-  infobar_managers_seen_.erase(infobar_manager);
-  GoogleURLTrackerNavigationHelper* nav_helper =
-      GetNavigationHelper(infobar_manager);
-  if (nav_helper && nav_helper->IsListeningForTabDestruction()) {
-    google_url_tracker_->OnTabClosed(nav_helper);
-  } else {
-    // Closing a tab with an infobar showing would close the infobar.
-    GoogleURLTrackerInfoBarDelegate* delegate =
-        GetInfoBarDelegate(infobar_manager);
-    if (delegate)
-      delegate->Close(false);
-  }
-}
-
-GoogleURLTrackerMapEntry* GoogleURLTrackerTest::GetMapEntry(
-    infobars::InfoBarManager* infobar_manager) {
-  GoogleURLTracker::EntryMap::const_iterator i =
-      google_url_tracker_->entry_map_.find(infobar_manager);
-  return (i == google_url_tracker_->entry_map_.end()) ? NULL : i->second;
-}
-
-GoogleURLTrackerInfoBarDelegate* GoogleURLTrackerTest::GetInfoBarDelegate(
-    infobars::InfoBarManager* infobar_manager) {
-  GoogleURLTrackerMapEntry* map_entry = GetMapEntry(infobar_manager);
-  return map_entry ? map_entry->infobar_delegate() : NULL;
-}
-
-GoogleURLTrackerNavigationHelper* GoogleURLTrackerTest::GetNavigationHelper(
-    infobars::InfoBarManager* infobar_manager) {
-  GoogleURLTrackerMapEntry* map_entry = GetMapEntry(infobar_manager);
-  return map_entry ? map_entry->navigation_helper() : NULL;
-}
-
-void GoogleURLTrackerTest::ExpectDefaultURLs() const {
-  EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
-  EXPECT_EQ(GURL(), fetched_google_url());
-}
-
-void GoogleURLTrackerTest::ExpectListeningForCommit(
-    infobars::InfoBarManager* infobar_manager,
-    bool listening) {
-  GoogleURLTrackerMapEntry* map_entry = GetMapEntry(infobar_manager);
-  if (map_entry) {
-    EXPECT_EQ(listening,
-              map_entry->navigation_helper()->IsListeningForNavigationCommit());
-  } else {
-    EXPECT_FALSE(listening);
-  }
-}
-
 // Tests ----------------------------------------------------------------------
 
 TEST_F(GoogleURLTrackerTest, DontFetchWhenNoOneRequestsCheck) {
-  ExpectDefaultURLs();
+  EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
   FinishSleep();
   // No one called RequestServerCheck() so nothing should have happened.
   EXPECT_FALSE(GetFetcher());
   MockSearchDomainCheckResponse("http://www.google.co.uk/");
-  ExpectDefaultURLs();
+  EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
   EXPECT_FALSE(listener_notified());
 }
 
-TEST_F(GoogleURLTrackerTest, UpdateOnFirstRun) {
+TEST_F(GoogleURLTrackerTest, Update) {
   RequestServerCheck();
   EXPECT_FALSE(GetFetcher());
-  ExpectDefaultURLs();
+  EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
   EXPECT_FALSE(listener_notified());
 
   FinishSleep();
   MockSearchDomainCheckResponse("http://www.google.co.uk/");
-  EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url());
-  // GoogleURL should be updated, becase there was no last prompted URL.
   EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url());
   EXPECT_TRUE(listener_notified());
 }
 
 TEST_F(GoogleURLTrackerTest, DontUpdateWhenUnchanged) {
-  SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
+  GURL original_google_url("http://www.google.co.uk/");
+  set_google_url(original_google_url);
 
   RequestServerCheck();
   EXPECT_FALSE(GetFetcher());
-  ExpectDefaultURLs();
+  EXPECT_EQ(original_google_url, google_url());
   EXPECT_FALSE(listener_notified());
 
   FinishSleep();
-  MockSearchDomainCheckResponse("http://www.google.co.uk/");
-  EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url());
-  // GoogleURL should not be updated, because the fetched and prompted URLs
-  // match.
-  EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
+  MockSearchDomainCheckResponse(original_google_url.spec());
+  EXPECT_EQ(original_google_url, google_url());
+  // No one should be notified, because the new URL matches the old.
   EXPECT_FALSE(listener_notified());
 }
 
 TEST_F(GoogleURLTrackerTest, DontPromptOnBadReplies) {
-  TestInfoBarManager infobar_manager(1);
-  SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
+  GURL original_google_url("http://www.google.co.uk/");
+  set_google_url(original_google_url);
 
   RequestServerCheck();
   EXPECT_FALSE(GetFetcher());
-  ExpectDefaultURLs();
+  EXPECT_EQ(original_google_url, google_url());
   EXPECT_FALSE(listener_notified());
 
   // Old-style domain string.
   FinishSleep();
   MockSearchDomainCheckResponse(".google.co.in");
-  EXPECT_EQ(GURL(), fetched_google_url());
-  EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
+  EXPECT_EQ(original_google_url, google_url());
   EXPECT_FALSE(listener_notified());
-  SetNavigationPending(&infobar_manager, true);
-  CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
-  EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
 
   // Bad subdomain.
   NotifyNetworkChanged();
   MockSearchDomainCheckResponse("http://mail.google.com/");
-  EXPECT_EQ(GURL(), fetched_google_url());
-  EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
+  EXPECT_EQ(original_google_url, google_url());
   EXPECT_FALSE(listener_notified());
-  SetNavigationPending(&infobar_manager, true);
-  CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
-  EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
 
   // Non-empty path.
   NotifyNetworkChanged();
   MockSearchDomainCheckResponse("http://www.google.com/search");
-  EXPECT_EQ(GURL(), fetched_google_url());
-  EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
+  EXPECT_EQ(original_google_url, google_url());
   EXPECT_FALSE(listener_notified());
-  SetNavigationPending(&infobar_manager, true);
-  CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
-  EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
 
   // Non-empty query.
   NotifyNetworkChanged();
   MockSearchDomainCheckResponse("http://www.google.com/?q=foo");
-  EXPECT_EQ(GURL(), fetched_google_url());
-  EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
+  EXPECT_EQ(original_google_url, google_url());
   EXPECT_FALSE(listener_notified());
-  SetNavigationPending(&infobar_manager, true);
-  CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
-  EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
 
   // Non-empty ref.
   NotifyNetworkChanged();
   MockSearchDomainCheckResponse("http://www.google.com/#anchor");
-  EXPECT_EQ(GURL(), fetched_google_url());
-  EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
+  EXPECT_EQ(original_google_url, google_url());
   EXPECT_FALSE(listener_notified());
-  SetNavigationPending(&infobar_manager, true);
-  CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
-  EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
 
   // Complete garbage.
   NotifyNetworkChanged();
   MockSearchDomainCheckResponse("HJ)*qF)_*&@f1");
-  EXPECT_EQ(GURL(), fetched_google_url());
-  EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
+  EXPECT_EQ(original_google_url, google_url());
   EXPECT_FALSE(listener_notified());
-  SetNavigationPending(&infobar_manager, true);
-  CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
-  EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
-}
-
-TEST_F(GoogleURLTrackerTest, UpdatePromptedURLOnReturnToPreviousLocation) {
-  SetLastPromptedGoogleURL(GURL("http://www.google.co.jp/"));
-  set_google_url(GURL("http://www.google.co.uk/"));
-  RequestServerCheck();
-  FinishSleep();
-  MockSearchDomainCheckResponse("http://www.google.co.uk/");
-  EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url());
-  EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url());
-  EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
-  EXPECT_FALSE(listener_notified());
-}
-
-TEST_F(GoogleURLTrackerTest, SilentlyAcceptSchemeChange) {
-  // We should auto-accept changes to the current Google URL that merely change
-  // the scheme, regardless of what the last prompted URL was.
-  SetLastPromptedGoogleURL(GURL("http://www.google.co.jp/"));
-  set_google_url(GURL("http://www.google.co.uk/"));
-  RequestServerCheck();
-  FinishSleep();
-  MockSearchDomainCheckResponse("https://www.google.co.uk/");
-  EXPECT_EQ(GURL("https://www.google.co.uk/"), fetched_google_url());
-  EXPECT_EQ(GURL("https://www.google.co.uk/"), google_url());
-  EXPECT_EQ(GURL("https://www.google.co.uk/"), GetLastPromptedGoogleURL());
-  EXPECT_TRUE(listener_notified());
-
-  NotifyNetworkChanged();
-  MockSearchDomainCheckResponse("http://www.google.co.uk/");
-  EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url());
-  EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url());
-  EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
-  EXPECT_TRUE(listener_notified());
 }
 
 TEST_F(GoogleURLTrackerTest, RefetchOnNetworkChange) {
   RequestServerCheck();
   FinishSleep();
   MockSearchDomainCheckResponse("http://www.google.co.uk/");
-  EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url());
   EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url());
   EXPECT_TRUE(listener_notified());
   clear_listener_notified();
 
   NotifyNetworkChanged();
   MockSearchDomainCheckResponse("http://www.google.co.in/");
-  EXPECT_EQ(GURL("http://www.google.co.in/"), fetched_google_url());
-  // Just fetching a new URL shouldn't reset things without a prompt.
-  EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url());
-  EXPECT_FALSE(listener_notified());
+  EXPECT_EQ(GURL("http://www.google.co.in/"), google_url());
+  EXPECT_TRUE(listener_notified());
 }
 
 TEST_F(GoogleURLTrackerTest, DontRefetchWhenNoOneRequestsCheck) {
@@ -604,7 +306,7 @@
   // No one called RequestServerCheck() so nothing should have happened.
   EXPECT_FALSE(GetFetcher());
   MockSearchDomainCheckResponse("http://www.google.co.uk/");
-  ExpectDefaultURLs();
+  EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
   EXPECT_FALSE(listener_notified());
 }
 
@@ -617,7 +319,6 @@
   // The first request for a check should trigger a fetch if it hasn't happened
   // already.
   MockSearchDomainCheckResponse("http://www.google.co.uk/");
-  EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url());
   EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url());
   EXPECT_TRUE(listener_notified());
 }
@@ -631,7 +332,6 @@
   // The first request for a check should trigger a fetch if it hasn't happened
   // already.
   MockSearchDomainCheckResponse("http://www.google.co.uk/");
-  EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url());
   EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url());
   EXPECT_TRUE(listener_notified());
   clear_listener_notified();
@@ -640,414 +340,6 @@
   // The second request should be ignored.
   EXPECT_FALSE(GetFetcher());
   MockSearchDomainCheckResponse("http://www.google.co.in/");
-  EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url());
   EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url());
   EXPECT_FALSE(listener_notified());
 }
-
-TEST_F(GoogleURLTrackerTest, SearchingDoesNothingIfNoNeedToPrompt) {
-  TestInfoBarManager infobar_manager(1);
-  RequestServerCheck();
-  FinishSleep();
-  MockSearchDomainCheckResponse("http://www.google.co.uk/");
-  EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url());
-  EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url());
-  EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
-  EXPECT_TRUE(listener_notified());
-  clear_listener_notified();
-
-  SetNavigationPending(&infobar_manager, true);
-  CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
-  EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
-  EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url());
-  EXPECT_EQ(GURL("http://www.google.co.uk/"), google_url());
-  EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
-  EXPECT_FALSE(listener_notified());
-}
-
-TEST_F(GoogleURLTrackerTest, TabClosedOnPendingSearch) {
-  TestInfoBarManager infobar_manager(1);
-  SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
-  RequestServerCheck();
-  FinishSleep();
-  MockSearchDomainCheckResponse("http://www.google.co.jp/");
-  EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
-  EXPECT_EQ(GURL("http://www.google.co.jp/"), fetched_google_url());
-  EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
-  EXPECT_FALSE(listener_notified());
-
-  SetNavigationPending(&infobar_manager, true);
-  GoogleURLTrackerMapEntry* map_entry = GetMapEntry(&infobar_manager);
-  ASSERT_FALSE(map_entry == NULL);
-  EXPECT_FALSE(map_entry->has_infobar_delegate());
-  EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
-  EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
-  EXPECT_FALSE(listener_notified());
-
-  CloseTab(&infobar_manager);
-  EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
-  EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
-  EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
-  EXPECT_FALSE(listener_notified());
-}
-
-TEST_F(GoogleURLTrackerTest, TabClosedOnCommittedSearch) {
-  TestInfoBarManager infobar_manager(1);
-  SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
-  RequestServerCheck();
-  FinishSleep();
-  MockSearchDomainCheckResponse("http://www.google.co.jp/");
-
-  SetNavigationPending(&infobar_manager, true);
-  CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
-  EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL);
-
-  CloseTab(&infobar_manager);
-  EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
-  EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
-  EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
-  EXPECT_FALSE(listener_notified());
-}
-
-TEST_F(GoogleURLTrackerTest, InfoBarClosed) {
-  TestInfoBarManager infobar_manager(1);
-  SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
-  RequestServerCheck();
-  FinishSleep();
-  MockSearchDomainCheckResponse("http://www.google.co.jp/");
-
-  SetNavigationPending(&infobar_manager, true);
-  CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
-  GoogleURLTrackerInfoBarDelegate* infobar =
-      GetInfoBarDelegate(&infobar_manager);
-  ASSERT_FALSE(infobar == NULL);
-
-  infobar->Close(false);
-  EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
-  EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
-  EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
-  EXPECT_FALSE(listener_notified());
-}
-
-TEST_F(GoogleURLTrackerTest, InfoBarRefused) {
-  TestInfoBarManager infobar_manager(1);
-  SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
-  RequestServerCheck();
-  FinishSleep();
-  MockSearchDomainCheckResponse("http://www.google.co.jp/");
-
-  SetNavigationPending(&infobar_manager, true);
-  CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
-  GoogleURLTrackerInfoBarDelegate* infobar =
-      GetInfoBarDelegate(&infobar_manager);
-  ASSERT_FALSE(infobar == NULL);
-
-  infobar->Cancel();
-  EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
-  EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
-  EXPECT_EQ(GURL("http://www.google.co.jp/"), GetLastPromptedGoogleURL());
-  EXPECT_FALSE(listener_notified());
-}
-
-TEST_F(GoogleURLTrackerTest, InfoBarAccepted) {
-  TestInfoBarManager infobar_manager(1);
-  SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
-  RequestServerCheck();
-  FinishSleep();
-  MockSearchDomainCheckResponse("http://www.google.co.jp/");
-
-  SetNavigationPending(&infobar_manager, true);
-  CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
-  GoogleURLTrackerInfoBarDelegate* infobar =
-      GetInfoBarDelegate(&infobar_manager);
-  ASSERT_FALSE(infobar == NULL);
-
-  infobar->Accept();
-  EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
-  EXPECT_EQ(GURL("http://www.google.co.jp/"), google_url());
-  EXPECT_EQ(GURL("http://www.google.co.jp/"), GetLastPromptedGoogleURL());
-  EXPECT_TRUE(listener_notified());
-}
-
-TEST_F(GoogleURLTrackerTest, FetchesCanAutomaticallyCloseInfoBars) {
-  TestInfoBarManager infobar_manager(1);
-  RequestServerCheck();
-  FinishSleep();
-  MockSearchDomainCheckResponse(google_url().spec());
-
-  // Re-fetching the accepted URL after showing an infobar for another URL
-  // should close the infobar.
-  NotifyNetworkChanged();
-  MockSearchDomainCheckResponse("http://www.google.co.uk/");
-  SetNavigationPending(&infobar_manager, true);
-  CommitSearch(&infobar_manager, GURL("http://www.google.com/search?q=test"));
-  EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL);
-  NotifyNetworkChanged();
-  MockSearchDomainCheckResponse(google_url().spec());
-  EXPECT_EQ(google_url(), GetLastPromptedGoogleURL());
-  EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
-
-  // As should fetching a URL that differs from the accepted only by the scheme.
-  NotifyNetworkChanged();
-  MockSearchDomainCheckResponse("http://www.google.co.uk/");
-  SetNavigationPending(&infobar_manager, true);
-  CommitSearch(&infobar_manager, GURL("http://www.google.com/search?q=test"));
-  EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL);
-  NotifyNetworkChanged();
-  url::Replacements<char> replacements;
-  const std::string& scheme("https");
-  replacements.SetScheme(scheme.data(), url::Component(0, scheme.length()));
-  GURL new_google_url(google_url().ReplaceComponents(replacements));
-  MockSearchDomainCheckResponse(new_google_url.spec());
-  EXPECT_EQ(new_google_url, GetLastPromptedGoogleURL());
-  EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
-
-  // As should re-fetching the last prompted URL.
-  SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
-  NotifyNetworkChanged();
-  MockSearchDomainCheckResponse("http://www.google.co.jp/");
-  SetNavigationPending(&infobar_manager, true);
-  CommitSearch(&infobar_manager, GURL("http://www.google.com/search?q=test"));
-  EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL);
-  NotifyNetworkChanged();
-  MockSearchDomainCheckResponse("http://www.google.co.uk/");
-  EXPECT_EQ(new_google_url, google_url());
-  EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
-  EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
-
-  // And one that differs from the last prompted URL only by the scheme.
-  NotifyNetworkChanged();
-  MockSearchDomainCheckResponse("http://www.google.co.jp/");
-  SetNavigationPending(&infobar_manager, true);
-  CommitSearch(&infobar_manager, GURL("http://www.google.com/search?q=test"));
-  EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL);
-  NotifyNetworkChanged();
-  MockSearchDomainCheckResponse("https://www.google.co.uk/");
-  EXPECT_EQ(new_google_url, google_url());
-  EXPECT_EQ(GURL("https://www.google.co.uk/"), GetLastPromptedGoogleURL());
-  EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
-
-  // And fetching a different URL entirely.
-  NotifyNetworkChanged();
-  MockSearchDomainCheckResponse("http://www.google.co.jp/");
-  SetNavigationPending(&infobar_manager, true);
-  CommitSearch(&infobar_manager, GURL("http://www.google.com/search?q=test"));
-  EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL);
-  NotifyNetworkChanged();
-  MockSearchDomainCheckResponse("https://www.google.co.in/");
-  EXPECT_EQ(new_google_url, google_url());
-  EXPECT_EQ(GURL("https://www.google.co.uk/"), GetLastPromptedGoogleURL());
-  EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
-}
-
-TEST_F(GoogleURLTrackerTest, ResetInfoBarGoogleURLs) {
-  TestInfoBarManager infobar_manager(1);
-  RequestServerCheck();
-  FinishSleep();
-  MockSearchDomainCheckResponse(google_url().spec());
-
-  NotifyNetworkChanged();
-  MockSearchDomainCheckResponse("http://www.google.co.uk/");
-  SetNavigationPending(&infobar_manager, true);
-  CommitSearch(&infobar_manager, GURL("http://www.google.com/search?q=test"));
-  GoogleURLTrackerInfoBarDelegate* delegate =
-      GetInfoBarDelegate(&infobar_manager);
-  ASSERT_FALSE(delegate == NULL);
-  EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url());
-
-  // If while an infobar is showing we fetch a new URL that differs from the
-  // infobar's only by scheme, the infobar should stay showing.
-  NotifyNetworkChanged();
-  MockSearchDomainCheckResponse("https://www.google.co.uk/");
-  EXPECT_EQ(delegate, GetInfoBarDelegate(&infobar_manager));
-  EXPECT_EQ(GURL("https://www.google.co.uk/"), fetched_google_url());
-}
-
-TEST_F(GoogleURLTrackerTest, NavigationsAfterPendingSearch) {
-  TestInfoBarManager infobar_manager(1);
-  SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
-  RequestServerCheck();
-  FinishSleep();
-  MockSearchDomainCheckResponse("http://www.google.co.jp/");
-
-  // A pending non-search after a pending search should delete the map entry.
-  SetNavigationPending(&infobar_manager, true);
-  GoogleURLTrackerMapEntry* map_entry = GetMapEntry(&infobar_manager);
-  ASSERT_FALSE(map_entry == NULL);
-  EXPECT_FALSE(map_entry->has_infobar_delegate());
-  SetNavigationPending(&infobar_manager, false);
-  EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
-
-  // A pending search after a pending search should leave the map entry alive.
-  SetNavigationPending(&infobar_manager, true);
-  map_entry = GetMapEntry(&infobar_manager);
-  ASSERT_FALSE(map_entry == NULL);
-  EXPECT_FALSE(map_entry->has_infobar_delegate());
-  SetNavigationPending(&infobar_manager, true);
-  ASSERT_EQ(map_entry, GetMapEntry(&infobar_manager));
-  EXPECT_FALSE(map_entry->has_infobar_delegate());
-  ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, true));
-
-  // Committing this search should show an infobar.
-  CommitSearch(&infobar_manager,
-               GURL("http://www.google.co.uk/search?q=test2"));
-  EXPECT_TRUE(map_entry->has_infobar_delegate());
-  EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
-  EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
-  EXPECT_FALSE(listener_notified());
-  ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false));
-}
-
-TEST_F(GoogleURLTrackerTest, NavigationsAfterCommittedSearch) {
-  TestInfoBarManager infobar_manager(1);
-  SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
-  RequestServerCheck();
-  FinishSleep();
-  MockSearchDomainCheckResponse("http://www.google.co.jp/");
-  SetNavigationPending(&infobar_manager, true);
-  CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
-  GoogleURLTrackerInfoBarDelegate* delegate =
-      GetInfoBarDelegate(&infobar_manager);
-  ASSERT_FALSE(delegate == NULL);
-  ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false));
-
-  // A pending non-search on a visible infobar should basically do nothing.
-  SetNavigationPending(&infobar_manager, false);
-  ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager));
-  EXPECT_EQ(0, delegate->pending_id());
-  ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false));
-
-  // As should another pending non-search after the first.
-  SetNavigationPending(&infobar_manager, false);
-  ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager));
-  EXPECT_EQ(0, delegate->pending_id());
-  ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false));
-
-  // Committing this non-search should close the infobar.  The control flow in
-  // these tests is not really comparable to in the real browser, but at least a
-  // few sanity-checks will be performed.
-  ASSERT_NO_FATAL_FAILURE(CommitNonSearch(&infobar_manager));
-  EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
-
-  // A pending search on a visible infobar should cause the infobar to listen
-  // for the search to commit.
-  SetNavigationPending(&infobar_manager, true);
-  CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
-  delegate = GetInfoBarDelegate(&infobar_manager);
-  ASSERT_FALSE(delegate == NULL);
-  SetNavigationPending(&infobar_manager, true);
-  ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager));
-  EXPECT_EQ(1, delegate->pending_id());
-  ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, true));
-
-  // But a non-search after this should cancel that state.
-  SetNavigationPending(&infobar_manager, false);
-  ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager));
-  EXPECT_EQ(0, delegate->pending_id());
-  ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false));
-
-  // Another pending search after the non-search should put us back into
-  // "waiting for commit" mode.
-  SetNavigationPending(&infobar_manager, true);
-  ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager));
-  EXPECT_EQ(1, delegate->pending_id());
-  ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, true));
-
-  // A second pending search after the first should not really change anything.
-  SetNavigationPending(&infobar_manager, true);
-  ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager));
-  EXPECT_EQ(1, delegate->pending_id());
-  ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, true));
-
-  // Committing this search should change the visible infobar's search_url.
-  CommitSearch(&infobar_manager,
-               GURL("http://www.google.co.uk/search?q=test2"));
-  ASSERT_EQ(delegate, GetInfoBarDelegate(&infobar_manager));
-  EXPECT_EQ(GURL("http://www.google.co.uk/search?q=test2"),
-            delegate->search_url());
-  EXPECT_EQ(0, delegate->pending_id());
-  ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false));
-  EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
-  EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
-  EXPECT_FALSE(listener_notified());
-}
-
-TEST_F(GoogleURLTrackerTest, MultipleMapEntries) {
-  TestInfoBarManager infobar_manager(1);
-  TestInfoBarManager infobar_manager2(2);
-  TestInfoBarManager infobar_manager3(3);
-  TestInfoBarManager infobar_manager4(4);
-  SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
-  RequestServerCheck();
-  FinishSleep();
-  MockSearchDomainCheckResponse("http://www.google.co.jp/");
-
-  SetNavigationPending(&infobar_manager, true);
-  GoogleURLTrackerMapEntry* map_entry = GetMapEntry(&infobar_manager);
-  ASSERT_FALSE(map_entry == NULL);
-  EXPECT_FALSE(map_entry->has_infobar_delegate());
-
-  SetNavigationPending(&infobar_manager2, true);
-  CommitSearch(&infobar_manager2,
-               GURL("http://www.google.co.uk/search?q=test2"));
-  GoogleURLTrackerInfoBarDelegate* delegate2 =
-      GetInfoBarDelegate(&infobar_manager2);
-  ASSERT_FALSE(delegate2 == NULL);
-  EXPECT_EQ(GURL("http://www.google.co.uk/search?q=test2"),
-            delegate2->search_url());
-
-  SetNavigationPending(&infobar_manager3, true);
-  GoogleURLTrackerMapEntry* map_entry3 = GetMapEntry(&infobar_manager3);
-  ASSERT_FALSE(map_entry3 == NULL);
-  EXPECT_FALSE(map_entry3->has_infobar_delegate());
-
-  SetNavigationPending(&infobar_manager4, true);
-  CommitSearch(&infobar_manager4,
-               GURL("http://www.google.co.uk/search?q=test4"));
-  GoogleURLTrackerInfoBarDelegate* delegate4 =
-      GetInfoBarDelegate(&infobar_manager4);
-  ASSERT_FALSE(delegate4 == NULL);
-  EXPECT_EQ(GURL("http://www.google.co.uk/search?q=test4"),
-            delegate4->search_url());
-
-  CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
-  EXPECT_TRUE(map_entry->has_infobar_delegate());
-
-  delegate2->Close(false);
-  EXPECT_TRUE(GetMapEntry(&infobar_manager2) == NULL);
-  EXPECT_FALSE(listener_notified());
-
-  delegate4->Accept();
-  EXPECT_TRUE(GetMapEntry(&infobar_manager) == NULL);
-  EXPECT_TRUE(GetMapEntry(&infobar_manager3) == NULL);
-  EXPECT_TRUE(GetMapEntry(&infobar_manager4) == NULL);
-  EXPECT_EQ(GURL("http://www.google.co.jp/"), google_url());
-  EXPECT_EQ(GURL("http://www.google.co.jp/"), GetLastPromptedGoogleURL());
-  EXPECT_TRUE(listener_notified());
-}
-
-TEST_F(GoogleURLTrackerTest, IgnoreIrrelevantNavigation) {
-  TestInfoBarManager infobar_manager(1);
-  TestInfoBarManager infobar_manager2(2);
-  SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
-  RequestServerCheck();
-  FinishSleep();
-  MockSearchDomainCheckResponse("http://www.google.co.jp/");
-
-  // This tests a particularly gnarly sequence of events that used to cause us
-  // to erroneously listen for a non-search navigation to commit.
-  SetNavigationPending(&infobar_manager, true);
-  CommitSearch(&infobar_manager, GURL("http://www.google.co.uk/search?q=test"));
-  SetNavigationPending(&infobar_manager2, true);
-  CommitSearch(&infobar_manager2,
-               GURL("http://www.google.co.uk/search?q=test2"));
-  EXPECT_FALSE(GetInfoBarDelegate(&infobar_manager) == NULL);
-  GoogleURLTrackerInfoBarDelegate* delegate2 =
-      GetInfoBarDelegate(&infobar_manager2);
-  ASSERT_FALSE(delegate2 == NULL);
-  SetNavigationPending(&infobar_manager, true);
-  ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, true));
-  delegate2->Close(false);
-  SetNavigationPending(&infobar_manager, false);
-  ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(&infobar_manager, false));
-}
diff --git a/components/google/core/browser/google_util.cc b/components/google/core/browser/google_util.cc
index 800b1bc..b29b2f5 100644
--- a/components/google/core/browser/google_util.cc
+++ b/components/google/core/browser/google_util.cc
@@ -79,7 +79,7 @@
 // Global functions -----------------------------------------------------------
 
 bool HasGoogleSearchQueryParam(const std::string& str) {
-  url::Component query(0, str.length()), key, value;
+  url::Component query(0, static_cast<int>(str.length())), key, value;
   while (url::ExtractQueryKeyValue(str.c_str(), &query, &key, &value)) {
     if ((key.len == 1) && (str[key.begin] == 'q') && value.is_nonempty())
       return true;
diff --git a/components/google_strings.grdp b/components/google_strings.grdp
deleted file mode 100644
index b5a4a6a..0000000
--- a/components/google_strings.grdp
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<grit-part>
-
-  <message name="IDS_GOOGLE_URL_TRACKER_INFOBAR_MESSAGE" desc="Message displayed when the user's current Google TLD doesn't match the default for their location.  This can be shortened in other languages (e.g. by removing 'would you like to') as needed to keep the translated strings from being much longer than English, so the infobar can still display all three IDS_GOOGLE_URL_TRACKER_ strings and a 'Learn more' link.">
-    Would you like to search with <ph name="NEW_GOOGLE_HOST">$1<ex>google.de</ex></ph> instead of <ph name="CURRENT_GOOGLE_HOST">$2<ex>google.fr</ex></ph>?
-  </message>
-  <message name="IDS_GOOGLE_URL_TRACKER_INFOBAR_SWITCH" desc="Button text for button that changes user's default Google TLD to a new TLD.">
-    Switch to <ph name="NEW_GOOGLE_HOST">$1<ex>google.de</ex></ph>
-  </message>
-  <message name="IDS_GOOGLE_URL_TRACKER_INFOBAR_DONT_SWITCH" desc="Button text for button that leaves user's default Google TLD unchanged.">
-    Keep using <ph name="CURRENT_GOOGLE_HOST">$1<ex>google.fr</ex></ph>
-  </message>
-  <message name="IDS_GOOGLE_URL_TRACKER_INFOBAR_LEARN_MORE" desc="Learn more text for the Google URL tracker infobar">
-    Learn more
-  </message>
-
-</grit-part>
diff --git a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
index 2915c1c..3e9fc9b 100644
--- a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
+++ b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
@@ -827,7 +827,8 @@
   RunTest(FILE_PATH_LITERAL("input-radio.html"));
 }
 
-IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, AccessibilityInputRange) {
+IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest,
+                       DISABLED_AccessibilityInputRange) {
   RunTest(FILE_PATH_LITERAL("input-range.html"));
 }
 
diff --git a/content/browser/frame_host/navigation_controller_impl.cc b/content/browser/frame_host/navigation_controller_impl.cc
index 4be5a3c..a2a57d1 100644
--- a/content/browser/frame_host/navigation_controller_impl.cc
+++ b/content/browser/frame_host/navigation_controller_impl.cc
@@ -1509,6 +1509,11 @@
 
 void NavigationControllerImpl::SetNeedsReload() {
   needs_reload_ = true;
+
+  if (last_committed_entry_index_ != -1) {
+    entries_[last_committed_entry_index_]->SetTransitionType(
+        ui::PAGE_TRANSITION_RELOAD);
+  }
 }
 
 void NavigationControllerImpl::RemoveEntryAtIndexInternal(int index) {
diff --git a/content/browser/frame_host/navigation_controller_impl_unittest.cc b/content/browser/frame_host/navigation_controller_impl_unittest.cc
index ae7ad90..88d9f79 100644
--- a/content/browser/frame_host/navigation_controller_impl_unittest.cc
+++ b/content/browser/frame_host/navigation_controller_impl_unittest.cc
@@ -3288,15 +3288,44 @@
   const GURL url("http://foo");
   NavigateAndCommit(url);
   ASSERT_FALSE(controller.NeedsReload());
+  EXPECT_NE(ui::PAGE_TRANSITION_RELOAD,
+            controller.GetLastCommittedEntry()->GetTransitionType());
 
   // Request a reload to happen when the controller becomes active (e.g. after
   // the renderer gets killed in background on Android).
   controller.SetNeedsReload();
   ASSERT_TRUE(controller.NeedsReload());
+  EXPECT_EQ(ui::PAGE_TRANSITION_RELOAD,
+            controller.GetLastCommittedEntry()->GetTransitionType());
 
   // Set the controller as active, triggering the requested reload.
   controller.SetActive(true);
   ASSERT_FALSE(controller.NeedsReload());
+  EXPECT_EQ(ui::PAGE_TRANSITION_RELOAD,
+            controller.GetPendingEntry()->GetTransitionType());
+}
+
+// Test requesting and triggering a lazy reload without any committed entry.
+TEST_F(NavigationControllerTest, LazyReloadWithoutCommittedEntry) {
+  NavigationControllerImpl& controller = controller_impl();
+  const GURL url("http://foo");
+  controller.LoadURL(url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
+  ASSERT_FALSE(controller.NeedsReload());
+  EXPECT_EQ(ui::PAGE_TRANSITION_TYPED,
+            controller.GetPendingEntry()->GetTransitionType());
+
+  // Request a reload to happen when the controller becomes active (e.g. after
+  // the renderer gets killed in background on Android).
+  controller.SetNeedsReload();
+  ASSERT_TRUE(controller.NeedsReload());
+  EXPECT_EQ(ui::PAGE_TRANSITION_TYPED,
+            controller.GetPendingEntry()->GetTransitionType());
+
+  // Set the controller as active, triggering the requested reload.
+  controller.SetActive(true);
+  ASSERT_FALSE(controller.NeedsReload());
+  EXPECT_EQ(ui::PAGE_TRANSITION_TYPED,
+            controller.GetPendingEntry()->GetTransitionType());
 }
 
 // Tests a subframe navigation while a toplevel navigation is pending.
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
index b794107..ca4b467 100644
--- a/content/browser/frame_host/render_frame_host_impl.cc
+++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -610,7 +610,9 @@
   int32 resolved_level =
       HasWebUIScheme(delegate_->GetMainFrameLastCommittedURL()) ? level : 0;
 
-  if (resolved_level >= ::logging::GetMinLogLevel()) {
+  // LogMessages can be persisted so this shouldn't be logged in incognito mode.
+  if (resolved_level >= ::logging::GetMinLogLevel()
+      && !GetSiteInstance()->GetBrowserContext()->IsOffTheRecord()) {
     logging::LogMessage("CONSOLE", line_no, resolved_level).stream() << "\"" <<
         message << "\", source: " << source_id << " (" << line_no << ")";
   }
diff --git a/content/browser/renderer_host/image_transport_factory_android.cc b/content/browser/renderer_host/image_transport_factory_android.cc
index 41e3156..1ac7b23 100644
--- a/content/browser/renderer_host/image_transport_factory_android.cc
+++ b/content/browser/renderer_host/image_transport_factory_android.cc
@@ -39,9 +39,6 @@
   virtual ~CmdBufferImageTransportFactory();
 
   virtual GLHelper* GetGLHelper() override;
-  virtual uint32 GetChannelID() override {
-    return BrowserGpuChannelHostFactory::instance()->GetGpuChannelId();
-  }
 
  private:
   scoped_ptr<WebGraphicsContext3DCommandBufferImpl> context_;
@@ -104,6 +101,11 @@
 }  // anonymous namespace
 
 // static
+uint32 ImageTransportFactoryAndroid::GetChannelID() {
+  return BrowserGpuChannelHostFactory::instance()->GetGpuChannelId();
+}
+
+// static
 void ImageTransportFactoryAndroid::InitializeForUnitTests(
     scoped_ptr<ImageTransportFactoryAndroid> test_factory) {
   DCHECK(!g_factory);
diff --git a/content/browser/renderer_host/image_transport_factory_android.h b/content/browser/renderer_host/image_transport_factory_android.h
index 2562381..ea2cd99 100644
--- a/content/browser/renderer_host/image_transport_factory_android.h
+++ b/content/browser/renderer_host/image_transport_factory_android.h
@@ -42,7 +42,7 @@
   static ImageTransportFactoryAndroid* GetInstance();
 
   virtual GLHelper* GetGLHelper() = 0;
-  virtual uint32 GetChannelID() = 0;
+  static uint32 GetChannelID();
 
   static void AddObserver(ImageTransportFactoryAndroidObserver* observer);
   static void RemoveObserver(ImageTransportFactoryAndroidObserver* observer);
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 8c5b214..4c415b6 100644
--- a/content/browser/renderer_host/render_widget_host_view_android.cc
+++ b/content/browser/renderer_host/render_widget_host_view_android.cc
@@ -1378,8 +1378,7 @@
   gfx::GLSurfaceHandle handle =
       gfx::GLSurfaceHandle(gfx::kNullPluginWindow, gfx::NULL_TRANSPORT);
   if (using_browser_compositor_) {
-    handle.parent_client_id =
-        ImageTransportFactoryAndroid::GetInstance()->GetChannelID();
+    handle.parent_client_id = ImageTransportFactoryAndroid::GetChannelID();
   }
   return handle;
 }
diff --git a/content/browser/renderer_host/test/no_transport_image_transport_factory_android.cc b/content/browser/renderer_host/test/no_transport_image_transport_factory_android.cc
index 23a738e..a0b5f1c 100644
--- a/content/browser/renderer_host/test/no_transport_image_transport_factory_android.cc
+++ b/content/browser/renderer_host/test/no_transport_image_transport_factory_android.cc
@@ -29,9 +29,4 @@
   return gl_helper_.get();
 }
 
-uint32 NoTransportImageTransportFactoryAndroid::GetChannelID() {
-  NOTREACHED();
-  return 0;
-}
-
 }  // namespace content
diff --git a/content/browser/renderer_host/test/no_transport_image_transport_factory_android.h b/content/browser/renderer_host/test/no_transport_image_transport_factory_android.h
index 44a7747..fafaad2 100644
--- a/content/browser/renderer_host/test/no_transport_image_transport_factory_android.h
+++ b/content/browser/renderer_host/test/no_transport_image_transport_factory_android.h
@@ -28,7 +28,6 @@
   NoTransportImageTransportFactoryAndroid();
   virtual ~NoTransportImageTransportFactoryAndroid();
   virtual GLHelper* GetGLHelper() override;
-  virtual uint32 GetChannelID() override;
 
  private:
   scoped_ptr<ui::ContextFactory> context_factory_;
diff --git a/content/common/gpu/image_transport_surface_calayer_mac.mm b/content/common/gpu/image_transport_surface_calayer_mac.mm
index 0147b3c..88af041 100644
--- a/content/common/gpu/image_transport_surface_calayer_mac.mm
+++ b/content/common/gpu/image_transport_surface_calayer_mac.mm
@@ -188,7 +188,13 @@
     [context_ retain];
   }
 
-  // Allocate a CALayer to use to draw the content, if needed.
+  // If we create a new layer, always force it to draw immediately. This is
+  // especially important at tab-switch, where we don't want to wait for a
+  // vsync to un-block the browser (which is waiting for the frame to come in).
+  bool force_immediate_draw = false;
+
+  // Allocate a CALayer to use to draw the content and make it current to the
+  // CAContext, if needed.
   if (!layer_) {
     layer_.reset([[ImageTransportLayer alloc] initWithStorageProvider:this]);
     gfx::Size dip_size(gfx::ToFlooredSize(gfx::ScaleSize(
@@ -196,18 +202,17 @@
     [layer_ setContentsScale:fbo_scale_factor_];
     [layer_ setFrame:CGRectMake(0, 0, dip_size.width(), dip_size.height())];
 
-    // Make the CALayer current to the CAContext and display its contents
-    // immediately.
     [context_ setLayer:layer_];
+    force_immediate_draw = true;
   }
 
   // Replacing the CAContext's CALayer will sometimes results in an immediate
-  // draw. If that happens, early-out.
+  // draw.
   if (!has_pending_draw_)
     return;
 
   // Tell CoreAnimation to draw our frame.
-  if (gpu_vsync_disabled_ || throttling_disabled_) {
+  if (gpu_vsync_disabled_ || throttling_disabled_ || force_immediate_draw) {
     DrawImmediatelyAndUnblockBrowser();
   } else {
     if (![layer_ isAsynchronous])
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 8a8d77c..272fa95 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
@@ -1900,9 +1900,20 @@
         return mActionHandler;
     }
 
+    // crbug.com/446717
+    private void actionModeInvalidateWAR() {
+        assert mActionMode != null;
+
+        try {
+            mActionMode.invalidate();
+        } catch (NullPointerException e) {
+            Log.w(TAG, "Ignoring NPE from ActionMode.invalidate() as workaround for L", e);
+        }
+    }
+
     private void showSelectActionBar() {
         if (mActionMode != null) {
-            mActionMode.invalidate();
+            actionModeInvalidateWAR();
             return;
         }
 
@@ -2247,7 +2258,7 @@
                     compositionEnd, isNonImeChange);
         }
 
-        if (mActionMode != null) mActionMode.invalidate();
+        if (mActionMode != null) actionModeInvalidateWAR();
         TraceEvent.end();
     }
 
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/AdapterInputConnection.java b/content/public/android/java/src/org/chromium/content/browser/input/AdapterInputConnection.java
index 1eafc6a..972c082 100644
--- a/content/public/android/java/src/org/chromium/content/browser/input/AdapterInputConnection.java
+++ b/content/public/android/java/src/org/chromium/content/browser/input/AdapterInputConnection.java
@@ -10,6 +10,7 @@
 import android.text.Selection;
 import android.text.TextUtils;
 import android.util.Log;
+import android.view.KeyCharacterMap;
 import android.view.KeyEvent;
 import android.view.View;
 import android.view.inputmethod.BaseInputConnection;
@@ -27,6 +28,7 @@
 public class AdapterInputConnection extends BaseInputConnection {
     private static final String TAG = "AdapterInputConnection";
     private static final boolean DEBUG = false;
+    private static final int NO_ACCENT = 0;
     /**
      * Selection value should be -1 if not known. See EditorInfo.java for details.
      */
@@ -39,6 +41,7 @@
 
     private boolean mSingleLine;
     private int mNumNestedBatchEdits = 0;
+    private int mPendingAccent;
 
     private int mLastUpdateSelectionStart = INVALID_SELECTION;
     private int mLastUpdateSelectionEnd = INVALID_SELECTION;
@@ -125,6 +128,16 @@
         updateSelectionIfRequired();
     }
 
+    public static int maybeAddAccentToCharacter(int accentChar, int unicodeChar) {
+        if (accentChar != NO_ACCENT) {
+            int combinedChar = KeyEvent.getDeadChar(accentChar, unicodeChar);
+            if (combinedChar != 0) {
+                return combinedChar;
+            }
+        }
+        return unicodeChar;
+    }
+
     /**
      * Updates the AdapterInputConnection's internal representation of the text being edited and
      * its selection and composition properties. The resulting Editable is accessible through the
@@ -215,6 +228,8 @@
         mLastUpdateSelectionEnd = selectionEnd;
         mLastUpdateCompositionStart = compositionStart;
         mLastUpdateCompositionEnd = compositionEnd;
+        // Change in selection or cursor position invalidates any pending accent.
+        mPendingAccent = NO_ACCENT;
     }
 
     /**
@@ -368,6 +383,22 @@
         if (DEBUG) {
             Log.w(TAG, "sendKeyEvent [" + event.getAction() + "] [" + event.getKeyCode() + "]");
         }
+
+        // Short-cut modifier keys so they're not affected by accents.
+        if (KeyEvent.isModifierKey(event.getKeyCode())) {
+            return mImeAdapter.translateAndSendNativeEvents(event, NO_ACCENT);
+        }
+
+        // Some keys we just want to pass events straight through.  This allows
+        // proper "repeating key" behavior with physical keyboards.
+        int eventKeyCode = event.getKeyCode();
+        if (eventKeyCode == KeyEvent.KEYCODE_DEL || eventKeyCode == KeyEvent.KEYCODE_FORWARD_DEL) {
+            mPendingAccent = 0;
+            return mImeAdapter.translateAndSendNativeEvents(event, NO_ACCENT);
+        }
+
+        int unicodeChar = event.getUnicodeChar();
+
         // If this is a key-up, and backspace/del or if the key has a character representation,
         // need to update the underlying Editable (i.e. the local representation of the text
         // being edited).
@@ -378,26 +409,24 @@
             } else if (event.getKeyCode() == KeyEvent.KEYCODE_FORWARD_DEL) {
                 deleteSurroundingText(0, 1);
                 return true;
-            } else {
-                int unicodeChar = event.getUnicodeChar();
-                if (unicodeChar != 0) {
-                    int selectionStart = Selection.getSelectionStart(mEditable);
-                    int selectionEnd = Selection.getSelectionEnd(mEditable);
-                    if (selectionStart > selectionEnd) {
-                        int temp = selectionStart;
-                        selectionStart = selectionEnd;
-                        selectionEnd = temp;
-                    }
-                    mEditable.replace(selectionStart, selectionEnd,
-                            Character.toString((char) unicodeChar));
+            } else if (unicodeChar != 0) {
+                int selectionStart = Selection.getSelectionStart(mEditable);
+                int selectionEnd = Selection.getSelectionEnd(mEditable);
+                if (selectionStart > selectionEnd) {
+                    int temp = selectionStart;
+                    selectionStart = selectionEnd;
+                    selectionEnd = temp;
                 }
+                int combinedChar = maybeAddAccentToCharacter(mPendingAccent, unicodeChar);
+                mEditable.replace(selectionStart, selectionEnd,
+                        Character.toString((char) combinedChar));
             }
         } else if (event.getAction() == KeyEvent.ACTION_DOWN) {
             // TODO(aurimas): remove this workaround when crbug.com/278584 is fixed.
             if (event.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
                 beginBatchEdit();
                 finishComposingText();
-                mImeAdapter.translateAndSendNativeEvents(event);
+                mImeAdapter.translateAndSendNativeEvents(event, 0);
                 endBatchEdit();
                 return true;
             } else if (event.getKeyCode() == KeyEvent.KEYCODE_DEL) {
@@ -406,7 +435,46 @@
                 return true;
             }
         }
-        mImeAdapter.translateAndSendNativeEvents(event);
+
+        // Physical keyboards also have their events come through here though not
+        // by BaseInputConnection.  In order to support "accent" key sequences
+        // such as "~n" or "^o" we have to record that one has been pressed
+        // and, if an accentable letter follows, delete the accent glyph and
+        // insert the composed character.
+
+        // Copy class variable to local because class version may get indirectly
+        // cleared by the deleteSurroundingText() call below.
+        int pendingAccent = mPendingAccent;
+        int nextAccent = mPendingAccent;
+
+        if ((unicodeChar & KeyCharacterMap.COMBINING_ACCENT) != 0) {
+            pendingAccent = NO_ACCENT;
+            nextAccent = unicodeChar & KeyCharacterMap.COMBINING_ACCENT_MASK;
+        } else if (pendingAccent != NO_ACCENT) {
+            if (event.getAction() == KeyEvent.ACTION_DOWN) {
+                int combined = KeyEvent.getDeadChar(pendingAccent, unicodeChar);
+                if (combined != 0) {
+                    // Previous accent combines with new character to create
+                    // a new accented character.  First delete the displayed
+                    // accent so it appears overwritten by the composition.
+                    super.deleteSurroundingText(1, 0);
+                    mImeAdapter.deleteSurroundingText(1, 0);
+                } else {
+                    // Previous accent doesn't combine with this character
+                    // so assume both are completely independent.
+                    pendingAccent = NO_ACCENT;
+                    nextAccent = NO_ACCENT;
+                }
+            }
+
+            if (event.getAction() == KeyEvent.ACTION_UP) {
+                // Forget accent after release of key being accented.
+                nextAccent = NO_ACCENT;
+            }
+        }
+
+        mImeAdapter.translateAndSendNativeEvents(event, pendingAccent);
+        mPendingAccent = nextAccent;
         return true;
     }
 
@@ -448,6 +516,7 @@
         if (DEBUG) Log.w(TAG, "restartInput");
         getInputMethodManagerWrapper().restartInput(mInternalView);
         mNumNestedBatchEdits = 0;
+        mPendingAccent = NO_ACCENT;
     }
 
     /**
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/ImeAdapter.java b/content/public/android/java/src/org/chromium/content/browser/input/ImeAdapter.java
index e075d8e..a9d2d54 100644
--- a/content/public/android/java/src/org/chromium/content/browser/input/ImeAdapter.java
+++ b/content/public/android/java/src/org/chromium/content/browser/input/ImeAdapter.java
@@ -338,7 +338,12 @@
     }
 
     public boolean dispatchKeyEvent(KeyEvent event) {
-        return translateAndSendNativeEvents(event);
+        // Physical keyboards have their events come through here instead of
+        // AdapterInputConnection.
+        if (mInputConnection != null) {
+            return mInputConnection.sendKeyEvent(event);
+        }
+        return translateAndSendNativeEvents(event, 0);
     }
 
     private int shouldSendKeyEventWithKeyCode(String text) {
@@ -407,11 +412,11 @@
         translateAndSendNativeEvents(new KeyEvent(eventTime, eventTime,
                 KeyEvent.ACTION_DOWN, keyCode, 0, 0,
                 KeyCharacterMap.VIRTUAL_KEYBOARD, 0,
-                flags));
+                flags), 0);
         translateAndSendNativeEvents(new KeyEvent(SystemClock.uptimeMillis(), eventTime,
                 KeyEvent.ACTION_UP, keyCode, 0, 0,
                 KeyCharacterMap.VIRTUAL_KEYBOARD, 0,
-                flags));
+                flags), 0);
     }
 
     // Calls from Java to C++
@@ -441,14 +446,25 @@
                 keyCode = -1;
             }
 
-            // If this is a commit with no previous composition, then treat it as a native
-            // KeyDown/KeyUp pair with no composition rather than a synthetic pair with
+            // If this is a single-character commit with no previous composition, then treat it as
+            // a native KeyDown/KeyUp pair with no composition rather than a synthetic pair with
             // composition below.
-            if (keyCode > 0 && isCommit && mLastComposeText == null) {
+            if (keyCode > 0 && isCommit && mLastComposeText == null && textStr.length() == 1) {
                 mLastSyntheticKeyCode = keyCode;
-                return translateAndSendNativeEvents(keyEvent) &&
-                       translateAndSendNativeEvents(KeyEvent.changeAction(
-                               keyEvent, KeyEvent.ACTION_UP));
+                return translateAndSendNativeEvents(keyEvent, 0)
+                        && translateAndSendNativeEvents(
+                                KeyEvent.changeAction(keyEvent, KeyEvent.ACTION_UP), 0);
+            }
+
+            // FIXME: Use WebTextInputFlags.AutocompleteOff. We need this hack to enable merge into
+            // into Beta to fix http://crbug.com/422685 .
+            final int textInputFlagAutocompleteOff = 1 << 1;
+
+            // If we do not have autocomplete=off, then always send compose events rather than a
+            // guessed keyCode. This addresses http://crbug.com/422685 .
+            if ((mTextInputFlags & textInputFlagAutocompleteOff) == 0) {
+                keyCode = COMPOSITION_KEY_CODE;
+                modifiers = 0;
             }
 
             // When typing, there is no issue sending KeyDown and KeyUp events around the
@@ -499,7 +515,7 @@
         nativeFinishComposingText(mNativeImeAdapterAndroid);
     }
 
-    boolean translateAndSendNativeEvents(KeyEvent event) {
+    boolean translateAndSendNativeEvents(KeyEvent event, int accentChar) {
         if (mNativeImeAdapterAndroid == 0) return false;
 
         int action = event.getAction();
@@ -517,9 +533,11 @@
             return false;
         }
         mViewEmbedder.onImeEvent();
+        int unicodeChar = AdapterInputConnection.maybeAddAccentToCharacter(
+                accentChar, event.getUnicodeChar());
         return nativeSendKeyEvent(mNativeImeAdapterAndroid, event, event.getAction(),
                 getModifiers(event.getMetaState()), event.getEventTime(), event.getKeyCode(),
-                             /*isSystemKey=*/false, event.getUnicodeChar());
+                             /*isSystemKey=*/false, unicodeChar);
     }
 
     boolean sendSyntheticKeyEvent(int eventType, long timestampMs, int keyCode, int modifiers,
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/input/ImeTest.java b/content/public/android/javatests/src/org/chromium/content/browser/input/ImeTest.java
index 30b879b..a43001b 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/input/ImeTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/input/ImeTest.java
@@ -47,6 +47,7 @@
             "<br/><textarea id=\"textarea\" rows=\"4\" cols=\"20\"></textarea>" +
             "<br/><p><span id=\"plain_text\">This is Plain Text One</span></p>" +
             "</form></body></html>");
+    private static final int COMPOSITION_KEY_CODE = 229;
 
     private TestAdapterInputConnection mConnection;
     private ImeAdapter mImeAdapter;
@@ -591,6 +592,44 @@
 
     @SmallTest
     @Feature({"TextInput", "Main"})
+    public void testAccentKeyCodesFromPhysicalKeyboard() throws Throwable {
+        DOMUtils.focusNode(mWebContents, "textarea");
+        assertWaitForKeyboardStatus(true);
+
+        // The calls below are a reflection of what a physical keyboard sends when the noted
+        // key is pressed on the device.  Exercise care when altering to make sure that the test
+        // reflects reality.
+        mConnection = (TestAdapterInputConnection) getAdapterInputConnection();
+        waitAndVerifyEditableCallback(mConnection.mImeUpdateQueue, 0, "", 0, 0, -1, -1);
+
+        // H
+        dispatchKeyEvent(mConnection, new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_H));
+        dispatchKeyEvent(mConnection, new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_H));
+        assertEquals("h", mConnection.getTextBeforeCursor(9, 0));
+
+        // I
+        dispatchKeyEvent(mConnection, new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_I));
+        dispatchKeyEvent(mConnection, new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_I));
+        assertEquals("hi", mConnection.getTextBeforeCursor(9, 0));
+
+        // ALT-I  (circomflex accent key on virtual keyboard)
+        dispatchKeyEvent(
+                mConnection, new KeyEvent(
+                        0, 0, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_I, 0, KeyEvent.META_ALT_ON));
+        dispatchKeyEvent(
+                mConnection, new KeyEvent(
+                        0, 0, KeyEvent.ACTION_UP, KeyEvent.KEYCODE_I, 0, KeyEvent.META_ALT_ON));
+        assertEquals("hiˆ", mConnection.getTextBeforeCursor(9, 0));
+
+        // O  (accented key)
+        dispatchKeyEvent(mConnection, new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_O));
+        assertEquals("hi", mConnection.getTextBeforeCursor(9, 0));
+        dispatchKeyEvent(mConnection, new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_O));
+        assertEquals("hiô", mConnection.getTextBeforeCursor(9, 0));
+    }
+
+    @SmallTest
+    @Feature({"TextInput", "Main"})
     public void testSetComposingRegionOutOfBounds() throws Throwable {
         DOMUtils.focusNode(mWebContents, "textarea");
         assertWaitForKeyboardStatus(true);
@@ -662,7 +701,7 @@
         // H
         expectUpdateStateCall(mConnection);
         setComposingText(mConnection, "h", 1);
-        assertEquals(KeyEvent.KEYCODE_H, mImeAdapter.mLastSyntheticKeyCode);
+        assertEquals(COMPOSITION_KEY_CODE, mImeAdapter.mLastSyntheticKeyCode);
 
         // Simulate switch of input fields.
         finishComposingText(mConnection);
@@ -670,7 +709,7 @@
         // H
         expectUpdateStateCall(mConnection);
         setComposingText(mConnection, "h", 1);
-        assertEquals(KeyEvent.KEYCODE_H, mImeAdapter.mLastSyntheticKeyCode);
+        assertEquals(COMPOSITION_KEY_CODE, mImeAdapter.mLastSyntheticKeyCode);
     }
 
     @SmallTest
@@ -909,6 +948,15 @@
         });
     }
 
+    private void dispatchKeyEvent(final AdapterInputConnection connection, final KeyEvent event) {
+        ThreadUtils.runOnUiThreadBlocking(new Runnable() {
+            @Override
+            public void run() {
+                mImeAdapter.dispatchKeyEvent(event);
+            }
+        });
+    }
+
     private static class TestAdapterInputConnectionFactory extends
             ImeAdapter.AdapterInputConnectionFactory {
         @Override
diff --git a/content/public/renderer/content_renderer_client.cc b/content/public/renderer/content_renderer_client.cc
index ca1b9fe..4bbc552 100644
--- a/content/public/renderer/content_renderer_client.cc
+++ b/content/public/renderer/content_renderer_client.cc
@@ -187,11 +187,6 @@
   return false;
 }
 
-bool ContentRendererClient::IsPluginAllowedToUseVideoDecodeAPI(
-    const GURL& url) {
-  return false;
-}
-
 bool ContentRendererClient::IsPluginAllowedToUseDevChannelAPIs() {
   return false;
 }
diff --git a/content/public/renderer/content_renderer_client.h b/content/public/renderer/content_renderer_client.h
index 7b79a5c..9bf24c8 100644
--- a/content/public/renderer/content_renderer_client.h
+++ b/content/public/renderer/content_renderer_client.h
@@ -279,9 +279,6 @@
   // Returns true if the page at |url| can use Pepper Compositor APIs.
   virtual bool IsPluginAllowedToUseCompositorAPI(const GURL& url);
 
-  // Returns true if the page at |url| can use Pepper VideoDecoder APIs.
-  virtual bool IsPluginAllowedToUseVideoDecodeAPI(const GURL& url);
-
   // Returns true if dev channel APIs are available for plugins.
   virtual bool IsPluginAllowedToUseDevChannelAPIs();
 
diff --git a/content/renderer/media/rtc_data_channel_handler.cc b/content/renderer/media/rtc_data_channel_handler.cc
index e37adf3..084a020 100644
--- a/content/renderer/media/rtc_data_channel_handler.cc
+++ b/content/renderer/media/rtc_data_channel_handler.cc
@@ -50,10 +50,7 @@
   channel_->RegisterObserver(this);
 }
 
-RtcDataChannelHandler::Observer::~Observer() {
-  DVLOG(3) << "dtor";
-  DCHECK(!channel_.get()) << "Unregister hasn't been called.";
-}
+RtcDataChannelHandler::Observer::~Observer() {}
 
 const scoped_refptr<base::SingleThreadTaskRunner>&
 RtcDataChannelHandler::Observer::main_thread() const {
@@ -62,19 +59,12 @@
 
 const scoped_refptr<webrtc::DataChannelInterface>&
 RtcDataChannelHandler::Observer::channel() const {
-  DCHECK(main_thread_->BelongsToCurrentThread());
   return channel_;
 }
 
-void RtcDataChannelHandler::Observer::Unregister() {
+void RtcDataChannelHandler::Observer::ClearHandler() {
   DCHECK(main_thread_->BelongsToCurrentThread());
   handler_ = nullptr;
-  if (channel_.get()) {
-    channel_->UnregisterObserver();
-    // Now that we're guaranteed to not get further OnStateChange callbacks,
-    // it's safe to release our reference to the channel.
-    channel_ = nullptr;
-  }
 }
 
 void RtcDataChannelHandler::Observer::OnStateChange() {
@@ -137,18 +127,13 @@
 RtcDataChannelHandler::~RtcDataChannelHandler() {
   DCHECK(thread_checker_.CalledOnValidThread());
   DVLOG(1) << "::dtor";
-  DCHECK(!observer_.get());
+  observer_->ClearHandler();
 }
 
 void RtcDataChannelHandler::setClient(
     blink::WebRTCDataChannelHandlerClient* client) {
   DCHECK(thread_checker_.CalledOnValidThread());
-  DVLOG(3) << "setClient " << client;
   webkit_client_ = client;
-  if (!client) {
-    observer_->Unregister();
-    observer_ = nullptr;
-  }
 }
 
 blink::WebString RtcDataChannelHandler::label() {
@@ -288,7 +273,6 @@
 }
 
 void RtcDataChannelHandler::RecordMessageSent(size_t num_bytes) {
-  DCHECK(thread_checker_.CalledOnValidThread());
   // Currently, messages are capped at some fairly low limit (16 Kb?)
   // but we may allow unlimited-size messages at some point, so making
   // the histogram maximum quite large (100 Mb) to have some
diff --git a/content/renderer/media/rtc_data_channel_handler.h b/content/renderer/media/rtc_data_channel_handler.h
index efcec2d..79addde 100644
--- a/content/renderer/media/rtc_data_channel_handler.h
+++ b/content/renderer/media/rtc_data_channel_handler.h
@@ -74,10 +74,7 @@
     const scoped_refptr<base::SingleThreadTaskRunner>& main_thread() const;
     const scoped_refptr<webrtc::DataChannelInterface>& channel() const;
 
-    // Clears the internal |handler_| pointer so that no further callbacks
-    // will be attempted, disassociates this observer from the channel and
-    // releases the channel pointer. Must be called on the main thread.
-    void Unregister();
+    void ClearHandler();
 
    private:
     friend class base::RefCountedThreadSafe<RtcDataChannelHandler::Observer>;
@@ -92,7 +89,7 @@
 
     RtcDataChannelHandler* handler_;
     const scoped_refptr<base::SingleThreadTaskRunner> main_thread_;
-    scoped_refptr<webrtc::DataChannelInterface> channel_;
+    const scoped_refptr<webrtc::DataChannelInterface> channel_;
   };
 
   scoped_refptr<Observer> observer_;
diff --git a/content/renderer/media/rtc_peer_connection_handler_unittest.cc b/content/renderer/media/rtc_peer_connection_handler_unittest.cc
index 3bcda49..2ee286a 100644
--- a/content/renderer/media/rtc_peer_connection_handler_unittest.cc
+++ b/content/renderer/media/rtc_peer_connection_handler_unittest.cc
@@ -966,7 +966,6 @@
       pc_handler_->createDataChannel("d1", blink::WebRTCDataChannelInit()));
   EXPECT_TRUE(channel.get() != NULL);
   EXPECT_EQ(label, channel->label());
-  channel->setClient(nullptr);
 }
 
 TEST_F(RTCPeerConnectionHandlerTest, CreateDtmfSender) {
diff --git a/content/renderer/media/webrtc/peer_connection_dependency_factory.cc b/content/renderer/media/webrtc/peer_connection_dependency_factory.cc
index e203c60..1bc3c05 100644
--- a/content/renderer/media/webrtc/peer_connection_dependency_factory.cc
+++ b/content/renderer/media/webrtc/peer_connection_dependency_factory.cc
@@ -174,8 +174,7 @@
 }
 
 PeerConnectionDependencyFactory::~PeerConnectionDependencyFactory() {
-  DVLOG(1) << "~PeerConnectionDependencyFactory()";
-  DCHECK(pc_factory_.get() == NULL);
+  CleanupPeerConnectionFactory();
   if (aec_dump_message_filter_.get())
     aec_dump_message_filter_->RemoveDelegate(this);
 }
@@ -269,11 +268,6 @@
   return pc_factory_;
 }
 
-
-void PeerConnectionDependencyFactory::WillDestroyCurrentMessageLoop() {
-  CleanupPeerConnectionFactory();
-}
-
 void PeerConnectionDependencyFactory::CreatePeerConnectionFactory() {
   DCHECK(!pc_factory_.get());
   DCHECK(!signaling_thread_);
@@ -285,7 +279,6 @@
 
   DVLOG(1) << "PeerConnectionDependencyFactory::CreatePeerConnectionFactory()";
 
-  base::MessageLoop::current()->AddDestructionObserver(this);
   // To allow sending to the signaling/worker threads.
   jingle_glue::JingleThreadWrapper::EnsureForCurrentMessageLoop();
   jingle_glue::JingleThreadWrapper::current()->set_send_allowed(true);
@@ -591,7 +584,6 @@
 }
 
 void PeerConnectionDependencyFactory::CleanupPeerConnectionFactory() {
-  DVLOG(1) << "PeerConnectionDependencyFactory::CleanupPeerConnectionFactory()";
   pc_factory_ = NULL;
   if (network_manager_) {
     // The network manager needs to free its resources on the thread they were
diff --git a/content/renderer/media/webrtc/peer_connection_dependency_factory.h b/content/renderer/media/webrtc/peer_connection_dependency_factory.h
index 07375dd..67eae9d 100644
--- a/content/renderer/media/webrtc/peer_connection_dependency_factory.h
+++ b/content/renderer/media/webrtc/peer_connection_dependency_factory.h
@@ -9,7 +9,6 @@
 
 #include "base/basictypes.h"
 #include "base/files/file.h"
-#include "base/message_loop/message_loop.h"
 #include "base/threading/thread.h"
 #include "content/common/content_export.h"
 #include "content/public/renderer/render_process_observer.h"
@@ -57,7 +56,6 @@
 // Object factory for RTC PeerConnections.
 class CONTENT_EXPORT PeerConnectionDependencyFactory
     : NON_EXPORTED_BASE(public base::NonThreadSafe),
-      NON_EXPORTED_BASE(base::MessageLoop::DestructionObserver),
       NON_EXPORTED_BASE(public AecDumpMessageFilter::AecDumpDelegate) {
  public:
   PeerConnectionDependencyFactory(
@@ -172,11 +170,6 @@
   virtual void StartLocalAudioTrack(WebRtcLocalAudioTrack* audio_track);
 
  private:
-  // Implement base::MessageLoop::DestructionObserver.
-  // This makes sure the libjingle PeerConnectionFactory is released before
-  // the renderer message loop is destroyed.
-  virtual void WillDestroyCurrentMessageLoop() override;
-
   // Creates |pc_factory_|, which in turn is used for
   // creating PeerConnection objects.
   void CreatePeerConnectionFactory();
diff --git a/content/renderer/pepper/content_renderer_pepper_host_factory.cc b/content/renderer/pepper/content_renderer_pepper_host_factory.cc
index 93306eb..a5c0e4f 100644
--- a/content/renderer/pepper/content_renderer_pepper_host_factory.cc
+++ b/content/renderer/pepper/content_renderer_pepper_host_factory.cc
@@ -74,19 +74,6 @@
       document_url);
 }
 
-bool CanUseVideoDecodeAPI(const RendererPpapiHost* host, PP_Instance instance) {
-  blink::WebPluginContainer* container =
-      host->GetContainerForInstance(instance);
-  if (!container)
-    return false;
-
-  GURL document_url = container->element().document().url();
-  ContentRendererClient* content_renderer_client =
-      GetContentClient()->renderer();
-  return content_renderer_client->IsPluginAllowedToUseVideoDecodeAPI(
-      document_url);
-}
-
 }  // namespace
 
 ContentRendererPepperHostFactory::ContentRendererPepperHostFactory(
@@ -177,12 +164,9 @@
     case PpapiHostMsg_URLLoader_Create::ID:
       return scoped_ptr<ResourceHost>(new PepperURLLoaderHost(
           host_, false, instance, params.pp_resource()));
-    case PpapiHostMsg_VideoDecoder_Create::ID: {
-      if (!CanUseVideoDecodeAPI(host_, instance))
-        return scoped_ptr<ResourceHost>();
+    case PpapiHostMsg_VideoDecoder_Create::ID:
       return scoped_ptr<ResourceHost>(
           new PepperVideoDecoderHost(host_, instance, params.pp_resource()));
-    }
     case PpapiHostMsg_WebSocket_Create::ID:
       return scoped_ptr<ResourceHost>(
           new PepperWebSocketHost(host_, instance, params.pp_resource()));
diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc
index 713dffd..cc0bf1e 100644
--- a/content/renderer/render_thread_impl.cc
+++ b/content/renderer/render_thread_impl.cc
@@ -623,11 +623,8 @@
 
 #if defined(ENABLE_WEBRTC)
   RTCPeerConnectionHandler::DestructAllHandlers();
-  // |peer_connection_factory_| cannot be deleted until after the main message
-  // loop has been destroyed.  This is because there may be pending tasks that
-  // hold on to objects produced by the PC factory that depend on threads owned
-  // by the PC factory.  Once those tasks have been freed, the factory can be
-  // deleted.
+
+  peer_connection_factory_.reset();
 #endif
   RemoveFilter(vc_manager_->video_capture_message_filter());
   vc_manager_.reset();
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc
index 9a09509..efa2519 100644
--- a/content/renderer/render_widget.cc
+++ b/content/renderer/render_widget.cc
@@ -1690,8 +1690,11 @@
   if (is_hidden_ == hidden)
     return;
 
-  // The status has changed.  Tell the RenderThread about it.
+  // The status has changed.  Tell the RenderThread about it and ensure
+  // throttled acks are released in case frame production ceases.
   is_hidden_ = hidden;
+  FlushPendingInputEventAck();
+
   if (is_hidden_)
     RenderThreadImpl::current()->WidgetHidden();
   else
diff --git a/content/shell/renderer/shell_content_renderer_client.cc b/content/shell/renderer/shell_content_renderer_client.cc
index db0a13b..7f32cdc 100644
--- a/content/shell/renderer/shell_content_renderer_client.cc
+++ b/content/shell/renderer/shell_content_renderer_client.cc
@@ -36,12 +36,6 @@
       switches::kEnablePepperTesting);
 }
 
-bool ShellContentRendererClient::IsPluginAllowedToUseVideoDecodeAPI(
-    const GURL& url) {
-  return CommandLine::ForCurrentProcess()->HasSwitch(
-      switches::kEnablePepperTesting);
-}
-
 bool ShellContentRendererClient::IsPluginAllowedToUseDevChannelAPIs() {
   return CommandLine::ForCurrentProcess()->HasSwitch(
       switches::kEnablePepperTesting);
diff --git a/content/shell/renderer/shell_content_renderer_client.h b/content/shell/renderer/shell_content_renderer_client.h
index f336be7..4d5ce07 100644
--- a/content/shell/renderer/shell_content_renderer_client.h
+++ b/content/shell/renderer/shell_content_renderer_client.h
@@ -29,7 +29,6 @@
   // TODO(mkwst): These toggle based on the kEnablePepperTesting flag. Do we
   // need that outside of layout tests?
   bool IsPluginAllowedToUseCompositorAPI(const GURL& url) override;
-  bool IsPluginAllowedToUseVideoDecodeAPI(const GURL& url) override;
   bool IsPluginAllowedToUseDevChannelAPIs() override;
 
  private:
diff --git a/net/android/java/src/org/chromium/net/NetworkChangeNotifierAutoDetect.java b/net/android/java/src/org/chromium/net/NetworkChangeNotifierAutoDetect.java
index 1e72da9..2ae6641 100644
--- a/net/android/java/src/org/chromium/net/NetworkChangeNotifierAutoDetect.java
+++ b/net/android/java/src/org/chromium/net/NetworkChangeNotifierAutoDetect.java
@@ -9,6 +9,7 @@
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
 import android.net.wifi.WifiInfo;
 import android.net.wifi.WifiManager;
 import android.telephony.TelephonyManager;
@@ -25,6 +26,30 @@
 public class NetworkChangeNotifierAutoDetect extends BroadcastReceiver
         implements ApplicationStatus.ApplicationStateListener {
 
+    static class NetworkState {
+        private final boolean mConnected;
+        private final int mType;
+        private final int mSubtype;
+
+        public NetworkState(boolean connected, int type, int subtype) {
+            mConnected = connected;
+            mType = type;
+            mSubtype = subtype;
+        }
+
+        public boolean isConnected() {
+            return mConnected;
+        }
+
+        public int getNetworkType() {
+            return mType;
+        }
+
+        public int getNetworkSubType() {
+            return mSubtype;
+        }
+    }
+
     /** Queries the ConnectivityManager for information about the current connection. */
     static class ConnectivityManagerDelegate {
         private final ConnectivityManager mConnectivityManager;
@@ -40,20 +65,12 @@
             mConnectivityManager = null;
         }
 
-        boolean activeNetworkExists() {
-            return mConnectivityManager.getActiveNetworkInfo() != null;
-        }
-
-        boolean isConnected() {
-            return mConnectivityManager.getActiveNetworkInfo().isConnected();
-        }
-
-        int getNetworkType() {
-            return mConnectivityManager.getActiveNetworkInfo().getType();
-        }
-
-        int getNetworkSubtype() {
-            return mConnectivityManager.getActiveNetworkInfo().getSubtype();
+        NetworkState getNetworkState() {
+            final NetworkInfo networkInfo = mConnectivityManager.getActiveNetworkInfo();
+            if (networkInfo == null || !networkInfo.isConnected()) {
+                return new NetworkState(false, -1, -1);
+            }
+            return new NetworkState(true, networkInfo.getType(), networkInfo.getSubtype());
         }
     }
 
@@ -161,12 +178,12 @@
 
     public int getCurrentConnectionType() {
         // Track exactly what type of connection we have.
-        if (!mConnectivityManagerDelegate.activeNetworkExists() ||
-                !mConnectivityManagerDelegate.isConnected()) {
+        final NetworkState networkState = mConnectivityManagerDelegate.getNetworkState();
+        if (!networkState.isConnected()) {
             return NetworkChangeNotifier.CONNECTION_NONE;
         }
 
-        switch (mConnectivityManagerDelegate.getNetworkType()) {
+        switch (networkState.getNetworkType()) {
             case ConnectivityManager.TYPE_ETHERNET:
                 return NetworkChangeNotifier.CONNECTION_ETHERNET;
             case ConnectivityManager.TYPE_WIFI:
@@ -177,7 +194,7 @@
                 return NetworkChangeNotifier.CONNECTION_BLUETOOTH;
             case ConnectivityManager.TYPE_MOBILE:
                 // Use information from TelephonyManager to classify the connection.
-                switch (mConnectivityManagerDelegate.getNetworkSubtype()) {
+                switch (networkState.getNetworkSubType()) {
                     case TelephonyManager.NETWORK_TYPE_GPRS:
                     case TelephonyManager.NETWORK_TYPE_EDGE:
                     case TelephonyManager.NETWORK_TYPE_CDMA:
diff --git a/net/android/javatests/src/org/chromium/net/NetworkChangeNotifierTest.java b/net/android/javatests/src/org/chromium/net/NetworkChangeNotifierTest.java
index 887bc3b..dd15a76 100644
--- a/net/android/javatests/src/org/chromium/net/NetworkChangeNotifierTest.java
+++ b/net/android/javatests/src/org/chromium/net/NetworkChangeNotifierTest.java
@@ -14,6 +14,7 @@
 
 import org.chromium.base.ApplicationState;
 import org.chromium.base.test.util.Feature;
+import org.chromium.net.NetworkChangeNotifierAutoDetect.NetworkState;
 
 /**
  * Tests for org.chromium.net.NetworkChangeNotifier.
@@ -50,33 +51,18 @@
         private int mNetworkSubtype;
 
         @Override
-        boolean activeNetworkExists() {
-            return mActiveNetworkExists;
-        }
-
-        @Override
-        boolean isConnected() {
-            return getNetworkType() != NetworkChangeNotifier.CONNECTION_NONE;
+        NetworkState getNetworkState() {
+            return new NetworkState(mActiveNetworkExists, mNetworkType, mNetworkSubtype);
         }
 
         void setActiveNetworkExists(boolean networkExists) {
             mActiveNetworkExists = networkExists;
         }
 
-        @Override
-        int getNetworkType() {
-            return mNetworkType;
-        }
-
         void setNetworkType(int networkType) {
             mNetworkType = networkType;
         }
 
-        @Override
-        int getNetworkSubtype() {
-            return mNetworkSubtype;
-        }
-
         void setNetworkSubtype(int networkSubtype) {
             mNetworkSubtype = networkSubtype;
         }
diff --git a/net/base/registry_controlled_domains/effective_tld_names.dat b/net/base/registry_controlled_domains/effective_tld_names.dat
index 111ee06..d36987a 100644
--- a/net/base/registry_controlled_domains/effective_tld_names.dat
+++ b/net/base/registry_controlled_domains/effective_tld_names.dat
@@ -6783,7 +6783,8 @@
 *.zw
 
 
-// List of new gTLDs imported from https://newgtlds.icann.org/newgtlds.csv on 2014-11-03T18:02:06Z
+// NEW TLDS SECTION FROM https://newgtlds.icann.org/newgtlds.csv >>> Updated on: 2014-12-12T06:02:07Z <<<
+
 
 // abb : 2014-10-24 ABB Ltd
 abb
@@ -6800,6 +6801,9 @@
 // accenture : 2014-08-15 Accenture plc
 accenture
 
+// accountant : 2014-11-20 dot Accountant Limited
+accountant
+
 // accountants : 2014-03-20 Knob Town, LLC
 accountants
 
@@ -6809,6 +6813,9 @@
 // actor : 2013-12-12 United TLD Holdco Ltd.
 actor
 
+// ads : 2014-12-04 Charleston Road Registry Inc.
+ads
+
 // adult : 2014-10-16 ICM Registry AD LLC
 adult
 
@@ -6839,34 +6846,46 @@
 // android : 2014-08-07 Charleston Road Registry Inc.
 android
 
+// apartments : 2014-12-11 June Maple, LLC
+apartments
+
 // aquarelle : 2014-07-24 Aquarelle.com
 aquarelle
 
+// aramco : 2014-11-20 Aramco Services Company
+aramco
+
 // archi : 2014-02-06 STARTING DOT LIMITED
 archi
 
 // army : 2014-03-06 United TLD Holdco Ltd.
 army
 
+// arte : 2014-12-11 Association Relative à la Télévision Européenne G.E.I.E.
+arte
+
 // associates : 2014-03-06 Baxter Hill, LLC
 associates
 
-// attorney : 2014-03-20 
+// attorney : 2014-03-20 undefined
 attorney
 
-// auction : 2014-03-20 
+// auction : 2014-03-20 undefined
 auction
 
 // audio : 2014-03-20 Uniregistry, Corp.
 audio
 
+// auto : 2014-11-13 Uniregistry, Corp.
+auto
+
 // autos : 2014-01-09 DERAutos, LLC
 autos
 
 // axa : 2013-12-19 AXA SA
 axa
 
-// band : 2014-06-12 
+// band : 2014-06-12 undefined
 band
 
 // bank : 2014-09-25 fTLD Registry Services LLC
@@ -6878,6 +6897,12 @@
 // barcelona : 2014-07-24 Municipi de Barcelona
 barcelona
 
+// barclaycard : 2014-11-20 Barclays Bank PLC
+barclaycard
+
+// barclays : 2014-11-20 Barclays Bank PLC
+barclays
+
 // bargains : 2013-11-14 Half Hallow, LLC
 bargains
 
@@ -6914,6 +6939,9 @@
 // bike : 2013-08-27 Grand Hollow, LLC
 bike
 
+// bingo : 2014-12-04 Sand Cedar, LLC
+bingo
+
 // bio : 2014-03-06 STARTING DOT LIMITED
 bio
 
@@ -6941,6 +6969,9 @@
 // bnpparibas : 2014-05-29 BNP Paribas
 bnpparibas
 
+// boats : 2014-12-04 DERBoats, LLC
+boats
+
 // bom : 2014-10-16 Núcleo de Informação e Coordenação do Ponto BR - NIC.br
 bom
 
@@ -6953,6 +6984,9 @@
 // boutique : 2013-11-14 Over Galley, LLC
 boutique
 
+// broker : 2014-12-11 IG Group Holdings PLC
+broker
+
 // brussels : 2014-02-06 DNS.be vzw
 brussels
 
@@ -7013,6 +7047,9 @@
 // careers : 2013-10-02 Wild Corner, LLC
 careers
 
+// cars : 2014-11-13 Uniregistry, Corp.
+cars
+
 // cartier : 2014-06-23 Richemont DNS Inc.
 cartier
 
@@ -7043,9 +7080,15 @@
 // cfa : 2014-08-28 CFA Institute
 cfa
 
+// cfd : 2014-12-11 IG Group Holdings PLC
+cfd
+
 // channel : 2014-05-08 Charleston Road Registry Inc.
 channel
 
+// chat : 2014-12-04 Sand Fields, LLC
+chat
+
 // cheap : 2013-11-14 Sand Cover, LLC
 cheap
 
@@ -7067,6 +7110,9 @@
 // city : 2014-05-29 Snow Sky, LLC
 city
 
+// cityeats : 2014-12-11 Lifestyle Domain Holdings, Inc.
+cityeats
+
 // claims : 2014-03-20 Black Corner, LLC
 claims
 
@@ -7118,7 +7164,7 @@
 // construction : 2013-09-16 Fox Dynamite, LLC
 construction
 
-// consulting : 2013-12-05 
+// consulting : 2013-12-05 undefined
 consulting
 
 // contractors : 2013-09-10 Magic Woods, LLC
@@ -7136,6 +7182,9 @@
 // country : 2013-12-19 Top Level Domain Holdings Limited
 country
 
+// courses : 2014-12-04 OPEN UNIVERSITIES AUSTRALIA PTY LTD
+courses
+
 // credit : 2014-03-20 Snow Shadow, LLC
 credit
 
@@ -7172,6 +7221,9 @@
 // dance : 2013-10-24 United TLD Holdco Ltd.
 dance
 
+// date : 2014-11-20 dot Date Limited
+date
+
 // dating : 2013-12-05 Pine Fest, LLC
 dating
 
@@ -7181,10 +7233,13 @@
 // day : 2014-01-30 Charleston Road Registry Inc.
 day
 
+// dclk : 2014-11-20 Charleston Road Registry Inc.
+dclk
+
 // deals : 2014-05-22 Sand Sunset, LLC
 deals
 
-// degree : 2014-03-06 
+// degree : 2014-03-06 undefined
 degree
 
 // delivery : 2014-09-11 Steel Station, LLC
@@ -7199,12 +7254,15 @@
 // dental : 2014-03-20 Tin Birch, LLC
 dental
 
-// dentist : 2014-03-20 
+// dentist : 2014-03-20 undefined
 dentist
 
 // desi : 2013-11-14 Desi Networks LLC
 desi
 
+// design : 2014-11-07 Top Level Design, LLC
+design
+
 // dev : 2014-10-16 Charleston Road Registry Inc.
 dev
 
@@ -7232,6 +7290,9 @@
 // docs : 2014-10-16 Charleston Road Registry Inc.
 docs
 
+// dog : 2014-12-04 Koko Mill, LLC
+dog
+
 // doha : 2014-09-18 Communications Regulatory Authority (CRA)
 doha
 
@@ -7241,12 +7302,18 @@
 // doosan : 2014-04-03 Doosan Corporation
 doosan
 
+// download : 2014-11-20 dot Support Limited
+download
+
 // durban : 2014-03-24 ZA Central Registry NPC trading as ZA Central Registry
 durban
 
 // dvag : 2014-06-23 Deutsche Vermögensberatung Aktiengesellschaft DVAG
 dvag
 
+// earth : 2014-12-04 Interlink Co., Ltd.
+earth
+
 // eat : 2014-01-23 Charleston Road Registry Inc.
 eat
 
@@ -7271,6 +7338,9 @@
 // enterprises : 2013-09-20 Snow Oaks, LLC
 enterprises
 
+// epson : 2014-12-04 Seiko Epson Corporation
+epson
+
 // equipment : 2013-08-27 Corn Station, LLC
 equipment
 
@@ -7307,9 +7377,18 @@
 // fail : 2014-03-06 Atomic Pipe, LLC
 fail
 
-// fan : 2014-03-06 
+// fairwinds : 2014-11-13 FairWinds Partners, LLC
+fairwinds
+
+// faith : 2014-11-20 dot Faith Limited
+faith
+
+// fan : 2014-03-06 undefined
 fan
 
+// fans : 2014-11-07 Asiamix Digital Limited
+fans
+
 // farm : 2013-11-07 Just Maple, LLC
 farm
 
@@ -7337,6 +7416,9 @@
 // fishing : 2013-11-21 Top Level Domain Holdings Limited
 fishing
 
+// fit : 2014-11-07 Top Level Domain Holdings Limited
+fit
+
 // fitness : 2014-03-06 Brice Orchard, LLC
 fitness
 
@@ -7358,7 +7440,13 @@
 // foo : 2014-01-23 Charleston Road Registry Inc.
 foo
 
-// forsale : 2014-05-22 
+// ford : 2014-11-13 Ford Motor Company
+ford
+
+// forex : 2014-12-11 IG Group Holdings PLC
+forex
+
+// forsale : 2014-05-22 undefined
 forsale
 
 // foundation : 2013-12-05 John Dale, LLC
@@ -7376,7 +7464,7 @@
 // furniture : 2014-03-20 Lone Fields, LLC
 furniture
 
-// futbol : 2013-09-20 
+// futbol : 2013-09-20 undefined
 futbol
 
 // gal : 2013-11-07 Asociación puntoGAL
@@ -7394,6 +7482,9 @@
 // gdn : 2014-07-31 Joint Stock Company \
 gdn
 
+// gea : 2014-12-04 GEA Group Aktiengesellschaft
+gea
+
 // gent : 2014-01-23 COMBELL GROUP NV/SA
 gent
 
@@ -7409,6 +7500,9 @@
 // gives : 2014-03-06 United TLD Holdco Ltd.
 gives
 
+// giving : 2014-11-13 Giving Limited
+giving
+
 // glass : 2013-11-07 Black Cover, LLC
 glass
 
@@ -7430,6 +7524,12 @@
 // gmx : 2014-04-24 1&1 Mail & Media GmbH
 gmx
 
+// goldpoint : 2014-11-20 YODOBASHI CAMERA CO.,LTD.
+goldpoint
+
+// goog : 2014-11-20 Charleston Road Registry Inc.
+goog
+
 // google : 2014-07-24 Charleston Road Registry Inc.
 google
 
@@ -7451,6 +7551,9 @@
 // group : 2014-08-15 Romeo Town, LLC
 group
 
+// gucci : 2014-11-13 Guccio Gucci S.p.a.
+gucci
+
 // guge : 2014-08-28 Charleston Road Registry Inc.
 guge
 
@@ -7466,7 +7569,10 @@
 // hamburg : 2014-02-20 Hamburg Top-Level-Domain GmbH
 hamburg
 
-// haus : 2013-12-05 
+// hangout : 2014-11-13 Charleston Road Registry Inc.
+hangout
+
+// haus : 2013-12-05 undefined
 haus
 
 // healthcare : 2014-06-12 Silver Glen, LLC
@@ -7577,12 +7683,21 @@
 // iwc : 2014-06-23 Richemont DNS Inc.
 iwc
 
+// jaguar : 2014-11-13 Jaguar Land Rover Ltd
+jaguar
+
 // java : 2014-06-19 Oracle Corporation
 java
 
+// jcb : 2014-11-20 JCB Co., Ltd.
+jcb
+
 // jetzt : 2014-01-09 New TLD Company AB
 jetzt
 
+// jlc : 2014-12-04 Richemont DNS Inc.
+jlc
+
 // joburg : 2014-03-24 ZA Central Registry NPC trading as ZA Central Registry
 joburg
 
@@ -7598,9 +7713,15 @@
 // kddi : 2014-09-12 KDDI CORPORATION
 kddi
 
+// kfh : 2014-12-04 Kuwait Finance House
+kfh
+
 // kim : 2013-09-23 Afilias Limited
 kim
 
+// kinder : 2014-11-07 Ferrero Trading Lux S.A.
+kinder
+
 // kitchen : 2013-09-20 Just Goodbye, LLC
 kitchen
 
@@ -7616,19 +7737,25 @@
 // kred : 2013-12-19 KredTLD Pty Ltd
 kred
 
+// kyoto : 2014-11-07 Academic Institution: Kyoto Jyoho Gakuen
+kyoto
+
 // lacaixa : 2014-01-09 CAIXA D'ESTALVIS I PENSIONS DE BARCELONA
 lacaixa
 
 // land : 2013-09-10 Pine Moon, LLC
 land
 
+// landrover : 2014-11-13 Jaguar Land Rover Ltd
+landrover
+
 // lat : 2014-10-16 ECOM-LAC Federaciòn de Latinoamèrica y el Caribe para Internet y el Comercio Electrònico
 lat
 
 // latrobe : 2014-06-16 La Trobe University
 latrobe
 
-// lawyer : 2014-03-20 
+// lawyer : 2014-03-20 undefined
 lawyer
 
 // lds : 2014-03-20 IRI Domain Management, LLC (\
@@ -7655,6 +7782,9 @@
 // life : 2014-02-06 Trixy Oaks, LLC
 life
 
+// lifestyle : 2014-12-11 Lifestyle Domain Holdings, Inc.
+lifestyle
+
 // lighting : 2013-08-27 John McCook, LLC
 lighting
 
@@ -7664,15 +7794,30 @@
 // limo : 2013-10-17 Hidden Frostbite, LLC
 limo
 
+// lincoln : 2014-11-13 Ford Motor Company
+lincoln
+
+// linde : 2014-12-04 Linde Aktiengesellschaft
+linde
+
 // link : 2013-11-14 Uniregistry, Corp.
 link
 
+// live : 2014-12-04 Half Woods, LLC
+live
+
+// loan : 2014-11-20 dot Loan Limited
+loan
+
 // loans : 2014-03-20 June Woods, LLC
 loans
 
 // london : 2013-11-14 Dot London Domains Limited
 london
 
+// lotte : 2014-11-07 Lotte Holdings Co., Ltd.
+lotte
+
 // lotto : 2014-04-10 Afilias Limited
 lotto
 
@@ -7682,6 +7827,9 @@
 // ltda : 2014-04-17 DOMAIN ROBOT SERVICOS DE HOSPEDAGEM NA INTERNET LTDA
 ltda
 
+// lupin : 2014-11-07 LUPIN LIMITED
+lupin
+
 // luxe : 2014-01-09 Top Level Domain Holdings Limited
 luxe
 
@@ -7697,18 +7845,24 @@
 // maison : 2013-12-05 Victor Frostbite, LLC
 maison
 
+// man : 2014-12-04 MAN SE
+man
+
 // management : 2013-11-07 John Goodbye, LLC
 management
 
 // mango : 2013-10-24 PUNTO FA S.L.
 mango
 
-// market : 2014-03-06 
+// market : 2014-03-06 undefined
 market
 
 // marketing : 2013-11-07 Fern Pass, LLC
 marketing
 
+// markets : 2014-12-11 IG Group Holdings PLC
+markets
+
 // marriott : 2014-10-09 Marriott Worldwide Corporation
 marriott
 
@@ -7730,12 +7884,18 @@
 // menu : 2013-09-11 Wedding TLD2, LLC
 menu
 
+// meo : 2014-11-07 PT Comunicacoes S.A.
+meo
+
 // miami : 2013-12-19 Top Level Domain Holdings Limited
 miami
 
 // mini : 2014-01-09 Bayerische Motoren Werke Aktiengesellschaft
 mini
 
+// mma : 2014-11-07 MMA IARD
+mma
+
 // moda : 2013-11-07 United TLD Holdco Ltd.
 moda
 
@@ -7754,7 +7914,7 @@
 // mormon : 2013-12-05 IRI Domain Management, LLC (\
 mormon
 
-// mortgage : 2014-03-20 
+// mortgage : 2014-03-20 undefined
 mortgage
 
 // moscow : 2013-12-19 Foundation for Assistance for Internet Technologies and Infrastructure Development (FAITID)
@@ -7769,6 +7929,15 @@
 // movistar : 2014-10-16 Telefónica S.A.
 movistar
 
+// mtn : 2014-12-04 MTN Dubai Limited
+mtn
+
+// mtpc : 2014-11-20 Mitsubishi Tanabe Pharma Corporation
+mtpc
+
+// nadex : 2014-12-11 IG Group Holdings PLC
+nadex
+
 // nagoya : 2013-10-24 GMO Registry, Inc.
 nagoya
 
@@ -7796,12 +7965,18 @@
 // nhk : 2014-02-13 Japan Broadcasting Corporation (NHK)
 nhk
 
+// nico : 2014-12-04 DWANGO Co., Ltd.
+nico
+
 // ninja : 2013-11-07 United TLD Holdco Ltd.
 ninja
 
 // nissan : 2014-03-27 NISSAN MOTOR CO., LTD.
 nissan
 
+// norton : 2014-12-04 Symantec Corporation
+norton
+
 // nowruz : 2014-09-04 Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti.
 nowruz
 
@@ -7823,6 +7998,9 @@
 // okinawa : 2013-12-05 BusinessRalliart Inc.
 okinawa
 
+// one : 2014-11-07 One.com A/S
+one
+
 // ong : 2014-03-06 Public Interest Registry
 ong
 
@@ -7847,6 +8025,12 @@
 // ovh : 2014-01-16 OVH SAS
 ovh
 
+// page : 2014-12-04 Charleston Road Registry Inc.
+page
+
+// panerai : 2014-11-07 Richemont DNS Inc.
+panerai
+
 // paris : 2014-01-30 City of Paris
 paris
 
@@ -7865,6 +8049,9 @@
 // pharmacy : 2014-06-19 National Association of Boards of Pharmacy
 pharmacy
 
+// philips : 2014-11-07 Koninklijke Philips N.V.
+philips
+
 // photo : 2013-11-14 Uniregistry, Corp.
 photo
 
@@ -7940,6 +8127,9 @@
 // quebec : 2013-12-19 PointQuébec Inc
 quebec
 
+// racing : 2014-12-04 Premier Registry Limited
+racing
+
 // realtor : 2014-05-29 Real Estate Domains LLC
 realtor
 
@@ -7967,6 +8157,9 @@
 // ren : 2013-12-12 Beijing Qianxiang Wangjing Technology Development Co., Ltd.
 ren
 
+// rent : 2014-12-04 DERRent, LLC
+rent
+
 // rentals : 2013-12-05 Big Hollow,LLC
 rentals
 
@@ -7985,19 +8178,25 @@
 // restaurant : 2014-07-03 Snow Avenue, LLC
 restaurant
 
-// reviews : 2013-09-13 
+// review : 2014-11-20 dot Review Limited
+review
+
+// reviews : 2013-09-13 undefined
 reviews
 
 // rich : 2013-11-21 I-Registry Ltd.
 rich
 
+// ricoh : 2014-11-20 Ricoh Company, Ltd.
+ricoh
+
 // rio : 2014-02-27 Empresa Municipal de Informática SA - IPLANRIO
 rio
 
 // rip : 2014-07-10 United TLD Holdco Ltd.
 rip
 
-// rocks : 2013-11-14 
+// rocks : 2013-11-14 undefined
 rocks
 
 // rodeo : 2013-12-19 Top Level Domain Holdings Limited
@@ -8015,24 +8214,39 @@
 // saarland : 2013-12-12 dotSaarland GmbH
 saarland
 
-// sale : 2014-10-16 Half Bloom, LLC
+// sale : 2014-10-16 undefined
 sale
 
+// salon : 2014-12-11 Outer Orchard, LLC
+salon
+
 // samsung : 2014-04-03 SAMSUNG SDS CO., LTD
 samsung
 
+// sandvik : 2014-11-13 Sandvik AB
+sandvik
+
+// sandvikcoromant : 2014-11-07 Sandvik AB
+sandvikcoromant
+
 // sanofi : 2014-10-09 Sanofi
 sanofi
 
 // sap : 2014-03-27 SAP AG
 sap
 
+// sapo : 2014-11-07 PT Comunicacoes S.A.
+sapo
+
 // sarl : 2014-07-03 Delta Orchard, LLC
 sarl
 
 // saxo : 2014-10-31 Saxo Bank A/S
 saxo
 
+// sbs : 2014-11-07 SPECIAL BROADCASTING SERVICE CORPORATION
+sbs
+
 // sca : 2014-03-13 SVENSKA CELLULOSA AKTIEBOLAGET SCA (publ)
 sca
 
@@ -8063,6 +8277,9 @@
 // seat : 2014-05-22 SEAT, S.A. (Sociedad Unipersonal)
 seat
 
+// seek : 2014-12-04 Seek Limited
+seek
+
 // sener : 2014-10-24 Sener Ingeniería y Sistemas, S.A.
 sener
 
@@ -8072,6 +8289,9 @@
 // sew : 2014-07-17 SEW-EURODRIVE GmbH & Co KG
 sew
 
+// sex : 2014-11-13 ICM Registry SX LLC
+sex
+
 // sexy : 2013-09-11 Uniregistry, Corp.
 sexy
 
@@ -8099,7 +8319,7 @@
 // social : 2013-11-07 United TLD Holdco Ltd.
 social
 
-// software : 2014-03-20 
+// software : 2014-03-20 undefined
 software
 
 // sohu : 2013-12-19 Sohu.com Limited
@@ -8120,12 +8340,27 @@
 // spiegel : 2014-02-05 SPIEGEL-Verlag Rudolf Augstein GmbH & Co. KG
 spiegel
 
+// spreadbetting : 2014-12-11 IG Group Holdings PLC
+spreadbetting
+
+// stada : 2014-11-13 STADA Arzneimittel AG
+stada
+
+// statoil : 2014-12-04 Statoil ASA
+statoil
+
 // stc : 2014-10-09 Saudi Telecom Company
 stc
 
 // stcgroup : 2014-10-09 Saudi Telecom Company
 stcgroup
 
+// study : 2014-12-11 OPEN UNIVERSITIES AUSTRALIA PTY LTD
+study
+
+// style : 2014-12-04 Binky Moon, LLC
+style
+
 // supplies : 2013-12-19 Atomic Fields, LLC
 supplies
 
@@ -8150,9 +8385,15 @@
 // sydney : 2014-09-18 State of New South Wales, Department of Premier and Cabinet
 sydney
 
+// symantec : 2014-12-04 Symantec Corporation
+symantec
+
 // systems : 2013-11-07 Dash Cypress, LLC
 systems
 
+// tab : 2014-12-04 Tabcorp Holdings Limited
+tab
+
 // taipei : 2014-07-10 Taipei City Government
 taipei
 
@@ -8177,12 +8418,18 @@
 // temasek : 2014-08-07 Temasek Holdings (Private) Limited
 temasek
 
+// tennis : 2014-12-04 Cotton Bloom, LLC
+tennis
+
 // tienda : 2013-11-14 Victor Manor, LLC
 tienda
 
 // tips : 2013-09-20 Corn Willow, LLC
 tips
 
+// tires : 2014-11-07 Dog Edge, LLC
+tires
+
 // tirol : 2014-04-24 punkt Tirol GmbH
 tirol
 
@@ -8210,15 +8457,21 @@
 // trade : 2014-01-23 Elite Registry Limited
 trade
 
+// trading : 2014-12-11 IG Group Holdings PLC
+trading
+
 // training : 2013-11-07 Wild Willow, LLC
 training
 
-// trust : 2014-10-16 
+// trust : 2014-10-16 undefined
 trust
 
 // tui : 2014-07-03 TUI AG
 tui
 
+// ubs : 2014-12-11 UBS AG
+ubs
+
 // university : 2014-03-06 Little Station, LLC
 university
 
@@ -8231,6 +8484,9 @@
 // vacations : 2013-12-05 Atomic Tigers, LLC
 vacations
 
+// vana : 2014-12-11 Lifestyle Domain Holdings, Inc.
+vana
+
 // vegas : 2014-01-16 Dot Vegas, Inc.
 vegas
 
@@ -8240,13 +8496,13 @@
 // versicherung : 2014-03-20 dotversicherung-registry GmbH
 versicherung
 
-// vet : 2014-03-06 
+// vet : 2014-03-06 undefined
 vet
 
 // viajes : 2013-10-17 Black Madison, LLC
 viajes
 
-// video : 2014-10-16 Lone Tigers, LLC
+// video : 2014-10-16 undefined
 video
 
 // villas : 2013-12-05 New Sky, LLC
@@ -8264,6 +8520,9 @@
 // vistaprint : 2014-09-18 Vistaprint Limited
 vistaprint
 
+// viva : 2014-11-07 Saudi Telecom Company
+viva
+
 // vlaanderen : 2014-02-06 DNS.be vzw
 vlaanderen
 
@@ -8285,6 +8544,9 @@
 // wales : 2014-05-08 Nominet UK
 wales
 
+// walter : 2014-11-13 Sandvik AB
+walter
+
 // wang : 2013-10-24 Zodiac Leo Limited
 wang
 
@@ -8315,6 +8577,9 @@
 // williamhill : 2014-03-13 William Hill Organization Limited
 williamhill
 
+// win : 2014-11-20 First Registry Limited
+win
+
 // wme : 2014-02-13 William Morris Endeavor Entertainment, LLC
 wme
 
@@ -8336,6 +8601,9 @@
 // xerox : 2014-10-24 Xerox DNHC LLC
 xerox
 
+// xin : 2014-12-11 Elegant Leader Limited
+xin
+
 // xn--1qqw23a : 2014-01-09 Guangzhou YU Wei Information Technology Co., Ltd.
 佛山
 
@@ -8420,12 +8688,21 @@
 // xn--i1b6b1a6a2e : 2013-11-14 Public Interest Registry
 संगठन
 
+// xn--imr513n : 2014-12-11 HU YI GLOBAL INFORMATION RESOURCES (HOLDING) COMPANY. HONGKONG LIMITED
+餐厅
+
 // xn--io0a7i : 2013-11-14 Computer Network Information Center of Chinese Academy of Sciences (China Internet Network Information Center)
 网络
 
+// xn--kcrx77d1x4a : 2014-11-07 Koninklijke Philips N.V.
+飞利浦
+
 // xn--kput3i : 2014-02-13 Beijing RITT-Net Technology Development Co., Ltd
 手机
 
+// xn--mgba3a3ejt : 2014-11-20 Aramco Services Company
+ارامكو
+
 // xn--mgbab2bd : 2013-10-31 CORE Association
 بازار
 
@@ -8438,12 +8715,18 @@
 // xn--ngbc5azd : 2013-07-13 International Domain Registry Pty. Ltd.
 شبكة
 
+// xn--ngbe9e0a : 2014-12-04 Kuwait Finance House
+بيتك
+
 // xn--nqv7f : 2013-11-14 Public Interest Registry
 机构
 
 // xn--nqv7fs00ema : 2013-11-14 Public Interest Registry
 组织机构
 
+// xn--nyqy26a : 2014-11-07 Stable Tone Limited
+健康
+
 // xn--p1acf : 2013-12-12 Rusnames Limited
 рус
 
@@ -8489,6 +8772,9 @@
 // yandex : 2014-04-10 YANDEX, LLC
 yandex
 
+// yodobashi : 2014-11-20 YODOBASHI CAMERA CO.,LTD.
+yodobashi
+
 // yoga : 2014-05-29 Top Level Domain Holdings Limited
 yoga
 
@@ -8498,12 +8784,18 @@
 // youtube : 2014-05-01 Charleston Road Registry Inc.
 youtube
 
+// zara : 2014-11-07 Industria de Diseño Textil, S.A. (INDITEX, S.A.)
+zara
+
 // zip : 2014-05-08 Charleston Road Registry Inc.
 zip
 
 // zone : 2013-11-14 Outer Falls, LLC
 zone
 
+// zuerich : 2014-11-07 Kanton Zürich (Canton of Zurich)
+zuerich
+
 // ===END ICANN DOMAINS===
 // ===BEGIN PRIVATE DOMAINS===
 
@@ -9063,6 +9355,13 @@
 med.pl
 sopot.pl
 
+// UDR Limited : http://www.udr.hk.com
+// Submitted by registry <hostmaster@udr.hk.com> 2014-11-07
+hk.com
+hk.org
+ltd.hk
+inc.hk
+
 // Yola : https://www.yola.com/
 // Submitted by Stefano Rivera <stefano@yola.com> 2014-07-09
 yolasite.com
diff --git a/net/base/registry_controlled_domains/effective_tld_names.gperf b/net/base/registry_controlled_domains/effective_tld_names.gperf
index b3b6afd..8dbfd0e 100644
--- a/net/base/registry_controlled_domains/effective_tld_names.gperf
+++ b/net/base/registry_controlled_domains/effective_tld_names.gperf
@@ -78,6 +78,7 @@
 accenture, 0
 accident-investigation.aero, 0
 accident-prevention.aero, 0
+accountant, 0
 accountants, 0
 achi.nagano.jp, 0
 act.au, 0
@@ -88,6 +89,7 @@
 ad.jp, 0
 adachi.tokyo.jp, 0
 adm.br, 0
+ads, 0
 adult, 0
 adult.ht, 0
 adv.br, 0
@@ -242,6 +244,7 @@
 ap-southeast-1.compute.amazonaws.com, 4
 ap-southeast-2.compute.amazonaws.com, 4
 ap.it, 0
+apartments, 0
 appspot.com, 4
 aq, 0
 aq.it, 0
@@ -255,6 +258,7 @@
 arai.shizuoka.jp, 0
 arakawa.saitama.jp, 0
 arakawa.tokyo.jp, 0
+aramco, 0
 arao.kumamoto.jp, 0
 arboretum.museum, 0
 archaeological.museum, 0
@@ -284,6 +288,7 @@
 artanddesign.museum, 0
 artcenter.museum, 0
 artdeco.museum, 0
+arte, 0
 arteducation.museum, 0
 artgallery.museum, 0
 arts.co, 0
@@ -372,6 +377,7 @@
 australia.museum, 0
 austrheim.no, 0
 author.aero, 0
+auto, 0
 auto.pl, 0
 automotive.museum, 0
 autos, 0
@@ -429,6 +435,8 @@
 bar.pro, 0
 barcelona, 0
 barcelona.museum, 0
+barclaycard, 0
+barclays, 0
 bardu.no, 0
 bargains, 0
 bari.it, 0
@@ -508,6 +516,7 @@
 bilbao.museum, 0
 bill.museum, 0
 bindal.no, 0
+bingo, 0
 bio, 0
 bio.br, 0
 bir.ru, 0
@@ -603,6 +612,7 @@
 bo.it, 0
 bo.nordland.no, 0
 bo.telemark.no, 0
+boats, 0
 bodo.no, 0
 bokn.no, 0
 boldlygoingnowhere.org, 4
@@ -636,6 +646,7 @@
 britishcolumbia.museum, 0
 broadcast.museum, 0
 broke-it.net, 4
+broker, 0
 broker.aero, 0
 bronnoy.no, 0
 bronnoysund.no, 0
@@ -723,6 +734,7 @@
 carrara-massa.it, 0
 carraramassa.it, 0
 carrier.museum, 0
+cars, 0
 cartier, 0
 cartoonart.museum, 0
 casa, 0
@@ -812,6 +824,7 @@
 cesenaforli.it, 0
 cf, 0
 cfa, 0
+cfd, 0
 cg, 0
 ch, 0
 ch.it, 0
@@ -819,6 +832,7 @@
 championship.aero, 0
 channel, 0
 charter.aero, 0
+chat, 0
 chattanooga.museum, 0
 cheap, 0
 chel.ru, 0
@@ -898,6 +912,7 @@
 city.sapporo.jp, 1
 city.sendai.jp, 1
 city.yokohama.jp, 1
+cityeats, 0
 civilaviation.aero, 0
 civilisation.museum, 0
 civilization.museum, 0
@@ -1176,6 +1191,7 @@
 country, 0
 countryestate.museum, 0
 county.museum, 0
+courses, 0
 cpa.pro, 0
 cq.cn, 0
 cr, 0
@@ -1233,6 +1249,7 @@
 dallas.museum, 0
 dance, 0
 database.museum, 0
+date, 0
 date.fukushima.jp, 0
 date.hokkaido.jp, 0
 dating, 0
@@ -1242,6 +1259,7 @@
 day, 0
 dazaifu.fukuoka.jp, 0
 dc.us, 0
+dclk, 0
 ddr.museum, 0
 de, 0
 de.com, 4
@@ -1265,6 +1283,7 @@
 depot.museum, 0
 desa.id, 0
 desi, 0
+design, 0
 design.aero, 0
 design.museum, 0
 detroit.museum, 0
@@ -1301,6 +1320,7 @@
 does-it.net, 4
 doesntexist.com, 4
 doesntexist.org, 4
+dog, 0
 doha, 0
 dolls.museum, 0
 domains, 0
@@ -1316,6 +1336,7 @@
 doosan, 0
 doshi.yamanashi.jp, 0
 dovre.no, 0
+download, 0
 dp.ua, 0
 dr.na, 0
 dr.tr, 0
@@ -1359,6 +1380,7 @@
 e.se, 0
 e12.ve, 0
 e164.arpa, 0
+earth, 0
 eastafrica.museum, 0
 eastcoast.museum, 0
 eat, 0
@@ -1549,6 +1571,7 @@
 environment.museum, 0
 environmentalconservation.museum, 0
 epilepsy.museum, 0
+epson, 0
 equipment, 0
 equipment.aero, 0
 er, 2
@@ -1600,9 +1623,12 @@
 f.bg, 0
 f.se, 0
 fail, 0
+fairwinds, 0
+faith, 0
 fam.pk, 0
 family.museum, 0
 fan, 0
+fans, 0
 far.br, 0
 fareast.ru, 0
 farm, 0
@@ -1657,6 +1683,7 @@
 firmdale, 0
 fish, 0
 fishing, 0
+fit, 0
 fitjar.no, 0
 fitness, 0
 fj, 2
@@ -1699,7 +1726,9 @@
 for-some.biz, 4
 for-the.biz, 4
 force.museum, 0
+ford, 0
 forde.no, 0
+forex, 0
 forgot.her.name, 4
 forgot.his.name, 4
 forli-cesena.it, 0
@@ -1898,6 +1927,7 @@
 gdynia.pl, 4
 ge, 0
 ge.it, 0
+gea, 0
 geek.nz, 0
 geelvinck.museum, 0
 geisei.kochi.jp, 0
@@ -1934,6 +1964,7 @@
 github.io, 4
 githubusercontent.com, 4
 gives, 0
+giving, 0
 gjemnes.no, 0
 gjerdrum.no, 0
 gjerstad.no, 0
@@ -1991,8 +2022,10 @@
 gok.pk, 0
 gokase.miyazaki.jp, 0
 gol.no, 0
+goldpoint, 0
 gon.pk, 0
 gonohe.aomori.jp, 0
+goog, 0
 google, 0
 googleapis.com, 4
 googlecode.com, 4
@@ -2192,6 +2225,7 @@
 gu, 2
 gu.us, 0
 gub.uy, 0
+gucci, 0
 guernsey.museum, 0
 guge, 0
 guide, 0
@@ -2258,6 +2292,7 @@
 handa.aichi.jp, 0
 handson.museum, 0
 hanggliding.aero, 0
+hangout, 0
 hannan.osaka.jp, 0
 hanno.saitama.jp, 0
 hanyu.saitama.jp, 0
@@ -2398,6 +2433,8 @@
 hjelmeland.no, 0
 hk, 0
 hk.cn, 0
+hk.com, 4
+hk.org, 4
 hl.cn, 0
 hl.no, 0
 hm, 0
@@ -2566,6 +2603,7 @@
 inatsuki.fukuoka.jp, 0
 inawashiro.fukushima.jp, 0
 inazawa.aichi.jp, 0
+inc.hk, 4
 incheon.kr, 0
 ind.br, 0
 ind.gt, 0
@@ -2804,12 +2842,14 @@
 izumozaki.niigata.jp, 0
 izunokuni.shizuoka.jp, 0
 j.bg, 0
+jaguar, 0
 jamal.ru, 0
 jamison.museum, 0
 jan-mayen.no, 0
 jar.ru, 0
 java, 0
 jaworzno.pl, 0
+jcb, 0
 je, 0
 jefferson.museum, 0
 jeju.kr, 0
@@ -2827,6 +2867,7 @@
 jgora.pl, 0
 jinsekikogen.hiroshima.jp, 0
 jl.cn, 0
+jlc, 0
 jm, 2
 jo, 0
 joboji.iwate.jp, 0
@@ -3080,6 +3121,7 @@
 kepno.pl, 0
 kesennuma.miyagi.jp, 0
 ketrzyn.pl, 0
+kfh, 0
 kg, 0
 kg.kr, 0
 kh, 2
@@ -3110,6 +3152,7 @@
 kimitsu.chiba.jp, 0
 kimobetsu.hokkaido.jp, 0
 kin.okinawa.jp, 0
+kinder, 0
 kinko.kagoshima.jp, 0
 kinokawa.wakayama.jp, 0
 kira.aichi.jp, 0
@@ -3315,6 +3358,7 @@
 kyotamba.kyoto.jp, 0
 kyotanabe.kyoto.jp, 0
 kyotango.kyoto.jp, 0
+kyoto, 0
 kyoto.jp, 0
 kyowa.akita.jp, 0
 kyowa.hokkaido.jp, 0
@@ -3337,6 +3381,7 @@
 land, 0
 land-4-sale.us, 4
 landes.museum, 0
+landrover, 0
 langevag.no, 0
 lans.museum, 0
 lapy.pl, 0
@@ -3449,6 +3494,7 @@
 lier.no, 0
 lierne.no, 0
 life, 0
+lifestyle, 0
 lig.it, 0
 lighting, 0
 liguria.it, 0
@@ -3459,12 +3505,15 @@
 limanowa.pl, 0
 limited, 0
 limo, 0
+lincoln, 0
 lincoln.museum, 0
 lindas.no, 0
+linde, 0
 lindesnes.no, 0
 link, 0
 linz.museum, 0
 lipetsk.ru, 0
+live, 0
 living.museum, 0
 livinghistory.museum, 0
 livorno.it, 0
@@ -3472,6 +3521,7 @@
 ln.cn, 0
 lo.it, 0
 loabat.no, 0
+loan, 0
 loans, 0
 localhistory.museum, 0
 lodi.it, 0
@@ -3488,6 +3538,7 @@
 lorenskog.no, 0
 losangeles.museum, 0
 loten.no, 0
+lotte, 0
 lotto, 0
 louvre.museum, 0
 lowicz.pl, 0
@@ -3500,6 +3551,7 @@
 ltd, 0
 ltd.co.im, 0
 ltd.gi, 0
+ltd.hk, 4
 ltd.lk, 0
 ltd.uk, 0
 ltda, 0
@@ -3513,6 +3565,7 @@
 lukow.pl, 0
 lund.no, 0
 lunner.no, 0
+lupin, 0
 luroy.no, 0
 luster.no, 0
 lutsk.ua, 0
@@ -3554,6 +3607,7 @@
 malselv.no, 0
 malvik.no, 0
 mamurogawa.yamagata.jp, 0
+man, 0
 management, 0
 manchester.museum, 0
 mandal.no, 0
@@ -3577,6 +3631,7 @@
 market, 0
 marketing, 0
 marketplace.aero, 0
+markets, 0
 marnardal.no, 0
 marriott, 0
 marugame.kagawa.jp, 0
@@ -3661,6 +3716,7 @@
 memorial, 0
 memorial.museum, 0
 menu, 0
+meo, 0
 meraker.no, 0
 merseine.nu, 4
 mesaverde.museum, 0
@@ -3845,6 +3901,7 @@
 mk.ua, 0
 ml, 0
 mm, 2
+mma, 0
 mn, 0
 mn.it, 0
 mn.us, 0
@@ -3929,6 +3986,8 @@
 mt, 0
 mt.it, 0
 mt.us, 0
+mtn, 0
+mtpc, 0
 mu, 0
 muenchen.museum, 0
 muenster.museum, 0
@@ -3980,6 +4039,7 @@
 naamesjevuemie.no, 0
 nabari.mie.jp, 0
 nachikatsuura.wakayama.jp, 0
+nadex, 0
 nagahama.shiga.jp, 0
 nagai.yamagata.jp, 0
 nagano.jp, 0
@@ -4274,6 +4334,7 @@
 nic.tj, 0
 nichinan.miyazaki.jp, 0
 nichinan.tottori.jp, 0
+nico, 0
 nid.io, 4
 niepce.museum, 0
 nieruchomosci.pl, 0
@@ -4363,6 +4424,7 @@
 norfolk.museum, 0
 norilsk.ru, 0
 north.museum, 0
+norton, 0
 nose.osaka.jp, 0
 nosegawa.nara.jp, 0
 noshiro.akita.jp, 0
@@ -4526,6 +4588,7 @@
 on-the-web.tv, 4
 on.ca, 0
 onagawa.miyagi.jp, 0
+one, 0
 ong, 0
 onga.fukuoka.jp, 0
 onjuku.chiba.jp, 0
@@ -4785,12 +4848,14 @@
 paderborn.museum, 0
 padova.it, 0
 padua.it, 0
+page, 0
 palace.museum, 0
 palana.ru, 0
 paleo.museum, 0
 palermo.it, 0
 palmsprings.museum, 0
 panama.museum, 0
+panerai, 0
 parachuting.aero, 0
 paragliding.aero, 0
 paris, 0
@@ -4837,6 +4902,7 @@
 philadelphia.museum, 0
 philadelphiaarea.museum, 0
 philately.museum, 0
+philips, 0
 phoenix.museum, 0
 photo, 0
 photography, 0
@@ -4998,6 +5064,7 @@
 r.bg, 0
 r.se, 0
 ra.it, 0
+racing, 0
 rade.no, 0
 radio.br, 0
 radom.pl, 0
@@ -5050,6 +5117,7 @@
 rendalen.no, 0
 rennebu.no, 0
 rennesoy.no, 0
+rent, 0
 rentals, 0
 rep.kp, 0
 repair, 0
@@ -5063,12 +5131,14 @@
 resistance.museum, 0
 rest, 0
 restaurant, 0
+review, 0
 reviews, 0
 rg.it, 0
 rhcloud.com, 4
 ri.it, 0
 ri.us, 0
 rich, 0
+ricoh, 0
 rieti.it, 0
 rifu.miyagi.jp, 0
 riik.ee, 0
@@ -5208,6 +5278,7 @@
 sale, 0
 salem.museum, 0
 salerno.it, 0
+salon, 0
 saltdal.no, 0
 salvadordali.museum, 0
 salzburg.museum, 0
@@ -5226,6 +5297,8 @@
 sandnes.no, 0
 sandnessjoen.no, 0
 sandoy.no, 0
+sandvik, 0
+sandvikcoromant, 0
 sanfrancisco.museum, 0
 sango.nara.jp, 0
 sanjo.niigata.jp, 0
@@ -5240,6 +5313,7 @@
 sanuki.kagawa.jp, 0
 saotome.st, 0
 sap, 0
+sapo, 0
 sapporo.jp, 2
 sar.it, 0
 saratov.ru, 0
@@ -5269,6 +5343,7 @@
 sayo.hyogo.jp, 0
 sb, 0
 sb.ua, 0
+sbs, 0
 sc, 0
 sc.cn, 0
 sc.kr, 0
@@ -5325,6 +5400,7 @@
 seat, 0
 sebastopol.ua, 0
 sec.ps, 0
+seek, 0
 seihi.nagasaki.jp, 0
 seika.kyoto.jp, 0
 seiro.niigata.jp, 0
@@ -5372,6 +5448,7 @@
 settsu.osaka.jp, 0
 sevastopol.ua, 0
 sew, 0
+sex, 0
 sex.hu, 0
 sex.pl, 0
 sexy, 0
@@ -5593,6 +5670,7 @@
 spiegel, 0
 spjelkavik.no, 0
 sport.hu, 0
+spreadbetting, 0
 spy.museum, 0
 spydeberg.no, 0
 square.museum, 0
@@ -5603,6 +5681,7 @@
 ss.it, 0
 st, 0
 st.no, 0
+stada, 0
 stadt.museum, 0
 stalbans.museum, 0
 stalowa-wola.pl, 0
@@ -5616,6 +5695,7 @@
 stateofdelaware.museum, 0
 stathelle.no, 0
 station.museum, 0
+statoil, 0
 stavanger.no, 0
 stavern.no, 0
 stavropol.ru, 0
@@ -5644,10 +5724,12 @@
 stranda.no, 0
 stryn.no, 0
 student.aero, 0
+study, 0
 stuff-4-sale.org, 4
 stuff-4-sale.us, 4
 stuttgart.museum, 0
 stv.ru, 0
+style, 0
 su, 0
 sue.fukuoka.jp, 0
 suedtirol.it, 0
@@ -5703,6 +5785,7 @@
 sydney, 0
 sydney.museum, 0
 sykkylven.no, 0
+symantec, 0
 systems, 0
 syzran.ru, 0
 sz, 0
@@ -5714,6 +5797,7 @@
 t.se, 0
 ta.it, 0
 taa.it, 0
+tab, 0
 tabayama.yamanashi.jp, 0
 tabuse.yamaguchi.jp, 0
 tachiarai.fukuoka.jp, 0
@@ -5837,6 +5921,7 @@
 tendo.yamagata.jp, 0
 tenei.fukushima.jp, 0
 tenkawa.nara.jp, 0
+tennis, 0
 tenri.nara.jp, 0
 teo.br, 0
 teramo.it, 0
@@ -5860,6 +5945,7 @@
 tingvoll.no, 0
 tinn.no, 0
 tips, 0
+tires, 0
 tirol, 0
 tj, 0
 tj.cn, 0
@@ -5989,6 +6075,7 @@
 tra.kp, 0
 trade, 0
 trader.aero, 0
+trading, 0
 trading.aero, 0
 traeumtgerade.de, 4
 trainer.aero, 0
@@ -6110,6 +6197,7 @@
 u.se, 0
 ua, 0
 ube.yamaguchi.jp, 0
+ubs, 0
 uchihara.ibaraki.jp, 0
 uchiko.ehime.jp, 0
 uchinada.ishikawa.jp, 0
@@ -6240,6 +6328,7 @@
 vallee-aoste.it, 0
 valleeaoste.it, 0
 valley.museum, 0
+vana, 0
 vang.no, 0
 vantaa.museum, 0
 vanylven.no, 0
@@ -6313,6 +6402,7 @@
 vista, 0
 vistaprint, 0
 viterbo.it, 0
+viva, 0
 vlaanderen, 0
 vlaanderen.museum, 0
 vladikavkaz.ru, 0
@@ -6363,6 +6453,7 @@
 wales, 0
 wales.museum, 0
 wallonie.museum, 0
+walter, 0
 wang, 0
 wanouchi.gifu.jp, 0
 war.museum, 0
@@ -6409,6 +6500,7 @@
 wildlife.museum, 0
 williamhill, 0
 williamsburg.museum, 0
+win, 0
 windmill.museum, 0
 withgoogle.com, 4
 wlocl.pl, 0
@@ -6437,6 +6529,7 @@
 x.bg, 0
 x.se, 0
 xerox, 0
+xin, 0
 xj.cn, 0
 xn--0trq7p7nn.jp, 0
 xn--1ctwo.jp, 0
@@ -6570,6 +6663,7 @@
 xn--hyanger-q1a.no, 0
 xn--hylandet-54a.no, 0
 xn--i1b6b1a6a2e, 0
+xn--imr513n, 0
 xn--indery-fya.no, 0
 xn--io0a7i, 0
 xn--io0a7i.cn, 0
@@ -6581,6 +6675,7 @@
 xn--k7yn95e.jp, 0
 xn--karmy-yua.no, 0
 xn--kbrq7o.jp, 0
+xn--kcrx77d1x4a, 0
 xn--kfjord-iua.no, 0
 xn--klbu-woa.no, 0
 xn--klt787d.jp, 0
@@ -6623,6 +6718,7 @@
 xn--merker-kua.no, 0
 xn--mgb2ddes, 0
 xn--mgb9awbf, 0
+xn--mgba3a3ejt, 0
 xn--mgba3a4f16a, 0
 xn--mgba3a4f16a.ir, 0
 xn--mgba3a4fra, 0
@@ -6655,6 +6751,7 @@
 xn--mxtq1m, 0
 xn--mxtq1m.hk, 0
 xn--ngbc5azd, 0
+xn--ngbe9e0a, 0
 xn--nit225k.jp, 0
 xn--nmesjevuemie-tcba.no, 0
 xn--nnx388a, 0
@@ -6666,6 +6763,7 @@
 xn--ntsq17g.jp, 0
 xn--nttery-byae.no, 0
 xn--nvuotna-hwa.no, 0
+xn--nyqy26a, 0
 xn--o1ac.xn--90a3ac, 0
 xn--o1ach.xn--90a3ac, 0
 xn--o3cw4h, 0
@@ -6858,6 +6956,7 @@
 yekaterinburg.ru, 0
 yk.ca, 0
 yn.cn, 0
+yodobashi, 0
 yoga, 0
 yoichi.hokkaido.jp, 0
 yoita.niigata.jp, 0
@@ -6925,6 +7024,7 @@
 zao.miyagi.jp, 0
 zaporizhzhe.ua, 0
 zaporizhzhia.ua, 0
+zara, 0
 zarow.pl, 0
 zentsuji.kagawa.jp, 0
 zgora.pl, 0
@@ -6941,6 +7041,7 @@
 zoology.museum, 0
 zp.ua, 0
 zt.ua, 0
+zuerich, 0
 zushi.kanagawa.jp, 0
 zw, 2
 %%
diff --git a/net/http/transport_security_state_static.certs b/net/http/transport_security_state_static.certs
index 525d05b..33eb510 100644
--- a/net/http/transport_security_state_static.certs
+++ b/net/http/transport_security_state_static.certs
@@ -1100,52 +1100,6 @@
 +MPpZqmyIJ3E+LgDYqeF0RhjWw==
 -----END CERTIFICATE-----
 
-CryptoCat1
------BEGIN CERTIFICATE-----
-MIIHtTCCBp2gAwIBAgIQBQJvUvveB1Ep7CH9FkuAMjANBgkqhkiG9w0BAQUFADBm
-MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
-d3cuZGlnaWNlcnQuY29tMSUwIwYDVQQDExxEaWdpQ2VydCBIaWdoIEFzc3VyYW5j
-ZSBDQS0zMB4XDTEyMTEwOTAwMDAwMFoXDTE1MDExMjEyMDAwMFowczELMAkGA1UE
-BhMCQ0ExDzANBgNVBAgTBlF1ZWJlYzERMA8GA1UEBxMITW9udHJlYWwxFzAVBgNV
-BAoTDk5hZGltIEtvYmVpc3NpMRIwEAYDVQQLEwlDcnlwdG9jYXQxEzARBgNVBAMT
-CmNyeXB0by5jYXQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDS1vdN
-oZ+gNyjs3RnyQ0ZfQ8aGeRvnzYBZsZawwmRN/aSzdYhwxENAKr1wUnJk7aiXhYWq
-Z+ME/GUI8/89LHyHImQtVxTVRgfDSQSeciP7fplJGDNTz9+IOS849doom2sTsolH
-WJtJ/ggSDX4igDc+6/c3D1rz34gAGspQ1XK2TZEcPvN6+IW9a+BUqYMfyRZmoft6
-YfDDf8S36weyyIASoRc9nB02wvOJ/7ME8sbExXbUEjQBr/HFcI3IwElft32zLsVu
-NWdYz0TsFHG5tPhHSGQ/QI85uON4TJthlu3T0lV//T5nME2hijRcMo4C/yD+JK5Y
-4h0tLCHrce4xx4au4EPF2YoGO8IEPVlQLJb5Yz92vQaAA15NnDSCVlb4Tfe6zwsf
-7qBBobM9A1ZTKDtQiZZLHIACmJ4EfENtSFE+On3y31vvkaWXRROgo1Z0ECNBynb4
-ubPTlR2ZlAeE7Qp3b3GdMmnIP8QPn6tSxqYEveLwqOhXD/Upa5qxjnbbwQk1SRpA
-Pbvz5waGzA/9UXLwcgJguqh3cLIuKmOysCG6qiSkpfzSdeCDa4vheLJl+rUbS0DV
-abcRkRUmzRvNCeYYlTe6I0gHRC1UPef8aj2ppinw+9dWiQVxhjjIhw8JyGjM5Qg9
-NH5lDyXEuoS7f/VOTOOhAHvHSl5Ec/iXYU7PpQIDAQABo4IDUDCCA0wwHwYDVR0j
-BBgwFoAUUOpzidsp+xCPnuUBINTeeZlIg/cwHQYDVR0OBBYEFPtM/u402qRHQsv4
-C3aUc3BKnofhMCUGA1UdEQQeMByCCmNyeXB0by5jYXSCDnd3dy5jcnlwdG8uY2F0
-MA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw
-YQYDVR0fBFowWDAqoCigJoYkaHR0cDovL2NybDMuZGlnaWNlcnQuY29tL2NhMy1n
-MTYuY3JsMCqgKKAmhiRodHRwOi8vY3JsNC5kaWdpY2VydC5jb20vY2EzLWcxNi5j
-cmwwggHEBgNVHSAEggG7MIIBtzCCAbMGCWCGSAGG/WwBATCCAaQwOgYIKwYBBQUH
-AgEWLmh0dHA6Ly93d3cuZGlnaWNlcnQuY29tL3NzbC1jcHMtcmVwb3NpdG9yeS5o
-dG0wggFkBggrBgEFBQcCAjCCAVYeggFSAEEAbgB5ACAAdQBzAGUAIABvAGYAIAB0
-AGgAaQBzACAAQwBlAHIAdABpAGYAaQBjAGEAdABlACAAYwBvAG4AcwB0AGkAdAB1
-AHQAZQBzACAAYQBjAGMAZQBwAHQAYQBuAGMAZQAgAG8AZgAgAHQAaABlACAARABp
-AGcAaQBDAGUAcgB0ACAAQwBQAC8AQwBQAFMAIABhAG4AZAAgAHQAaABlACAAUgBl
-AGwAeQBpAG4AZwAgAFAAYQByAHQAeQAgAEEAZwByAGUAZQBtAGUAbgB0ACAAdwBo
-AGkAYwBoACAAbABpAG0AaQB0ACAAbABpAGEAYgBpAGwAaQB0AHkAIABhAG4AZAAg
-AGEAcgBlACAAaQBuAGMAbwByAHAAbwByAGEAdABlAGQAIABoAGUAcgBlAGkAbgAg
-AGIAeQAgAHIAZQBmAGUAcgBlAG4AYwBlAC4wewYIKwYBBQUHAQEEbzBtMCQGCCsG
-AQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wRQYIKwYBBQUHMAKGOWh0
-dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEhpZ2hBc3N1cmFuY2VD
-QS0zLmNydDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBBQUAA4IBAQBlJ+AAe5Il
-9Tj9ZD7Equ9JjdbKi5srhjEDtDXtvl/2ga8Bjbh2qs0Qb18DtfpdTdIPuDF2KKjW
-kIQabl4h8s5NcQ/U7+AssAyKZGjiHs40G0iAlHpMeo/YzzEVqfoG+AT6c8caL4b0
-M2FnRee23OuKUdPixln3iShViViKt29NqDliIu4/IaeB7WkgJgljtIPNPZVoNqXa
-TvwjIDhO+wtc3qXjtO1zej3+GBmGz7RcZckturc2pZe3NRWQ7wO8ZzWShWU/ii3z
-2PftKlqZo3WAeJoUCPtQNsLnBFGvdUx2rUZwMhdgPuGeV4kEULAtu8M74xR5/Opz
-nRGP22zr1K4q
------END CERTIFICATE-----
-
 Libertylavabitcom
 -----BEGIN CERTIFICATE-----
 MIIGWjCCBUKgAwIBAgIHAMn6RGIIgjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
diff --git a/net/http/transport_security_state_static.h b/net/http/transport_security_state_static.h
index 604afa1..81c9957 100644
--- a/net/http/transport_security_state_static.h
+++ b/net/http/transport_security_state_static.h
@@ -466,10 +466,6 @@
     "\xe5\x24\xe9\x8e\x31\x7d\xc8\xfc\xad\x90"
     "\x53\x7c\x91\xe7\x0d\xa4\x70\x93\x90\x5f";
 
-static const char kSPKIHash_CryptoCat1[] =
-    "\x4c\x87\xce\x85\x2c\xf4\xc0\x4d\x67\xa9"
-    "\xe0\xec\x51\x0c\x7f\x3b\x14\xb3\xe9\xc9";
-
 static const char kSPKIHash_Libertylavabitcom[] =
     "\x41\xbb\x3b\x8b\xc7\xcf\x3d\x13\x3f\x17"
     "\xb3\x25\x7e\xe4\x03\xca\x8a\x5c\x6d\x36";
@@ -631,11 +627,6 @@
   kSPKIHash_Tor2web,
   NULL,
 };
-static const char* const kCryptoCatAcceptableCerts[] = {
-  kSPKIHash_DigiCertEVRoot,
-  kSPKIHash_CryptoCat1,
-  NULL,
-};
 static const char* const kLavabitAcceptableCerts[] = {
   kSPKIHash_Libertylavabitcom,
   NULL,
@@ -681,7 +672,6 @@
   {kTwitterComAcceptableCerts, kNoRejectedPublicKeys},
   {kTwitterCDNAcceptableCerts, kNoRejectedPublicKeys},
   {kTor2webAcceptableCerts, kNoRejectedPublicKeys},
-  {kCryptoCatAcceptableCerts, kNoRejectedPublicKeys},
   {kLavabitAcceptableCerts, kNoRejectedPublicKeys},
   {kDropboxAcceptableCerts, kNoRejectedPublicKeys},
   {kFacebookAcceptableCerts, kNoRejectedPublicKeys},
@@ -1420,21 +1410,21 @@
   0xf8, 0x15, 0x3a, 0x5c, 0x27, 0xaf, 0xf2, 0xf9,
   0xfb, 0xf4, 0xd5, 0xac, 0xb9, 0xd3, 0xea, 0x36,
   0x7e, 0xca, 0x4e, 0x9f, 0x7a, 0xab, 0x43, 0x0f,
-  0x97, 0xec, 0xf9, 0x78, 0x41, 0xa1, 0xf2, 0xfd,
-  0x9b, 0x9e, 0x7c, 0xbf, 0x67, 0xb4, 0x7e, 0x54,
-  0xf9, 0x7e, 0xc6, 0xa7, 0xa3, 0xf2, 0x29, 0xf2,
-  0xe5, 0x73, 0xe7, 0xcb, 0xf6, 0x0f, 0x97, 0xec,
-  0xdd, 0x73, 0xe5, 0xfa, 0xc2, 0xde, 0x4f, 0xf9,
-  0xfd, 0x68, 0x93, 0x3d, 0x9b, 0x1e, 0x01, 0xf2,
-  0xfd, 0x83, 0xe5, 0xfb, 0x30, 0x14, 0xf9, 0x7e,
-  0xcf, 0xf6, 0x03, 0x87, 0x1b, 0x66, 0xa7, 0xcb,
-  0xf6, 0x7e, 0xcb, 0x7a, 0xba, 0x50, 0x7c, 0xbf,
+  0x87, 0xec, 0xf9, 0x78, 0x41, 0xa1, 0xf0, 0xfd,
+  0x9b, 0x9e, 0x7c, 0x3f, 0x67, 0xb4, 0x7e, 0x54,
+  0xf8, 0x7e, 0xc6, 0xa7, 0xa3, 0xf2, 0x29, 0xf2,
+  0xe5, 0x73, 0xe7, 0xc3, 0xf6, 0x0f, 0x87, 0xec,
+  0xdd, 0x73, 0xe1, 0xfa, 0xc2, 0xde, 0x4f, 0xf9,
+  0xfd, 0x68, 0x93, 0x3d, 0x9b, 0x1e, 0x01, 0xf0,
+  0xfd, 0x83, 0xe1, 0xfb, 0x30, 0x14, 0xf8, 0x7e,
+  0xcf, 0xf6, 0x03, 0x87, 0x1b, 0x66, 0xa7, 0xc3,
+  0xf6, 0x7e, 0xcb, 0x7a, 0xba, 0x50, 0x7c, 0x3f,
   0x60, 0x08, 0xa3, 0xf9, 0x15, 0x51, 0x67, 0x86,
-  0x85, 0xb9, 0xf2, 0xfd, 0x83, 0xe5, 0xfb, 0x86,
-  0xba, 0x60, 0x84, 0xf9, 0x7e, 0xc3, 0xd5, 0x88,
+  0x85, 0xb9, 0xf0, 0xfd, 0x83, 0xe1, 0xfb, 0x86,
+  0xba, 0x60, 0x84, 0xf8, 0x7e, 0xc3, 0xd5, 0x88,
   0xea, 0x6b, 0x90, 0x84, 0xa6, 0x13, 0xa2, 0x52,
   0xc3, 0x1a, 0xc2, 0xea, 0xeb, 0xc1, 0x26, 0x9e,
-  0xc7, 0xae, 0xd2, 0xe5, 0xfa, 0xe4, 0x47, 0xcf,
+  0xc7, 0xae, 0xd2, 0xe1, 0xfa, 0xe4, 0x47, 0xcf,
   0xfb, 0x13, 0x5c, 0x10, 0xf5, 0x9a, 0x3a, 0x67,
   0xd0, 0x54, 0x50, 0x89, 0x5a, 0x50, 0x7e, 0x7b,
   0x02, 0xb9, 0x29, 0xd3, 0x8c, 0x53, 0xff, 0xf5,
@@ -1676,7 +1666,7 @@
   0xda, 0x13, 0x20, 0x21, 0x9f, 0xcb, 0xf7, 0xff,
   0x30, 0x07, 0x4f, 0xe7, 0xe0, 0xd7, 0xeb, 0x41,
   0xd3, 0xff, 0xca, 0xd9, 0x45, 0xdb, 0xef, 0xfc,
-  0xa3, 0xc2, 0x7b, 0xbd, 0xe7, 0xff, 0xb2, 0xeb,
+  0xa3, 0xc2, 0x7b, 0x3d, 0xe7, 0xff, 0xb2, 0xeb,
   0xf4, 0xcb, 0xdb, 0xc2, 0x04, 0x3a, 0x7d, 0xd5,
   0xcf, 0xdc, 0xe9, 0xd7, 0xed, 0x99, 0xd3, 0xfa,
   0xf6, 0xf3, 0x81, 0xde, 0x3a, 0x28, 0x4c, 0x8f,
@@ -1758,8 +1748,8 @@
   0x9c, 0x54, 0x66, 0x6f, 0x79, 0xd3, 0xd7, 0xa3,
   0xbe, 0x74, 0xf5, 0x35, 0xeb, 0x9d, 0x14, 0x1e,
   0xee, 0x0c, 0xd8, 0x8a, 0x7f, 0x7f, 0x83, 0x5a,
-  0xa8, 0x0e, 0x9c, 0x10, 0x84, 0xf8, 0x7d, 0x4e,
-  0xef, 0xea, 0x5c, 0x3e, 0x9c, 0x6a, 0x63, 0x54,
+  0xa8, 0x0e, 0x9c, 0x10, 0x84, 0xf7, 0x7d, 0x4e,
+  0xef, 0xea, 0x5b, 0xbe, 0x9c, 0x6a, 0x63, 0x54,
   0x4a, 0x01, 0x6e, 0x7f, 0xfd, 0x9f, 0xf6, 0xd7,
   0x56, 0xf6, 0xd3, 0x9e, 0xf5, 0x3a, 0x28, 0x3f,
   0xcd, 0xa4, 0x91, 0xb2, 0x95, 0x77, 0xbc, 0xd3,
@@ -1975,218 +1965,217 @@
   0xfc, 0x03, 0xa1, 0xb8, 0xa9, 0xc7, 0x0b, 0x50,
   0xc2, 0x95, 0xa1, 0x3e, 0xe8, 0x49, 0x5d, 0x75,
   0xb1, 0xac, 0xf8, 0x53, 0xb9, 0x0d, 0x11, 0x74,
-  0xfa, 0xe0, 0xdf, 0xf7, 0x96, 0xcf, 0x69, 0x3b,
-  0x0f, 0x9f, 0x8c, 0x21, 0xc9, 0x84, 0x3e, 0x1c,
-  0x53, 0xff, 0x33, 0x9e, 0xec, 0x14, 0xee, 0x43,
-  0x44, 0xcd, 0x3a, 0x95, 0xa9, 0xd3, 0x93, 0xcc,
-  0x3a, 0x76, 0xca, 0xd8, 0xd9, 0x47, 0x4f, 0x93,
-  0xad, 0xe6, 0x8e, 0x9f, 0xf9, 0xbf, 0xd7, 0xf2,
-  0x7b, 0x5b, 0xe2, 0x1d, 0x3f, 0xff, 0xda, 0x77,
-  0xd3, 0xf9, 0xad, 0xb4, 0xdd, 0x65, 0x78, 0xad,
-  0x07, 0x46, 0x22, 0xc6, 0xc8, 0xf3, 0xff, 0xed,
-  0x7d, 0xfa, 0x32, 0xbe, 0xeb, 0x38, 0x21, 0x09,
-  0x53, 0xc9, 0xdc, 0x86, 0x8b, 0x3e, 0x7f, 0xfb,
-  0xc3, 0x6e, 0xdd, 0x8d, 0xbf, 0x95, 0xcf, 0x9d,
-  0x38, 0x21, 0x09, 0x53, 0xfe, 0xe7, 0xd7, 0xf8,
-  0x9a, 0xe0, 0x94, 0xe2, 0xf2, 0x7f, 0x96, 0xde,
-  0xd7, 0xfd, 0xcd, 0x1d, 0x3f, 0xde, 0xfe, 0xbb,
-  0xf5, 0xd2, 0xf5, 0x3a, 0x11, 0x3b, 0x31, 0x58,
-  0xb1, 0x58, 0x1b, 0x6e, 0x96, 0xd8, 0xe6, 0x7f,
-  0xff, 0xfe, 0xcc, 0x05, 0x73, 0x3f, 0xb7, 0x78,
-  0xfd, 0x72, 0xce, 0xaf, 0xf2, 0x86, 0x63, 0x0e,
-  0x9d, 0x55, 0xa0, 0xe9, 0xdb, 0x19, 0x63, 0xa1,
-  0xe8, 0xc4, 0xac, 0x22, 0xae, 0x39, 0x3d, 0x48,
-  0x34, 0x43, 0xa7, 0xd6, 0xfa, 0xe0, 0x99, 0x3f,
-  0xef, 0x0b, 0xf0, 0x68, 0xd3, 0xb5, 0x34, 0x41,
-  0xae, 0x34, 0xb3, 0xee, 0x4f, 0x31, 0x4e, 0x9f,
-  0x9f, 0x6f, 0xf5, 0x37, 0x3a, 0x58, 0x87, 0xa7,
-  0xf2, 0x59, 0xff, 0xff, 0x70, 0x6f, 0x96, 0xba,
-  0xe7, 0xe9, 0xbe, 0x0f, 0xa8, 0xe6, 0x1d, 0x0f,
-  0x4d, 0x03, 0x21, 0x5f, 0xf2, 0x69, 0xf8, 0x73,
-  0x5a, 0xd9, 0x4e, 0x9f, 0xff, 0xda, 0x7f, 0xb6,
-  0xee, 0xdf, 0xfe, 0xbd, 0x7d, 0x4d, 0xbc, 0x13,
-  0xa7, 0xff, 0xfa, 0xb5, 0x51, 0xba, 0xb9, 0x99,
-  0x7a, 0xef, 0xaf, 0x3f, 0x0e, 0x9e, 0xb6, 0x79,
-  0xb1, 0xd1, 0xe4, 0x44, 0xd9, 0x9a, 0x66, 0x6c,
-  0x86, 0x8b, 0xf2, 0x7f, 0xe7, 0xdf, 0x47, 0xbd,
-  0x97, 0xba, 0xb0, 0xe9, 0xff, 0xbd, 0x9f, 0xcc,
-  0xae, 0xe7, 0xd5, 0x87, 0x45, 0x28, 0x8b, 0xaa,
-  0x34, 0xf7, 0xfe, 0xa8, 0x74, 0x2a, 0x63, 0x5a,
-  0x91, 0xe4, 0x2c, 0xf8, 0x92, 0x7f, 0xff, 0xe6,
-  0xf5, 0xb7, 0x98, 0xe6, 0x9f, 0xc3, 0xbe, 0xde,
-  0xa6, 0xa9, 0xea, 0x0e, 0x9f, 0x69, 0x95, 0xf7,
-  0xce, 0x9e, 0xdf, 0xa7, 0x54, 0xe9, 0xff, 0x5e,
-  0xa0, 0xf5, 0x34, 0xbf, 0x2e, 0x74, 0x29, 0xf2,
-  0xe1, 0x24, 0xcd, 0x68, 0x74, 0x98, 0x74, 0x52,
-  0x6a, 0x1b, 0xb1, 0x89, 0xff, 0xff, 0x5b, 0xd4,
-  0xdf, 0x29, 0xb8, 0x8a, 0xdc, 0x1b, 0xfe, 0xfb,
-  0x61, 0xd3, 0x82, 0x10, 0x95, 0x3d, 0xae, 0xbd,
-  0xf2, 0x9c, 0x5e, 0x4f, 0xfb, 0xac, 0x9e, 0xed,
-  0xd5, 0xeb, 0x1d, 0x0a, 0x99, 0x12, 0x13, 0xfa,
-  0x11, 0x76, 0x32, 0x9f, 0xfb, 0x3f, 0x4d, 0xf0,
-  0x7d, 0x47, 0x30, 0xe9, 0xf6, 0x5d, 0xec, 0xb1,
-  0xd0, 0xa7, 0xd7, 0x54, 0x49, 0x81, 0x63, 0xa7,
-  0xea, 0x1a, 0x7b, 0x70, 0x68, 0x3a, 0x7f, 0x6d,
-  0xb6, 0x5e, 0xde, 0xb9, 0xd3, 0x78, 0x4e, 0x8d,
-  0x94, 0x7f, 0xde, 0x34, 0xb1, 0xac, 0xff, 0xed,
-  0x75, 0x5d, 0x45, 0x6f, 0xe4, 0xf6, 0xa7, 0x49,
-  0xcd, 0xd1, 0x99, 0xd5, 0xb2, 0xc3, 0x8a, 0x37,
-  0x41, 0x5e, 0xb0, 0xd8, 0xc8, 0xf5, 0x69, 0x8c,
-  0x73, 0xc6, 0xad, 0x47, 0x10, 0x26, 0xac, 0x2c,
-  0xb4, 0xa0, 0xde, 0x41, 0x03, 0xd7, 0xe1, 0x1b,
-  0x58, 0xda, 0xaf, 0x0a, 0xc0, 0x90, 0xec, 0x42,
-  0x53, 0x79, 0xac, 0x39, 0x9d, 0x25, 0x6a, 0x69,
-  0xb4, 0xff, 0xe7, 0x33, 0x9e, 0xec, 0x14, 0xee,
-  0x43, 0x44, 0xd9, 0x3f, 0x9d, 0x82, 0x9d, 0xc8,
-  0x68, 0xab, 0x67, 0xf3, 0xdf, 0xa5, 0xfe, 0xaf,
-  0x3a, 0x7b, 0x2d, 0xd7, 0x3a, 0x5b, 0x26, 0x1e,
-  0xa7, 0xcd, 0x27, 0xc2, 0x9d, 0xc8, 0x68, 0xad,
-  0x27, 0xff, 0x91, 0x47, 0x01, 0xcc, 0xe7, 0xaf,
-  0x90, 0xe9, 0xff, 0xe7, 0xd7, 0x3e, 0xac, 0xec,
-  0xbd, 0xd5, 0x87, 0x4d, 0x7b, 0xaa, 0x25, 0xf9,
-  0x2a, 0x7f, 0x2b, 0x6d, 0xf7, 0xfa, 0x80, 0xe9,
-  0xfa, 0x8c, 0xb7, 0xb1, 0x87, 0x4f, 0xf6, 0x37,
-  0xfd, 0x43, 0x4b, 0xea, 0x74, 0xfe, 0x7e, 0x5f,
-  0xbe, 0x0d, 0x0e, 0x93, 0x9b, 0x89, 0xf9, 0x61,
-  0x67, 0xa1, 0x8f, 0x62, 0xde, 0x36, 0xf9, 0x6d,
-  0xcf, 0x27, 0xf3, 0xb0, 0x53, 0xb9, 0x0d, 0x16,
-  0x04, 0xf8, 0x53, 0xb9, 0x0d, 0x13, 0xac, 0xff,
-  0xfe, 0xb2, 0xd1, 0xae, 0x31, 0xd5, 0xae, 0x5b,
-  0xd5, 0xd2, 0x83, 0xa7, 0xce, 0x67, 0x3d, 0xd8,
-  0x89, 0x56, 0x8c, 0x27, 0xc2, 0x9d, 0xc8, 0x68,
-  0xb6, 0x67, 0xfc, 0x05, 0xab, 0xad, 0xe4, 0xe1,
-  0x3a, 0x4e, 0xc3, 0xec, 0xe3, 0x09, 0xe4, 0xee,
-  0x43, 0x45, 0xcd, 0x26, 0x1d, 0x33, 0xb0, 0x4d,
-  0xd8, 0x4a, 0xe7, 0xf3, 0xb0, 0x53, 0xb9, 0x0d,
-  0x17, 0x7c, 0xf3, 0xb6, 0xea, 0x03, 0xa1, 0x5b,
-  0x49, 0x8c, 0xa7, 0x5d, 0xa1, 0x85, 0x2a, 0x5e,
-  0x95, 0x02, 0x2e, 0x4c, 0x86, 0x80, 0x21, 0x59,
-  0x56, 0x1b, 0x95, 0xef, 0x3b, 0x9f, 0xf7, 0xf9,
-  0xcb, 0x5a, 0xb3, 0x9e, 0x74, 0xfe, 0xfd, 0x18,
-  0xdf, 0x75, 0xda, 0x74, 0xf8, 0x53, 0xb9, 0x0d,
-  0x12, 0xbc, 0xf6, 0x9c, 0x2f, 0x3a, 0x7f, 0xff,
-  0x7a, 0xfc, 0xce, 0xf8, 0x2c, 0x1e, 0xfd, 0x09,
-  0xea, 0x0e, 0x95, 0xb5, 0x44, 0x1f, 0x10, 0xce,
-  0xe7, 0xb9, 0x53, 0x14, 0xc3, 0x8a, 0xc2, 0xce,
-  0x75, 0xd7, 0x52, 0xa7, 0xff, 0x5b, 0xbd, 0x75,
-  0x7f, 0x86, 0x8d, 0x00, 0x54, 0xfe, 0xe4, 0x76,
-  0xa2, 0xdd, 0xb9, 0x4f, 0x9e, 0xa3, 0x92, 0x72,
-  0x2a, 0x4b, 0x64, 0x6a, 0x2d, 0xa1, 0x59, 0x3f,
+  0xfa, 0xe0, 0xdf, 0xf7, 0x95, 0x27, 0x61, 0xed,
+  0x71, 0x84, 0x39, 0x1f, 0x6f, 0x86, 0xac, 0xff,
+  0xcc, 0xe7, 0xbb, 0x05, 0x3b, 0x90, 0xd1, 0x33,
+  0x4e, 0xa5, 0x6a, 0x74, 0xe4, 0xf3, 0x0e, 0x9d,
+  0xb2, 0xb6, 0x36, 0x51, 0xd3, 0xe4, 0xeb, 0x79,
+  0xa3, 0xa7, 0xfe, 0x6f, 0xf5, 0xfc, 0x9e, 0xd6,
+  0xf8, 0x87, 0x4f, 0xff, 0xf6, 0x9d, 0xf4, 0xfe,
+  0x6b, 0x6d, 0x37, 0x59, 0x5e, 0x2b, 0x41, 0xd1,
+  0x88, 0xb1, 0xb2, 0x3c, 0xff, 0xfb, 0x5f, 0x7e,
+  0x8c, 0xaf, 0xba, 0xce, 0x08, 0x42, 0x54, 0xf2,
+  0x77, 0x21, 0xa2, 0xcf, 0x9f, 0xfe, 0xf0, 0xdb,
+  0xb7, 0x63, 0x6f, 0xe5, 0x73, 0xe7, 0x4e, 0x08,
+  0x42, 0x54, 0xff, 0xb9, 0xf5, 0xfe, 0x26, 0xb8,
+  0x25, 0x38, 0xbc, 0x9f, 0xe5, 0xb7, 0xb5, 0xff,
+  0x73, 0x47, 0x4f, 0xf7, 0xbf, 0xae, 0xfd, 0x74,
+  0xbd, 0x4e, 0x84, 0x4e, 0xcc, 0x56, 0x2c, 0x56,
+  0x06, 0xdb, 0xa5, 0xb6, 0x39, 0x9f, 0xff, 0xff,
+  0xb3, 0x01, 0x5c, 0xcf, 0xed, 0xde, 0x3f, 0x5c,
+  0xb3, 0xab, 0xfc, 0xa1, 0x98, 0xc3, 0xa7, 0x55,
+  0x68, 0x3a, 0x76, 0xc6, 0x58, 0xe8, 0x7a, 0x31,
+  0x2b, 0x08, 0xab, 0x8e, 0x4f, 0x52, 0x0d, 0x10,
+  0xe9, 0xf5, 0xbe, 0xb8, 0x26, 0x4f, 0xfb, 0xc2,
+  0xfc, 0x1a, 0x34, 0xed, 0x4d, 0x10, 0x6b, 0x8d,
+  0x2c, 0xfb, 0x93, 0xcc, 0x53, 0xa7, 0xe7, 0xdb,
+  0xfd, 0x4d, 0xce, 0x96, 0x21, 0xe9, 0xfc, 0x96,
+  0x7f, 0xff, 0xdc, 0x1b, 0xe5, 0xae, 0xb9, 0xfa,
+  0x6f, 0x83, 0xea, 0x39, 0x87, 0x43, 0xd3, 0x40,
+  0xc8, 0x57, 0xfc, 0x9a, 0x7e, 0x1c, 0xd6, 0xb6,
+  0x53, 0xa7, 0xff, 0xf6, 0x9f, 0xed, 0xbb, 0xb7,
+  0xff, 0xaf, 0x5f, 0x53, 0x6f, 0x04, 0xe9, 0xff,
+  0xfe, 0xad, 0x54, 0x6e, 0xae, 0x66, 0x5e, 0xbb,
+  0xeb, 0xcf, 0xc3, 0xa7, 0xad, 0x9e, 0x6c, 0x74,
+  0x79, 0x11, 0x36, 0x66, 0x99, 0x9b, 0x21, 0xa2,
+  0xfc, 0x9f, 0xf9, 0xf7, 0xd1, 0xef, 0x65, 0xee,
+  0xac, 0x3a, 0x7f, 0xef, 0x67, 0xf3, 0x2b, 0xb9,
+  0xf5, 0x61, 0xd1, 0x4a, 0x22, 0xea, 0x8d, 0x3d,
+  0xff, 0xaa, 0x1d, 0x0a, 0x98, 0xd6, 0xa4, 0x79,
+  0x0b, 0x3e, 0x24, 0x9f, 0xff, 0xf9, 0xbd, 0x6d,
+  0xe6, 0x39, 0xa7, 0xf0, 0xef, 0xb7, 0xa9, 0xaa,
+  0x7a, 0x83, 0xa7, 0xda, 0x65, 0x7d, 0xf3, 0xa7,
+  0xb7, 0xe9, 0xd5, 0x3a, 0x7f, 0xd7, 0xa8, 0x3d,
+  0x4d, 0x2f, 0xcb, 0x9d, 0x0a, 0x7c, 0xb8, 0x49,
+  0x33, 0x5a, 0x1d, 0x26, 0x1d, 0x14, 0x9a, 0x86,
+  0xec, 0x62, 0x7f, 0xff, 0xd6, 0xf5, 0x37, 0xca,
+  0x6e, 0x22, 0xb7, 0x06, 0xff, 0xbe, 0xd8, 0x74,
+  0xe0, 0x84, 0x25, 0x4f, 0x6b, 0xaf, 0x7c, 0xa7,
+  0x17, 0x93, 0xfe, 0xeb, 0x27, 0xbb, 0x75, 0x7a,
+  0xc7, 0x42, 0xa6, 0x44, 0x84, 0xfe, 0x84, 0x5d,
+  0x8c, 0xa7, 0xfe, 0xcf, 0xd3, 0x7c, 0x1f, 0x51,
+  0xcc, 0x3a, 0x7d, 0x97, 0x7b, 0x2c, 0x74, 0x29,
+  0xf5, 0xd5, 0x12, 0x60, 0x58, 0xe9, 0xfa, 0x86,
+  0x9e, 0xdc, 0x1a, 0x0e, 0x9f, 0xdb, 0x6d, 0x97,
+  0xb7, 0xae, 0x74, 0xde, 0x13, 0xa3, 0x65, 0x1f,
+  0xf7, 0x8d, 0x2c, 0x6b, 0x3f, 0xfb, 0x5d, 0x57,
+  0x51, 0x5b, 0xf9, 0x3d, 0xa9, 0xd2, 0x73, 0x74,
+  0x66, 0x75, 0x6c, 0xb0, 0xe2, 0x8d, 0xd0, 0x57,
+  0xac, 0x36, 0x32, 0x3d, 0x5a, 0x63, 0x1c, 0xf1,
+  0xab, 0x51, 0xc4, 0x09, 0xab, 0x0b, 0x2d, 0x28,
+  0x37, 0x90, 0x40, 0xf5, 0xf8, 0x46, 0xd6, 0x36,
+  0xab, 0xc2, 0xb0, 0x24, 0x3b, 0x10, 0x94, 0xde,
+  0x6b, 0x0e, 0x67, 0x49, 0x5a, 0x9a, 0x6d, 0x3f,
   0xf9, 0xcc, 0xe7, 0xbb, 0x05, 0x3b, 0x90, 0xd1,
-  0x30, 0xcf, 0xff, 0xd8, 0xed, 0xe3, 0xc0, 0x76,
-  0xdb, 0xbc, 0x2b, 0x57, 0x9d, 0x3f, 0xf6, 0xc9,
-  0x94, 0xbf, 0x4e, 0xbf, 0xd5, 0xe7, 0x4f, 0xf7,
-  0xd7, 0xa8, 0xbe, 0xde, 0x13, 0xa7, 0xe6, 0x2e,
-  0x7e, 0xfb, 0x07, 0x4f, 0x97, 0x3f, 0x7d, 0x83,
-  0xa7, 0xeb, 0x7a, 0xf5, 0xea, 0x77, 0x1e, 0xc3,
-  0x0b, 0xe7, 0xff, 0xfd, 0xfc, 0x0b, 0x7d, 0xf2,
-  0xdb, 0xbf, 0x94, 0x7b, 0x3f, 0x4b, 0xea, 0x74,
-  0xfc, 0xdb, 0x7d, 0xfe, 0xa0, 0x3a, 0x7f, 0xf2,
-  0xdc, 0x0a, 0xfc, 0xa6, 0xf4, 0x68, 0x13, 0xa1,
-  0x4f, 0xf7, 0xc6, 0x33, 0xf5, 0x7d, 0xb5, 0x9d,
-  0x73, 0xa7, 0xff, 0xfc, 0x38, 0xd9, 0x7f, 0x7d,
-  0xdb, 0xfe, 0xb6, 0xef, 0x5d, 0x6f, 0x53, 0xa5,
-  0x94, 0xa2, 0x7c, 0x4b, 0xe7, 0xbe, 0xa0, 0xde,
-  0x74, 0xf7, 0x6f, 0xd7, 0x0e, 0x93, 0x9b, 0x8a,
-  0xd0, 0x75, 0x4a, 0x48, 0x48, 0xb4, 0x91, 0x68,
-  0x78, 0x7e, 0x18, 0x17, 0x28, 0xd0, 0x8e, 0x7c,
-  0x29, 0xdc, 0x86, 0x8a, 0xba, 0x7f, 0x9e, 0xec,
-  0x14, 0xee, 0x43, 0x44, 0x79, 0x27, 0x61, 0xf8,
-  0xf1, 0x84, 0xfe, 0x76, 0x0a, 0x77, 0x21, 0xa2,
-  0xc1, 0x9f, 0xce, 0xc1, 0x4e, 0xe4, 0x34, 0x59,
-  0x53, 0xf9, 0xd8, 0x29, 0xdc, 0x86, 0x8b, 0x4e,
-  0x79, 0x3b, 0x90, 0xd1, 0x6e, 0x4f, 0xfc, 0xb8,
-  0x39, 0xfd, 0xd6, 0xca, 0x42, 0x74, 0x09, 0xf7,
-  0xd4, 0xae, 0x7f, 0xdc, 0xf7, 0x60, 0xa7, 0x72,
-  0x1a, 0x28, 0x79, 0xfb, 0xed, 0xcc, 0x15, 0xa9,
-  0xd3, 0xff, 0xf6, 0x6b, 0x65, 0xde, 0xeb, 0xff,
-  0x81, 0x5a, 0xa8, 0x0a, 0x93, 0xb1, 0x1e, 0x6c,
-  0x21, 0xd1, 0x1b, 0x60, 0xbe, 0x7f, 0x3b, 0x05,
-  0x3b, 0x90, 0xd1, 0x79, 0xc2, 0xaf, 0xf7, 0x3d,
-  0x13, 0x55, 0x2c, 0x97, 0x3f, 0x4c, 0x3f, 0xc4,
-  0x99, 0x87, 0x76, 0x3b, 0xfc, 0x73, 0xad, 0x91,
-  0xa7, 0xf3, 0xb0, 0x53, 0xb9, 0x0d, 0x14, 0xb4,
-  0xfe, 0x76, 0x0a, 0x77, 0x21, 0xa2, 0xc2, 0x9f,
-  0xce, 0xc1, 0x4e, 0xe4, 0x34, 0x59, 0x73, 0xce,
-  0xdb, 0xb2, 0xf9, 0xba, 0x9d, 0x39, 0xdb, 0xd8,
-  0x74, 0xf2, 0x39, 0x6a, 0x87, 0xa5, 0xa1, 0xa4,
-  0xff, 0xe7, 0x33, 0x9e, 0xec, 0x14, 0xee, 0x43,
-  0x45, 0x19, 0x3f, 0x9c, 0xad, 0x94, 0x54, 0x07,
-  0x43, 0xd3, 0xbf, 0x13, 0xb6, 0x1d, 0xf4, 0x23,
-  0x6a, 0x71, 0x75, 0x29, 0xff, 0x9d, 0xcf, 0x76,
-  0x0a, 0x77, 0x21, 0xa2, 0x39, 0x9f, 0xfc, 0xe6,
-  0x73, 0xdd, 0x82, 0x9d, 0xc8, 0x68, 0x9c, 0xa7,
-  0xf3, 0xb0, 0x53, 0xb9, 0x0d, 0x16, 0x64, 0xfe,
-  0x76, 0x0a, 0x77, 0x21, 0xa2, 0xdd, 0x9f, 0xfc,
-  0xe6, 0x73, 0xdd, 0x82, 0x9d, 0xc8, 0x68, 0xa4,
-  0x27, 0xfe, 0x77, 0x3d, 0xd8, 0x29, 0xdc, 0x86,
-  0x89, 0x4a, 0x28, 0x4e, 0xc9, 0xa4, 0xc6, 0x29,
-  0x7c, 0xee, 0xe7, 0x6d, 0xea, 0x53, 0xfe, 0xe7,
-  0xbb, 0x05, 0x3b, 0x90, 0xd1, 0x3b, 0x4f, 0xff,
-  0xbd, 0xae, 0x8c, 0x56, 0xfe, 0xd7, 0xeb, 0xfc,
-  0x43, 0xa4, 0xe6, 0x22, 0x7f, 0x91, 0xa7, 0xfe,
-  0xe6, 0x5b, 0x13, 0xac, 0xbb, 0xde, 0x74, 0xff,
-  0xdf, 0xcb, 0x75, 0x19, 0x5f, 0xf5, 0x27, 0x4d,
-  0xb0, 0xed, 0x51, 0x0f, 0x54, 0x38, 0x62, 0x38,
-  0xb6, 0x21, 0x5f, 0x3e, 0x14, 0xee, 0x43, 0x44,
-  0x59, 0x3f, 0xee, 0x7b, 0xb0, 0x53, 0xb9, 0x0d,
-  0x12, 0xec, 0xff, 0xfd, 0x9a, 0xd9, 0x77, 0xba,
-  0xff, 0xe0, 0x56, 0xaa, 0x02, 0xa4, 0xec, 0x46,
-  0x9b, 0x0c, 0x36, 0x11, 0xa7, 0xff, 0x39, 0x9c,
-  0xf7, 0x60, 0xa7, 0x72, 0x1a, 0x26, 0x29, 0xfc,
-  0xec, 0x14, 0xee, 0x43, 0x45, 0x53, 0x3f, 0xf9,
-  0xcc, 0xe7, 0xbb, 0x05, 0x3b, 0x90, 0xd1, 0x3a,
-  0x4f, 0xef, 0x70, 0xab, 0xf9, 0xb1, 0xd3, 0xe6,
-  0x95, 0xa5, 0xa9, 0xd3, 0xf0, 0x73, 0xcd, 0xb3,
-  0xe7, 0x4f, 0x7a, 0xca, 0xef, 0x1e, 0xb5, 0x4a,
-  0x27, 0xfe, 0xd2, 0xb7, 0x5a, 0x5d, 0xa3, 0x5e,
-  0x61, 0xd0, 0xc4, 0x41, 0x58, 0xe6, 0x7f, 0xdc,
-  0xf7, 0x60, 0xa7, 0x72, 0x1a, 0x27, 0x79, 0xf5,
-  0xf4, 0xe6, 0x78, 0xa9, 0x3b, 0x54, 0xe6, 0xf2,
-  0x30, 0xa6, 0x11, 0xf2, 0x34, 0xff, 0xe7, 0x33,
-  0x9e, 0xec, 0x14, 0xee, 0x43, 0x45, 0x0b, 0x3f,
-  0xf9, 0xcc, 0xe7, 0xbb, 0x05, 0x3b, 0x90, 0xd1,
-  0x49, 0x4f, 0xff, 0xec, 0xab, 0xb7, 0xe3, 0x56,
-  0xe6, 0x5e, 0xcb, 0x7d, 0x18, 0x74, 0x50, 0xb8,
-  0x06, 0xf3, 0x84, 0x52, 0x13, 0xb6, 0x47, 0xda,
-  0x04, 0x9d, 0x14, 0xb6, 0x14, 0xa7, 0xf3, 0xb0,
-  0x53, 0xb9, 0x0d, 0x11, 0x24, 0xff, 0xe7, 0x33,
-  0x9e, 0xec, 0x14, 0xee, 0x43, 0x44, 0xbd, 0x3e,
-  0x14, 0xee, 0x43, 0x45, 0x2f, 0x3f, 0x97, 0x56,
-  0xff, 0x31, 0x6a, 0x74, 0x9d, 0x87, 0xcd, 0x73,
-  0x09, 0xfc, 0xec, 0x14, 0xee, 0x43, 0x45, 0x39,
-  0x3f, 0xef, 0x0f, 0x56, 0xd9, 0x9f, 0x43, 0xa7,
-  0xfd, 0x96, 0x51, 0xc7, 0x04, 0x21, 0x2a, 0x6f,
-  0x04, 0xe9, 0xa8, 0x76, 0xa8, 0x8d, 0xd8, 0x3b,
-  0x6f, 0x3c, 0x9f, 0x0a, 0x77, 0x21, 0xa2, 0xbc,
-  0x9f, 0xff, 0xb3, 0x5b, 0x2e, 0xf7, 0x5f, 0xfc,
-  0x0a, 0xd5, 0x40, 0x54, 0x9d, 0x88, 0x8d, 0xd8,
-  0x30, 0x9f, 0xf9, 0xdc, 0xf7, 0x60, 0xa7, 0x72,
-  0x1a, 0x24, 0x79, 0xde, 0x02, 0x9d, 0x39, 0x31,
-  0x85, 0x38, 0xbb, 0x9f, 0x0a, 0x77, 0x21, 0xa2,
-  0x48, 0x9e, 0x77, 0x3d, 0xca, 0x7b, 0x38, 0x53,
-  0x3f, 0xf3, 0xb9, 0xee, 0xc1, 0x4e, 0xe4, 0x34,
-  0x49, 0x53, 0xe1, 0x4e, 0xe4, 0x34, 0x5e, 0x33,
-  0xf6, 0x9f, 0xa7, 0xa9, 0xa9, 0xd3, 0xea, 0xd6,
-  0xf8, 0x87, 0x4f, 0xf3, 0xdd, 0x82, 0x9d, 0xc8,
-  0x68, 0x93, 0x64, 0xec, 0x46, 0x3d, 0x26, 0x02,
-  0x61, 0xc4, 0xd0, 0xab, 0xa5, 0x34, 0x1d, 0xbe,
-  0x17, 0x1a, 0x93, 0xfa, 0x19, 0x0d, 0x43, 0x45,
-  0x85, 0x76, 0x86, 0x05, 0xcd, 0xf4, 0x8c, 0x4e,
-  0x16, 0x36, 0x98, 0x9a, 0x23, 0xae, 0x7c, 0x79,
-  0x3a, 0xc7, 0xb5, 0x96, 0xe4, 0x47, 0x6c, 0xa5,
-  0x64, 0xaf, 0xb3, 0x69, 0x9e, 0x7b, 0xf4, 0xe6,
-  0x26, 0xce, 0x3b, 0x06, 0xa9, 0xa9, 0xe3, 0x48,
-  0xf0, 0x66, 0x22, 0x86, 0x2d, 0x3b, 0x51, 0xd4,
-  0xe7, 0x80, 0x4b, 0x0e, 0x6e, 0xe1, 0x63, 0xf9,
-  0xe4, 0x8a, 0xd2, 0x3a, 0xef, 0x5c, 0x90, 0x69,
-  0x4a, 0xef, 0x6d, 0x29, 0x80, 0x32, 0x83, 0x76,
-  0x23, 0xde, 0xdf, 0x3a, 0x02, 0xdf, 0x3b, 0x4d,
-  0x00,
+  0x36, 0x4f, 0xe7, 0x60, 0xa7, 0x72, 0x1a, 0x2a,
+  0xd9, 0xfc, 0xf7, 0xe9, 0x7f, 0xab, 0xce, 0x9e,
+  0xcb, 0x75, 0xce, 0x96, 0xc9, 0x87, 0xa9, 0xf3,
+  0x49, 0xf0, 0xa7, 0x72, 0x1a, 0x2b, 0x49, 0xff,
+  0xe4, 0x51, 0xc0, 0x73, 0x39, 0xeb, 0xe4, 0x3a,
+  0x7f, 0xf9, 0xf5, 0xcf, 0xab, 0x3b, 0x2f, 0x75,
+  0x61, 0xd3, 0x5e, 0xea, 0x89, 0x7e, 0x4a, 0x9f,
+  0xca, 0xdb, 0x7d, 0xfe, 0xa0, 0x3a, 0x7e, 0xa3,
+  0x2d, 0xec, 0x61, 0xd3, 0xfd, 0x8d, 0xff, 0x50,
+  0xd2, 0xfa, 0x9d, 0x3f, 0x9f, 0x97, 0xef, 0x83,
+  0x43, 0xa4, 0xe6, 0xe2, 0x7e, 0x58, 0x59, 0xe8,
+  0x63, 0xd8, 0xb7, 0x8d, 0xbe, 0x5b, 0x73, 0xc9,
+  0xfc, 0xec, 0x14, 0xee, 0x43, 0x45, 0x81, 0x3e,
+  0x14, 0xee, 0x43, 0x44, 0xeb, 0x3f, 0xff, 0xac,
+  0xb4, 0x6b, 0x8c, 0x75, 0x6b, 0x96, 0xf5, 0x74,
+  0xa0, 0xe9, 0xf3, 0x99, 0xcf, 0x76, 0x22, 0x55,
+  0xa3, 0x09, 0xf0, 0xa7, 0x72, 0x1a, 0x2d, 0x99,
+  0xff, 0x01, 0x6a, 0xeb, 0x79, 0x38, 0x4e, 0x93,
+  0xb0, 0xfb, 0x38, 0xc2, 0x79, 0x3b, 0x90, 0xd1,
+  0x73, 0x49, 0x87, 0x4c, 0xec, 0x13, 0x76, 0x12,
+  0xb9, 0xfc, 0xec, 0x14, 0xee, 0x43, 0x45, 0xdf,
+  0x3c, 0xed, 0xba, 0x80, 0xe8, 0x56, 0xd2, 0x5f,
+  0x29, 0xd7, 0x48, 0x61, 0x4a, 0x97, 0xa5, 0x40,
+  0x8b, 0x93, 0x21, 0xa0, 0x08, 0x56, 0x55, 0x86,
+  0xe5, 0x7b, 0xce, 0xe7, 0xfd, 0xfe, 0x72, 0xd6,
+  0xac, 0xe7, 0x9d, 0x3f, 0xbf, 0x46, 0x37, 0xdd,
+  0x76, 0x9d, 0x3e, 0x14, 0xee, 0x43, 0x44, 0xaf,
+  0x3d, 0xa7, 0x0b, 0xce, 0x9f, 0xff, 0xde, 0xbf,
+  0x33, 0xbe, 0x0b, 0x07, 0xbf, 0x42, 0x7a, 0x83,
+  0xa5, 0x6d, 0x51, 0x07, 0xc4, 0x33, 0xb9, 0xee,
+  0x54, 0xc5, 0x30, 0xe2, 0xb0, 0xb3, 0x9d, 0x75,
+  0xd4, 0xa9, 0xff, 0xd6, 0xef, 0x5d, 0x5f, 0xe1,
+  0xa3, 0x40, 0x15, 0x3f, 0xb9, 0x1d, 0xa8, 0xb7,
+  0x6e, 0x53, 0xe7, 0xa8, 0xe4, 0x9c, 0x8a, 0x92,
+  0xd9, 0x1a, 0x8b, 0x68, 0x56, 0x4f, 0xfe, 0x73,
+  0x39, 0xee, 0xc1, 0x4e, 0xe4, 0x34, 0x4c, 0x33,
+  0xff, 0xf6, 0x3b, 0x78, 0xf0, 0x1d, 0xb6, 0xef,
+  0x0a, 0xd5, 0xe7, 0x4f, 0xfd, 0xb2, 0x65, 0x2f,
+  0xd3, 0xaf, 0xf5, 0x79, 0xd3, 0xfd, 0xf5, 0xea,
+  0x2f, 0xb7, 0x84, 0xe9, 0xf9, 0x8b, 0x9f, 0xbe,
+  0xc1, 0xd3, 0xe5, 0xcf, 0xdf, 0x60, 0xe9, 0xfa,
+  0xde, 0xbd, 0x7a, 0x9d, 0xc7, 0xb0, 0xc2, 0xf9,
+  0xff, 0xff, 0x7f, 0x02, 0xdf, 0x7c, 0xb6, 0xef,
+  0xe5, 0x1e, 0xcf, 0xd2, 0xfa, 0x9d, 0x3f, 0x36,
+  0xdf, 0x7f, 0xa8, 0x0e, 0x9f, 0xfc, 0xb7, 0x02,
+  0xbf, 0x29, 0xbd, 0x1a, 0x04, 0xe8, 0x53, 0xfd,
+  0xf1, 0x8c, 0xfd, 0x5f, 0x6d, 0x67, 0x5c, 0xe9,
+  0xff, 0xff, 0x0e, 0x36, 0x5f, 0xdf, 0x76, 0xff,
+  0xad, 0xbb, 0xd7, 0x5b, 0xd4, 0xe9, 0x65, 0x28,
+  0x9f, 0x12, 0xf9, 0xef, 0xa8, 0x37, 0x9d, 0x3d,
+  0xdb, 0xf5, 0xc3, 0xa4, 0xe6, 0xe2, 0xb4, 0x1d,
+  0x52, 0x92, 0x12, 0x2d, 0x24, 0x5a, 0x1e, 0x1f,
+  0x86, 0x05, 0xca, 0x34, 0x23, 0x9f, 0x0a, 0x77,
+  0x21, 0xa2, 0xae, 0x9f, 0xe7, 0xbb, 0x05, 0x3b,
+  0x90, 0xd1, 0x1e, 0x49, 0xd8, 0x7e, 0x3c, 0x61,
+  0x3f, 0x9d, 0x82, 0x9d, 0xc8, 0x68, 0xb0, 0x67,
+  0xf3, 0xb0, 0x53, 0xb9, 0x0d, 0x16, 0x54, 0xfe,
+  0x76, 0x0a, 0x77, 0x21, 0xa2, 0xd3, 0x9e, 0x4e,
+  0xe4, 0x34, 0x5b, 0x93, 0xff, 0x2e, 0x0e, 0x7f,
+  0x75, 0xb2, 0x90, 0x9d, 0x02, 0x7d, 0xf5, 0x2b,
+  0x9f, 0xf7, 0x3d, 0xd8, 0x29, 0xdc, 0x86, 0x8a,
+  0x1e, 0x7e, 0xfb, 0x73, 0x05, 0x6a, 0x74, 0xff,
+  0xfd, 0x9a, 0xd9, 0x77, 0xba, 0xff, 0xe0, 0x56,
+  0xaa, 0x02, 0xa4, 0xec, 0x47, 0x9b, 0x08, 0x74,
+  0x46, 0xd8, 0x2f, 0x9f, 0xce, 0xc1, 0x4e, 0xe4,
+  0x34, 0x5e, 0x70, 0xab, 0xfd, 0xcf, 0x44, 0xd5,
+  0x4b, 0x25, 0xcf, 0xd3, 0x0f, 0xf1, 0x26, 0x61,
+  0xdd, 0x8e, 0xff, 0x1c, 0xeb, 0x64, 0x69, 0xfc,
+  0xec, 0x14, 0xee, 0x43, 0x45, 0x2d, 0x3f, 0x9d,
+  0x82, 0x9d, 0xc8, 0x68, 0xb0, 0xa7, 0xf3, 0xb0,
+  0x53, 0xb9, 0x0d, 0x16, 0x5c, 0xf3, 0xb6, 0xec,
+  0xbe, 0x6e, 0xa7, 0x4e, 0x76, 0xf6, 0x1d, 0x3c,
+  0x8e, 0x5a, 0xa1, 0xe9, 0x68, 0x69, 0x3f, 0xf9,
+  0xcc, 0xe7, 0xbb, 0x05, 0x3b, 0x90, 0xd1, 0x46,
+  0x4f, 0xe7, 0x2b, 0x65, 0x15, 0x01, 0xd0, 0xf4,
+  0xef, 0xc4, 0xed, 0x87, 0x7d, 0x08, 0xda, 0x9c,
+  0x5d, 0x4a, 0x7f, 0xe7, 0x73, 0xdd, 0x82, 0x9d,
+  0xc8, 0x68, 0x8e, 0x67, 0xff, 0x39, 0x9c, 0xf7,
+  0x60, 0xa7, 0x72, 0x1a, 0x27, 0x29, 0xfc, 0xec,
+  0x14, 0xee, 0x43, 0x45, 0x99, 0x3f, 0x9d, 0x82,
+  0x9d, 0xc8, 0x68, 0xb7, 0x67, 0xff, 0x39, 0x9c,
+  0xf7, 0x60, 0xa7, 0x72, 0x1a, 0x29, 0x09, 0xff,
+  0x9d, 0xcf, 0x76, 0x0a, 0x77, 0x21, 0xa2, 0x52,
+  0x8a, 0x13, 0xb2, 0x69, 0x31, 0x8a, 0x5f, 0x3b,
+  0xb9, 0xdb, 0x7a, 0x94, 0xff, 0xb9, 0xee, 0xc1,
+  0x4e, 0xe4, 0x34, 0x4e, 0xd3, 0xff, 0xef, 0x6b,
+  0xa3, 0x15, 0xbf, 0xb5, 0xfa, 0xff, 0x10, 0xe9,
+  0x39, 0x88, 0x9f, 0xe4, 0x69, 0xff, 0xb9, 0x96,
+  0xc4, 0xeb, 0x2e, 0xf7, 0x9d, 0x3f, 0xf7, 0xf2,
+  0xdd, 0x46, 0x57, 0xfd, 0x49, 0xd3, 0x6c, 0x3b,
+  0x54, 0x43, 0xd5, 0x0e, 0x18, 0x8e, 0x2d, 0x88,
+  0x57, 0xcf, 0x85, 0x3b, 0x90, 0xd1, 0x16, 0x4f,
+  0xfb, 0x9e, 0xec, 0x14, 0xee, 0x43, 0x44, 0xbb,
+  0x3f, 0xff, 0x66, 0xb6, 0x5d, 0xee, 0xbf, 0xf8,
+  0x15, 0xaa, 0x80, 0xa9, 0x3b, 0x11, 0xa6, 0xc3,
+  0x0d, 0x84, 0x69, 0xff, 0xce, 0x67, 0x3d, 0xd8,
+  0x29, 0xdc, 0x86, 0x89, 0x8a, 0x7f, 0x3b, 0x05,
+  0x3b, 0x90, 0xd1, 0x54, 0xcf, 0xfe, 0x73, 0x39,
+  0xee, 0xc1, 0x4e, 0xe4, 0x34, 0x4e, 0x93, 0xfb,
+  0xdc, 0x2a, 0xfe, 0x6c, 0x74, 0xf9, 0xa5, 0x69,
+  0x6a, 0x74, 0xfc, 0x1c, 0xf3, 0x6c, 0xf9, 0xd3,
+  0xde, 0xb2, 0xbb, 0xc7, 0xad, 0x52, 0x89, 0xff,
+  0xb4, 0xad, 0xd6, 0x97, 0x68, 0xd7, 0x98, 0x74,
+  0x31, 0x10, 0x56, 0x39, 0x9f, 0xf7, 0x3d, 0xd8,
+  0x29, 0xdc, 0x86, 0x89, 0xde, 0x7d, 0x7d, 0x39,
+  0x9e, 0x2a, 0x4e, 0xd5, 0x39, 0xbc, 0x8c, 0x29,
+  0x84, 0x7c, 0x8d, 0x3f, 0xf9, 0xcc, 0xe7, 0xbb,
+  0x05, 0x3b, 0x90, 0xd1, 0x42, 0xcf, 0xfe, 0x73,
+  0x39, 0xee, 0xc1, 0x4e, 0xe4, 0x34, 0x52, 0x53,
+  0xff, 0xfb, 0x2a, 0xed, 0xf8, 0xd5, 0xb9, 0x97,
+  0xb2, 0xdf, 0x46, 0x1d, 0x14, 0x2e, 0x01, 0xbc,
+  0xe1, 0x14, 0x84, 0xed, 0x91, 0xf6, 0x81, 0x27,
+  0x45, 0x2d, 0x85, 0x29, 0xfc, 0xec, 0x14, 0xee,
+  0x43, 0x44, 0x49, 0x3f, 0xf9, 0xcc, 0xe7, 0xbb,
+  0x05, 0x3b, 0x90, 0xd1, 0x2f, 0x4f, 0x85, 0x3b,
+  0x90, 0xd1, 0x4b, 0xcf, 0xe5, 0xd5, 0xbf, 0xcc,
+  0x5a, 0x9d, 0x27, 0x61, 0xf3, 0x5c, 0xc2, 0x7f,
+  0x3b, 0x05, 0x3b, 0x90, 0xd1, 0x4e, 0x4f, 0xfb,
+  0xc3, 0xd5, 0xb6, 0x67, 0xd0, 0xe9, 0xff, 0x65,
+  0x94, 0x71, 0xc1, 0x08, 0x4a, 0x9b, 0xc1, 0x3a,
+  0x6a, 0x1d, 0xaa, 0x23, 0x76, 0x0e, 0xdb, 0xcf,
+  0x27, 0xc2, 0x9d, 0xc8, 0x68, 0xaf, 0x27, 0xff,
+  0xec, 0xd6, 0xcb, 0xbd, 0xd7, 0xff, 0x02, 0xb5,
+  0x50, 0x15, 0x27, 0x62, 0x23, 0x76, 0x0c, 0x27,
+  0xfe, 0x77, 0x3d, 0xd8, 0x29, 0xdc, 0x86, 0x89,
+  0x1e, 0x77, 0x80, 0xa7, 0x4e, 0x4c, 0x61, 0x4e,
+  0x2e, 0xe7, 0xc2, 0x9d, 0xc8, 0x68, 0x92, 0x27,
+  0x9d, 0xcf, 0x72, 0x9e, 0xce, 0x14, 0xcf, 0xfc,
+  0xee, 0x7b, 0xb0, 0x53, 0xb9, 0x0d, 0x12, 0x54,
+  0xf8, 0x53, 0xb9, 0x0d, 0x17, 0x8c, 0xfd, 0xa7,
+  0xe9, 0xea, 0x6a, 0x74, 0xfa, 0xb5, 0xbe, 0x21,
+  0xd3, 0xfc, 0xf7, 0x60, 0xa7, 0x72, 0x1a, 0x24,
+  0xd9, 0x3b, 0x11, 0x8f, 0x49, 0x80, 0x98, 0x71,
+  0x34, 0x2a, 0xe9, 0x4d, 0x07, 0x6f, 0x85, 0xc6,
+  0xa4, 0xfe, 0x86, 0x43, 0x50, 0xd1, 0x61, 0x5d,
+  0xa1, 0x81, 0x73, 0x7d, 0x23, 0x13, 0x85, 0x8d,
+  0xa5, 0xee, 0x88, 0xeb, 0x9f, 0x1e, 0x4e, 0xb1,
+  0xed, 0x65, 0xb9, 0x11, 0xdb, 0x29, 0x59, 0x2b,
+  0xec, 0xda, 0x67, 0x9e, 0xfd, 0x39, 0x89, 0xb3,
+  0x8e, 0xc1, 0xaa, 0x6a, 0x78, 0xd2, 0x3c, 0x19,
+  0x88, 0xa1, 0x8b, 0x4e, 0xd4, 0x75, 0x39, 0xe0,
+  0x12, 0xc3, 0x9b, 0xb8, 0x58, 0xfe, 0x79, 0x22,
+  0xb4, 0x8e, 0xbb, 0xd7, 0x22, 0x5a, 0x52, 0xbb,
+  0xdb, 0x4a, 0x60, 0x0c, 0xa0, 0xdd, 0x88, 0xf7,
+  0xb7, 0xce, 0x80, 0xb7, 0xce, 0xd3, 0x40,
 };
 
-static const unsigned kPreloadedHSTSBits = 94466;
+static const unsigned kPreloadedHSTSBits = 94452;
 
-static const unsigned kHSTSRootPosition = 93889;
+static const unsigned kHSTSRootPosition = 93875;
 
 #endif // NET_HTTP_TRANSPORT_SECURITY_STATE_STATIC_H_
diff --git a/net/http/transport_security_state_static.json b/net/http/transport_security_state_static.json
index 1e5484e..1997690 100644
--- a/net/http/transport_security_state_static.json
+++ b/net/http/transport_security_state_static.json
@@ -143,13 +143,6 @@
       ]
     },
     {
-      "name": "cryptoCat",
-      "static_spki_hashes": [
-        "DigiCertEVRoot",
-        "CryptoCat1"
-      ]
-    },
-    {
       "name": "lavabit",
       "static_spki_hashes": [
         "Libertylavabitcom"
@@ -575,7 +568,7 @@
     { "name": "www.developer.mydigipass.com", "mode": "force-https" },
     { "name": "sandbox.mydigipass.com", "mode": "force-https" },
     { "name": "www.sandbox.mydigipass.com", "mode": "force-https" },
-    { "name": "crypto.cat", "mode": "force-https", "pins": "cryptoCat" },
+    { "name": "crypto.cat", "mode": "force-https" },
     { "name": "bigshinylock.minazo.net", "include_subdomains": true, "mode": "force-https" },
     { "name": "crate.io", "include_subdomains": true, "mode": "force-https" },
     { "name": "twitter.com", "mode": "force-https", "pins": "twitterCom" },
diff --git a/net/http/transport_security_state_unittest.cc b/net/http/transport_security_state_unittest.cc
index eb72050..f5c640f 100644
--- a/net/http/transport_security_state_unittest.cc
+++ b/net/http/transport_security_state_unittest.cc
@@ -477,9 +477,6 @@
   EXPECT_TRUE(StaticShouldRedirect("www.sandbox.mydigipass.com"));
   EXPECT_FALSE(StaticShouldRedirect("foo.www.sandbox.mydigipass.com"));
 
-  EXPECT_TRUE(StaticShouldRedirect("crypto.cat"));
-  EXPECT_FALSE(StaticShouldRedirect("foo.crypto.cat"));
-
   EXPECT_TRUE(StaticShouldRedirect("bigshinylock.minazo.net"));
   EXPECT_TRUE(StaticShouldRedirect("foo.bigshinylock.minazo.net"));
 
diff --git a/pdf/pdfium/pdfium_page.cc b/pdf/pdfium/pdfium_page.cc
index d8a5dce..cd75a1b 100644
--- a/pdf/pdfium/pdfium_page.cc
+++ b/pdf/pdfium/pdfium_page.cc
@@ -16,6 +16,8 @@
 // Used when doing hit detection.
 #define kTolerance 20.0
 
+namespace {
+
 // Dictionary Value key names for returning the accessible page content as JSON.
 const char kPageWidth[] = "width";
 const char kPageHeight[] = "height";
@@ -33,6 +35,8 @@
 const char kTextNodeTypeURL[] = "url";
 const char kDocLinkURLPrefix[] = "#page";
 
+}  // namespace
+
 namespace chrome_pdf {
 
 PDFiumPage::PDFiumPage(PDFiumEngine* engine,
@@ -43,15 +47,21 @@
       page_(NULL),
       text_page_(NULL),
       index_(i),
+      loading_count_(0),
       rect_(r),
       calculated_links_(false),
       available_(available) {
 }
 
 PDFiumPage::~PDFiumPage() {
+  DCHECK_EQ(0, loading_count_);
 }
 
 void PDFiumPage::Unload() {
+  // Do not unload while in the middle of a load.
+  if (loading_count_)
+    return;
+
   if (text_page_) {
     FPDFText_ClosePage(text_page_);
     text_page_ = NULL;
@@ -71,6 +81,7 @@
   if (!available_)
     return NULL;
   if (!page_) {
+    ScopedLoadCounter scoped_load(this);
     page_ = FPDF_LoadPage(engine_->doc(), index_);
     if (page_ && engine_->form()) {
       FORM_OnAfterLoadPage(page_, engine_->form());
@@ -83,12 +94,18 @@
   ScopedUnsupportedFeature scoped_unsupported_feature(engine_);
   if (!available_)
     return NULL;
-  if (!page_)
+  if (!page_) {
+    ScopedLoadCounter scoped_load(this);
     page_ = FPDF_LoadPage(engine_->doc(), index_);
+  }
   return page_;
 }
 
 void PDFiumPage::ClosePrintPage() {
+  // Do not close |page_| while in the middle of a load.
+  if (loading_count_)
+    return;
+
   if (page_) {
     FPDF_ClosePage(page_);
     page_ = NULL;
@@ -98,8 +115,10 @@
 FPDF_TEXTPAGE PDFiumPage::GetTextPage() {
   if (!available_)
     return NULL;
-  if (!text_page_)
+  if (!text_page_) {
+    ScopedLoadCounter scoped_load(this);
     text_page_ = FPDFText_LoadPage(GetPage());
+  }
   return text_page_;
 }
 
@@ -468,6 +487,15 @@
       new_left, new_top, new_right - new_left + 1, new_bottom - new_top + 1);
 }
 
+PDFiumPage::ScopedLoadCounter::ScopedLoadCounter(PDFiumPage* page)
+    : page_(page) {
+  page_->loading_count_++;
+}
+
+PDFiumPage::ScopedLoadCounter::~ScopedLoadCounter() {
+  page_->loading_count_--;
+}
+
 PDFiumPage::Link::Link() {
 }
 
diff --git a/pdf/pdfium/pdfium_page.h b/pdf/pdfium/pdfium_page.h
index 22ea142..de4317e 100644
--- a/pdf/pdfium/pdfium_page.h
+++ b/pdf/pdfium/pdfium_page.h
@@ -34,9 +34,9 @@
   void Unload();
   // Gets the FPDF_PAGE for this page, loading and parsing it if necessary.
   FPDF_PAGE GetPage();
-  //Get the FPDF_PAGE for printing.
+  // Get the FPDF_PAGE for printing.
   FPDF_PAGE GetPrintPage();
-  //Close the printing page.
+  // Close the printing page.
   void ClosePrintPage();
 
   // Returns FPDF_TEXTPAGE for the page, loading and parsing it if necessary.
@@ -112,6 +112,15 @@
   base::Value* CreateTextNode(std::string text);
   base::Value* CreateURLNode(std::string text, std::string url);
 
+  class ScopedLoadCounter {
+   public:
+    explicit ScopedLoadCounter(PDFiumPage* page);
+    ~ScopedLoadCounter();
+
+   private:
+    PDFiumPage* const page_;
+  };
+
   struct Link {
     Link();
     ~Link();
@@ -125,6 +134,7 @@
   FPDF_PAGE page_;
   FPDF_TEXTPAGE text_page_;
   int index_;
+  int loading_count_;
   pp::Rect rect_;
   bool calculated_links_;
   std::vector<Link> links_;
diff --git a/sync/test/android/javatests/src/org/chromium/sync/test/util/MockAccountManager.java b/sync/test/android/javatests/src/org/chromium/sync/test/util/MockAccountManager.java
index 3b8e145..f67be2f 100644
--- a/sync/test/android/javatests/src/org/chromium/sync/test/util/MockAccountManager.java
+++ b/sync/test/android/javatests/src/org/chromium/sync/test/util/MockAccountManager.java
@@ -4,6 +4,8 @@
 
 package org.chromium.sync.test.util;
 
+import static org.chromium.base.test.util.ScalableTimeout.scaleTimeout;
+
 import android.accounts.Account;
 import android.accounts.AccountManager;
 import android.accounts.AccountManagerCallback;
@@ -22,14 +24,14 @@
 import android.os.AsyncTask;
 import android.os.Bundle;
 import android.os.Handler;
+import android.text.TextUtils;
 import android.util.Log;
 
-import static org.chromium.base.test.util.ScalableTimeout.scaleTimeout;
-
 import org.chromium.sync.signin.AccountManagerDelegate;
 import org.chromium.sync.signin.AccountManagerHelper;
 
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.List;
@@ -121,10 +123,17 @@
         if (mAccounts == null) {
             return new Account[0];
         } else {
-            Account[] accounts = new Account[mAccounts.size()];
-            int i = 0;
+            ArrayList<Account> validAccounts = new ArrayList<Account>();
             for (AccountHolder ah : mAccounts) {
-                accounts[i++] = ah.getAccount();
+                if (TextUtils.equals(ah.getAccount().type, type)) {
+                    validAccounts.add(ah.getAccount());
+                }
+            }
+
+            Account[] accounts = new Account[validAccounts.size()];
+            int i = 0;
+            for (Account account : validAccounts) {
+                accounts[i++] = account;
             }
             return accounts;
         }
diff --git a/third_party/android_crazy_linker/README.chromium b/third_party/android_crazy_linker/README.chromium
index 4892262..19d5675 100644
--- a/third_party/android_crazy_linker/README.chromium
+++ b/third_party/android_crazy_linker/README.chromium
@@ -59,3 +59,5 @@
 - Add method for enabling/disabling the memory fallback (disabled by default).
 
 - Add a check whether file is uncompressed in zip file.
+
+- Fix for crbug/444714 (Chrome_Android: Crash Report - -1DB24FB5)
diff --git a/third_party/android_crazy_linker/src/src/crazy_linker_line_reader.cpp b/third_party/android_crazy_linker/src/src/crazy_linker_line_reader.cpp
index 8c63370..1efa1d7 100644
--- a/third_party/android_crazy_linker/src/src/crazy_linker_line_reader.cpp
+++ b/third_party/android_crazy_linker/src/src/crazy_linker_line_reader.cpp
@@ -13,30 +13,29 @@
 
 namespace crazy {
 
-LineReader::LineReader() : fd_(), buff_(buff0_) {
-  Reset();
-  eof_ = true;
+LineReader::LineReader() : fd_(), buff_(NULL) {
+  Reset(true);
 }
 
-LineReader::LineReader(const char* path) : fd_(), buff_(buff0_) { Open(path); }
+LineReader::LineReader(const char* path) : fd_(), buff_(NULL) {
+  Open(path);
+}
 
-LineReader::~LineReader() { Reset(); }
+LineReader::~LineReader() {
+  ::free(buff_);
+}
 
 void LineReader::Open(const char* path) {
-  Reset();
-  eof_ = !fd_.OpenReadOnly(path);
+  Reset(!fd_.OpenReadOnly(path));
 }
 
-void LineReader::Reset() {
-  if (buff_ != buff0_)
-    ::free(buff_);
-
-  eof_ = false;
+void LineReader::Reset(bool eof) {
+  eof_ = eof;
   line_start_ = 0;
   line_len_ = 0;
   buff_size_ = 0;
-  buff_capacity_ = sizeof buff0_;
-  buff_ = buff0_;
+  buff_capacity_ = 128;
+  buff_ = static_cast<char*>(::realloc(buff_, buff_capacity_));
 }
 
 bool LineReader::GetNextLine() {
@@ -102,13 +101,9 @@
 
     // Before reading more data, grow the buffer if needed.
     if (buff_size_ == buff_capacity_) {
-      size_t new_capacity = buff_capacity_ * 2;
-      void* old_buff = (buff_ == buff0_) ? NULL : buff_;
-      buff_ = static_cast<char*>(::realloc(old_buff, new_capacity));
-      if (old_buff != buff_)
-        ::memcpy(buff_, buff0_, buff_capacity_);
+      buff_capacity_ *= 2;
+      buff_ = static_cast<char*>(::realloc(buff_, buff_capacity_));
 
-      buff_capacity_ = new_capacity;
       LLOG("%s: GROW buff_size=%d buff_capacity=%d '%.*s'\n",
            __FUNCTION__,
            buff_size_,
diff --git a/third_party/android_crazy_linker/src/src/crazy_linker_line_reader.h b/third_party/android_crazy_linker/src/src/crazy_linker_line_reader.h
index 0a77f29..fda9053 100644
--- a/third_party/android_crazy_linker/src/src/crazy_linker_line_reader.h
+++ b/third_party/android_crazy_linker/src/src/crazy_linker_line_reader.h
@@ -43,7 +43,7 @@
   size_t length() const;
 
  private:
-  void Reset();
+  void Reset(bool eof);
 
   FileDescriptor fd_;
   bool eof_;
@@ -52,7 +52,6 @@
   size_t buff_size_;
   size_t buff_capacity_;
   char* buff_;
-  char buff0_[128];
 };
 
 }  // namespace crazy
diff --git a/tools/perf/benchmarks/page_cycler.py b/tools/perf/benchmarks/page_cycler.py
index 56dd4de..a269621 100644
--- a/tools/perf/benchmarks/page_cycler.py
+++ b/tools/perf/benchmarks/page_cycler.py
@@ -10,57 +10,57 @@
 class PageCyclerBloat(benchmark.Benchmark):
   test = page_cycler.PageCycler
   page_set = page_sets.BloatPageSet
-  options = {'pageset_repeat': 10}
+  options = {'pageset_repeat': 6}
 
 
 class PageCyclerDhtml(benchmark.Benchmark):
   test = page_cycler.PageCycler
   page_set = page_sets.DhtmlPageSet
-  options = {'pageset_repeat': 10}
+  options = {'pageset_repeat': 6}
 
 
 class PageCyclerIntlArFaHe(benchmark.Benchmark):
   test = page_cycler.PageCycler
   page_set = page_sets.IntlArFaHePageSet
-  options = {'pageset_repeat': 10}
+  options = {'pageset_repeat': 6}
 
 
 @benchmark.Disabled('win')  # crbug.com/388337
 class PageCyclerIntlEsFrPtBr(benchmark.Benchmark):
   test = page_cycler.PageCycler
   page_set = page_sets.IntlEsFrPtBrPageSet
-  options = {'pageset_repeat': 10}
+  options = {'pageset_repeat': 6}
 
 
 class PageCyclerIntlHiRu(benchmark.Benchmark):
   test = page_cycler.PageCycler
   page_set = page_sets.IntlHiRuPageSet
-  options = {'pageset_repeat': 10}
+  options = {'pageset_repeat': 6}
 
 
 @benchmark.Disabled('android', 'win')  # crbug.com/379564, crbug.com/330909
 class PageCyclerIntlJaZh(benchmark.Benchmark):
   test = page_cycler.PageCycler
   page_set = page_sets.IntlJaZhPageSet
-  options = {'pageset_repeat': 10}
+  options = {'pageset_repeat': 6}
 
 
 class PageCyclerIntlKoThVi(benchmark.Benchmark):
   test = page_cycler.PageCycler
   page_set = page_sets.IntlKoThViPageSet
-  options = {'pageset_repeat': 10}
+  options = {'pageset_repeat': 6}
 
 
 class PageCyclerMorejs(benchmark.Benchmark):
   test = page_cycler.PageCycler
   page_set = page_sets.MorejsPageSet
-  options = {'pageset_repeat': 10}
+  options = {'pageset_repeat': 6}
 
 
 class PageCyclerMoz(benchmark.Benchmark):
   test = page_cycler.PageCycler
   page_set = page_sets.MozPageSet
-  options = {'pageset_repeat': 10}
+  options = {'pageset_repeat': 6}
 
 
 @benchmark.Disabled('linux', 'win')  # crbug.com/353260
@@ -72,7 +72,7 @@
   options = {
       'cold_load_percent': 100,
       'extra_wpr_args_as_string': '--shaping_type=proxy --net=cable',
-      'pageset_repeat': 5,
+      'pageset_repeat': 6,
   }
 
   def __init__(self):
@@ -86,21 +86,21 @@
 class PageCyclerTop10Mobile(benchmark.Benchmark):
   test = page_cycler.PageCycler
   page_set = page_sets.Top10MobilePageSet
-  options = {'pageset_repeat': 10}
+  options = {'pageset_repeat': 6}
 
 
 @benchmark.Disabled
 class PageCyclerKeyMobileSites(benchmark.Benchmark):
   test = page_cycler.PageCycler
   page_set = page_sets.KeyMobileSitesPageSet
-  options = {'pageset_repeat': 10}
+  options = {'pageset_repeat': 6}
 
 
 @benchmark.Disabled('android')  # crbug.com/357326
 class PageCyclerToughLayoutCases(benchmark.Benchmark):
   test = page_cycler.PageCycler
   page_set = page_sets.ToughLayoutCasesPageSet
-  options = {'pageset_repeat': 10}
+  options = {'pageset_repeat': 6}
 
 
 # crbug.com/273986: This test is really flakey on xp.
@@ -109,4 +109,4 @@
 class PageCyclerTypical25(benchmark.Benchmark):
   test = page_cycler.PageCycler
   page_set = page_sets.Typical25PageSet
-  options = {'pageset_repeat': 10}
+  options = {'pageset_repeat': 6}
diff --git a/ui/app_list/views/apps_grid_view.cc b/ui/app_list/views/apps_grid_view.cc
index 0e72a1b..bbc63b7 100644
--- a/ui/app_list/views/apps_grid_view.cc
+++ b/ui/app_list/views/apps_grid_view.cc
@@ -1180,8 +1180,9 @@
 }
 
 void AppsGridView::CalculateIdealBounds() {
-  // TODO(calamity): This fixes http://crbug.com/422604 on ChromeOS but it's
-  // unclear why. This should be investigated to fix the issue on Linux Ash.
+  // TODO(mgiuca): This is a work-around for http://crbug.com/422604. See
+  // comment in ContentsView::Layout for details. This should be removed once
+  // http://crbug.com/446407 is resolved.
   if (GetContentsBounds().IsEmpty())
     return;
 
diff --git a/ui/app_list/views/contents_view.cc b/ui/app_list/views/contents_view.cc
index c9ea276..f1ddb2b 100644
--- a/ui/app_list/views/contents_view.cc
+++ b/ui/app_list/views/contents_view.cc
@@ -335,6 +335,17 @@
   gfx::Rect rect(GetDefaultContentsBounds());
   if (rect.IsEmpty())
     return;
+  // TODO(mgiuca): Temporary work-around for http://crbug.com/441962 and
+  // http://crbug.com/446978. This will first be called while ContentsView is
+  // 0x0, which means that the child views will be positioned incorrectly in RTL
+  // mode (the position is based on the parent's size). When the parent is later
+  // resized, the children are not repositioned due to http://crbug.com/446407.
+  // Therefore, we must not position the children until the parent is the
+  // correct size.
+  // NOTE: There is a similar hack in AppsGridView::CalculateIdealBounds; both
+  // should be removed once http://crbug.com/446407 is resolved.
+  if (GetContentsBounds().IsEmpty())
+    return;
 
   gfx::Rect offscreen_target(rect);
   offscreen_target.set_x(-rect.width());
diff --git a/ui/display/chromeos/x11/native_display_event_dispatcher_x11.cc b/ui/display/chromeos/x11/native_display_event_dispatcher_x11.cc
index f5c2e2e..9e206ac 100644
--- a/ui/display/chromeos/x11/native_display_event_dispatcher_x11.cc
+++ b/ui/display/chromeos/x11/native_display_event_dispatcher_x11.cc
@@ -75,10 +75,18 @@
           static_cast<const DisplaySnapshotX11*>(*it);
       const DisplayModeX11* x11_mode =
           static_cast<const DisplayModeX11*>(x11_output->current_mode());
+      RRMode mode_id = x11_mode ? x11_mode->mode_id() : None;
+
+      // Update if we failed to fetch the external display's ID before.
+      // Internal display's EDID should always be available.
+      bool display_id_needs_update =
+          x11_output->type() != ui::DISPLAY_CONNECTION_TYPE_INTERNAL &&
+          !x11_output->display_id();
 
       if (x11_output->output() == output_change_event->output) {
         if (connected && x11_output->crtc() == output_change_event->crtc &&
-            x11_mode->mode_id() == output_change_event->mode) {
+            mode_id == output_change_event->mode &&
+            !display_id_needs_update) {
           VLOG(1) << "Ignoring event describing already-cached state";
           return POST_DISPATCH_PERFORM_DEFAULT;
         }
diff --git a/ui/display/chromeos/x11/native_display_event_dispatcher_x11_unittest.cc b/ui/display/chromeos/x11/native_display_event_dispatcher_x11_unittest.cc
index de87796..eb125f3 100644
--- a/ui/display/chromeos/x11/native_display_event_dispatcher_x11_unittest.cc
+++ b/ui/display/chromeos/x11/native_display_event_dispatcher_x11_unittest.cc
@@ -18,15 +18,18 @@
 
 namespace {
 
-DisplaySnapshotX11* CreateOutput(RROutput output, RRCrtc crtc) {
+DisplaySnapshotX11* CreateOutput(int64_t id,
+                                 DisplayConnectionType type,
+                                 RROutput output,
+                                 RRCrtc crtc) {
   static const DisplayModeX11* kDefaultDisplayMode =
       new DisplayModeX11(gfx::Size(1, 1), false, 60.0f, 20);
 
   DisplaySnapshotX11* snapshot = new DisplaySnapshotX11(
-      0,
+      id,
       gfx::Point(0, 0),
       gfx::Size(0, 0),
-      DISPLAY_CONNECTION_TYPE_UNKNOWN,
+      type,
       false,
       false,
       std::string(),
@@ -40,6 +43,20 @@
   return snapshot;
 }
 
+DisplaySnapshotX11* CreateExternalOutput(RROutput output, RRCrtc crtc) {
+  return CreateOutput(static_cast<int64_t>(output),
+                      DISPLAY_CONNECTION_TYPE_UNKNOWN,
+                      output,
+                      crtc);
+}
+
+DisplaySnapshotX11* CreateInternalOutput(RROutput output, RRCrtc crtc) {
+  return CreateOutput(0,
+                      DISPLAY_CONNECTION_TYPE_INTERNAL,
+                      output,
+                      crtc);
+}
+
 class TestHelperDelegate : public NativeDisplayDelegateX11::HelperDelegate {
  public:
   TestHelperDelegate();
@@ -169,7 +186,7 @@
 
   // Simulate addition of the first output to the cached output list.
   ScopedVector<DisplaySnapshot> outputs;
-  outputs.push_back(CreateOutput(1, 10));
+  outputs.push_back(CreateExternalOutput(1, 10));
   helper_delegate_->set_cached_outputs(outputs.get());
 
   DispatchOutputChangeEvent(2, 11, 20, true);
@@ -178,7 +195,7 @@
 
 TEST_F(NativeDisplayEventDispatcherX11Test, CheckNotificationOnDisconnect) {
   ScopedVector<DisplaySnapshot> outputs;
-  outputs.push_back(CreateOutput(1, 10));
+  outputs.push_back(CreateExternalOutput(1, 10));
   helper_delegate_->set_cached_outputs(outputs.get());
 
   DispatchOutputChangeEvent(1, 10, 20, false);
@@ -187,7 +204,7 @@
 
 TEST_F(NativeDisplayEventDispatcherX11Test, CheckNotificationOnModeChange) {
   ScopedVector<DisplaySnapshot> outputs;
-  outputs.push_back(CreateOutput(1, 10));
+  outputs.push_back(CreateExternalOutput(1, 10));
   helper_delegate_->set_cached_outputs(outputs.get());
 
   DispatchOutputChangeEvent(1, 10, 21, true);
@@ -196,7 +213,7 @@
 
 TEST_F(NativeDisplayEventDispatcherX11Test, CheckNotificationOnSecondOutput) {
   ScopedVector<DisplaySnapshot> outputs;
-  outputs.push_back(CreateOutput(1, 10));
+  outputs.push_back(CreateExternalOutput(1, 10));
   helper_delegate_->set_cached_outputs(outputs.get());
 
   DispatchOutputChangeEvent(2, 11, 20, true);
@@ -205,7 +222,7 @@
 
 TEST_F(NativeDisplayEventDispatcherX11Test, CheckNotificationOnDifferentCrtc) {
   ScopedVector<DisplaySnapshot> outputs;
-  outputs.push_back(CreateOutput(1, 10));
+  outputs.push_back(CreateExternalOutput(1, 10));
   helper_delegate_->set_cached_outputs(outputs.get());
 
   DispatchOutputChangeEvent(1, 11, 20, true);
@@ -215,8 +232,8 @@
 TEST_F(NativeDisplayEventDispatcherX11Test,
        CheckNotificationOnSecondOutputDisconnect) {
   ScopedVector<DisplaySnapshot> outputs;
-  outputs.push_back(CreateOutput(1, 10));
-  outputs.push_back(CreateOutput(2, 11));
+  outputs.push_back(CreateExternalOutput(1, 10));
+  outputs.push_back(CreateExternalOutput(2, 11));
   helper_delegate_->set_cached_outputs(outputs.get());
 
   DispatchOutputChangeEvent(2, 11, 20, false);
@@ -226,8 +243,8 @@
 TEST_F(NativeDisplayEventDispatcherX11Test,
        AvoidDuplicateNotificationOnSecondOutputDisconnect) {
   ScopedVector<DisplaySnapshot> outputs;
-  outputs.push_back(CreateOutput(1, 10));
-  outputs.push_back(CreateOutput(2, 11));
+  outputs.push_back(CreateExternalOutput(1, 10));
+  outputs.push_back(CreateExternalOutput(2, 11));
   helper_delegate_->set_cached_outputs(outputs.get());
 
   DispatchOutputChangeEvent(2, 11, 20, false);
@@ -248,8 +265,8 @@
       NativeDisplayEventDispatcherX11::kUseCacheAfterStartupMs / 2 + 1;
 
   ScopedVector<DisplaySnapshot> outputs;
-  outputs.push_back(CreateOutput(1, 10));
-  outputs.push_back(CreateOutput(2, 11));
+  outputs.push_back(CreateExternalOutput(1, 10));
+  outputs.push_back(CreateExternalOutput(2, 11));
   helper_delegate_->set_cached_outputs(outputs.get());
 
   EXPECT_EQ(0, helper_delegate_->num_calls_notify_observers());
@@ -288,4 +305,25 @@
   EXPECT_EQ(4, helper_delegate_->num_calls_notify_observers());
 }
 
+TEST_F(NativeDisplayEventDispatcherX11Test,
+       UpdateMissingExternalDisplayId) {
+  ScopedVector<DisplaySnapshot> outputs;
+  outputs.push_back(CreateInternalOutput(1, 10));
+  helper_delegate_->set_cached_outputs(outputs.get());
+
+  ASSERT_EQ(0, helper_delegate_->num_calls_notify_observers());
+
+  // Internal display's ID can be zero and not updated.
+  DispatchOutputChangeEvent(1, 10, 20, true);
+  EXPECT_EQ(0, helper_delegate_->num_calls_notify_observers());
+
+  outputs.clear();
+  outputs.push_back(CreateOutput(0, DISPLAY_CONNECTION_TYPE_UNKNOWN, 2, 11));
+  helper_delegate_->set_cached_outputs(outputs.get());
+
+  // External display should be updated if the id is zero.
+  DispatchOutputChangeEvent(2, 11, 20, true);
+  EXPECT_EQ(1, helper_delegate_->num_calls_notify_observers());
+}
+
 }  // namespace ui