1// Copyright 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/drive/drive_notification_manager_factory.h"
6
7#include "base/logging.h"
8#include "chrome/browser/drive/drive_notification_manager.h"
9#include "chrome/browser/invalidation/profile_invalidation_provider_factory.h"
10#include "chrome/browser/profiles/profile.h"
11#include "chrome/browser/sync/profile_sync_service.h"
12#include "chrome/browser/sync/profile_sync_service_factory.h"
13#include "components/invalidation/profile_invalidation_provider.h"
14#include "components/keyed_service/content/browser_context_dependency_manager.h"
15
16namespace drive {
17
18// static
19DriveNotificationManager*
20DriveNotificationManagerFactory::FindForBrowserContext(
21    content::BrowserContext* context) {
22  return static_cast<DriveNotificationManager*>(
23      GetInstance()->GetServiceForBrowserContext(context, false));
24}
25
26// static
27DriveNotificationManager*
28DriveNotificationManagerFactory::GetForBrowserContext(
29    content::BrowserContext* context) {
30  if (!ProfileSyncService::IsSyncEnabled())
31    return NULL;
32  if (!invalidation::ProfileInvalidationProviderFactory::GetForProfile(
33          Profile::FromBrowserContext(context))) {
34    // Do not create a DriveNotificationManager for |context|s that do not
35    // support invalidation.
36    return NULL;
37  }
38
39  return static_cast<DriveNotificationManager*>(
40      GetInstance()->GetServiceForBrowserContext(context, true));
41}
42
43// static
44DriveNotificationManagerFactory*
45DriveNotificationManagerFactory::GetInstance() {
46  return Singleton<DriveNotificationManagerFactory>::get();
47}
48
49DriveNotificationManagerFactory::DriveNotificationManagerFactory()
50    : BrowserContextKeyedServiceFactory(
51        "DriveNotificationManager",
52        BrowserContextDependencyManager::GetInstance()) {
53  DependsOn(ProfileSyncServiceFactory::GetInstance());
54  DependsOn(invalidation::ProfileInvalidationProviderFactory::GetInstance());
55}
56
57DriveNotificationManagerFactory::~DriveNotificationManagerFactory() {}
58
59KeyedService* DriveNotificationManagerFactory::BuildServiceInstanceFor(
60    content::BrowserContext* context) const {
61  invalidation::ProfileInvalidationProvider* invalidation_provider =
62      invalidation::ProfileInvalidationProviderFactory::GetForProfile(
63          Profile::FromBrowserContext(context));
64  DCHECK(invalidation_provider);
65  DCHECK(invalidation_provider->GetInvalidationService());
66  return new DriveNotificationManager(
67      invalidation_provider->GetInvalidationService());
68}
69
70}  // namespace drive
71