Chromium Code Reviews| Index: chrome/browser/extensions/sync_bundle.cc |
| diff --git a/chrome/browser/extensions/sync_bundle.cc b/chrome/browser/extensions/sync_bundle.cc |
| index 09afb3ad83a4bca9226547f4e6fb3fddbcf1e151..22e4a342f78fc1a79511bce7d61e07c3d3566cf2 100644 |
| --- a/chrome/browser/extensions/sync_bundle.cc |
| +++ b/chrome/browser/extensions/sync_bundle.cc |
| @@ -28,7 +28,11 @@ void SyncBundle::MergeDataAndStartSyncing( |
| ExtensionSyncData::CreateFromSyncData(sync_data)); |
| if (extension_sync_data.get()) { |
| AddSyncedExtension(extension_sync_data->id()); |
| - sync_service_->ApplySyncData(*extension_sync_data); |
| + |
| + // If the extension has local state that needs to be synced, ignore this |
| + // change (we assume the local state is more recent). |
| + if (!sync_service_->ExtensionNeedsSync(extension_sync_data->id())) |
| + sync_service_->ApplySyncData(*extension_sync_data); |
|
not at google - send to devlin
2015/07/16 18:25:47
It's odd to me that we make this check here, but t
Marc Treib
2015/07/17 10:24:06
Not quite - this also calls AddSyncedExtension for
not at google - send to devlin
2015/07/17 15:28:50
Ah right, thanks. "StartSyncing" would be even bet
Marc Treib
2015/07/20 09:28:22
Done.
|
| } |
| } |
| } |
| @@ -43,17 +47,6 @@ bool SyncBundle::IsSyncing() const { |
| return sync_processor_ != nullptr; |
| } |
| -bool SyncBundle::HasExtensionId(const std::string& id) const { |
| - return synced_extensions_.find(id) != synced_extensions_.end(); |
| -} |
| - |
| -bool SyncBundle::ShouldIncludeInLocalSyncDataList( |
| - const Extension& extension) const { |
| - // If there is pending data for this extension, then this version is out of |
| - // date. We'll sync back the version we got from sync. |
| - return IsSyncing() && !HasPendingExtensionId(extension.id()); |
| -} |
| - |
| void SyncBundle::PushSyncDataList( |
| const syncer::SyncDataList& sync_data_list) { |
| syncer::SyncChangeList sync_change_list; |
| @@ -71,6 +64,9 @@ void SyncBundle::PushSyncDataList( |
| void SyncBundle::PushSyncDeletion(const std::string& extension_id, |
| const syncer::SyncData& sync_data) { |
| + if (!HasSyncedExtension(extension_id)) |
| + return; |
| + |
| RemoveSyncedExtension(extension_id); |
| PushSyncChanges(syncer::SyncChangeList(1, |
| syncer::SyncChange(FROM_HERE, |
| @@ -78,13 +74,14 @@ void SyncBundle::PushSyncDeletion(const std::string& extension_id, |
| sync_data))); |
| } |
| -void SyncBundle::PushSyncAddOrUpdate(const Extension& extension) { |
| - syncer::SyncChangeList sync_change_list( |
| - 1, |
| - CreateSyncChange(extension.id(), |
| - sync_service_->CreateSyncData(extension).GetSyncData())); |
| - PushSyncChanges(sync_change_list); |
| - MarkPendingExtensionSynced(extension.id()); |
| +void SyncBundle::PushSyncAddOrUpdate(const std::string& extension_id, |
| + const syncer::SyncData& sync_data) { |
| + AddSyncedExtension(extension_id); |
| + PushSyncChanges(syncer::SyncChangeList( |
| + 1, CreateSyncChange(extension_id, sync_data))); |
| + // Now sync and local state agree. If we had any pending change from sync, |
| + // clear it now. |
| + pending_sync_data_.erase(extension_id); |
| } |
| void SyncBundle::ApplySyncChange(const syncer::SyncChange& sync_change) { |
| @@ -123,8 +120,8 @@ syncer::SyncChange SyncBundle::CreateSyncChange( |
| const syncer::SyncData& sync_data) const { |
| return syncer::SyncChange( |
| FROM_HERE, |
| - HasExtensionId(extension_id) ? syncer::SyncChange::ACTION_UPDATE |
| - : syncer::SyncChange::ACTION_ADD, |
| + HasSyncedExtension(extension_id) ? syncer::SyncChange::ACTION_UPDATE |
| + : syncer::SyncChange::ACTION_ADD, |
| sync_data); |
| } |
| @@ -141,9 +138,8 @@ void SyncBundle::RemoveSyncedExtension(const std::string& id) { |
| synced_extensions_.erase(id); |
| } |
| -void SyncBundle::MarkPendingExtensionSynced(const std::string& id) { |
| - pending_sync_data_.erase(id); |
| - AddSyncedExtension(id); |
| +bool SyncBundle::HasSyncedExtension(const std::string& id) const { |
| + return synced_extensions_.find(id) != synced_extensions_.end(); |
| } |
| } // namespace extensions |