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

Side by Side Diff: remoting/webapp/crd/js/client_plugin_host_desktop_impl.js

Issue 929323003: Separate host desktop related functionality into remoting.HostDesktop (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Reviewer's feedback 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 /**
6 * @fileoverview
7 * Provides an interface to manage the Host Desktop of a remoting session.
8 */
9
10 var remoting = remoting || {};
11 remoting.ClientPlugin = remoting.ClientPlugin || {};
12
13 (function() {
14
15 'use strict';
16
17 /**
18 * @param {remoting.ClientPluginImpl} plugin
19 * @param {function(Object):void} postMessageCallback Callback to post a message
20 * to the Client Plugin.
21 *
22 * @implements {remoting.HostDesktop}
23 * @extends {base.EventSourceImpl}
24 * @constructor
25 */
26 remoting.ClientPlugin.HostDesktopImpl = function(plugin, postMessageCallback) {
Jamie 2015/02/18 23:06:19 The fact that you need an explicit reference to th
kelvinp 2015/02/19 20:58:15 As discussed, the intent of this class is to separ
27 /** @private */
28 this.plugin_ = plugin;
29 /** @private */
30 this.width_ = 0;
31 /** @private */
32 this.height_ = 0;
33 /** @private */
34 this.xDpi_ = 96;
35 /** @private */
36 this.yDpi_ = 96;
37 /** @private */
38 this.hasResizeRateLimit_ = false;
39 /** @private */
40 this.postMessageCallback_ = postMessageCallback;
41
42 this.defineEvents(Object.keys(remoting.HostDesktop.Events));
Jamie 2015/02/18 23:06:19 s/Object.keys/base.values/
kelvinp 2015/02/19 20:58:15 Done.
43 };
44 base.extend(remoting.ClientPlugin.HostDesktopImpl, base.EventSourceImpl);
45
46 /** @return {boolean} */
47 remoting.ClientPlugin.HostDesktopImpl.prototype.hasResizeRateLimit =
48 function() {
49 return this.hasResizeRateLimit_;
50 };
51
52 /** @return {boolean} Whether the host supports desktop resizing. */
53 remoting.ClientPlugin.HostDesktopImpl.prototype.isResizable = function() {
54 return this.plugin_.hasFeature(
55 remoting.ClientPlugin.Feature.NOTIFY_CLIENT_RESOLUTION);
56 };
57
58 /** @return {{width:number, height:number, xDpi:number, yDpi:number}} */
59 remoting.ClientPlugin.HostDesktopImpl.prototype.getDimensions = function() {
60 return {
61 width: this.width_,
62 height: this.height_,
63 xDpi: this.xDpi_,
64 yDpi: this.yDpi_
65 };
66 };
67
68 /**
69 * @param {number} width
70 * @param {number} height
71 * @param {number} device_scale
Jamie 2015/02/18 23:06:19 The API declares this parameter as |dpi|, and it r
kelvinp 2015/02/19 20:58:15 Done.
72 */
73 remoting.ClientPlugin.HostDesktopImpl.prototype.resize = function(
74 width, height, device_scale) {
75 if (this.isResizable()) {
76 var dpi = Math.floor(device_scale * 96);
77 this.postMessageCallback_({
78 method: 'notifyClientResolution',
79 data: {
80 width: Math.floor(width * device_scale),
81 height: Math.floor(height * device_scale),
82 x_dpi: dpi,
83 y_dpi: dpi
84 }
85 });
86 }
87 };
88
89 /**
90 * @param {Array<string>} capabilities
91 */
92 remoting.ClientPlugin.HostDesktopImpl.prototype.onSetCapabilities = function(
Jamie 2015/02/18 23:06:19 I think this method is only used to set hasResizeR
kelvinp 2015/02/19 20:58:15 Done.
93 capabilities) {
94 this.hasResizeRateLimit_ = this.plugin_.hasCapability(
95 remoting.ClientSession.Capability.RATE_LIMIT_RESIZE_REQUESTS);
96 };
97
98 /**
99 * This function is called by |this.plugin_| when the size of the host
100 * desktop is changed.
101 *
102 * @param {remoting.ClientPluginMessage} message
103 */
104 remoting.ClientPlugin.HostDesktopImpl.prototype.onSizeUpdated = function(
Jamie 2015/02/18 23:06:19 This method is not declared on the interface and s
kelvinp 2015/02/19 20:58:15 This class is under the clientPlugin namespace and
105 message) {
106 this.width_ = getNumberAttr(message.data, 'width');
107 this.height_ = getNumberAttr(message.data, 'height');
108 this.xDpi_ = getNumberAttr(message.data, 'x_dpi', 96);
109 this.yDpi_ = getNumberAttr(message.data, 'y_dpi', 96);
110 this.raiseEvent(remoting.HostDesktop.Events.sizeChanged);
111 };
112
113 /**
114 * This function is called by |this.plugin_| when the shape of the host
115 * desktop is changed.
116 *
117 * @param {remoting.ClientPluginMessage} message
118 * @return {Array<{left:number, top:number, width:number, height:number}>}
119 * rectangles of the desktop shape.
120 */
121 remoting.ClientPlugin.HostDesktopImpl.prototype.onShapeUpdated =
122 function(message) {
123 var shapes = getArrayAttr(message.data, 'rects');
124 var rects = shapes.map(
125 /** @param {Array.<number>} shape */
126 function(shape) {
127 if (!Array.isArray(shape) || shape.length != 4) {
128 throw 'Received invalid onDesktopShape message';
129 }
130 var rect = {};
Jamie 2015/02/18 23:06:19 Optional: Elsewhere, we have code to force left, r
kelvinp 2015/02/19 20:58:15 Done.
131 rect.left = shape[0];
132 rect.top = shape[1];
133 rect.width = shape[2];
134 rect.height = shape[3];
135 return rect;
136 });
137
138 this.raiseEvent(remoting.HostDesktop.Events.shapeChanged, rects);
139 return rects;
140 };
141
142 }());
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698