diff --git a/DEPS b/DEPS
index 606d84d..ab82ef5f 100644
--- a/DEPS
+++ b/DEPS
@@ -634,7 +634,7 @@
     Var('chromium_git') + '/external/khronosgroup/webgl.git' + '@' + '05591bbeae6592fd924caec8e728a4ea86cbb8c9',
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + 'da5ae12563035c108600d5a2dcbb17c0c22987c1', # commit position 20628
+    Var('webrtc_git') + '/src.git' + '@' + '22a77a1b1d9cd6e55af14c895b33b86be4ec53c7', # commit position 20628
 
   'src/third_party/xdg-utils': {
       'url': Var('chromium_git') + '/chromium/deps/xdg-utils.git' + '@' + 'd80274d5869b17b8c9067a1022e4416ee7ed5e0d',
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/OWNERS b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/OWNERS
index 6d22a37..e142f7e3 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/OWNERS
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/OWNERS
@@ -1,4 +1,3 @@
-bsazonov@chromium.org
-gogerald@chromium.org
+file://chrome/android/java/src/org/chromium/chrome/browser/signin/OWNERS
 
 # COMPONENT: Services>Signin
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/signin/OWNERS b/chrome/android/junit/src/org/chromium/chrome/browser/signin/OWNERS
new file mode 100644
index 0000000..e142f7e3
--- /dev/null
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/signin/OWNERS
@@ -0,0 +1,3 @@
+file://chrome/android/java/src/org/chromium/chrome/browser/signin/OWNERS
+
+# COMPONENT: Services>Signin
diff --git a/chrome/browser/android/ntp/content_suggestions_notifier_service_unittest.cc b/chrome/browser/android/ntp/content_suggestions_notifier_service_unittest.cc
index c95ec7e..be1b703 100644
--- a/chrome/browser/android/ntp/content_suggestions_notifier_service_unittest.cc
+++ b/chrome/browser/android/ntp/content_suggestions_notifier_service_unittest.cc
@@ -61,7 +61,7 @@
 
 class FakeContentSuggestionsService : public ContentSuggestionsService {
  public:
-  explicit FakeContentSuggestionsService(PrefService* prefs)
+  FakeContentSuggestionsService(PrefService* prefs, base::Clock* clock)
       : ContentSuggestionsService(
             ContentSuggestionsService::ENABLED,
             /*signin_manager=*/nullptr,
@@ -69,9 +69,7 @@
             /*large_icon_cache=*/nullptr,
             prefs,
             base::MakeUnique<FakeCategoryRanker>(),
-            base::MakeUnique<UserClassifier>(
-                nullptr,
-                base::MakeUnique<base::SimpleTestClock>()),
+            base::MakeUnique<UserClassifier>(nullptr, clock),
             /*remote_suggestions_scheduler=*/nullptr,
             base::MakeUnique<ntp_snippets::Logger>()) {}
 };
@@ -158,7 +156,7 @@
   ContentSuggestionsNotifierServiceTest()
       : application_state_(APPLICATION_STATE_HAS_PAUSED_ACTIVITIES),
         prefs_(RegisteredPrefs()),
-        suggestions_(prefs_.get()),
+        suggestions_(prefs_.get(), &clock_),
         notifier_(new testing::StrictMock<MockContentSuggestionsNotifier>),
         notifier_ownership_(notifier_),
         provider_(&suggestions_) {
@@ -186,6 +184,7 @@
 
   ApplicationState application_state_;
   std::unique_ptr<sync_preferences::TestingPrefServiceSyncable> prefs_;
+  base::SimpleTestClock clock_;
   FakeContentSuggestionsService suggestions_;
   testing::StrictMock<MockContentSuggestionsNotifier>* notifier_;
   std::unique_ptr<ContentSuggestionsNotifier> notifier_ownership_;
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
index 82d9180b..df9749e 100644
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -1151,12 +1151,14 @@
   if (!profile)
     return url;
 
+#if !defined(OS_ANDROID)
   // If the input |url| should be assigned to the Instant renderer, make its
   // effective URL distinct from other URLs on the search provider's domain.
   // This needs to happen even if |url| corresponds to an isolated origin; see
   // https://crbug.com/755595.
   if (search::ShouldAssignURLToInstantRenderer(url, profile))
     return search::GetEffectiveURLForInstant(url, profile);
+#endif
 
 #if BUILDFLAG(ENABLE_EXTENSIONS)
   return ChromeContentBrowserClientExtensionsPart::GetEffectiveURL(
@@ -1177,8 +1179,10 @@
   if (!profile)
     return false;
 
+#if !defined(OS_ANDROID)
   if (search::ShouldUseProcessPerSiteForInstantURL(effective_url, profile))
     return true;
+#endif
 
 #if BUILDFLAG(ENABLE_EXTENSIONS)
   return ChromeContentBrowserClientExtensionsPart::ShouldUseProcessPerSite(
diff --git a/chrome/browser/ntp_snippets/content_suggestions_service_factory.cc b/chrome/browser/ntp_snippets/content_suggestions_service_factory.cc
index 515c067..5bd4ca7 100644
--- a/chrome/browser/ntp_snippets/content_suggestions_service_factory.cc
+++ b/chrome/browser/ntp_snippets/content_suggestions_service_factory.cc
@@ -215,7 +215,7 @@
 
   auto provider = base::MakeUnique<DownloadSuggestionsProvider>(
       service, offline_page_model, download_manager, download_history,
-      profile->GetPrefs(), base::MakeUnique<base::DefaultClock>());
+      profile->GetPrefs(), base::DefaultClock::GetInstance());
   service->RegisterProvider(std::move(provider));
 }
 
@@ -311,7 +311,7 @@
       base::Bind(
           &data_decoder::SafeJsonParser::Parse,
           content::ServiceManagerConnection::GetForProcess()->GetConnector()),
-      base::MakeUnique<base::DefaultClock>(),
+      base::DefaultClock::GetInstance(),
       /*token_validation_timer=*/base::MakeUnique<base::OneShotTimer>(),
       /*forced_subscription_timer=*/base::MakeUnique<base::OneShotTimer>());
 }
@@ -479,7 +479,7 @@
   PrefService* pref_service = profile->GetPrefs();
 
   auto user_classifier = base::MakeUnique<UserClassifier>(
-      pref_service, base::MakeUnique<base::DefaultClock>());
+      pref_service, base::DefaultClock::GetInstance());
   auto* user_classifier_raw = user_classifier.get();
 
 #if BUILDFLAG(ENABLE_OFFLINE_PAGES)
@@ -499,7 +499,7 @@
 #endif  // OS_ANDROID
   auto scheduler = base::MakeUnique<RemoteSuggestionsSchedulerImpl>(
       persistent_scheduler, user_classifier_raw, pref_service,
-      g_browser_process->local_state(), base::MakeUnique<base::DefaultClock>(),
+      g_browser_process->local_state(), base::DefaultClock::GetInstance(),
       raw_debug_logger);
 
   // Create the ContentSuggestionsService.
@@ -511,7 +511,7 @@
       LargeIconServiceFactory::GetForBrowserContext(profile);
   std::unique_ptr<CategoryRanker> category_ranker =
       ntp_snippets::BuildSelectedCategoryRanker(
-          pref_service, base::MakeUnique<base::DefaultClock>(),
+          pref_service, base::DefaultClock::GetInstance(),
           GetIsChromeHomeEnabled());
 
   auto* service = new ContentSuggestionsService(
diff --git a/chrome/browser/ntp_snippets/download_suggestions_provider.cc b/chrome/browser/ntp_snippets/download_suggestions_provider.cc
index 1779f03..217d2ae 100644
--- a/chrome/browser/ntp_snippets/download_suggestions_provider.cc
+++ b/chrome/browser/ntp_snippets/download_suggestions_provider.cc
@@ -150,7 +150,7 @@
     content::DownloadManager* download_manager,
     DownloadHistory* download_history,
     PrefService* pref_service,
-    std::unique_ptr<base::Clock> clock)
+    base::Clock* clock)
     : ContentSuggestionsProvider(observer),
       category_status_(CategoryStatus::AVAILABLE_LOADING),
       provided_category_(Category::FromKnownCategory(
@@ -159,7 +159,7 @@
       download_manager_(download_manager),
       download_history_(download_history),
       pref_service_(pref_service),
-      clock_(std::move(clock)),
+      clock_(clock),
       is_asset_downloads_initialization_complete_(false),
       weak_ptr_factory_(this) {
   observer->OnCategoryStatusChanged(this, provided_category_, category_status_);
diff --git a/chrome/browser/ntp_snippets/download_suggestions_provider.h b/chrome/browser/ntp_snippets/download_suggestions_provider.h
index 7696b39..6aca285 100644
--- a/chrome/browser/ntp_snippets/download_suggestions_provider.h
+++ b/chrome/browser/ntp_snippets/download_suggestions_provider.h
@@ -51,7 +51,7 @@
       content::DownloadManager* download_manager,
       DownloadHistory* download_history,
       PrefService* pref_service,
-      std::unique_ptr<base::Clock> clock);
+      base::Clock* clock);
   ~DownloadSuggestionsProvider() override;
 
   // ContentSuggestionsProvider implementation.
@@ -217,7 +217,7 @@
   content::DownloadManager* download_manager_;
   DownloadHistory* download_history_;
   PrefService* pref_service_;
-  std::unique_ptr<base::Clock> clock_;
+  base::Clock* clock_;
 
   // Cached offline page downloads. If there are not enough asset downloads, all
   // of these could be shown (they are the most recently visited, not dismissed
diff --git a/chrome/browser/ntp_snippets/download_suggestions_provider_unittest.cc b/chrome/browser/ntp_snippets/download_suggestions_provider_unittest.cc
index f13bef97..68837481a 100644
--- a/chrome/browser/ntp_snippets/download_suggestions_provider_unittest.cc
+++ b/chrome/browser/ntp_snippets/download_suggestions_provider_unittest.cc
@@ -279,19 +279,17 @@
     EXPECT_CALL(observer_, OnSuggestionInvalidated(_, _)).Times(AnyNumber());
   }
 
