• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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