Chromium Code Reviews| Index: chrome/browser/ui/webui/ntp/app_launcher_handler.cc |
| diff --git a/chrome/browser/ui/webui/ntp/app_launcher_handler.cc b/chrome/browser/ui/webui/ntp/app_launcher_handler.cc |
| index f262926fd93b82562c005fd45cadf94bb2642941..c773627aa0343149a216561bf04d4434aa43b16d 100644 |
| --- a/chrome/browser/ui/webui/ntp/app_launcher_handler.cc |
| +++ b/chrome/browser/ui/webui/ntp/app_launcher_handler.cc |
| @@ -167,27 +167,31 @@ void AppLauncherHandler::CreateAppInfo(const Extension* extension, |
| if (notification) |
| value->Set("notification", SerializeNotification(*notification)); |
| - int app_launch_index = prefs->GetAppLaunchIndex(extension->id()); |
| - if (app_launch_index == -1) { |
| + StringOrdinal page_index = prefs->GetPageIndex(extension->id()); |
| + if (!page_index.IsValid()) { |
| + // Make sure every app has a page index (some predate the page index). |
| + // The webstore app should be on the first page. |
| + page_index = extension->id() == extension_misc::kWebStoreAppId ? |
| + prefs->GetFirstAppPage() : prefs->GetNaturalAppPageIndex(); |
| + prefs->SetPageIndex(extension->id(), page_index); |
| + } |
| + // We convert the page_index to an integer becuase the pages are referenced |
| + // from within an array in the javascript code, which can't be easily |
| + // changed to handle the StringOrdinal values, so we do the conversion here. |
| + value->SetInteger("page_index", prefs->PageIndexAsInteger(page_index)); |
| + |
| + StringOrdinal app_launch_index = prefs->GetAppLaunchIndex(extension->id()); |
| + if (!app_launch_index.IsValid()) { |
| // Make sure every app has a launch index (some predate the launch index). |
| // The webstore's app launch index is set to -2 to make sure it's first. |
| // The next time the user drags (any) app this will be set to something |
| // sane (i.e. >= 0). |
| app_launch_index = extension->id() == extension_misc::kWebStoreAppId ? |
| - -2 : prefs->GetNextAppLaunchIndex(0); |
| + prefs->CreateFirstAppLaunchIndex(page_index) |
| + : prefs->GetNextAppLaunchIndex(page_index); |
|
Finnur
2011/11/17 14:59:25
nit: operator (:) should be at the end of previous
csharp
2011/11/17 19:51:58
Done.
Finnur
2011/11/18 09:35:15
Did you? I don't see the change...
On 2011/11/17
csharp
2011/11/18 15:57:31
Done.
|
| prefs->SetAppLaunchIndex(extension->id(), app_launch_index); |
| } |
| - value->SetInteger("app_launch_index", app_launch_index); |
| - |
| - int page_index = prefs->GetPageIndex(extension->id()); |
| - if (page_index < 0) { |
| - // Make sure every app has a page index (some predate the page index). |
| - // The webstore app should be on the first page. |
| - page_index = extension->id() == extension_misc::kWebStoreAppId ? |
| - 0 : prefs->GetNaturalAppPageIndex(); |
| - prefs->SetPageIndex(extension->id(), page_index); |
| - } |
| - value->SetInteger("page_index", page_index); |
| + value->SetString("app_launch_index", app_launch_index.ToString()); |
| } |
| // TODO(estade): remove this. We record app launches via js calls rather than |
| @@ -407,7 +411,7 @@ void AppLauncherHandler::FillAppDictionary(DictionaryValue* dictionary) { |
| // and this fixes it. If we don't fix it, GetNaturalAppPageIndex() doesn't |
| // work. See http://crbug.com/98325 |
| ExtensionPrefs* prefs = extension_service_->extension_prefs(); |
| - if (prefs->GetPageIndex((*it)->id()) != -1) |
| + if (prefs->GetPageIndex((*it)->id()).IsValid()) |
| prefs->ClearPageIndex((*it)->id()); |
| } |
| } |
| @@ -459,17 +463,21 @@ void AppLauncherHandler::FillAppDictionary(DictionaryValue* dictionary) { |
| if (NewTabUI::NTP4Enabled()) { |
| PrefService* prefs = Profile::FromWebUI(web_ui_)->GetPrefs(); |
| - const ListValue* app_page_names = prefs->GetList(prefs::kNTPAppPageNames); |
| - if (!app_page_names || !app_page_names->GetSize()) { |
| - ListPrefUpdate update(prefs, prefs::kNTPAppPageNames); |
| - ListValue* list = update.Get(); |
| - list->Set(0, Value::CreateStringValue( |
| + const DictionaryValue* app_page_names = |
| + prefs->GetDictionary(prefs::kNTPAppPageNames); |
| + if (!app_page_names || !app_page_names->size()) { |
| + DictionaryPrefUpdate update(prefs, prefs::kNTPAppPageNames); |
| + DictionaryValue* names_dictionary = update.Get(); |
| + StringOrdinal new_page = StringOrdinal::CreateValidOrdinal(); |
| + names_dictionary->Set(new_page.ToString(), Value::CreateStringValue( |
| l10n_util::GetStringUTF16(IDS_APP_DEFAULT_PAGE_NAME))); |
| dictionary->Set("appPageNames", |
| - static_cast<ListValue*>(list->DeepCopy())); |
| + static_cast<DictionaryValue*>( |
| + names_dictionary->DeepCopy())); |
| } else { |
| dictionary->Set("appPageNames", |
| - static_cast<ListValue*>(app_page_names->DeepCopy())); |
| + static_cast<DictionaryValue*>( |
| + app_page_names->DeepCopy())); |
| } |
| } |
| } |
| @@ -753,14 +761,18 @@ void AppLauncherHandler::HandleReorderApps(const ListValue* args) { |
| auto_reset.reset(new AutoReset<bool>(&ignore_changes_, true)); |
| extension_service_->extension_prefs()->SetAppDraggedByUser(dragged_app_id); |
| - extension_service_->extension_prefs()->SetAppLauncherOrder(extension_ids); |
| + extension_service_->extension_prefs()->SetAppLauncherOrder(extension_ids, |
| + dragged_app_id); |
| } |
| void AppLauncherHandler::HandleSetPageIndex(const ListValue* args) { |
| std::string extension_id; |
| - double page_index; |
| + double page_index_raw; |
| CHECK(args->GetString(0, &extension_id)); |
| - CHECK(args->GetDouble(1, &page_index)); |
| + CHECK(args->GetDouble(1, &page_index_raw)); |
| + StringOrdinal page_index = |
| + extension_service_->extension_prefs()->PageIndexAsStringOrdinal( |
| + static_cast<size_t>(page_index_raw)); |
| // Don't update the page; it already knows the apps have been reordered. |
| scoped_ptr<AutoReset<bool> > auto_reset; |
| @@ -768,7 +780,7 @@ void AppLauncherHandler::HandleSetPageIndex(const ListValue* args) { |
| auto_reset.reset(new AutoReset<bool>(&ignore_changes_, true)); |
| extension_service_->extension_prefs()->SetPageIndex(extension_id, |
| - static_cast<int>(page_index)); |
| + page_index); |
| } |
| void AppLauncherHandler::HandlePromoSeen(const ListValue* args) { |
| @@ -783,12 +795,13 @@ void AppLauncherHandler::HandleSaveAppPageName(const ListValue* args) { |
| double page_index; |
| CHECK(args->GetDouble(1, &page_index)); |
| + std::string page_index_str = base::IntToString(static_cast<int>(page_index)); |
| AutoReset<bool> auto_reset(&ignore_changes_, true); |
| PrefService* prefs = Profile::FromWebUI(web_ui_)->GetPrefs(); |
| - ListPrefUpdate update(prefs, prefs::kNTPAppPageNames); |
| - ListValue* list = update.Get(); |
| - list->Set(static_cast<size_t>(page_index), Value::CreateStringValue(name)); |
| + DictionaryPrefUpdate update(prefs, prefs::kNTPAppPageNames); |
| + DictionaryValue* dictionary = update.Get(); |
| + dictionary->Set(page_index_str, Value::CreateStringValue(name)); |
| } |
| void AppLauncherHandler::HandleGenerateAppForLink(const ListValue* args) { |
| @@ -801,6 +814,9 @@ void AppLauncherHandler::HandleGenerateAppForLink(const ListValue* args) { |
| double page_index; |
| CHECK(args->GetDouble(2, &page_index)); |
| + StringOrdinal page_index_str = |
| + extension_service_->extension_prefs()->PageIndexAsStringOrdinal( |
| + static_cast<int>(page_index)); |
| Profile* profile = Profile::FromWebUI(web_ui_); |
| FaviconService* favicon_service = |
| @@ -814,7 +830,7 @@ void AppLauncherHandler::HandleGenerateAppForLink(const ListValue* args) { |
| install_info->is_bookmark_app = true; |
| install_info->title = title; |
| install_info->app_url = launch_url; |
| - install_info->page_index = static_cast<int>(page_index); |
| + install_info->page_index = page_index_str; |
| FaviconService::Handle h = favicon_service->GetFaviconForURL( |
| launch_url, history::FAVICON, &favicon_consumer_, |
| @@ -891,11 +907,11 @@ void AppLauncherHandler::SetAppToBeHighlighted() { |
| // static |
| void AppLauncherHandler::RegisterUserPrefs(PrefService* pref_service) { |
| // TODO(csilv): We will want this to be a syncable preference instead. |
| - pref_service->RegisterListPref(prefs::kNTPAppPageNames, |
| - PrefService::UNSYNCABLE_PREF); |
| + pref_service->RegisterDictionaryPref(prefs::kNTPAppPageNames, |
| + PrefService::UNSYNCABLE_PREF); |
| } |
| -// statiic |
| +// static |
| void AppLauncherHandler::RecordWebStoreLaunch(bool promo_active) { |
| UMA_HISTOGRAM_ENUMERATION(extension_misc::kAppLaunchHistogram, |
| extension_misc::APP_LAUNCH_NTP_WEBSTORE, |