-  DownloadSuggestionsProvider* CreateLoadedProvider(
-      bool show_assets,
-      bool show_offline_pages,
-      std::unique_ptr<base::Clock> clock) {
-    CreateProvider(show_assets, show_offline_pages, std::move(clock));
+  DownloadSuggestionsProvider* CreateLoadedProvider(bool show_assets,
+                                                    bool show_offline_pages,
+                                                    base::Clock* clock) {
+    CreateProvider(show_assets, show_offline_pages, clock);
     FireHistoryQueryComplete();
     return provider_.get();
   }
 
-  DownloadSuggestionsProvider* CreateProvider(
-      bool show_assets,
-      bool show_offline_pages,
-      std::unique_ptr<base::Clock> clock) {
+  DownloadSuggestionsProvider* CreateProvider(bool show_assets,
+                                              bool show_offline_pages,
+                                              base::Clock* clock) {
     DCHECK(!provider_);
     DCHECK(show_assets || show_offline_pages);
 
@@ -300,7 +298,7 @@
     provider_ = base::MakeUnique<DownloadSuggestionsProvider>(
         &observer_, show_offline_pages ? &offline_pages_model_ : nullptr,
         show_assets ? &downloads_manager_ : nullptr, &download_history_,
-        pref_service(), std::move(clock));
+        pref_service(), clock);
     return provider_.get();
   }
 
@@ -404,7 +402,7 @@
                                                  /*is_download_asset=*/false,
                                                  FILE_PATH_LITERAL(""), "")))));
   CreateLoadedProvider(/*show_assets=*/true, /*show_offline_pages=*/true,
-                       base::MakeUnique<base::DefaultClock>());
+                       base::DefaultClock::GetInstance());
 }
 
 TEST_F(DownloadSuggestionsProviderTest,
@@ -415,7 +413,7 @@
   EXPECT_CALL(*observer(),
               OnNewSuggestions(_, downloads_category(), SizeIs(0)));
   CreateLoadedProvider(/*show_assets=*/true, /*show_offline_pages=*/true,
-                       base::MakeUnique<base::DefaultClock>());
+                       base::DefaultClock::GetInstance());
 
   std::vector<std::unique_ptr<FakeDownloadItem>> asset_downloads =
       CreateDummyAssetDownloads({1, 2});
@@ -457,7 +455,7 @@
                                                 HasUrl("http://dummy.com/1"),
                                                 HasUrl("http://dummy.com/2"))));
   CreateLoadedProvider(/*show_assets=*/true, /*show_offline_pages=*/true,
-                       base::MakeUnique<base::DefaultClock>());
+                       base::DefaultClock::GetInstance());
 
   std::vector<std::unique_ptr<FakeDownloadItem>> asset_downloads =
       CreateDummyAssetDownloads({1, 2});
@@ -496,14 +494,14 @@
 
   *(offline_pages_model()->mutable_items()) = offline_pages;
 
-  auto test_clock = base::MakeUnique<base::SimpleTestClock>();
-  test_clock->SetNow(now);
+  base::SimpleTestClock test_clock;
+  test_clock.SetNow(now);
   EXPECT_CALL(*observer(),
               OnNewSuggestions(_, downloads_category(),
                                ElementsAre(HasUrl("http://dummy.com/1"),
                                            HasUrl("http://dummy.com/0"))));
   CreateLoadedProvider(/*show_assets=*/true, /*show_offline_pages=*/true,
-                       std::move(test_clock));
+                       &test_clock);
 
   std::vector<std::unique_ptr<FakeDownloadItem>> asset_downloads =
       CreateDummyAssetDownloads({2, 3});
@@ -544,7 +542,7 @@
                                             HasUrl("http://download.com/1"),
                                             HasUrl("http://download.com/2"))));
   CreateLoadedProvider(/*show_assets=*/true, /*show_offline_pages=*/true,
-                       base::MakeUnique<base::DefaultClock>());
+                       base::DefaultClock::GetInstance());
 
   EXPECT_CALL(*observer(), OnNewSuggestions(_, _, _)).Times(0);
   EXPECT_CALL(*observer(), OnSuggestionInvalidated(_, _)).Times(0);
@@ -571,7 +569,7 @@
                                             HasUrl("http://download.com/1"),
                                             HasUrl("http://download.com/2"))));
   CreateLoadedProvider(/*show_assets=*/true, /*show_offline_pages=*/true,
-                       base::MakeUnique<base::DefaultClock>());
+                       base::DefaultClock::GetInstance());
 
   provider()->DismissSuggestion(
       GetDummySuggestionId(1, /*is_offline_page=*/true));
@@ -600,7 +598,7 @@
                                             HasUrl("http://download.com/1"),
                                             HasUrl("http://download.com/2"))));
   CreateLoadedProvider(/*show_assets=*/true, /*show_offline_pages=*/true,
-                       base::MakeUnique<base::DefaultClock>());
+                       base::DefaultClock::GetInstance());
 
   provider()->DismissSuggestion(
       GetDummySuggestionId(1, /*is_offline_page=*/true));
@@ -625,7 +623,7 @@
                                             HasUrl("http://download.com/1"),
                                             HasUrl("http://download.com/2"))));
   CreateLoadedProvider(/*show_assets=*/true, /*show_offline_pages=*/true,
-                       base::MakeUnique<base::DefaultClock>());
+                       base::DefaultClock::GetInstance());
 
   provider()->DismissSuggestion(
       GetDummySuggestionId(1, /*is_offline_page=*/true));
@@ -657,7 +655,7 @@
                                             HasUrl("http://download.com/1"),
                                             HasUrl("http://download.com/2"))));
   CreateLoadedProvider(/*show_assets=*/true, /*show_offline_pages=*/true,
-                       base::MakeUnique<base::DefaultClock>());
+                       base::DefaultClock::GetInstance());
 
   provider()->DismissSuggestion(
       GetDummySuggestionId(1, /*is_offline_page=*/true));
@@ -688,7 +686,7 @@
                                             HasUrl("http://download.com/4"),
                                             HasUrl("http://download.com/5"))));
   CreateLoadedProvider(/*show_assets=*/true, /*show_offline_pages=*/true,
-                       base::MakeUnique<base::DefaultClock>());
+                       base::DefaultClock::GetInstance());
 
   provider()->DismissSuggestion(
       GetDummySuggestionId(1, /*is_offline_page=*/false));
@@ -721,7 +719,7 @@
                                             HasUrl("http://dummy.com/2"),
                                             HasUrl("http://download.com/1"))));
   CreateLoadedProvider(/*show_assets=*/true, /*show_offline_pages=*/true,
-                       base::MakeUnique<base::DefaultClock>());
+                       base::DefaultClock::GetInstance());
 
   // We add another item manually, so that when it gets deleted it is not
   // present in DownloadsManager list.
@@ -762,7 +760,7 @@
                                             HasUrl("http://download.com/4"),
                                             HasUrl("http://download.com/5"))));
   CreateLoadedProvider(/*show_assets=*/true, /*show_offline_pages=*/true,
-                       base::MakeUnique<base::DefaultClock>());
+                       base::DefaultClock::GetInstance());
 
   // Note that |CreateDummyAssetDownloads| creates items "downloaded" before
   // |base::Time::Now()|, so for a new item the time is set in future to enforce
@@ -807,7 +805,7 @@
                                                 HasUrl("http://dummy.com/2"),
                                                 HasUrl("http://dummy.com/3"))));
   CreateLoadedProvider(/*show_assets=*/true, /*show_offline_pages=*/true,
-                       base::MakeUnique<base::DefaultClock>());
+                       base::DefaultClock::GetInstance());
 
   provider()->DismissSuggestion(
       GetDummySuggestionId(1, /*is_offline_page=*/true));
@@ -838,7 +836,7 @@
                        UnorderedElementsAre(HasUrl("http://download.com/1"),
                                             HasUrl("http://download.com/2"))));
   CreateLoadedProvider(/*show_assets=*/true, /*show_offline_pages=*/true,
-                       base::MakeUnique<base::DefaultClock>());
+                       base::DefaultClock::GetInstance());
 
   provider()->DismissSuggestion(
       GetDummySuggestionId(1, /*is_offline_page=*/false));
