Chromium Code Reviews| Index: chrome/browser/sync/glue/sync_backend_host.cc |
| diff --git a/chrome/browser/sync/glue/sync_backend_host.cc b/chrome/browser/sync/glue/sync_backend_host.cc |
| index a69a12cdbac458162891c573f7d577a9848088a3..fe6e1b3384e9a99ef3f5cad318b0228fcfc6a25b 100644 |
| --- a/chrome/browser/sync/glue/sync_backend_host.cc |
| +++ b/chrome/browser/sync/glue/sync_backend_host.cc |
| @@ -351,6 +351,38 @@ PendingConfigureDataTypesState() : deleted_type(false) {} |
| SyncBackendHost::PendingConfigureDataTypesState:: |
| ~PendingConfigureDataTypesState() {} |
| +// static |
| +SyncBackendHost::PendingConfigureDataTypesState* |
| + SyncBackendHost::MakePendingConfigModeState( |
| + const DataTypeController::TypeMap& data_type_controllers, |
| + const syncable::ModelTypeSet& types, |
| + CancelableTask* ready_task, |
| + ModelSafeRoutingInfo* routing_info) { |
| + PendingConfigureDataTypesState* state = new PendingConfigureDataTypesState(); |
| + |
| + for (DataTypeController::TypeMap::const_iterator it = |
| + data_type_controllers.begin(); |
| + it != data_type_controllers.end(); ++it) { |
| + syncable::ModelType type = it->first; |
| + |
| + // If a type is not specified, remove it from the routing_info. |
| + if (types.count(type) == 0) { |
| + state->deleted_type = (routing_info->erase(type) > 0); |
|
tim (not reviewing)
2011/04/19 18:07:05
this line is wrong. we need to just set deleted_t
|
| + } else { |
| + // Add a newly specified data type as GROUP_PASSIVE into the |
| + // routing_info, if it does not already exist. |
| + if (routing_info->count(type) == 0) { |
| + (*routing_info)[type] = GROUP_PASSIVE; |
| + state->added_types.set(type); |
| + } |
| + } |
| + } |
| + |
| + state->ready_task.reset(ready_task); |
| + state->initial_types = types; |
| + return state; |
| +} |
| + |
| void SyncBackendHost::ConfigureDataTypes( |
| const DataTypeController::TypeMap& data_type_controllers, |
| const syncable::ModelTypeSet& types, |
| @@ -364,35 +396,13 @@ void SyncBackendHost::ConfigureDataTypes( |
| ConfigureAutofillMigration(); |
| } |
| - scoped_ptr<PendingConfigureDataTypesState> state(new |
| - PendingConfigureDataTypesState()); |
| - |
| { |
| base::AutoLock lock(registrar_lock_); |
| - for (DataTypeController::TypeMap::const_iterator it = |
| - data_type_controllers.begin(); |
| - it != data_type_controllers.end(); ++it) { |
| - syncable::ModelType type = (*it).first; |
| - |
| - // If a type is not specified, remove it from the routing_info. |
| - if (types.count(type) == 0) { |
| - registrar_.routing_info.erase(type); |
| - state->deleted_type = true; |
| - } else { |
| - // Add a newly specified data type as GROUP_PASSIVE into the |
| - // routing_info, if it does not already exist. |
| - if (registrar_.routing_info.count(type) == 0) { |
| - registrar_.routing_info[type] = GROUP_PASSIVE; |
| - state->added_types.set(type); |
| - } |
| - } |
| - } |
| + pending_config_mode_state_.reset( |
| + MakePendingConfigModeState(data_type_controllers, types, ready_task, |
| + ®istrar_.routing_info)); |
| } |
| - state->ready_task.reset(ready_task); |
| - state->initial_types = types; |
| - pending_config_mode_state_.reset(state.release()); |
| - |
| // If we're doing the first configure (at startup) this is redundant as the |
| // syncer thread always must start in config mode. |
| if (using_new_syncer_thread_) { |