OLD | NEW |
| (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 (function() { | |
6 | |
7 'use strict'; | |
8 | |
9 module('desktop_connected_view'); | |
10 | |
11 function size(width, height) { | |
12 return {width: width, height: height}; | |
13 } | |
14 | |
15 function dpi(x, y) { | |
16 return {x: x, y: y}; | |
17 } | |
18 | |
19 test('choosePluginSize() handles low-DPI client & host', | |
20 function() { | |
21 // 1. Client & host size the same. | |
22 var pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
23 size(640, 480), 1.0, size(640, 480), dpi(96, 96), 1.0, false, true); | |
24 QUnit.deepEqual(pluginSize, size(640, 480)); | |
25 | |
26 // 2. Client logical dimensions smaller than host's. | |
27 pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
28 size(640, 480), 1.0, size(1024, 600), dpi(96, 96), 1.0, false, true); | |
29 QUnit.deepEqual(pluginSize, size(640, (640 / 1024) * 600)); | |
30 | |
31 // 3. Client Y dimension larger than host's, X dimension smaller. | |
32 pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
33 size(640, 640), 1.0, size(1024, 600), dpi(96, 96), 1.0, false, true); | |
34 QUnit.deepEqual(pluginSize, size(640, (640 / 1024) * 600)); | |
35 | |
36 // 4. Client dimensions larger than host's by <2x. | |
37 pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
38 size(1280, 900), 1.0, size(640, 480), dpi(96, 96), 1.0, false, true); | |
39 QUnit.deepEqual(pluginSize, size(640, 480)); | |
40 | |
41 // 5. Client dimensions larger than host's by >2x. | |
42 pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
43 size(1280, 1024), 1.0, size(640, 480), dpi(96, 96), 1.0, false, true); | |
44 QUnit.deepEqual(pluginSize, size(2 * 640, 2 * 480)); | |
45 | |
46 // 6. Client X dimension larger than host's, Y dimension smaller. | |
47 pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
48 size(1152, 600), 1.0, size(1024, 768), dpi(96, 96), 1.0, false, true); | |
49 QUnit.deepEqual(pluginSize, size(1024 * (600 / 768), 600)); | |
50 }); | |
51 | |
52 test('choosePluginSize() handles high-DPI client, low-DPI host', | |
53 function() { | |
54 // 1. Client & host size the same. | |
55 var pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
56 size(640, 480), 2.0, size(640, 480), dpi(96, 96), 1.0, false, true); | |
57 QUnit.deepEqual(pluginSize, size(640, 480)); | |
58 | |
59 // 2. Client logical dimensions smaller than host's. | |
60 pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
61 size(640, 480), 2.0, size(1024, 600), dpi(96, 96), 1.0, false, true); | |
62 QUnit.deepEqual(pluginSize, size(640, (640 / 1024) * 600)); | |
63 | |
64 // 3. Client Y dimension larger than host's, X dimension smaller. | |
65 pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
66 size(640, 640), 2.0, size(1024, 600), dpi(96, 96), 1.0, false, true); | |
67 QUnit.deepEqual(pluginSize, size(640, (640 / 1024) * 600)); | |
68 | |
69 // 4. Client logical dimensions larger than host's by <2x. | |
70 // Host dimensions fit into the client's _device_ dimensions 3x, so the | |
71 // size in client DIPs should be 1:3/2. | |
72 pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
73 size(1280, 900), 2.0, size(640, 480), dpi(96, 96), 1.0, false, true); | |
74 QUnit.deepEqual(pluginSize, size(640 * 3 / 2.0, 480 * 3 / 2.0)); | |
75 | |
76 // 5. Client dimensions larger than host's by >2x. | |
77 pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
78 size(1280, 1024), 2.0, size(640, 480), dpi(96, 96), 1.0, false, true); | |
79 QUnit.deepEqual(pluginSize, size(1280, (1280 / 640) * 480)); | |
80 | |
81 // 6. Client X dimension larger than host's, Y dimension smaller. | |
82 pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
83 size(1152, 600), 2.0, size(1024, 768), dpi(96, 96), 1.0, false, true); | |
84 QUnit.deepEqual(pluginSize, size(1024 * (600 / 768), 600)); | |
85 }); | |
86 | |
87 test('choosePluginSize() handles low-DPI client, high-DPI host', | |
88 function() { | |
89 // 1. Client & host size the same. | |
90 var pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
91 size(640, 480), 1.0, size(640, 480), dpi(192, 192), 1.0, false, true); | |
92 QUnit.deepEqual(pluginSize, size(640, 480)); | |
93 | |
94 // 2. Client logical dimensions smaller than host's. | |
95 pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
96 size(640, 480), 1.0, size(1024, 600), dpi(192, 192), 1.0, false, true); | |
97 QUnit.deepEqual(pluginSize, size(640, (640 / 1024) * 600)); | |
98 | |
99 // 3. Client Y dimension larger than host's, X dimension smaller. | |
100 pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
101 size(640, 640), 1.0, size(1024, 600), dpi(192, 192), 1.0, false, true); | |
102 QUnit.deepEqual(pluginSize, size(640, (640 / 1024) * 600)); | |
103 | |
104 // 4. Client dimensions larger than host's by <2x. | |
105 pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
106 size(1280, 900), 1.0, size(640, 480), dpi(192, 192), 1.0, false, true); | |
107 QUnit.deepEqual(pluginSize, size(640, 480)); | |
108 | |
109 // 5. Client dimensions larger than host's by >2x. | |
110 pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
111 size(1280, 1024), 1.0, size(640, 480), dpi(192, 192), 1.0, false, true); | |
112 QUnit.deepEqual(pluginSize, size(1280, (1280 / 640) * 480)); | |
113 | |
114 // 6. Client X dimension larger than host's, Y dimension smaller. | |
115 pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
116 size(1152, 600), 1.0, size(1024, 768), dpi(192, 192), 1.0, false, true); | |
117 QUnit.deepEqual(pluginSize, size(1024 * (600 / 768), 600)); | |
118 }); | |
119 | |
120 test('choosePluginSize() handles high-DPI client and host', | |
121 function() { | |
122 // 1. Client & host size the same. | |
123 var pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
124 size(640, 480), 2.0, size(640, 480), dpi(192, 192), 1.0, false, true); | |
125 QUnit.deepEqual(pluginSize, size(640, 480)); | |
126 | |
127 // 2. Client logical dimensions smaller than host's. | |
128 pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
129 size(640, 480), 2.0, size(1024, 600), dpi(192, 192), 1.0, false, true); | |
130 QUnit.deepEqual(pluginSize, size(1024 / 2.0, 600 / 2.0)); | |
131 | |
132 // 3. Client Y dimension larger than host's, X dimension smaller. | |
133 pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
134 size(640, 640), 2.0, size(1024, 600), dpi(192, 192), 1.0, false, true); | |
135 QUnit.deepEqual(pluginSize, size(1024 / 2.0, 600 / 2.0)); | |
136 | |
137 // 4. Client logical dimensions larger than host's by <2x. | |
138 // Host dimensions fit into the client's _device_ dimensions 3x, so the | |
139 // size in client DIPs should be 1:3/2. | |
140 pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
141 size(1280, 900), 2.0, size(640, 480), dpi(192, 192), 1.0, false, true); | |
142 QUnit.deepEqual(pluginSize, size(640 * 3 / 2.0, 480 * 3 / 2.0)); | |
143 | |
144 // 5. Client dimensions larger than host's by >2x. | |
145 pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
146 size(1280, 1024), 2.0, size(640, 480), dpi(192, 192), 1.0, false, true); | |
147 QUnit.deepEqual(pluginSize, size(1280, (1280 / 640) * 480)); | |
148 | |
149 // 6. Client X dimension larger than host's, Y dimension smaller. | |
150 pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
151 size(1152, 600), 2.0, size(1024, 768), dpi(192, 192), 1.0, false, true); | |
152 QUnit.deepEqual(pluginSize, size(1024 / 2.0, 768 / 2.0)); | |
153 }); | |
154 | |
155 test('choosePluginSize() handles high-DPI client, 150% DPI host', | |
156 function() { | |
157 // 1. Client & host size the same. | |
158 var pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
159 size(640, 480), 2.0, size(640, 480), dpi(144, 144), 1.0, false, true); | |
160 QUnit.deepEqual(pluginSize, size(640, 480)); | |
161 | |
162 // 2. Client dimensions smaller than host's. | |
163 pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
164 size(640, 480), 2.0, size(1024, 600), dpi(144, 144), 1.0, false, true); | |
165 QUnit.deepEqual(pluginSize, size(1024 / 2.0, 600 / 2.0)); | |
166 | |
167 // 3. Client Y dimension larger than host's, X dimension smaller. | |
168 pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
169 size(640, 640), 2.0, size(1024, 600), dpi(144, 144), 1.0, false, true); | |
170 QUnit.deepEqual(pluginSize, size(1024 / 2.0, 600 / 2.0)); | |
171 | |
172 // 4. Client dimensions larger than host's by <2x. | |
173 // Host dimensions fit into the client's _device_ dimensions 3x, so the | |
174 // size in client DIPs should be 1:3/2. | |
175 pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
176 size(1280, 900), 2.0, size(640, 480), dpi(144, 144), 1.0, false, true); | |
177 QUnit.deepEqual(pluginSize, size(640 * 3 / 2.0, 480 * 3 / 2.0)); | |
178 | |
179 // 5. Client dimensions larger than host's by >2x. | |
180 pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
181 size(1280, 1024), 2.0, size(640, 480), dpi(144, 144), 1.0, false, true); | |
182 QUnit.deepEqual(pluginSize, size(1280, (1280 / 640) * 480)); | |
183 | |
184 // 6. Client X dimension larger than host's, Y dimension smaller. | |
185 pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
186 size(1152, 600), 2.0, size(1024, 768), dpi(144, 144), 1.0, false, true); | |
187 QUnit.deepEqual(pluginSize, size(1024 / 2.0, 768 / 2.0)); | |
188 }); | |
189 | |
190 test('choosePluginSize() handles high-DPI client, 125% DPI host', | |
191 function() { | |
192 // 1. Client & host size the same. | |
193 var pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
194 size(640, 480), 2.0, size(640, 480), dpi(120, 120), 1.0, false, true); | |
195 QUnit.deepEqual(pluginSize, size(640, 480)); | |
196 | |
197 // 2. Client dimensions smaller than host's. | |
198 pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
199 size(640, 480), 2.0, size(1024, 600), dpi(120, 120), 1.0, false, true); | |
200 QUnit.deepEqual(pluginSize, size(640, 600 * (640 / 1024))); | |
201 | |
202 // 3. Client Y dimension larger than host's, X dimension smaller. | |
203 pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
204 size(640, 640), 2.0, size(1024, 600), dpi(120, 120), 1.0, false, true); | |
205 QUnit.deepEqual(pluginSize, size(640, 600 * (640 / 1024))); | |
206 | |
207 // 4. Client dimensions larger than host's by <2x. | |
208 // Host dimensions fit into the client's _device_ dimensions 3x, so the | |
209 // size in client DIPs should be 1:3/2. | |
210 pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
211 size(1280, 900), 2.0, size(640, 480), dpi(120, 120), 1.0, false, true); | |
212 QUnit.deepEqual(pluginSize, size(640 * 3 / 2.0, 480 * 3 / 2.0)); | |
213 | |
214 // 5. Client dimensions larger than host's by >2x. | |
215 pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
216 size(1280, 1024), 2.0, size(640, 480), dpi(120, 120), 1.0, false, true); | |
217 QUnit.deepEqual(pluginSize, size(1280, (1280 / 640) * 480)); | |
218 | |
219 // 6. Client X dimension larger than host's, Y dimension smaller. | |
220 pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
221 size(1152, 600), 2.0, size(1024, 768), dpi(120, 120), 1.0, false, true); | |
222 QUnit.deepEqual(pluginSize, size(1024 * (600 / 768), 600)); | |
223 }); | |
224 | |
225 test('choosePluginSize() with shrink-to-fit disabled', | |
226 function() { | |
227 // 1. Client & host size the same. | |
228 var pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
229 size(640, 480), 1.0, size(640, 480), dpi(96, 96), 1.0, false, false); | |
230 QUnit.deepEqual(pluginSize, size(640, 480)); | |
231 | |
232 // 2. Client logical dimensions smaller than host's. | |
233 pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
234 size(640, 480), 1.0, size(1024, 600), dpi(96, 96), 1.0, false, false); | |
235 QUnit.deepEqual(pluginSize, size(1024, 600)); | |
236 | |
237 // 3. Client dimensions larger than host's by <2x. | |
238 pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
239 size(1280, 900), 1.0, size(640, 480), dpi(96, 96), 1.0, false, false); | |
240 QUnit.deepEqual(pluginSize, size(640, 480)); | |
241 | |
242 // 4. Client dimensions larger than host's by >2x. | |
243 pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
244 size(1280, 1024), 1.0, size(640, 480), dpi(96, 96), 1.0, false, false); | |
245 QUnit.deepEqual(pluginSize, size(1280, (1280 / 640) * 480)); | |
246 | |
247 // 5. Client smaller than host, client high-DPI, host low-DPI. | |
248 pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
249 size(640, 480), 2.0, size(1024, 600), dpi(96, 96), 1.0, false, false); | |
250 QUnit.deepEqual(pluginSize, size(1024, 600)); | |
251 | |
252 // 6. Client smaller than host, client low-DPI, host high-DPI. | |
253 pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
254 size(640, 480), 1.0, size(1024, 600), dpi(192, 192), 1.0, false, false); | |
255 QUnit.deepEqual(pluginSize, size(1024, 600)); | |
256 | |
257 // 7. Client smaller than host, both high-DPI. | |
258 pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
259 size(640, 480), 2.0, size(1024, 600), dpi(192, 192), 1.0, false, false); | |
260 QUnit.deepEqual(pluginSize, size(512, (512 / 1024) * 600)); | |
261 | |
262 // 8. Client smaller than host, client high-DPI, host 150% DPI. | |
263 pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
264 size(640, 480), 2.0, size(1024, 600), dpi(144, 144), 1.0, false, false); | |
265 QUnit.deepEqual(pluginSize, size(512, (512 / 1024) * 600)); | |
266 }); | |
267 | |
268 test('choosePluginSize() full-screen multi-monitor optimization', | |
269 function() { | |
270 // Each test has a host sized to approximate two or more monitors. | |
271 | |
272 // 1. Client & host per-monitor dimensions match, two monitors side-by-side. | |
273 var pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
274 size(640, 480), 1.0, size(2 * 640, 480), dpi(96, 96), 1.0, true, true); | |
275 QUnit.deepEqual(pluginSize, size(2 * 640, 480)); | |
276 | |
277 // 2. Client & host per-monitor dimensions match, two monitors stacked. | |
278 pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
279 size(640, 480), 1.0, size(640, 2 * 480), dpi(96, 96), 1.0, true, true); | |
280 QUnit.deepEqual(pluginSize, size(640, 2 * 480)); | |
281 | |
282 // 3. Client larger, two monitors stacked. | |
283 pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
284 size(1024, 768), 1.0, size(640, 2 * 480), dpi(96, 96), 1.0, true, true); | |
285 QUnit.deepEqual(pluginSize, size(640 * (768 / (2 * 480)), 768)); | |
286 | |
287 // 4. Client smaller, two monitors stacked. | |
288 pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
289 size(640, 480), 1.0, size(1024, 2 * 768), dpi(96, 96), 1.0, true, true); | |
290 QUnit.deepEqual(pluginSize, size(640, 2 * 768 * (640 / 1024))); | |
291 | |
292 // 5. Client wide-screen, host two standard monitors stacked. | |
293 pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
294 size(1920, 1080), 1.0, size(1024, 2 * 768), dpi(96, 96), 1.0, | |
295 true, true); | |
296 QUnit.deepEqual(pluginSize, size(1024 * (1080 / (2 * 768)), 1080)); | |
297 | |
298 // 6. Client & host per-monitor dimensions match, two monitors stacked, | |
299 // high-DPI client. | |
300 pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
301 size(640, 480), 2.0, size(640, 2 * 480), dpi(96, 96), 1.0, true, true); | |
302 QUnit.deepEqual(pluginSize, size(640, 2 * 480)); | |
303 | |
304 // 7. Client & host per-monitor dimensions match, two monitors stacked, | |
305 // high-DPI host. | |
306 pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
307 size(640, 480), 1.0, size(640, 2 * 480), dpi(192, 192), | |
308 1.0, true, true); | |
309 QUnit.deepEqual(pluginSize, size(640, 2 * 480)); | |
310 | |
311 // 8. Client & host per-monitor dimensions match, two monitors stacked, | |
312 // high-DPI client & host. | |
313 pluginSize = remoting.DesktopConnectedView.choosePluginSize( | |
314 size(640, 480), 2.0, size(640, 2 * 480), dpi(192, 192), | |
315 1.0, true, true); | |
316 QUnit.deepEqual(pluginSize, size(640 / 2.0, (2 * 480) / 2.0)); | |
317 }); | |
318 | |
319 })(); | |
OLD | NEW |