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 93ea540d0590f2a6e8179a7ecb8bec180ad2b070..182dd7c95447860716dea7e428f8c748f9614f72 100644 |
| --- a/chrome/browser/resources/google_now/background.js |
| +++ b/chrome/browser/resources/google_now/background.js |
| @@ -248,31 +248,38 @@ function recordEvent(event) { |
| } |
| /** |
| - * Adds authorization behavior to the request. |
| - * @param {XMLHttpRequest} request Server request. |
| - * @param {function(boolean)} callbackBoolean Completion callback with 'success' |
| - * parameter. |
| + * Checks the result of the HTTP Request and updates the authentication |
| + * manager on any failure. |
| + * @param {XMLHttpRequest} request XMLHTTPRequest that sent the authenticated |
|
rgustafson
2014/03/12 21:26:28
Nitpicky: match capitalization on the second usage
robliao
2014/03/12 22:21:32
Done.
|
| + * request. |
| */ |
| -function setAuthorization(request, callbackBoolean) { |
| - authenticationManager.getAuthToken().then(function(token) { |
| - request.setRequestHeader('Authorization', 'Bearer ' + token); |
| +function checkAuthenticationStatus(request) { |
| + if (request.status == HTTP_FORBIDDEN || |
| + request.status == HTTP_UNAUTHORIZED) { |
| + authenticationManager.removeToken(token); |
| + } |
| +} |
| - // Instrument onloadend to remove stale auth tokens. |
| - var originalOnLoadEnd = request.onloadend; |
| - request.onloadend = wrapper.wrapCallback(function(event) { |
| - if (request.status == HTTP_FORBIDDEN || |
| - request.status == HTTP_UNAUTHORIZED) { |
| - authenticationManager.removeToken(token).then(function() { |
| - originalOnLoadEnd(event); |
| - }); |
| - } else { |
| - originalOnLoadEnd(event); |
| - } |
| +/** |
| + * Builds and sends an authenticated request to the notification server. |
| + * @param {string} method Request method. |
| + * @param {string} handlerName Server handler to send the request to. |
| + * @param {string=} opt_contentType Value for the Content-type header. |
| + * @return {Promise} A promise to issue a request to the server. |
| + * The promise rejects if there is a client-side authentication issue. |
| + */ |
| +function requestFromServer(method, handlerName, opt_contentType) { |
| + return authenticationManager.getAuthToken().then(function(token) { |
| + var request = buildServerRequest(method, handlerName, opt_contentType); |
| + request.setRequestHeader('Authorization', 'Bearer ' + token); |
| + var requestPromise = new Promise(function(resolve) { |
| + request.addEventListener('loadend', function() { |
| + resolve(request); |
| + }, false); |
| + request.send(); |
| }); |
| - |
| - callbackBoolean(true); |
| - }).catch(function() { |
| - callbackBoolean(false); |
| + requestPromise.then(checkAuthenticationStatus); |
| + return requestPromise; |
| }); |
| } |
| @@ -567,21 +574,15 @@ function requestNotificationGroups(groupNames) { |
| console.log('requestNotificationGroups: request=' + requestParameters); |
| - var request = buildServerRequest('GET', 'notifications' + requestParameters); |
| - |
| - request.onloadend = function(event) { |
| - console.log('requestNotificationGroups-onloadend ' + request.status); |
| - if (request.status == HTTP_OK) { |
| - recordEvent(GoogleNowEvent.REQUEST_FOR_CARDS_SUCCESS); |
| - processServerResponse( |
| - JSON.parse(request.responseText), cardShownCallback); |
| - } |
| - }; |
| - |
| - setAuthorization(request, function(success) { |
| - if (success) |
| - request.send(); |
| - }); |
| + requestFromServer('GET', 'notifications' + requestParameters).then( |
| + function(request) { |
| + console.log('requestNotificationGroups-received ' + request.status); |
| + if (request.status == HTTP_OK) { |
| + recordEvent(GoogleNowEvent.REQUEST_FOR_CARDS_SUCCESS); |
| + processServerResponse( |
| + JSON.parse(request.responseText), cardShownCallback); |
| + } |
| + }); |
| } |
| /** |
| @@ -592,11 +593,9 @@ function requestNotificationGroups(groupNames) { |
| function requestOptedIn(optedInCallback) { |
| console.log('requestOptedIn from ' + NOTIFICATION_CARDS_URL); |
| - var request = buildServerRequest('GET', 'settings/optin'); |
| - |
| - request.onloadend = function(event) { |
| + requestFromServer('GET', 'settings/optin').then(function(request) { |
| console.log( |
| - 'requestOptedIn-onloadend ' + request.status + ' ' + request.response); |
| + 'requestOptedIn-received ' + request.status + ' ' + request.response); |
| if (request.status == HTTP_OK) { |
| var parsedResponse = JSON.parse(request.responseText); |
| if (parsedResponse.value) { |
| @@ -608,11 +607,6 @@ function requestOptedIn(optedInCallback) { |
| scheduleNextPoll({}, false); |
| } |
| } |
| - }; |
| - |
| - setAuthorization(request, function(success) { |
| - if (success) |
| - request.send(); |
| }); |
| } |
| @@ -711,8 +705,7 @@ function requestCardDismissal( |
| console.log('requestCardDismissal: requestParameters=' + requestParameters); |
| - var request = buildServerRequest('DELETE', requestParameters); |
| - request.onloadend = function(event) { |
| + requestFromServer('DELETE', requestParameters).then(function(request) { |
| console.log('requestDismissingCard-onloadend ' + request.status); |
| if (request.status == HTTP_NOCONTENT) |
| recordEvent(GoogleNowEvent.DISMISS_REQUEST_SUCCESS); |
| @@ -723,13 +716,8 @@ function requestCardDismissal( |
| request.status == HTTP_BAD_REQUEST || |
| request.status == HTTP_METHOD_NOT_ALLOWED; |
| callbackBoolean(done); |
| - }; |
| - |
| - setAuthorization(request, function(success) { |
| - if (success) |
| - request.send(); |
| - else |
| - callbackBoolean(false); |
| + }).catch(function() { |
| + callbackBoolean(false); |
| }); |
| } |