summaryrefslogtreecommitdiffstats
path: root/chrome/browser/resources/google_now/background.js
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/resources/google_now/background.js')
-rw-r--r--chrome/browser/resources/google_now/background.js62
1 files changed, 61 insertions, 1 deletions
diff --git a/chrome/browser/resources/google_now/background.js b/chrome/browser/resources/google_now/background.js
index f5ddd23..de13096 100644
--- a/chrome/browser/resources/google_now/background.js
+++ b/chrome/browser/resources/google_now/background.js
@@ -52,6 +52,19 @@ var MINIMUM_POLLING_PERIOD_SECONDS = 5 * 60; // 5 minutes
var MAXIMUM_POLLING_PERIOD_SECONDS = 60 * 60; // 1 hour
/**
+ * Initial period for polling for Google Now optin notification after push
+ * messaging indicates Google Now is enabled.
+ */
+var INITIAL_OPTIN_POLLING_PERIOD_SECONDS = 60; // 1 minute
+
+/**
+ * Maximum period for polling for Google Now optin notification after push
+ * messaging indicates Google Now is enabled. It is expected that the alarm
+ * will be stopped after this.
+ */
+var MAXIMUM_OPTIN_POLLING_PERIOD_SECONDS = 16 * 60; // 16 minutes
+
+/**
* Initial period for retrying the server request for dismissing cards.
*/
var INITIAL_RETRY_DISMISS_PERIOD_SECONDS = 60; // 1 minute
@@ -202,6 +215,11 @@ var updateCardsAttempts = buildAttemptManager(
requestCards,
INITIAL_POLLING_PERIOD_SECONDS,
MAXIMUM_POLLING_PERIOD_SECONDS);
+var optInCheckAttempts = buildAttemptManager(
+ 'optin',
+ pollOptedIn,
+ INITIAL_OPTIN_POLLING_PERIOD_SECONDS,
+ MAXIMUM_OPTIN_POLLING_PERIOD_SECONDS);
var dismissalAttempts = buildAttemptManager(
'dismiss',
retryPendingDismissals,
@@ -1096,6 +1114,48 @@ function isGoogleNowEnabled() {
});
}
+/**
+ * Polls the optin state.
+ * Sometimes we get the response to the opted in result too soon during
+ * push messaging. We'll recheck the optin state a few times before giving up.
+ */
+function pollOptedIn() {
+ /**
+ * Cleans up any state used to recheck the opt-in poll.
+ */
+ function clearPollingState() {
+ localStorage.removeItem('optedInCheckCount');
+ optInCheckAttempts.stop();
+ }
+
+ /**
+ * Performs the actual work for checking the opt-in state and requesting cards
+ * on opted-in.
+ */
+ function checkOptedIn() {
+ // Limit retries to 5.
+ if (localStorage.optedInCheckCount < 5) {
+ console.log(new Date() +
+ ' checkOptedIn Attempt ' + localStorage.optedInCheckCount);
+ localStorage.optedInCheckCount++;
+ requestOptedIn(function() {
+ clearPollingState();
+ requestCards();
+ });
+ } else {
+ clearPollingState();
+ }
+ }
+
+ if (localStorage.optedInCheckCount === undefined) {
+ localStorage.optedInCheckCount = 0;
+ optInCheckAttempts.start();
+ checkOptedIn();
+ } else {
+ optInCheckAttempts.planForNext(checkOptedIn);
+ }
+}
+
instrumented.runtime.onInstalled.addListener(function(details) {
console.log('onInstalled ' + JSON.stringify(details));
if (details.reason != 'chrome_update') {
@@ -1202,7 +1262,7 @@ instrumented.pushMessaging.onMessage.addListener(function(message) {
notificationGroups: items.notificationGroups
});
- requestCards();
+ pollOptedIn();
}
});
});