Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(395)

Unified Diff: chrome/browser/ui/app_list/app_list_syncable_service.cc

Issue 2614803002: Prevent appearing INVALID position ordinal in sync. (Closed)
Patch Set: Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/app_list/app_list_syncable_service.cc
diff --git a/chrome/browser/ui/app_list/app_list_syncable_service.cc b/chrome/browser/ui/app_list/app_list_syncable_service.cc
index 555bfbd8b4e574a0268217e7dd5f6b4401a67d69..8117b253ceb0c13fa3a6349fccfcfb87cbcc569d 100644
--- a/chrome/browser/ui/app_list/app_list_syncable_service.cc
+++ b/chrome/browser/ui/app_list/app_list_syncable_service.cc
@@ -567,6 +567,7 @@ AppListSyncableService::CreateSyncItemFromAppItem(AppListItem* app_item) {
return NULL;
VLOG(2) << this << " CreateSyncItemFromAppItem:" << app_item->ToDebugString();
SyncItem* sync_item = CreateSyncItem(app_item->id(), type);
+ DCHECK(app_item->position().IsValid());
UpdateSyncItemFromAppItem(app_item, sync_item);
UpdateSyncItemInLocalStorage(profile_, sync_item);
SendSyncChange(sync_item, SyncChange::ACTION_ADD);
@@ -584,6 +585,8 @@ syncer::StringOrdinal AppListSyncableService::GetPinPosition(
void AppListSyncableService::SetPinPosition(
const std::string& app_id,
const syncer::StringOrdinal& item_pin_ordinal) {
+ // Pin position can be set only after model is built.
+ DCHECK(IsInitialized());
SyncItem* sync_item = FindSyncItem(app_id);
SyncChange::SyncChangeType sync_change_type;
if (sync_item) {
@@ -604,9 +607,15 @@ void AppListSyncableService::AddOrUpdateFromSyncItem(AppListItem* app_item) {
if (app_item->id() == kOemFolderId)
return;
+ DCHECK(app_item->position().IsValid());
+
SyncItem* sync_item = FindSyncItem(app_item->id());
if (sync_item) {
UpdateAppItemFromSyncItem(sync_item, app_item);
+ if (!sync_item->item_ordinal.IsValid()) {
+ UpdateSyncItem(app_item);
+ VLOG(2) << "Flushing position to sync item " << sync_item;
+ }
return;
}
CreateSyncItemFromAppItem(app_item);
@@ -840,6 +849,33 @@ syncer::SyncMergeResult AppListSyncableService::MergeDataAndStartSyncing(
change_list.push_back(SyncChange(FROM_HERE, SyncChange::ACTION_ADD,
GetSyncDataFromSyncItem(sync_item)));
}
+
+ // Fix items that do not contain valid app list position, required for
+ // builds prior to M53.
stevenjb 2017/01/04 20:34:26 nit: reference crbug.
khmel 2017/01/04 21:15:12 Done.
+ for (const auto& sync_pair : sync_items_) {
+ SyncItem* sync_item = sync_pair.second.get();
+ if (sync_item->item_type != sync_pb::AppListSpecifics::TYPE_APP ||
+ sync_item->item_ordinal.IsValid()) {
+ continue;
+ }
+ const AppListItem* app_item = model_->FindItem(sync_item->item_id);
+ if (app_item) {
+ if (UpdateSyncItemFromAppItem(app_item, sync_item)) {
+ VLOG(1) << "Fixing sync item from existing app " << sync_item;
+ change_list.push_back(SyncChange(FROM_HERE, SyncChange::ACTION_UPDATE,
+ GetSyncDataFromSyncItem(sync_item)));
+ } else {
+ VLOG(1) << "Failed to fix sync item from existing app " << sync_item;
stevenjb 2017/01/04 20:34:26 Maybe use: sync_item->item_ordinal = syncer::Strin
khmel 2017/01/04 21:15:12 Good point!
+ }
+ } else {
+ sync_item->item_ordinal = syncer::StringOrdinal::CreateInitialOrdinal();
+ VLOG(1) << "Fixing sync item by generate new position ordinal "
stevenjb 2017/01/04 20:34:26 nit: s/generate/generating/ also: ":" separating s
khmel 2017/01/04 21:15:12 Done.
+ << sync_item;
+ change_list.push_back(SyncChange(FROM_HERE, SyncChange::ACTION_UPDATE,
+ GetSyncDataFromSyncItem(sync_item)));
+ }
+ }
+
sync_processor_->ProcessSyncChanges(FROM_HERE, change_list);
HandleUpdateFinished();
« no previous file with comments | « no previous file | chrome/browser/ui/app_list/chrome_app_list_item.cc » ('j') | chrome/browser/ui/app_list/chrome_app_list_item.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698