1// Copyright (c) 2011 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// The AllStatus object watches various sync engine components and aggregates 6// the status of all of them into one place. 7 8#ifndef CHROME_BROWSER_SYNC_ENGINE_ALL_STATUS_H_ 9#define CHROME_BROWSER_SYNC_ENGINE_ALL_STATUS_H_ 10#pragma once 11 12#include <map> 13 14#include "base/memory/scoped_ptr.h" 15#include "base/synchronization/lock.h" 16#include "chrome/browser/sync/engine/syncapi.h" 17#include "chrome/browser/sync/engine/syncer_types.h" 18 19namespace browser_sync { 20 21class ScopedStatusLock; 22class ServerConnectionManager; 23class Syncer; 24class SyncerThread; 25struct AuthWatcherEvent; 26struct ServerConnectionEvent; 27 28class AllStatus : public SyncEngineEventListener { 29 friend class ScopedStatusLock; 30 public: 31 32 AllStatus(); 33 ~AllStatus(); 34 35 void HandleServerConnectionEvent(const ServerConnectionEvent& event); 36 37 void HandleAuthWatcherEvent(const AuthWatcherEvent& event); 38 39 virtual void OnSyncEngineEvent(const SyncEngineEvent& event); 40 41 sync_api::SyncManager::Status status() const; 42 43 void SetNotificationsEnabled(bool notifications_enabled); 44 45 void IncrementNotificationsSent(); 46 47 void IncrementNotificationsReceived(); 48 49 protected: 50 // Examines syncer to calculate syncing and the unsynced count, 51 // and returns a Status with new values. 52 sync_api::SyncManager::Status CalcSyncing(const SyncEngineEvent& event) const; 53 sync_api::SyncManager::Status CreateBlankStatus() const; 54 55 // Examines status to see what has changed, updates old_status in place. 56 void CalcStatusChanges(); 57 58 sync_api::SyncManager::Status status_; 59 60 mutable base::Lock mutex_; // Protects all data members. 61 DISALLOW_COPY_AND_ASSIGN(AllStatus); 62}; 63 64class ScopedStatusLock { 65 public: 66 explicit ScopedStatusLock(AllStatus* allstatus); 67 ~ScopedStatusLock(); 68 protected: 69 AllStatus* allstatus_; 70}; 71 72} // namespace browser_sync 73 74#endif // CHROME_BROWSER_SYNC_ENGINE_ALL_STATUS_H_ 75