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

Side by Side Diff: chrome/test/data/extensions/api_test/offscreen_tabs/test.js

Issue 7720002: Chrome Extensions chrome.experimental.offscreenTabs.* API implementation, docs, and test. (Closed) Base URL: http://src.chromium.org/svn/trunk/src/
Patch Set: '' Created 9 years, 4 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 | Annotate | Revision Log
Property Changes:
Added: svn:eol-style
+ LF
OLDNEW
(Empty)
1 // Copyright (c) 2011 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 var pass = chrome.test.callbackPass;
6 var fail = chrome.test.callbackFail;
7 var assertEq = chrome.test.assertEq;
8 var assertTrue = chrome.test.assertTrue;
9
10 var extensionPath =
11 location.href.substring(0, location.href.lastIndexOf("/") + 1);
12
13 var inTabs = [
14 { "url":extensionPath + "a.html",
15 "width":200,
16 "height":200
17 },
18 { "url":extensionPath + "b.html",
19 "width":200,
20 "height":200
21 },
22 { "url":extensionPath + "c.html",
23 "width":1000,
24 "height":800
25 }
26 ];
27
28 // Wait this long for chrome to navigate
29 // TODO listen for onUpdated once its implemented in the API
Ken Russell (switch to Gerrit) 2011/08/23 22:46:53 TODO(alexbost):. Also, "it's".
alexbost 2011/08/24 20:06:21 Done.
30 var sleepTime = 100;
Ken Russell (switch to Gerrit) 2011/08/23 22:46:53 In general the use of setTimeout and arbitrary del
alexbost 2011/08/24 20:06:21 Agreed. Putting it on top of my list.
31
32 // Tab management
33 var tabs = [];
34
35 // Mouse
36
37 var tabMouse;
38
39 var mouseEvent = {
40 "button":0,
41 "altKey":false,
42 "ctrlKey":false,
43 "shiftKey":false
44 }
Ken Russell (switch to Gerrit) 2011/08/23 22:46:53 Missing ";".
alexbost 2011/08/24 20:06:21 Done.
45
46 var x = 11;
47 var y = 11;
Ken Russell (switch to Gerrit) 2011/08/23 22:46:53 It seems pretty delicate to aim for some text on t
alexbost 2011/08/24 20:06:21 I think aiming for the text is OK. It has absolute
48
49 // Keyboard
50
51 var tabKeyboard;
52
53 var keyboardEvent = {
54 "charCode":113, // q
55 "keyCode":113,
56 "altKey":false,
57 "ctrlKey":false,
58 "shiftKey":false
59 }
Ken Russell (switch to Gerrit) 2011/08/23 22:46:53 This could be a local variable in the "keyPress" f
alexbost 2011/08/24 20:06:21 Done.
60
61 // ToDataUrl
62
63 var tabsCaptured = [];
64
65 var nTabsCaptured = 2;
66
67 // Util
68
69 function compareTabs(t1, t2) {
70 assertEq(t1.url, t2.url);
71 assertEq(t1.width, t2.width);
72 assertEq(t1.height, t2.height);
73 }
74
75 function waitToNavigate(tabId, callback) {
76 function func(callMeAgain) {
77 if (callMeAgain)
78 setTimeout(func, sleepTime, false);
79 else
80 chrome.experimental.offscreenTabs.get(tabId, pass(function(tab) {
81 callback(tab);
82 }));
83 }
84 func(true);
Ken Russell (switch to Gerrit) 2011/08/23 22:46:53 I don't understand what this function is supposed
alexbost 2011/08/24 20:06:21 Done.
85 }
86
87 // Tab management --------------------------------------------------------------
88
89 function startTabManagement() {
90 var nCallbacksNotDone = inTabs.length;
91
92 for (var i=0; i<inTabs.length; i++) {
93 chrome.experimental.offscreenTabs.create(
94 { "url":inTabs[i].url,
95 "width":inTabs[i].width,
96 "height":inTabs[i].height
97 },
98 pass(function() {
99 var j = i;
100 return function(tab) {
101 tabs[j] = tab;
102
103 nCallbacksNotDone--;
104
105 if (nCallbacksNotDone == 0)
106 getAll();
107 }
108 }())
109 );
110 }
111 }
112
113 function getAll() {
114 chrome.experimental.offscreenTabs.getAll(pass(function(tabsResult) {
115 assertEq(tabsResult.length, tabs.length);
116
117 for (var i=0; i<tabs.length; i++) {
118 tabs[i].id = tabsResult[i].id;
Ken Russell (switch to Gerrit) 2011/08/23 22:46:53 This looks wrong. If you are trying to make sure t
alexbost 2011/08/24 20:06:21 Good point.
119
120 compareTabs(tabs[i], tabsResult[i]);
121 }
122
123 get();
124 }));
125 }
126
127 function get() {
128 chrome.experimental.offscreenTabs.get(tabs[0].id, pass(function(tab) {
129 compareTabs(tabs[0], tab);
130
131 update();
132 }));
133
134 chrome.experimental.offscreenTabs.
135 get(-1, fail("No offscreen tab with id: -1."));
Ken Russell (switch to Gerrit) 2011/08/23 22:46:53 This negative test is nice.
alexbost 2011/08/24 20:06:21 Done.
136 }
137
138 function update() {
139 chrome.experimental.offscreenTabs.update(tabs[1].id,
140 { "url":tabs[0].url,
141 "width":tabs[0].width,
142 "height":tabs[0].height
143 },
144 pass(function(tab) {
145 compareTabs(tabs[0], tab);
146
147 remove();
148 })
149 );
150 }
151
152 function remove() {
153 for (var i=0; i<inTabs.length; i++)
154 chrome.experimental.offscreenTabs.remove(tabs[i].id);
155
156 chrome.experimental.offscreenTabs.getAll(pass(function(tabsResult) {
157 assertEq(tabsResult.length, 0);
158 }));
159 }
160
161 // Mouse -----------------------------------------------------------------------
162
163 function startMouseEvents() {
164 chrome.experimental.offscreenTabs.create(
165 { "url":inTabs[0].url,
166 "width":inTabs[0].width,
167 "height":inTabs[0].height
168 },
169 pass(function(tab) {
170 waitToNavigate(tab.id, pass(function(tab) {
171 tabMouse = tab;
172
173 mouseClick();
174 }));
175 })
176 );
177 }
178
179 function mouseClick() {
180 mouseEvent.type = "click";
181 chrome.experimental.offscreenTabs.
182 sendMouseEvent(tabMouse.id, mouseEvent, x, y, pass(function(tab) {
183
184 waitToNavigate(tabMouse.id, pass(function(tab) {
185 assertEq(tab.url, inTabs[1].url);
186
187 tabMouse = tab;
Ken Russell (switch to Gerrit) 2011/08/23 22:46:53 This looks unnecessary.
alexbost 2011/08/24 20:06:21 This is just to set tabMouse.id which is used late
188
189 mouseWheel();
190 }));
191 })
192 );
193 }
194
195 function mouseWheel() {
196 mouseEvent.type = "mousewheel";
197 mouseEvent.wheelDeltaX = 0;
198 mouseEvent.wheelDeltaY = -100;
Ken Russell (switch to Gerrit) 2011/08/23 22:46:53 See question at top about using a div or something
alexbost 2011/08/24 20:06:21 See above.
199 chrome.experimental.offscreenTabs.
200 sendMouseEvent(tabMouse.id, mouseEvent, null, null, pass(function(tab) {
Ken Russell (switch to Gerrit) 2011/08/23 22:46:53 Pass 0 instead of null since the arguments are sup
alexbost 2011/08/24 20:06:21 Done.
201
202 waitToNavigate(tabMouse.id, pass(function(tab) {
203 assertEq(tab.url, inTabs[1].url);
204
205 mouseDownUp();
206 }));
207 })
208 );
209 }
210
211 function mouseDownUp() {
212 mouseEvent.type = "mousedown";
213 chrome.experimental.offscreenTabs.
214 sendMouseEvent(tabMouse.id, mouseEvent, x, y, pass(function(tab) {
215 })
216 );
217
218 mouseEvent.type = "mouseup";
219 chrome.experimental.offscreenTabs.
220 sendMouseEvent(tabMouse.id, mouseEvent, x, y, pass(function(tab) {
221
222 waitToNavigate(tabMouse.id, pass(function(tab) {
223 assertEq(tab.url, inTabs[2].url);
224
225 removeMouse();
226 }));
227 })
228 );
229 }
230
231 function removeMouse() {
232 chrome.experimental.offscreenTabs.remove(tabMouse.id);
Ken Russell (switch to Gerrit) 2011/08/23 22:46:53 Indentation is off.
alexbost 2011/08/24 20:06:21 Done.
233
234 chrome.experimental.offscreenTabs.getAll(pass(function(tabsResult) {
235 assertEq(tabsResult.length, 0);
236 }));
237 }
238
239 // Keyboard --------------------------------------------------------------------
240
241 function startKeyboardEvents() {
242 chrome.experimental.offscreenTabs.create(
243 { "url":inTabs[0].url,
244 "width":inTabs[0].width,
245 "height":inTabs[0].height
246 },
247 pass(function(tab) {
248 waitToNavigate(tab.id, pass(function(tab) {
249 tabKeyboard = tab;
250
251 keyPress();
252 }));
253 })
254 );
255 }
256
257 function keyPress() {
258 keyboardEvent.type = "keypress";
259 chrome.experimental.offscreenTabs.
260 sendKeyboardEvent(tabKeyboard.id, keyboardEvent, pass(function(tab) {
261 waitToNavigate(tabKeyboard.id, pass(function(tab) {
262 assertEq(tab.url, inTabs[1].url);
263
264 removeKeyboard();
265 }));
266 })
267 );
268 }
269
270 function removeKeyboard() {
271 chrome.experimental.offscreenTabs.remove(tabKeyboard.id);
Ken Russell (switch to Gerrit) 2011/08/23 22:46:53 Indentation is off.
alexbost 2011/08/24 20:06:21 Done.
272
273 chrome.experimental.offscreenTabs.getAll(pass(function(tabsResult) {
274 assertEq(tabsResult.length, 0);
275 }));
276
277 }
278
279 // toDataUrl -------------------------------------------------------------------
280
281 // The two tabs should have the same size. We want to make sure we dont get
282 // empty images back so this way we can compare two images that are supposed
283 // to be different
284 function startToDataUrl() {
285 var nCallbacksNotDone = nTabsCaptured;
286
287 for (var i=0; i<nTabsCaptured; i++) {
288 chrome.experimental.offscreenTabs.create(
289 { "url":inTabs[i].url,
290 "width":inTabs[i].width,
291 "height":inTabs[i].height
292 },
293 pass(function() {
294 var j = i;
295 return function(tab) {
296 tabsCaptured[j] = tab;
297
298 nCallbacksNotDone--;
299
300 if (nCallbacksNotDone == 0)
301 toDataUrl();
302 }
303 }())
304 );
305 }
306 }
307
308 function toDataUrl() {
309 var nCallbacksNotDone = nTabsCaptured;
310
311 for (var i=0; i<nTabsCaptured; i++) {
312 chrome.experimental.offscreenTabs.toDataUrl(
313 tabsCaptured[i].id,
314 {"format":"png"},
315 pass(function(dataUrl) {
316 var j = i;
317 return function(dataUrl) {
318 assertEq('string', typeof(dataUrl));
319 assertEq('data:image/png;base64,', dataUrl.substr(0,22));
320
321 tabsCaptured[j].dataUrl = dataUrl;
322
323 nCallbacksNotDone--;
324
325 if (nCallbacksNotDone == 0) {
326 // compare the dataUrls
327 assertTrue(tabsCaptured[0].dataUrl != tabsCaptured[1].dataUrl);
328
329 removeToDataUrl();
330 }
331 }
332 }())
333 );
334 }
335 }
336
337 function removeToDataUrl() {
338 for (var i=0; i<nTabsCaptured; i++)
339 chrome.experimental.offscreenTabs.remove(tabsCaptured[i].id);
340
341 chrome.experimental.offscreenTabs.getAll(pass(function(tabsResult) {
342 assertEq(tabsResult.length, 0);
343 }));
344 }
345
346 // Run tests ------------------------------------------------------------------
347
348 function run() {
349 chrome.test.runTests([
Ken Russell (switch to Gerrit) 2011/08/23 22:46:53 Indentation.
alexbost 2011/08/24 20:06:21 This looks right according to: http://src.chromium
350 function tabManagement() {
351 startTabManagement();
352 },
353
354 function mouseEvents() {
355 startMouseEvents();
356 },
357
358 function keyboardEvents() {
359 startKeyboardEvents();
360 },
361
362 function toDataUrl() {
363 startToDataUrl();
364 }
365 ]);
366 }
367
368 run();
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698