| 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 |