@@ -860,7 +858,7 @@
                        UnorderedElementsAre(HasUrl("http://download.com/1"),
                                             HasUrl("http://download.com/2"))));
   CreateLoadedProvider(/*show_assets=*/true, /*show_offline_pages=*/true,
-                       base::MakeUnique<base::DefaultClock>());
+                       base::DefaultClock::GetInstance());
 }
 
 TEST_F(DownloadSuggestionsProviderTest,
@@ -873,7 +871,7 @@
                                                 HasUrl("http://dummy.com/1"),
                                                 HasUrl("http://dummy.com/2"))));
   CreateProvider(/*show_assets=*/false, /*show_offline_pages=*/true,
-                 base::MakeUnique<base::DefaultClock>());
+                 base::DefaultClock::GetInstance());
   FireOfflinePageModelLoaded();
 }
 
@@ -883,7 +881,7 @@
 
   EXPECT_CALL(*observer(), OnNewSuggestions(_, _, _)).Times(0);
   CreateProvider(/*show_assets=*/true, /*show_offline_pages=*/true,
-                 base::MakeUnique<base::DefaultClock>());
+                 base::DefaultClock::GetInstance());
 
   *(downloads_manager()->mutable_items()) = CreateDummyAssetDownloads({1, 2});
   EXPECT_CALL(
@@ -904,7 +902,7 @@
       OnNewSuggestions(_, downloads_category(),
                        UnorderedElementsAre(HasUrl("http://download.com/1"))));
   CreateLoadedProvider(/*show_assets=*/true, /*show_offline_pages=*/true,
-                       base::MakeUnique<base::DefaultClock>());
+                       base::DefaultClock::GetInstance());
 
   EXPECT_CALL(*observer(),
               OnSuggestionInvalidated(
@@ -922,7 +920,7 @@
   EXPECT_CALL(*observer(),
               OnNewSuggestions(_, downloads_category(), IsEmpty()));
   CreateLoadedProvider(/*show_assets=*/true, /*show_offline_pages=*/false,
-                       base::MakeUnique<base::DefaultClock>());
+                       base::DefaultClock::GetInstance());
 
   std::vector<std::unique_ptr<FakeDownloadItem>> asset_downloads =
       CreateDummyAssetDownloads({1});
@@ -945,7 +943,7 @@
                                                 HasUrl("http://dummy.com/1"),
                                                 HasUrl("http://dummy.com/2"))));
   CreateProvider(/*show_assets=*/false, /*show_offline_pages=*/true,
-                 base::MakeUnique<base::DefaultClock>());
+                 base::DefaultClock::GetInstance());
   downloads_manager()->NotifyDownloadCreated(
       downloads_manager()->items()[0].get());
   // This notification should not reach the provider, because the asset
@@ -966,7 +964,7 @@
                        UnorderedElementsAre(HasUrl("http://download.com/1"),
                                             HasUrl("http://download.com/2"))));
   CreateLoadedProvider(/*show_assets=*/true, /*show_offline_pages=*/false,
-                       base::MakeUnique<base::DefaultClock>());
+                       base::DefaultClock::GetInstance());
 }
 
 TEST_F(DownloadSuggestionsProviderTest,
@@ -980,7 +978,7 @@
                                                 HasUrl("http://dummy.com/1"),
                                                 HasUrl("http://dummy.com/2"))));
   CreateProvider(/*show_assets=*/false, /*show_offline_pages=*/true,
-                 base::MakeUnique<base::DefaultClock>());
+                 base::DefaultClock::GetInstance());
 }
 
 TEST_F(DownloadSuggestionsProviderTest, ShouldStoreDismissedSuggestions) {
@@ -992,7 +990,7 @@
   *(downloads_manager()->mutable_items()) = CreateDummyAssetDownloads({1});
   EXPECT_CALL(*observer(), OnNewSuggestions(_, downloads_category(), _));
   CreateLoadedProvider(/*show_assets=*/true, /*show_offline_pages=*/true,
-                       base::MakeUnique<base::DefaultClock>());
+                       base::DefaultClock::GetInstance());
   provider()->DismissSuggestion(
       GetDummySuggestionId(1, /*is_offline_page=*/true));
   provider()->DismissSuggestion(
@@ -1002,7 +1000,7 @@
 
   EXPECT_CALL(*observer(), OnNewSuggestions(_, downloads_category(), _));
   CreateLoadedProvider(/*show_assets=*/true, /*show_offline_pages=*/true,
-                       base::MakeUnique<base::DefaultClock>());
+                       base::DefaultClock::GetInstance());
   EXPECT_THAT(GetDismissedSuggestions(),
               UnorderedElementsAre(HasUrl("http://dummy.com/1"),
                                    HasUrl("http://download.com/1")));
@@ -1017,7 +1015,7 @@
   *(downloads_manager()->mutable_items()) = CreateDummyAssetDownloads({1});
   EXPECT_CALL(*observer(), OnNewSuggestions(_, downloads_category(), _));
   CreateLoadedProvider(/*show_assets=*/true, /*show_offline_pages=*/false,
-                       base::MakeUnique<base::DefaultClock>());
+                       base::DefaultClock::GetInstance());
   provider()->DismissSuggestion(
       GetDummySuggestionId(1, /*is_offline_page=*/false));
   ASSERT_THAT(GetDismissedSuggestions(),
@@ -1029,7 +1027,7 @@
 
   EXPECT_CALL(*observer(), OnNewSuggestions(_, _, _)).Times(0);
   CreateProvider(/*show_assets=*/true, /*show_offline_pages=*/false,
-                 base::MakeUnique<base::DefaultClock>());
+                 base::DefaultClock::GetInstance());
 
   // Dismissed IDs should not be pruned yet, because the downloads list at the
   // manager is not complete.
@@ -1081,10 +1079,10 @@
       OnNewSuggestions(_, downloads_category(),
                        UnorderedElementsAre(HasUrl("http://dummy.com/0"),
                                             HasUrl("http://download.com/0"))));
-  auto test_clock = base::MakeUnique<base::SimpleTestClock>();
-  test_clock->SetNow(now);
+  base::SimpleTestClock test_clock;
+  test_clock.SetNow(now);
   CreateLoadedProvider(/*show_assets=*/true, /*show_offline_pages=*/true,
-                       std::move(test_clock));
+                       &test_clock);
 }
 
 TEST_F(DownloadSuggestionsProviderTest,
@@ -1110,10 +1108,10 @@
       *observer(),
       OnNewSuggestions(_, downloads_category(),
                        UnorderedElementsAre(HasUrl("http://dummy.com/0"))));
-  auto test_clock = base::MakeUnique<base::SimpleTestClock>();
-  test_clock->SetNow(now);
+  base::SimpleTestClock test_clock;
+  test_clock.SetNow(now);
   CreateProvider(/*show_assets=*/false, /*show_offline_pages=*/true,
-                 std::move(test_clock));
+                 &test_clock);
 }
 
 TEST_F(DownloadSuggestionsProviderTest,
@@ -1141,10 +1139,10 @@
       *observer(),
       OnNewSuggestions(_, downloads_category(),
                        UnorderedElementsAre(HasUrl("http://download.com/0"))));
-  auto test_clock = base::MakeUnique<base::SimpleTestClock>();
-  test_clock->SetNow(now);
+  base::SimpleTestClock test_clock;
+  test_clock.SetNow(now);
   CreateLoadedProvider(/*show_assets=*/true, /*show_offline_pages=*/false,
-                       std::move(test_clock));
+                       &test_clock);
 }
 
 TEST_F(DownloadSuggestionsProviderTest, ShouldIgnoreTransientDownloads) {
@@ -1155,7 +1153,7 @@
   EXPECT_CALL(*observer(),
               OnNewSuggestions(_, downloads_category(), IsEmpty()));
   CreateLoadedProvider(/*show_assets=*/true, /*show_offline_pages=*/true,
-                       base::MakeUnique<base::DefaultClock>());
+                       base::DefaultClock::GetInstance());
 
   EXPECT_CALL(*observer(), OnNewSuggestions(_, _, _)).Times(0);
   EXPECT_CALL(*observer(), OnSuggestionInvalidated(_, _)).Times(0);
@@ -1187,8 +1185,8 @@
       *observer(),
       OnNewSuggestions(_, downloads_category(),
                        UnorderedElementsAre(HasUrl("http://dummy.com/0"))));
-  auto test_clock = base::MakeUnique<base::SimpleTestClock>();
-  test_clock->SetNow(now);
+  base::SimpleTestClock test_clock;
+  test_clock.SetNow(now);
   CreateProvider(/*show_assets=*/false, /*show_offline_pages=*/true,
-                 std::move(test_clock));
+                 &test_clock);
 }
diff --git a/chrome/browser/search/search.cc b/chrome/browser/search/search.cc
index 7c0c48fde..626090c 100644
--- a/chrome/browser/search/search.cc
+++ b/chrome/browser/search/search.cc
@@ -10,7 +10,6 @@
 #include "base/command_line.h"
 #include "base/feature_list.h"
 #include "base/metrics/histogram_macros.h"
-#include "build/build_config.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/search_engines/template_url_service_factory.h"
 #include "chrome/browser/search_engines/ui_thread_search_terms_data.h"
@@ -222,14 +221,6 @@
   const NewTabURLState state;
 };
 
