diff options
Diffstat (limited to '')
-rw-r--r-- | devtools/shared/resources/tests/head.js | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/devtools/shared/resources/tests/head.js b/devtools/shared/resources/tests/head.js new file mode 100644 index 0000000000..988592f9a1 --- /dev/null +++ b/devtools/shared/resources/tests/head.js @@ -0,0 +1,150 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +"use strict"; + +/* eslint no-unused-vars: [2, {"vars": "local"}] */ +/* import-globals-from ../../../client/shared/test/shared-head.js */ + +Services.scriptloader.loadSubScript( + "chrome://mochitests/content/browser/devtools/client/shared/test/shared-head.js", + this +); + +const { DevToolsClient } = require("devtools/client/devtools-client"); +const { DevToolsServer } = require("devtools/server/devtools-server"); + +async function createLocalClient() { + // Instantiate a minimal server + DevToolsServer.init(); + DevToolsServer.allowChromeProcess = true; + if (!DevToolsServer.createRootActor) { + DevToolsServer.registerAllActors(); + } + const transport = DevToolsServer.connectPipe(); + const client = new DevToolsClient(transport); + await client.connect(); + return client; +} + +async function _initResourceWatcherFromDescriptor( + client, + descriptor, + { listenForWorkers = false } = {} +) { + const { TargetList } = require("devtools/shared/resources/target-list"); + const { + ResourceWatcher, + } = require("devtools/shared/resources/resource-watcher"); + + const target = await descriptor.getTarget(); + const targetList = new TargetList(client.mainRoot, target); + if (listenForWorkers) { + targetList.listenForWorkers = true; + } + await targetList.startListening(); + + // Now create a ResourceWatcher + const resourceWatcher = new ResourceWatcher(targetList); + + return { client, resourceWatcher, targetList }; +} + +/** + * Instantiate a ResourceWatcher for the given tab. + * + * @param {Tab} tab + * The browser frontend's tab to connect to. + * @param {Object} options + * @param {Boolean} options.listenForWorkers + * @return {Object} object + * @return {ResourceWatcher} object.client + * The underlying client instance. + * @return {DevToolsClient} object.client + * The underlying client instance. + * @return {DevToolsClient} object.targetList + * The underlying target list instance. + */ +async function initResourceWatcher(tab, options) { + const client = await createLocalClient(); + const descriptor = await client.mainRoot.getTab({ tab }); + return _initResourceWatcherFromDescriptor(client, descriptor, options); +} + +/** + * Instantiate a multi-process ResourceWatcher, watching all type of targets. + * + * @return {Object} object + * @return {ResourceWatcher} object.client + * The underlying client instance. + * @return {DevToolsClient} object.client + * The underlying client instance. + * @return {DevToolsClient} object.targetList + * The underlying target list instance. + */ +async function initMultiProcessResourceWatcher() { + const client = await createLocalClient(); + const descriptor = await client.mainRoot.getMainProcess(); + return _initResourceWatcherFromDescriptor(client, descriptor); +} + +// Copied from devtools/shared/webconsole/test/chrome/common.js +function checkObject(object, expected) { + if (object && object.getGrip) { + object = object.getGrip(); + } + + for (const name of Object.keys(expected)) { + const expectedValue = expected[name]; + const value = object[name]; + checkValue(name, value, expectedValue); + } +} + +function checkValue(name, value, expected) { + if (expected === null) { + is(value, null, `'${name}' is null`); + } else if (value === undefined) { + is(value, undefined, `'${name}' is undefined`); + } else if (value === null) { + is(value, expected, `'${name}' has expected value`); + } else if ( + typeof expected == "string" || + typeof expected == "number" || + typeof expected == "boolean" + ) { + is(value, expected, "property '" + name + "'"); + } else if (expected instanceof RegExp) { + ok(expected.test(value), name + ": " + expected + " matched " + value); + } else if (Array.isArray(expected)) { + info("checking array for property '" + name + "'"); + ok(Array.isArray(value), `property '${name}' is an array`); + + is(value.length, expected.length, "Array has expected length"); + if (value.length !== expected.length) { + is(JSON.stringify(value, null, 2), JSON.stringify(expected, null, 2)); + } else { + checkObject(value, expected); + } + } else if (typeof expected == "object") { + info("checking object for property '" + name + "'"); + checkObject(value, expected); + } +} + +async function triggerNetworkRequests(browser, commands) { + for (let i = 0; i < commands.length; i++) { + await SpecialPowers.spawn(browser, [commands[i]], async function(code) { + const script = content.document.createElement("script"); + script.append( + content.document.createTextNode( + `async function triggerRequest() {${code}}` + ) + ); + content.document.body.append(script); + await content.wrappedJSObject.triggerRequest(); + script.remove(); + }); + } +} |