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#ifndef CHROME_BROWSER_SYNC_SYNC_ERROR_CONTROLLER_H_
6effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#define CHROME_BROWSER_SYNC_SYNC_ERROR_CONTROLLER_H_
7effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
8effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/basictypes.h"
9effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/compiler_specific.h"
10effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/observer_list.h"
11effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/sync/profile_sync_service_observer.h"
12effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
13effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass Profile;
14effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass ProfileSyncService;
15effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
16effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Keep track of sync errors and expose them to observers in the UI.
17effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass SyncErrorController : public ProfileSyncServiceObserver {
18effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch public:
19effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // The observer class for SyncErrorController lets the controller notify
20effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // observers when an error arises or changes.
21effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  class Observer {
22effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch   public:
23effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    virtual ~Observer() {}
24effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    virtual void OnErrorChanged() = 0;
25effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  };
26effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
27effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  explicit SyncErrorController(ProfileSyncService* service);
28effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual ~SyncErrorController();
29effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
30effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // True if there exists an error worth elevating to the user.
31effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  bool HasError();
32effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
33effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  void AddObserver(Observer* observer);
34effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  void RemoveObserver(Observer* observer);
35effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
36effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // ProfileSyncServiceObserver:
37effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual void OnStateChanged() OVERRIDE;
38effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
39effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch private:
40effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  ProfileSyncService* service_;
41effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  ObserverList<Observer, true> observer_list_;
42effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
43effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  DISALLOW_COPY_AND_ASSIGN(SyncErrorController);
44effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch};
45effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
46effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif  // CHROME_BROWSER_SYNC_SYNC_ERROR_CONTROLLER_H_
47