/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
// Test very basic CDP features.
const TEST_URI = "data:text/html;charset=utf-8,default-test-page";
add_task(async function testCDP() {
// Open a test page, to prevent debugging the random default page
const tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, TEST_URI);
// Start the CDP server
await RemoteAgent.listen(Services.io.newURI("http://localhost:9222"));
// Retrieve the chrome-remote-interface library object
const CDP = await getCDP();
// Connect to the server
const client = await CDP({
target(list) {
// Ensure debugging the right target, i.e. the one for our test tab.
return list.find(target => {
return target.url == TEST_URI;
});
},
});
ok(true, "CDP client has been instantiated");
const {Browser, Log, Page} = client;
ok("Browser" in client, "Browser domain is available");
ok("Log" in client, "Log domain is available");
ok("Page" in client, "Page domain is available");
const version = await Browser.getVersion();
is(version.product, "Firefox", "Browser.getVersion works");
// receive console.log messages and print them
Log.enable();
ok(true, "Log domain has been enabled");
Log.entryAdded(({entry}) => {
const {timestamp, level, text, args} = entry;
const msg = text || args.join(" ");
console.log(`${new Date(timestamp)}\t${level.toUpperCase()}\t${msg}`);
});
// turn on navigation related events, such as DOMContentLoaded et al.
await Page.enable();
ok(true, "Page domain has been enabled");
const frameStoppedLoading = Page.frameStoppedLoading();
const navigatedWithinDocument = Page.navigatedWithinDocument();
const loadEventFired = Page.loadEventFired();
await Page.navigate({url: "data:text/html;charset=utf-8,test-page"});
ok(true, "A new page has been loaded");
await loadEventFired;
ok(true, "`Page.loadEventFired` fired");
await frameStoppedLoading;
ok(true, "`Page.frameStoppedLoading` fired");
await navigatedWithinDocument;
ok(true, "`Page.navigatedWithinDocument` fired");
await client.close();
ok(true, "The client is closed");
BrowserTestUtils.removeTab(tab);
await RemoteAgent.close();
});