forked from mirrors/gecko-dev
111 lines
3.6 KiB
JavaScript
111 lines
3.6 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"use strict";
|
|
|
|
const { DevToolsLoader } = ChromeUtils.import(
|
|
"resource://devtools/shared/loader/Loader.jsm"
|
|
);
|
|
const { DevToolsSocketStatus } = ChromeUtils.import(
|
|
"resource://devtools/shared/security/DevToolsSocketStatus.jsm"
|
|
);
|
|
|
|
add_task(async function() {
|
|
Services.prefs.setBoolPref("devtools.debugger.remote-enabled", true);
|
|
Services.prefs.setBoolPref("devtools.debugger.prompt-connection", false);
|
|
|
|
info("Without any server started, all states should be set to false");
|
|
checkSocketStatus(false, false);
|
|
|
|
info("Start a first server, expect all states to change to true");
|
|
const server = await setupDevToolsServer({ fromBrowserToolbox: false });
|
|
checkSocketStatus(true, true);
|
|
|
|
info("Start another server, expect all states to remain true");
|
|
const otherServer = await setupDevToolsServer({ fromBrowserToolbox: false });
|
|
checkSocketStatus(true, true);
|
|
|
|
info("Shutdown one of the servers, expect all states to remain true");
|
|
teardownDevToolsServer(otherServer);
|
|
checkSocketStatus(true, true);
|
|
|
|
info("Shutdown the other server, expect all states to change to false");
|
|
teardownDevToolsServer(server);
|
|
checkSocketStatus(false, false);
|
|
|
|
info(
|
|
"Start a 'browser toolbox' server, expect only the 'include' state to become true"
|
|
);
|
|
const browserToolboxServer = await setupDevToolsServer({
|
|
fromBrowserToolbox: true,
|
|
});
|
|
checkSocketStatus(true, false);
|
|
|
|
info(
|
|
"Shutdown the 'browser toolbox' server, expect all states to become false"
|
|
);
|
|
teardownDevToolsServer(browserToolboxServer);
|
|
checkSocketStatus(false, false);
|
|
|
|
Services.prefs.clearUserPref("devtools.debugger.remote-enabled");
|
|
Services.prefs.clearUserPref("devtools.debugger.prompt-connection");
|
|
});
|
|
|
|
function checkSocketStatus(expectedExcludeFalse, expectedExcludeTrue) {
|
|
const openedDefault = DevToolsSocketStatus.hasSocketOpened();
|
|
const openedExcludeFalse = DevToolsSocketStatus.hasSocketOpened({
|
|
excludeBrowserToolboxSockets: false,
|
|
});
|
|
const openedExcludeTrue = DevToolsSocketStatus.hasSocketOpened({
|
|
excludeBrowserToolboxSockets: true,
|
|
});
|
|
|
|
equal(
|
|
openedDefault,
|
|
openedExcludeFalse,
|
|
"DevToolsSocketStatus.hasSocketOpened should default to excludeBrowserToolboxSockets=false"
|
|
);
|
|
equal(
|
|
openedExcludeFalse,
|
|
expectedExcludeFalse,
|
|
"DevToolsSocketStatus matches the expectation for excludeBrowserToolboxSockets=false"
|
|
);
|
|
equal(
|
|
openedExcludeTrue,
|
|
expectedExcludeTrue,
|
|
"DevToolsSocketStatus matches the expectation for excludeBrowserToolboxSockets=true"
|
|
);
|
|
}
|
|
|
|
async function setupDevToolsServer({ fromBrowserToolbox }) {
|
|
info("Create a separate loader instance for the DevToolsServer.");
|
|
const loader = new DevToolsLoader();
|
|
const { DevToolsServer } = loader.require(
|
|
"resource://devtools/server/devtools-server.js"
|
|
);
|
|
|
|
DevToolsServer.init();
|
|
DevToolsServer.registerAllActors();
|
|
DevToolsServer.allowChromeProcess = true;
|
|
const socketOptions = {
|
|
fromBrowserToolbox,
|
|
// Pass -1 to automatically choose an available port
|
|
portOrPath: -1,
|
|
};
|
|
|
|
const listener = new SocketListener(DevToolsServer, socketOptions);
|
|
ok(listener, "Socket listener created");
|
|
await listener.open();
|
|
equal(DevToolsServer.listeningSockets, 1, "1 listening socket");
|
|
|
|
return { DevToolsServer, listener };
|
|
}
|
|
|
|
function teardownDevToolsServer({ DevToolsServer, listener }) {
|
|
info("Close the listener socket");
|
|
listener.close();
|
|
equal(DevToolsServer.listeningSockets, 0, "0 listening sockets");
|
|
|
|
info("Destroy the temporary devtools server");
|
|
DevToolsServer.destroy();
|
|
}
|