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

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

Issue 973333002: Remove Hangout Remote Desktop integration code from the webapp. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase + manifest changes Created 5 years, 10 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/crd/js/hangout_session.js ('k') | remoting/webapp/crd/js/it2me_helper_channel.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/webapp/crd/js/it2me_helpee_channel.js
diff --git a/remoting/webapp/crd/js/it2me_helpee_channel.js b/remoting/webapp/crd/js/it2me_helpee_channel.js
deleted file mode 100644
index bea9b6da93ac07dad9be1323fcd7ec5ca6e24bd3..0000000000000000000000000000000000000000
--- a/remoting/webapp/crd/js/it2me_helpee_channel.js
+++ /dev/null
@@ -1,472 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-/**
- * @fileoverview
- *
- * It2MeHelpeeChannel relays messages between the Hangouts web page (Hangouts)
- * and the It2Me Native Messaging Host (It2MeHost) for the helpee (the Hangouts
- * participant who is receiving remoting assistance).
- *
- * It runs in the background page. It contains a chrome.runtime.Port object,
- * representing a connection to Hangouts, and a remoting.It2MeHostFacade object,
- * representing a connection to the IT2Me Native Messaging Host.
- *
- * Hangouts It2MeHelpeeChannel It2MeHost
- * |---------runtime.connect()-------->| |
- * |-----------hello message---------->| |
- * |<-----helloResponse message------->| |
- * |----------connect message--------->| |
- * | |-----showConfirmDialog()----->|
- * | |----------connect()---------->|
- * | |<-------hostStateChanged------|
- * | | (RECEIVED_ACCESS_CODE) |
- * |<---connect response (access code)-| |
- * | | |
- *
- * Hangouts will send the access code to the web app on the helper side.
- * The helper will then connect to the It2MeHost using the access code.
- *
- * Hangouts It2MeHelpeeChannel It2MeHost
- * | |<-------hostStateChanged------|
- * | | (CONNECTED) |
- * |<-- hostStateChanged(CONNECTED)----| |
- * |-------disconnect message--------->| |
- * |<--hostStateChanged(DISCONNECTED)--| |
- *
- *
- * It also handles host downloads and install status queries:
- *
- * Hangouts It2MeHelpeeChannel
- * |------isHostInstalled message----->|
- * |<-isHostInstalled response(false)--|
- * | |
- * |--------downloadHost message------>|
- * | |
- * |------isHostInstalled message----->|
- * |<-isHostInstalled response(false)--|
- * | |
- * |------isHostInstalled message----->|
- * |<-isHostInstalled response(true)---|
- */
-
-'use strict';
-
-/** @suppress {duplicate} */
-var remoting = remoting || {};
-
-/**
- * @param {chrome.runtime.Port} hangoutPort
- * @param {remoting.It2MeHostFacade} host
- * @param {remoting.HostInstaller} hostInstaller
- * @param {function()} onDisposedCallback Callback to notify the client when
- * the connection is torn down.
- *
- * @constructor
- * @implements {base.Disposable}
- */
-remoting.It2MeHelpeeChannel =
- function(hangoutPort, host, hostInstaller, onDisposedCallback) {
- /**
- * @type {chrome.runtime.Port}
- * @private
- */
- this.hangoutPort_ = hangoutPort;
-
- /**
- * @type {remoting.It2MeHostFacade}
- * @private
- */
- this.host_ = host;
-
- /**
- * @type {?remoting.HostInstaller}
- * @private
- */
- this.hostInstaller_ = hostInstaller;
-
- /**
- * @type {remoting.HostSession.State}
- * @private
- */
- this.hostState_ = remoting.HostSession.State.UNKNOWN;
-
- /**
- * @type {?function()}
- * @private
- */
- this.onDisposedCallback_ = onDisposedCallback;
-
- this.onHangoutMessageRef_ = this.onHangoutMessage_.bind(this);
- this.onHangoutDisconnectRef_ = this.onHangoutDisconnect_.bind(this);
-};
-
-/** @enum {string} */
-remoting.It2MeHelpeeChannel.HangoutMessageTypes = {
- CONNECT: 'connect',
- CONNECT_RESPONSE: 'connectResponse',
- DISCONNECT: 'disconnect',
- DOWNLOAD_HOST: 'downloadHost',
- ERROR: 'error',
- HELLO: 'hello',
- HELLO_RESPONSE: 'helloResponse',
- HOST_STATE_CHANGED: 'hostStateChanged',
- IS_HOST_INSTALLED: 'isHostInstalled',
- IS_HOST_INSTALLED_RESPONSE: 'isHostInstalledResponse'
-};
-
-/** @enum {string} */
-remoting.It2MeHelpeeChannel.Features = {
- REMOTE_ASSISTANCE: 'remoteAssistance'
-};
-
-remoting.It2MeHelpeeChannel.prototype.init = function() {
- this.hangoutPort_.onMessage.addListener(this.onHangoutMessageRef_);
- this.hangoutPort_.onDisconnect.addListener(this.onHangoutDisconnectRef_);
-};
-
-remoting.It2MeHelpeeChannel.prototype.dispose = function() {
- if (this.host_ !== null) {
- this.host_.unhookCallbacks();
- this.host_.disconnect();
- this.host_ = null;
- }
-
- if (this.hangoutPort_ !== null) {
- this.hangoutPort_.onMessage.removeListener(this.onHangoutMessageRef_);
- this.hangoutPort_.onDisconnect.removeListener(this.onHangoutDisconnectRef_);
- this.hostState_ = remoting.HostSession.State.DISCONNECTED;
-
- try {
- var MessageTypes = remoting.It2MeHelpeeChannel.HangoutMessageTypes;
- this.hangoutPort_.postMessage({
- method: MessageTypes.HOST_STATE_CHANGED,
- state: this.hostState_
- });
- } catch (e) {
- // |postMessage| throws if |this.hangoutPort_| is disconnected
- // It is safe to ignore the exception.
- }
- this.hangoutPort_.disconnect();
- this.hangoutPort_ = null;
- }
-
- if (this.onDisposedCallback_ !== null) {
- this.onDisposedCallback_();
- this.onDisposedCallback_ = null;
- }
-};
-
-/**
- * Message Handler for incoming runtime messages from Hangouts.
- *
- * @param {{method:string, data:Object<string,*>}} message
- * @private
- */
-remoting.It2MeHelpeeChannel.prototype.onHangoutMessage_ = function(message) {
- try {
- var MessageTypes = remoting.It2MeHelpeeChannel.HangoutMessageTypes;
- switch (message.method) {
- case MessageTypes.HELLO:
- this.hangoutPort_.postMessage({
- method: MessageTypes.HELLO_RESPONSE,
- supportedFeatures: base.values(remoting.It2MeHelpeeChannel.Features)
- });
- return true;
- case MessageTypes.IS_HOST_INSTALLED:
- this.handleIsHostInstalled_(message);
- return true;
- case MessageTypes.DOWNLOAD_HOST:
- this.handleDownloadHost_(message);
- return true;
- case MessageTypes.CONNECT:
- this.handleConnect_(message);
- return true;
- case MessageTypes.DISCONNECT:
- this.dispose();
- return true;
- }
- throw new Error('Unsupported message method=' + message.method);
- } catch(/** @type {Error} */ error) {
- this.sendErrorResponse_(message, error.message);
- }
- return false;
-};
-
-/**
- * Queries the |hostInstaller| for the installation status.
- *
- * @param {{method:string, data:Object<string,*>}} message
- * @private
- */
-remoting.It2MeHelpeeChannel.prototype.handleIsHostInstalled_ =
- function(message) {
- /** @type {remoting.It2MeHelpeeChannel} */
- var that = this;
-
- /** @param {boolean} installed */
- function sendResponse(installed) {
- var MessageTypes = remoting.It2MeHelpeeChannel.HangoutMessageTypes;
- that.hangoutPort_.postMessage({
- method: MessageTypes.IS_HOST_INSTALLED_RESPONSE,
- result: installed
- });
- }
-
- remoting.HostInstaller.isInstalled().then(
- sendResponse,
- /** @type {function(*):void} */(this.sendErrorResponse_.bind(this, message))
- );
-};
-
-/**
- * @param {{method:string, data:Object<string,*>}} message
- * @private
- */
-remoting.It2MeHelpeeChannel.prototype.handleDownloadHost_ = function(message) {
- try {
- this.hostInstaller_.download();
- } catch (/** @type {*} */ e) {
- var error = /** @type {Error} */ (e);
- this.sendErrorResponse_(message, error.message);
- }
-};
-
-/**
- * Disconnect the session if the |hangoutPort| gets disconnected.
- * @private
- */
-remoting.It2MeHelpeeChannel.prototype.onHangoutDisconnect_ = function() {
- this.dispose();
-};
-
-/**
- * Connects to the It2Me Native messaging Host and retrieves the access code.
- *
- * @param {{method:string, data:Object<string,*>}} message
- * @private
- */
-remoting.It2MeHelpeeChannel.prototype.handleConnect_ =
- function(message) {
- var bounds =
- /** @type {Bounds} */ (getObjectAttr(message, 'hangoutBounds', null));
-
- if (this.hostState_ !== remoting.HostSession.State.UNKNOWN) {
- throw new Error('An existing connection is in progress.');
- }
-
- var that = this;
- this.showConfirmDialog_(bounds)
- .then(this.initializeHost_.bind(this))
- .then(this.fetchOAuthToken_.bind(this))
- .then(this.fetchEmail_.bind(this))
- /** @param {{email:string, token:string}|Promise} result */
- .then(function(result) {
- that.connectToHost_(result.email, result.token);
- /** @param {*} reason */
- }).catch(function(reason) {
- that.sendErrorResponse_(message, /** @type {Error} */ (reason));
- that.dispose();
- });
-};
-
-/**
- * Prompts the user before starting the It2Me Native Messaging Host. This
- * ensures that even if Hangouts is compromised, an attacker cannot start the
- * host without explicit user confirmation.
- *
- * @param {Bounds} bounds Bounds of the hangout window
- * @return {Promise} A promise that will resolve if the user accepts remote
- * assistance or reject otherwise.
- * @private
- */
-remoting.It2MeHelpeeChannel.prototype.showConfirmDialog_ = function(bounds) {
- if (base.isAppsV2()) {
- return this.showConfirmDialogV2_(bounds);
- } else {
- return this.showConfirmDialogV1_();
- }
-};
-
-/**
- * @return {Promise} A promise that will resolve if the user accepts remote
- * assistance or reject otherwise.
- * @private
- */
-remoting.It2MeHelpeeChannel.prototype.showConfirmDialogV1_ = function() {
- var messageHeader = l10n.getTranslationOrError(
- /*i18n-content*/'HANGOUTS_CONFIRM_DIALOG_MESSAGE_1');
- var message1 = l10n.getTranslationOrError(
- /*i18n-content*/'HANGOUTS_CONFIRM_DIALOG_MESSAGE_2');
- var message2 = l10n.getTranslationOrError(
- /*i18n-content*/'HANGOUTS_CONFIRM_DIALOG_MESSAGE_3');
- var message = base.escapeHTML(messageHeader) + '\n' +
- '- ' + base.escapeHTML(message1) + '\n' +
- '- ' + base.escapeHTML(message2) + '\n';
-
- if(window.confirm(message)) {
- return Promise.resolve();
- } else {
- return Promise.reject(new Error(remoting.Error.CANCELLED));
- }
-};
-
-/**
- * @param {Bounds} bounds the bounds of the Hangouts Window. If set, the
- * confirm dialog will be centered within |bounds|.
- * @return {Promise} A promise that will resolve if the user accepts remote
- * assistance or reject otherwise.
- * @private
- */
-remoting.It2MeHelpeeChannel.prototype.showConfirmDialogV2_ = function(bounds) {
- var getToken =
- base.Promise.as(chrome.identity.getAuthToken, [{interactive: false}]);
-
- return getToken;
-};
-
-/**
- * @return {Promise} A promise that resolves when the host is initialized.
- * @private
- */
-remoting.It2MeHelpeeChannel.prototype.initializeHost_ = function() {
- /** @type {remoting.It2MeHostFacade} */
- var host = this.host_;
-
- /**
- * @param {function(*=):void} resolve
- * @param {function(*=):void} reject
- */
- return new Promise(function(resolve, reject) {
- if (host.initialized()) {
- resolve(true);
- } else {
- host.initialize(/** @type {function(*=):void} */ (resolve),
- /** @type {function(*=):void} */ (reject));
- }
- });
-};
-
-/**
- * @return {!Promise<string>} Promise that resolves with the OAuth token as the
- * value.
- */
-remoting.It2MeHelpeeChannel.prototype.fetchOAuthToken_ = function() {
- if (base.isAppsV2()) {
- return remoting.identity.getToken();
- } else {
- var onError = function(/** * */ error) {
- if (error === remoting.Error.NOT_AUTHENTICATED) {
- return new Promise(function(resolve, reject) {
- remoting.oauth2.doAuthRedirect(function() {
- remoting.identity.getToken().then(resolve);
- });
- });
- }
- throw Error(remoting.Error.NOT_AUTHENTICATED);
- };
- return /** @type {!Promise<string>} */ (
- remoting.identity.getToken().catch(onError));
- }
-};
-
-/**
- * @param {string|Promise} token
- * @return {Promise} Promise that resolves with the access token and the email
- * of the user.
- */
-remoting.It2MeHelpeeChannel.prototype.fetchEmail_ = function(token) {
- /** @param {string} email */
- function onEmail (email) {
- return { email: email, token: token };
- }
- return remoting.identity.getEmail().then(onEmail);
-};
-
-/**
- * Connects to the It2Me Native Messaging Host and retrieves the access code
- * in the |onHostStateChanged_| callback.
- *
- * @param {string} email
- * @param {string} accessToken
- * @private
- */
-remoting.It2MeHelpeeChannel.prototype.connectToHost_ =
- function(email, accessToken) {
- base.debug.assert(this.host_.initialized());
- this.host_.connect(
- email,
- 'oauth2:' + accessToken,
- this.onHostStateChanged_.bind(this),
- base.doNothing, // Ignore |onNatPolicyChanged|.
- console.log.bind(console), // Forward logDebugInfo to console.log.
- remoting.settings.XMPP_SERVER_FOR_IT2ME_HOST,
- remoting.settings.XMPP_SERVER_USE_TLS,
- remoting.settings.DIRECTORY_BOT_JID,
- this.onHostConnectError_);
-};
-
-/**
- * @param {remoting.Error} error
- * @private
- */
-remoting.It2MeHelpeeChannel.prototype.onHostConnectError_ = function(error) {
- this.sendErrorResponse_(null, error);
-};
-
-/**
- * @param {remoting.HostSession.State} state
- * @private
- */
-remoting.It2MeHelpeeChannel.prototype.onHostStateChanged_ = function(state) {
- this.hostState_ = state;
- var MessageTypes = remoting.It2MeHelpeeChannel.HangoutMessageTypes;
- var HostState = remoting.HostSession.State;
-
- switch (state) {
- case HostState.RECEIVED_ACCESS_CODE:
- var accessCode = this.host_.getAccessCode();
- this.hangoutPort_.postMessage({
- method: MessageTypes.CONNECT_RESPONSE,
- accessCode: accessCode
- });
- break;
- case HostState.CONNECTED:
- case HostState.DISCONNECTED:
- this.hangoutPort_.postMessage({
- method: MessageTypes.HOST_STATE_CHANGED,
- state: state
- });
- break;
- case HostState.ERROR:
- this.sendErrorResponse_(null, remoting.Error.UNEXPECTED);
- break;
- case HostState.INVALID_DOMAIN_ERROR:
- this.sendErrorResponse_(null, remoting.Error.INVALID_HOST_DOMAIN);
- break;
- default:
- // It is safe to ignore other state changes.
- }
-};
-
-/**
- * @param {?{method:string, data:Object<string,*>}} incomingMessage
- * @param {string|Error} error
- * @private
- */
-remoting.It2MeHelpeeChannel.prototype.sendErrorResponse_ =
- function(incomingMessage, error) {
- if (error instanceof Error) {
- error = error.message;
- }
-
- console.error('Error responding to message method:' +
- (incomingMessage ? incomingMessage.method : 'null') +
- ' error:' + error);
- this.hangoutPort_.postMessage({
- method: remoting.It2MeHelpeeChannel.HangoutMessageTypes.ERROR,
- message: error,
- request: incomingMessage
- });
-};
« no previous file with comments | « remoting/webapp/crd/js/hangout_session.js ('k') | remoting/webapp/crd/js/it2me_helper_channel.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698