Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(413)

Unified Diff: remoting/webapp/client_session.js

Issue 12867004: Webapp changes to support asking for a PIN (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Rebase Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « remoting/webapp/client_screen.js ('k') | remoting/webapp/session_connector.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/webapp/client_session.js
diff --git a/remoting/webapp/client_session.js b/remoting/webapp/client_session.js
index 06979b6db1ce1e5db1ac397e65bab8f45ac540ae..bbc428a8374a3fd30c33d86465a93f28716bba00 100644
--- a/remoting/webapp/client_session.js
+++ b/remoting/webapp/client_session.js
@@ -27,8 +27,9 @@ var remoting = remoting || {};
* @param {string} clientJid The jid of the WCS client.
* @param {string} hostPublicKey The base64 encoded version of the host's
* public key.
- * @param {string} sharedSecret The access code for IT2Me or the PIN
- * for Me2Me.
+ * @param {string} accessCode The IT2Me access code. Blank for Me2Me.
+ * @param {function(function(string): void): void} fetchPin Called by Me2Me
+ * connections when a PIN needs to be obtained interactively.
* @param {string} authenticationMethods Comma-separated list of
* authentication methods the client should attempt to use.
* @param {string} hostId The host identifier for Me2Me, or empty for IT2Me.
@@ -37,16 +38,18 @@ var remoting = remoting || {};
* @param {string} hostDisplayName The name of the host for display purposes.
* @constructor
*/
-remoting.ClientSession = function(hostJid, clientJid,
- hostPublicKey, sharedSecret,
- authenticationMethods, hostId, mode,
- hostDisplayName) {
+remoting.ClientSession = function(hostJid, clientJid, hostPublicKey, accessCode,
+ fetchPin, authenticationMethods, hostId,
+ mode, hostDisplayName) {
this.state = remoting.ClientSession.State.CREATED;
this.hostJid = hostJid;
this.clientJid = clientJid;
this.hostPublicKey = hostPublicKey;
- this.sharedSecret = sharedSecret;
+ /** @private */
+ this.accessCode_ = accessCode;
+ /** @private */
+ this.fetchPin_ = fetchPin;
this.authenticationMethods = authenticationMethods;
this.hostId = hostId;
/** @type {string} */
@@ -294,14 +297,20 @@ remoting.ClientSession.prototype.onHostSettingsLoaded_ = function(options) {
options[remoting.ClientSession.KEY_SHRINK_TO_FIT];
}
- this.plugin.element().focus();
-
/** @param {boolean} result */
this.plugin.initialize(this.onPluginInitialized_.bind(this));
+};
+
+/**
+ * Constrains the focus to the plugin element.
+ * @private
+ */
+remoting.ClientSession.prototype.setFocusHandlers_ = function() {
this.plugin.element().addEventListener(
'focus', this.callPluginGotFocus_, false);
this.plugin.element().addEventListener(
'blur', this.callPluginLostFocus_, false);
+ this.plugin.element().focus();
};
/**
@@ -592,6 +601,7 @@ remoting.ClientSession.prototype.sendIq_ = function(msg) {
*/
remoting.ClientSession.prototype.connectPluginToWcs_ = function() {
remoting.formatIq.setJids(this.clientJid, this.hostJid);
+ /** @type {remoting.ClientPlugin} */
var plugin = this.plugin;
var forwardIq = plugin.onIncomingIq.bind(plugin);
/** @param {string} stanza The IQ stanza received. */
@@ -613,10 +623,41 @@ remoting.ClientSession.prototype.connectPluginToWcs_ = function() {
console.log(remoting.timestamp(),
remoting.formatIq.prettifyReceiveIq(stanza));
forwardIq(stanza);
- }
+ };
remoting.wcsSandbox.setOnIq(onIncomingIq);
+
+ if (this.accessCode_) {
+ // Shared secret was already supplied before connecting (It2Me case).
+ this.connectToHost_(this.accessCode_);
+
+ } else if (plugin.hasFeature(
+ remoting.ClientPlugin.Feature.ASYNC_PIN)) {
+ // Plugin supports asynchronously asking for the PIN.
+ plugin.useAsyncPinDialog();
+ /** @type remoting.ClientSession */
+ var that = this;
+ var fetchPin = function() {
+ that.fetchPin_(plugin.onPinFetched.bind(plugin));
+ };
+ plugin.fetchPinHandler = fetchPin;
+ this.connectToHost_('');
+
+ } else {
+ // Plugin doesn't support asynchronously asking for the PIN, ask now.
+ this.fetchPin_(this.connectToHost_.bind(this));
+ }
+};
+
+/**
+ * Connects to the host.
+ *
+ * @param {string} sharedSecret Shared secret for SPAKE negotiation.
+ * @return {void} Nothing.
+ * @private
+ */
+remoting.ClientSession.prototype.connectToHost_ = function(sharedSecret) {
this.plugin.connect(this.hostJid, this.hostPublicKey, this.clientJid,
- this.sharedSecret, this.authenticationMethods,
+ sharedSecret, this.authenticationMethods,
this.hostId);
};
@@ -631,6 +672,7 @@ remoting.ClientSession.prototype.connectPluginToWcs_ = function() {
remoting.ClientSession.prototype.onConnectionStatusUpdate_ =
function(status, error) {
if (status == remoting.ClientSession.State.CONNECTED) {
+ this.setFocusHandlers_();
this.onDesktopSizeChanged_();
if (this.resizeToClient_) {
this.plugin.notifyClientResolution(window.innerWidth,
« no previous file with comments | « remoting/webapp/client_screen.js ('k') | remoting/webapp/session_connector.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698