Chromium Code Reviews| 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..cf634fe7a62ebffb8499c35ad5931bee2b9e7975 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,21 @@ class LocalDeviceInfoProvider; |
| class OpenTabsUIDelegate; |
| class SyncClient; |
| +// UIs that need to prevent Sync startup should hold an instance of this class |
| +// until the user has finished modifying sync settings. This is not an inner |
| +// class of SyncService to enable forward declarations. |
| +class SyncSetupInProgressHandle { |
| + public: |
| + // UIs should not construct this directly, but instead call |
| + // SyncService::GetSetupInProgress(). |
| + explicit SyncSetupInProgressHandle(base::Closure on_destroy); |
|
Nicolas Zea
2016/06/13 20:01:00
perhaps make this private, and friend SyncService?
tommycli
2016/06/13 20:27:31
It was like this in Patchset 5, but maxbogue thoug
|
| + |
| + ~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 +82,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 +190,13 @@ 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. |
| + virtual std::unique_ptr<SyncSetupInProgressHandle> |
| + GetSetupInProgressHandle() = 0; |
| // Used by tests. |
| virtual bool IsSetupInProgress() const = 0; |