1// Copyright 2014 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/sync/sync_error_notifier_factory_ash.h"
6
7#include "ash/shell.h"
8#include "chrome/browser/browser_process.h"
9#include "chrome/browser/profiles/profile.h"
10#include "chrome/browser/sync/profile_sync_service.h"
11#include "chrome/browser/sync/profile_sync_service_factory.h"
12#include "chrome/browser/sync/sync_error_notifier_ash.h"
13#include "components/keyed_service/content/browser_context_dependency_manager.h"
14
15SyncErrorNotifierFactory::SyncErrorNotifierFactory()
16    : BrowserContextKeyedServiceFactory(
17        "SyncErrorNotifier",
18        BrowserContextDependencyManager::GetInstance()) {
19  DependsOn(ProfileSyncServiceFactory::GetInstance());
20}
21
22SyncErrorNotifierFactory::~SyncErrorNotifierFactory() {}
23
24// static
25SyncErrorNotifier* SyncErrorNotifierFactory::GetForProfile(
26    Profile* profile) {
27  return static_cast<SyncErrorNotifier*>(
28      GetInstance()->GetServiceForBrowserContext(profile, true));
29}
30
31// static
32SyncErrorNotifierFactory* SyncErrorNotifierFactory::GetInstance() {
33  return Singleton<SyncErrorNotifierFactory>::get();
34}
35
36KeyedService* SyncErrorNotifierFactory::BuildServiceInstanceFor(
37    content::BrowserContext* context) const {
38  if (!ash::Shell::HasInstance())
39    return NULL;
40
41  Profile* profile = static_cast<Profile*>(context);
42  ProfileSyncService* profile_sync_service =
43      ProfileSyncServiceFactory::GetForProfile(profile);
44
45  if (!profile_sync_service)
46    return NULL;
47
48  SyncErrorController* sync_error_controller =
49      profile_sync_service->sync_error_controller();
50  if (!sync_error_controller)
51    return NULL;
52
53  return new SyncErrorNotifier(sync_error_controller, profile);
54}
55