Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
/* Any copyright is dedicated to the Public Domain.
"use strict";
const NETWORK_RUNTIME_HOST = "localhost:6080";
const NETWORK_RUNTIME_APP_NAME = "TestNetworkApp";
const USB_RUNTIME_ID = "test-runtime-id";
const USB_DEVICE_NAME = "test device name";
const USB_APP_NAME = "TestApp";
// Test that remote runtime connections are persisted across about:debugging reloads.
add_task(async function () {
const mocks = new Mocks();
info("Test with a USB runtime");
const usbClient = mocks.createUSBRuntime(USB_RUNTIME_ID, {
name: USB_APP_NAME,
deviceName: USB_DEVICE_NAME,
});
await testRemoteClientPersistConnection(mocks, {
client: usbClient,
id: USB_RUNTIME_ID,
runtimeName: USB_APP_NAME,
sidebarName: USB_DEVICE_NAME,
type: "usb",
});
info("Test with a network runtime");
const networkClient = mocks.createNetworkRuntime(NETWORK_RUNTIME_HOST, {
name: NETWORK_RUNTIME_APP_NAME,
});
await testRemoteClientPersistConnection(mocks, {
client: networkClient,
id: NETWORK_RUNTIME_HOST,
runtimeName: NETWORK_RUNTIME_APP_NAME,
sidebarName: NETWORK_RUNTIME_HOST,
type: "network",
});
});
async function testRemoteClientPersistConnection(
mocks,
{ client, id, runtimeName, sidebarName, type }
) {
info("Open about:debugging and connect to the test runtime");
let { document, tab, window } = await openAboutDebugging();
await selectThisFirefoxPage(document, window.AboutDebugging.store);
await connectToRuntime(sidebarName, document);
await selectRuntime(sidebarName, runtimeName, document);
info("Reload about:debugging");
document = await reloadAboutDebugging(tab);
info("Wait until the remote runtime appears as connected");
await waitUntil(() => {
const sidebarItem = findSidebarItemByText(sidebarName, document);
return sidebarItem && !sidebarItem.querySelector(".qa-connect-button");
});
info("Wait until the remote runtime page is selected");
await waitUntil(() => {
const runtimeInfo = document.querySelector(".qa-runtime-name");
return runtimeInfo && runtimeInfo.textContent.includes(runtimeName);
});
// Remove the runtime without emitting an update.
// This is what happens today when we simply close Firefox for Android.
info("Remove the runtime from the list of remote runtimes");
mocks.removeRuntime(id);
info(
"Emit 'closed' on the client and wait for the sidebar item to disappear"
);
client._eventEmitter.emit("closed");
if (type === "usb") {
await waitUntilUsbDeviceIsUnplugged(sidebarName, document);
} else {
await waitUntil(
() =>
!findSidebarItemByText(sidebarName, document) &&
!findSidebarItemByText(runtimeName, document)
);
}
info("Remove the tab");
await removeTab(tab);
}