| Index: chrome/browser/extensions/api/storage/settings_backend.cc
|
| diff --git a/chrome/browser/extensions/api/storage/settings_backend.cc b/chrome/browser/extensions/api/storage/settings_backend.cc
|
| index 369446ada8c67f9de47d0d3e3b074990e1832bb8..fbcdd17f1890702c301fbdc33c6060c81e73fddf 100644
|
| --- a/chrome/browser/extensions/api/storage/settings_backend.cc
|
| +++ b/chrome/browser/extensions/api/storage/settings_backend.cc
|
| @@ -19,14 +19,19 @@ namespace extensions {
|
| SettingsBackend::SettingsBackend(
|
| const scoped_refptr<SettingsStorageFactory>& storage_factory,
|
| const base::FilePath& base_path,
|
| + syncer::ModelType sync_type,
|
| + const syncer::SyncableService::StartSyncFlare& flare,
|
| const SettingsStorageQuotaEnforcer::Limits& quota,
|
| const scoped_refptr<SettingsObserverList>& observers)
|
| : storage_factory_(storage_factory),
|
| base_path_(base_path),
|
| quota_(quota),
|
| observers_(observers),
|
| - sync_type_(syncer::UNSPECIFIED) {
|
| + sync_type_(sync_type),
|
| + flare_(flare) {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
|
| + DCHECK(sync_type_ == syncer::EXTENSION_SETTINGS ||
|
| + sync_type_ == syncer::APP_SETTINGS);
|
| }
|
|
|
| SettingsBackend::~SettingsBackend() {
|
| @@ -70,6 +75,11 @@ SyncableSettingsStorage* SettingsBackend::GetOrCreateStorageWithSyncData(
|
| CreateSettingsSyncProcessor(extension_id).Pass());
|
| if (error.IsSet())
|
| syncable_storage.get()->StopSyncing();
|
| + } else {
|
| + // Tell sync to try and start soon, because syncable changes to sync_type_
|
| + // have started happening. This will cause sync to call us back
|
| + // asynchronously via MergeDataAndStartSyncing as soon as possible.
|
| + flare_.Run(sync_type_);
|
| }
|
|
|
| return syncable_storage.get();
|
| @@ -168,14 +178,11 @@ syncer::SyncMergeResult SettingsBackend::MergeDataAndStartSyncing(
|
| scoped_ptr<syncer::SyncChangeProcessor> sync_processor,
|
| scoped_ptr<syncer::SyncErrorFactory> sync_error_factory) {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
|
| - DCHECK(type == syncer::EXTENSION_SETTINGS ||
|
| - type == syncer::APP_SETTINGS);
|
| - DCHECK_EQ(sync_type_, syncer::UNSPECIFIED);
|
| + DCHECK_EQ(sync_type_, type);
|
| DCHECK(!sync_processor_.get());
|
| DCHECK(sync_processor.get());
|
| DCHECK(sync_error_factory.get());
|
|
|
| - sync_type_ = type;
|
| sync_processor_ = sync_processor.Pass();
|
| sync_error_factory_ = sync_error_factory.Pass();
|
|
|
| @@ -260,7 +267,7 @@ void SettingsBackend::StopSyncing(syncer::ModelType type) {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
|
| DCHECK(type == syncer::EXTENSION_SETTINGS ||
|
| type == syncer::APP_SETTINGS);
|
| - DCHECK(sync_type_ == type || sync_type_ == syncer::UNSPECIFIED);
|
| + DCHECK_EQ(sync_type_, type);
|
|
|
| for (StorageObjMap::iterator it = storage_objs_.begin();
|
| it != storage_objs_.end(); ++it) {
|
| @@ -269,7 +276,6 @@ void SettingsBackend::StopSyncing(syncer::ModelType type) {
|
| it->second->StopSyncing();
|
| }
|
|
|
| - sync_type_ = syncer::UNSPECIFIED;
|
| sync_processor_.reset();
|
| sync_error_factory_.reset();
|
| }
|
|
|