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

Side by Side 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: Implementation 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 2014 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 /** @suppress {duplicate} */
11 var remoting = remoting || {};
12 remoting.ClientPlugin = remoting.ClientPlugin || {};
13
14 (function() {
15
16 'use strict';
17
18 var HostDesktopEvents = remoting.ClientPlugin.HostDesktop.Events;
19
20 /**
21 * @param {remoting.ClientPluginImpl} plugin
22 * @param {function(Object):void} postMessageCallback Callback to post a message
23 * to the Client Plugin.
24 *
25 * @implements {remoting.ClientPlugin.HostDesktop}
26 * @extends {base.EventSourceImpl}
27 * @constructor
28 */
29 remoting.ClientPlugin.HostDesktopImpl = function(plugin, postMessageCallback) {
Jamie 2015/02/12 21:07:29 I think it's confusing to have a nested type decla
kelvinp 2015/02/12 23:26:41 I removed ClientPlugin from the interface. But th
30 /** @private */
31 this.plugin_ = plugin;
32 /** @private */
33 this.width_ = 0;
34 /** @private */
35 this.height_ = 0;
36 /** @private */
37 this.xDpi_ = 96;
38 /** @private */
39 this.yDpi_ = 96;
40 /** @private */
41 this.hasResizeRateLimit_ = false;
42 /** @private */
43 this.postMessageCallback_ = postMessageCallback;
44
45 this.defineEvents(Object.keys(HostDesktopEvents));
46 };
47 base.extend(remoting.ClientPlugin.HostDesktopImpl, base.EventSourceImpl);
48
49 /** @return {boolean} */
50 remoting.ClientPlugin.HostDesktopImpl.prototype.hasResizeRateLimit =
51 function() {
52 return this.hasResizeRateLimit_;
53 };
54
55 /** @return {boolean} Whether the host supports desktop resizing. */
56 remoting.ClientPlugin.HostDesktopImpl.prototype.isResizable = function() {
57 return this.plugin_.hasFeature(
58 remoting.ClientPlugin.Feature.NOTIFY_CLIENT_RESOLUTION);
59 };
60
61 /** @return {{width:number, height:number, xDpi:number, yDpi:number}} */
62 remoting.ClientPlugin.HostDesktopImpl.prototype.getDimensions = function() {
63 return {
64 width: this.width_,
65 height: this.height_,
66 xDpi: this.xDpi_,
67 yDpi: this.yDpi_
68 };
69 };
70
71 /**
72 * @param {number} width
73 * @param {number} height
74 * @param {number} device_scale
75 */
76 remoting.ClientPlugin.HostDesktopImpl.prototype.resize = function(
77 width, height, device_scale) {
78 if (this.isResizable()) {
79 var dpi = Math.floor(device_scale * 96);
80 this.postMessageCallback_({
81 method: 'notifyClientResolution',
82 data: {
83 width: Math.floor(width * device_scale),
84 height: Math.floor(height * device_scale),
85 x_dpi: dpi,
86 y_dpi: dpi
87 }
88 });
89 }
90 };
91
92 /**
93 * @param {Array.<string>} capabilities
94 */
95 remoting.ClientPlugin.HostDesktopImpl.prototype.onSetCapabilities = function(
96 capabilities) {
97 this.hasResizeRateLimit_ =
98 capabilities.indexOf(
99 remoting.ClientSession.Capability.RATE_LIMIT_RESIZE_REQUESTS) !== -1;
100 };
101
102 /**
103 * This function is called by |this.plugin_| when the size of the host
104 * desktop is changed.
105 *
106 * @param {remoting.ClientPluginMessage} message
107 */
108 remoting.ClientPlugin.HostDesktopImpl.prototype.onSizeUpdated = function(
109 message) {
110 this.width_ = getNumberAttr(message.data, 'width');
111 this.height_ = getNumberAttr(message.data, 'height');
112 this.xDpi_ = getNumberAttr(message.data, 'x_dpi', 96);
113 this.yDpi_ = getNumberAttr(message.data, 'y_dpi', 96);
114 this.raiseEvent(HostDesktopEvents.sizeChanged);
115 };
116
117 /**
118 * This function is called by |this.plugin_| when the shape of the host
119 * desktop is changed.
120 *
121 * @param {remoting.ClientPluginMessage} message
122 * @return {Array.<Array.<number>>} rectangles of the desktop shape.
123 */
124 remoting.ClientPlugin.HostDesktopImpl.prototype.onShapeUpdated =
125 function(message) {
126 var rects = getArrayAttr(message.data, 'rects');
127 for (var i = 0; i < rects.length; ++i) {
128 /** @type {Array.<number>} */
129 var rect = rects[i];
130 if (typeof rect != 'object' || rect.length != 4) {
131 throw 'Received invalid onDesktopShape message';
132 }
133 }
134 this.raiseEvent(HostDesktopEvents.shapeChanged, rects);
135 return rects;
136 };
137
138 }());
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698