| Index: chrome/browser/sync/glue/sync_backend_registrar.cc
|
| diff --git a/chrome/browser/sync/glue/sync_backend_registrar.cc b/chrome/browser/sync/glue/sync_backend_registrar.cc
|
| index 342a3d48f7c66fbb2bf8f2ad5ee9ef0bb447014d..4cd91b7adb93ac4b2a099866325c7c9a98c39c48 100644
|
| --- a/chrome/browser/sync/glue/sync_backend_registrar.cc
|
| +++ b/chrome/browser/sync/glue/sync_backend_registrar.cc
|
| @@ -54,7 +54,6 @@ bool IsOnThreadForGroup(syncer::ModelSafeGroup group) {
|
| } // namespace
|
|
|
| SyncBackendRegistrar::SyncBackendRegistrar(
|
| - syncer::ModelTypeSet initial_types,
|
| const std::string& name, Profile* profile,
|
| MessageLoop* sync_loop) :
|
| name_(name),
|
| @@ -70,30 +69,42 @@ SyncBackendRegistrar::SyncBackendRegistrar(
|
| workers_[syncer::GROUP_UI] = ui_worker_;
|
| workers_[syncer::GROUP_PASSIVE] = new syncer::PassiveModelWorker(sync_loop_);
|
|
|
| - // Any datatypes that we want the syncer to pull down must be in the
|
| - // routing_info map. We set them to group passive, meaning that
|
| - // updates will be applied to sync, but not dispatched to the native
|
| - // models.
|
| - for (syncer::ModelTypeSet::Iterator it = initial_types.First();
|
| - it.Good(); it.Inc()) {
|
| - routing_info_[it.Get()] = syncer::GROUP_PASSIVE;
|
| - }
|
| -
|
| HistoryService* history_service =
|
| HistoryServiceFactory::GetForProfile(profile, Profile::IMPLICIT_ACCESS);
|
| if (history_service) {
|
| workers_[syncer::GROUP_HISTORY] = new HistoryModelWorker(history_service);
|
| - } else {
|
| - LOG_IF(WARNING, initial_types.Has(syncer::TYPED_URLS))
|
| - << "History store disabled, cannot sync Omnibox History";
|
| - routing_info_.erase(syncer::TYPED_URLS);
|
| }
|
|
|
| scoped_refptr<PasswordStore> password_store =
|
| PasswordStoreFactory::GetForProfile(profile, Profile::IMPLICIT_ACCESS);
|
| if (password_store.get()) {
|
| workers_[syncer::GROUP_PASSWORD] = new PasswordModelWorker(password_store);
|
| - } else {
|
| + }
|
| +}
|
| +
|
| +void SyncBackendRegistrar::SetInitialTypes(syncer::ModelTypeSet initial_types) {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| + base::AutoLock lock(lock_);
|
| +
|
| + // This function should be called only once, shortly after construction. The
|
| + // routing info at that point is expected to be emtpy.
|
| + DCHECK(routing_info_.empty());
|
| +
|
| + // Set our initial state to reflect the current status of the sync directory.
|
| + // This will ensure that our calculations in ConfigureDataTypes() will always
|
| + // return correct results.
|
| + for (syncer::ModelTypeSet::Iterator it = initial_types.First();
|
| + it.Good(); it.Inc()) {
|
| + routing_info_[it.Get()] = syncer::GROUP_PASSIVE;
|
| + }
|
| +
|
| + if (!workers_.count(syncer::GROUP_HISTORY)) {
|
| + LOG_IF(WARNING, initial_types.Has(syncer::TYPED_URLS))
|
| + << "History store disabled, cannot sync Omnibox History";
|
| + routing_info_.erase(syncer::TYPED_URLS);
|
| + }
|
| +
|
| + if (!workers_.count(syncer::GROUP_PASSWORD)) {
|
| LOG_IF(WARNING, initial_types.Has(syncer::PASSWORDS))
|
| << "Password store not initialized, cannot sync passwords";
|
| routing_info_.erase(syncer::PASSWORDS);
|
|
|