1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/invalidation/invalidation_service_factory.h"
7 #include "base/prefs/pref_registry.h"
8 #include "chrome/browser/invalidation/fake_invalidation_service.h"
9 #include "chrome/browser/invalidation/invalidation_service.h"
10 #include "chrome/browser/invalidation/invalidation_service_android.h"
11 #include "chrome/browser/invalidation/invalidator_storage.h"
12 #include "chrome/browser/invalidation/p2p_invalidation_service.h"
13 #include "chrome/browser/invalidation/ticl_invalidation_service.h"
14 #include "chrome/browser/profiles/profile.h"
15 #include "chrome/browser/signin/profile_oauth2_token_service.h"
16 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
17 #include "chrome/browser/signin/signin_manager.h"
18 #include "chrome/browser/signin/signin_manager_factory.h"
19 #include "components/browser_context_keyed_service/browser_context_dependency_manager.h"
21 #if defined(OS_ANDROID)
22 #include "chrome/browser/invalidation/invalidation_controller_android.h"
23 #endif // defined(OS_ANDROID)
25 namespace invalidation {
28 InvalidationService* InvalidationServiceFactory::GetForProfile(
30 return static_cast<InvalidationService*>(
31 GetInstance()->GetServiceForBrowserContext(profile, true));
35 InvalidationServiceFactory* InvalidationServiceFactory::GetInstance() {
36 return Singleton<InvalidationServiceFactory>::get();
39 InvalidationServiceFactory::InvalidationServiceFactory()
40 : BrowserContextKeyedServiceFactory(
41 "InvalidationService",
42 BrowserContextDependencyManager::GetInstance()),
43 build_fake_invalidators_(false) {
44 #if !defined(OS_ANDROID)
45 DependsOn(SigninManagerFactory::GetInstance());
46 DependsOn(ProfileOAuth2TokenServiceFactory::GetInstance());
50 InvalidationServiceFactory::~InvalidationServiceFactory() {}
54 BrowserContextKeyedService* BuildP2PInvalidationService(
55 content::BrowserContext* context) {
56 Profile* profile = static_cast<Profile*>(context);
57 return new P2PInvalidationService(profile);
60 BrowserContextKeyedService* BuildFakeInvalidationService(
61 content::BrowserContext* context) {
62 return new FakeInvalidationService();
67 void InvalidationServiceFactory::SetBuildOnlyFakeInvalidatorsForTest(
68 bool test_mode_enabled) {
69 build_fake_invalidators_ = test_mode_enabled;
72 P2PInvalidationService*
73 InvalidationServiceFactory::BuildAndUseP2PInvalidationServiceForTest(
74 content::BrowserContext* context) {
75 BrowserContextKeyedService* service =
76 SetTestingFactoryAndUse(context, BuildP2PInvalidationService);
77 return static_cast<P2PInvalidationService*>(service);
80 BrowserContextKeyedService* InvalidationServiceFactory::BuildServiceInstanceFor(
81 content::BrowserContext* context) const {
82 Profile* profile = static_cast<Profile*>(context);
84 if (build_fake_invalidators_) {
85 return BuildFakeInvalidationService(context);
88 #if defined(OS_ANDROID)
89 InvalidationServiceAndroid* service = new InvalidationServiceAndroid(
91 new InvalidationControllerAndroid());
94 SigninManagerBase* signin_manager =
95 SigninManagerFactory::GetForProfile(profile);
96 ProfileOAuth2TokenService* oauth2_token_service =
97 ProfileOAuth2TokenServiceFactory::GetForProfile(profile);
99 TiclInvalidationService* service = new TiclInvalidationService(
101 oauth2_token_service,
108 void InvalidationServiceFactory::RegisterProfilePrefs(
109 user_prefs::PrefRegistrySyncable* registry) {
110 InvalidatorStorage::RegisterProfilePrefs(registry);
113 } // namespace invalidation