/* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ "use strict"; // Test the Target domain add_task(async function() { // 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 { webSocketDebuggerUrl } = await CDP.Version(); const client = await CDP({ target: webSocketDebuggerUrl }); ok(true, "CDP client has been instantiated"); const { Target } = client; ok("Target" in client, "Target domain is available"); // Wait for all Target.targetCreated event. One for each tab, plus the one // for the main process target. const targetsCreated = new Promise(resolve => { let targets = 0; const unsubscribe = Target.targetCreated(event => { if (++targets >= gBrowser.tabs.length + 1) { unsubscribe(); resolve(); } }); }); Target.setDiscoverTargets({ discover: true }); await targetsCreated; const { browserContextId } = await Target.createBrowserContext(); const targetCreated = Target.targetCreated(); const { targetId } = await Target.createTarget({ browserContextId }); ok(true, `Target created: ${targetId}`); ok(!!targetId, "createTarget returns a non-empty target id"); const { targetInfo } = await targetCreated; is( targetId, targetInfo.targetId, "createTarget and targetCreated refers to the same target id" ); is( browserContextId, targetInfo.browserContextId, "the created target is reported to be of the same browser context" ); is(targetInfo.type, "page", "The target is a page"); // Releasing the browser context is going to remove the tab opened when calling createTarget await Target.disposeBrowserContext({ browserContextId }); await client.close(); ok(true, "The client is closed"); await RemoteAgent.close(); });