Don't show supervised user as "already on this device" while they're being imported.
[chromium-blink-merge.git] / chrome / browser / ui / webui / ntp / new_tab_page_handler.cc
bloba07e34075898c0fbd1c7cdc8adca66d561239a1f
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
3 // found in the LICENSE file.
5 #include "chrome/browser/ui/webui/ntp/new_tab_page_handler.h"
7 #include "base/bind.h"
8 #include "base/bind_helpers.h"
9 #include "base/memory/scoped_ptr.h"
10 #include "base/metrics/histogram.h"
11 #include "base/prefs/pref_service.h"
12 #include "chrome/browser/profiles/profile.h"
13 #include "chrome/browser/sync/profile_sync_service.h"
14 #include "chrome/browser/ui/webui/ntp/new_tab_ui.h"
15 #include "chrome/browser/web_resource/notification_promo.h"
16 #include "chrome/common/pref_names.h"
17 #include "components/pref_registry/pref_registry_syncable.h"
18 #include "content/public/browser/notification_service.h"
19 #include "content/public/browser/web_ui.h"
21 namespace {
23 const char kDefaultPageTypeHistogram[] = "NewTabPage.DefaultPageType";
25 enum PromoAction {
26 PROMO_VIEWED = 0,
27 PROMO_CLOSED,
28 PROMO_LINK_CLICKED,
29 PROMO_ACTION_MAX,
32 } // namespace
34 NewTabPageHandler::NewTabPageHandler() : page_switch_count_(0) {
37 NewTabPageHandler::~NewTabPageHandler() {
38 LOCAL_HISTOGRAM_COUNTS_100("NewTabPage.SingleSessionPageSwitches",
39 page_switch_count_);
42 void NewTabPageHandler::RegisterMessages() {
43 // Record an open of the NTP with its default page type.
44 PrefService* prefs = Profile::FromWebUI(web_ui())->GetPrefs();
45 int shown_page_type = prefs->GetInteger(prefs::kNtpShownPage) >>
46 kPageIdOffset;
47 UMA_HISTOGRAM_ENUMERATION(kDefaultPageTypeHistogram,
48 shown_page_type, kHistogramEnumerationMax);
50 web_ui()->RegisterMessageCallback("notificationPromoClosed",
51 base::Bind(&NewTabPageHandler::HandleNotificationPromoClosed,
52 base::Unretained(this)));
53 web_ui()->RegisterMessageCallback("notificationPromoViewed",
54 base::Bind(&NewTabPageHandler::HandleNotificationPromoViewed,
55 base::Unretained(this)));
56 web_ui()->RegisterMessageCallback("notificationPromoLinkClicked",
57 base::Bind(&NewTabPageHandler::HandleNotificationPromoLinkClicked,
58 base::Unretained(this)));
59 web_ui()->RegisterMessageCallback("bubblePromoClosed",
60 base::Bind(&NewTabPageHandler::HandleBubblePromoClosed,
61 base::Unretained(this)));
62 web_ui()->RegisterMessageCallback("bubblePromoViewed",
63 base::Bind(&NewTabPageHandler::HandleBubblePromoViewed,
64 base::Unretained(this)));
65 web_ui()->RegisterMessageCallback("bubblePromoLinkClicked",
66 base::Bind(&NewTabPageHandler::HandleBubblePromoLinkClicked,
67 base::Unretained(this)));
68 web_ui()->RegisterMessageCallback("pageSelected",
69 base::Bind(&NewTabPageHandler::HandlePageSelected,
70 base::Unretained(this)));
73 void NewTabPageHandler::HandleNotificationPromoClosed(
74 const base::ListValue* args) {
75 UMA_HISTOGRAM_ENUMERATION("NewTabPage.Promo.Notification",
76 PROMO_CLOSED, PROMO_ACTION_MAX);
77 NotificationPromo::HandleClosed(NotificationPromo::NTP_NOTIFICATION_PROMO);
78 Notify(chrome::NOTIFICATION_PROMO_RESOURCE_STATE_CHANGED);
81 void NewTabPageHandler::HandleNotificationPromoViewed(
82 const base::ListValue* args) {
83 UMA_HISTOGRAM_ENUMERATION("NewTabPage.Promo.Notification",
84 PROMO_VIEWED, PROMO_ACTION_MAX);
85 if (NotificationPromo::HandleViewed(
86 NotificationPromo::NTP_NOTIFICATION_PROMO)) {
87 Notify(chrome::NOTIFICATION_PROMO_RESOURCE_STATE_CHANGED);
91 void NewTabPageHandler::HandleNotificationPromoLinkClicked(
92 const base::ListValue* args) {
93 DVLOG(1) << "HandleNotificationPromoLinkClicked";
94 UMA_HISTOGRAM_ENUMERATION("NewTabPage.Promo.Notification",
95 PROMO_LINK_CLICKED, PROMO_ACTION_MAX);
98 void NewTabPageHandler::HandleBubblePromoClosed(const base::ListValue* args) {
99 UMA_HISTOGRAM_ENUMERATION("NewTabPage.Promo.Bubble",
100 PROMO_CLOSED, PROMO_ACTION_MAX);
101 NotificationPromo::HandleClosed(NotificationPromo::NTP_BUBBLE_PROMO);
102 Notify(chrome::NOTIFICATION_PROMO_RESOURCE_STATE_CHANGED);
105 void NewTabPageHandler::HandleBubblePromoViewed(const base::ListValue* args) {
106 UMA_HISTOGRAM_ENUMERATION("NewTabPage.Promo.Bubble",
107 PROMO_VIEWED, PROMO_ACTION_MAX);
108 if (NotificationPromo::HandleViewed(NotificationPromo::NTP_BUBBLE_PROMO))
109 Notify(chrome::NOTIFICATION_PROMO_RESOURCE_STATE_CHANGED);
112 void NewTabPageHandler::HandleBubblePromoLinkClicked(
113 const base::ListValue* args) {
114 DVLOG(1) << "HandleBubblePromoLinkClicked";
115 UMA_HISTOGRAM_ENUMERATION("NewTabPage.Promo.Bubble",
116 PROMO_LINK_CLICKED, PROMO_ACTION_MAX);
119 void NewTabPageHandler::HandlePageSelected(const base::ListValue* args) {
120 page_switch_count_++;
122 double page_id_double;
123 CHECK(args->GetDouble(0, &page_id_double));
124 int page_id = static_cast<int>(page_id_double);
126 double index_double;
127 CHECK(args->GetDouble(1, &index_double));
128 int index = static_cast<int>(index_double);
130 PrefService* prefs = Profile::FromWebUI(web_ui())->GetPrefs();
131 int previous_shown_page =
132 prefs->GetInteger(prefs::kNtpShownPage) >> kPageIdOffset;
133 UMA_HISTOGRAM_ENUMERATION("NewTabPage.PreviousSelectedPageType",
134 previous_shown_page, kHistogramEnumerationMax);
136 prefs->SetInteger(prefs::kNtpShownPage, page_id | index);
138 int shown_page_type = page_id >> kPageIdOffset;
139 UMA_HISTOGRAM_ENUMERATION("NewTabPage.SelectedPageType",
140 shown_page_type, kHistogramEnumerationMax);
143 // static
144 void NewTabPageHandler::RegisterProfilePrefs(
145 user_prefs::PrefRegistrySyncable* registry) {
146 // TODO(estade): should be syncable.
147 registry->RegisterIntegerPref(prefs::kNtpShownPage, APPS_PAGE_ID);
150 // static
151 void NewTabPageHandler::GetLocalizedValues(Profile* profile,
152 base::DictionaryValue* values) {
153 values->SetInteger("apps_page_id", APPS_PAGE_ID);
155 PrefService* prefs = profile->GetPrefs();
156 int shown_page = prefs->GetInteger(prefs::kNtpShownPage);
157 values->SetInteger("shown_page_type", shown_page & ~INDEX_MASK);
158 values->SetInteger("shown_page_index", shown_page & INDEX_MASK);
161 void NewTabPageHandler::Notify(chrome::NotificationType notification_type) {
162 content::NotificationService* service =
163 content::NotificationService::current();
164 service->Notify(notification_type,
165 content::Source<NewTabPageHandler>(this),
166 content::NotificationService::NoDetails());