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

Unified Diff: remoting/webapp/crd/js/desktop_connected_view.js

Issue 1001503006: [Webapp Refactor] remoting.ConnectedView (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 9 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/crd/js/connected_view.js ('k') | remoting/webapp/crd/js/session_connector_impl.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/webapp/crd/js/desktop_connected_view.js
diff --git a/remoting/webapp/crd/js/desktop_connected_view.js b/remoting/webapp/crd/js/desktop_connected_view.js
index 1c1c236deefe3ef0ec4b5b8920535a994edf2c65..96a08ed023a7418f45fbffb1c71eac009927b32b 100644
--- a/remoting/webapp/crd/js/desktop_connected_view.js
+++ b/remoting/webapp/crd/js/desktop_connected_view.js
@@ -13,20 +13,7 @@
var remoting = remoting || {};
/**
- * True to enable mouse lock.
- * This is currently disabled because the current client plugin does not
- * properly handle mouse lock and delegated large cursors at the same time.
- * This should be re-enabled (by removing this flag) once a version of
- * the plugin that supports both has reached Chrome Stable channel.
- * (crbug.com/429322).
- *
- * @type {boolean}
- */
-remoting.enableMouseLock = false;
-
-/**
* @param {remoting.ClientPlugin} plugin
- * @param {remoting.ClientSession} session
* @param {HTMLElement} container
* @param {remoting.Host} host
* @param {remoting.DesktopConnectedView.Mode} mode The mode of this connection.
@@ -34,10 +21,10 @@ remoting.enableMouseLock = false;
* when the client doesn't define any.
* @constructor
* @extends {base.EventSourceImpl}
+ * @implements {base.Disposable}
*/
-remoting.DesktopConnectedView = function(plugin, session, container, host, mode,
+remoting.DesktopConnectedView = function(plugin, container, host, mode,
defaultRemapKeys) {
- this.session_ = session;
/** @private {HTMLElement} */
this.container_ = container;
@@ -54,31 +41,15 @@ remoting.DesktopConnectedView = function(plugin, session, container, host, mode,
/** @private {string} */
this.defaultRemapKeys_ = defaultRemapKeys;
- /** @private */
- this.callPluginLostFocus_ = this.pluginLostFocus_.bind(this);
- /** @private */
- this.callPluginGotFocus_ = this.pluginGotFocus_.bind(this);
/** @private {Element} */
this.debugRegionContainer_ =
this.container_.querySelector('.debug-region-container');
- /** @private {Element} */
- this.mouseCursorOverlay_ =
- this.container_.querySelector('.mouse-cursor-overlay');
-
/** @private {remoting.DesktopViewport} */
this.viewport_ = null;
- /** @type {Element} */
- var img = this.mouseCursorOverlay_;
- /**
- * @param {Event} event
- * @private
- */
- this.updateMouseCursorPosition_ = function(event) {
- img.style.top = event.offsetY + 'px';
- img.style.left = event.offsetX + 'px';
- };
+ /** private {remoting.ConnectedView} */
+ this.view_ = null;
/** @private {remoting.VideoFrameRecorder} */
this.videoFrameRecorder_ = null;
@@ -89,6 +60,27 @@ remoting.DesktopConnectedView = function(plugin, session, container, host, mode,
this.setupPlugin_();
};
+/** @return {void} Nothing. */
+remoting.DesktopConnectedView.prototype.dispose = function() {
+ if (remoting.windowFrame) {
+ remoting.windowFrame.setDesktopConnectedView(null);
+ }
+ if (remoting.toolbar) {
+ remoting.toolbar.setDesktopConnectedView(null);
+ }
+ if (remoting.optionsMenu) {
+ remoting.optionsMenu.setDesktopConnectedView(null);
+ }
+
+ document.body.classList.remove('connected');
+
+ base.dispose(this.eventHooks_);
+ this.eventHooks_ = null;
+
+ base.dispose(this.viewport_);
+ this.viewport_ = null;
+};
+
// The mode of this session.
/** @enum {number} */
remoting.DesktopConnectedView.Mode = {
@@ -170,15 +162,6 @@ remoting.DesktopConnectedView.prototype.setupPlugin_ = function() {
if (this.plugin_.hasFeature(remoting.ClientPlugin.Feature.REMAP_KEY)) {
this.applyRemapKeys_(true);
}
-
- // TODO(wez): Only allow mouse lock if the app has the pointerLock permission.
- // Enable automatic mouse-lock.
- if (remoting.enableMouseLock &&
- this.plugin_.hasFeature(remoting.ClientPlugin.Feature.ALLOW_MOUSE_LOCK)) {
- this.plugin_.allowMouseLock();
- }
-
- this.plugin_.setMouseCursorHandler(this.updateMouseCursorImage_.bind(this));
};
/**
@@ -194,111 +177,47 @@ remoting.DesktopConnectedView.prototype.onResize_ = function() {
};
/**
- * Called when the app window is hidden.
- * @return {void} Nothing.
- */
-remoting.DesktopConnectedView.prototype.onVisibilityChanged_ = function() {
- this.pauseVideo(document.hidden);
-};
-
-/**
* Callback that the plugin invokes to indicate when the connection is
* ready.
*
* @param {boolean} ready True if the connection is ready.
*/
remoting.DesktopConnectedView.prototype.onConnectionReady = function(ready) {
- if (!ready) {
- this.container_.classList.add('session-client-inactive');
- } else {
- this.container_.classList.remove('session-client-inactive');
+ if (this.view_) {
+ this.view_.onConnectionReady(ready);
}
};
-/**
- * Deletes the <embed> element from the container, without sending a
- * session_terminate request. This is to be called when the session was
- * disconnected by the Host.
- *
- * @return {void} Nothing.
- */
-remoting.DesktopConnectedView.prototype.removePlugin = function() {
- if (this.plugin_) {
- this.plugin_.element().removeEventListener(
- 'focus', this.callPluginGotFocus_, false);
- this.plugin_.element().removeEventListener(
- 'blur', this.callPluginLostFocus_, false);
- this.plugin_ = null;
- }
+remoting.DesktopConnectedView.prototype.onConnected = function() {
+ document.body.classList.add('connected');
- this.updateClientSessionUi_(null);
-};
-
-/**
- * @param {remoting.ClientSession} clientSession The active session, or null if
- * there is no connection.
- */
-remoting.DesktopConnectedView.prototype.updateClientSessionUi_ = function(
- clientSession) {
- if (clientSession === null) {
- if (remoting.windowFrame) {
- remoting.windowFrame.setDesktopConnectedView(null);
- }
- if (remoting.toolbar) {
- remoting.toolbar.setDesktopConnectedView(null);
- }
- if (remoting.optionsMenu) {
- remoting.optionsMenu.setDesktopConnectedView(null);
- }
+ this.view_ = new remoting.ConnectedView(
+ this.plugin_, this.container_,
+ this.container_.querySelector('.mouse-cursor-overlay'));
- document.body.classList.remove('connected');
- this.container_.removeEventListener(
- 'mousemove', this.updateMouseCursorPosition_, true);
- base.dispose(this.eventHooks_);
- this.eventHooks_ = null;
- base.dispose(this.viewport_);
- this.viewport_ = null;
- } else {
- var scrollerElement = document.getElementById('scroller');
- this.viewport_ = new remoting.DesktopViewport(
- scrollerElement || document.body,
- this.plugin_.hostDesktop(),
- this.host_.options);
- if (remoting.windowFrame) {
- remoting.windowFrame.setDesktopConnectedView(this);
- }
- if (remoting.toolbar) {
- remoting.toolbar.setDesktopConnectedView(this);
- }
- if (remoting.optionsMenu) {
- remoting.optionsMenu.setDesktopConnectedView(this);
- }
+ var scrollerElement = document.getElementById('scroller');
+ this.viewport_ = new remoting.DesktopViewport(
+ scrollerElement || document.body,
+ this.plugin_.hostDesktop(),
+ this.host_.options);
- document.body.classList.add('connected');
- this.container_.addEventListener(
- 'mousemove', this.updateMouseCursorPosition_, true);
- // Activate full-screen related UX.
- this.setFocusHandlers_();
- this.eventHooks_ = new base.Disposables(
- new base.DomEventHook(window, 'resize', this.onResize_.bind(this), false),
- new base.DomEventHook(document, 'visibilitychange',
- this.onVisibilityChanged_.bind(this), false),
- new remoting.Fullscreen.EventHook(this.onFullScreenChanged_.bind(this))
- );
- this.onFullScreenChanged_(remoting.fullscreen.isActive());
+ if (remoting.windowFrame) {
+ remoting.windowFrame.setDesktopConnectedView(this);
+ }
+ if (remoting.toolbar) {
+ remoting.toolbar.setDesktopConnectedView(this);
+ }
+ if (remoting.optionsMenu) {
+ remoting.optionsMenu.setDesktopConnectedView(this);
}
-};
-/**
- * Constrains the focus to the plugin element.
- * @private
- */
-remoting.DesktopConnectedView.prototype.setFocusHandlers_ = function() {
- this.plugin_.element().addEventListener(
- 'focus', this.callPluginGotFocus_, false);
- this.plugin_.element().addEventListener(
- 'blur', this.callPluginLostFocus_, false);
- this.plugin_.element().focus();
+ // Activate full-screen related UX.
+ this.eventHooks_ = new base.Disposables(
+ this.view_,
+ new base.DomEventHook(window, 'resize', this.onResize_.bind(this), false),
+ new remoting.Fullscreen.EventHook(this.onFullScreenChanged_.bind(this))
+ );
+ this.onFullScreenChanged_(remoting.fullscreen.isActive());
};
/**
@@ -341,45 +260,6 @@ remoting.DesktopConnectedView.prototype.onFullScreenChanged_ = function (
};
/**
- * Callback function called when the plugin element gets focus.
- */
-remoting.DesktopConnectedView.prototype.pluginGotFocus_ = function() {
- remoting.clipboard.initiateToHost();
-};
-
-/**
- * Callback function called when the plugin element loses focus.
- */
-remoting.DesktopConnectedView.prototype.pluginLostFocus_ = function() {
- if (this.plugin_) {
- // Release all keys to prevent them becoming 'stuck down' on the host.
- this.plugin_.releaseAllKeys();
- if (this.plugin_.element()) {
- // Focus should stay on the element, not (for example) the toolbar.
- // Due to crbug.com/246335, we can't restore the focus immediately,
- // otherwise the plugin gets confused about whether or not it has focus.
- window.setTimeout(
- this.plugin_.element().focus.bind(this.plugin_.element()), 0);
- }
- }
-};
-
-/**
- * @param {string} url
- * @param {number} hotspotX
- * @param {number} hotspotY
- */
-remoting.DesktopConnectedView.prototype.updateMouseCursorImage_ =
- function(url, hotspotX, hotspotY) {
- this.mouseCursorOverlay_.hidden = !url;
- if (url) {
- this.mouseCursorOverlay_.style.marginLeft = '-' + hotspotX + 'px';
- this.mouseCursorOverlay_.style.marginTop = '-' + hotspotY + 'px';
- this.mouseCursorOverlay_.src = url;
- }
-};
-
-/**
* Sets and stores the key remapping setting for the current host.
*
* @param {string} remappings Comma separated list of key remappings.
@@ -469,30 +349,6 @@ remoting.DesktopConnectedView.prototype.sendPrintScreen = function() {
this.sendKeyCombination_([0x070046]);
};
-/**
- * Requests that the host pause or resume video updates.
- *
- * @param {boolean} pause True to pause video, false to resume.
- * @return {void} Nothing.
- */
-remoting.DesktopConnectedView.prototype.pauseVideo = function(pause) {
- if (this.plugin_) {
- this.plugin_.pauseVideo(pause);
- }
-};
-
-/**
- * Requests that the host pause or resume audio.
- *
- * @param {boolean} pause True to pause audio, false to resume.
- * @return {void} Nothing.
- */
-remoting.DesktopConnectedView.prototype.pauseAudio = function(pause) {
- if (this.plugin_) {
- this.plugin_.pauseAudio(pause)
- }
-};
-
remoting.DesktopConnectedView.prototype.initVideoFrameRecorder = function() {
this.videoFrameRecorder_ = new remoting.VideoFrameRecorder(this.plugin_);
};
« no previous file with comments | « remoting/webapp/crd/js/connected_view.js ('k') | remoting/webapp/crd/js/session_connector_impl.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698