-}  // namespace
-
-bool ShouldAssignURLToInstantRenderer(const GURL& url, Profile* profile) {
-  return url.is_valid() && profile && IsInstantExtendedAPIEnabled() &&
-         (url.SchemeIs(chrome::kChromeSearchScheme) ||
-          IsNTPOrServiceWorkerURL(url, profile));
-}
-
 bool IsRenderedInInstantProcess(const content::WebContents* contents,
                                 Profile* profile) {
 #if defined(OS_ANDROID)
@@ -249,11 +240,7 @@
 #endif
 }
 
-bool ShouldUseProcessPerSiteForInstantURL(const GURL& url, Profile* profile) {
-  return ShouldAssignURLToInstantRenderer(url, profile) &&
-         (url.host_piece() == chrome::kChromeSearchLocalNtpHost ||
-          url.host_piece() == chrome::kChromeSearchRemoteNtpHost);
-}
+}  // namespace
 
 bool DefaultSearchProviderIsGoogle(Profile* profile) {
   return DefaultSearchProviderIsGoogle(
@@ -321,6 +308,20 @@
   return NewTabURLDetails::ForProfile(profile).url;
 }
 
+#if !defined(OS_ANDROID)
+
+bool ShouldAssignURLToInstantRenderer(const GURL& url, Profile* profile) {
+  return url.is_valid() && profile && IsInstantExtendedAPIEnabled() &&
+         (url.SchemeIs(chrome::kChromeSearchScheme) ||
+          IsNTPOrServiceWorkerURL(url, profile));
+}
+
+bool ShouldUseProcessPerSiteForInstantURL(const GURL& url, Profile* profile) {
+  return ShouldAssignURLToInstantRenderer(url, profile) &&
+         (url.host_piece() == chrome::kChromeSearchLocalNtpHost ||
+          url.host_piece() == chrome::kChromeSearchRemoteNtpHost);
+}
+
 GURL GetEffectiveURLForInstant(const GURL& url, Profile* profile) {
   CHECK(ShouldAssignURLToInstantRenderer(url, profile))
       << "Error granting Instant access.";
@@ -388,4 +389,6 @@
   return false;
 }
 
+#endif  // !defined(OS_ANDROID)
+
 }  // namespace search
diff --git a/chrome/browser/search/search.h b/chrome/browser/search/search.h
index 33ce7b0..27a3245 100644
--- a/chrome/browser/search/search.h
+++ b/chrome/browser/search/search.h
@@ -5,6 +5,8 @@
 #ifndef CHROME_BROWSER_SEARCH_SEARCH_H_
 #define CHROME_BROWSER_SEARCH_SEARCH_H_
 
+#include "build/build_config.h"
+
 class GURL;
 class Profile;
 class TemplateURLService;
@@ -24,17 +26,6 @@
   CACHEABLE_NTP_LOAD_MAX = 2
 };
 
-// Returns true if |url| should be rendered in the Instant renderer process.
-bool ShouldAssignURLToInstantRenderer(const GURL& url, Profile* profile);
-
-// Returns true if |contents| is rendered inside the Instant process for
-// |profile|.
-bool IsRenderedInInstantProcess(const content::WebContents* contents,
-                                Profile* profile);
-
-// Returns true if the Instant |url| should use process per site.
-bool ShouldUseProcessPerSiteForInstantURL(const GURL& url, Profile* profile);
-
 // Returns whether Google is selected as the default search engine.
 bool DefaultSearchProviderIsGoogle(Profile* profile);
 bool DefaultSearchProviderIsGoogle(
@@ -58,6 +49,16 @@
 // in an Instant process.
 bool IsInstantNTPURL(const GURL& url, Profile* profile);
 
+// Returns the New Tab page URL for the given |profile|.
+GURL GetNewTabPageURL(Profile* profile);
+
+#if !defined(OS_ANDROID)
+
+// Returns true if |url| should be rendered in the Instant renderer process.
+bool ShouldAssignURLToInstantRenderer(const GURL& url, Profile* profile);
+
+// Returns true if the Instant |url| should use process per site.
+bool ShouldUseProcessPerSiteForInstantURL(const GURL& url, Profile* profile);
 
 // Transforms the input |url| into its "effective URL". |url| must be an
 // Instant URL, i.e. ShouldAssignURLToInstantRenderer must return true. The
@@ -89,8 +90,7 @@
 bool HandleNewTabURLReverseRewrite(GURL* url,
                                    content::BrowserContext* browser_context);
 
-// Returns the New Tab page URL for the given |profile|.
-GURL GetNewTabPageURL(Profile* profile);
+#endif  // !defined(OS_ANDROID)
 
 }  // namespace search
 
diff --git a/components/ntp_snippets/breaking_news/breaking_news_gcm_app_handler.cc b/components/ntp_snippets/breaking_news/breaking_news_gcm_app_handler.cc
index 8357900..1bd4052 100644
--- a/components/ntp_snippets/breaking_news/breaking_news_gcm_app_handler.cc
+++ b/components/ntp_snippets/breaking_news/breaking_news_gcm_app_handler.cc
@@ -95,7 +95,7 @@
     PrefService* pref_service,
     std::unique_ptr<SubscriptionManager> subscription_manager,
     const ParseJSONCallback& parse_json_callback,
-    std::unique_ptr<base::Clock> clock,
+    base::Clock* clock,
     std::unique_ptr<base::OneShotTimer> token_validation_timer,
     std::unique_ptr<base::OneShotTimer> forced_subscription_timer)
     : gcm_driver_(gcm_driver),
@@ -103,7 +103,7 @@
       pref_service_(pref_service),
       subscription_manager_(std::move(subscription_manager)),
       parse_json_callback_(parse_json_callback),
-      clock_(std::move(clock)),
+      clock_(clock),
       token_validation_timer_(std::move(token_validation_timer)),
       forced_subscription_timer_(std::move(forced_subscription_timer)),
       weak_ptr_factory_(this) {
diff --git a/components/ntp_snippets/breaking_news/breaking_news_gcm_app_handler.h b/components/ntp_snippets/breaking_news/breaking_news_gcm_app_handler.h
index 49a510d0..0aa27ad 100644
--- a/components/ntp_snippets/breaking_news/breaking_news_gcm_app_handler.h
+++ b/components/ntp_snippets/breaking_news/breaking_news_gcm_app_handler.h
@@ -53,7 +53,7 @@
       PrefService* pref_service_,
       std::unique_ptr<SubscriptionManager> subscription_manager,
       const ParseJSONCallback& parse_json_callback,
-      std::unique_ptr<base::Clock> clock,
+      base::Clock* clock,
       std::unique_ptr<base::OneShotTimer> token_validation_timer,
       std::unique_ptr<base::OneShotTimer> forced_subscription_timer);
 
@@ -128,7 +128,7 @@
   PrefService* const pref_service_;
   const std::unique_ptr<SubscriptionManager> subscription_manager_;
   const ParseJSONCallback parse_json_callback_;
-  std::unique_ptr<base::Clock> clock_;
+  base::Clock* clock_;
 
   // Called every time a push-by-value message is received to notify the
   // observer.
diff --git a/components/ntp_snippets/breaking_news/breaking_news_gcm_app_handler_unittest.cc b/components/ntp_snippets/breaking_news/breaking_news_gcm_app_handler_unittest.cc
index ab9bf7ed..2c4ea2b 100644
--- a/components/ntp_snippets/breaking_news/breaking_news_gcm_app_handler_unittest.cc
+++ b/components/ntp_snippets/breaking_news/breaking_news_gcm_app_handler_unittest.cc
@@ -32,6 +32,7 @@
 #include "google_apis/gcm/engine/account_mapping.h"
 #include "testing/gmock/include/gmock/gmock.h"
 
+using base::Clock;
 using base::TestMockTimeTaskRunner;
 using base::TickClock;
 using base::TimeTicks;
@@ -253,6 +254,8 @@
   std::unique_ptr<BreakingNewsGCMAppHandler> MakeHandler(
       scoped_refptr<TestMockTimeTaskRunner> timer_mock_task_runner) {
     tick_clock_ = timer_mock_task_runner->GetMockTickClock();
+    clock_ = timer_mock_task_runner->GetMockClock();
+
     message_loop_.SetTaskRunner(timer_mock_task_runner);
 
     // TODO(vitaliii): Initialize MockSubscriptionManager in the constructor, so
@@ -272,8 +275,7 @@
     return base::MakeUnique<BreakingNewsGCMAppHandler>(
         mock_gcm_driver_.get(), mock_instance_id_driver_.get(), pref_service(),
         std::move(wrapped_mock_subscription_manager), base::Bind(&ParseJson),
-        timer_mock_task_runner->GetMockClock(),
-        std::move(token_validation_timer),
+        clock_.get(), std::move(token_validation_timer),
         std::move(forced_subscription_timer));
   }
 
@@ -310,6 +312,7 @@
   std::unique_ptr<StrictMock<MockInstanceIDDriver>> mock_instance_id_driver_;
   std::unique_ptr<StrictMock<MockInstanceID>> mock_instance_id_;
   std::unique_ptr<TickClock> tick_clock_;
