| Index: chrome/browser/resources/print_preview/cloud_print_interface.js
|
| diff --git a/chrome/browser/resources/print_preview/cloud_print_interface.js b/chrome/browser/resources/print_preview/cloud_print_interface.js
|
| index cce11fc68825334b07bcd224c6b48a06639809b9..749507c124b494748603c52402e41293bc001ef0 100644
|
| --- a/chrome/browser/resources/print_preview/cloud_print_interface.js
|
| +++ b/chrome/browser/resources/print_preview/cloud_print_interface.js
|
| @@ -86,13 +86,6 @@ cr.define('cloudprint', function() {
|
| */
|
| this.xsrfTokens_ = {};
|
|
|
| - /**
|
| - * Pending requests delayed until we get access token.
|
| - * @type {!Array<!cloudprint.CloudPrintRequest>}
|
| - * @private
|
| - */
|
| - this.requestQueue_ = [];
|
| -
|
| /**
|
| * Outstanding cloud destination search requests.
|
| * @type {!Array<!cloudprint.CloudPrintRequest>}
|
| @@ -101,13 +94,13 @@ cr.define('cloudprint', function() {
|
| this.outstandingCloudSearchRequests_ = [];
|
|
|
| /**
|
| - * Event tracker used to keep track of native layer events.
|
| - * @type {!EventTracker}
|
| - * @private
|
| + * Promise that will be resolved when the access token for
|
| + * DestinationOrigin.DEVICE is available. Null if there is no request
|
| + * currently pending.
|
| + * @private {?Promise<string>}
|
| */
|
| - this.tracker_ = new EventTracker();
|
| + this.accessTokenRequestPromise_ = null;
|
|
|
| - this.addEventListeners_();
|
| }
|
|
|
| /**
|
| @@ -163,8 +156,6 @@ cr.define('cloudprint', function() {
|
| CloudPrintInterface.CLOUD_ORIGINS_ = [
|
| print_preview.DestinationOrigin.COOKIES,
|
| print_preview.DestinationOrigin.DEVICE
|
| - // TODO(vitalybuka): Enable when implemented.
|
| - // ready print_preview.DestinationOrigin.PROFILE
|
| ];
|
|
|
| CloudPrintInterface.prototype = {
|
| @@ -315,17 +306,6 @@ cr.define('cloudprint', function() {
|
| this.onPrinterDone_.bind(this, printerId)));
|
| },
|
|
|
| - /**
|
| - * Adds event listeners to relevant events.
|
| - * @private
|
| - */
|
| - addEventListeners_: function() {
|
| - this.tracker_.add(
|
| - this.nativeLayer_.getEventTarget(),
|
| - print_preview.NativeLayer.EventType.ACCESS_TOKEN_READY,
|
| - this.onAccessTokenReady_.bind(this));
|
| - },
|
| -
|
| /**
|
| * Builds request to the Google Cloud Print API.
|
| * @param {string} method HTTP method of the request.
|
| @@ -401,11 +381,17 @@ cr.define('cloudprint', function() {
|
| */
|
| sendOrQueueRequest_: function(request) {
|
| if (request.origin == print_preview.DestinationOrigin.COOKIES) {
|
| - return this.sendRequest_(request);
|
| - } else {
|
| - this.requestQueue_.push(request);
|
| - this.nativeLayer_.startGetAccessToken(request.origin);
|
| + this.sendRequest_(request);
|
| + return;
|
| }
|
| +
|
| + if (this.accessTokenRequestPromise_ == null) {
|
| + this.accessTokenRequestPromise_ =
|
| + this.nativeLayer_.getAccessToken(request.origin);
|
| + }
|
| +
|
| + this.accessTokenRequestPromise_.then(
|
| + this.onAccessTokenReady_.bind(this, request));
|
| },
|
|
|
| /**
|
| @@ -477,29 +463,25 @@ cr.define('cloudprint', function() {
|
| },
|
|
|
| /**
|
| - * Called when a native layer receives access token.
|
| - * @param {Event} event Contains the authentication type and access token.
|
| + * Called when a native layer receives access token. Assumes that the
|
| + * destination type for this token is DestinationOrigin.DEVICE.
|
| + * @param {cloudprint.CloudPrintRequest} request The pending request that
|
| + * requires the access token.
|
| + * @param {string} accessToken The access token obtained.
|
| * @private
|
| */
|
| - onAccessTokenReady_: function(event) {
|
| - // TODO(vitalybuka): remove when other Origins implemented.
|
| - assert(event.authType == print_preview.DestinationOrigin.DEVICE);
|
| - this.requestQueue_ = this.requestQueue_.filter(function(request) {
|
| - assert(request.origin == print_preview.DestinationOrigin.DEVICE);
|
| - if (request.origin != event.authType) {
|
| - return true;
|
| - }
|
| - if (event.accessToken) {
|
| - request.xhr.setRequestHeader(
|
| - 'Authorization', 'Bearer ' + event.accessToken);
|
| - this.sendRequest_(request);
|
| - } else { // No valid token.
|
| - // Without abort status does not exist.
|
| - request.xhr.abort();
|
| - request.callback(request);
|
| - }
|
| - return false;
|
| - }, this);
|
| + onAccessTokenReady_: function(request, accessToken) {
|
| + assert(request.origin == print_preview.DestinationOrigin.DEVICE);
|
| + if (accessToken) {
|
| + request.xhr.setRequestHeader(
|
| + 'Authorization', 'Bearer ' + accessToken);
|
| + this.sendRequest_(request);
|
| + } else { // No valid token.
|
| + // Without abort status does not exist.
|
| + request.xhr.abort();
|
| + request.callback(request);
|
| + }
|
| + this.accessTokenRequestPromise_ = null;
|
| },
|
|
|
| /**
|
|
|