Index: remoting/webapp/app_remoting/js/app_remoting_activity.js |
diff --git a/remoting/webapp/app_remoting/js/app_remoting_activity.js b/remoting/webapp/app_remoting/js/app_remoting_activity.js |
deleted file mode 100644 |
index aff04df9058ea59072c1ae8d8d02f68830bd4f9b..0000000000000000000000000000000000000000 |
--- a/remoting/webapp/app_remoting/js/app_remoting_activity.js |
+++ /dev/null |
@@ -1,274 +0,0 @@ |
-// Copyright 2015 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. |
- |
-/** @suppress {duplicate} */ |
-var remoting = remoting || {}; |
- |
-/** |
- * Type definition for the RunApplicationResponse returned by the API. |
- * @typedef {{ |
- * status: string, |
- * hostJid: string, |
- * authorizationCode: string, |
- * sharedSecret: string, |
- * host: { |
- * applicationId: string, |
- * hostId: string |
- * } |
- * }} |
- */ |
-remoting.AppHostResponse; |
- |
-(function() { |
- |
-'use strict'; |
- |
-/** |
- * @param {Array<string>} appCapabilities Array of application capabilities. |
- * @param {remoting.Application} app |
- * @param {remoting.WindowShape} windowShape |
- * @param {string} subscriptionToken |
- * @param {base.WindowMessageDispatcher} windowMessageDispatcher |
- * |
- * @constructor |
- * @implements {remoting.Activity} |
- */ |
-remoting.AppRemotingActivity = function(appCapabilities, app, windowShape, |
- subscriptionToken, |
- windowMessageDispatcher) { |
- /** @private */ |
- this.sessionFactory_ = new remoting.ClientSessionFactory( |
- document.querySelector('#client-container .client-plugin-container'), |
- appCapabilities); |
- |
- /** @private {remoting.ClientSession} */ |
- this.session_ = null; |
- |
- /** @private {base.Disposables} */ |
- this.connectedDisposables_ = null; |
- |
- /** @private */ |
- this.app_ = app; |
- |
- /** @private */ |
- this.windowShape_ = windowShape; |
- |
- /** @private */ |
- this.subscriptionToken_ = subscriptionToken; |
- |
- /** @private {base.WindowMessageDispatcher} */ |
- this.windowMessageDispatcher_ = windowMessageDispatcher; |
-}; |
- |
-remoting.AppRemotingActivity.prototype.dispose = function() { |
- this.cleanup_(); |
- remoting.LoadingWindow.close(); |
-}; |
- |
-remoting.AppRemotingActivity.prototype.start = function() { |
- remoting.LoadingWindow.show(); |
- var that = this; |
- return remoting.identity.getToken().then(function(/** string */ token) { |
- return that.getAppHostInfo_(token); |
- }).then(function(/** !remoting.Xhr.Response */ response) { |
- that.onAppHostResponse_(response); |
- }).catch(function(/** !remoting.Error */ error) { |
- that.onConnectionFailed(error); |
- }); |
-}; |
- |
-remoting.AppRemotingActivity.prototype.stop = function() { |
- if (this.session_) { |
- this.session_.disconnect(remoting.Error.none()); |
- } |
-}; |
- |
-/** @private */ |
-remoting.AppRemotingActivity.prototype.cleanup_ = function() { |
- base.dispose(this.connectedDisposables_); |
- this.connectedDisposables_ = null; |
- base.dispose(this.session_); |
- this.session_ = null; |
-}; |
- |
-/** |
- * @param {string} token |
- * @return {Promise<!remoting.Xhr.Response>} |
- * @private |
- */ |
-remoting.AppRemotingActivity.prototype.getAppHostInfo_ = function(token) { |
- var url = remoting.settings.APP_REMOTING_API_BASE_URL + '/applications/' + |
- this.app_.getApplicationId() + '/run'; |
- // TODO(kelvinp): Passes |this.subscriptionToken_| to the XHR. |
- return new remoting.AutoRetryXhr({ |
- method: 'POST', |
- url: url, |
- oauthToken: token |
- }).start(); |
-}; |
- |
-/** |
- * @param {!remoting.Xhr.Response} xhrResponse |
- * @private |
- */ |
-remoting.AppRemotingActivity.prototype.onAppHostResponse_ = |
- function(xhrResponse) { |
- if (xhrResponse.status == 200) { |
- var response = /** @type {remoting.AppHostResponse} */ |
- (base.jsonParseSafe(xhrResponse.getText())); |
- if (response && |
- response.status && |
- response.status == 'done' && |
- response.hostJid && |
- response.authorizationCode && |
- response.sharedSecret && |
- response.host && |
- response.host.hostId) { |
- var hostJid = response.hostJid; |
- var host = new remoting.Host(response.host.hostId); |
- host.jabberId = hostJid; |
- host.authorizationCode = response.authorizationCode; |
- host.sharedSecret = response.sharedSecret; |
- |
- remoting.setMode(remoting.AppMode.CLIENT_CONNECTING); |
- |
- /** |
- * @param {string} tokenUrl Token-issue URL received from the host. |
- * @param {string} hostPublicKey Host public key (DER and Base64 |
- * encoded). |
- * @param {string} scope OAuth scope to request the token for. |
- * @param {function(string, string):void} onThirdPartyTokenFetched |
- * Callback. |
- */ |
- var fetchThirdPartyToken = function( |
- tokenUrl, hostPublicKey, scope, onThirdPartyTokenFetched) { |
- // Use the authentication tokens returned by the app-remoting server. |
- onThirdPartyTokenFetched(host['authorizationCode'], |
- host['sharedSecret']); |
- }; |
- |
- var credentialsProvider = new remoting.CredentialsProvider( |
- {fetchThirdPartyToken: fetchThirdPartyToken}); |
- var that = this; |
- var logger = remoting.SessionLogger.createForClient(); |
- |
- this.sessionFactory_.createSession(this, logger).then( |
- function(/** remoting.ClientSession */ session) { |
- that.session_ = session; |
- logger.setLogEntryMode(remoting.ChromotingEvent.Mode.LGAPP); |
- session.connect(host, credentialsProvider); |
- }); |
- } else if (response && response.status == 'pending') { |
- this.onConnectionFailed(new remoting.Error( |
- remoting.Error.Tag.SERVICE_UNAVAILABLE)); |
- } |
- } else { |
- console.error('Invalid "runApplication" response from server.'); |
- // The orchestrator returns 403 if the user is not whitelisted to run the |
- // app, which gets translated to a generic error message, so pick something |
- // a bit more user-friendly. |
- var error = xhrResponse.status == 403 ? |
- new remoting.Error(remoting.Error.Tag.APP_NOT_AUTHORIZED) : |
- remoting.Error.fromHttpStatus(xhrResponse.status); |
- this.onConnectionFailed(error); |
- } |
-}; |
- |
-/** |
- * @param {remoting.ConnectionInfo} connectionInfo |
- */ |
-remoting.AppRemotingActivity.prototype.onConnected = function(connectionInfo) { |
- var connectedView = new remoting.AppConnectedView( |
- base.getHtmlElement('client-container'), |
- this.windowShape_, connectionInfo, this.windowMessageDispatcher_); |
- |
- var idleDetector = new remoting.IdleDetector( |
- base.getHtmlElement('idle-dialog'), |
- this.windowShape_, |
- this.app_.getApplicationName(), |
- this.stop.bind(this)); |
- |
- // Map Cmd to Ctrl on Mac since hosts typically use Ctrl for keyboard |
- // shortcuts, but we want them to act as natively as possible. |
- if (remoting.platformIsMac()) { |
- connectionInfo.plugin().setRemapKeys({ |
- 0x0700e3: 0x0700e0, |
- 0x0700e7: 0x0700e4 |
- }); |
- } |
- |
- // Drop the session after 30s of suspension as we cannot recover from a |
- // connectivity loss longer than 30s anyways. |
- this.session_.dropSessionOnSuspend(30 * 1000); |
- this.connectedDisposables_ = |
- new base.Disposables(idleDetector, connectedView); |
-}; |
- |
-/** |
- * @param {remoting.Error} error |
- */ |
-remoting.AppRemotingActivity.prototype.onDisconnected = function(error) { |
- if (error.isNone()) { |
- this.app_.quit(); |
- } else { |
- this.onConnectionDropped_(); |
- } |
-}; |
- |
-/** |
- * @param {!remoting.Error} error |
- */ |
-remoting.AppRemotingActivity.prototype.onConnectionFailed = function(error) { |
- remoting.LoadingWindow.close(); |
- this.showErrorMessage_(error); |
- this.cleanup_(); |
-}; |
- |
-/** @private */ |
-remoting.AppRemotingActivity.prototype.onConnectionDropped_ = function() { |
- // Don't dispose the session here to keep the plugin alive so that we can show |
- // the last frame of the remote application window. |
- base.dispose(this.connectedDisposables_); |
- this.connectedDisposables_ = null; |
- |
- if (base.isOnline()) { |
- this.reconnect_(); |
- return; |
- } |
- |
- var rootElement = /** @type {HTMLDialogElement} */ ( |
- document.getElementById('connection-dropped-dialog')); |
- var dialog = |
- new remoting.ConnectionDroppedDialog(rootElement, this.windowShape_); |
- var that = this; |
- dialog.show().then(function(){ |
- dialog.dispose(); |
- that.reconnect_(); |
- }).catch(function(){ |
- dialog.dispose(); |
- that.app_.quit(); |
- }); |
-}; |
- |
-/** @private */ |
-remoting.AppRemotingActivity.prototype.reconnect_ = function() { |
- // Hide the windows of the remote application with setDesktopRects([]) |
- // before tearing down the plugin. |
- this.windowShape_.setDesktopRects([]); |
- this.cleanup_(); |
- this.start(); |
-}; |
- |
-/** |
- * @param {!remoting.Error} error The error to be localized and displayed. |
- * @private |
- */ |
-remoting.AppRemotingActivity.prototype.showErrorMessage_ = function(error) { |
- console.error('Connection failed: ' + error.toString()); |
- remoting.MessageWindow.showErrorMessage( |
- this.app_.getApplicationName(), |
- chrome.i18n.getMessage(error.getTag())); |
-}; |
- |
-})(); |