Index: components/sync/driver/sync_service_base.cc |
diff --git a/components/sync/driver/sync_service_base.cc b/components/sync/driver/sync_service_base.cc |
index b534abae4235bb355f66757b11df95c879d84f44..10d41b314943e52a03452a658f03305afae1cb55 100644 |
--- a/components/sync/driver/sync_service_base.cc |
+++ b/components/sync/driver/sync_service_base.cc |
@@ -64,10 +64,33 @@ SyncServiceBase::SyncServiceBase(std::unique_ptr<SyncClient> sync_client, |
sync_data_folder_( |
base_directory_.Append(base::FilePath(kSyncDataFolderName))), |
debug_identifier_(debug_identifier), |
- sync_prefs_(sync_client_->GetPrefService()) {} |
+ sync_prefs_(sync_client_->GetPrefService()) { |
+ ResetCryptoState(); |
+} |
SyncServiceBase::~SyncServiceBase() = default; |
+void SyncServiceBase::AddObserver(SyncServiceObserver* observer) { |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
+ observers_.AddObserver(observer); |
+} |
+ |
+void SyncServiceBase::RemoveObserver(SyncServiceObserver* observer) { |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
+ observers_.RemoveObserver(observer); |
+} |
+ |
+bool SyncServiceBase::HasObserver(const SyncServiceObserver* observer) const { |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
+ return observers_.HasObserver(observer); |
+} |
+ |
+void SyncServiceBase::NotifyObservers() { |
+ for (auto& observer : observers_) { |
+ observer.OnStateChanged(); |
+ } |
+} |
+ |
void SyncServiceBase::InitializeEngine() { |
DCHECK(engine_); |
@@ -84,6 +107,7 @@ void SyncServiceBase::InitializeEngine() { |
params.registrar = base::MakeUnique<SyncBackendRegistrar>( |
debug_identifier_, base::Bind(&SyncClient::CreateModelWorkerForGroup, |
base::Unretained(sync_client_.get()))); |
+ params.encryption_observer_proxy = crypto_->GetEncryptionObserverProxy(); |
params.extensions_activity = sync_client_->GetExtensionsActivity(); |
params.event_handler = GetJsEventHandler(); |
params.service_url = sync_service_url(); |
@@ -110,7 +134,7 @@ void SyncServiceBase::InitializeEngine() { |
params.unrecoverable_error_handler = GetUnrecoverableErrorHandler(); |
params.report_unrecoverable_error_function = |
base::Bind(ReportUnrecoverableError, channel_); |
- params.saved_nigori_state = MoveSavedNigoriState(); |
+ params.saved_nigori_state = crypto_->TakeSavedNigoriState(); |
sync_prefs_.GetInvalidationVersions(¶ms.invalidation_versions); |
engine_->Initialize(std::move(params)); |
@@ -145,4 +169,13 @@ bool SyncServiceBase::GetLocalSyncConfig( |
return enable_local_sync_backend; |
} |
+void SyncServiceBase::ResetCryptoState() { |
+ crypto_ = base::MakeUnique<SyncServiceCrypto>( |
+ base::BindRepeating(&SyncServiceBase::NotifyObservers, |
+ base::Unretained(this)), |
+ base::BindRepeating(&SyncService::GetPreferredDataTypes, |
+ base::Unretained(this)), |
+ &sync_prefs_); |
+} |
+ |
} // namespace syncer |