diff options
Diffstat (limited to 'browser/devtools/debugger/test/browser_dbg_listtabs-01.js')
-rw-r--r-- | browser/devtools/debugger/test/browser_dbg_listtabs-01.js | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/browser/devtools/debugger/test/browser_dbg_listtabs-01.js b/browser/devtools/debugger/test/browser_dbg_listtabs-01.js new file mode 100644 index 000000000..12b0ce77c --- /dev/null +++ b/browser/devtools/debugger/test/browser_dbg_listtabs-01.js @@ -0,0 +1,102 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Make sure the listTabs request works as specified. + +var gTab1 = null; +var gTab1Actor = null; + +var gTab2 = null; +var gTab2Actor = null; + +var gClient = null; + +function test() +{ + let transport = DebuggerServer.connectPipe(); + gClient = new DebuggerClient(transport); + gClient.connect(function(aType, aTraits) { + is(aType, "browser", "Root actor should identify itself as a browser."); + test_first_tab(); + }); +} + +/** + * Verify that a new tab shows up in a listTabs call. + */ +function test_first_tab() +{ + gTab1 = addTab(TAB1_URL, function() { + gClient.listTabs(function(aResponse) { + for each (let tab in aResponse.tabs) { + if (tab.url == TAB1_URL) { + gTab1Actor = tab.actor; + } + } + ok(gTab1Actor, "Should find a tab actor for tab1."); + test_second_tab(); + }); + }); +} + +function test_second_tab() +{ + gTab2 = addTab(TAB2_URL, function() { + gClient.listTabs(function(aResponse) { + // Verify that tab1 has the same actor it used to. + let foundTab1 = false; + for each (let tab in aResponse.tabs) { + if (tab.url == TAB1_URL) { + is(tab.actor, gTab1Actor, "Tab1's actor shouldn't have changed."); + foundTab1 = true; + } + if (tab.url == TAB2_URL) { + gTab2Actor = tab.actor; + } + } + ok(foundTab1, "Should have found an actor for tab 1."); + ok(gTab2Actor != null, "Should find an actor for tab2."); + + test_remove_tab(); + }); + }); +} + +function test_remove_tab() +{ + removeTab(gTab1); + gTab1 = null; + gClient.listTabs(function(aResponse) { + // Verify that tab1 is no longer included in listTabs. + let foundTab1 = false; + for each (let tab in aResponse.tabs) { + if (tab.url == TAB1_URL) { + ok(false, "Tab1 should be gone."); + } + } + ok(!foundTab1, "Tab1 should be gone."); + test_attach_removed_tab(); + }); +} + +function test_attach_removed_tab() +{ + removeTab(gTab2); + gTab2 = null; + gClient.addListener("paused", function(aEvent, aPacket) { + ok(false, "Attaching to an exited tab actor shouldn't generate a pause."); + finish_test(); + }); + + gClient.request({ to: gTab2Actor, type: "attach" }, function(aResponse) { + is(aResponse.type, "exited", "Tab should consider itself exited."); + finish_test(); + }); +} + +function finish_test() +{ + gClient.close(function() { + finish(); + }); +} |