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

Side by Side Diff: remoting/webapp/crd/js/it2me_service.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, 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 /**
6 * @fileoverview
7 * It2MeService listens to incoming connections requests from Hangouts
8 * and the webapp and creates a It2MeHelperChannel between them.
9 * It supports multiple helper sessions, but only a single helpee.
10 */
11
12 'use strict';
13
14 /** @suppress {duplicate} */
15 var remoting = remoting || {};
16
17 /**
18 * @param {remoting.AppLauncher} appLauncher
19 *
20 * @constructor
21 * @implements {base.Disposable}
22 */
23 remoting.It2MeService = function(appLauncher) {
24 /**
25 * @type {remoting.AppLauncher}
26 * @private
27 */
28 this.appLauncher_ = appLauncher;
29
30 /**
31 * @type {Array<remoting.It2MeHelperChannel>}
32 * @private
33 */
34 this.helpers_ = [];
35
36 /** @private */
37 this.helpee_ = null;
38
39 this.onWebappConnectRef_ = this.onWebappConnect_.bind(this);
40 this.onConnectExternalRef_ = this.onConnectExternal_.bind(this);
41 };
42
43 /** @enum {string} */
44 remoting.It2MeService.ConnectionTypes = {
45 HELPER_HANGOUT: 'it2me.helper.hangout',
46 HELPEE_HANGOUT: 'it2me.helpee.hangout',
47 HELPER_WEBAPP: 'it2me.helper.webapp'
48 };
49
50 /**
51 * Starts listening to external connection from Hangouts and the webapp.
52 */
53 remoting.It2MeService.prototype.init = function() {
54 chrome.runtime.onConnect.addListener(this.onWebappConnectRef_);
55 chrome.runtime.onConnectExternal.addListener(this.onConnectExternalRef_);
56 };
57
58 remoting.It2MeService.prototype.dispose = function() {
59 chrome.runtime.onConnect.removeListener(this.onWebappConnectRef_);
60 chrome.runtime.onConnectExternal.removeListener(
61 this.onConnectExternalRef_);
62 };
63
64 /**
65 * This function is called when Hangouts connects via chrome.runtime.connect.
66 * Only web pages that are white-listed in the manifest are allowed to connect.
67 *
68 * @param {chrome.runtime.Port} port
69 * @private
70 */
71 remoting.It2MeService.prototype.onConnectExternal_ = function(port) {
72 var ConnectionTypes = remoting.It2MeService.ConnectionTypes;
73 try {
74 switch (port.name) {
75 case ConnectionTypes.HELPER_HANGOUT:
76 this.handleExternalHelperConnection_(port);
77 return true;
78 case ConnectionTypes.HELPEE_HANGOUT:
79 this.handleExternalHelpeeConnection_(port);
80 return true;
81 default:
82 throw new Error('Unsupported port - ' + port.name);
83 }
84 } catch (/** @type {*} */ e) {
85 var error = /**@type {Error} */ (e);
86 console.error(error);
87 port.disconnect();
88 }
89 return false;
90 };
91
92 /**
93 * @param {chrome.runtime.Port} port
94 * @private
95 */
96 remoting.It2MeService.prototype.onWebappConnect_ = function(port) {
97 try {
98 console.log('Incoming helper connection from webapp.');
99
100 // The senderId (tabId or windowId) of the webapp is embedded in the port
101 // name with the format port_name@senderId.
102 var parts = port.name.split('@');
103 var portName = parts[0];
104 var senderId = parts[1];
105 var ConnectionTypes = remoting.It2MeService.ConnectionTypes;
106 if (portName === ConnectionTypes.HELPER_WEBAPP && senderId !== undefined) {
107 for (var i = 0; i < this.helpers_.length; i++) {
108 var helper = this.helpers_[i];
109 if (helper.instanceId() === senderId) {
110 helper.onWebappConnect(port, senderId);
111 return;
112 }
113 }
114 }
115 throw new Error('No matching hangout connection found for ' + port.name);
116 } catch (/** @type {*} */ e) {
117 var error = /** @type {Error} */ (e);
118 console.error(error);
119 port.disconnect();
120 }
121 };
122
123 /**
124 * @param {remoting.It2MeHelperChannel} helper
125 */
126 remoting.It2MeService.prototype.onHelperChannelDisconnected = function(helper) {
127 for (var i = 0; i < this.helpers_.length; i++) {
128 if (helper === this.helpers_[i]) {
129 this.helpers_.splice(i, 1);
130 }
131 }
132 };
133
134 remoting.It2MeService.prototype.onHelpeeChannelDisconnected = function() {
135 base.debug.assert(this.helpee_ !== null);
136 this.helpee_ = null;
137 };
138
139 /**
140 * @param {chrome.runtime.Port} port
141 * @private
142 */
143 remoting.It2MeService.prototype.handleExternalHelperConnection_ =
144 function(port) {
145 if (this.helpee_) {
146 console.error(
147 'Cannot start a helper session while a helpee session is in process.');
148 port.disconnect();
149 return;
150 }
151
152 console.log('Incoming helper connection from Hangouts');
153 var helper = new remoting.It2MeHelperChannel(
154 this.appLauncher_, port, this.onHelperChannelDisconnected.bind(this));
155 helper.init();
156 this.helpers_.push(helper);
157 };
158
159 /**
160 * @param {chrome.runtime.Port} hangoutPort Represents a connection to Hangouts.
161 * @private
162 */
163 remoting.It2MeService.prototype.handleExternalHelpeeConnection_ =
164 function(hangoutPort) {
165 if (this.helpee_) {
166 console.error('An existing helpee session is in process.');
167 hangoutPort.disconnect();
168 return;
169 }
170
171 console.log('Incoming helpee connection from Hangouts');
172 this.helpee_ = new remoting.It2MeHelpeeChannel(
173 hangoutPort,
174 new remoting.It2MeHostFacade(),
175 new remoting.HostInstaller(),
176 this.onHelpeeChannelDisconnected.bind(this));
177 this.helpee_.init();
178 };
OLDNEW
« no previous file with comments | « remoting/webapp/crd/js/it2me_helper_channel.js ('k') | remoting/webapp/crd/manifest.json.jinja2 » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698