1 // Copyright (c) 2012 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 SYNC_INTERNAL_API_ALL_STATUS_H_ 9 #define SYNC_INTERNAL_API_ALL_STATUS_H_ 10 11 #include <map> 12 #include <string> 13 14 #include "base/compiler_specific.h" 15 #include "base/synchronization/lock.h" 16 #include "sync/engine/sync_engine_event_listener.h" 17 #include "sync/engine/syncer_types.h" 18 #include "sync/internal_api/public/base/model_type.h" 19 #include "sync/internal_api/public/engine/sync_status.h" 20 #include "sync/engine/nudge_source.h" 21 22 namespace syncer { 23 24 class ScopedStatusLock; 25 struct ServerConnectionEvent; 26 struct SyncCycleEvent; 27 28 // This class collects data and uses it to update its internal state. It can 29 // return a snapshot of this state as a SyncerStatus object. 30 // 31 // Most of this data ends up on the about:sync page. But the page is only 32 // 'pinged' to update itself at the end of a sync cycle. A user could refresh 33 // manually, but unless their timing is excellent it's unlikely that a user will 34 // see any state in mid-sync cycle. We have no plans to change this. However, 35 // we will continue to collect data and update state mid-sync-cycle in case we 36 // need to debug slow or stuck sync cycles. 37 class AllStatus : public SyncEngineEventListener { 38 friend class ScopedStatusLock; 39 public: 40 AllStatus(); 41 virtual ~AllStatus(); 42 43 // SyncEngineEventListener implementation. 44 virtual void OnSyncCycleEvent(const SyncCycleEvent& event) OVERRIDE; 45 virtual void OnActionableError(const SyncProtocolError& error) OVERRIDE; 46 virtual void OnRetryTimeChanged(base::Time retry_time) OVERRIDE; 47 virtual void OnThrottledTypesChanged(ModelTypeSet throttled_types) OVERRIDE; 48 virtual void OnMigrationRequested(ModelTypeSet types) OVERRIDE; 49 virtual void OnProtocolEvent(const ProtocolEvent& event) OVERRIDE; 50 51 SyncStatus status() const; 52 53 void SetNotificationsEnabled(bool notifications_enabled); 54 55 void IncrementNotifiableCommits(); 56 57 void IncrementNotificationsReceived(); 58 59 void SetEncryptedTypes(ModelTypeSet types); 60 void SetCryptographerReady(bool ready); 61 void SetCryptoHasPendingKeys(bool has_pending_keys); 62 void SetPassphraseType(PassphraseType type); 63 void SetHasKeystoreKey(bool has_keystore_key); 64 void SetKeystoreMigrationTime(const base::Time& migration_time); 65 66 void SetSyncId(const std::string& sync_id); 67 void SetInvalidatorClientId(const std::string& invalidator_client_id); 68 69 void IncrementNudgeCounter(NudgeSource source); 70 71 protected: 72 // Examines syncer to calculate syncing and the unsynced count, 73 // and returns a Status with new values. 74 SyncStatus CalcSyncing(const SyncCycleEvent& event) const; 75 SyncStatus CreateBlankStatus() const; 76 77 SyncStatus status_; 78 79 mutable base::Lock mutex_; // Protects all data members. 80 DISALLOW_COPY_AND_ASSIGN(AllStatus); 81 }; 82 83 class ScopedStatusLock { 84 public: 85 explicit ScopedStatusLock(AllStatus* allstatus); 86 ~ScopedStatusLock(); 87 protected: 88 AllStatus* allstatus_; 89 }; 90 91 } // namespace syncer 92 93 #endif // SYNC_INTERNAL_API_ALL_STATUS_H_ 94