| 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 |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 114 }, | 114 }, |
| 115 | 115 |
| 116 function updateSelect() { | 116 function updateSelect() { |
| 117 chrome.tabs.getAllInWindow(firstWindowId, pass(function(tabs) { | 117 chrome.tabs.getAllInWindow(firstWindowId, pass(function(tabs) { |
| 118 assertEq(false, tabs[1].selected); | 118 assertEq(false, tabs[1].selected); |
| 119 assertEq(true, tabs[2].selected); | 119 assertEq(true, tabs[2].selected); |
| 120 // Select tab[1]. | 120 // Select tab[1]. |
| 121 chrome.tabs.update(tabs[1].id, {selected: true}, | 121 chrome.tabs.update(tabs[1].id, {selected: true}, |
| 122 pass(function(tab1){ | 122 pass(function(tab1){ |
| 123 // Check update of tab[1]. | 123 // Check update of tab[1]. |
| 124 chrome.test.assertEq(true, tab1.selected); | 124 chrome.test.assertEq(true, tab1.selected); |
| 125 chrome.tabs.getAllInWindow(firstWindowId, pass(function(tabs) { | 125 chrome.tabs.getAllInWindow(firstWindowId, pass(function(tabs) { |
| 126 assertEq(true, tabs[1].selected); | 126 assertEq(true, tabs[1].selected); |
| 127 assertEq(false, tabs[2].selected); | 127 assertEq(false, tabs[2].selected); |
| 128 // Select tab[2]. | 128 // Select tab[2]. |
| 129 chrome.tabs.update(tabs[2].id, {selected: true}, | 129 chrome.tabs.update(tabs[2].id, {selected: true}, |
| 130 pass(function(tab2){ | 130 pass(function(tab2){ |
| 131 // Check update of tab[2]. | 131 // Check update of tab[2]. |
| 132 chrome.test.assertEq(true, tab2.selected); | 132 chrome.test.assertEq(true, tab2.selected); |
| 133 chrome.tabs.getAllInWindow(firstWindowId, pass(function(tabs) { | 133 chrome.tabs.getAllInWindow(firstWindowId, pass(function(tabs) { |
| 134 assertEq(false, tabs[1].selected); | 134 assertEq(false, tabs[1].selected); |
| 135 assertEq(true, tabs[2].selected); | 135 assertEq(true, tabs[2].selected); |
| 136 })); | 136 })); |
| 137 })); | 137 })); |
| 138 })); | 138 })); |
| 139 })); | 139 })); |
| 140 })); | 140 })); |
| 141 }, | 141 }, |
| 142 | 142 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 155 | 155 |
| 156 // Create a bunch of tabs and record the resulting ids. | 156 // Create a bunch of tabs and record the resulting ids. |
| 157 function moveTabsSetup2() { | 157 function moveTabsSetup2() { |
| 158 var letters = ['a', 'b', 'c', 'd', 'e']; | 158 var letters = ['a', 'b', 'c', 'd', 'e']; |
| 159 for (var i in letters) { | 159 for (var i in letters) { |
| 160 chrome.tabs.create({"windowId": moveWindow1, | 160 chrome.tabs.create({"windowId": moveWindow1, |
| 161 "url": pageUrl(letters[i])}, | 161 "url": pageUrl(letters[i])}, |
| 162 pass(function(tab) { | 162 pass(function(tab) { |
| 163 var letter = tab.url[tab.url.length-6]; | 163 var letter = tab.url[tab.url.length-6]; |
| 164 moveTabIds[letter] = tab.id; | 164 moveTabIds[letter] = tab.id; |
| 165 | 165 |
| 166 // Assert on last callback that tabs were added in the order we created | 166 // Assert on last callback that tabs were added in the order we created |
| 167 // them. | 167 // them. |
| 168 if (letter == 'e') { | 168 if (letter == 'e') { |
| 169 chrome.tabs.getAllInWindow(moveWindow1, pass(function(tabs) { | 169 chrome.tabs.getAllInWindow(moveWindow1, pass(function(tabs) { |
| 170 assertEq(6, tabs.length); | 170 assertEq(6, tabs.length); |
| 171 assertEq("chrome://newtab/", tabs[0].url); | 171 assertEq("chrome://newtab/", tabs[0].url); |
| 172 assertEq(pageUrl("a"), tabs[1].url); | 172 assertEq(pageUrl("a"), tabs[1].url); |
| 173 assertEq(pageUrl("b"), tabs[2].url); | 173 assertEq(pageUrl("b"), tabs[2].url); |
| 174 assertEq(pageUrl("c"), tabs[3].url); | 174 assertEq(pageUrl("c"), tabs[3].url); |
| 175 assertEq(pageUrl("d"), tabs[4].url); | 175 assertEq(pageUrl("d"), tabs[4].url); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 188 // | 188 // |
| 189 // After: | 189 // After: |
| 190 // Window1: (newtab),a,e,c | 190 // Window1: (newtab),a,e,c |
| 191 // Window2: b,(newtab),d | 191 // Window2: b,(newtab),d |
| 192 function moveTabs() { | 192 function moveTabs() { |
| 193 chrome.tabs.move(moveTabIds['b'], {"windowId": moveWindow2, "index": 0}, | 193 chrome.tabs.move(moveTabIds['b'], {"windowId": moveWindow2, "index": 0}, |
| 194 pass(function(tabB) { | 194 pass(function(tabB) { |
| 195 chrome.test.assertEq(0, tabB.index); | 195 chrome.test.assertEq(0, tabB.index); |
| 196 chrome.tabs.move(moveTabIds['e'], {"index": 2}, | 196 chrome.tabs.move(moveTabIds['e'], {"index": 2}, |
| 197 pass(function(tabE) { | 197 pass(function(tabE) { |
| 198 chrome.test.assertEq(2, tabE.index); | 198 chrome.test.assertEq(2, tabE.index); |
| 199 chrome.tabs.move(moveTabIds['d'], {"windowId": moveWindow2, | 199 chrome.tabs.move(moveTabIds['d'], {"windowId": moveWindow2, |
| 200 "index": 2}, pass(function(tabD) { | 200 "index": 2}, pass(function(tabD) { |
| 201 chrome.test.assertEq(2, tabD.index); | 201 chrome.test.assertEq(2, tabD.index); |
| 202 })); | 202 })); |
| 203 })); | 203 })); |
| 204 })); | 204 })); |
| 205 }, | 205 }, |
| 206 | 206 |
| 207 // Check that the tab/window state is what we expect after doing moves. | 207 // Check that the tab/window state is what we expect after doing moves. |
| 208 function moveTabsCheck() { | 208 function moveTabsCheck() { |
| 209 chrome.tabs.getAllInWindow(moveWindow1, pass(function(tabs) { | 209 chrome.tabs.getAllInWindow(moveWindow1, pass(function(tabs) { |
| 210 assertEq(4, tabs.length); | 210 assertEq(4, tabs.length); |
| 211 assertEq("chrome://newtab/", tabs[0].url); | 211 assertEq("chrome://newtab/", tabs[0].url); |
| 212 assertEq(pageUrl("a"), tabs[1].url); | 212 assertEq(pageUrl("a"), tabs[1].url); |
| 213 assertEq(pageUrl("e"), tabs[2].url); | 213 assertEq(pageUrl("e"), tabs[2].url); |
| 214 assertEq(pageUrl("c"), tabs[3].url); | 214 assertEq(pageUrl("c"), tabs[3].url); |
| 215 | 215 |
| 216 chrome.tabs.getAllInWindow(moveWindow2, pass(function(tabs) { | 216 chrome.tabs.getAllInWindow(moveWindow2, pass(function(tabs) { |
| 217 assertEq(3, tabs.length); | 217 assertEq(3, tabs.length); |
| 218 assertEq(pageUrl("b"), tabs[0].url); | 218 assertEq(pageUrl("b"), tabs[0].url); |
| 219 assertEq("chrome://newtab/", tabs[1].url); | 219 assertEq("chrome://newtab/", tabs[1].url); |
| 220 assertEq(pageUrl("d"), tabs[2].url); | 220 assertEq(pageUrl("d"), tabs[2].url); |
| 221 })); | 221 })); |
| 222 })); | 222 })); |
| 223 }, | 223 }, |
| 224 | 224 |
| 225 function remove() { | 225 function remove() { |
| 226 chrome.tabs.remove(moveTabIds["d"], pass(function() { | 226 chrome.tabs.remove(moveTabIds["d"], pass(function() { |
| 227 chrome.tabs.getAllInWindow(moveWindow2, | 227 chrome.tabs.getAllInWindow(moveWindow2, |
| 228 pass(function(tabs) { | 228 pass(function(tabs) { |
| 229 assertEq(2, tabs.length); | 229 assertEq(2, tabs.length); |
| 230 assertEq(pageUrl("b"), tabs[0].url); | 230 assertEq(pageUrl("b"), tabs[0].url); |
| 231 assertEq("chrome://newtab/", tabs[1].url); | 231 assertEq("chrome://newtab/", tabs[1].url); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 246 TODO(rafaelw): This test fails in at least three distinct ways. One where | 246 TODO(rafaelw): This test fails in at least three distinct ways. One where |
| 247 the function actually fails to get anything and logs a "Internal error | 247 the function actually fails to get anything and logs a "Internal error |
| 248 while trying to capture visible region of the current tab" error from the | 248 while trying to capture visible region of the current tab" error from the |
| 249 browser process. | 249 browser process. |
| 250 function captureVisibleTab() { | 250 function captureVisibleTab() { |
| 251 // Take First Capture | 251 // Take First Capture |
| 252 chrome.tabs.captureVisibleTab(moveWindow1, | 252 chrome.tabs.captureVisibleTab(moveWindow1, |
| 253 pass(function(window1Url) { | 253 pass(function(window1Url) { |
| 254 assertEq("string", typeof(window1Url)); | 254 assertEq("string", typeof(window1Url)); |
| 255 assertTrue(window1Url.length > 0); | 255 assertTrue(window1Url.length > 0); |
| 256 | 256 |
| 257 // Take Second Capture | 257 // Take Second Capture |
| 258 chrome.tabs.captureVisibleTab(moveWindow2, | 258 chrome.tabs.captureVisibleTab(moveWindow2, |
| 259 pass(function(window2Url) { | 259 pass(function(window2Url) { |
| 260 assertEq("string", typeof(window2Url)); | 260 assertEq("string", typeof(window2Url)); |
| 261 assertTrue(window2Url.length > 0); | 261 assertTrue(window2Url.length > 0); |
| 262 assertTrue(window1Url != window2Url); | 262 assertTrue(window1Url != window2Url); |
| 263 | 263 |
| 264 // Now pass null for windowId - it should come back with something | 264 // Now pass null for windowId - it should come back with something |
| 265 // equal to either the first or second window. This is nondeterministic | 265 // equal to either the first or second window. This is nondeterministic |
| 266 // depending on whether you let chrome stay focused, or click | 266 // depending on whether you let chrome stay focused, or click |
| 267 // focus away (or are running on the try/build servers). | 267 // focus away (or are running on the try/build servers). |
| 268 chrome.tabs.captureVisibleTab(null, pass(function(url) { | 268 chrome.tabs.captureVisibleTab(null, pass(function(url) { |
| 269 assertEq("string", typeof(url)); | 269 assertEq("string", typeof(url)); |
| 270 assertTrue(url.length > 0); | 270 assertTrue(url.length > 0); |
| 271 assertTrue(url == window1Url || url == window2Url); | 271 assertTrue(url == window1Url || url == window2Url); |
| 272 })); | 272 })); |
| 273 })); | 273 })); |
| 274 })); | 274 })); |
| 275 }, */ | 275 }, */ |
| 276 | 276 |
| 277 function tabsOnCreated() { | 277 function tabsOnCreated() { |
| 278 chrome.test.listenOnce(chrome.tabs.onCreated, function(tab) { | 278 chrome.test.listenOnce(chrome.tabs.onCreated, function(tab) { |
| 279 assertEq(pageUrl("f"), tab.url); | 279 assertEq(pageUrl("f"), tab.url); |
| 280 }); | 280 }); |
| 281 | 281 |
| 282 chrome.tabs.create({"windowId": moveWindow1, "url": pageUrl("f"), | 282 chrome.tabs.create({"windowId": moveWindow1, "url": pageUrl("f"), |
| 283 "selected": true}, pass(function(tab) {})); | 283 "selected": true}, pass(function(tab) {})); |
| 284 }, | 284 }, |
| 285 | 285 |
| 286 function tabsOnUpdated() { | 286 function tabsOnUpdatedIgnoreTabArg() { |
| 287 // A third argument was added to the onUpdated event callback. |
| 288 // Test that an event handler which ignores this argument works. |
| 287 var onUpdatedCompleted = chrome.test.listenForever(chrome.tabs.onUpdated, | 289 var onUpdatedCompleted = chrome.test.listenForever(chrome.tabs.onUpdated, |
| 288 function(tabid, info) { | 290 function(tabid, changeInfo) { |
| 289 if (tabid == moveTabIds['a'] && info.status == "complete") { | 291 if (tabid == moveTabIds['a'] && changeInfo.status == "complete") { |
| 290 onUpdatedCompleted(); | 292 onUpdatedCompleted(); |
| 291 } | 293 } |
| 292 } | 294 } |
| 293 ); | 295 ); |
| 294 | 296 |
| 295 chrome.tabs.update(moveTabIds['a'], {"url": pageUrl("f")}, | 297 chrome.tabs.update(moveTabIds['a'], {"url": pageUrl("f")}, pass()); |
| 296 pass()); | 298 }, |
| 299 |
| 300 function tabsOnUpdated() { |
| 301 var onUpdatedCompleted = chrome.test.listenForever( |
| 302 chrome.tabs.onUpdated, |
| 303 function(tabid, changeInfo, tab) { |
| 304 // |tab| contains the id of the tab it describes. |
| 305 // Test that |tabid| matches this id. |
| 306 assertEq(tabid, tab.id); |
| 307 |
| 308 // If |changeInfo| has a status property, than |
| 309 // it should match the status of the tab in |tab|. |
| 310 if (changeInfo.status) { |
| 311 assertEq(changeInfo.status, tab.status); |
| 312 } |
| 313 |
| 314 if (tabid == moveTabIds['a'] && changeInfo.status == "complete") { |
| 315 onUpdatedCompleted(); |
| 316 } |
| 317 } |
| 318 ); |
| 319 |
| 320 chrome.tabs.update(moveTabIds['a'], {"url": pageUrl("f")}, pass()); |
| 297 }, | 321 }, |
| 298 | 322 |
| 299 function tabsOnMoved() { | 323 function tabsOnMoved() { |
| 300 chrome.test.listenOnce(chrome.tabs.onMoved, function(tabid, info) { | 324 chrome.test.listenOnce(chrome.tabs.onMoved, function(tabid, info) { |
| 301 assertEq(moveTabIds['a'], tabid); | 325 assertEq(moveTabIds['a'], tabid); |
| 302 }); | 326 }); |
| 303 | 327 |
| 304 chrome.tabs.move(moveTabIds['a'], {"index": 0}, pass()); | 328 chrome.tabs.move(moveTabIds['a'], {"index": 0}, pass()); |
| 305 }, | 329 }, |
| 306 | 330 |
| 307 function tabsOnSelectionChanged() { | 331 function tabsOnSelectionChanged() { |
| 308 chrome.test.listenOnce(chrome.tabs.onSelectionChanged, | 332 chrome.test.listenOnce(chrome.tabs.onSelectionChanged, |
| 309 function(tabid, info) { | 333 function(tabid, info) { |
| 310 assertEq(moveTabIds['c'], tabid); | 334 assertEq(moveTabIds['c'], tabid); |
| 311 } | 335 } |
| 312 ); | 336 ); |
| 313 | 337 |
| 314 chrome.tabs.update(moveTabIds['c'], {"selected": true}, | 338 chrome.tabs.update(moveTabIds['c'], {"selected": true}, |
| 315 pass()); | 339 pass()); |
| 316 }, | 340 }, |
| 317 | 341 |
| 318 function tabsOnRemoved() { | 342 function tabsOnRemoved() { |
| 319 chrome.test.listenOnce(chrome.tabs.onRemoved, function(tabid) { | 343 chrome.test.listenOnce(chrome.tabs.onRemoved, function(tabid) { |
| 320 assertEq(moveTabIds['c'], tabid); | 344 assertEq(moveTabIds['c'], tabid); |
| 321 }); | 345 }); |
| 322 | 346 |
| 323 chrome.tabs.remove(moveTabIds['c'], pass()); | 347 chrome.tabs.remove(moveTabIds['c'], pass()); |
| 324 }, | 348 }, |
| 325 | 349 |
| 326 function setupRelativeUrlTests() { | 350 function setupRelativeUrlTests() { |
| 327 chrome.windows.create({}, pass(function(win) { | 351 chrome.windows.create({}, pass(function(win) { |
| 328 assertTrue(win.id > 0); | 352 assertTrue(win.id > 0); |
| 329 firstWindowId = win.id; | 353 firstWindowId = win.id; |
| 330 | 354 |
| 331 chrome.windows.getAll({}, pass(function(windows) { | 355 chrome.windows.getAll({}, pass(function(windows) { |
| 332 for (var i = 0; i < windows.length; i++) { | 356 for (var i = 0; i < windows.length; i++) { |
| 333 if (windows[i].id != firstWindowId) { | 357 if (windows[i].id != firstWindowId) { |
| 334 chrome.windows.remove(windows[i].id, pass()); | 358 chrome.windows.remove(windows[i].id, pass()); |
| 335 } | 359 } |
| 336 } | 360 } |
| 337 })); | 361 })); |
| 338 })); | 362 })); |
| 339 }, | 363 }, |
| 340 | 364 |
| 341 function relativeUrlTabsCreate() { | 365 function relativeUrlTabsCreate() { |
| 342 // Will be called from relative.html | 366 // Will be called from relative.html |
| 343 window.relativePageLoaded = chrome.test.callbackAdded(); | 367 window.relativePageLoaded = chrome.test.callbackAdded(); |
| 344 var createCompleted = chrome.test.callbackAdded(); | 368 var createCompleted = chrome.test.callbackAdded(); |
| 345 | 369 |
| 346 chrome.tabs.create({windowId: firstWindowId, url: 'relative.html'}, | 370 chrome.tabs.create({windowId: firstWindowId, url: 'relative.html'}, |
| 347 function(tab){ | 371 function(tab){ |
| 348 testTabId = tab.id; | 372 testTabId = tab.id; |
| 349 createCompleted(); | 373 createCompleted(); |
| 350 } | 374 } |
| 351 ); | 375 ); |
| 352 }, | 376 }, |
| 353 | 377 |
| 354 function relativeUrlTabsUpdate() { | 378 function relativeUrlTabsUpdate() { |
| 355 // Will be called from relative.html | 379 // Will be called from relative.html |
| 356 window.relativePageLoaded = chrome.test.callbackAdded(); | 380 window.relativePageLoaded = chrome.test.callbackAdded(); |
| 357 | 381 |
| 358 chrome.tabs.update(testTabId, {url: pageUrl("a")}, function(tab) { | 382 chrome.tabs.update(testTabId, {url: pageUrl("a")}, function(tab) { |
| 359 chrome.test.assertEq(pageUrl("a"), tab.url); | 383 chrome.test.assertEq(pageUrl("a"), tab.url); |
| 360 chrome.tabs.update(tab.id, {url: "relative.html"}, function(tab) { | 384 chrome.tabs.update(tab.id, {url: "relative.html"}, function(tab) { |
| 361 }); | 385 }); |
| 362 }); | 386 }); |
| 363 }, | 387 }, |
| 364 | 388 |
| 365 function relativeUrlWindowsCreate() { | 389 function relativeUrlWindowsCreate() { |
| 366 // Will be called from relative.html | 390 // Will be called from relative.html |
| 367 window.relativePageLoaded = chrome.test.callbackAdded(); | 391 window.relativePageLoaded = chrome.test.callbackAdded(); |
| 368 | 392 |
| 369 chrome.windows.create({url: "relative.html"}); | 393 chrome.windows.create({url: "relative.html"}); |
| 370 }, | 394 }, |
| 371 | 395 |
| 372 function windowsOnCreated() { | 396 function windowsOnCreated() { |
| 373 chrome.test.listenOnce(chrome.windows.onCreated, function(window) { | 397 chrome.test.listenOnce(chrome.windows.onCreated, function(window) { |
| 374 chrome.test.assertTrue(window.width > 0); | 398 chrome.test.assertTrue(window.width > 0); |
| 375 chrome.test.assertTrue(window.height > 0); | 399 chrome.test.assertTrue(window.height > 0); |
| 376 windowEventsWindow = window; | 400 windowEventsWindow = window; |
| 377 chrome.tabs.getAllInWindow(window.id, pass(function(tabs) { | 401 chrome.tabs.getAllInWindow(window.id, pass(function(tabs) { |
| 378 assertEq(pageUrl("a"), tabs[0].url); | 402 assertEq(pageUrl("a"), tabs[0].url); |
| 379 })); | 403 })); |
| 380 }); | 404 }); |
| 381 | 405 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 393 // TODO(asargent) We still need to add tests for the following: | 417 // TODO(asargent) We still need to add tests for the following: |
| 394 // Methods: | 418 // Methods: |
| 395 // -chrome.tabs.connect | 419 // -chrome.tabs.connect |
| 396 // Events: | 420 // Events: |
| 397 // -chrome.tabs.onAttached | 421 // -chrome.tabs.onAttached |
| 398 // -chrome.tabs.onDetched | 422 // -chrome.tabs.onDetched |
| 399 // | 423 // |
| 400 // Also, it would be an improvement to check the captureVisibleTab results | 424 // Also, it would be an improvement to check the captureVisibleTab results |
| 401 // against a known-good result. | 425 // against a known-good result. |
| 402 ]); | 426 ]); |
| OLD | NEW |