17d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 27d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 37d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// found in the LICENSE file. 47d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 57d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#ifndef CHROME_BROWSER_SYNC_SYNC_STARTUP_TRACKER_H_ 67d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#define CHROME_BROWSER_SYNC_SYNC_STARTUP_TRACKER_H_ 77d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 87d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/basictypes.h" 97d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/compiler_specific.h" 107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/sync/profile_sync_service_observer.h" 117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class Profile; 137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// SyncStartupTracker provides a centralized way for observers to detect when 157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// ProfileSyncService has successfully started up, or when startup has failed 167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// due to some kind of error. This code was originally part of SigninTracker 177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// but now that sync initialization is no longer a required part of signin, 187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// it has been broken out of that class so only those places that care about 197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// sync initialization depend on it. 207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class SyncStartupTracker : public ProfileSyncServiceObserver { 217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) public: 227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Observer interface used to notify observers when sync has started up. 237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) class Observer { 247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) public: 25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual ~Observer() {} 26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void SyncStartupCompleted() = 0; 287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void SyncStartupFailed() = 0; 297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) }; 307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) SyncStartupTracker(Profile* profile, Observer* observer); 327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual ~SyncStartupTracker(); 337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) enum SyncServiceState { 357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Sync backend is still starting up. 367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) SYNC_STARTUP_PENDING, 377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // An error has been detected that prevents the sync backend from starting 387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // up. 397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) SYNC_STARTUP_ERROR, 407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Sync startup has completed (i.e. ProfileSyncService::sync_initialized() 417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // returns true). 427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) SYNC_STARTUP_COMPLETE 437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) }; 447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Returns the current state of the sync service. 467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) static SyncServiceState GetSyncServiceState(Profile* profile); 477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // ProfileSyncServiceObserver implementation. 497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void OnStateChanged() OVERRIDE; 507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) private: 527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Checks the current service state and notifies |observer_| if the state 537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // has changed. Note that it is expected that the observer will free this 547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // object, so callers should not reference this object after making this call. 557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void CheckServiceState(); 567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Profile whose ProfileSyncService we should track. 587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Profile* profile_; 597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Weak pointer to the observer to notify. 617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Observer* observer_; 627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SyncStartupTracker); 647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}; 657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif // CHROME_BROWSER_SYNC_SYNC_STARTUP_TRACKER_H_ 67