Chromium Code Reviews| 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..3a8b4e377baf5f08157046e94ae8d54dbbae7b82 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,47 @@ function isGoogleNowEnabled() { |
| }); |
| } |
| +/** |
| + * Sometimes we get the response to the opted in result too soon during |
|
rgustafson
2014/03/28 20:59:48
Match the other function comment format. Start wit
robliao
2014/03/28 21:03:06
Done. checkOptedIn does start with a verb...
On 20
|
| + * 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(); |
| + } |
| + |
| + /** |
| + * Does 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 +1261,7 @@ instrumented.pushMessaging.onMessage.addListener(function(message) { |
| notificationGroups: items.notificationGroups |
| }); |
| - requestCards(); |
| + pollOptedIn(); |
| } |
| }); |
| }); |