15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/ntp/new_tab_page_handler.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind_helpers.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/metrics/histogram.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/profile_sync_service.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/ntp/new_tab_ui.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/web_resource/notification_promo.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h"
17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/pref_registry/pref_registry_syncable.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_service.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_ui.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kDefaultPageTypeHistogram[] = "NewTabPage.DefaultPageType";
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum PromoAction {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PROMO_VIEWED = 0,
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PROMO_CLOSED,
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PROMO_LINK_CLICKED,
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PROMO_ACTION_MAX,
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NewTabPageHandler::NewTabPageHandler() : page_switch_count_(0) {
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NewTabPageHandler::~NewTabPageHandler() {
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  LOCAL_HISTOGRAM_COUNTS_100("NewTabPage.SingleSessionPageSwitches",
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                             page_switch_count_);
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NewTabPageHandler::RegisterMessages() {
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Record an open of the NTP with its default page type.
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrefService* prefs = Profile::FromWebUI(web_ui())->GetPrefs();
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int shown_page_type = prefs->GetInteger(prefs::kNtpShownPage) >>
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      kPageIdOffset;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UMA_HISTOGRAM_ENUMERATION(kDefaultPageTypeHistogram,
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            shown_page_type, kHistogramEnumerationMax);
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->RegisterMessageCallback("notificationPromoClosed",
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&NewTabPageHandler::HandleNotificationPromoClosed,
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->RegisterMessageCallback("notificationPromoViewed",
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&NewTabPageHandler::HandleNotificationPromoViewed,
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->RegisterMessageCallback("notificationPromoLinkClicked",
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&NewTabPageHandler::HandleNotificationPromoLinkClicked,
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->RegisterMessageCallback("bubblePromoClosed",
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&NewTabPageHandler::HandleBubblePromoClosed,
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->RegisterMessageCallback("bubblePromoViewed",
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&NewTabPageHandler::HandleBubblePromoViewed,
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->RegisterMessageCallback("bubblePromoLinkClicked",
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&NewTabPageHandler::HandleBubblePromoLinkClicked,
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->RegisterMessageCallback("pageSelected",
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&NewTabPageHandler::HandlePageSelected,
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->RegisterMessageCallback("logTimeToClick",
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&NewTabPageHandler::HandleLogTimeToClick,
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void NewTabPageHandler::HandleNotificationPromoClosed(
775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const base::ListValue* args) {
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UMA_HISTOGRAM_ENUMERATION("NewTabPage.Promo.Notification",
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            PROMO_CLOSED, PROMO_ACTION_MAX);
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  NotificationPromo::HandleClosed(NotificationPromo::NTP_NOTIFICATION_PROMO);
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Notify(chrome::NOTIFICATION_PROMO_RESOURCE_STATE_CHANGED);
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void NewTabPageHandler::HandleNotificationPromoViewed(
855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const base::ListValue* args) {
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UMA_HISTOGRAM_ENUMERATION("NewTabPage.Promo.Notification",
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            PROMO_VIEWED, PROMO_ACTION_MAX);
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (NotificationPromo::HandleViewed(
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          NotificationPromo::NTP_NOTIFICATION_PROMO)) {
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Notify(chrome::NOTIFICATION_PROMO_RESOURCE_STATE_CHANGED);
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NewTabPageHandler::HandleNotificationPromoLinkClicked(
955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const base::ListValue* args) {
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DVLOG(1) << "HandleNotificationPromoLinkClicked";
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UMA_HISTOGRAM_ENUMERATION("NewTabPage.Promo.Notification",
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            PROMO_LINK_CLICKED, PROMO_ACTION_MAX);
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void NewTabPageHandler::HandleBubblePromoClosed(const base::ListValue* args) {
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UMA_HISTOGRAM_ENUMERATION("NewTabPage.Promo.Bubble",
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            PROMO_CLOSED, PROMO_ACTION_MAX);
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  NotificationPromo::HandleClosed(NotificationPromo::NTP_BUBBLE_PROMO);
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Notify(chrome::NOTIFICATION_PROMO_RESOURCE_STATE_CHANGED);
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void NewTabPageHandler::HandleBubblePromoViewed(const base::ListValue* args) {
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UMA_HISTOGRAM_ENUMERATION("NewTabPage.Promo.Bubble",
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            PROMO_VIEWED, PROMO_ACTION_MAX);
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (NotificationPromo::HandleViewed(NotificationPromo::NTP_BUBBLE_PROMO))
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Notify(chrome::NOTIFICATION_PROMO_RESOURCE_STATE_CHANGED);
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void NewTabPageHandler::HandleBubblePromoLinkClicked(
1165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const base::ListValue* args) {
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DVLOG(1) << "HandleBubblePromoLinkClicked";
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UMA_HISTOGRAM_ENUMERATION("NewTabPage.Promo.Bubble",
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            PROMO_LINK_CLICKED, PROMO_ACTION_MAX);
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void NewTabPageHandler::HandlePageSelected(const base::ListValue* args) {
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  page_switch_count_++;
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  double page_id_double;
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHECK(args->GetDouble(0, &page_id_double));
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int page_id = static_cast<int>(page_id_double);
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  double index_double;
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHECK(args->GetDouble(1, &index_double));
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int index = static_cast<int>(index_double);
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrefService* prefs = Profile::FromWebUI(web_ui())->GetPrefs();
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int previous_shown_page =
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      prefs->GetInteger(prefs::kNtpShownPage) >> kPageIdOffset;
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UMA_HISTOGRAM_ENUMERATION("NewTabPage.PreviousSelectedPageType",
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            previous_shown_page, kHistogramEnumerationMax);
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs->SetInteger(prefs::kNtpShownPage, page_id | index);
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int shown_page_type = page_id >> kPageIdOffset;
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UMA_HISTOGRAM_ENUMERATION("NewTabPage.SelectedPageType",
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            shown_page_type, kHistogramEnumerationMax);
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void NewTabPageHandler::HandleLogTimeToClick(const base::ListValue* args) {
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string histogram_name;
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  double duration;
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!args->GetString(0, &histogram_name) || !args->GetDouble(1, &duration)) {
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NOTREACHED();
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::TimeDelta delta = base::TimeDelta::FromMilliseconds(duration);
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (histogram_name == "NewTabPage.TimeToClickMostVisited") {
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    UMA_HISTOGRAM_LONG_TIMES("NewTabPage.TimeToClickMostVisited", delta);
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else if (histogram_name == "NewTabPage.TimeToClickRecentlyClosed") {
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    UMA_HISTOGRAM_LONG_TIMES("NewTabPage.TimeToClickRecentlyClosed", delta);
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else if (histogram_name == "ExtendedNewTabPage.TimeToClickMostVisited") {
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    UMA_HISTOGRAM_LONG_TIMES(
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "ExtendedNewTabPage.TimeToClickMostVisited", delta);
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else if (histogram_name == "ExtendedNewTabPage.TimeToClickRecentlyClosed") {
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    UMA_HISTOGRAM_LONG_TIMES(
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "ExtendedNewTabPage.TimeToClickRecentlyClosed", delta);
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else {
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NOTREACHED();
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
1727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid NewTabPageHandler::RegisterProfilePrefs(
173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    user_prefs::PrefRegistrySyncable* registry) {
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(estade): should be syncable.
175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  registry->RegisterIntegerPref(
176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      prefs::kNtpShownPage,
177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      APPS_PAGE_ID,
178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NewTabPageHandler::GetLocalizedValues(Profile* profile,
1835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                           base::DictionaryValue* values) {
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  values->SetInteger("most_visited_page_id", MOST_VISITED_PAGE_ID);
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  values->SetInteger("apps_page_id", APPS_PAGE_ID);
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  values->SetInteger("suggestions_page_id", SUGGESTIONS_PAGE_ID);
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrefService* prefs = profile->GetPrefs();
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int shown_page = prefs->GetInteger(prefs::kNtpShownPage);
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  values->SetInteger("shown_page_type", shown_page & ~INDEX_MASK);
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  values->SetInteger("shown_page_index", shown_page & INDEX_MASK);
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NewTabPageHandler::Notify(chrome::NotificationType notification_type) {
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::NotificationService* service =
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      content::NotificationService::current();
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  service->Notify(notification_type,
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  content::Source<NewTabPageHandler>(this),
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  content::NotificationService::NoDetails());
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
201