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. 4 5 #include "chrome/browser/services/gcm/gcm_profile_service_factory.h" 6 7 #include "base/memory/scoped_ptr.h" 8 #include "chrome/browser/profiles/incognito_helpers.h" 9 #include "chrome/browser/profiles/profile.h" 10 #include "chrome/browser/services/gcm/gcm_profile_service.h" 11 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" 12 #include "chrome/browser/signin/signin_manager_factory.h" 13 #include "components/keyed_service/content/browser_context_dependency_manager.h" 14 15 #if !defined(OS_ANDROID) 16 #include "chrome/browser/ui/webui/signin/login_ui_service_factory.h" 17 #include "components/gcm_driver/gcm_client_factory.h" 18 #endif 19 20 namespace gcm { 21 22 // static 23 GCMProfileService* GCMProfileServiceFactory::GetForProfile(Profile* profile) { 24 // GCM is not supported in incognito mode. 25 if (profile->IsOffTheRecord()) 26 return NULL; 27 28 return static_cast<GCMProfileService*>( 29 GetInstance()->GetServiceForBrowserContext(profile, true)); 30 } 31 32 // static 33 GCMProfileServiceFactory* GCMProfileServiceFactory::GetInstance() { 34 return Singleton<GCMProfileServiceFactory>::get(); 35 } 36 37 GCMProfileServiceFactory::GCMProfileServiceFactory() 38 : BrowserContextKeyedServiceFactory( 39 "GCMProfileService", 40 BrowserContextDependencyManager::GetInstance()) { 41 DependsOn(SigninManagerFactory::GetInstance()); 42 DependsOn(ProfileOAuth2TokenServiceFactory::GetInstance()); 43 #if !defined(OS_ANDROID) 44 DependsOn(LoginUIServiceFactory::GetInstance()); 45 #endif 46 } 47 48 GCMProfileServiceFactory::~GCMProfileServiceFactory() { 49 } 50 51 KeyedService* GCMProfileServiceFactory::BuildServiceInstanceFor( 52 content::BrowserContext* context) const { 53 #if defined(OS_ANDROID) 54 return new GCMProfileService(Profile::FromBrowserContext(context)); 55 #else 56 return new GCMProfileService( 57 Profile::FromBrowserContext(context), 58 scoped_ptr<GCMClientFactory>(new GCMClientFactory)); 59 #endif 60 } 61 62 content::BrowserContext* GCMProfileServiceFactory::GetBrowserContextToUse( 63 content::BrowserContext* context) const { 64 return chrome::GetBrowserContextOwnInstanceInIncognito(context); 65 } 66 67 } // namespace gcm 68