| Index: components/sync_driver/sync_service.h
|
| diff --git a/components/sync_driver/sync_service.h b/components/sync_driver/sync_service.h
|
| index 4ca8b42e870f5ea9939a74acd6d0cd43f8746cdd..f1594facf35146ef959721195c3759966b4e7a87 100644
|
| --- a/components/sync_driver/sync_service.h
|
| +++ b/components/sync_driver/sync_service.h
|
| @@ -8,7 +8,7 @@
|
| #include <memory>
|
| #include <string>
|
|
|
| -#include "base/callback_forward.h"
|
| +#include "base/callback.h"
|
| #include "base/location.h"
|
| #include "base/macros.h"
|
| #include "base/memory/weak_ptr.h"
|
| @@ -46,6 +46,15 @@ class LocalDeviceInfoProvider;
|
| class OpenTabsUIDelegate;
|
| class SyncClient;
|
|
|
| +class SyncSetupInProgressHandle {
|
| + public:
|
| + explicit SyncSetupInProgressHandle(base::Closure on_destroy);
|
| + ~SyncSetupInProgressHandle();
|
| +
|
| + private:
|
| + base::Closure on_destroy_;
|
| +};
|
| +
|
| class SyncService : public DataTypeEncryptionHandler {
|
| public:
|
| // Used to specify the kind of passphrase with which sync data is encrypted.
|
| @@ -67,7 +76,6 @@ class SyncService : public DataTypeEncryptionHandler {
|
| // Status of sync server connection, sync token and token request.
|
| struct SyncTokenStatus {
|
| SyncTokenStatus();
|
| - ~SyncTokenStatus();
|
|
|
| // Sync server connection status reported by sync backend.
|
| base::Time connection_status_update_time;
|
| @@ -176,12 +184,12 @@ class SyncService : public DataTypeEncryptionHandler {
|
| // Called by the UI to notify the SyncService that UI is visible so it will
|
| // not start syncing. This tells sync whether it's safe to start downloading
|
| // data types yet (we don't start syncing until after sync setup is complete).
|
| - // The UI calls this as soon as any part of the signin wizard is displayed
|
| - // (even just the login UI).
|
| - // If |setup_in_progress| is false, this also kicks the sync engine to ensure
|
| - // that data download starts. In this case, |ReconfigureDatatypeManager| will
|
| - // get triggered.
|
| - virtual void SetSetupInProgress(bool setup_in_progress) = 0;
|
| + // The UI calls this and holds onto the instance for as long as any part of
|
| + // the signin wizard is displayed (even just the login UI).
|
| + // When the last outstanding handle is deleted, this kicks off the sync engine
|
| + // to ensure that data download starts. In this case,
|
| + // |ReconfigureDatatypeManager| will get triggered.
|
| + std::unique_ptr<SyncSetupInProgressHandle> GetSetupInProgressHandle();
|
|
|
| // Used by tests.
|
| virtual bool IsSetupInProgress() const = 0;
|
| @@ -325,9 +333,19 @@ class SyncService : public DataTypeEncryptionHandler {
|
| callback) = 0;
|
|
|
| protected:
|
| - SyncService() {}
|
| + friend class SyncSetupInProgressHandle;
|
| +
|
| + SyncService() : outstanding_setup_in_progress_handles_(0) {}
|
| +
|
| + // Called internally by the GetSetupInProgressHandle mechanism.
|
| + // This should not be called directly (except by the Android wrapper).
|
| + virtual void SetSetupInProgress(bool setup_in_progress) = 0;
|
| +
|
| + int outstanding_setup_in_progress_handles_;
|
|
|
| private:
|
| + void OnSetupInProgressHandleDestroyed();
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(SyncService);
|
| };
|
|
|
|
|