1effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// found in the LICENSE file.
4effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
5effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/sync/sync_global_error_factory.h"
6effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
7effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ash/shell.h"
8effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/browser_process.h"
9effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/profiles/profile.h"
10effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/sync/profile_sync_service.h"
11effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/sync/profile_sync_service_factory.h"
12effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/sync/sync_global_error.h"
13effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/ui/global_error/global_error_service_factory.h"
14effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "components/keyed_service/content/browser_context_dependency_manager.h"
15effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
16effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#if defined(USE_ASH)
17effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ash/shell.h"
18effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif
19effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
20effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochSyncGlobalErrorFactory::SyncGlobalErrorFactory()
21effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    : BrowserContextKeyedServiceFactory(
22effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        "SyncGlobalError",
23effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        BrowserContextDependencyManager::GetInstance()) {
24effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  DependsOn(ProfileSyncServiceFactory::GetInstance());
25effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  DependsOn(GlobalErrorServiceFactory::GetInstance());
26effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
27effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
28effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochSyncGlobalErrorFactory::~SyncGlobalErrorFactory() {}
29effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
30effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// static
31effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochSyncGlobalError* SyncGlobalErrorFactory::GetForProfile(
32effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    Profile* profile) {
33effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  return static_cast<SyncGlobalError*>(
34effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      GetInstance()->GetServiceForBrowserContext(profile, true));
35effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
36effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
37effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// static
38effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochSyncGlobalErrorFactory* SyncGlobalErrorFactory::GetInstance() {
39effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  return Singleton<SyncGlobalErrorFactory>::get();
40effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
41effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
42effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochKeyedService* SyncGlobalErrorFactory::BuildServiceInstanceFor(
43effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    content::BrowserContext* context) const {
44effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#if defined(USE_ASH)
45effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (ash::Shell::HasInstance())
46effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    return NULL;
47effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif
48effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
49effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  Profile* profile = static_cast<Profile*>(context);
50effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  ProfileSyncService* profile_sync_service =
51effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      ProfileSyncServiceFactory::GetForProfile(profile);
52effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
53effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (!profile_sync_service)
54effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    return NULL;
55effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
56effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  SyncErrorController* sync_error_controller =
57effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      profile_sync_service->sync_error_controller();
58effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (!sync_error_controller)
59effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    return NULL;
60effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
61effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  return new SyncGlobalError(sync_error_controller,
62effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                             profile_sync_service);
63effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
64