Index: ios/chrome/browser/history/web_history_service_factory.cc |
diff --git a/ios/chrome/browser/history/web_history_service_factory.cc b/ios/chrome/browser/history/web_history_service_factory.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..7efc452dbff0e1913b3454d1553f6412e4eb68d3 |
--- /dev/null |
+++ b/ios/chrome/browser/history/web_history_service_factory.cc |
@@ -0,0 +1,74 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "ios/chrome/browser/history/web_history_service_factory.h" |
+ |
+#include "base/memory/singleton.h" |
+#include "base/prefs/pref_service.h" |
+#include "components/history/core/browser/web_history_service.h" |
+#include "components/keyed_service/ios/browser_state_dependency_manager.h" |
+#include "components/signin/core/browser/profile_oauth2_token_service.h" |
+#include "components/signin/core/browser/signin_manager.h" |
+#include "components/sync_driver/sync_service.h" |
+#include "ios/public/provider/chrome/browser/browser_state/chrome_browser_state.h" |
+#include "ios/public/provider/chrome/browser/keyed_service_provider.h" |
+#include "net/url_request/url_request_context_getter.h" |
+ |
+namespace ios { |
+namespace { |
+ |
+// Returns true if the user is signed-in and full history sync is enabled, |
+// false otherwise. |
+bool IsHistorySyncEnabled(ios::ChromeBrowserState* browser_state) { |
+ sync_driver::SyncService* sync_service = |
+ GetKeyedServiceProvider()->GetSyncServiceForBrowserState(browser_state); |
+ return sync_service && sync_service->IsSyncActive() && |
+ sync_service->GetActiveDataTypes().Has( |
+ syncer::HISTORY_DELETE_DIRECTIVES); |
+} |
+ |
+} // namespace |
+ |
+// static |
+history::WebHistoryService* WebHistoryServiceFactory::GetForBrowserState( |
+ ios::ChromeBrowserState* browser_state) { |
+ // Ensure that the service is not instantiated or used if the user is not |
+ // signed into sync, or if web history is not enabled. |
+ if (!IsHistorySyncEnabled(browser_state)) |
+ return nullptr; |
+ |
+ return static_cast<history::WebHistoryService*>( |
+ GetInstance()->GetServiceForBrowserState(browser_state, true)); |
+} |
+ |
+// static |
+WebHistoryServiceFactory* WebHistoryServiceFactory::GetInstance() { |
+ return Singleton<WebHistoryServiceFactory>::get(); |
+} |
+ |
+WebHistoryServiceFactory::WebHistoryServiceFactory() |
+ : BrowserStateKeyedServiceFactory( |
+ "WebHistoryService", |
+ BrowserStateDependencyManager::GetInstance()) { |
+ ios::KeyedServiceProvider* provider = ios::GetKeyedServiceProvider(); |
+ DependsOn(provider->GetSyncServiceFactory()); |
+ DependsOn(provider->GetProfileOAuth2TokenServiceFactory()); |
+ DependsOn(provider->GetSigninManagerFactory()); |
+} |
+ |
+WebHistoryServiceFactory::~WebHistoryServiceFactory() { |
+} |
+ |
+scoped_ptr<KeyedService> WebHistoryServiceFactory::BuildServiceInstanceFor( |
+ web::BrowserState* context) const { |
+ ios::ChromeBrowserState* browser_state = |
+ ios::ChromeBrowserState::FromBrowserState(context); |
+ ios::KeyedServiceProvider* provider = ios::GetKeyedServiceProvider(); |
+ return make_scoped_ptr(new history::WebHistoryService( |
+ provider->GetProfileOAuth2TokenServiceForBrowserState(browser_state), |
+ provider->GetSigninManagerForBrowserState(browser_state), |
+ browser_state->GetRequestContext())); |
+} |
+ |
+} // namespace ios |