summaryrefslogtreecommitdiffstats
path: root/devtools/shared/resources/tests/head.js
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--devtools/shared/resources/tests/head.js150
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();
+ });
+ }
+}