| Index: remoting/webapp/client_session.js
|
| diff --git a/remoting/webapp/client_session.js b/remoting/webapp/client_session.js
|
| index 3579b0d55327a22961752911e0d5bd42deeaa83d..c9206c7feea6e0067b34822e52fab20fb65dacde 100644
|
| --- a/remoting/webapp/client_session.js
|
| +++ b/remoting/webapp/client_session.js
|
| @@ -23,6 +23,13 @@
|
| var remoting = remoting || {};
|
|
|
| /**
|
| + * True if Cast capability is supported.
|
| + *
|
| + * @type {boolean}
|
| + */
|
| +remoting.enableCast = false;
|
| +
|
| +/**
|
| * @param {HTMLElement} container Container element for the client view.
|
| * @param {string} hostDisplayName A human-readable name for the host.
|
| * @param {string} accessCode The IT2Me access code. Blank for Me2Me.
|
| @@ -166,6 +173,9 @@ remoting.ClientSession = function(container, hostDisplayName, accessCode,
|
| /** @type {remoting.GnubbyAuthHandler} @private */
|
| this.gnubbyAuthHandler_ = null;
|
|
|
| + /** @type {remoting.CastExtensionHandler} @private */
|
| + this.castExtensionHandler_ = null;
|
| +
|
| if (this.mode_ == remoting.ClientSession.Mode.IT2ME) {
|
| // Resize-to-client is not supported for IT2Me hosts.
|
| this.resizeToClientButton_.hidden = true;
|
| @@ -373,7 +383,8 @@ remoting.ClientSession.Capability = {
|
| // this.plugin_.notifyClientResolution().
|
| SEND_INITIAL_RESOLUTION: 'sendInitialResolution',
|
| RATE_LIMIT_RESIZE_REQUESTS: 'rateLimitResizeRequests',
|
| - VIDEO_RECORDER: 'videoRecorder'
|
| + VIDEO_RECORDER: 'videoRecorder',
|
| + CAST: 'casting'
|
| };
|
|
|
| /**
|
| @@ -587,6 +598,8 @@ remoting.ClientSession.prototype.onPluginInitialized_ = function(initialized) {
|
| this.plugin_.onSetCapabilitiesHandler = this.onSetCapabilities_.bind(this);
|
| this.plugin_.onGnubbyAuthHandler = this.processGnubbyAuthMessage_.bind(this);
|
| this.plugin_.updateMouseCursorImage = this.updateMouseCursorImage_.bind(this);
|
| + this.plugin_.onCastExtensionHandler =
|
| + this.processCastExtensionMessage_.bind(this);
|
| this.initiateConnection_();
|
| };
|
|
|
| @@ -1109,6 +1122,7 @@ remoting.ClientSession.prototype.setState_ = function(newState) {
|
| this.logToServer.logClientSessionStateChange(state, this.error_, this.mode_);
|
| if (this.state_ == remoting.ClientSession.State.CONNECTED) {
|
| this.createGnubbyAuthHandler_();
|
| + this.createCastExtensionHandler_();
|
| }
|
|
|
| this.raiseEvent(remoting.ClientSession.Events.stateChanged,
|
| @@ -1578,3 +1592,43 @@ remoting.ClientSession.prototype.getPluginPositionForTesting = function() {
|
| left: parseFloat(style.marginLeft)
|
| };
|
| };
|
| +
|
| +/**
|
| + * Send a Cast extension message to the host.
|
| + * @param {Object} data The cast message data.
|
| + */
|
| +remoting.ClientSession.prototype.sendCastExtensionMessage = function(data) {
|
| + if (!this.plugin_)
|
| + return;
|
| + this.plugin_.sendClientMessage('cast_message', JSON.stringify(data));
|
| +};
|
| +
|
| +/**
|
| + * Process a remote Cast extension message from the host.
|
| + * @param {string} data Remote cast extension data message.
|
| + * @private
|
| + */
|
| +remoting.ClientSession.prototype.processCastExtensionMessage_ = function(data) {
|
| + if (this.castExtensionHandler_) {
|
| + try {
|
| + this.castExtensionHandler_.onMessage(data);
|
| + } catch (err) {
|
| + console.error('Failed to process cast message: ',
|
| + /** @type {*} */ (err));
|
| + }
|
| + } else {
|
| + console.error('Received unexpected cast message');
|
| + }
|
| +};
|
| +
|
| +/**
|
| + * Create a CastExtensionHandler and inform the host that cast extension
|
| + * is supported.
|
| + * @private
|
| + */
|
| +remoting.ClientSession.prototype.createCastExtensionHandler_ = function() {
|
| + if (remoting.enableCast && this.mode_ == remoting.ClientSession.Mode.ME2ME) {
|
| + this.castExtensionHandler_ = new remoting.CastExtensionHandler(this);
|
| + }
|
| +};
|
| +
|
|
|