Index: chrome/browser/extensions/extension_prefs.cc |
diff --git a/chrome/browser/extensions/extension_prefs.cc b/chrome/browser/extensions/extension_prefs.cc |
index 95c10b1d1300d4e944bbf997e5539f0189db1807..816b5ce404ac39333cca2fa79b6ed0a45c7683f9 100644 |
--- a/chrome/browser/extensions/extension_prefs.cc |
+++ b/chrome/browser/extensions/extension_prefs.cc |
@@ -21,6 +21,10 @@ using base::Time; |
namespace { |
+// The number of apps per page. This isn't a hard limit, but new apps installed |
+// from the webstore will overflow onto a new page if this limit is reached. |
+const int kNaturalAppPageSize = 18; |
+ |
// Additional preferences keys |
// Where an extension was installed from. (see Extension::Location) |
@@ -980,10 +984,15 @@ void ExtensionPrefs::OnExtensionInstalled( |
extension_dict->Set(kPrefManifest, |
extension->manifest_value()->DeepCopy()); |
} |
- extension_dict->Set(kPrefPageIndex, |
- Value::CreateIntegerValue(page_index)); |
- extension_dict->Set(kPrefAppLaunchIndex, |
- Value::CreateIntegerValue(GetNextAppLaunchIndex(page_index))); |
+ |
+ if (extension->is_app()) { |
+ if (page_index == -1) |
+ page_index = GetNaturalAppPageIndex(); |
+ extension_dict->Set(kPrefPageIndex, |
+ Value::CreateIntegerValue(page_index)); |
+ extension_dict->Set(kPrefAppLaunchIndex, |
+ Value::CreateIntegerValue(GetNextAppLaunchIndex(page_index))); |
+ } |
extension_pref_value_map_->RegisterExtension( |
id, install_time, initial_state == Extension::ENABLED); |
content_settings_store_->RegisterExtension( |
@@ -1322,7 +1331,6 @@ int ExtensionPrefs::GetAppLaunchIndex(const std::string& extension_id) { |
void ExtensionPrefs::SetAppLaunchIndex(const std::string& extension_id, |
int index) { |
- DCHECK_GE(index, 0); |
UpdateExtensionPref(extension_id, kPrefAppLaunchIndex, |
Value::CreateIntegerValue(index)); |
} |
@@ -1343,6 +1351,25 @@ int ExtensionPrefs::GetNextAppLaunchIndex(int on_page) { |
return max_value + 1; |
} |
+int ExtensionPrefs::GetNaturalAppPageIndex() { |
+ const DictionaryValue* extensions = prefs_->GetDictionary(kExtensionsPref); |
+ if (!extensions) |
+ return 0; |
+ |
+ std::map<int, int> page_counts; |
+ for (DictionaryValue::key_iterator extension_id = extensions->begin_keys(); |
+ extension_id != extensions->end_keys(); ++extension_id) { |
+ int page_index = GetPageIndex(*extension_id); |
+ if (page_index >= 0) |
+ page_counts[page_index] = page_counts[page_index] + 1; |
+ } |
+ for (int i = 0; ; i++) { |
+ std::map<int, int>::const_iterator it = page_counts.find(i); |
+ if (it == page_counts.end() || it->second < kNaturalAppPageSize) |
+ return i; |
+ } |
+} |
+ |
void ExtensionPrefs::SetAppLauncherOrder( |
const std::vector<std::string>& extension_ids) { |
for (size_t i = 0; i < extension_ids.size(); ++i) |
@@ -1361,7 +1388,6 @@ int ExtensionPrefs::GetPageIndex(const std::string& extension_id) { |
} |
void ExtensionPrefs::SetPageIndex(const std::string& extension_id, int index) { |
- CHECK_GE(index, 0); |
UpdateExtensionPref(extension_id, kPrefPageIndex, |
Value::CreateIntegerValue(index)); |
} |