// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // // The AllStatus object watches various sync engine components and aggregates // the status of all of them into one place. #ifndef CHROME_BROWSER_SYNC_ENGINE_ALL_STATUS_H_ #define CHROME_BROWSER_SYNC_ENGINE_ALL_STATUS_H_ #pragma once #include <map> #include "base/memory/scoped_ptr.h" #include "base/synchronization/lock.h" #include "chrome/browser/sync/engine/syncapi.h" #include "chrome/browser/sync/engine/syncer_types.h" namespace browser_sync { class ScopedStatusLock; class ServerConnectionManager; class Syncer; class SyncerThread; struct AuthWatcherEvent; struct ServerConnectionEvent; class AllStatus : public SyncEngineEventListener { friend class ScopedStatusLock; public: AllStatus(); ~AllStatus(); void HandleServerConnectionEvent(const ServerConnectionEvent& event); void HandleAuthWatcherEvent(const AuthWatcherEvent& event); virtual void OnSyncEngineEvent(const SyncEngineEvent& event); sync_api::SyncManager::Status status() const; void SetNotificationsEnabled(bool notifications_enabled); void IncrementNotificationsSent(); void IncrementNotificationsReceived(); protected: // Examines syncer to calculate syncing and the unsynced count, // and returns a Status with new values. sync_api::SyncManager::Status CalcSyncing(const SyncEngineEvent& event) const; sync_api::SyncManager::Status CreateBlankStatus() const; // Examines status to see what has changed, updates old_status in place. void CalcStatusChanges(); sync_api::SyncManager::Status status_; mutable base::Lock mutex_; // Protects all data members. DISALLOW_COPY_AND_ASSIGN(AllStatus); }; class ScopedStatusLock { public: explicit ScopedStatusLock(AllStatus* allstatus); ~ScopedStatusLock(); protected: AllStatus* allstatus_; }; } // namespace browser_sync #endif // CHROME_BROWSER_SYNC_ENGINE_ALL_STATUS_H_