| 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 f5ddd231a23841d2dc04dd9352a5d9f89b10c446..de130965c1d1b0add55994bff434856e53d56b65 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();
|
| }
|
| });
|
| });
|
|
|