123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- /* Any copyright is dedicated to the Public Domain.
- http://creativecommons.org/publicdomain/zero/1.0/ */
- "use strict";
- // Avoid test timeouts that can occur while waiting for the "addon-console-works" message.
- requestLongerTimeout(2);
- const ADDON_ID = "test-devtools@mozilla.org";
- const ADDON_NAME = "test-devtools";
- const { BrowserToolboxProcess } = Cu.import("resource://devtools/client/framework/ToolboxProcess.jsm", {});
- add_task(function* () {
- yield new Promise(resolve => {
- let options = {"set": [
- // Force enabling of addons debugging
- ["devtools.chrome.enabled", true],
- ["devtools.debugger.remote-enabled", true],
- // Disable security prompt
- ["devtools.debugger.prompt-connection", false],
- // Enable Browser toolbox test script execution via env variable
- ["devtools.browser-toolbox.allow-unsafe-script", true],
- ]};
- SpecialPowers.pushPrefEnv(options, resolve);
- });
- let { tab, document } = yield openAboutDebugging("addons");
- yield waitForInitialAddonList(document);
- yield installAddon({
- document,
- path: "addons/unpacked/install.rdf",
- name: ADDON_NAME,
- });
- // Retrieve the DEBUG button for the addon
- let names = [...document.querySelectorAll("#addons .target-name")];
- let name = names.filter(element => element.textContent === ADDON_NAME)[0];
- ok(name, "Found the addon in the list");
- let targetElement = name.parentNode.parentNode;
- let debugBtn = targetElement.querySelector(".debug-button");
- ok(debugBtn, "Found its debug button");
- // Wait for a notification sent by a script evaluated the test addon via
- // the web console.
- let onCustomMessage = new Promise(done => {
- Services.obs.addObserver(function listener() {
- Services.obs.removeObserver(listener, "addon-console-works");
- done();
- }, "addon-console-works", false);
- });
- // Be careful, this JS function is going to be executed in the addon toolbox,
- // which lives in another process. So do not try to use any scope variable!
- let env = Cc["@mozilla.org/process/environment;1"]
- .getService(Ci.nsIEnvironment);
- let testScript = function () {
- /* eslint-disable no-undef */
- toolbox.selectTool("webconsole")
- .then(console => {
- let { jsterm } = console.hud;
- return jsterm.execute("myBootstrapAddonFunction()");
- })
- .then(() => toolbox.destroy());
- /* eslint-enable no-undef */
- };
- env.set("MOZ_TOOLBOX_TEST_SCRIPT", "new " + testScript);
- registerCleanupFunction(() => {
- env.set("MOZ_TOOLBOX_TEST_SCRIPT", "");
- });
- let onToolboxClose = BrowserToolboxProcess.once("close");
- debugBtn.click();
- yield onCustomMessage;
- ok(true, "Received the notification message from the bootstrap.js function");
- yield onToolboxClose;
- ok(true, "Addon toolbox closed");
- yield uninstallAddon({document, id: ADDON_ID, name: ADDON_NAME});
- yield closeAboutDebugging(tab);
- });
|