+  std::unique_ptr<Clock> clock_;
 };
 
 TEST_F(BreakingNewsGCMAppHandlerTest,
diff --git a/components/ntp_snippets/category_rankers/click_based_category_ranker.cc b/components/ntp_snippets/category_rankers/click_based_category_ranker.cc
index 57a7e96..281158d 100644
--- a/components/ntp_snippets/category_rankers/click_based_category_ranker.cc
+++ b/components/ntp_snippets/category_rankers/click_based_category_ranker.cc
@@ -143,10 +143,9 @@
 
 }  // namespace
 
-ClickBasedCategoryRanker::ClickBasedCategoryRanker(
-    PrefService* pref_service,
-    std::unique_ptr<base::Clock> clock)
-    : pref_service_(pref_service), clock_(std::move(clock)) {
+ClickBasedCategoryRanker::ClickBasedCategoryRanker(PrefService* pref_service,
+                                                   base::Clock* clock)
+    : pref_service_(pref_service), clock_(clock) {
   if (!ReadOrderFromPrefs(&ordered_categories_)) {
     // TODO(crbug.com/676273): Handle adding new hardcoded KnownCategories to
     // existing order from prefs. Currently such new category is completely
diff --git a/components/ntp_snippets/category_rankers/click_based_category_ranker.h b/components/ntp_snippets/category_rankers/click_based_category_ranker.h
index 1c69ec9..5f998d6 100644
--- a/components/ntp_snippets/category_rankers/click_based_category_ranker.h
+++ b/components/ntp_snippets/category_rankers/click_based_category_ranker.h
@@ -30,7 +30,7 @@
 class ClickBasedCategoryRanker : public CategoryRanker {
  public:
   explicit ClickBasedCategoryRanker(PrefService* pref_service,
-                                    std::unique_ptr<base::Clock> clock);
+                                    base::Clock* clock);
   ~ClickBasedCategoryRanker() override;
 
   // CategoryRanker implementation.
@@ -93,7 +93,7 @@
 
   std::vector<RankedCategory> ordered_categories_;
   PrefService* pref_service_;
-  std::unique_ptr<base::Clock> clock_;
+  base::Clock* clock_;
   base::Optional<Category> promoted_category_;
 
   DISALLOW_COPY_AND_ASSIGN(ClickBasedCategoryRanker);
diff --git a/components/ntp_snippets/category_rankers/click_based_category_ranker_unittest.cc b/components/ntp_snippets/category_rankers/click_based_category_ranker_unittest.cc
index ec065501..44ca2eb 100644
--- a/components/ntp_snippets/category_rankers/click_based_category_ranker_unittest.cc
+++ b/components/ntp_snippets/category_rankers/click_based_category_ranker_unittest.cc
@@ -43,7 +43,7 @@
     ClickBasedCategoryRanker::RegisterProfilePrefs(pref_service_->registry());
 
     ranker_ = base::MakeUnique<ClickBasedCategoryRanker>(
-        pref_service_.get(), base::MakeUnique<base::DefaultClock>());
+        pref_service_.get(), base::DefaultClock::GetInstance());
   }
 
   int GetUnusedRemoteCategoryID() { return unused_remote_category_id_++; }
@@ -68,9 +68,9 @@
     }
   }
 
-  void ResetRanker(std::unique_ptr<base::Clock> clock) {
-    ranker_ = base::MakeUnique<ClickBasedCategoryRanker>(pref_service_.get(),
-                                                         std::move(clock));
+  void ResetRanker(base::Clock* clock) {
+    ranker_ =
+        base::MakeUnique<ClickBasedCategoryRanker>(pref_service_.get(), clock);
   }
 
   void NotifyOnSuggestionOpened(int times, Category category) {
@@ -268,7 +268,7 @@
   ASSERT_TRUE(CompareCategories(first, third));
 
   // Simulate Chrome restart.
-  ResetRanker(base::MakeUnique<base::DefaultClock>());
+  ResetRanker(base::DefaultClock::GetInstance());
 
   // The old order must be preserved.
   EXPECT_TRUE(CompareCategories(third, second));
@@ -295,11 +295,10 @@
   NotifyOnSuggestionOpened(/*times=*/first_clicks, first);
 
   // Let multiple years pass by.
-  auto test_clock = base::MakeUnique<base::SimpleTestClock>();
-  base::SimpleTestClock* raw_test_clock = test_clock.get();
-  raw_test_clock->SetNow(base::Time::Now() + base::TimeDelta::FromDays(1000));
+  base::SimpleTestClock test_clock;
+  test_clock.SetNow(base::Time::Now() + base::TimeDelta::FromDays(1000));
   // Reset the ranker to pick up the new clock.
-  ResetRanker(std::move(test_clock));
+  ResetRanker(&test_clock);
 
   // The user behavior changes and they start using the second category instead.
   // According to our requirenments after such a long time it should take less
@@ -328,11 +327,10 @@
   NotifyOnSuggestionOpened(/*times=*/first_clicks, first);
 
   // Let multiple years pass by.
-  auto test_clock = base::MakeUnique<base::SimpleTestClock>();
-  base::SimpleTestClock* raw_test_clock = test_clock.get();
-  raw_test_clock->SetNow(base::Time::Now() + base::TimeDelta::FromDays(1000));
+  base::SimpleTestClock test_clock;
+  test_clock.SetNow(base::Time::Now() + base::TimeDelta::FromDays(1000));
   // Reset the ranker to pick up the new clock.
-  ResetRanker(std::move(test_clock));
+  ResetRanker(&test_clock);
 
   // It should take less than |first_clicks| for the second category to
   // overtake because of decays.
@@ -359,9 +357,9 @@
   ASSERT_NE(before, DeserializeTime(0));
 
   // Ensure that |Now()| is different from |before| by injecting our clock.
-  auto test_clock = base::MakeUnique<base::SimpleTestClock>();
-  test_clock->SetNow(base::Time::Now() + base::TimeDelta::FromSeconds(10));
-  ResetRanker(std::move(test_clock));
+  base::SimpleTestClock test_clock;
+  test_clock.SetNow(base::Time::Now() + base::TimeDelta::FromSeconds(10));
+  ResetRanker(&test_clock);
 
   EXPECT_EQ(before, ranker()->GetLastDecayTime());
 }
@@ -596,7 +594,7 @@
   ASSERT_TRUE(CompareCategories(downloads, bookmarks));
   ASSERT_TRUE(CompareCategories(bookmarks, articles));
   SetPromotedCategoryVariationParam(articles.id());
-  ResetRanker(base::MakeUnique<base::DefaultClock>());
+  ResetRanker(base::DefaultClock::GetInstance());
   EXPECT_TRUE(CompareCategories(articles, downloads));
   EXPECT_TRUE(CompareCategories(articles, bookmarks));
   EXPECT_FALSE(CompareCategories(downloads, articles));
@@ -608,7 +606,7 @@
        ShouldHandleInvalidCategoryIDForPromotion) {
   SetPromotedCategoryVariationParam(
       static_cast<int>(KnownCategories::LOCAL_CATEGORIES_COUNT));
-  ResetRanker(base::MakeUnique<base::DefaultClock>());
+  ResetRanker(base::DefaultClock::GetInstance());
   // Make sure we have the default order.
   EXPECT_TRUE(CompareCategories(
       Category::FromKnownCategory(KnownCategories::PHYSICAL_WEB_PAGES),
@@ -635,7 +633,7 @@
   ASSERT_TRUE(CompareCategories(physical_web, articles));
 
   SetPromotedCategoryVariationParam(articles.id());
-  ResetRanker(base::MakeUnique<base::DefaultClock>());
+  ResetRanker(base::DefaultClock::GetInstance());
 
   ASSERT_TRUE(CompareCategories(articles, physical_web));
 
@@ -653,16 +651,16 @@
   ASSERT_TRUE(CompareCategories(downloads, recent_tabs));
 
   SetPromotedCategoryVariationParam(recent_tabs.id());
-  ResetRanker(base::MakeUnique<base::DefaultClock>());
+  ResetRanker(base::DefaultClock::GetInstance());
   ASSERT_TRUE(CompareCategories(recent_tabs, downloads));
 
   ranker()->OnCategoryDismissed(recent_tabs);
   ASSERT_FALSE(CompareCategories(recent_tabs, downloads));
 
   // Simulate a little over 2 weeks of time passing.
-  auto test_clock = base::MakeUnique<base::SimpleTestClock>();
-  test_clock->SetNow(base::Time::Now() + base::TimeDelta::FromDays(15));
-  ResetRanker(std::move(test_clock));
+  base::SimpleTestClock test_clock;
+  test_clock.SetNow(base::Time::Now() + base::TimeDelta::FromDays(15));
+  ResetRanker(&test_clock);
   EXPECT_TRUE(CompareCategories(recent_tabs, downloads));
 }
 
@@ -748,7 +746,7 @@
               IsEmpty());
 
   SetPromotedCategoryVariationParam(second.id());
-  ResetRanker(base::MakeUnique<base::DefaultClock>());
+  ResetRanker(base::DefaultClock::GetInstance());
 
   ASSERT_FALSE(CompareCategories(first, second));
 
diff --git a/components/ntp_snippets/content_suggestions_service_unittest.cc b/components/ntp_snippets/content_suggestions_service_unittest.cc
index ea86f395..3ba7cd4 100644
--- a/components/ntp_snippets/content_suggestions_service_unittest.cc
+++ b/components/ntp_snippets/content_suggestions_service_unittest.cc
@@ -156,7 +156,7 @@
 
     // TODO(jkrcal): Replace by a mock.
     auto user_classifier = base::MakeUnique<UserClassifier>(
-        pref_service_.get(), base::MakeUnique<base::DefaultClock>());
+        pref_service_.get(), base::DefaultClock::GetInstance());
 
     service_ = base::MakeUnique<ContentSuggestionsService>(
         enabled, /*signin_manager=*/nullptr, /*history_service=*/nullptr,
diff --git a/components/ntp_snippets/features.cc b/components/ntp_snippets/features.cc
index 31823bbc..9525cd7 100644
--- a/components/ntp_snippets/features.cc
+++ b/components/ntp_snippets/features.cc
@@ -99,7 +99,7 @@
 
 std::unique_ptr<CategoryRanker> BuildSelectedCategoryRanker(
     PrefService* pref_service,
-    std::unique_ptr<base::Clock> clock,
+    base::Clock* clock,
     bool is_chrome_home_enabled) {
   CategoryRankerChoice choice =
       ntp_snippets::GetSelectedCategoryRanker(is_chrome_home_enabled);
@@ -108,8 +108,7 @@
     case CategoryRankerChoice::CONSTANT:
       return base::MakeUnique<ConstantCategoryRanker>();
     case CategoryRankerChoice::CLICK_BASED:
-      return base::MakeUnique<ClickBasedCategoryRanker>(pref_service,
-                                                        std::move(clock));
+      return base::MakeUnique<ClickBasedCategoryRanker>(pref_service, clock);
   }
   return nullptr;
 }
