| Index: components/sync/driver/glue/sync_backend_host_impl.cc
|
| diff --git a/components/sync/driver/glue/sync_backend_host_impl.cc b/components/sync/driver/glue/sync_backend_host_impl.cc
|
| index 5a6ed1c7b488cff70ba01d531a264ceeeb38d7e9..6e825e666ec6da1d7ff34dbb49d79bfd2527848c 100644
|
| --- a/components/sync/driver/glue/sync_backend_host_impl.cc
|
| +++ b/components/sync/driver/glue/sync_backend_host_impl.cc
|
| @@ -201,124 +201,14 @@ void SyncBackendHostImpl::Shutdown(ShutdownReason reason) {
|
| registrar_ = nullptr;
|
| }
|
|
|
| -ModelTypeSet SyncBackendHostImpl::ConfigureDataTypes(
|
| - ConfigureReason reason,
|
| - const DataTypeConfigStateMap& config_state_map,
|
| - const base::Callback<void(ModelTypeSet, ModelTypeSet)>& ready_task,
|
| - const base::Callback<void()>& retry_callback) {
|
| - // Only one configure is allowed at a time. This is guaranteed by our
|
| - // callers. The SyncBackendHostImpl requests one configure as the backend is
|
| - // initializing and waits for it to complete. After initialization, all
|
| - // configurations will pass through the DataTypeManager, which is careful to
|
| - // never send a new configure request until the current request succeeds.
|
| -
|
| - // The SyncBackendRegistrar's routing info will be updated by adding the
|
| - // types_to_add to the list then removing types_to_remove. Any types which
|
| - // are not in either of those sets will remain untouched.
|
| - //
|
| - // Types which were not in the list previously are not fully downloaded, so we
|
| - // must ask the syncer to download them. Any newly supported datatypes will
|
| - // not have been in that routing info list, so they will be among the types
|
| - // downloaded if they are enabled.
|
| - //
|
| - // The SyncBackendRegistrar's state was initially derived from the types
|
| - // detected to have been downloaded in the database. Afterwards it is
|
| - // modified only by this function. We expect it to remain in sync with the
|
| - // backend because configuration requests are never aborted; they are retried
|
| - // until they succeed or the backend is shut down.
|
| -
|
| - ModelTypeSet disabled_types = GetDataTypesInState(DISABLED, config_state_map);
|
| - ModelTypeSet fatal_types = GetDataTypesInState(FATAL, config_state_map);
|
| - ModelTypeSet crypto_types = GetDataTypesInState(CRYPTO, config_state_map);
|
| - ModelTypeSet unready_types = GetDataTypesInState(UNREADY, config_state_map);
|
| -
|
| - disabled_types.PutAll(fatal_types);
|
| - disabled_types.PutAll(crypto_types);
|
| - disabled_types.PutAll(unready_types);
|
| -
|
| - ModelTypeSet active_types =
|
| - GetDataTypesInState(CONFIGURE_ACTIVE, config_state_map);
|
| - ModelTypeSet clean_first_types =
|
| - GetDataTypesInState(CONFIGURE_CLEAN, config_state_map);
|
| - ModelTypeSet types_to_download = registrar_->ConfigureDataTypes(
|
| - Union(active_types, clean_first_types), disabled_types);
|
| - types_to_download.PutAll(clean_first_types);
|
| - types_to_download.RemoveAll(ProxyTypes());
|
| - if (!types_to_download.Empty())
|
| - types_to_download.Put(NIGORI);
|
| -
|
| - // TODO(sync): crbug.com/137550.
|
| - // It's dangerous to configure types that have progress markers. Types with
|
| - // progress markers can trigger a MIGRATION_DONE response. We are not
|
| - // prepared to handle a migration during a configure, so we must ensure that
|
| - // all our types_to_download actually contain no data before we sync them.
|
| - //
|
| - // One common way to end up in this situation used to be types which
|
| - // downloaded some or all of their data but have not applied it yet. We avoid
|
| - // problems with those types by purging the data of any such partially synced
|
| - // types soon after we load the directory.
|
| - //
|
| - // Another possible scenario is that we have newly supported or newly enabled
|
| - // data types being downloaded here but the nigori type, which is always
|
| - // included in any GetUpdates request, requires migration. The server has
|
| - // code to detect this scenario based on the configure reason, the fact that
|
| - // the nigori type is the only requested type which requires migration, and
|
| - // that the requested types list includes at least one non-nigori type. It
|
| - // will not send a MIGRATION_DONE response in that case. We still need to be
|
| - // careful to not send progress markers for non-nigori types, though. If a
|
| - // non-nigori type in the request requires migration, a MIGRATION_DONE
|
| - // response will be sent.
|
| -
|
| - ModelSafeRoutingInfo routing_info;
|
| - registrar_->GetModelSafeRoutingInfo(&routing_info);
|
| -
|
| - ModelTypeSet current_types = registrar_->GetLastConfiguredTypes();
|
| - ModelTypeSet types_to_purge = Difference(ModelTypeSet::All(), current_types);
|
| - ModelTypeSet inactive_types =
|
| - GetDataTypesInState(CONFIGURE_INACTIVE, config_state_map);
|
| - // Include clean_first_types in types_to_purge, they are part of
|
| - // current_types, but still need to be cleared.
|
| - DCHECK(current_types.HasAll(clean_first_types));
|
| - types_to_purge.PutAll(clean_first_types);
|
| - types_to_purge.RemoveAll(inactive_types);
|
| - types_to_purge.RemoveAll(unready_types);
|
| -
|
| - // If a type has already been disabled and unapplied or journaled, it will
|
| - // not be part of the |types_to_purge| set, and therefore does not need
|
| - // to be acted on again.
|
| - fatal_types.RetainAll(types_to_purge);
|
| - ModelTypeSet unapply_types = Union(crypto_types, clean_first_types);
|
| - unapply_types.RetainAll(types_to_purge);
|
| -
|
| - DCHECK(Intersection(current_types, fatal_types).Empty());
|
| - DCHECK(Intersection(current_types, crypto_types).Empty());
|
| - DCHECK(current_types.HasAll(types_to_download));
|
| -
|
| - SDVLOG(1) << "Types " << ModelTypeSetToString(types_to_download)
|
| - << " added; calling DoConfigureSyncer";
|
| - // Divide up the types into their corresponding actions (each is mutually
|
| - // exclusive):
|
| - // - Types which have just been added to the routing info (types_to_download):
|
| - // are downloaded.
|
| - // - Types which have encountered a fatal error (fatal_types) are deleted
|
| - // from the directory and journaled in the delete journal.
|
| - // - Types which have encountered a cryptographer error (crypto_types) are
|
| - // unapplied (local state is purged but sync state is not).
|
| - // - All other types not in the routing info (types just disabled) are deleted
|
| - // from the directory.
|
| - // - Everything else (enabled types and already disabled types) is not
|
| - // touched.
|
| +void SyncBackendHostImpl::ConfigureDataTypes(ConfigureParams params) {
|
| sync_task_runner_->PostTask(
|
| - FROM_HERE, base::Bind(&SyncBackendHostCore::DoPurgeDisabledTypes, core_,
|
| - types_to_purge, fatal_types, unapply_types));
|
| - RequestConfigureSyncer(reason, types_to_download, routing_info, ready_task,
|
| - retry_callback);
|
| -
|
| - DCHECK(Intersection(active_types, types_to_purge).Empty());
|
| - DCHECK(Intersection(active_types, fatal_types).Empty());
|
| - DCHECK(Intersection(active_types, unapply_types).Empty());
|
| - DCHECK(Intersection(active_types, inactive_types).Empty());
|
| - return Difference(active_types, types_to_download);
|
| + FROM_HERE,
|
| + base::Bind(&SyncBackendHostCore::DoPurgeDisabledTypes, core_,
|
| + params.to_purge, params.to_journal, params.to_unapply));
|
| + sync_task_runner_->PostTask(
|
| + FROM_HERE, base::Bind(&SyncBackendHostCore::DoConfigureSyncer, core_,
|
| + base::Passed(¶ms)));
|
| }
|
|
|
| void SyncBackendHostImpl::EnableEncryptEverything() {
|
| @@ -433,18 +323,6 @@ void SyncBackendHostImpl::DisableDirectoryTypeDebugInfoForwarding() {
|
| core_));
|
| }
|
|
|
| -void SyncBackendHostImpl::RequestConfigureSyncer(
|
| - ConfigureReason reason,
|
| - ModelTypeSet to_download,
|
| - const ModelSafeRoutingInfo& routing_info,
|
| - const base::Callback<void(ModelTypeSet, ModelTypeSet)>& ready_task,
|
| - const base::Closure& retry_callback) {
|
| - sync_task_runner_->PostTask(
|
| - FROM_HERE,
|
| - base::Bind(&SyncBackendHostCore::DoConfigureSyncer, core_, reason,
|
| - to_download, routing_info, ready_task, retry_callback));
|
| -}
|
| -
|
| void SyncBackendHostImpl::FinishConfigureDataTypesOnFrontendLoop(
|
| const ModelTypeSet enabled_types,
|
| const ModelTypeSet succeeded_configuration_types,
|
|
|