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 20namespace gcm { 21 22// static 23GCMProfileService* 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 33GCMProfileServiceFactory* GCMProfileServiceFactory::GetInstance() { 34 return Singleton<GCMProfileServiceFactory>::get(); 35} 36 37GCMProfileServiceFactory::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 48GCMProfileServiceFactory::~GCMProfileServiceFactory() { 49} 50 51KeyedService* 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 62content::BrowserContext* GCMProfileServiceFactory::GetBrowserContextToUse( 63 content::BrowserContext* context) const { 64 return chrome::GetBrowserContextOwnInstanceInIncognito(context); 65} 66 67} // namespace gcm 68