Index: remoting/webapp/crd/js/identity.js |
diff --git a/remoting/webapp/crd/js/identity.js b/remoting/webapp/crd/js/identity.js |
index aef0f2c6f984444844d7002e1f4d827a90dfb09b..0421410448a5ce7660487b695d1a6b541ecc0e50 100644 |
--- a/remoting/webapp/crd/js/identity.js |
+++ b/remoting/webapp/crd/js/identity.js |
@@ -16,19 +16,17 @@ var remoting = remoting || {}; |
* TODO(jamiewalch): Remove remoting.OAuth2 from this type annotation when |
* the Apps v2 work is complete. |
* |
- * @type {remoting.Identity|remoting.OAuth2} |
+ * @type {remoting.Identity} |
*/ |
remoting.identity = null; |
/** |
- * @param {function(function():void):void} consentCallback Callback invoked if |
- * user consent is required. The callback is passed a continuation function |
- * which must be called from an interactive event handler (e.g. "click"). |
+ * @param {remoting.Identity.ConsentDialog} consentDialog |
* @constructor |
*/ |
-remoting.Identity = function(consentCallback) { |
+remoting.Identity = function(consentDialog) { |
/** @private */ |
- this.consentCallback_ = consentCallback; |
+ this.consentDialog_ = consentDialog; |
/** @type {string} @private */ |
this.email_ = ''; |
/** @type {string} @private */ |
@@ -38,6 +36,21 @@ remoting.Identity = function(consentCallback) { |
}; |
/** |
+ * chrome.identity.getAuthToken must be initiated from user interactions if |
+ * called with interactive equals true. This interface prompts a dialog for |
+ * the user's consent. |
+ * |
+ * @interface |
+ */ |
+remoting.Identity.ConsentDialog = function() {}; |
+ |
+/** |
+ * @return {Promise} A Promise that resolves when permission to start an |
+ * interactive flow is granted. |
+ */ |
+remoting.Identity.ConsentDialog.prototype.show = function() {}; |
+ |
+/** |
* Call a function with an access token. |
* |
* @param {function(string):void} onOk Function to invoke with access token if |
@@ -75,7 +88,7 @@ remoting.Identity.prototype.callWithNewToken = function(onOk, onError) { |
chrome.identity.removeCachedAuthToken( |
{'token': token }, |
that.callWithToken.bind(that, onOk, onError)); |
- }; |
+ } |
this.callWithToken(revokeToken, onError); |
}; |
@@ -83,19 +96,21 @@ remoting.Identity.prototype.callWithNewToken = function(onOk, onError) { |
/** |
* Remove the cached auth token, if any. |
* |
- * @param {function():void} onDone Completion callback. |
+ * @param {function():void=} opt_onDone Completion callback. |
* @return {void} Nothing. |
*/ |
-remoting.Identity.prototype.removeCachedAuthToken = function(onDone) { |
+remoting.Identity.prototype.removeCachedAuthToken = function(opt_onDone) { |
+ var onDone = (opt_onDone) ? opt_onDone : base.doNothing; |
+ |
/** @param {string} token */ |
var onToken = function(token) { |
if (token) { |
- chrome.identity.removeCachedAuthToken({ 'token': token }, onDone); |
+ chrome.identity.removeCachedAuthToken({'token': token}, onDone); |
} else { |
onDone(); |
} |
}; |
- chrome.identity.getAuthToken({ 'interactive': false }, onToken); |
+ chrome.identity.getAuthToken({'interactive': false}, onToken); |
}; |
/** |
@@ -206,19 +221,12 @@ remoting.Identity.prototype.onAuthComplete_ = function(interactive, token) { |
} |
// If there's no token, but we haven't yet prompted for permission, do so |
- // now. The consent callback is responsible for continuing the auth flow. |
- this.consentCallback_(this.onAuthContinue_.bind(this)); |
-}; |
- |
-/** |
- * Called in response to the user signing in to the web-app. |
- * |
- * @private |
- */ |
-remoting.Identity.prototype.onAuthContinue_ = function() { |
- chrome.identity.getAuthToken( |
- { 'interactive': true }, |
- this.onAuthComplete_.bind(this, true)); |
+ // now. |
+ var that = this; |
+ this.consentDialog_.show().then(function() { |
+ chrome.identity.getAuthToken({'interactive': true}, |
+ that.onAuthComplete_.bind(that, true)); |
+ }); |
}; |
/** |