Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 'use strict'; | 5 'use strict'; |
| 6 | 6 |
| 7 /** | 7 /** |
| 8 * Show/hide trigger in a card. | 8 * Show/hide trigger in a card. |
| 9 * | 9 * |
| 10 * @typedef {{ | 10 * @typedef {{ |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 106 /** | 106 /** |
| 107 * Builds an object to manage notification card set. | 107 * Builds an object to manage notification card set. |
| 108 * @return {Object} Card set interface. | 108 * @return {Object} Card set interface. |
| 109 */ | 109 */ |
| 110 function buildCardSet() { | 110 function buildCardSet() { |
| 111 var alarmPrefix = 'card-'; | 111 var alarmPrefix = 'card-'; |
| 112 | 112 |
| 113 /** | 113 /** |
| 114 * Creates/updates/deletes a Chrome notification. | 114 * Creates/updates/deletes a Chrome notification. |
| 115 * @param {ChromeNotificationId} cardId Card ID. | 115 * @param {ChromeNotificationId} cardId Card ID. |
| 116 * @param {?ReceivedNotification} receivedNotification Google Now card | 116 * @param {(ReceivedNotification|undefined)} receivedNotification Google Now |
| 117 * represented as a set of parameters for showing a Chrome notification, | 117 * card represented as a set of parameters for showing a Chrome |
| 118 * or null if the notification needs to be deleted. | 118 * notification, or null if the notification needs to be deleted. |
| 119 * @param {function(ReceivedNotification)=} onCardShown Optional parameter | 119 * @param {function(ReceivedNotification)=} onCardShown Optional parameter |
| 120 * called when each card is shown. | 120 * called when each card is shown. |
| 121 */ | 121 */ |
| 122 function updateNotification(cardId, receivedNotification, onCardShown) { | 122 function updateNotification(cardId, receivedNotification, onCardShown) { |
| 123 console.log('cardManager.updateNotification ' + cardId + ' ' + | 123 console.log('cardManager.updateNotification ' + cardId + ' ' + |
| 124 JSON.stringify(receivedNotification)); | 124 JSON.stringify(receivedNotification)); |
| 125 | 125 |
| 126 if (!receivedNotification) { | 126 if (!receivedNotification) { |
| 127 instrumented.notifications.clear(cardId, function() {}); | 127 instrumented.notifications.clear(cardId, function() {}); |
| 128 return; | 128 return; |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 188 * @param {function(ReceivedNotification)=} onCardShown Optional parameter | 188 * @param {function(ReceivedNotification)=} onCardShown Optional parameter |
| 189 * called when each card is shown. | 189 * called when each card is shown. |
| 190 * @return {(NotificationDataEntry|undefined)} Notification data entry for | 190 * @return {(NotificationDataEntry|undefined)} Notification data entry for |
| 191 * this card. It's 'undefined' if the card's life is over. | 191 * this card. It's 'undefined' if the card's life is over. |
| 192 */ | 192 */ |
| 193 function update(cardId, combinedCard, notificationGroups, onCardShown) { | 193 function update(cardId, combinedCard, notificationGroups, onCardShown) { |
| 194 console.log('cardManager.update ' + JSON.stringify(combinedCard)); | 194 console.log('cardManager.update ' + JSON.stringify(combinedCard)); |
| 195 | 195 |
| 196 chrome.alarms.clear(alarmPrefix + cardId); | 196 chrome.alarms.clear(alarmPrefix + cardId); |
| 197 var now = Date.now(); | 197 var now = Date.now(); |
| 198 /** @type {?UncombinedNotification} */ | 198 /** @type {?UncombinedNotification} */ |
|
rgustafson
2014/01/07 20:36:45
|undefined rather than ?nullable
vadimt
2014/01/08 02:19:01
Done.
| |
| 199 var winningCard = null; | 199 var winningCard = undefined; |
| 200 // Next moment of time when winning notification selection algotithm can | 200 // Next moment of time when winning notification selection algotithm can |
| 201 // potentially return a different notification. | 201 // potentially return a different notification. |
| 202 /** @type {?number} */ | 202 /** @type {?number} */ |
| 203 var nextEventTime = null; | 203 var nextEventTime = null; |
| 204 | 204 |
| 205 // Find a winning uncombined notification: a highest-priority notification | 205 // Find a winning uncombined notification: a highest-priority notification |
| 206 // that needs to be shown now. | 206 // that needs to be shown now. |
| 207 iterateUncombinedNotifications( | 207 iterateUncombinedNotifications( |
| 208 combinedCard, | 208 combinedCard, |
| 209 now, | 209 now, |
| (...skipping 26 matching lines...) Expand all Loading... | |
| 236 cardId, winningCard && winningCard.receivedNotification, onCardShown); | 236 cardId, winningCard && winningCard.receivedNotification, onCardShown); |
| 237 | 237 |
| 238 if (nextEventTime) { | 238 if (nextEventTime) { |
| 239 // If we expect more events, create an alarm for the next one. | 239 // If we expect more events, create an alarm for the next one. |
| 240 chrome.alarms.create(alarmPrefix + cardId, {when: nextEventTime}); | 240 chrome.alarms.create(alarmPrefix + cardId, {when: nextEventTime}); |
| 241 | 241 |
| 242 // The trick with stringify/parse is to create a copy of action URLs, | 242 // The trick with stringify/parse is to create a copy of action URLs, |
| 243 // otherwise notifications data with 2 pointers to the same object won't | 243 // otherwise notifications data with 2 pointers to the same object won't |
| 244 // be stored correctly to chrome.storage. | 244 // be stored correctly to chrome.storage. |
| 245 var winningActionUrls = winningCard && | 245 var winningActionUrls = winningCard && |
| 246 (winningCard.receivedNotification.actionUrls || null) && | 246 winningCard.receivedNotification.actionUrls && |
| 247 JSON.parse(JSON.stringify( | 247 JSON.parse(JSON.stringify( |
| 248 winningCard.receivedNotification.actionUrls)); | 248 winningCard.receivedNotification.actionUrls)); |
| 249 | 249 |
| 250 return { | 250 return { |
| 251 actionUrls: winningActionUrls, | 251 actionUrls: winningActionUrls, |
| 252 timestamp: now, | 252 timestamp: now, |
| 253 combinedCard: combinedCard | 253 combinedCard: combinedCard |
| 254 }; | 254 }; |
| 255 } else { | 255 } else { |
| 256 // If there are no more events, we are done with this card. Note that all | 256 // If there are no more events, we are done with this card. Note that all |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 358 }); | 358 }); |
| 359 }); | 359 }); |
| 360 } | 360 } |
| 361 }); | 361 }); |
| 362 | 362 |
| 363 return { | 363 return { |
| 364 update: update, | 364 update: update, |
| 365 onDismissal: onDismissal | 365 onDismissal: onDismissal |
| 366 }; | 366 }; |
| 367 } | 367 } |
| OLD | NEW |