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

Side by Side Diff: chrome/browser/ui/app_list/app_list_syncable_service.cc

Issue 413033003: Always create OEM folder, update position after sync (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 6 years, 5 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/ui/app_list/app_list_syncable_service.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/app_list/app_list_syncable_service.h" 5 #include "chrome/browser/ui/app_list/app_list_syncable_service.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "chrome/browser/apps/drive/drive_app_provider.h" 8 #include "chrome/browser/apps/drive/drive_app_provider.h"
9 #include "chrome/browser/chrome_notification_types.h" 9 #include "chrome/browser/chrome_notification_types.h"
10 #include "chrome/browser/extensions/extension_service.h" 10 #include "chrome/browser/extensions/extension_service.h"
(...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after
298 } 298 }
299 299
300 void AppListSyncableService::AddItem(scoped_ptr<AppListItem> app_item) { 300 void AppListSyncableService::AddItem(scoped_ptr<AppListItem> app_item) {
301 SyncItem* sync_item = FindOrAddSyncItem(app_item.get()); 301 SyncItem* sync_item = FindOrAddSyncItem(app_item.get());
302 if (!sync_item) 302 if (!sync_item)
303 return; // Item is not valid. 303 return; // Item is not valid.
304 304
305 std::string folder_id; 305 std::string folder_id;
306 if (app_list::switches::IsFolderUIEnabled()) { 306 if (app_list::switches::IsFolderUIEnabled()) {
307 if (AppIsOem(app_item->id())) { 307 if (AppIsOem(app_item->id())) {
308 folder_id = FindOrCreateOemFolder(app_item->id()); 308 folder_id = FindOrCreateOemFolder();
309 VLOG_IF(2, !folder_id.empty()) 309 VLOG_IF(2, !folder_id.empty())
310 << this << ": AddItem to OEM folder: " << sync_item->ToString(); 310 << this << ": AddItem to OEM folder: " << sync_item->ToString();
311 } else { 311 } else {
312 folder_id = sync_item->parent_id; 312 folder_id = sync_item->parent_id;
313 } 313 }
314 } 314 }
315 VLOG(2) << this << ": AddItem: " << sync_item->ToString() 315 VLOG(2) << this << ": AddItem: " << sync_item->ToString()
316 << " Folder: '" << folder_id << "'"; 316 << " Folder: '" << folder_id << "'";
317 model_->AddItemToFolder(app_item.Pass(), folder_id); 317 model_->AddItemToFolder(app_item.Pass(), folder_id);
318 } 318 }
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
469 iter != sync_items_.end(); ++iter) { 469 iter != sync_items_.end(); ++iter) {
470 SyncItem* sync_item = iter->second; 470 SyncItem* sync_item = iter->second;
471 if (sync_item->item_type != sync_pb::AppListSpecifics::TYPE_FOLDER) 471 if (sync_item->item_type != sync_pb::AppListSpecifics::TYPE_FOLDER)
472 continue; 472 continue;
473 AppListItem* app_item = model_->FindItem(sync_item->item_id); 473 AppListItem* app_item = model_->FindItem(sync_item->item_id);
474 if (!app_item) 474 if (!app_item)
475 continue; 475 continue;
476 UpdateAppItemFromSyncItem(sync_item, app_item); 476 UpdateAppItemFromSyncItem(sync_item, app_item);
477 } 477 }
478 478
479 // Create the OEM folder if necessary. 479 // Move the OEM folder if one exists and we have not synced its position.
480 if (oem_folder_item_ids_.empty()) 480 AppListFolderItem* oem_folder = model_->FindFolderItem(kOemFolderId);
481 return; 481 if (oem_folder && !FindSyncItem(kOemFolderId)) {
482 std::string oem_folder_id = FindOrCreateOemFolder(""); 482 model_->SetItemPosition(oem_folder, GetOemFolderPos());
483 DCHECK(!oem_folder_id.empty()); 483 DVLOG(1) << "Creating new OEM folder sync item: "
484 for (std::vector<std::string>::iterator iter = oem_folder_item_ids_.begin(); 484 << oem_folder->position().ToDebugString();
485 iter != oem_folder_item_ids_.end(); ++iter) { 485 CreateSyncItemFromAppItem(oem_folder);
486 AppListItem* app_item = model_->FindItem(*iter);
487 if (!app_item)
488 continue;
489 VLOG(2) << this << ": MoveItem to OEM folder: "
490 << app_item->ToDebugString();
491 model_->MoveItemToFolder(app_item, oem_folder_id);
492 } 486 }
493 } 487 }
494 488
495 void AppListSyncableService::PruneEmptySyncFolders() { 489 void AppListSyncableService::PruneEmptySyncFolders() {
496 if (!app_list::switches::IsFolderUIEnabled()) 490 if (!app_list::switches::IsFolderUIEnabled())
497 return; 491 return;
498 492
499 std::set<std::string> parent_ids; 493 std::set<std::string> parent_ids;
500 for (SyncItemMap::iterator iter = sync_items_.begin(); 494 for (SyncItemMap::iterator iter = sync_items_.begin();
501 iter != sync_items_.end(); ++iter) { 495 iter != sync_items_.end(); ++iter) {
(...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after
822 iter->second->item_type; 816 iter->second->item_type;
823 VLOG(2) << this << " <- SYNC DELETE: " << iter->second->ToString(); 817 VLOG(2) << this << " <- SYNC DELETE: " << iter->second->ToString();
824 delete iter->second; 818 delete iter->second;
825 sync_items_.erase(iter); 819 sync_items_.erase(iter);
826 // Only delete apps from the model. Folders will be deleted when all 820 // Only delete apps from the model. Folders will be deleted when all
827 // children have been deleted. 821 // children have been deleted.
828 if (item_type == sync_pb::AppListSpecifics::TYPE_APP) 822 if (item_type == sync_pb::AppListSpecifics::TYPE_APP)
829 model_->DeleteItem(item_id); 823 model_->DeleteItem(item_id);
830 } 824 }
831 825
832 std::string AppListSyncableService::FindOrCreateOemFolder( 826 std::string AppListSyncableService::FindOrCreateOemFolder() {
833 const std::string& item_id) {
834 AppListFolderItem* oem_folder = model_->FindFolderItem(kOemFolderId); 827 AppListFolderItem* oem_folder = model_->FindFolderItem(kOemFolderId);
835 if (!oem_folder) { 828 if (!oem_folder) {
836 if (!SyncStarted()) {
837 // We need sync to have started to know where to place the OEM folder.
838 // If sync is not started, add |item_id| (which should never be empty
839 // when called before sync is started) to oem_folder_item_ids_.
840 DCHECK(!item_id.empty());
841 oem_folder_item_ids_.push_back(item_id);
842 return "";
843 }
844 scoped_ptr<AppListFolderItem> new_folder(new AppListFolderItem( 829 scoped_ptr<AppListFolderItem> new_folder(new AppListFolderItem(
845 kOemFolderId, AppListFolderItem::FOLDER_TYPE_OEM)); 830 kOemFolderId, AppListFolderItem::FOLDER_TYPE_OEM));
846 oem_folder = static_cast<AppListFolderItem*>( 831 oem_folder = static_cast<AppListFolderItem*>(
847 model_->AddItem(new_folder.PassAs<app_list::AppListItem>())); 832 model_->AddItem(new_folder.PassAs<app_list::AppListItem>()));
848 SyncItem* oem_sync_item = FindSyncItem(kOemFolderId); 833 SyncItem* oem_sync_item = FindSyncItem(kOemFolderId);
849 if (oem_sync_item) { 834 if (oem_sync_item) {
850 DVLOG(1) << "Creating OEM folder from existing sync item: " 835 DVLOG(1) << "Creating OEM folder from existing sync item: "
851 << oem_sync_item->item_ordinal.ToDebugString(); 836 << oem_sync_item->item_ordinal.ToDebugString();
852 model_->SetItemPosition(oem_folder, oem_sync_item->item_ordinal); 837 model_->SetItemPosition(oem_folder, oem_sync_item->item_ordinal);
853 } else { 838 } else {
854 model_->SetItemPosition(oem_folder, GetOemFolderPos()); 839 model_->SetItemPosition(oem_folder, GetOemFolderPos());
855 DVLOG(1) << "Creating new OEM folder sync item: " 840 // Do not create a sync item for the OEM folder here, do it in
856 << oem_folder->position().ToDebugString(); 841 // ResolveFolderPositions() when the item position is finalized.
857 CreateSyncItemFromAppItem(oem_folder);
858 } 842 }
859 } 843 }
860 model_->SetItemName(oem_folder, oem_folder_name_); 844 model_->SetItemName(oem_folder, oem_folder_name_);
861 return oem_folder->id(); 845 return oem_folder->id();
862 } 846 }
863 847
864 syncer::StringOrdinal AppListSyncableService::GetOemFolderPos() { 848 syncer::StringOrdinal AppListSyncableService::GetOemFolderPos() {
865 VLOG(1) << "GetOemFolderPos: " << first_app_list_sync_; 849 VLOG(1) << "GetOemFolderPos: " << first_app_list_sync_;
866 if (!first_app_list_sync_) { 850 if (!first_app_list_sync_) {
867 DVLOG(1) << "Sync items exist, placing OEM folder at end."; 851 DVLOG(1) << "Sync items exist, placing OEM folder at end.";
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
917 } else { 901 } else {
918 res += " { " + item_name + " }"; 902 res += " { " + item_name + " }";
919 res += " [" + item_ordinal.ToDebugString() + "]"; 903 res += " [" + item_ordinal.ToDebugString() + "]";
920 if (!parent_id.empty()) 904 if (!parent_id.empty())
921 res += " <" + parent_id.substr(0, 8) + ">"; 905 res += " <" + parent_id.substr(0, 8) + ">";
922 } 906 }
923 return res; 907 return res;
924 } 908 }
925 909
926 } // namespace app_list 910 } // namespace app_list
OLDNEW
« no previous file with comments | « chrome/browser/ui/app_list/app_list_syncable_service.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698