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

Unified Diff: chrome/browser/ui/webui/ntp/app_launcher_handler.cc

Issue 1757673002: NTP4/apps page: fix page stickiness (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@remove-promo-cpp
Patch Set: todookie Created 4 years, 10 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/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 29d62a7474eaef18e54b47eca6092b54c2cccbfc..c3adbc2e2b8e38cb9162995d5848f5539051767e 100644
--- a/chrome/browser/ui/webui/ntp/app_launcher_handler.cc
+++ b/chrome/browser/ui/webui/ntp/app_launcher_handler.cc
@@ -48,6 +48,7 @@
#include "chrome/common/web_application_info.h"
#include "chrome/grit/generated_resources.h"
#include "components/favicon_base/favicon_types.h"
+#include "components/pref_registry/pref_registry_syncable.h"
#include "components/prefs/pref_service.h"
#include "components/prefs/scoped_user_pref_update.h"
#include "content/public/browser/notification_service.h"
@@ -79,6 +80,16 @@ using extensions::ExtensionSystem;
namespace {
+// The purpose of this enum is to track which page on the NTP is showing.
+// The lower 10 bits of kNtpShownPage are used for the index within the page
+// group, and the rest of the bits are used for the page group ID (defined
+// here).
+static const int kPageIdOffset = 10;
+enum {
+ INDEX_MASK = (1 << kPageIdOffset) - 1,
+ APPS_PAGE_ID = 2 << kPageIdOffset,
+};
+
void RecordAppLauncherPromoHistogram(
apps::AppLauncherPromoHistogramValues value) {
DCHECK_LT(value, apps::APP_LAUNCHER_PROMO_MAX);
@@ -86,11 +97,6 @@ void RecordAppLauncherPromoHistogram(
"Apps.AppLauncherPromo", value, apps::APP_LAUNCHER_PROMO_MAX);
}
-// This is used to avoid a DCHECK due to an unhandled WebUI callback. The
-// JavaScript used to switch between pages sends "pageSelected" which is used
-// in the context of the NTP for recording metrics we don't need here.
-void NoOpCallback(const base::ListValue* args) {}
-
} // namespace
AppLauncherHandler::AppInstallInfo::AppInstallInfo() {}
@@ -206,6 +212,20 @@ void AppLauncherHandler::CreateAppInfo(
value->SetString("app_launch_ordinal", app_launch_ordinal.ToInternalValue());
}
+// static
+void AppLauncherHandler::GetLocalizedValues(Profile* profile,
+ base::DictionaryValue* values) {
+ PrefService* prefs = profile->GetPrefs();
+ int shown_page = prefs->GetInteger(prefs::kNtpShownPage);
+ values->SetInteger("shown_page_index", shown_page & INDEX_MASK);
+}
+
+// static
+void AppLauncherHandler::RegisterProfilePrefs(
+ user_prefs::PrefRegistrySyncable* registry) {
+ registry->RegisterIntegerPref(prefs::kNtpShownPage, APPS_PAGE_ID);
+}
+
void AppLauncherHandler::RegisterMessages() {
registrar_.Add(this, chrome::NOTIFICATION_APP_INSTALLED_TO_NTP,
content::Source<WebContents>(web_ui()->GetWebContents()));
@@ -251,12 +271,14 @@ void AppLauncherHandler::RegisterMessages() {
base::Bind(&AppLauncherHandler::HandleGenerateAppForLink,
base::Unretained(this)));
web_ui()->RegisterMessageCallback("stopShowingAppLauncherPromo",
- base::Bind(&AppLauncherHandler::StopShowingAppLauncherPromo,
+ base::Bind(&AppLauncherHandler::HandleStopShowingAppLauncherPromo,
base::Unretained(this)));
web_ui()->RegisterMessageCallback("onLearnMore",
- base::Bind(&AppLauncherHandler::OnLearnMore,
+ base::Bind(&AppLauncherHandler::HandleOnLearnMore,
+ base::Unretained(this)));
+ web_ui()->RegisterMessageCallback("pageSelected",
+ base::Bind(&AppLauncherHandler::HandlePageSelected,
base::Unretained(this)));
- web_ui()->RegisterMessageCallback("pageSelected", base::Bind(&NoOpCallback));
}
void AppLauncherHandler::Observe(int type,
@@ -710,7 +732,7 @@ void AppLauncherHandler::HandleGenerateAppForLink(const base::ListValue* args) {
&cancelable_task_tracker_);
}
-void AppLauncherHandler::StopShowingAppLauncherPromo(
+void AppLauncherHandler::HandleStopShowingAppLauncherPromo(
const base::ListValue* args) {
#if defined(ENABLE_APP_LIST)
g_browser_process->local_state()->SetBoolean(
@@ -719,10 +741,19 @@ void AppLauncherHandler::StopShowingAppLauncherPromo(
#endif
}
-void AppLauncherHandler::OnLearnMore(const base::ListValue* args) {
+void AppLauncherHandler::HandleOnLearnMore(const base::ListValue* args) {
RecordAppLauncherPromoHistogram(apps::APP_LAUNCHER_PROMO_LEARN_MORE);
}
+void AppLauncherHandler::HandlePageSelected(const base::ListValue* args) {
+ double index_double;
+ CHECK(args->GetDouble(0, &index_double));
+ int index = static_cast<int>(index_double);
+
+ PrefService* prefs = Profile::FromWebUI(web_ui())->GetPrefs();
+ prefs->SetInteger(prefs::kNtpShownPage, APPS_PAGE_ID | index);
+}
+
void AppLauncherHandler::OnFaviconForApp(
scoped_ptr<AppInstallInfo> install_info,
const favicon_base::FaviconImageResult& image_result) {
« no previous file with comments | « chrome/browser/ui/webui/ntp/app_launcher_handler.h ('k') | chrome/browser/ui/webui/ntp/new_tab_page_handler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698