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