1 // Copyright (c) 2013 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_STARTUP_TRACKER_H_ 6 #define CHROME_BROWSER_SYNC_SYNC_STARTUP_TRACKER_H_ 7 8 #include "base/basictypes.h" 9 #include "base/compiler_specific.h" 10 #include "chrome/browser/sync/profile_sync_service_observer.h" 11 12 class Profile; 13 14 // SyncStartupTracker provides a centralized way for observers to detect when 15 // ProfileSyncService has successfully started up, or when startup has failed 16 // due to some kind of error. This code was originally part of SigninTracker 17 // but now that sync initialization is no longer a required part of signin, 18 // it has been broken out of that class so only those places that care about 19 // sync initialization depend on it. 20 class SyncStartupTracker : public ProfileSyncServiceObserver { 21 public: 22 // Observer interface used to notify observers when sync has started up. 23 class Observer { 24 public: ~Observer()25 virtual ~Observer() {} 26 27 virtual void SyncStartupCompleted() = 0; 28 virtual void SyncStartupFailed() = 0; 29 }; 30 31 SyncStartupTracker(Profile* profile, Observer* observer); 32 virtual ~SyncStartupTracker(); 33 34 enum SyncServiceState { 35 // Sync backend is still starting up. 36 SYNC_STARTUP_PENDING, 37 // An error has been detected that prevents the sync backend from starting 38 // up. 39 SYNC_STARTUP_ERROR, 40 // Sync startup has completed (i.e. ProfileSyncService::sync_initialized() 41 // returns true). 42 SYNC_STARTUP_COMPLETE 43 }; 44 45 // Returns the current state of the sync service. 46 static SyncServiceState GetSyncServiceState(Profile* profile); 47 48 // ProfileSyncServiceObserver implementation. 49 virtual void OnStateChanged() OVERRIDE; 50 51 private: 52 // Checks the current service state and notifies |observer_| if the state 53 // has changed. Note that it is expected that the observer will free this 54 // object, so callers should not reference this object after making this call. 55 void CheckServiceState(); 56 57 // Profile whose ProfileSyncService we should track. 58 Profile* profile_; 59 60 // Weak pointer to the observer to notify. 61 Observer* observer_; 62 63 DISALLOW_COPY_AND_ASSIGN(SyncStartupTracker); 64 }; 65 66 #endif // CHROME_BROWSER_SYNC_SYNC_STARTUP_TRACKER_H_ 67