OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
| 5 "use strict"; |
| 6 |
5 // TODO(ajwong): This seems like a bad idea to share the exact same object | 7 // TODO(ajwong): This seems like a bad idea to share the exact same object |
6 // with the background page. Why are we doing it like this? | 8 // with the background page. Why are we doing it like this? |
7 var remoting = chrome.extension.getBackgroundPage().remoting; | 9 var remoting = chrome.extension.getBackgroundPage().remoting; |
| 10 remoting.CLIENT_MODE='client'; |
| 11 remoting.HOST_MODE='host'; |
| 12 remoting.PLUGIN_MIMETYPE='HOST_PLUGIN_MIMETYPE'; |
| 13 remoting.XMPP_LOGIN_NAME = 'xmpp_login'; |
| 14 remoting.HOST_PLUGIN_ID = 'host-plugin-id'; |
8 | 15 |
9 XMPP_LOGIN_NAME = 'xmpp_login'; | 16 window.addEventListener("load", init_, false); |
10 XMPP_TOKEN_NAME = 'xmpp_token'; | |
11 HOST_PLUGIN_ID = 'host_plugin_id'; | |
12 | 17 |
13 function updateAuthStatus_() { | 18 function hasClass(element, cls) { |
14 var oauth2_status = document.getElementById('oauth2_status'); | 19 return element.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)')); |
15 if (remoting.oauth2.isAuthenticated()) { | 20 } |
16 oauth2_status.innerText = 'OK'; | 21 |
17 oauth2_status.style.color = 'green'; | 22 function showElement(element, visible) { |
18 document.getElementById('oauth2_code_button').style.display = 'none'; | 23 if (visible) { |
19 document.getElementById('oauth2_clear_button').style.display = 'inline'; | 24 if (hasClass(element, 'display-inline')) { |
20 document.getElementById('oauth2_form').style.display = 'none'; | 25 element.style.display = 'inline'; |
| 26 } else { |
| 27 element.style.display = 'block'; |
| 28 } |
21 } else { | 29 } else { |
22 oauth2_status.innerText = 'Unauthorized'; | 30 element.style.display = 'none'; |
23 oauth2_status.style.color = 'red'; | |
24 document.getElementById('oauth2_code_button').style.display = 'inline'; | |
25 document.getElementById('oauth2_clear_button').style.display = 'none'; | |
26 document.getElementById('oauth2_form').style.display = 'inline'; | |
27 } | |
28 var xmpp_status = document.getElementById('xmpp_status'); | |
29 if (remoting.getItem(XMPP_TOKEN_NAME) && remoting.getItem(XMPP_LOGIN_NAME)) { | |
30 document.getElementById('xmpp_clear').style.display = 'inline'; | |
31 document.getElementById('xmpp_form').style.display = 'none'; | |
32 xmpp_status.innerText = 'OK'; | |
33 xmpp_status.style.color = 'green'; | |
34 } else { | |
35 document.getElementById('xmpp_clear').style.display = 'none'; | |
36 document.getElementById('xmpp_form').style.display = 'inline'; | |
37 xmpp_status.innerText = 'Unauthorized'; | |
38 xmpp_status.style.color = 'red'; | |
39 } | |
40 var current_email = document.getElementById('current_email'); | |
41 if (remoting.getItem(XMPP_LOGIN_NAME)) { | |
42 oauth2_status.style.color = 'green'; | |
43 current_email.innerText = remoting.getItem(XMPP_LOGIN_NAME); | |
44 } else { | |
45 oauth2_status.style.color = 'red'; | |
46 current_email.innerText = 'missing e-mail'; | |
47 } | 31 } |
48 } | 32 } |
49 | 33 |
50 function clientLoginError_(xhr) { | 34 function showElementById(id, visible) { |
51 // If there's an error URL, load it into an iframe. | 35 showElement(document.getElementById(id), visible); |
52 var url_line = xhr.responseText.match('Url=.*'); | |
53 if (url_line) { | |
54 url = url_line[0].substr(4); | |
55 var error_frame = document.getElementById('xmpp_error'); | |
56 error_frame.src = url; | |
57 error_frame.style.display = 'block'; | |
58 } | |
59 | |
60 var log_msg = 'Client Login failed. Status: ' + xhr.status + | |
61 ' body: ' + xhr.responseText; | |
62 console.log(log_msg); | |
63 var last_error = document.getElementById('xmpp_last_error'); | |
64 last_error.innerText = log_msg; | |
65 last_error.style.display = 'inline'; | |
66 } | 36 } |
67 | 37 |
68 function resetXmppErrors_() { | 38 // This code moved into this subroutine (instead of being inlined in |
69 document.getElementById('xmpp_captcha').style.display = 'none'; | 39 // updateAuthStatus_() because of bug in V8. |
70 document.getElementById('xmpp_error').style.display = 'none'; | 40 // http://code.google.com/p/v8/issues/detail?id=1423 |
71 document.getElementById('xmpp_last_error').style.display = 'none'; | 41 function updateControls_(disable) { |
| 42 var authStatusControls = |
| 43 document.getElementsByClassName('auth-status-control'); |
| 44 for (var i = 0; i < authStatusControls.length; ++i) { |
| 45 authStatusControls[i].disabled = disable; |
| 46 } |
72 } | 47 } |
73 | 48 |
74 function displayCaptcha_(form, url, token) { | 49 function updateAuthStatus_() { |
75 form['xmpp_captcha_token'].value = token; | 50 var oauthValid = remoting.oauth2.isAuthenticated(); |
76 document.getElementById('xmpp_captcha_img').src = url; | 51 if (!oauthValid) { |
77 document.getElementById('xmpp_captcha').style.display = 'inline'; | 52 document.getElementById('oauth2-code').value = ""; |
78 } | 53 } |
| 54 showElementById('oauth2-submit-button', false); |
| 55 showElementById('oauth2-code', !oauthValid); |
| 56 showElementById('oauth2-code-button', !oauthValid); |
| 57 showElementById('oauth2-clear-button', oauthValid); |
79 | 58 |
80 function readAndClearCaptcha_(form) { | 59 var loginName = remoting.getItem(remoting.XMPP_LOGIN_NAME); |
81 var captcha_token = form['xmpp_captcha_token'].value; | 60 if (loginName) { |
82 form['xmpp_captcha_token'].value = ''; | 61 document.getElementById('current-email').innerText = loginName; |
83 resetXmppErrors_(); | 62 } |
84 return [captcha_token, form['xmpp_captcha_result'].value]; | 63 showElementById('current-email', loginName); |
85 } | 64 showElementById('change-email-button', loginName); |
| 65 showElementById('new-email', !loginName); |
| 66 showElementById('email-submit-button', !loginName); |
86 | 67 |
87 function initAuthPanel_() { | 68 var disableControls = !(loginName && oauthValid); |
88 updateAuthStatus_(); | 69 var authPanel = document.getElementById('auth-panel'); |
89 resetXmppErrors_(); | 70 if (disableControls) { |
| 71 authPanel.style.backgroundColor = 'rgba(204, 0, 0, 0.15)'; |
| 72 } else { |
| 73 authPanel.style.backgroundColor = 'rgba(0, 204, 102, 0.15)'; |
| 74 } |
| 75 updateControls_(disableControls); |
90 } | 76 } |
91 | 77 |
92 function initBackgroundFuncs_() { | 78 function initBackgroundFuncs_() { |
93 remoting.getItem = chrome.extension.getBackgroundPage().getItem; | 79 remoting.getItem = chrome.extension.getBackgroundPage().getItem; |
94 remoting.setItem = chrome.extension.getBackgroundPage().setItem; | 80 remoting.setItem = chrome.extension.getBackgroundPage().setItem; |
95 remoting.removeItem = chrome.extension.getBackgroundPage().removeItem; | 81 remoting.removeItem = chrome.extension.getBackgroundPage().removeItem; |
96 remoting.oauth2 = new OAuth2(); | 82 remoting.oauth2 = new OAuth2(); |
97 } | 83 } |
98 | 84 |
99 function authorizeXmpp(form) { | 85 function setEmail(value) { |
100 var xhr = new XMLHttpRequest(); | 86 remoting.setItem(remoting.XMPP_LOGIN_NAME, value); |
101 var captcha_result = readAndClearCaptcha_(form); | |
102 | |
103 xhr.onreadystatechange = function() { | |
104 if (xhr.readyState != 4) { | |
105 return; | |
106 } | |
107 | |
108 if (xhr.status == 200) { | |
109 var auth_line = xhr.responseText.match('Auth=.*'); | |
110 if (!auth_line) { | |
111 clientLoginError_(xhr); | |
112 return; | |
113 } | |
114 remoting.setItem(XMPP_TOKEN_NAME, auth_line[0].substr(5)); | |
115 remoting.setItem(XMPP_LOGIN_NAME, form['xmpp_username'].value); | |
116 updateAuthStatus_(); | |
117 } else if (xhr.status == 403) { | |
118 var error_line = xhr.responseText.match('Error=.*'); | |
119 if (error_line && error_line == 'Error=CaptchaRequired') { | |
120 var captcha_token = xhr.responseText.match('CaptchaToken=.*'); | |
121 var captcha_url = xhr.responseText.match('CaptchaUrl=.*'); | |
122 displayCaptcha_( | |
123 form, | |
124 'https://www.google.com/accounts/' + captcha_url[0].substr(11), | |
125 captcha_token[0].substr(13)); | |
126 return; | |
127 } | |
128 clientLoginError_(xhr); | |
129 } else { | |
130 clientLoginError_(xhr); | |
131 } | |
132 }; | |
133 xhr.open('POST', 'https://www.google.com/accounts/ClientLogin', true); | |
134 xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); | |
135 var post_data = | |
136 'accountType=HOSTED_OR_GOOGLE' + | |
137 '&service=chromiumsync' + | |
138 '&source=remoting-webapp' + | |
139 '&Email=' + encodeURIComponent(form['xmpp_username'].value) + | |
140 '&Passwd=' + encodeURIComponent(form['xmpp_password'].value); | |
141 | |
142 if (captcha_result[0]) { | |
143 post_data += '&logintoken=' + encodeURIComponent(captcha_result[0]) + | |
144 '&logincaptcha=' + encodeURIComponent(captcha_result[1]); | |
145 } | |
146 xhr.send(post_data); | |
147 } | |
148 | |
149 function setEmail(form) { | |
150 remoting.setItem(XMPP_LOGIN_NAME, form['new_email'].value); | |
151 updateAuthStatus_(); | 87 updateAuthStatus_(); |
152 } | 88 } |
153 | 89 |
154 function authorizeOAuth2(code) { | 90 function exchangedCodeForToken_() { |
155 remoting.oauth2.exchangeCodeForToken(code, updateAuthStatus_); | 91 if (!remoting.oauth2.isAuthenticated()) { |
| 92 alert("Your OAuth2 token was invalid. Please try again."); |
| 93 } |
| 94 updateAuthStatus_(); |
| 95 } |
| 96 |
| 97 function authorizeOAuth2() { |
| 98 remoting.oauth2.exchangeCodeForToken( |
| 99 document.getElementById('oauth2-code').value, exchangedCodeForToken_); |
156 } | 100 } |
157 | 101 |
158 function clearOAuth2() { | 102 function clearOAuth2() { |
159 remoting.oauth2.clear(); | 103 remoting.oauth2.clear(); |
160 updateAuthStatus_(); | 104 updateAuthStatus_(); |
161 } | 105 } |
162 | 106 |
163 function clearXmpp() { | 107 function handleOAuth2CodeChange() { |
164 remoting.removeItem(XMPP_TOKEN_NAME); | 108 var hasCode = document.getElementById('oauth2-code').value.length > 0; |
165 updateAuthStatus_(); | 109 |
| 110 showElementById('oauth2-submit-button', hasCode); |
| 111 showElementById('oauth2-code-button', !hasCode); |
166 } | 112 } |
167 | 113 |
168 // Show the div with id |mode| and hide those with other ids in |modes|. | 114 // Show the div with id |mode| and hide those with other ids in |modes|. |
169 function setMode_(mode, modes) { | 115 function setMode_(mode, modes) { |
170 for (var i = 0; i < modes.length; ++i) { | 116 for (var i = 0; i < modes.length; ++i) { |
171 var div = document.getElementById(modes[i]); | 117 showElement(modes[i], mode == modes[i].id); |
172 if (mode == modes[i]) { | |
173 div.style.display = 'block'; | |
174 } else { | |
175 div.style.display = 'none'; | |
176 } | |
177 } | 118 } |
178 } | 119 } |
179 | 120 |
180 function init() { | 121 function init_() { |
181 initBackgroundFuncs_(); | 122 initBackgroundFuncs_(); |
182 initAuthPanel_(); | 123 updateAuthStatus_(); |
183 setHostMode('unshared'); | 124 setHostMode('unshared'); |
184 setClientMode('unconnected'); | 125 setClientMode('unconnected'); |
185 setGlobalMode(remoting.getItem('startup-mode', 'host')); | 126 setGlobalMode(remoting.getItem('startup-mode', remoting.HOST_MODE)); |
186 } | 127 } |
187 | 128 |
188 function setGlobalMode(mode) { | 129 function setGlobalMode(mode) { |
189 setMode_(mode, ['host', 'client']); | 130 var elementsToShow = []; |
| 131 var elementsToHide = []; |
| 132 var hostElements = document.getElementsByClassName('host-element'); |
| 133 var clientElements = document.getElementsByClassName('client-element'); |
| 134 if (mode == remoting.HOST_MODE) { |
| 135 elementsToShow = hostElements; |
| 136 elementsToHide = clientElements; |
| 137 } else { |
| 138 elementsToShow = clientElements; |
| 139 elementsToHide = hostElements; |
| 140 } |
| 141 for (var i = 0; i < elementsToShow.length; ++i) { |
| 142 showElement(elementsToShow[i], true); |
| 143 } |
| 144 for (var i = 0; i < elementsToHide.length; ++i) { |
| 145 showElement(elementsToHide[i], false); |
| 146 } |
190 } | 147 } |
191 | 148 |
192 function setGlobalModePersistent(mode) { | 149 function setGlobalModePersistent(mode) { |
193 setGlobalMode(mode); | 150 setGlobalMode(mode); |
194 remoting.setItem('startup-mode', mode); | 151 remoting.setItem('startup-mode', mode); |
195 } | 152 } |
196 | 153 |
197 function setHostMode(mode) { | 154 function setHostMode(mode) { |
198 setMode_(mode, ['unshared', | 155 var section = document.getElementById('host-section'); |
199 'preparing_to_share', | 156 var modes = section.getElementsByClassName('mode'); |
200 'ready_to_share', | 157 setMode_(mode, modes); |
201 'shared']); | |
202 } | 158 } |
203 | 159 |
204 function setClientMode(mode) { | 160 function setClientMode(mode) { |
205 setMode_(mode, ['unconnected', 'connecting', 'connect_failed']); | 161 var section = document.getElementById('client-section'); |
| 162 var modes = section.getElementsByClassName('mode'); |
| 163 setMode_(mode, modes); |
206 } | 164 } |
207 | 165 |
208 function tryShare() { | 166 function tryShare() { |
209 if (remoting.oauth2.needsNewAccessToken()) { | 167 if (remoting.oauth2.needsNewAccessToken()) { |
210 remoting.oauth2.refreshAccessToken(function() { | 168 remoting.oauth2.refreshAccessToken(function() { |
211 if (remoting.oauth2.needsNewAccessToken()) { | 169 if (remoting.oauth2.needsNewAccessToken()) { |
212 // If we still need it, we're going to infinite loop. | 170 // If we still need it, we're going to infinite loop. |
213 throw "Unable to get access token"; | 171 throw "Unable to get access token"; |
214 } | 172 } |
215 tryShare(); | 173 tryShare(); |
216 }); | 174 }); |
217 return; | 175 return; |
218 } | 176 } |
219 | 177 |
220 var div = document.getElementById('plugin_wrapper'); | 178 var div = document.getElementById('plugin-wrapper'); |
221 var plugin = document.createElement('embed'); | 179 var plugin = document.createElement('embed'); |
222 plugin.setAttribute('type', 'HOST_PLUGIN_MIMETYPE'); | 180 plugin.setAttribute('type', remoting.PLUGIN_MIMETYPE); |
223 plugin.setAttribute('hidden', 'true'); | 181 plugin.setAttribute('hidden', 'true'); |
224 plugin.setAttribute('id', HOST_PLUGIN_ID); | 182 plugin.setAttribute('id', remoting.HOST_PLUGIN_ID); |
225 div.appendChild(plugin); | 183 div.appendChild(plugin); |
226 plugin.onStateChanged = onStateChanged_; | 184 plugin.onStateChanged = onStateChanged_; |
227 plugin.connect(remoting.getItem(XMPP_LOGIN_NAME), | 185 plugin.connect(remoting.getItem(remoting.XMPP_LOGIN_NAME), |
228 'oauth2:' + remoting.oauth2.getAccessToken()); | 186 'oauth2:' + remoting.oauth2.getAccessToken()); |
229 } | 187 } |
230 | 188 |
231 function onStateChanged_() { | 189 function onStateChanged_() { |
232 var plugin = document.getElementById(HOST_PLUGIN_ID); | 190 var plugin = document.getElementById(remoting.HOST_PLUGIN_ID); |
233 var state = plugin.state; | 191 var state = plugin.state; |
234 if (state == plugin.REQUESTED_ACCESS_CODE) { | 192 if (state == plugin.REQUESTED_ACCESS_CODE) { |
235 setHostMode('preparing_to_share'); | 193 setHostMode('preparing-to-share'); |
236 } else if (state == plugin.RECEIVED_ACCESS_CODE) { | 194 } else if (state == plugin.RECEIVED_ACCESS_CODE) { |
237 var access_code = plugin.accessCode; | 195 var accessCode = plugin.accessCode; |
238 var access_code_display = document.getElementById('access_code_display'); | 196 var accessCodeDisplay = document.getElementById('access-code-display'); |
239 access_code_display.innerText = access_code; | 197 accessCodeDisplay.innerText = accessCode; |
240 setHostMode('ready_to_share'); | 198 setHostMode('ready-to-share'); |
241 } else if (state == plugin.CONNECTED) { | 199 } else if (state == plugin.CONNECTED) { |
242 setHostMode('shared'); | 200 setHostMode('shared'); |
243 } else if (state == plugin.DISCONNECTED) { | 201 } else if (state == plugin.DISCONNECTED) { |
244 setHostMode('unshared'); | 202 setHostMode('unshared'); |
245 plugin.parentNode.removeChild(plugin); | 203 plugin.parentNode.removeChild(plugin); |
246 } else { | 204 } else { |
247 window.alert('Unknown state -> ' + state); | 205 window.alert('Unknown state -> ' + state); |
248 } | 206 } |
249 } | 207 } |
250 | 208 |
251 function cancelShare() { | 209 function cancelShare() { |
252 var plugin = document.getElementById(HOST_PLUGIN_ID); | 210 var plugin = document.getElementById(remoting.HOST_PLUGIN_ID); |
253 plugin.disconnect(); | 211 plugin.disconnect(); |
254 } | 212 } |
255 | 213 |
256 function startSession_() { | 214 function startSession_() { |
257 remoting.username = remoting.getItem(XMPP_LOGIN_NAME); | 215 remoting.username = remoting.getItem(remoting.XMPP_LOGIN_NAME); |
258 document.location = 'remoting_session.html'; | 216 document.location = 'remoting_session.html'; |
259 } | 217 } |
260 | 218 |
261 function showConnectError_(responseCode, responseString) { | 219 function showConnectError_(responseCode, responseString) { |
262 var invalid = document.getElementById('invalid_access_code'); | 220 var invalid = document.getElementById('invalid-access-code'); |
263 var other = document.getElementById('other_connect_error'); | 221 var other = document.getElementById('other-connect-error'); |
264 if (responseCode == 404) { | 222 if (responseCode == 404) { |
265 invalid.style.display = 'block'; | 223 invalid.style.display = 'block'; |
266 other.style.display = 'none'; | 224 other.style.display = 'none'; |
267 } else { | 225 } else { |
268 invalid.style.display = 'none'; | 226 invalid.style.display = 'none'; |
269 other.style.display = 'block'; | 227 other.style.display = 'block'; |
270 var responseNode = document.getElementById('server_response'); | 228 var responseNode = document.getElementById('server-response'); |
271 responseNode.innerText = responseString + ' (' + responseCode + ')'; | 229 responseNode.innerText = responseString + ' (' + responseCode + ')'; |
272 } | 230 } |
273 remoting.accessCode = ''; | 231 remoting.accessCode = ''; |
274 setClientMode('connect_failed'); | 232 setClientMode('connect-failed'); |
275 } | 233 } |
276 | 234 |
277 function parseServerResponse_(xhr) { | 235 function parseServerResponse_(xhr) { |
278 if (xhr.status == 200) { | 236 if (xhr.status == 200) { |
279 var host = JSON.parse(xhr.responseText); | 237 var host = JSON.parse(xhr.responseText); |
280 if (host.data && host.data.jabberId) { | 238 if (host.data && host.data.jabberId) { |
281 remoting.hostjid = host.data.jabberId; | 239 remoting.hostjid = host.data.jabberId; |
282 startSession_(); | 240 startSession_(); |
283 return; | 241 return; |
284 } | 242 } |
285 } | 243 } |
286 showConnectError_(xhr.status, xhr.responseText); | 244 showConnectError_(xhr.status, xhr.responseText); |
287 } | 245 } |
288 | 246 |
289 function normalizeAccessCode(accessCode) { | 247 function normalizeAccessCode(accessCode) { |
290 // Trim whitespace from beginning and the end. | 248 // Trim whitespace from beginning and the end. |
291 // TODO(sergeyu): Do we need to do any other normalization here? | 249 // TODO(sergeyu): Do we need to do any other normalization here? |
292 return accessCode.replace(/^\s+|\s+$/, ''); | 250 return accessCode.replace(/^\s+|\s+$/, ''); |
293 } | 251 } |
294 | 252 |
295 function resolveSupportId(support_id) { | 253 function resolveSupportId(supportId) { |
296 var xhr = new XMLHttpRequest(); | 254 var xhr = new XMLHttpRequest(); |
297 xhr.onreadystatechange = function() { | 255 xhr.onreadystatechange = function() { |
298 if (xhr.readyState != 4) { | 256 if (xhr.readyState != 4) { |
299 return; | 257 return; |
300 } | 258 } |
301 parseServerResponse_(xhr); | 259 parseServerResponse_(xhr); |
302 }; | 260 }; |
303 | 261 |
304 xhr.open('GET', | 262 xhr.open('GET', |
305 'https://www.googleapis.com/chromoting/v1/support-hosts/' + | 263 'https://www.googleapis.com/chromoting/v1/support-hosts/' + |
306 encodeURIComponent(support_id), | 264 encodeURIComponent(supportId), |
307 true); | 265 true); |
308 xhr.setRequestHeader('Authorization', | 266 xhr.setRequestHeader('Authorization', |
309 'OAuth ' + remoting.oauth2.getAccessToken()); | 267 'OAuth ' + remoting.oauth2.getAccessToken()); |
310 xhr.send(null); | 268 xhr.send(null); |
311 } | 269 } |
312 | 270 |
313 function tryConnect(accessCode) { | 271 function tryConnect() { |
314 if (remoting.oauth2.needsNewAccessToken()) { | 272 if (remoting.oauth2.needsNewAccessToken()) { |
315 remoting.oauth2.refreshAccessToken(function() { | 273 remoting.oauth2.refreshAccessToken(function() { |
316 if (remoting.oauth2.needsNewAccessToken()) { | 274 if (remoting.oauth2.needsNewAccessToken()) { |
317 // If we still need it, we're going to infinite loop. | 275 // If we still need it, we're going to infinite loop. |
318 throw "Unable to get access token"; | 276 throw "Unable to get access token"; |
319 } | 277 } |
320 tryConnect(accessCode); | 278 tryConnect(); |
321 }); | 279 }); |
322 return; | 280 return; |
323 } | 281 } |
324 | 282 var accessCode = document.getElementById('access-code-entry').value; |
325 remoting.accessCode = accessCode; | 283 remoting.accessCode = accessCode; |
326 // TODO(jamiewalch): Since the mapping from (SupportId, HostSecret) to | 284 // TODO(jamiewalch): Since the mapping from (SupportId, HostSecret) to |
327 // AccessCode is not yet defined, assume it's hyphen-separated for now. | 285 // AccessCode is not yet defined, assume it's hyphen-separated for now. |
328 var parts = remoting.accessCode.split('-'); | 286 var parts = remoting.accessCode.split('-'); |
329 if (parts.length != 2) { | 287 if (parts.length != 2) { |
330 showConnectError_(404); | 288 showConnectError_(404); |
331 } else { | 289 } else { |
332 setClientMode('connecting'); | 290 setClientMode('connecting'); |
333 resolveSupportId(parts[0]); | 291 resolveSupportId(parts[0]); |
334 } | 292 } |
335 } | 293 } |
336 | 294 |
337 function cancelConnect() { | 295 function cancelConnect() { |
338 remoting.accessCode = ''; | 296 remoting.accessCode = ''; |
339 setClientMode('unconnected'); | 297 setClientMode('unconnected'); |
340 } | 298 } |
OLD | NEW |