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_global_error_factory.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_global_error.h"
13#include "chrome/browser/ui/global_error/global_error_service_factory.h"
14#include "components/keyed_service/content/browser_context_dependency_manager.h"
15
16#if defined(USE_ASH)
17#include "ash/shell.h"
18#endif
19
20SyncGlobalErrorFactory::SyncGlobalErrorFactory()
21    : BrowserContextKeyedServiceFactory(
22        "SyncGlobalError",
23        BrowserContextDependencyManager::GetInstance()) {
24  DependsOn(ProfileSyncServiceFactory::GetInstance());
25  DependsOn(GlobalErrorServiceFactory::GetInstance());
26}
27
28SyncGlobalErrorFactory::~SyncGlobalErrorFactory() {}
29
30// static
31SyncGlobalError* SyncGlobalErrorFactory::GetForProfile(
32    Profile* profile) {
33  return static_cast<SyncGlobalError*>(
34      GetInstance()->GetServiceForBrowserContext(profile, true));
35}
36
37// static
38SyncGlobalErrorFactory* SyncGlobalErrorFactory::GetInstance() {
39  return Singleton<SyncGlobalErrorFactory>::get();
40}
41
42KeyedService* SyncGlobalErrorFactory::BuildServiceInstanceFor(
43    content::BrowserContext* context) const {
44#if defined(USE_ASH)
45  if (ash::Shell::HasInstance())
46    return NULL;
47#endif
48
49  Profile* profile = static_cast<Profile*>(context);
50  ProfileSyncService* profile_sync_service =
51      ProfileSyncServiceFactory::GetForProfile(profile);
52
53  if (!profile_sync_service)
54    return NULL;
55
56  SyncErrorController* sync_error_controller =
57      profile_sync_service->sync_error_controller();
58  if (!sync_error_controller)
59    return NULL;
60
61  return new SyncGlobalError(sync_error_controller,
62                             profile_sync_service);
63}
64