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