| Index: remoting/webapp/me2mom/client_screen.js
|
| diff --git a/remoting/webapp/me2mom/client_screen.js b/remoting/webapp/me2mom/client_screen.js
|
| deleted file mode 100644
|
| index c89355d235d50af0215121cdfc0b8b6c02f31dce..0000000000000000000000000000000000000000
|
| --- a/remoting/webapp/me2mom/client_screen.js
|
| +++ /dev/null
|
| @@ -1,469 +0,0 @@
|
| -// Copyright (c) 2012 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
|
| - * Functions related to the 'client screen' for Chromoting.
|
| - */
|
| -
|
| -'use strict';
|
| -
|
| -/** @suppress {duplicate} */
|
| -var remoting = remoting || {};
|
| -
|
| -/**
|
| - * @type {boolean} Whether or not the plugin should scale itself.
|
| - */
|
| -remoting.scaleToFit = false;
|
| -
|
| -/**
|
| - * @type {remoting.ClientSession} The client session object, set once the
|
| - * access code has been successfully verified.
|
| - */
|
| -remoting.clientSession = null;
|
| -
|
| -/**
|
| - * @type {string} The normalized access code.
|
| - */
|
| -remoting.accessCode = '';
|
| -
|
| -/**
|
| - * @type {string} The host's JID, returned by the server.
|
| - */
|
| -remoting.hostJid = '';
|
| -
|
| -/**
|
| - * @type {string} For Me2Me connections, the id of the current host.
|
| - */
|
| -remoting.hostId = '';
|
| -
|
| -/**
|
| - * @type {boolean} For Me2Me connections. Set to true if connection
|
| - * must be retried on failure.
|
| - */
|
| -remoting.retryIfOffline = false;
|
| -
|
| -/**
|
| - * @type {string} The host's public key, returned by the server.
|
| - */
|
| -remoting.hostPublicKey = '';
|
| -
|
| -/**
|
| - * @type {XMLHttpRequest} The XHR object corresponding to the current
|
| - * support-hosts request, if there is one outstanding.
|
| - * @private
|
| - */
|
| -remoting.supportHostsXhr_ = null;
|
| -
|
| -/**
|
| - * @enum {string}
|
| - */
|
| -remoting.ConnectionType = {
|
| - It2Me: 'It2Me',
|
| - Me2Me: 'Me2Me'
|
| -};
|
| -
|
| -/**
|
| - * @type {remoting.ConnectionType?}
|
| - */
|
| -remoting.currentConnectionType = null;
|
| -
|
| -/**
|
| - * Entry point for the 'connect' functionality. This function defers to the
|
| - * WCS loader to call it back with an access token.
|
| - */
|
| -remoting.connectIt2Me = function() {
|
| - remoting.currentConnectionType = remoting.ConnectionType.It2Me;
|
| - document.getElementById('cancel-button').disabled = false;
|
| - remoting.WcsLoader.load(connectIt2MeWithAccessToken_);
|
| -};
|
| -
|
| -/**
|
| - * Cancel an incomplete connect operation.
|
| - *
|
| - * @return {void} Nothing.
|
| - */
|
| -remoting.cancelConnect = function() {
|
| - if (remoting.supportHostsXhr_) {
|
| - remoting.supportHostsXhr_.abort();
|
| - remoting.supportHostsXhr_ = null;
|
| - }
|
| - if (remoting.clientSession) {
|
| - remoting.clientSession.removePlugin();
|
| - remoting.clientSession = null;
|
| - }
|
| - remoting.setMode(remoting.AppMode.HOME);
|
| -};
|
| -
|
| -/**
|
| - * Enable or disable scale-to-fit.
|
| - *
|
| - * @param {Event} event The click event. The style of the target is updated to
|
| - * reflect the new scaling state.
|
| - * @return {void} Nothing.
|
| - */
|
| -remoting.toggleScaleToFit = function(event) {
|
| - var button = /** @type Element */(event.target);
|
| - remoting.scaleToFit = !remoting.scaleToFit;
|
| - if (remoting.scaleToFit) {
|
| - addClass(button, 'toggle-button-active');
|
| - } else {
|
| - removeClass(button, 'toggle-button-active');
|
| - }
|
| - remoting.clientSession.updateDimensions();
|
| -};
|
| -
|
| -/**
|
| - * Update the remoting client layout in response to a resize event.
|
| - *
|
| - * @return {void} Nothing.
|
| - */
|
| -remoting.onResize = function() {
|
| - if (remoting.clientSession)
|
| - remoting.clientSession.onResize();
|
| -};
|
| -
|
| -/**
|
| - * Disconnect the remoting client.
|
| - *
|
| - * @return {void} Nothing.
|
| - */
|
| -remoting.disconnect = function() {
|
| - if (remoting.clientSession) {
|
| - remoting.clientSession.disconnect();
|
| - remoting.clientSession = null;
|
| - remoting.debug.log('Disconnected.');
|
| - if (remoting.currentConnectionType == remoting.ConnectionType.It2Me) {
|
| - remoting.setMode(remoting.AppMode.CLIENT_SESSION_FINISHED_IT2ME);
|
| - } else {
|
| - remoting.setMode(remoting.AppMode.CLIENT_SESSION_FINISHED_ME2ME);
|
| - }
|
| - }
|
| -};
|
| -
|
| -/**
|
| - * If WCS was successfully loaded, proceed with the connection, otherwise
|
| - * report an error.
|
| - *
|
| - * @param {string?} token The OAuth2 access token, or null if an error occurred.
|
| - * @return {void} Nothing.
|
| - */
|
| -function connectIt2MeWithAccessToken_(token) {
|
| - if (token) {
|
| - var accessCode = document.getElementById('access-code-entry').value;
|
| - remoting.accessCode = normalizeAccessCode_(accessCode);
|
| - // At present, only 12-digit access codes are supported, of which the first
|
| - // 7 characters are the supportId.
|
| - var kSupportIdLen = 7;
|
| - var kHostSecretLen = 5;
|
| - var kAccessCodeLen = kSupportIdLen + kHostSecretLen;
|
| - if (remoting.accessCode.length != kAccessCodeLen) {
|
| - remoting.debug.log('Bad access code length');
|
| - showConnectError_(remoting.Error.INVALID_ACCESS_CODE);
|
| - } else {
|
| - var supportId = remoting.accessCode.substring(0, kSupportIdLen);
|
| - remoting.setMode(remoting.AppMode.CLIENT_CONNECTING);
|
| - resolveSupportId(supportId);
|
| - }
|
| - } else {
|
| - showConnectError_(remoting.Error.AUTHENTICATION_FAILED);
|
| - }
|
| -}
|
| -
|
| -/**
|
| - * Callback function called when the state of the client plugin changes. The
|
| - * current state is available via the |state| member variable.
|
| - *
|
| - * @param {number} oldState The previous state of the plugin.
|
| - * @param {number} newState The current state of the plugin.
|
| - */
|
| -// TODO(jamiewalch): Make this pass both the current and old states to avoid
|
| -// race conditions.
|
| -function onClientStateChange_(oldState, newState) {
|
| - if (!remoting.clientSession) {
|
| - // If the connection has been cancelled, then we no longer have a reference
|
| - // to the session object and should ignore any state changes.
|
| - return;
|
| - }
|
| - if (newState == remoting.ClientSession.State.CREATED) {
|
| - remoting.debug.log('Created plugin');
|
| -
|
| - } else if (newState == remoting.ClientSession.State.BAD_PLUGIN_VERSION) {
|
| - showConnectError_(remoting.Error.BAD_PLUGIN_VERSION);
|
| -
|
| - } else if (newState == remoting.ClientSession.State.CONNECTING) {
|
| - remoting.debug.log('Connecting as ' + remoting.oauth2.getCachedEmail());
|
| -
|
| - } else if (newState == remoting.ClientSession.State.INITIALIZING) {
|
| - remoting.debug.log('Initializing connection');
|
| -
|
| - } else if (newState == remoting.ClientSession.State.CONNECTED) {
|
| - if (remoting.clientSession) {
|
| - remoting.setMode(remoting.AppMode.IN_SESSION);
|
| - remoting.toolbar.center();
|
| - remoting.toolbar.preview();
|
| - updateStatistics_();
|
| - }
|
| -
|
| - } else if (newState == remoting.ClientSession.State.CLOSED) {
|
| - if (oldState == remoting.ClientSession.State.CONNECTED) {
|
| - remoting.clientSession.removePlugin();
|
| - remoting.clientSession = null;
|
| - remoting.debug.log('Connection closed by host');
|
| - if (remoting.currentConnectionType == remoting.ConnectionType.It2Me) {
|
| - remoting.setMode(remoting.AppMode.CLIENT_SESSION_FINISHED_IT2ME);
|
| - } else {
|
| - remoting.setMode(remoting.AppMode.CLIENT_SESSION_FINISHED_ME2ME);
|
| - }
|
| - } else {
|
| - // The transition from CONNECTING to CLOSED state may happen
|
| - // only with older client plugins. Current version should go the
|
| - // FAILED state when connection fails.
|
| - showConnectError_(remoting.Error.INVALID_ACCESS_CODE);
|
| - }
|
| -
|
| - } else if (newState == remoting.ClientSession.State.CONNECTION_FAILED) {
|
| - remoting.debug.log('Client plugin reported connection failed: ' +
|
| - remoting.clientSession.error);
|
| - if (remoting.clientSession.error ==
|
| - remoting.ClientSession.ConnectionError.HOST_IS_OFFLINE) {
|
| - retryConnectOrReportOffline_();
|
| - } else if (remoting.clientSession.error ==
|
| - remoting.ClientSession.ConnectionError.SESSION_REJECTED) {
|
| - showConnectError_(remoting.Error.INVALID_ACCESS_CODE);
|
| - } else if (remoting.clientSession.error ==
|
| - remoting.ClientSession.ConnectionError.INCOMPATIBLE_PROTOCOL) {
|
| - showConnectError_(remoting.Error.INCOMPATIBLE_PROTOCOL);
|
| - } else if (remoting.clientSession.error ==
|
| - remoting.ClientSession.ConnectionError.NETWORK_FAILURE) {
|
| - showConnectError_(remoting.Error.GENERIC);
|
| - } else {
|
| - showConnectError_(remoting.Error.GENERIC);
|
| - }
|
| -
|
| - } else {
|
| - remoting.debug.log('Unexpected client plugin state: ' + newState);
|
| - // This should only happen if the web-app and client plugin get out of
|
| - // sync, and even then the version check should allow compatibility.
|
| - showConnectError_(remoting.Error.MISSING_PLUGIN);
|
| - }
|
| -}
|
| -
|
| -/**
|
| - * If we have a hostId to retry, try refreshing it and connecting again. If not,
|
| - * then show the 'host offline' error message.
|
| - *
|
| - * @return {void} Nothing.
|
| - */
|
| -function retryConnectOrReportOffline_() {
|
| - if (remoting.hostId && remoting.retryIfOffline) {
|
| - console.log('Connection failed. Retrying.');
|
| - /** @param {boolean} success True if the refresh was successful. */
|
| - var onDone = function(success) {
|
| - if (success) {
|
| - remoting.connectMe2Me(remoting.hostId, false);
|
| - } else {
|
| - showConnectError_(remoting.Error.HOST_IS_OFFLINE);
|
| - }
|
| - };
|
| - remoting.hostList.refresh(onDone);
|
| - } else {
|
| - console.log('Connection failed. Not retrying.');
|
| - showConnectError_(remoting.Error.HOST_IS_OFFLINE);
|
| - }
|
| -}
|
| -
|
| -/**
|
| - * Create the client session object and initiate the connection.
|
| - *
|
| - * @return {void} Nothing.
|
| - */
|
| -function startSession_() {
|
| - remoting.debug.log('Starting session...');
|
| - var accessCode = document.getElementById('access-code-entry');
|
| - accessCode.value = ''; // The code has been validated and won't work again.
|
| - remoting.clientSession =
|
| - new remoting.ClientSession(
|
| - remoting.hostJid, remoting.hostPublicKey,
|
| - remoting.accessCode,
|
| - /** @type {string} */ (remoting.oauth2.getCachedEmail()),
|
| - onClientStateChange_);
|
| - /** @param {string} token The auth token. */
|
| - var createPluginAndConnect = function(token) {
|
| - remoting.clientSession.createPluginAndConnect(
|
| - document.getElementById('session-mode'),
|
| - token);
|
| - };
|
| - remoting.oauth2.callWithToken(createPluginAndConnect);
|
| -}
|
| -
|
| -/**
|
| - * Show a client-side error message.
|
| - *
|
| - * @param {remoting.Error} errorTag The error to be localized and
|
| - * displayed.
|
| - * @return {void} Nothing.
|
| - */
|
| -function showConnectError_(errorTag) {
|
| - remoting.debug.log('Connection failed: ' + errorTag);
|
| - var errorDiv = document.getElementById('connect-error-message');
|
| - l10n.localizeElementFromTag(errorDiv, /** @type {string} */ (errorTag));
|
| - remoting.accessCode = '';
|
| - if (remoting.clientSession) {
|
| - remoting.clientSession.disconnect();
|
| - remoting.clientSession = null;
|
| - }
|
| - if (remoting.currentConnectionType == remoting.ConnectionType.It2Me) {
|
| - remoting.setMode(remoting.AppMode.CLIENT_CONNECT_FAILED_IT2ME);
|
| - } else {
|
| - remoting.setMode(remoting.AppMode.CLIENT_CONNECT_FAILED_ME2ME);
|
| - }
|
| -}
|
| -
|
| -/**
|
| - * Parse the response from the server to a request to resolve a support id.
|
| - *
|
| - * @param {XMLHttpRequest} xhr The XMLHttpRequest object.
|
| - * @return {void} Nothing.
|
| - */
|
| -function parseServerResponse_(xhr) {
|
| - remoting.supportHostsXhr_ = null;
|
| - remoting.debug.log('parseServerResponse: status = ' + xhr.status);
|
| - if (xhr.status == 200) {
|
| - var host = /** @type {{data: {jabberId: string, publicKey: string}}} */
|
| - JSON.parse(xhr.responseText);
|
| - if (host.data && host.data.jabberId && host.data.publicKey) {
|
| - remoting.hostJid = host.data.jabberId;
|
| - remoting.hostPublicKey = host.data.publicKey;
|
| - var split = remoting.hostJid.split('/');
|
| - document.getElementById('connected-to').innerText = split[0];
|
| - startSession_();
|
| - return;
|
| - }
|
| - }
|
| - var errorMsg = remoting.Error.GENERIC;
|
| - if (xhr.status == 404) {
|
| - errorMsg = remoting.Error.INVALID_ACCESS_CODE;
|
| - } else if (xhr.status == 0) {
|
| - errorMsg = remoting.Error.NO_RESPONSE;
|
| - } else if (xhr.status == 503) {
|
| - errorMsg = remoting.Error.SERVICE_UNAVAILABLE;
|
| - } else {
|
| - remoting.debug.log('The server responded: ' + xhr.responseText);
|
| - }
|
| - showConnectError_(errorMsg);
|
| -}
|
| -
|
| -/**
|
| - * Normalize the access code entered by the user.
|
| - *
|
| - * @param {string} accessCode The access code, as entered by the user.
|
| - * @return {string} The normalized form of the code (whitespace removed).
|
| - */
|
| -function normalizeAccessCode_(accessCode) {
|
| - // Trim whitespace.
|
| - // TODO(sergeyu): Do we need to do any other normalization here?
|
| - return accessCode.replace(/\s/g, '');
|
| -}
|
| -
|
| -/**
|
| - * Initiate a request to the server to resolve a support ID.
|
| - *
|
| - * @param {string} supportId The canonicalized support ID.
|
| - */
|
| -function resolveSupportId(supportId) {
|
| - var headers = {
|
| - 'Authorization': 'OAuth ' + remoting.oauth2.getAccessToken()
|
| - };
|
| -
|
| - remoting.supportHostsXhr_ = remoting.xhr.get(
|
| - 'https://www.googleapis.com/chromoting/v1/support-hosts/' +
|
| - encodeURIComponent(supportId),
|
| - parseServerResponse_,
|
| - '',
|
| - headers);
|
| -}
|
| -
|
| -/**
|
| - * Timer callback to update the statistics panel.
|
| - */
|
| -function updateStatistics_() {
|
| - if (!remoting.clientSession ||
|
| - remoting.clientSession.state != remoting.ClientSession.State.CONNECTED) {
|
| - return;
|
| - }
|
| - var stats = remoting.clientSession.stats();
|
| - remoting.debug.updateStatistics(stats);
|
| - remoting.clientSession.logStatistics(stats);
|
| - // Update the stats once per second.
|
| - window.setTimeout(updateStatistics_, 1000);
|
| -}
|
| -
|
| -
|
| -/**
|
| - * Shows PIN entry screen.
|
| - *
|
| - * @param {string} hostId The unique id of the host.
|
| - * @param {boolean} retryIfOffline If true and the host can't be contacted,
|
| - * refresh the host list and try again. This allows bookmarked hosts to
|
| - * work even if they reregister with Talk and get a different Jid.
|
| - * @return {void} Nothing.
|
| - */
|
| -remoting.connectMe2Me = function(hostId, retryIfOffline) {
|
| - remoting.currentConnectionType = remoting.ConnectionType.Me2Me;
|
| - remoting.hostId = hostId;
|
| - remoting.retryIfOffline = retryIfOffline;
|
| -
|
| - // TODO(jamiewalch): Reinstate the PIN screen once it's supported.
|
| - // remoting.setMode(remoting.AppMode.CLIENT_PIN_PROMPT);
|
| - remoting.connectMe2MeWithPin();
|
| -}
|
| -
|
| -/**
|
| - * Start a connection to the specified host, using the cached details
|
| - * and the PIN entered by the user.
|
| - *
|
| - * @return {void} Nothing.
|
| - */
|
| -remoting.connectMe2MeWithPin = function() {
|
| - remoting.debug.log('Connecting to host...');
|
| - remoting.setMode(remoting.AppMode.CLIENT_CONNECTING);
|
| -
|
| - var host = remoting.hostList.getHostForId(remoting.hostId);
|
| - if (!host) {
|
| - retryConnectOrReportOffline_();
|
| - return;
|
| - }
|
| - remoting.hostJid = host.jabberId;
|
| - remoting.hostPublicKey = host.publicKey;
|
| - document.getElementById('connected-to').innerText = host.hostName;
|
| - document.title = document.title + ': ' + host.hostName;
|
| -
|
| - remoting.WcsLoader.load(connectMe2MeWithAccessToken_);
|
| -};
|
| -
|
| -/**
|
| - * Continue making the connection to a host, once WCS has initialized.
|
| - *
|
| - * @param {string?} token The OAuth2 access token, or null if an error occurred.
|
| - * @return {void} Nothing.
|
| - */
|
| -function connectMe2MeWithAccessToken_(token) {
|
| - if (token) {
|
| - /** @type {string} */
|
| - var pin = document.getElementById('pin-entry').value;
|
| - document.getElementById('pin-entry').value = '';
|
| -
|
| - remoting.clientSession =
|
| - new remoting.ClientSession(
|
| - remoting.hostJid, remoting.hostPublicKey,
|
| - pin, /** @type {string} */ (remoting.oauth2.getCachedEmail()),
|
| - onClientStateChange_);
|
| - remoting.clientSession.createPluginAndConnect(
|
| - document.getElementById('session-mode'),
|
| - token);
|
| - } else {
|
| - showConnectError_(remoting.Error.AUTHENTICATION_FAILED);
|
| - }
|
| -}
|
|
|