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