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

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

Issue 918783002: CRD Viewport Management refactor (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase + plumbing remoting.Host into clientSession Created 5 years, 10 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
Index: remoting/webapp/crd/js/client_plugin_host_desktop_impl.js
diff --git a/remoting/webapp/crd/js/client_plugin_host_desktop_impl.js b/remoting/webapp/crd/js/client_plugin_host_desktop_impl.js
new file mode 100644
index 0000000000000000000000000000000000000000..2d39fc96a5423c5563c8254972e6017d9136034f
--- /dev/null
+++ b/remoting/webapp/crd/js/client_plugin_host_desktop_impl.js
@@ -0,0 +1,142 @@
+// 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
+ * Provides an interface to manage the Host Desktop of a remoting session.
+ */
+
+var remoting = remoting || {};
+remoting.ClientPlugin = remoting.ClientPlugin || {};
+
+(function() {
+
+'use strict';
+
+/**
+ * @param {remoting.ClientPluginImpl} plugin
+ * @param {function(Object):void} postMessageCallback Callback to post a message
+ * to the Client Plugin.
+ *
+ * @implements {remoting.HostDesktop}
+ * @extends {base.EventSourceImpl}
+ * @constructor
+ */
+remoting.ClientPlugin.HostDesktopImpl = function(plugin, postMessageCallback) {
+ /** @private */
+ this.plugin_ = plugin;
+ /** @private */
+ this.width_ = 0;
+ /** @private */
+ this.height_ = 0;
+ /** @private */
+ this.xDpi_ = 96;
+ /** @private */
+ this.yDpi_ = 96;
+ /** @private */
+ this.hasResizeRateLimit_ = false;
+ /** @private */
+ this.postMessageCallback_ = postMessageCallback;
+
+ this.defineEvents(Object.keys(remoting.HostDesktop.Events));
+};
+base.extend(remoting.ClientPlugin.HostDesktopImpl, base.EventSourceImpl);
+
+/** @return {boolean} */
+remoting.ClientPlugin.HostDesktopImpl.prototype.hasResizeRateLimit =
+ function() {
+ return this.hasResizeRateLimit_;
+};
+
+/** @return {boolean} Whether the host supports desktop resizing. */
+remoting.ClientPlugin.HostDesktopImpl.prototype.isResizable = function() {
+ return this.plugin_.hasFeature(
+ remoting.ClientPlugin.Feature.NOTIFY_CLIENT_RESOLUTION);
+};
+
+/** @return {{width:number, height:number, xDpi:number, yDpi:number}} */
+remoting.ClientPlugin.HostDesktopImpl.prototype.getDimensions = function() {
+ return {
+ width: this.width_,
+ height: this.height_,
+ xDpi: this.xDpi_,
+ yDpi: this.yDpi_
+ };
+};
+
+/**
+ * @param {number} width
+ * @param {number} height
+ * @param {number} device_scale
+ */
+remoting.ClientPlugin.HostDesktopImpl.prototype.resize = function(
+ width, height, device_scale) {
+ if (this.isResizable()) {
+ var dpi = Math.floor(device_scale * 96);
+ this.postMessageCallback_({
+ method: 'notifyClientResolution',
+ data: {
+ width: Math.floor(width * device_scale),
+ height: Math.floor(height * device_scale),
+ x_dpi: dpi,
+ y_dpi: dpi
+ }
+ });
+ }
+};
+
+/**
+ * @param {Array<string>} capabilities
+ */
+remoting.ClientPlugin.HostDesktopImpl.prototype.onSetCapabilities = function(
+ capabilities) {
+ this.hasResizeRateLimit_ = this.plugin_.hasCapability(
+ remoting.ClientSession.Capability.RATE_LIMIT_RESIZE_REQUESTS);
+};
+
+/**
+ * This function is called by |this.plugin_| when the size of the host
+ * desktop is changed.
+ *
+ * @param {remoting.ClientPluginMessage} message
+ */
+remoting.ClientPlugin.HostDesktopImpl.prototype.onSizeUpdated = function(
+ message) {
+ this.width_ = getNumberAttr(message.data, 'width');
+ this.height_ = getNumberAttr(message.data, 'height');
+ this.xDpi_ = getNumberAttr(message.data, 'x_dpi', 96);
+ this.yDpi_ = getNumberAttr(message.data, 'y_dpi', 96);
+ this.raiseEvent(remoting.HostDesktop.Events.sizeChanged);
+};
+
+/**
+ * This function is called by |this.plugin_| when the shape of the host
+ * desktop is changed.
+ *
+ * @param {remoting.ClientPluginMessage} message
+ * @return {Array<{left:number, top:number, width:number, height:number}>}
+ * rectangles of the desktop shape.
+ */
+remoting.ClientPlugin.HostDesktopImpl.prototype.onShapeUpdated =
+ function(message) {
+ var shapes = getArrayAttr(message.data, 'rects');
+ var rects = shapes.map(
+ /** @param {Array.<number>} shape */
+ function(shape) {
+ if (!Array.isArray(shape) || shape.length != 4) {
+ throw 'Received invalid onDesktopShape message';
+ }
+ var rect = {};
+ rect.left = shape[0];
+ rect.top = shape[1];
+ rect.width = shape[2];
+ rect.height = shape[3];
+ return rect;
+ });
+
+ this.raiseEvent(remoting.HostDesktop.Events.shapeChanged, rects);
+ return rects;
+};
+
+}());

Powered by Google App Engine
This is Rietveld 408576698