Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
- Manifest: devtools/client/shared/test/browser.toml
/* Any copyright is dedicated to the Public Domain.
"use strict";
/**
* Make sure the listTabs request works as specified.
*/
var {
DevToolsServer,
} = require("resource://devtools/server/devtools-server.js");
var {
DevToolsClient,
} = require("resource://devtools/client/devtools-client.js");
const TAB1_URL = EXAMPLE_URL + "doc_empty-tab-01.html";
const TAB2_URL = EXAMPLE_URL + "doc_empty-tab-02.html";
add_task(async function test() {
DevToolsServer.init();
DevToolsServer.registerAllActors();
const transport = DevToolsServer.connectPipe();
const client = new DevToolsClient(transport);
const [aType] = await client.connect();
is(aType, "browser", "Root actor should identify itself as a browser.");
const firstTab = await testFirstTab(client);
const secondTab = await testSecondTab(client, firstTab.front);
await testRemoveTab(client, firstTab.tab);
await testAttachRemovedTab(secondTab.tab, secondTab.front);
await client.close();
});
async function testFirstTab(client) {
const tab = await addTab(TAB1_URL);
const front = await getDescriptorActorForUrl(client, TAB1_URL);
ok(front, "Should find a target actor for the first tab.");
return { tab, front };
}
async function testSecondTab(client, firstTabFront) {
const tab = await addTab(TAB2_URL);
const firstFront = await getDescriptorActorForUrl(client, TAB1_URL);
const secondFront = await getDescriptorActorForUrl(client, TAB2_URL);
is(firstFront, firstTabFront, "First tab's actor shouldn't have changed.");
ok(secondFront, "Should find a target actor for the second tab.");
return { tab, front: secondFront };
}
async function testRemoveTab(client, firstTab) {
await removeTab(firstTab);
const front = await getDescriptorActorForUrl(client, TAB1_URL);
ok(!front, "Shouldn't find a target actor for the first tab anymore.");
}
async function testAttachRemovedTab(secondTab, secondTabFront) {
await removeTab(secondTab);
const { actorID } = secondTabFront;
try {
await secondTabFront.getFavicon({});
ok(
false,
"any request made to the descriptor for a closed tab should have failed"
);
} catch (error) {
ok(
error.message.includes(
`Connection closed, pending request to ${actorID}, type getFavicon failed`
),
"Actor is gone since the tab was removed."
);
}
}
async function getDescriptorActorForUrl(client, url) {
const tabDescriptors = await client.mainRoot.listTabs();
const tabDescriptor = tabDescriptors.find(front => front.url == url);
return tabDescriptor;
}