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 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