1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file.
4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
57d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/drive/drive_notification_manager_factory.h"
6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
7c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "base/logging.h"
87d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/drive/drive_notification_manager.h"
9f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/invalidation/profile_invalidation_provider_factory.h"
10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/profiles/profile.h"
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/sync/profile_sync_service.h"
12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/sync/profile_sync_service_factory.h"
13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "components/invalidation/profile_invalidation_provider.h"
14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/keyed_service/content/browser_context_dependency_manager.h"
15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace drive {
17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// static
19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)DriveNotificationManager*
20e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen MurdochDriveNotificationManagerFactory::FindForBrowserContext(
21e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    content::BrowserContext* context) {
22e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  return static_cast<DriveNotificationManager*>(
23e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      GetInstance()->GetServiceForBrowserContext(context, false));
24e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch}
25e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
26e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// static
27e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen MurdochDriveNotificationManager*
2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)DriveNotificationManagerFactory::GetForBrowserContext(
2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    content::BrowserContext* context) {
30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (!ProfileSyncService::IsSyncEnabled())
31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return NULL;
32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  if (!invalidation::ProfileInvalidationProviderFactory::GetForProfile(
33c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch          Profile::FromBrowserContext(context))) {
34c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    // Do not create a DriveNotificationManager for |context|s that do not
35c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    // support invalidation.
36c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    return NULL;
37c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  }
38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return static_cast<DriveNotificationManager*>(
4058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      GetInstance()->GetServiceForBrowserContext(context, true));
41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// static
44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)DriveNotificationManagerFactory*
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)DriveNotificationManagerFactory::GetInstance() {
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return Singleton<DriveNotificationManagerFactory>::get();
47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)DriveNotificationManagerFactory::DriveNotificationManagerFactory()
5090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    : BrowserContextKeyedServiceFactory(
5190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        "DriveNotificationManager",
5290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        BrowserContextDependencyManager::GetInstance()) {
53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DependsOn(ProfileSyncServiceFactory::GetInstance());
54f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  DependsOn(invalidation::ProfileInvalidationProviderFactory::GetInstance());
55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)DriveNotificationManagerFactory::~DriveNotificationManagerFactory() {}
58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
59a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)KeyedService* DriveNotificationManagerFactory::BuildServiceInstanceFor(
6058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    content::BrowserContext* context) const {
61f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  invalidation::ProfileInvalidationProvider* invalidation_provider =
62f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      invalidation::ProfileInvalidationProviderFactory::GetForProfile(
63c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch          Profile::FromBrowserContext(context));
64f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  DCHECK(invalidation_provider);
65f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  DCHECK(invalidation_provider->GetInvalidationService());
66f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  return new DriveNotificationManager(
67f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      invalidation_provider->GetInvalidationService());
68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}  // namespace drive
71