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