diff --git a/components/ntp_snippets/features.h b/components/ntp_snippets/features.h
index 998934b..09fa9d3 100644
--- a/components/ntp_snippets/features.h
+++ b/components/ntp_snippets/features.h
@@ -78,7 +78,7 @@
 // Builds a CategoryRanker according to kCategoryRanker feature and Chrome Home.
 std::unique_ptr<CategoryRanker> BuildSelectedCategoryRanker(
     PrefService* pref_service,
-    std::unique_ptr<base::Clock> clock,
+    base::Clock* clock,
     bool is_chrome_home_enabled);
 
 // Feature to choose a default category order.
diff --git a/components/ntp_snippets/remote/remote_suggestions_fetcher_impl.cc b/components/ntp_snippets/remote/remote_suggestions_fetcher_impl.cc
index 5817f94..7e366d3 100644
--- a/components/ntp_snippets/remote/remote_suggestions_fetcher_impl.cc
+++ b/components/ntp_snippets/remote/remote_suggestions_fetcher_impl.cc
@@ -140,7 +140,7 @@
       parse_json_callback_(parse_json_callback),
       fetch_url_(api_endpoint),
       api_key_(api_key),
-      clock_(new base::DefaultClock()),
+      clock_(base::DefaultClock::GetInstance()),
       user_classifier_(user_classifier) {}
 
 RemoteSuggestionsFetcherImpl::~RemoteSuggestionsFetcherImpl() = default;
@@ -164,18 +164,18 @@
     UMA_HISTOGRAM_SPARSE_SLOWLY(
         "NewTabPage.Snippets.FetchTimeLocal",
         GetMinuteOfTheDay(/*local_time=*/true,
-                          /*reduced_resolution=*/true, clock_.get()));
+                          /*reduced_resolution=*/true, clock_));
     UMA_HISTOGRAM_SPARSE_SLOWLY(
         "NewTabPage.Snippets.FetchTimeUTC",
         GetMinuteOfTheDay(/*local_time=*/false,
-                          /*reduced_resolution=*/true, clock_.get()));
+                          /*reduced_resolution=*/true, clock_));
   }
 
   JsonRequest::Builder builder;
   builder.SetLanguageHistogram(language_histogram_)
       .SetParams(params)
       .SetParseJsonCallback(parse_json_callback_)
-      .SetClock(clock_.get())
+      .SetClock(clock_)
       .SetUrlRequestContextGetter(url_request_context_getter_)
       .SetUserClassifier(*user_classifier_);
 
diff --git a/components/ntp_snippets/remote/remote_suggestions_fetcher_impl.h b/components/ntp_snippets/remote/remote_suggestions_fetcher_impl.h
index 068e01b..693b07082 100644
--- a/components/ntp_snippets/remote/remote_suggestions_fetcher_impl.h
+++ b/components/ntp_snippets/remote/remote_suggestions_fetcher_impl.h
@@ -59,9 +59,7 @@
   const GURL& GetFetchUrlForDebugging() const override;
 
   // Overrides internal clock for testing purposes.
-  void SetClockForTesting(std::unique_ptr<base::Clock> clock) {
-    clock_ = std::move(clock);
-  }
+  void SetClockForTesting(base::Clock* clock) { clock_ = clock; }
 
  private:
   void FetchSnippetsNonAuthenticated(internal::JsonRequest::Builder builder,
@@ -114,7 +112,7 @@
   const std::string api_key_;
 
   // Allow for an injectable clock for testing.
-  std::unique_ptr<base::Clock> clock_;
+  base::Clock* clock_;
 
   // Classifier that tells us how active the user is. Not owned.
   const UserClassifier* user_classifier_;
diff --git a/components/ntp_snippets/remote/remote_suggestions_fetcher_impl_unittest.cc b/components/ntp_snippets/remote/remote_suggestions_fetcher_impl_unittest.cc
index da04ece..14e539d 100644
--- a/components/ntp_snippets/remote/remote_suggestions_fetcher_impl_unittest.cc
+++ b/components/ntp_snippets/remote/remote_suggestions_fetcher_impl_unittest.cc
@@ -273,7 +273,7 @@
         test_url_(gurl) {
     UserClassifier::RegisterProfilePrefs(utils_.pref_service()->registry());
     user_classifier_ = base::MakeUnique<UserClassifier>(
-        utils_.pref_service(), base::MakeUnique<base::DefaultClock>());
+        utils_.pref_service(), base::DefaultClock::GetInstance());
     // Increase initial time such that ticks are non-zero.
     mock_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(1234));
     ResetFetcher();
@@ -296,7 +296,8 @@
         GetFetchEndpoint(version_info::Channel::STABLE), api_key,
         user_classifier_.get());
 
-    fetcher_->SetClockForTesting(mock_task_runner_->GetMockClock());
+    clock_ = mock_task_runner_->GetMockClock();
+    fetcher_->SetClockForTesting(clock_.get());
   }
 
   void SignIn() {
@@ -374,6 +375,10 @@
   std::map<std::string, std::string> default_variation_params_;
 
  private:
+  // TODO(tzik): Remove |clock_| after updating GetMockTickClock to own the
+  // instance. http://crbug.com/789079
+  std::unique_ptr<base::Clock> clock_;
+
   test::RemoteSuggestionsTestUtils utils_;
   variations::testing::VariationParamsManager params_manager_;
   scoped_refptr<base::TestMockTimeTaskRunner> mock_task_runner_;
diff --git a/components/ntp_snippets/remote/remote_suggestions_provider_impl.cc b/components/ntp_snippets/remote/remote_suggestions_provider_impl.cc
index 2c9246b..0f1906e 100644
--- a/components/ntp_snippets/remote/remote_suggestions_provider_impl.cc
+++ b/components/ntp_snippets/remote/remote_suggestions_provider_impl.cc
@@ -386,7 +386,7 @@
       status_service_(std::move(status_service)),
       clear_history_dependent_state_when_initialized_(false),
       clear_cached_suggestions_when_initialized_(false),
-      clock_(base::MakeUnique<base::DefaultClock>()),
+      clock_(base::DefaultClock::GetInstance()),
       prefetched_pages_tracker_(std::move(prefetched_pages_tracker)),
       breaking_news_raw_data_provider_(
           std::move(breaking_news_raw_data_provider)),
diff --git a/components/ntp_snippets/remote/remote_suggestions_provider_impl.h b/components/ntp_snippets/remote/remote_suggestions_provider_impl.h
index c8292e0..9a73a26a 100644
--- a/components/ntp_snippets/remote/remote_suggestions_provider_impl.h
+++ b/components/ntp_snippets/remote/remote_suggestions_provider_impl.h
@@ -135,9 +135,7 @@
   }
 
   // Overrides internal clock for testing purposes.
-  void SetClockForTesting(std::unique_ptr<base::Clock> clock) {
-    clock_ = std::move(clock);
-  }
+  void SetClockForTesting(base::Clock* clock) { clock_ = clock; }
 
   // TODO(tschumann): remove this method as soon as we inject the fetcher into
   // the constructor.
@@ -434,7 +432,7 @@
   bool clear_cached_suggestions_when_initialized_;
 
   // A clock for getting the time. This allows to inject a clock in tests.
-  std::unique_ptr<base::Clock> clock_;
+  base::Clock* clock_;
 
   // Prefetched pages tracker to query which urls have been prefetched.
   // |nullptr| is handled gracefully and just disables the functionality.
