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

Unified Diff: remoting/webapp/me2mom/client_screen.js

Issue 9148043: Rename webapp_it2me to remoting_webapp and move it from webapp/me2mom to webapp/ (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: add webapp_it2me back Created 8 years, 11 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/me2mom/choice.html ('k') | remoting/webapp/me2mom/client_session.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
- }
-}
« no previous file with comments | « remoting/webapp/me2mom/choice.html ('k') | remoting/webapp/me2mom/client_session.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698