• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
16 namespace drive {
17 
18 // static
19 DriveNotificationManager*
FindForBrowserContext(content::BrowserContext * context)20 DriveNotificationManagerFactory::FindForBrowserContext(
21     content::BrowserContext* context) {
22   return static_cast<DriveNotificationManager*>(
23       GetInstance()->GetServiceForBrowserContext(context, false));
24 }
25 
26 // static
27 DriveNotificationManager*
GetForBrowserContext(content::BrowserContext * context)28 DriveNotificationManagerFactory::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
44 DriveNotificationManagerFactory*
GetInstance()45 DriveNotificationManagerFactory::GetInstance() {
46   return Singleton<DriveNotificationManagerFactory>::get();
47 }
48 
DriveNotificationManagerFactory()49 DriveNotificationManagerFactory::DriveNotificationManagerFactory()
50     : BrowserContextKeyedServiceFactory(
51         "DriveNotificationManager",
52         BrowserContextDependencyManager::GetInstance()) {
53   DependsOn(ProfileSyncServiceFactory::GetInstance());
54   DependsOn(invalidation::ProfileInvalidationProviderFactory::GetInstance());
55 }
56 
~DriveNotificationManagerFactory()57 DriveNotificationManagerFactory::~DriveNotificationManagerFactory() {}
58 
BuildServiceInstanceFor(content::BrowserContext * context) const59 KeyedService* 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