diff --git a/components/ntp_snippets/remote/remote_suggestions_provider_impl_unittest.cc b/components/ntp_snippets/remote/remote_suggestions_provider_impl_unittest.cc
index 2c8651f..7ccb244 100644
--- a/components/ntp_snippets/remote/remote_suggestions_provider_impl_unittest.cc
+++ b/components/ntp_snippets/remote/remote_suggestions_provider_impl_unittest.cc
@@ -337,7 +337,7 @@
   RemoteSuggestionsProviderImplTest()
       : category_ranker_(base::MakeUnique<ConstantCategoryRanker>()),
         user_classifier_(/*pref_service=*/nullptr,
-                         base::MakeUnique<base::DefaultClock>()),
+                         base::DefaultClock::GetInstance()),
         mock_suggestions_fetcher_(nullptr),
         image_fetcher_(nullptr),
         scheduler_(base::MakeUnique<NiceMock<MockScheduler>>()),
@@ -712,6 +712,9 @@
   RemoteSuggestionsDatabase* database_;
 
   Logger debug_logger_;
+
+  // TODO(tzik): Remove |mock_tick_clock_| after updating GetMockTickClock to
+  // own the instance. http://crbug.com/789079
   std::unique_ptr<base::TickClock> tick_clock_;
 
   scoped_refptr<TestMockTimeTaskRunner> timer_mock_task_runner_;
@@ -2346,9 +2349,8 @@
       /*use_fake_breaking_news_listener=*/false,
       /*use_mock_remote_suggestions_status_service=*/false);
 
-  auto simple_test_clock = base::MakeUnique<base::SimpleTestClock>();
-  base::SimpleTestClock* simple_test_clock_ptr = simple_test_clock.get();
-  provider->SetClockForTesting(std::move(simple_test_clock));
+  base::SimpleTestClock simple_test_clock;
+  provider->SetClockForTesting(&simple_test_clock);
 
   // Test that the preference is correctly initialized with the default value 0.
   EXPECT_EQ(
@@ -2356,12 +2358,12 @@
 
   WaitForSuggestionsProviderInitialization(provider.get());
   EXPECT_EQ(
-      SerializeTime(simple_test_clock_ptr->Now()),
+      SerializeTime(simple_test_clock.Now()),
       pref_service()->GetInt64(prefs::kLastSuccessfulBackgroundFetchTime));
 
   // Advance the time and check whether the time was updated correctly after the
   // background fetch.
-  simple_test_clock_ptr->Advance(base::TimeDelta::FromHours(1));
+  simple_test_clock.Advance(base::TimeDelta::FromHours(1));
 
   RemoteSuggestionsFetcher::SnippetsAvailableCallback snippets_callback;
   EXPECT_CALL(*mock_suggestions_fetcher(), FetchSnippets(_, _))
@@ -2373,7 +2375,7 @@
   std::move(snippets_callback).Run(Status::Success(), base::nullopt);
   // TODO(jkrcal): Move together with the pref storage into the scheduler.
   EXPECT_EQ(
-      SerializeTime(simple_test_clock_ptr->Now()),
+      SerializeTime(simple_test_clock.Now()),
       pref_service()->GetInt64(prefs::kLastSuccessfulBackgroundFetchTime));
   // TODO(markusheintz): Add a test that simulates a browser restart once the
   // scheduler refactoring is done (crbug.com/672434).
@@ -3122,12 +3124,11 @@
   StrictMock<MockPrefetchedPagesTracker>* mock_tracker =
       mock_prefetched_pages_tracker();
 
-  auto wrapped_provider_clock = base::MakeUnique<base::SimpleTestClock>();
-  base::SimpleTestClock* provider_clock = wrapped_provider_clock.get();
-  provider->SetClockForTesting(std::move(wrapped_provider_clock));
+  base::SimpleTestClock provider_clock;
+  provider->SetClockForTesting(&provider_clock);
 
-  provider_clock->SetNow(GetDefaultCreationTime() +
-                         base::TimeDelta::FromHours(10));
+  provider_clock.SetNow(GetDefaultCreationTime() +
+                        base::TimeDelta::FromHours(10));
 
   WaitForSuggestionsProviderInitialization(provider.get());
   std::vector<FetchedCategory> fetched_categories;
@@ -3139,7 +3140,7 @@
                   .AddId("http://prefetched.com")
                   .SetUrl("http://prefetched.com")
                   .SetAmpUrl("http://amp.prefetched.com")
-                  .SetFetchDate(provider_clock->Now())
+                  .SetFetchDate(provider_clock.Now())
                   .SetPublishDate(GetDefaultCreationTime()))
           .Build());
   EXPECT_CALL(*mock_tracker, IsInitialized()).WillRepeatedly(Return(true));
@@ -3148,8 +3149,8 @@
   ASSERT_THAT(observer().SuggestionsForCategory(articles_category()),
               SizeIs(1));
 
-  provider_clock->Advance(kMaxAgeForAdditionalPrefetchedSuggestion -
-                          base::TimeDelta::FromSeconds(1));
+  provider_clock.Advance(kMaxAgeForAdditionalPrefetchedSuggestion -
+                         base::TimeDelta::FromSeconds(1));
 
   fetched_categories.clear();
   fetched_categories.push_back(
@@ -3160,7 +3161,7 @@
                   .AddId("http://other.com")
                   .SetUrl("http://other.com")
                   .SetAmpUrl("http://amp.other.com")
-                  .SetFetchDate(provider_clock->Now())
+                  .SetFetchDate(provider_clock.Now())
                   .SetPublishDate(GetDefaultCreationTime()))
           .Build());
   EXPECT_CALL(*mock_tracker, IsInitialized()).WillRepeatedly(Return(true));
@@ -3173,7 +3174,7 @@
   ASSERT_THAT(observer().SuggestionsForCategory(articles_category()),
               SizeIs(2));
 
-  provider_clock->Advance(base::TimeDelta::FromSeconds(2));
+  provider_clock.Advance(base::TimeDelta::FromSeconds(2));
 
   fetched_categories.clear();
   fetched_categories.push_back(
@@ -3184,7 +3185,7 @@
                   .AddId("http://other.com")
                   .SetUrl("http://other.com")
                   .SetAmpUrl("http://amp.other.com")
-                  .SetFetchDate(provider_clock->Now())
+                  .SetFetchDate(provider_clock.Now())
                   .SetPublishDate(GetDefaultCreationTime()))
           .Build());
   EXPECT_CALL(*mock_tracker, IsInitialized()).WillRepeatedly(Return(true));
diff --git a/components/ntp_snippets/remote/remote_suggestions_scheduler_impl.cc b/components/ntp_snippets/remote/remote_suggestions_scheduler_impl.cc
index c014437..caf734f 100644
--- a/components/ntp_snippets/remote/remote_suggestions_scheduler_impl.cc
+++ b/components/ntp_snippets/remote/remote_suggestions_scheduler_impl.cc
@@ -444,7 +444,7 @@
     const UserClassifier* user_classifier,
     PrefService* profile_prefs,
     PrefService* local_state_prefs,
-    std::unique_ptr<base::Clock> clock,
+    base::Clock* clock,
     Logger* debug_logger)
     : persistent_scheduler_(persistent_scheduler),
       provider_(nullptr),
@@ -469,7 +469,7 @@
           base::Bind(&RemoteSuggestionsSchedulerImpl::RunQueuedTriggersIfReady,
                      base::Unretained(this)))),
       profile_prefs_(profile_prefs),
-      clock_(std::move(clock)),
+      clock_(clock),
       enabled_triggers_(GetEnabledTriggerTypes()),
       debug_logger_(debug_logger) {
   DCHECK(user_classifier);
diff --git a/components/ntp_snippets/remote/remote_suggestions_scheduler_impl.h b/components/ntp_snippets/remote/remote_suggestions_scheduler_impl.h
index c82749e..37741ef4 100644
--- a/components/ntp_snippets/remote/remote_suggestions_scheduler_impl.h
+++ b/components/ntp_snippets/remote/remote_suggestions_scheduler_impl.h
@@ -41,7 +41,7 @@
                                  const UserClassifier* user_classifier,
                                  PrefService* profile_prefs,
                                  PrefService* local_state_prefs,
-                                 std::unique_ptr<base::Clock> clock,
+                                 base::Clock* clock,
                                  Logger* debug_logger);
 
   ~RemoteSuggestionsSchedulerImpl() override;
@@ -169,7 +169,7 @@
   std::unique_ptr<EulaState> eula_state_;
 
   PrefService* profile_prefs_;
-  std::unique_ptr<base::Clock> clock_;
+  base::Clock* clock_;
   std::set<TriggerType> enabled_triggers_;
   std::set<TriggerType> queued_triggers_;
 
diff --git a/components/ntp_snippets/remote/remote_suggestions_scheduler_impl_unittest.cc b/components/ntp_snippets/remote/remote_suggestions_scheduler_impl_unittest.cc
index 92891d5d..026d79f 100644
--- a/components/ntp_snippets/remote/remote_suggestions_scheduler_impl_unittest.cc
+++ b/components/ntp_snippets/remote/remote_suggestions_scheduler_impl_unittest.cc
@@ -176,7 +176,7 @@
                         default_variation_params_,
                         {kArticleSuggestionsFeature.name}),
         user_classifier_(/*pref_service=*/nullptr,
-                         base::MakeUnique<base::DefaultClock>()) {
+                         base::DefaultClock::GetInstance()) {
     RemoteSuggestionsSchedulerImpl::RegisterProfilePrefs(
         utils_.pref_service()->registry());
     RequestThrottler::RegisterProfilePrefs(utils_.pref_service()->registry());
@@ -194,13 +194,11 @@
     provider_ = base::MakeUnique<StrictMock<MockRemoteSuggestionsProvider>>(
         /*observer=*/nullptr);
 
-    auto test_clock = base::MakeUnique<base::SimpleTestClock>();
-    test_clock_ = test_clock.get();
-    test_clock_->SetNow(base::Time::Now());
+    test_clock_.SetNow(base::Time::Now());
 
     scheduler_ = base::MakeUnique<RemoteSuggestionsSchedulerImpl>(
         &persistent_scheduler_, &user_classifier_, utils_.pref_service(),
-        &local_state_, std::move(test_clock), &debug_logger_);
+        &local_state_, &test_clock_, &debug_logger_);
     scheduler_->SetProvider(provider_.get());
   }
 
