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

Unified Diff: remoting/webapp/crd/js/session_connector_impl.js

Issue 1016623002: [Webapp Refactor] Reparent the ConnectedView into the delegate. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Baseline Created 5 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
Index: remoting/webapp/crd/js/session_connector_impl.js
diff --git a/remoting/webapp/crd/js/session_connector_impl.js b/remoting/webapp/crd/js/session_connector_impl.js
index 62b485ab76a4a958d925de10b39ba06118effb1e..ad9def6bff20f1d42e7c182649416a479da3b03e 100644
--- a/remoting/webapp/crd/js/session_connector_impl.js
+++ b/remoting/webapp/crd/js/session_connector_impl.js
@@ -31,9 +31,6 @@ remoting.desktopConnectedView = null;
* @param {function(remoting.ConnectionInfo):void} onConnected Callback on
* success.
* @param {function(!remoting.Error):void} onError Callback on error.
- * @param {function(string, string):boolean} appProtocolExtensionHandler The
- * handler for the application's protocol extension messages. Returns true
- * if a message is recognized; false otherwise.
* @param {function(!remoting.Error):void} onConnectionFailed Callback for when
* the connection fails.
* @param {Array<string>} requiredCapabilities Connector capabilities
@@ -44,7 +41,6 @@ remoting.desktopConnectedView = null;
* @implements {remoting.SessionConnector}
*/
remoting.SessionConnectorImpl = function(clientContainer, onConnected, onError,
- appProtocolExtensionHandler,
onConnectionFailed,
requiredCapabilities,
defaultRemapKeys) {
@@ -57,9 +53,6 @@ remoting.SessionConnectorImpl = function(clientContainer, onConnected, onError,
/** @private {function(!remoting.Error):void} */
this.onError_ = onError;
- /** @private {function(string, string):boolean} */
- this.appProtocolExtensionHandler_ = appProtocolExtensionHandler;
-
/** @private {function(!remoting.Error):void} */
this.onConnectionFailed_ = onConnectionFailed;
@@ -118,6 +111,14 @@ remoting.SessionConnectorImpl.prototype.resetConnection_ = function() {
/** @private {Object<string,remoting.ProtocolExtension>} */
this.protocolExtensions_ = {};
+
+ /**
+ * True once a session has been created and we've started the extensions.
+ * This is used to immediately start any extensions that are registered
+ * after the CONNECTED state change.
+ * @private {boolean}
+ */
+ this.protocolExtensionsStarted_ = false;
};
/**
@@ -405,22 +406,43 @@ remoting.SessionConnectorImpl.prototype.removePlugin_ = function() {
*/
remoting.SessionConnectorImpl.prototype.registerProtocolExtension =
function(extension) {
- var type = extension.getType();
- if (type in this.protocolExtensions_) {
- console.error(
- 'Attempt to register multiple extensions with the same type: ', type);
- return;
+ var types = extension.getExtensionTypes();
+
+ // Make sure we don't have an extension of that type already registered.
+ for (var i=0, len=types.length; i < len; i++) {
+ if (types[i] in this.protocolExtensions_) {
+ console.error(
+ 'Attempt to register multiple extensions of the same type: ', type);
+ return;
+ }
+ }
+
+ for (var i=0, len=types.length; i < len; i++) {
+ var type = types[i];
+ this.protocolExtensions_[type] = extension;
+ if (this.protocolExtensionsStarted_) {
+ this.startProtocolExtension_(type);
+ }
}
- this.protocolExtensions_[type] = extension;
};
/** @private */
remoting.SessionConnectorImpl.prototype.initProtocolExtensions_ = function() {
+ base.debug.assert(!this.protocolExtensionsStarted_);
for (var type in this.protocolExtensions_) {
- /** @type {remoting.ProtocolExtension} */
- var extension = this.protocolExtensions_[type];
- extension.start(this.plugin_.sendClientMessage.bind(this.plugin_));
+ this.startProtocolExtension_(type);
}
+ this.protocolExtensionsStarted_ = true;
+};
+
+/**
+ * @param {string} type
+ * @private
+ */
+remoting.SessionConnectorImpl.prototype.startProtocolExtension_ =
+ function(type) {
+ var extension = this.protocolExtensions_[type];
+ extension.startExtension(this.plugin_.sendClientMessage.bind(this.plugin_));
};
/**
@@ -437,20 +459,33 @@ remoting.SessionConnectorImpl.prototype.onProtocolExtensionMessage_ =
console.log('Got echo reply: ' + data);
return true;
}
- for (var type in this.protocolExtensions_) {
+
+ var message = base.jsonParseSafe(data);
+ if (typeof message != 'object') {
+ console.error('Error parsing extension json data: ' + data);
+ return false;
+ }
+
+ if (type in this.protocolExtensions_) {
/** @type {remoting.ProtocolExtension} */
var extension = this.protocolExtensions_[type];
- if (type == extension.getType()) {
- try {
- extension.onMessage(data);
- } catch (/** @type {*} */ err) {
- console.error('Failed to process protocol extension ', type,
- ' message: ', err);
- }
+ var handled = false;
+ try {
+ handled = extension.onExtensionMessage(type, message);
+ } catch (/** @type {*} */ err) {
+ console.error('Failed to process protocol extension ' + type +
+ ' message: ' + err);
+ }
+ if (handled) {
return true;
}
}
- return this.appProtocolExtensionHandler_(type, data);
+
+ if (remoting.desktopConnectedView) {
+ return remoting.desktopConnectedView.handleExtensionMessage(type, message);
+ }
+
+ return false;
};
/**
@@ -542,9 +577,6 @@ remoting.DefaultSessionConnectorFactory = function() {};
* @param {function(remoting.ConnectionInfo):void} onConnected Callback on
* success.
* @param {function(!remoting.Error):void} onError Callback on error.
- * @param {function(string, string):boolean} appProtocolExtensionHandler The
- * handler for the application's protocol extension messages. Returns true
- * if a message is recognized; false otherwise.
* @param {function(!remoting.Error):void} onConnectionFailed Callback for when
* the connection fails.
* @param {Array<string>} requiredCapabilities Connector capabilities
@@ -555,11 +587,9 @@ remoting.DefaultSessionConnectorFactory = function() {};
*/
remoting.DefaultSessionConnectorFactory.prototype.createConnector =
function(clientContainer, onConnected, onError,
- appProtocolExtensionHandler,
onConnectionFailed, requiredCapabilities, defaultRemapKeys) {
return new remoting.SessionConnectorImpl(clientContainer, onConnected,
onError,
- appProtocolExtensionHandler,
onConnectionFailed,
requiredCapabilities,
defaultRemapKeys);
« remoting/webapp/crd/js/desktop_remoting.js ('K') | « remoting/webapp/crd/js/session_connector.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698