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: 25 virtual void SyncStartupCompleted() = 0; 26 virtual void SyncStartupFailed() = 0; 27 }; 28 29 SyncStartupTracker(Profile* profile, Observer* observer); 30 virtual ~SyncStartupTracker(); 31 32 enum SyncServiceState { 33 // Sync backend is still starting up. 34 SYNC_STARTUP_PENDING, 35 // An error has been detected that prevents the sync backend from starting 36 // up. 37 SYNC_STARTUP_ERROR, 38 // Sync startup has completed (i.e. ProfileSyncService::sync_initialized() 39 // returns true). 40 SYNC_STARTUP_COMPLETE 41 }; 42 43 // Returns the current state of the sync service. 44 static SyncServiceState GetSyncServiceState(Profile* profile); 45 46 // ProfileSyncServiceObserver implementation. 47 virtual void OnStateChanged() OVERRIDE; 48 49 private: 50 // Checks the current service state and notifies |observer_| if the state 51 // has changed. Note that it is expected that the observer will free this 52 // object, so callers should not reference this object after making this call. 53 void CheckServiceState(); 54 55 // Profile whose ProfileSyncService we should track. 56 Profile* profile_; 57 58 // Weak pointer to the observer to notify. 59 Observer* observer_; 60 61 DISALLOW_COPY_AND_ASSIGN(SyncStartupTracker); 62 }; 63 64 #endif // CHROME_BROWSER_SYNC_SYNC_STARTUP_TRACKER_H_ 65