| Index: chrome/browser/resources/google_now/utility.js
|
| diff --git a/chrome/browser/resources/google_now/utility.js b/chrome/browser/resources/google_now/utility.js
|
| index 5a0042a9a7b3eda55253b6ad49d6a744b96e615a..1e72b3f73e61d4031480e36a1e95c857f9bb8748 100644
|
| --- a/chrome/browser/resources/google_now/utility.js
|
| +++ b/chrome/browser/resources/google_now/utility.js
|
| @@ -368,7 +368,7 @@ var wrapper = (function() {
|
| wrapperPluginInstance.prologue();
|
|
|
| // Call the original callback.
|
| - callback.apply(null, arguments);
|
| + var returnValue = callback.apply(null, arguments);
|
|
|
| if (wrapperPluginInstance)
|
| wrapperPluginInstance.epilogue();
|
| @@ -376,6 +376,8 @@ var wrapper = (function() {
|
| verify(isInWrappedCallback,
|
| 'Instrumented callback is not instrumented upon exit');
|
| isInWrappedCallback = false;
|
| +
|
| + return returnValue;
|
| } catch (error) {
|
| reportError(error);
|
| }
|
| @@ -479,6 +481,7 @@ wrapper.instrumentChromeApiFunction('alarms.onAlarm.addListener', 0);
|
| wrapper.instrumentChromeApiFunction('identity.getAuthToken', 1);
|
| wrapper.instrumentChromeApiFunction('identity.onSignInChanged.addListener', 0);
|
| wrapper.instrumentChromeApiFunction('identity.removeCachedAuthToken', 1);
|
| +wrapper.instrumentChromeApiFunction('storage.local.get', 1);
|
| wrapper.instrumentChromeApiFunction('webstorePrivate.getBrowserLogin', 0);
|
|
|
| /**
|
| @@ -534,6 +537,43 @@ Promise.prototype.catch = function() {
|
| }();
|
|
|
| /**
|
| + * Control promise rejection.
|
| + * @enum {boolean}
|
| + */
|
| +var PromiseRejection = {
|
| + /** Disallow promise rejection */
|
| + DISALLOW: false,
|
| + /** Allow promise rejection */
|
| + ALLOW: true
|
| +};
|
| +
|
| +/**
|
| + * Provides the promise equivalent of instrumented.storage.local.get.
|
| + * @param {Object} defaultStorageObject Default storage object to fill.
|
| + * @param {boolean} opt_allowPromiseRejection If PromiseRejection.ALLOW,
|
| + * allow promise rejection on errors, otherwise the default storage
|
| + * object is resolved.
|
| + * @return {Promise} A promise that fills the default storage object. On
|
| + * failure, if promise rejection is allowed, the promise is rejected,
|
| + * otherwise it is resolved to the default storage object.
|
| + */
|
| +function fillFromChromeLocalStorage(
|
| + defaultStorageObject,
|
| + opt_allowPromiseRejection) {
|
| + return new Promise(function(resolve, reject) {
|
| + instrumented.storage.local.get(defaultStorageObject, function(items) {
|
| + if (items) {
|
| + resolve(items);
|
| + } else if (opt_allowPromiseRejection === PromiseRejection.ALLOW) {
|
| + reject();
|
| + } else {
|
| + resolve(defaultStorageObject);
|
| + }
|
| + });
|
| + });
|
| +}
|
| +
|
| +/**
|
| * Promise Pending Callback Data. Counts outstanding "then" and "catch"
|
| * callbacks;
|
| *
|
| @@ -824,11 +864,9 @@ function buildAttemptManager(
|
| * the planning is done.
|
| */
|
| function planForNext(callback) {
|
| - instrumented.storage.local.get(currentDelayStorageKey, function(items) {
|
| - if (!items) {
|
| - items = {};
|
| - items[currentDelayStorageKey] = maximumDelaySeconds;
|
| - }
|
| + var request = {};
|
| + request[currentDelayStorageKey] = maximumDelaySeconds;
|
| + fillFromChromeLocalStorage(request).then(function(items) {
|
| console.log('planForNext-get-storage ' + JSON.stringify(items));
|
| scheduleNextAttempt(items[currentDelayStorageKey]);
|
| callback();
|
| @@ -922,17 +960,17 @@ function buildAuthenticationManager() {
|
| */
|
| function checkAndNotifyListeners() {
|
| isSignedIn().then(function(signedIn) {
|
| - instrumented.storage.local.get('lastSignedInState', function(items) {
|
| - items = items || {};
|
| - if (items.lastSignedInState != signedIn) {
|
| - chrome.storage.local.set(
|
| - {lastSignedInState: signedIn});
|
| - listeners.forEach(function(callback) {
|
| - callback();
|
| - });
|
| - }
|
| + fillFromChromeLocalStorage({lastSignedInState: undefined})
|
| + .then(function(items) {
|
| + if (items.lastSignedInState != signedIn) {
|
| + chrome.storage.local.set(
|
| + {lastSignedInState: signedIn});
|
| + listeners.forEach(function(callback) {
|
| + callback();
|
| + });
|
| + }
|
| + });
|
| });
|
| - });
|
| }
|
|
|
| instrumented.identity.onSignInChanged.addListener(function() {
|
|
|