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 ef01369e63aecc436adebc359e65cc9de482fabe..1fa627179806b3f6b859e6a9697107b39f532688 100644 |
--- a/chrome/browser/resources/google_now/background.js |
+++ b/chrome/browser/resources/google_now/background.js |
@@ -108,12 +108,15 @@ var UnmergedNotification; |
/** |
* Notification group as the client stores it. |cardsTimestamp| and |rank| are |
- * defined if |cards| is non-empty. |
+ * defined if |cards| is non-empty. |nextPollTime| is undefined if the server |
+ * (1) never sent 'nextPollSeconds' for the group or |
+ * (2) didn't send 'nextPollSeconds' with the last group update containing a |
+ * cards update and all the times after that. |
* |
* @typedef {{ |
* cards: Array.<UnmergedNotification>, |
* cardsTimestamp: number=, |
- * nextPollTime: number, |
+ * nextPollTime: number=, |
* rank: number= |
* }} |
*/ |
@@ -431,10 +434,13 @@ function scheduleNextPoll(groups) { |
for (var groupName in groups) { |
var group = groups[groupName]; |
- nextPollTime = nextPollTime == null ? |
- group.nextPollTime : Math.min(group.nextPollTime, nextPollTime); |
+ if (group.nextPollTime !== undefined) { |
+ nextPollTime = nextPollTime == null ? |
+ group.nextPollTime : Math.min(group.nextPollTime, nextPollTime); |
+ } |
} |
+ // At least one of the groups must have nextPollTime. |
verify(nextPollTime != null, 'scheduleNextPoll: nextPollTime is null'); |
var nextPollDelaySeconds = Math.max( |
@@ -493,7 +499,7 @@ function parseAndShowNotificationCards(response) { |
var storageGroup = items.notificationGroups[groupName] || { |
cards: [], |
cardsTimestamp: undefined, |
- nextPollTime: now, |
+ nextPollTime: undefined, |
rank: undefined |
}; |
@@ -501,11 +507,20 @@ function parseAndShowNotificationCards(response) { |
receivedGroup.cards = receivedGroup.cards || []; |
if (receivedGroup.cards) { |
+ // If the group contains a cards update, all its fields will get new |
+ // values. |
storageGroup.cards = receivedGroup.cards; |
storageGroup.cardsTimestamp = now; |
storageGroup.rank = receivedGroup.rank; |
+ storageGroup.nextPollTime = undefined; |
+ // The code below assigns nextPollTime a defined value if |
+ // nextPollSeconds is specified in the received group. |
+ // If the group's cards are not updated, and nextPollSeconds is |
+ // unspecified, this method doesn't change group's nextPollTime. |
} |
+ // 'nextPollSeconds' may be sent even for groups that don't contain cards |
+ // updates. |
if (receivedGroup.nextPollSeconds !== undefined) { |
storageGroup.nextPollTime = |
now + receivedGroup.nextPollSeconds * MS_IN_SECOND; |
@@ -575,7 +590,7 @@ function requestNotificationCards(position) { |
for (var groupName in items.notificationGroups) { |
var group = items.notificationGroups[groupName]; |
- if (group.nextPollTime <= now) |
+ if (group.nextPollTime !== undefined && group.nextPollTime <= now) |
groupsToRequest.push(groupName); |
} |
} |