Home | History | Annotate | Download | only in sync
      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 ~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