OLD | NEW |
1 // tabs api test | 1 // tabs api test |
2 // browser_tests.exe --gtest_filter=ExtensionApiTest.Tabs | 2 // browser_tests.exe --gtest_filter=ExtensionApiTest.Tabs |
3 | 3 |
4 // We have a bunch of places where we need to remember some state from one | 4 // We have a bunch of places where we need to remember some state from one |
5 // test (or setup code) to subsequent tests. | 5 // test (or setup code) to subsequent tests. |
6 var firstWindowId = null; | 6 var firstWindowId = null; |
7 var secondWindowId = null; | 7 var secondWindowId = null; |
8 var firstTabIndex = null; | 8 var firstTabIndex = null; |
9 var testTabId = null; | 9 var testTabId = null; |
10 | 10 |
11 var moveWindow1 = null; | 11 var moveWindow1 = null; |
12 var moveWindow2 = null; | 12 var moveWindow2 = null; |
13 var moveTabIds = {}; | 13 var moveTabIds = {}; |
14 | 14 |
15 var pass = chrome.test.callbackPass; | 15 var pass = chrome.test.callbackPass; |
16 var assertEq = chrome.test.assertEq; | 16 var assertEq = chrome.test.assertEq; |
17 var assertTrue = chrome.test.assertTrue; | 17 var assertTrue = chrome.test.assertTrue; |
18 | 18 |
19 // Called by relative.html during onload. | 19 function pageUrl(letter) { |
20 function relativePageLoaded() { | 20 return chrome.extension.getURL(letter + ".html"); |
21 chrome.test.succeed(); | |
22 } | 21 } |
23 | 22 |
24 chrome.test.runTests([ | 23 chrome.test.runTests([ |
25 function getSelected() { | 24 function getSelected() { |
26 chrome.tabs.getSelected(null, pass(function(tab) { | 25 chrome.tabs.getSelected(null, pass(function(tab) { |
27 assertEq("about:blank", tab.url); | 26 assertEq("about:blank", tab.url); |
28 assertEq("about:blank", tab.title); | 27 assertEq("about:blank", tab.title); |
29 firstWindowId = tab.windowId; | 28 firstWindowId = tab.windowId; |
30 firstTabIndex = tab.index; | 29 firstTabIndex = tab.index; |
31 })); | 30 })); |
(...skipping 17 matching lines...) Expand all Loading... |
49 // Setup a new window for later tests, and open some tabs in the | 48 // Setup a new window for later tests, and open some tabs in the |
50 // first and second windows. | 49 // first and second windows. |
51 function createWindow() { | 50 function createWindow() { |
52 // TODO(asargent) Add more tests for: | 51 // TODO(asargent) Add more tests for: |
53 // 1) window sizing/positioning. | 52 // 1) window sizing/positioning. |
54 // 2) passed url (relative & absolute) | 53 // 2) passed url (relative & absolute) |
55 chrome.windows.create({}, pass(function(win) { | 54 chrome.windows.create({}, pass(function(win) { |
56 assertTrue(win.id > 0); | 55 assertTrue(win.id > 0); |
57 secondWindowId = win.id; | 56 secondWindowId = win.id; |
58 // Create first window. | 57 // Create first window. |
59 chrome.tabs.create({"windowId" : firstWindowId, "url" : "chrome://a"}, | 58 chrome.tabs.create({"windowId" : firstWindowId, "url" : pageUrl("a")}, |
60 pass(function() { | 59 pass(function() { |
61 // Create second window. | 60 // Create second window. |
62 chrome.tabs.create({"windowId" : secondWindowId, "url" : "chrome://b"}, | 61 chrome.tabs.create({"windowId" : secondWindowId, "url" :pageUrl("b")}, |
63 pass()); | 62 pass()); |
64 })); | 63 })); |
65 })); | 64 })); |
66 }, | 65 }, |
67 | 66 |
68 function getAllFirstWindow() { | 67 function getAllFirstWindow() { |
69 // TODO(asargent) Add test for passing null for windowId - this should | 68 // TODO(asargent) Add test for passing null for windowId - this should |
70 // default to the "current" window. | 69 // default to the "current" window. |
71 chrome.tabs.getAllInWindow(firstWindowId, | 70 chrome.tabs.getAllInWindow(firstWindowId, |
72 pass(function(tabs) { | 71 pass(function(tabs) { |
73 assertEq(3, tabs.length); | 72 assertEq(3, tabs.length); |
74 for (var i = 0; i < tabs.length; i++) { | 73 for (var i = 0; i < tabs.length; i++) { |
75 assertEq(firstWindowId, tabs[i].windowId); | 74 assertEq(firstWindowId, tabs[i].windowId); |
76 assertEq(i, tabs[i].index); | 75 assertEq(i, tabs[i].index); |
77 | 76 |
78 // The most recent tab should be selected | 77 // The most recent tab should be selected |
79 assertEq((i == 2), tabs[i].selected); | 78 assertEq((i == 2), tabs[i].selected); |
80 } | 79 } |
81 assertEq("about:blank", tabs[0].url); | 80 assertEq("about:blank", tabs[0].url); |
82 assertEq("chrome://newtab/", tabs[1].url); | 81 assertEq("chrome://newtab/", tabs[1].url); |
83 assertEq("chrome://a/", tabs[2].url); | 82 assertEq(pageUrl("a"), tabs[2].url); |
84 testTabId = tabs[2].id; | 83 testTabId = tabs[2].id; |
85 })); | 84 })); |
86 }, | 85 }, |
87 | 86 |
88 function getAllSecondWindow() { | 87 function getAllSecondWindow() { |
89 chrome.tabs.getAllInWindow(secondWindowId, | 88 chrome.tabs.getAllInWindow(secondWindowId, |
90 pass(function(tabs) { | 89 pass(function(tabs) { |
91 assertEq(2, tabs.length); | 90 assertEq(2, tabs.length); |
92 for (var i = 0; i < tabs.length; i++) { | 91 for (var i = 0; i < tabs.length; i++) { |
93 assertEq(secondWindowId, tabs[i].windowId); | 92 assertEq(secondWindowId, tabs[i].windowId); |
94 assertEq(i, tabs[i].index); | 93 assertEq(i, tabs[i].index); |
95 } | 94 } |
96 assertEq("chrome://newtab/", tabs[0].url); | 95 assertEq("chrome://newtab/", tabs[0].url); |
97 assertEq("chrome://b/", tabs[1].url); | 96 assertEq(pageUrl("b"), tabs[1].url); |
98 })); | 97 })); |
99 }, | 98 }, |
100 | 99 |
101 function updateUrl() { | 100 function updateUrl() { |
102 chrome.tabs.get(testTabId, pass(function(tab) { | 101 chrome.tabs.get(testTabId, pass(function(tab) { |
103 assertEq("chrome://a/", tab.url); | 102 assertEq(pageUrl("a"), tab.url); |
104 // Update url. | 103 // Update url. |
105 chrome.tabs.update(testTabId, {"url": "chrome://c/"}, | 104 chrome.tabs.update(testTabId, {"url": pageUrl("c")}, |
106 pass(function(tab){ | 105 pass(function(tab){ |
107 chrome.test.assertEq("chrome://c/", tab.url); | 106 chrome.test.assertEq(pageUrl("c"), tab.url); |
108 // Check url. | 107 // Check url. |
109 chrome.tabs.get(testTabId, pass(function(tab) { | 108 chrome.tabs.get(testTabId, pass(function(tab) { |
110 assertEq("chrome://c/", tab.url); | 109 assertEq(pageUrl("c"), tab.url); |
111 })); | 110 })); |
112 })); | 111 })); |
113 })); | 112 })); |
114 }, | 113 }, |
115 | 114 |
116 function updateSelect() { | 115 function updateSelect() { |
117 chrome.tabs.getAllInWindow(firstWindowId, pass(function(tabs) { | 116 chrome.tabs.getAllInWindow(firstWindowId, pass(function(tabs) { |
118 assertEq(false, tabs[1].selected); | 117 assertEq(false, tabs[1].selected); |
119 assertEq(true, tabs[2].selected); | 118 assertEq(true, tabs[2].selected); |
120 // Select tab[1]. | 119 // Select tab[1]. |
(...skipping 30 matching lines...) Expand all Loading... |
151 })); | 150 })); |
152 })); | 151 })); |
153 })); | 152 })); |
154 }, | 153 }, |
155 | 154 |
156 // Create a bunch of tabs and record the resulting ids. | 155 // Create a bunch of tabs and record the resulting ids. |
157 function moveTabsSetup2() { | 156 function moveTabsSetup2() { |
158 var letters = ['a', 'b', 'c', 'd', 'e']; | 157 var letters = ['a', 'b', 'c', 'd', 'e']; |
159 for (var i in letters) { | 158 for (var i in letters) { |
160 chrome.tabs.create({"windowId": moveWindow1, | 159 chrome.tabs.create({"windowId": moveWindow1, |
161 "url": "chrome://" + letters[i]}, | 160 "url": pageUrl(letters[i])}, |
162 pass(function(tab) { | 161 pass(function(tab) { |
163 var letter = tab.url[tab.url.length-2]; | 162 var letter = tab.url[tab.url.length-6]; |
164 moveTabIds[letter] = tab.id; | 163 moveTabIds[letter] = tab.id; |
165 | 164 |
166 // Assert on last callback that tabs were added in the order we created | 165 // Assert on last callback that tabs were added in the order we created |
167 // them. | 166 // them. |
168 if (letter == 'e') { | 167 if (letter == 'e') { |
169 chrome.tabs.getAllInWindow(moveWindow1, pass(function(tabs) { | 168 chrome.tabs.getAllInWindow(moveWindow1, pass(function(tabs) { |
170 assertEq(6, tabs.length); | 169 assertEq(6, tabs.length); |
171 assertEq("chrome://newtab/", tabs[0].url); | 170 assertEq("chrome://newtab/", tabs[0].url); |
172 assertEq("chrome://a/", tabs[1].url); | 171 assertEq(pageUrl("a"), tabs[1].url); |
173 assertEq("chrome://b/", tabs[2].url); | 172 assertEq(pageUrl("b"), tabs[2].url); |
174 assertEq("chrome://c/", tabs[3].url); | 173 assertEq(pageUrl("c"), tabs[3].url); |
175 assertEq("chrome://d/", tabs[4].url); | 174 assertEq(pageUrl("d"), tabs[4].url); |
176 assertEq("chrome://e/", tabs[5].url); | 175 assertEq(pageUrl("e"), tabs[5].url); |
177 })); | 176 })); |
178 } | 177 } |
179 })); | 178 })); |
180 } | 179 } |
181 }, | 180 }, |
182 | 181 |
183 // Do a series of moves so that we get the following | 182 // Do a series of moves so that we get the following |
184 // | 183 // |
185 // Before: | 184 // Before: |
186 // Window1: (newtab),a,b,c,d,e | 185 // Window1: (newtab),a,b,c,d,e |
(...skipping 15 matching lines...) Expand all Loading... |
202 })); | 201 })); |
203 })); | 202 })); |
204 })); | 203 })); |
205 }, | 204 }, |
206 | 205 |
207 // Check that the tab/window state is what we expect after doing moves. | 206 // Check that the tab/window state is what we expect after doing moves. |
208 function moveTabsCheck() { | 207 function moveTabsCheck() { |
209 chrome.tabs.getAllInWindow(moveWindow1, pass(function(tabs) { | 208 chrome.tabs.getAllInWindow(moveWindow1, pass(function(tabs) { |
210 assertEq(4, tabs.length); | 209 assertEq(4, tabs.length); |
211 assertEq("chrome://newtab/", tabs[0].url); | 210 assertEq("chrome://newtab/", tabs[0].url); |
212 assertEq("chrome://a/", tabs[1].url); | 211 assertEq(pageUrl("a"), tabs[1].url); |
213 assertEq("chrome://e/", tabs[2].url); | 212 assertEq(pageUrl("e"), tabs[2].url); |
214 assertEq("chrome://c/", tabs[3].url); | 213 assertEq(pageUrl("c"), tabs[3].url); |
215 | 214 |
216 chrome.tabs.getAllInWindow(moveWindow2, pass(function(tabs) { | 215 chrome.tabs.getAllInWindow(moveWindow2, pass(function(tabs) { |
217 assertEq(3, tabs.length); | 216 assertEq(3, tabs.length); |
218 assertEq("chrome://b/", tabs[0].url); | 217 assertEq(pageUrl("b"), tabs[0].url); |
219 assertEq("chrome://newtab/", tabs[1].url); | 218 assertEq("chrome://newtab/", tabs[1].url); |
220 assertEq("chrome://d/", tabs[2].url); | 219 assertEq(pageUrl("d"), tabs[2].url); |
221 })); | 220 })); |
222 })); | 221 })); |
223 }, | 222 }, |
224 | 223 |
225 function remove() { | 224 function remove() { |
226 chrome.tabs.remove(moveTabIds["d"], pass(function() { | 225 chrome.tabs.remove(moveTabIds["d"], pass(function() { |
227 chrome.tabs.getAllInWindow(moveWindow2, | 226 chrome.tabs.getAllInWindow(moveWindow2, |
228 pass(function(tabs) { | 227 pass(function(tabs) { |
229 assertEq(2, tabs.length); | 228 assertEq(2, tabs.length); |
230 assertEq("chrome://b/", tabs[0].url); | 229 assertEq(pageUrl("b"), tabs[0].url); |
231 assertEq("chrome://newtab/", tabs[1].url); | 230 assertEq("chrome://newtab/", tabs[1].url); |
232 })); | 231 })); |
233 })); | 232 })); |
234 }, | 233 }, |
235 | 234 |
236 function detectLanguage() { | 235 function detectLanguage() { |
237 chrome.tabs.getAllInWindow(moveWindow1, pass(function(tabs) { | 236 chrome.tabs.getAllInWindow(moveWindow1, pass(function(tabs) { |
238 chrome.tabs.detectLanguage(tabs[0].id, pass(function(lang) { | 237 chrome.tabs.detectLanguage(tabs[0].id, pass(function(lang) { |
239 assertEq("en", lang); | 238 assertEq("en", lang); |
240 })); | 239 })); |
(...skipping 28 matching lines...) Expand all Loading... |
269 assertEq("string", typeof(url)); | 268 assertEq("string", typeof(url)); |
270 assertTrue(url.length > 0); | 269 assertTrue(url.length > 0); |
271 assertTrue(url == window1Url || url == window2Url); | 270 assertTrue(url == window1Url || url == window2Url); |
272 })); | 271 })); |
273 })); | 272 })); |
274 })); | 273 })); |
275 }, */ | 274 }, */ |
276 | 275 |
277 function onCreated() { | 276 function onCreated() { |
278 chrome.test.listenOnce(chrome.tabs.onCreated, function(tab) { | 277 chrome.test.listenOnce(chrome.tabs.onCreated, function(tab) { |
279 assertEq("chrome://f/", tab.url); | 278 assertEq(pageUrl("f"), tab.url); |
280 }); | 279 }); |
281 | 280 |
282 chrome.tabs.create({"windowId": moveWindow1, "url": "chrome://f", | 281 chrome.tabs.create({"windowId": moveWindow1, "url": pageUrl("f"), |
283 "selected": true}, pass(function(tab) {})); | 282 "selected": true}, pass(function(tab) {})); |
284 }, | 283 }, |
285 | 284 |
286 function onUpdated() { | 285 function onUpdated() { |
287 var listener = chrome.test.listenForever(chrome.tabs.onUpdated, | 286 var onUpdatedCompleted = chrome.test.listenForever(chrome.tabs.onUpdated, |
288 function(tabid, info) { | 287 function(tabid, info) { |
289 if (tabid == moveTabIds['a'] && info.status == "complete") { | 288 if (tabid == moveTabIds['a'] && info.status == "complete") { |
290 listener.doneListening(); | 289 onUpdatedCompleted(); |
291 } | 290 } |
292 } | 291 } |
293 ); | 292 ); |
294 | 293 |
295 chrome.tabs.update(moveTabIds['a'], {"url": "chrome://aa"}, | 294 chrome.tabs.update(moveTabIds['a'], {"url": pageUrl("f")}, |
296 pass()); | 295 pass()); |
297 }, | 296 }, |
298 | 297 |
299 function onMoved() { | 298 function onMoved() { |
300 chrome.test.listenOnce(chrome.tabs.onMoved, function(tabid, info) { | 299 chrome.test.listenOnce(chrome.tabs.onMoved, function(tabid, info) { |
301 assertEq(moveTabIds['a'], tabid); | 300 assertEq(moveTabIds['a'], tabid); |
302 }); | 301 }); |
303 | 302 |
304 chrome.tabs.move(moveTabIds['a'], {"index": 0}, pass()); | 303 chrome.tabs.move(moveTabIds['a'], {"index": 0}, pass()); |
305 }, | 304 }, |
(...skipping 25 matching lines...) Expand all Loading... |
331 chrome.windows.getAll({}, pass(function(windows) { | 330 chrome.windows.getAll({}, pass(function(windows) { |
332 for (var i = 0; i < windows.length; i++) { | 331 for (var i = 0; i < windows.length; i++) { |
333 if (windows[i].id != firstWindowId) { | 332 if (windows[i].id != firstWindowId) { |
334 chrome.windows.remove(windows[i].id, pass()); | 333 chrome.windows.remove(windows[i].id, pass()); |
335 } | 334 } |
336 } | 335 } |
337 })); | 336 })); |
338 })); | 337 })); |
339 }, | 338 }, |
340 | 339 |
341 // The subsequent three tests all load relative.html, which calls | |
342 // this page's relativePageLoad(), which ends the test. | |
343 function relativeUrlTabsCreate() { | 340 function relativeUrlTabsCreate() { |
| 341 // Will be called from relative.html |
| 342 window.relativePageLoaded = chrome.test.callbackAdded(); |
| 343 var createCompleted = chrome.test.callbackAdded(); |
| 344 |
344 chrome.tabs.create({windowId: firstWindowId, url: 'relative.html'}, | 345 chrome.tabs.create({windowId: firstWindowId, url: 'relative.html'}, |
345 function(tab){ | 346 function(tab){ |
346 testTabId = tab.id; | 347 testTabId = tab.id; |
| 348 createCompleted(); |
347 } | 349 } |
348 ); | 350 ); |
349 }, | 351 }, |
350 | 352 |
351 function relativeUrlTabsUpdate() { | 353 function relativeUrlTabsUpdate() { |
352 chrome.tabs.update(testTabId, {url: "chrome://a/"}, function(tab) { | 354 // Will be called from relative.html |
353 chrome.test.assertEq("chrome://a/", tab.url); | 355 window.relativePageLoaded = chrome.test.callbackAdded(); |
| 356 |
| 357 chrome.tabs.update(testTabId, {url: pageUrl("a")}, function(tab) { |
| 358 chrome.test.assertEq(pageUrl("a"), tab.url); |
354 chrome.tabs.update(tab.id, {url: "relative.html"}, function(tab) { | 359 chrome.tabs.update(tab.id, {url: "relative.html"}, function(tab) { |
355 }); | 360 }); |
356 }); | 361 }); |
357 }, | 362 }, |
358 | 363 |
359 function relativeUrlWindowsCreate() { | 364 function relativeUrlWindowsCreate() { |
| 365 // Will be called from relative.html |
| 366 window.relativePageLoaded = chrome.test.callbackAdded(); |
| 367 |
360 chrome.windows.create({url: "relative.html"}); | 368 chrome.windows.create({url: "relative.html"}); |
361 } | 369 } |
362 | 370 |
363 // TODO(asargent) We still need to add tests for the following: | 371 // TODO(asargent) We still need to add tests for the following: |
364 // Methods: | 372 // Methods: |
365 // -chrome.tabs.connect | 373 // -chrome.tabs.connect |
366 // Events: | 374 // Events: |
367 // -chrome.tabs.onAttached | 375 // -chrome.tabs.onAttached |
368 // -chrome.tabs.onDetched | 376 // -chrome.tabs.onDetched |
369 // | 377 // |
370 // Also, it would be an improvement to check the captureVisibleTab results | 378 // Also, it would be an improvement to check the captureVisibleTab results |
371 // against a known-good result. | 379 // against a known-good result. |
372 ]); | 380 ]); |
OLD | NEW |