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* 20 DriveNotificationManagerFactory::FindForBrowserContext( 21 content::BrowserContext* context) { 22 return static_cast<DriveNotificationManager*>( 23 GetInstance()->GetServiceForBrowserContext(context, false)); 24 } 25 26 // static 27 DriveNotificationManager* 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* 45 DriveNotificationManagerFactory::GetInstance() { 46 return Singleton<DriveNotificationManagerFactory>::get(); 47 } 48 49 DriveNotificationManagerFactory::DriveNotificationManagerFactory() 50 : BrowserContextKeyedServiceFactory( 51 "DriveNotificationManager", 52 BrowserContextDependencyManager::GetInstance()) { 53 DependsOn(ProfileSyncServiceFactory::GetInstance()); 54 DependsOn(invalidation::ProfileInvalidationProviderFactory::GetInstance()); 55 } 56 57 DriveNotificationManagerFactory::~DriveNotificationManagerFactory() {} 58 59 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