| Index: remoting/webapp/app_remoting/js/app_connected_view.js
|
| diff --git a/remoting/webapp/app_remoting/js/app_connected_view.js b/remoting/webapp/app_remoting/js/app_connected_view.js
|
| deleted file mode 100644
|
| index 6918a1e5f86416d49649267f4c4e5ec2a0935291..0000000000000000000000000000000000000000
|
| --- a/remoting/webapp/app_remoting/js/app_connected_view.js
|
| +++ /dev/null
|
| @@ -1,277 +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.
|
| -
|
| -/**
|
| - * @fileoverview
|
| - * Implements a basic UX control for a connected app remoting session.
|
| - */
|
| -
|
| -/** @suppress {duplicate} */
|
| -var remoting = remoting || {};
|
| -
|
| -(function() {
|
| -
|
| -'use strict';
|
| -
|
| -/**
|
| - * Interval to test the connection speed.
|
| - * @const {number}
|
| - */
|
| -var CONNECTION_SPEED_PING_INTERVAL_MS = 10 * 1000;
|
| -
|
| -/**
|
| - * Interval to refresh the google drive access token.
|
| - * @const {number}
|
| - */
|
| -var DRIVE_ACCESS_TOKEN_REFRESH_INTERVAL_MS = 15 * 60 * 1000;
|
| -
|
| -/**
|
| - * @param {HTMLElement} containerElement
|
| - * @param {remoting.WindowShape} windowShape
|
| - * @param {remoting.ConnectionInfo} connectionInfo
|
| - * @param {base.WindowMessageDispatcher} windowMessageDispatcher
|
| - *
|
| - * @constructor
|
| - * @implements {base.Disposable}
|
| - * @implements {remoting.ProtocolExtension}
|
| - */
|
| -remoting.AppConnectedView = function(containerElement, windowShape,
|
| - connectionInfo, windowMessageDispatcher) {
|
| - /** @private */
|
| - this.plugin_ = connectionInfo.plugin();
|
| -
|
| - /** @private */
|
| - this.host_ = connectionInfo.host();
|
| -
|
| - var menuAdapter = new remoting.ContextMenuChrome();
|
| -
|
| - // Initialize the context menus.
|
| - if (!remoting.platformIsChromeOS()) {
|
| - menuAdapter = new remoting.ContextMenuDom(
|
| - base.getHtmlElement('context-menu'), windowShape);
|
| - }
|
| -
|
| - this.contextMenu_ = new remoting.ApplicationContextMenu(
|
| - menuAdapter, this.plugin_, connectionInfo.session(), windowShape);
|
| - this.contextMenu_.setHostId(connectionInfo.host().hostId);
|
| -
|
| - /** @private */
|
| - this.keyboardLayoutsMenu_ = new remoting.KeyboardLayoutsMenu(menuAdapter);
|
| -
|
| - /** @private */
|
| - this.windowActivationMenu_ = new remoting.WindowActivationMenu(menuAdapter);
|
| -
|
| - var baseView = new remoting.ConnectedView(
|
| - this.plugin_, containerElement,
|
| - containerElement.querySelector('.mouse-cursor-overlay'));
|
| -
|
| - var windowShapeHook = new base.EventHook(
|
| - this.plugin_.hostDesktop(),
|
| - remoting.HostDesktop.Events.shapeChanged,
|
| - windowShape.setDesktopRects.bind(windowShape));
|
| -
|
| - var desktopSizeHook = new base.EventHook(
|
| - this.plugin_.hostDesktop(),
|
| - remoting.HostDesktop.Events.sizeChanged,
|
| - this.onDesktopSizeChanged_.bind(this));
|
| -
|
| - /** @private */
|
| - this.disposables_ =
|
| - new base.Disposables(baseView, windowShapeHook, desktopSizeHook,
|
| - this.contextMenu_, menuAdapter);
|
| -
|
| - /** @private */
|
| - this.supportsGoogleDrive_ = this.plugin_.hasCapability(
|
| - remoting.ClientSession.Capability.GOOGLE_DRIVE);
|
| -
|
| - this.resizeHostToClientArea_();
|
| - this.plugin_.extensions().register(this);
|
| -
|
| - /** @private {remoting.CloudPrintDialogContainer} */
|
| - this.cloudPrintDialogContainer_ = new remoting.CloudPrintDialogContainer(
|
| - /** @type {!Webview} */ (document.getElementById('cloud-print-webview')),
|
| - windowShape, windowMessageDispatcher, baseView);
|
| -
|
| - this.disposables_.add(this.cloudPrintDialogContainer_);
|
| -};
|
| -
|
| -/**
|
| - * @return {void} Nothing.
|
| - */
|
| -remoting.AppConnectedView.prototype.dispose = function() {
|
| - this.windowActivationMenu_.setExtensionMessageSender(base.doNothing);
|
| - this.keyboardLayoutsMenu_.setExtensionMessageSender(base.doNothing);
|
| - base.dispose(this.disposables_);
|
| -};
|
| -
|
| -/**
|
| - * Resize the host to the dimensions of the current window.
|
| - * @private
|
| - */
|
| -remoting.AppConnectedView.prototype.resizeHostToClientArea_ = function() {
|
| - var hostDesktop = this.plugin_.hostDesktop();
|
| - var desktopScale = this.host_.options.getDesktopScale();
|
| - hostDesktop.resize(window.innerWidth * desktopScale,
|
| - window.innerHeight * desktopScale,
|
| - window.devicePixelRatio);
|
| -};
|
| -
|
| -/**
|
| - * Adjust the size of the plugin according to the dimensions of the hostDesktop.
|
| - *
|
| - * @param {{width:number, height:number, xDpi:number, yDpi:number}} hostDesktop
|
| - * @private
|
| - */
|
| -remoting.AppConnectedView.prototype.onDesktopSizeChanged_ =
|
| - function(hostDesktop) {
|
| - // The first desktop size change indicates that we can close the loading
|
| - // window.
|
| - remoting.LoadingWindow.close();
|
| -
|
| - var hostSize = { width: hostDesktop.width, height: hostDesktop.height };
|
| - var hostDpi = { x: hostDesktop.xDpi, y: hostDesktop.yDpi };
|
| - var clientArea = { width: window.innerWidth, height: window.innerHeight };
|
| - var newSize = remoting.Viewport.choosePluginSize(
|
| - clientArea, window.devicePixelRatio,
|
| - hostSize, hostDpi, this.host_.options.getDesktopScale(),
|
| - true /* fullscreen */ , true /* shrinkToFit */ );
|
| -
|
| - this.plugin_.element().style.width = newSize.width + 'px';
|
| - this.plugin_.element().style.height = newSize.height + 'px';
|
| -};
|
| -
|
| -/**
|
| - * @return {Array<string>}
|
| - * @override {remoting.ProtocolExtension}
|
| - */
|
| -remoting.AppConnectedView.prototype.getExtensionTypes = function() {
|
| - return ['openURL', 'onWindowRemoved', 'onWindowAdded',
|
| - 'onAllWindowsMinimized', 'setKeyboardLayouts', 'pingResponse'];
|
| -};
|
| -
|
| -/**
|
| - * @param {function(string,string)} sendMessageToHost Callback to send a message
|
| - * to the host.
|
| - * @override {remoting.ProtocolExtension}
|
| - */
|
| -remoting.AppConnectedView.prototype.startExtension = function(
|
| - sendMessageToHost) {
|
| - this.windowActivationMenu_.setExtensionMessageSender(sendMessageToHost);
|
| - this.keyboardLayoutsMenu_.setExtensionMessageSender(sendMessageToHost);
|
| -
|
| - remoting.identity.getUserInfo().then(function(userInfo) {
|
| - sendMessageToHost('setUserDisplayInfo',
|
| - JSON.stringify({fullName: userInfo.name}));
|
| - });
|
| -
|
| - var onRestoreHook = new base.ChromeEventHook(
|
| - chrome.app.window.current().onRestored, function() {
|
| - sendMessageToHost('restoreAllWindows', '');
|
| - });
|
| -
|
| - var pingTimer = new base.RepeatingTimer(function() {
|
| - var message = {timestamp: new Date().getTime()};
|
| - sendMessageToHost('pingRequest', JSON.stringify(message));
|
| - }, CONNECTION_SPEED_PING_INTERVAL_MS);
|
| -
|
| - this.disposables_.add(onRestoreHook, pingTimer);
|
| -
|
| - if (this.supportsGoogleDrive_) {
|
| - this.disposables_.add(new base.RepeatingTimer(
|
| - this.sendGoogleDriveAccessToken_.bind(this, sendMessageToHost),
|
| - DRIVE_ACCESS_TOKEN_REFRESH_INTERVAL_MS, true));
|
| - }
|
| -};
|
| -
|
| -/**
|
| - * @param {string} command The message command.
|
| - * @param {Object} message The parsed extension message data.
|
| - * @override {remoting.ProtocolExtension}
|
| - */
|
| -remoting.AppConnectedView.prototype.onExtensionMessage =
|
| - function(command, message) {
|
| - switch (command) {
|
| - case 'openURL':
|
| - // URL requests from the hosted app are untrusted, so disallow anything
|
| - // other than HTTP or HTTPS.
|
| - var url = base.getStringAttr(message, 'url');
|
| - if (url.indexOf('http:') != 0 && url.indexOf('https:') != 0) {
|
| - console.error('Bad URL: ' + url);
|
| - } else {
|
| - window.open(url);
|
| - }
|
| - return true;
|
| -
|
| - case 'onWindowRemoved':
|
| - var id = base.getNumberAttr(message, 'id');
|
| - this.windowActivationMenu_.remove(id);
|
| - return true;
|
| -
|
| - case 'onWindowAdded':
|
| - var id = base.getNumberAttr(message, 'id');
|
| - var title = base.getStringAttr(message, 'title');
|
| - this.windowActivationMenu_.add(id, title);
|
| - return true;
|
| -
|
| - case 'onAllWindowsMinimized':
|
| - chrome.app.window.current().minimize();
|
| - return true;
|
| -
|
| - case 'setKeyboardLayouts':
|
| - var supportedLayouts = base.getArrayAttr(message, 'supportedLayouts');
|
| - var currentLayout = base.getStringAttr(message, 'currentLayout');
|
| - console.log('Current host keyboard layout: ' + currentLayout);
|
| - console.log('Supported host keyboard layouts: ' + supportedLayouts);
|
| - this.keyboardLayoutsMenu_.setLayouts(supportedLayouts, currentLayout);
|
| - return true;
|
| -
|
| - case 'pingResponse':
|
| - var then = base.getNumberAttr(message, 'timestamp');
|
| - var now = new Date().getTime();
|
| - this.contextMenu_.updateConnectionRTT(now - then);
|
| - return true;
|
| -
|
| - case 'printDocument':
|
| - var title = base.getStringAttr(message, 'title');
|
| - var type = base.getStringAttr(message, 'type');
|
| - var data = base.getStringAttr(message, 'data');
|
| - if (type == '' || data == '') {
|
| - console.error('"type" and "data" cannot be empty.');
|
| - return true;
|
| - }
|
| -
|
| - this.cloudPrintDialogContainer_.printDocument(title, type, data);
|
| - return true;
|
| - }
|
| -
|
| - return false;
|
| -};
|
| -
|
| -/**
|
| - * Timer callback to send the access token to the host.
|
| - * @param {function(string, string)} sendExtensionMessage
|
| - * @private
|
| - */
|
| -remoting.AppConnectedView.prototype.sendGoogleDriveAccessToken_ =
|
| - function(sendExtensionMessage) {
|
| - var googleDriveScopes = [
|
| - 'https://docs.google.com/feeds/',
|
| - 'https://www.googleapis.com/auth/drive'
|
| - ];
|
| - remoting.identity.getNewToken(googleDriveScopes).then(
|
| - function(/** string */ token){
|
| - console.assert(token !== previousToken_,
|
| - 'getNewToken() returned the same token.');
|
| - previousToken_ = token;
|
| - sendExtensionMessage('accessToken', token);
|
| - }).catch(remoting.Error.handler(function(/** remoting.Error */ error) {
|
| - console.log('Failed to refresh access token: ' + error.toString());
|
| - }));
|
| -};
|
| -
|
| -// The access token last received from getNewToken. Saved to ensure that we
|
| -// get a fresh token each time.
|
| -var previousToken_ = '';
|
| -
|
| -})();
|
|
|