| 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()));
|
| -};
|
| -
|
| -})();
|
|
|