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

Side by Side 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, 9 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/webui/ntp/app_launcher_handler.h" 5 #include "chrome/browser/ui/webui/ntp/app_launcher_handler.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <vector> 9 #include <vector>
10 10
(...skipping 30 matching lines...) Expand all
41 #include "chrome/browser/ui/webui/ntp/new_tab_ui.h" 41 #include "chrome/browser/ui/webui/ntp/new_tab_ui.h"
42 #include "chrome/common/chrome_switches.h" 42 #include "chrome/common/chrome_switches.h"
43 #include "chrome/common/extensions/extension_constants.h" 43 #include "chrome/common/extensions/extension_constants.h"
44 #include "chrome/common/extensions/extension_metrics.h" 44 #include "chrome/common/extensions/extension_metrics.h"
45 #include "chrome/common/extensions/manifest_handlers/app_launch_info.h" 45 #include "chrome/common/extensions/manifest_handlers/app_launch_info.h"
46 #include "chrome/common/pref_names.h" 46 #include "chrome/common/pref_names.h"
47 #include "chrome/common/url_constants.h" 47 #include "chrome/common/url_constants.h"
48 #include "chrome/common/web_application_info.h" 48 #include "chrome/common/web_application_info.h"
49 #include "chrome/grit/generated_resources.h" 49 #include "chrome/grit/generated_resources.h"
50 #include "components/favicon_base/favicon_types.h" 50 #include "components/favicon_base/favicon_types.h"
51 #include "components/pref_registry/pref_registry_syncable.h"
51 #include "components/prefs/pref_service.h" 52 #include "components/prefs/pref_service.h"
52 #include "components/prefs/scoped_user_pref_update.h" 53 #include "components/prefs/scoped_user_pref_update.h"
53 #include "content/public/browser/notification_service.h" 54 #include "content/public/browser/notification_service.h"
54 #include "content/public/browser/web_ui.h" 55 #include "content/public/browser/web_ui.h"
55 #include "content/public/common/favicon_url.h" 56 #include "content/public/common/favicon_url.h"
56 #include "extensions/browser/app_sorting.h" 57 #include "extensions/browser/app_sorting.h"
57 #include "extensions/browser/extension_prefs.h" 58 #include "extensions/browser/extension_prefs.h"
58 #include "extensions/browser/extension_registry.h" 59 #include "extensions/browser/extension_registry.h"
59 #include "extensions/browser/extension_system.h" 60 #include "extensions/browser/extension_system.h"
60 #include "extensions/browser/management_policy.h" 61 #include "extensions/browser/management_policy.h"
(...skipping 11 matching lines...) Expand all
72 using extensions::AppSorting; 73 using extensions::AppSorting;
73 using extensions::CrxInstaller; 74 using extensions::CrxInstaller;
74 using extensions::Extension; 75 using extensions::Extension;
75 using extensions::ExtensionPrefs; 76 using extensions::ExtensionPrefs;
76 using extensions::ExtensionRegistry; 77 using extensions::ExtensionRegistry;
77 using extensions::ExtensionSet; 78 using extensions::ExtensionSet;
78 using extensions::ExtensionSystem; 79 using extensions::ExtensionSystem;
79 80
80 namespace { 81 namespace {
81 82
83 // The purpose of this enum is to track which page on the NTP is showing.
84 // The lower 10 bits of kNtpShownPage are used for the index within the page
85 // group, and the rest of the bits are used for the page group ID (defined
86 // here).
87 static const int kPageIdOffset = 10;
88 enum {
89 INDEX_MASK = (1 << kPageIdOffset) - 1,
90 APPS_PAGE_ID = 2 << kPageIdOffset,
91 };
92
82 void RecordAppLauncherPromoHistogram( 93 void RecordAppLauncherPromoHistogram(
83 apps::AppLauncherPromoHistogramValues value) { 94 apps::AppLauncherPromoHistogramValues value) {
84 DCHECK_LT(value, apps::APP_LAUNCHER_PROMO_MAX); 95 DCHECK_LT(value, apps::APP_LAUNCHER_PROMO_MAX);
85 UMA_HISTOGRAM_ENUMERATION( 96 UMA_HISTOGRAM_ENUMERATION(
86 "Apps.AppLauncherPromo", value, apps::APP_LAUNCHER_PROMO_MAX); 97 "Apps.AppLauncherPromo", value, apps::APP_LAUNCHER_PROMO_MAX);
87 } 98 }
88 99
89 // This is used to avoid a DCHECK due to an unhandled WebUI callback. The
90 // JavaScript used to switch between pages sends "pageSelected" which is used
91 // in the context of the NTP for recording metrics we don't need here.
92 void NoOpCallback(const base::ListValue* args) {}
93
94 } // namespace 100 } // namespace
95 101
96 AppLauncherHandler::AppInstallInfo::AppInstallInfo() {} 102 AppLauncherHandler::AppInstallInfo::AppInstallInfo() {}
97 103
98 AppLauncherHandler::AppInstallInfo::~AppInstallInfo() {} 104 AppLauncherHandler::AppInstallInfo::~AppInstallInfo() {}
99 105
100 AppLauncherHandler::AppLauncherHandler(ExtensionService* extension_service) 106 AppLauncherHandler::AppLauncherHandler(ExtensionService* extension_service)
101 : extension_service_(extension_service), 107 : extension_service_(extension_service),
102 ignore_changes_(false), 108 ignore_changes_(false),
103 attempted_bookmark_app_install_(false), 109 attempted_bookmark_app_install_(false),
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 // ordinal). The webstore's app launch ordinal is always set to the first 205 // ordinal). The webstore's app launch ordinal is always set to the first
200 // position. 206 // position.
201 app_launch_ordinal = extension->id() == extensions::kWebStoreAppId ? 207 app_launch_ordinal = extension->id() == extensions::kWebStoreAppId ?
202 sorting->CreateFirstAppLaunchOrdinal(page_ordinal) : 208 sorting->CreateFirstAppLaunchOrdinal(page_ordinal) :
203 sorting->CreateNextAppLaunchOrdinal(page_ordinal); 209 sorting->CreateNextAppLaunchOrdinal(page_ordinal);
204 sorting->SetAppLaunchOrdinal(extension->id(), app_launch_ordinal); 210 sorting->SetAppLaunchOrdinal(extension->id(), app_launch_ordinal);
205 } 211 }
206 value->SetString("app_launch_ordinal", app_launch_ordinal.ToInternalValue()); 212 value->SetString("app_launch_ordinal", app_launch_ordinal.ToInternalValue());
207 } 213 }
208 214
215 // static
216 void AppLauncherHandler::GetLocalizedValues(Profile* profile,
217 base::DictionaryValue* values) {
218 PrefService* prefs = profile->GetPrefs();
219 int shown_page = prefs->GetInteger(prefs::kNtpShownPage);
220 values->SetInteger("shown_page_index", shown_page & INDEX_MASK);
221 }
222
223 // static
224 void AppLauncherHandler::RegisterProfilePrefs(
225 user_prefs::PrefRegistrySyncable* registry) {
226 registry->RegisterIntegerPref(prefs::kNtpShownPage, APPS_PAGE_ID);
227 }
228
209 void AppLauncherHandler::RegisterMessages() { 229 void AppLauncherHandler::RegisterMessages() {
210 registrar_.Add(this, chrome::NOTIFICATION_APP_INSTALLED_TO_NTP, 230 registrar_.Add(this, chrome::NOTIFICATION_APP_INSTALLED_TO_NTP,
211 content::Source<WebContents>(web_ui()->GetWebContents())); 231 content::Source<WebContents>(web_ui()->GetWebContents()));
212 232
213 // Some tests don't have a local state. 233 // Some tests don't have a local state.
214 #if defined(ENABLE_APP_LIST) 234 #if defined(ENABLE_APP_LIST)
215 if (g_browser_process->local_state()) { 235 if (g_browser_process->local_state()) {
216 local_state_pref_change_registrar_.Init(g_browser_process->local_state()); 236 local_state_pref_change_registrar_.Init(g_browser_process->local_state());
217 local_state_pref_change_registrar_.Add( 237 local_state_pref_change_registrar_.Add(
218 prefs::kShowAppLauncherPromo, 238 prefs::kShowAppLauncherPromo,
(...skipping 25 matching lines...) Expand all
244 web_ui()->RegisterMessageCallback("setPageIndex", 264 web_ui()->RegisterMessageCallback("setPageIndex",
245 base::Bind(&AppLauncherHandler::HandleSetPageIndex, 265 base::Bind(&AppLauncherHandler::HandleSetPageIndex,
246 base::Unretained(this))); 266 base::Unretained(this)));
247 web_ui()->RegisterMessageCallback("saveAppPageName", 267 web_ui()->RegisterMessageCallback("saveAppPageName",
248 base::Bind(&AppLauncherHandler::HandleSaveAppPageName, 268 base::Bind(&AppLauncherHandler::HandleSaveAppPageName,
249 base::Unretained(this))); 269 base::Unretained(this)));
250 web_ui()->RegisterMessageCallback("generateAppForLink", 270 web_ui()->RegisterMessageCallback("generateAppForLink",
251 base::Bind(&AppLauncherHandler::HandleGenerateAppForLink, 271 base::Bind(&AppLauncherHandler::HandleGenerateAppForLink,
252 base::Unretained(this))); 272 base::Unretained(this)));
253 web_ui()->RegisterMessageCallback("stopShowingAppLauncherPromo", 273 web_ui()->RegisterMessageCallback("stopShowingAppLauncherPromo",
254 base::Bind(&AppLauncherHandler::StopShowingAppLauncherPromo, 274 base::Bind(&AppLauncherHandler::HandleStopShowingAppLauncherPromo,
255 base::Unretained(this))); 275 base::Unretained(this)));
256 web_ui()->RegisterMessageCallback("onLearnMore", 276 web_ui()->RegisterMessageCallback("onLearnMore",
257 base::Bind(&AppLauncherHandler::OnLearnMore, 277 base::Bind(&AppLauncherHandler::HandleOnLearnMore,
258 base::Unretained(this))); 278 base::Unretained(this)));
259 web_ui()->RegisterMessageCallback("pageSelected", base::Bind(&NoOpCallback)); 279 web_ui()->RegisterMessageCallback("pageSelected",
280 base::Bind(&AppLauncherHandler::HandlePageSelected,
281 base::Unretained(this)));
260 } 282 }
261 283
262 void AppLauncherHandler::Observe(int type, 284 void AppLauncherHandler::Observe(int type,
263 const content::NotificationSource& source, 285 const content::NotificationSource& source,
264 const content::NotificationDetails& details) { 286 const content::NotificationDetails& details) {
265 if (type == chrome::NOTIFICATION_APP_INSTALLED_TO_NTP) { 287 if (type == chrome::NOTIFICATION_APP_INSTALLED_TO_NTP) {
266 highlight_app_id_ = *content::Details<const std::string>(details).ptr(); 288 highlight_app_id_ = *content::Details<const std::string>(details).ptr();
267 if (has_loaded_apps_) 289 if (has_loaded_apps_)
268 SetAppToBeHighlighted(); 290 SetAppToBeHighlighted();
269 return; 291 return;
(...skipping 433 matching lines...) Expand 10 before | Expand all | Expand 10 after
703 install_info->page_ordinal = page_ordinal; 725 install_info->page_ordinal = page_ordinal;
704 726
705 favicon_service->GetFaviconImageForPageURL( 727 favicon_service->GetFaviconImageForPageURL(
706 launch_url, 728 launch_url,
707 base::Bind(&AppLauncherHandler::OnFaviconForApp, 729 base::Bind(&AppLauncherHandler::OnFaviconForApp,
708 base::Unretained(this), 730 base::Unretained(this),
709 base::Passed(&install_info)), 731 base::Passed(&install_info)),
710 &cancelable_task_tracker_); 732 &cancelable_task_tracker_);
711 } 733 }
712 734
713 void AppLauncherHandler::StopShowingAppLauncherPromo( 735 void AppLauncherHandler::HandleStopShowingAppLauncherPromo(
714 const base::ListValue* args) { 736 const base::ListValue* args) {
715 #if defined(ENABLE_APP_LIST) 737 #if defined(ENABLE_APP_LIST)
716 g_browser_process->local_state()->SetBoolean( 738 g_browser_process->local_state()->SetBoolean(
717 prefs::kShowAppLauncherPromo, false); 739 prefs::kShowAppLauncherPromo, false);
718 RecordAppLauncherPromoHistogram(apps::APP_LAUNCHER_PROMO_DISMISSED); 740 RecordAppLauncherPromoHistogram(apps::APP_LAUNCHER_PROMO_DISMISSED);
719 #endif 741 #endif
720 } 742 }
721 743
722 void AppLauncherHandler::OnLearnMore(const base::ListValue* args) { 744 void AppLauncherHandler::HandleOnLearnMore(const base::ListValue* args) {
723 RecordAppLauncherPromoHistogram(apps::APP_LAUNCHER_PROMO_LEARN_MORE); 745 RecordAppLauncherPromoHistogram(apps::APP_LAUNCHER_PROMO_LEARN_MORE);
724 } 746 }
725 747
748 void AppLauncherHandler::HandlePageSelected(const base::ListValue* args) {
749 double index_double;
750 CHECK(args->GetDouble(0, &index_double));
751 int index = static_cast<int>(index_double);
752
753 PrefService* prefs = Profile::FromWebUI(web_ui())->GetPrefs();
754 prefs->SetInteger(prefs::kNtpShownPage, APPS_PAGE_ID | index);
755 }
756
726 void AppLauncherHandler::OnFaviconForApp( 757 void AppLauncherHandler::OnFaviconForApp(
727 scoped_ptr<AppInstallInfo> install_info, 758 scoped_ptr<AppInstallInfo> install_info,
728 const favicon_base::FaviconImageResult& image_result) { 759 const favicon_base::FaviconImageResult& image_result) {
729 scoped_ptr<WebApplicationInfo> web_app(new WebApplicationInfo()); 760 scoped_ptr<WebApplicationInfo> web_app(new WebApplicationInfo());
730 web_app->title = install_info->title; 761 web_app->title = install_info->title;
731 web_app->app_url = install_info->app_url; 762 web_app->app_url = install_info->app_url;
732 763
733 if (!image_result.image.IsEmpty()) { 764 if (!image_result.image.IsEmpty()) {
734 WebApplicationInfo::IconInfo icon; 765 WebApplicationInfo::IconInfo icon;
735 icon.data = image_result.image.AsBitmap(); 766 icon.data = image_result.image.AsBitmap();
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
848 base::FundamentalValue(!extension_id_prompting_.empty())); 879 base::FundamentalValue(!extension_id_prompting_.empty()));
849 } 880 }
850 881
851 bool AppLauncherHandler::ShouldShow(const Extension* extension) const { 882 bool AppLauncherHandler::ShouldShow(const Extension* extension) const {
852 if (ignore_changes_ || !has_loaded_apps_ || !extension->is_app()) 883 if (ignore_changes_ || !has_loaded_apps_ || !extension->is_app())
853 return false; 884 return false;
854 885
855 Profile* profile = Profile::FromWebUI(web_ui()); 886 Profile* profile = Profile::FromWebUI(web_ui());
856 return extensions::ui_util::ShouldDisplayInNewTabPage(extension, profile); 887 return extensions::ui_util::ShouldDisplayInNewTabPage(extension, profile);
857 } 888 }
OLDNEW
« 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