gecko/browser/devtools/debugger/test/browser_dbg_listtabs.js

101 lines
2.4 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
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();
});
}