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

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

Issue 396843003: Place OEM folder for new users after Web Store (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 | « no previous file | 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 857 matching lines...) Expand 10 before | Expand all | Expand 10 after
868 syncer::StringOrdinal last; 868 syncer::StringOrdinal last;
869 for (SyncItemMap::iterator iter = sync_items_.begin(); 869 for (SyncItemMap::iterator iter = sync_items_.begin();
870 iter != sync_items_.end(); ++iter) { 870 iter != sync_items_.end(); ++iter) {
871 SyncItem* sync_item = iter->second; 871 SyncItem* sync_item = iter->second;
872 if (!last.IsValid() || sync_item->item_ordinal.GreaterThan(last)) 872 if (!last.IsValid() || sync_item->item_ordinal.GreaterThan(last))
873 last = sync_item->item_ordinal; 873 last = sync_item->item_ordinal;
874 } 874 }
875 return last.CreateAfter(); 875 return last.CreateAfter();
876 } 876 }
877 877
878 // Place the OEM folder just before the last unremovable default item. 878 // Place the OEM folder just after the web store, which should always be
879 // Since positions are relative, anywhere else is unstable. TODO(stevenjb): 879 // followed by a pre-installed app (e.g. Search), so the poosition should be
880 // consider explicitly setting the OEM folder location along with the name in 880 // stable. TODO(stevenjb): consider explicitly setting the OEM folder location
881 // ServicesCustomizationDocument::SetOemFolderName(). 881 // along with the name in ServicesCustomizationDocument::SetOemFolderName().
882 AppListItemList* item_list = model_->top_level_item_list(); 882 AppListItemList* item_list = model_->top_level_item_list();
883 if (item_list->item_count() == 0)
884 return syncer::StringOrdinal();
885
883 size_t oem_index = 0; 886 size_t oem_index = 0;
884 for (int i = static_cast<int>(item_list->item_count()) - 1; i >= 0; --i) { 887 for (; oem_index < item_list->item_count() - 1; ++oem_index) {
885 AppListItem* cur_item = item_list->item_at(i); 888 AppListItem* cur_item = item_list->item_at(oem_index);
886 const std::string& id = cur_item->id(); 889 if (cur_item->id() == extension_misc::kWebStoreAppId)
887 if (IsUnRemovableDefaultApp(id)) {
888 oem_index = i;
889 break; 890 break;
890 }
891 } 891 }
892 syncer::StringOrdinal oem_ordinal; 892 syncer::StringOrdinal oem_ordinal;
893 AppListItem* next = item_list->item_at(oem_index); 893 AppListItem* prev = item_list->item_at(oem_index);
894 if (oem_index > 0) { 894 if (oem_index + 1 < item_list->item_count()) {
895 AppListItem* prev = item_list->item_at(oem_index - 1); 895 AppListItem* next = item_list->item_at(oem_index + 1);
896 oem_ordinal = prev->position().CreateBetween(next->position()); 896 oem_ordinal = prev->position().CreateBetween(next->position());
897 } else { 897 } else {
898 oem_ordinal = next->position().CreateBefore(); 898 oem_ordinal = prev->position().CreateAfter();
899 } 899 }
900 DVLOG(1) << "Placing OEM Folder at: " << oem_index 900 VLOG(1) << "Placing OEM Folder at: " << oem_index
901 << " position: " << oem_ordinal.ToDebugString(); 901 << " position: " << oem_ordinal.ToDebugString();
902 return oem_ordinal; 902 return oem_ordinal;
903 } 903 }
904 904
905 bool AppListSyncableService::AppIsOem(const std::string& id) { 905 bool AppListSyncableService::AppIsOem(const std::string& id) {
906 if (!extension_system_->extension_service()) 906 if (!extension_system_->extension_service())
907 return false; 907 return false;
908 const extensions::Extension* extension = 908 const extensions::Extension* extension =
909 extension_system_->extension_service()->GetExtensionById(id, true); 909 extension_system_->extension_service()->GetExtensionById(id, true);
910 return extension && extension->was_installed_by_oem(); 910 return extension && extension->was_installed_by_oem();
911 } 911 }
912 912
913 std::string AppListSyncableService::SyncItem::ToString() const { 913 std::string AppListSyncableService::SyncItem::ToString() const {
914 std::string res = item_id.substr(0, 8); 914 std::string res = item_id.substr(0, 8);
915 if (item_type == sync_pb::AppListSpecifics::TYPE_REMOVE_DEFAULT_APP) { 915 if (item_type == sync_pb::AppListSpecifics::TYPE_REMOVE_DEFAULT_APP) {
916 res += " { RemoveDefault }"; 916 res += " { RemoveDefault }";
917 } else { 917 } else {
918 res += " { " + item_name + " }"; 918 res += " { " + item_name + " }";
919 res += " [" + item_ordinal.ToDebugString() + "]"; 919 res += " [" + item_ordinal.ToDebugString() + "]";
920 if (!parent_id.empty()) 920 if (!parent_id.empty())
921 res += " <" + parent_id.substr(0, 8) + ">"; 921 res += " <" + parent_id.substr(0, 8) + ">";
922 } 922 }
923 return res; 923 return res;
924 } 924 }
925 925
926 } // namespace app_list 926 } // namespace app_list
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698