@@ -271,7 +269,7 @@
     return &persistent_scheduler_;
   }
 
-  base::SimpleTestClock* test_clock() { return test_clock_; }
+  base::SimpleTestClock* test_clock() { return &test_clock_; }
   MockRemoteSuggestionsProvider* provider() { return provider_.get(); }
   RemoteSuggestionsSchedulerImpl* scheduler() { return scheduler_.get(); }
 
@@ -280,7 +278,7 @@
   UserClassifier user_classifier_;
   TestingPrefServiceSimple local_state_;
   StrictMock<MockPersistentScheduler> persistent_scheduler_;
-  base::SimpleTestClock* test_clock_;
+  base::SimpleTestClock test_clock_;
   std::unique_ptr<MockRemoteSuggestionsProvider> provider_;
   std::unique_ptr<RemoteSuggestionsSchedulerImpl> scheduler_;
   Logger debug_logger_;
diff --git a/components/ntp_snippets/user_classifier.cc b/components/ntp_snippets/user_classifier.cc
index cc5c34ff..8427080b 100644
--- a/components/ntp_snippets/user_classifier.cc
+++ b/components/ntp_snippets/user_classifier.cc
@@ -184,10 +184,9 @@
 
 }  // namespace
 
-UserClassifier::UserClassifier(PrefService* pref_service,
-                               std::unique_ptr<base::Clock> clock)
+UserClassifier::UserClassifier(PrefService* pref_service, base::Clock* clock)
     : pref_service_(pref_service),
-      clock_(std::move(clock)),
+      clock_(clock),
       discount_rate_per_hour_(GetDiscountRatePerHour()),
       min_hours_(GetMinHours()),
       max_hours_(GetMaxHours()),
diff --git a/components/ntp_snippets/user_classifier.h b/components/ntp_snippets/user_classifier.h
index 93be8fa..f5e9683 100644
--- a/components/ntp_snippets/user_classifier.h
+++ b/components/ntp_snippets/user_classifier.h
@@ -56,7 +56,7 @@
   };
 
   // The provided |pref_service| may be nullptr in unit-tests.
-  UserClassifier(PrefService* pref_service, std::unique_ptr<base::Clock> clock);
+  UserClassifier(PrefService* pref_service, base::Clock* clock);
   ~UserClassifier();
 
   // Registers profile prefs for all metrics. Called from browser_prefs.cc.
@@ -97,7 +97,7 @@
   void ClearMetricValue(Metric metric);
 
   PrefService* pref_service_;
-  std::unique_ptr<base::Clock> clock_;
+  base::Clock* clock_;
 
   // Params of the metric.
   const double discount_rate_per_hour_;
diff --git a/components/ntp_snippets/user_classifier_unittest.cc b/components/ntp_snippets/user_classifier_unittest.cc
index 882e7e6..f372f5d 100644
--- a/components/ntp_snippets/user_classifier_unittest.cc
+++ b/components/ntp_snippets/user_classifier_unittest.cc
@@ -38,26 +38,21 @@
   }
 
   UserClassifier* CreateUserClassifier() {
-    auto test_clock = base::MakeUnique<base::SimpleTestClock>();
-    test_clock_ = test_clock.get();
-
     base::Time now;
     CHECK(base::Time::FromUTCString(kNowString, &now));
-    test_clock_->SetNow(now);
+    test_clock_.SetNow(now);
 
     user_classifier_ =
-        base::MakeUnique<UserClassifier>(&test_prefs_, std::move(test_clock));
+        base::MakeUnique<UserClassifier>(&test_prefs_, &test_clock_);
     return user_classifier_.get();
   }
 
-  base::SimpleTestClock* test_clock() { return test_clock_; }
+  base::SimpleTestClock* test_clock() { return &test_clock_; }
 
  private:
   TestingPrefServiceSimple test_prefs_;
   std::unique_ptr<UserClassifier> user_classifier_;
-
-  // Owned by the UserClassifier.
-  base::SimpleTestClock* test_clock_;
+  base::SimpleTestClock test_clock_;
 
   DISALLOW_COPY_AND_ASSIGN(UserClassifierTest);
 };
diff --git a/ios/chrome/browser/ntp_snippets/ios_chrome_content_suggestions_service_factory_util.cc b/ios/chrome/browser/ntp_snippets/ios_chrome_content_suggestions_service_factory_util.cc
index 020ad0c..6e0e0e8 100644
--- a/ios/chrome/browser/ntp_snippets/ios_chrome_content_suggestions_service_factory_util.cc
+++ b/ios/chrome/browser/ntp_snippets/ios_chrome_content_suggestions_service_factory_util.cc
@@ -112,7 +112,7 @@
   PrefService* prefs = chrome_browser_state->GetPrefs();
 
   auto user_classifier = base::MakeUnique<UserClassifier>(
-      prefs, base::MakeUnique<base::DefaultClock>());
+      prefs, base::DefaultClock::GetInstance());
 
   auto debug_logger = base::MakeUnique<Logger>();
 
@@ -120,7 +120,7 @@
   auto scheduler = base::MakeUnique<RemoteSuggestionsSchedulerImpl>(
       /*persistent_scheduler=*/nullptr, user_classifier.get(), prefs,
       GetApplicationContext()->GetLocalState(),
-      base::MakeUnique<base::DefaultClock>(), debug_logger.get());
+      base::DefaultClock::GetInstance(), debug_logger.get());
 
   // Create the ContentSuggestionsService.
   SigninManager* signin_manager =
@@ -133,7 +133,7 @@
           chrome_browser_state);
   std::unique_ptr<ntp_snippets::CategoryRanker> category_ranker =
       ntp_snippets::BuildSelectedCategoryRanker(
-          prefs, base::MakeUnique<base::DefaultClock>(),
+          prefs, base::DefaultClock::GetInstance(),
           /*is_chrome_home_enabled=*/false);
   return base::MakeUnique<ContentSuggestionsService>(
       State::ENABLED, signin_manager, history_service, large_icon_service,
diff --git a/third_party/WebKit/Source/core/dom/Document.idl b/third_party/WebKit/Source/core/dom/Document.idl
index 6005bd5..5f5bb0a 100644
--- a/third_party/WebKit/Source/core/dom/Document.idl
+++ b/third_party/WebKit/Source/core/dom/Document.idl
@@ -94,8 +94,8 @@
     // resource metadata management
 
     [PutForwards=href, Unforgeable] readonly attribute Location? location;
-    [RaisesException=Setter] attribute DOMString domain;
-    readonly attribute DOMString referrer;
+    [RaisesException=Setter] attribute USVString domain;
+    readonly attribute USVString referrer;
     [RaisesException, RuntimeCallStatsCounter=DocumentCookie] attribute DOMString cookie;
     readonly attribute DOMString lastModified;
     readonly attribute DocumentReadyState readyState;
diff --git a/third_party/WebKit/Source/modules/canvas/canvas2d/CanvasRenderingContext2DTest.cpp b/third_party/WebKit/Source/modules/canvas/canvas2d/CanvasRenderingContext2DTest.cpp
index 210ed18..808091f 100644
--- a/third_party/WebKit/Source/modules/canvas/canvas2d/CanvasRenderingContext2DTest.cpp
+++ b/third_party/WebKit/Source/modules/canvas/canvas2d/CanvasRenderingContext2DTest.cpp
@@ -7,6 +7,7 @@
 #include <memory>
 #include "bindings/core/v8/V8BindingForCore.h"
 #include "bindings/core/v8/V8BindingForTesting.h"
+#include "build/build_config.h"
 #include "core/dom/Document.h"
 #include "core/frame/LocalFrameView.h"
 #include "core/frame/Settings.h"
@@ -978,7 +979,13 @@
   }
 }
 
-TEST_F(CanvasRenderingContext2DTest, TextureUploadHeuristics) {
+// https://crbug.com/791524
+#if defined(OS_ANDROID) && defined(ADDRESS_SANITIZER)
+#define MAYBE_TextureUploadHeuristics DISABLED_TextureUploadHeuristics
+#else
+#define MAYBE_TextureUploadHeuristics TextureUploadHeuristics
+#endif  // defined(OS_ANDROID) && defined(ADDRESS_SANITIZER)
+TEST_F(CanvasRenderingContext2DTest, MAYBE_TextureUploadHeuristics) {
   ScopedCanvas2dFixedRenderingModeForTest canvas_2d_fixed_rendering_mode(false);
 
   enum TestVariants {