| Index: chrome/browser/resources/google_now/background.js
|
| diff --git a/chrome/browser/resources/google_now/background.js b/chrome/browser/resources/google_now/background.js
|
| index 8be55592d81acab781bf4b24305191f2c1ca7b2b..f5ddd231a23841d2dc04dd9352a5d9f89b10c446 100644
|
| --- a/chrome/browser/resources/google_now/background.js
|
| +++ b/chrome/browser/resources/google_now/background.js
|
| @@ -251,6 +251,29 @@ function recordEvent(event) {
|
| }
|
|
|
| /**
|
| + * Records a notification clicked event.
|
| + * @param {number|undefined} cardTypeId Card type ID.
|
| + */
|
| +function recordNotificationClick(cardTypeId) {
|
| + if (cardTypeId !== undefined) {
|
| + chrome.metricsPrivate.recordSparseValue(
|
| + 'GoogleNow.Card.Clicked', cardTypeId);
|
| + }
|
| +}
|
| +
|
| +/**
|
| + * Records a button clicked event.
|
| + * @param {number|undefined} cardTypeId Card type ID.
|
| + * @param {number} buttonIndex Button Index
|
| + */
|
| +function recordButtonClick(cardTypeId, buttonIndex) {
|
| + if (cardTypeId !== undefined) {
|
| + chrome.metricsPrivate.recordSparseValue(
|
| + 'GoogleNow.Card.Button.Clicked' + buttonIndex, cardTypeId);
|
| + }
|
| +}
|
| +
|
| +/**
|
| * Checks the result of the HTTP Request and updates the authentication
|
| * manager on any failure.
|
| * @param {string} token Authentication token to validate against an
|
| @@ -803,9 +826,9 @@ function openUrl(url) {
|
| * Opens URL corresponding to the clicked part of the notification.
|
| * @param {ChromeNotificationId} chromeNotificationId chrome.notifications ID of
|
| * the card.
|
| - * @param {function((ActionUrls|undefined)): (string|undefined)} selector
|
| - * Function that extracts the url for the clicked area from the button
|
| - * action URLs info.
|
| + * @param {function(NotificationDataEntry): (string|undefined)} selector
|
| + * Function that extracts the url for the clicked area from the
|
| + * notification data entry.
|
| */
|
| function onNotificationClicked(chromeNotificationId, selector) {
|
| fillFromChromeLocalStorage({
|
| @@ -813,11 +836,11 @@ function onNotificationClicked(chromeNotificationId, selector) {
|
| notificationsData: {}
|
| }).then(function(items) {
|
| /** @type {(NotificationDataEntry|undefined)} */
|
| - var notificationData = items.notificationsData[chromeNotificationId];
|
| - if (!notificationData)
|
| + var notificationDataEntry = items.notificationsData[chromeNotificationId];
|
| + if (!notificationDataEntry)
|
| return;
|
|
|
| - var url = selector(notificationData.actionUrls);
|
| + var url = selector(notificationDataEntry);
|
| if (!url)
|
| return;
|
|
|
| @@ -1110,21 +1133,33 @@ authenticationManager.addListener(function() {
|
| instrumented.notifications.onClicked.addListener(
|
| function(chromeNotificationId) {
|
| chrome.metricsPrivate.recordUserAction('GoogleNow.MessageClicked');
|
| - onNotificationClicked(chromeNotificationId, function(actionUrls) {
|
| - return actionUrls && actionUrls.messageUrl;
|
| - });
|
| - });
|
| + onNotificationClicked(chromeNotificationId,
|
| + function(notificationDataEntry) {
|
| + var actionUrls = notificationDataEntry.actionUrls;
|
| + var url = actionUrls && actionUrls.messageUrl;
|
| + if (url) {
|
| + recordNotificationClick(notificationDataEntry.cardTypeId);
|
| + }
|
| + return url;
|
| + });
|
| + });
|
|
|
| instrumented.notifications.onButtonClicked.addListener(
|
| function(chromeNotificationId, buttonIndex) {
|
| chrome.metricsPrivate.recordUserAction(
|
| 'GoogleNow.ButtonClicked' + buttonIndex);
|
| - onNotificationClicked(chromeNotificationId, function(actionUrls) {
|
| - var url = actionUrls.buttonUrls[buttonIndex];
|
| - verify(url !== undefined, 'onButtonClicked: no url for a button');
|
| - return url;
|
| - });
|
| - });
|
| + onNotificationClicked(chromeNotificationId,
|
| + function(notificationDataEntry) {
|
| + var actionUrls = notificationDataEntry.actionUrls;
|
| + var url = actionUrls.buttonUrls[buttonIndex];
|
| + if (url) {
|
| + recordButtonClick(notificationDataEntry.cardTypeId, buttonIndex);
|
| + } else {
|
| + verify(false, 'onButtonClicked: no url for a button');
|
| + }
|
| + return url;
|
| + });
|
| + });
|
|
|
| instrumented.notifications.onClosed.addListener(onNotificationClosed);
|
|
|
|
|