"use strict"; function scopedCuImport(path) { const scope = {}; ChromeUtils.import(path, scope); return scope; } const { loader, require } = scopedCuImport( "resource://devtools/shared/Loader.jsm" ); const { TargetFactory } = require("devtools/client/framework/target"); const { Utils: WebConsoleUtils } = require("devtools/client/webconsole/utils"); let { gDevTools } = require("devtools/client/framework/devtools"); let promise = require("promise"); /** * Open the toolbox in a given tab. * @param {XULNode} tab The tab the toolbox should be opened in. * @param {String} toolId Optional. The ID of the tool to be selected. * @param {String} hostType Optional. The type of toolbox host to be used. * @return {Promise} Resolves with the toolbox, when it has been opened. */ var openToolboxForTab = async function(tab, toolId, hostType) { info("Opening the toolbox"); let toolbox; let target = await TargetFactory.forTab(tab); await target.attach(); // Check if the toolbox is already loaded. toolbox = gDevTools.getToolbox(target); if (toolbox) { if (!toolId || (toolId && toolbox.getPanel(toolId))) { info("Toolbox is already opened"); return toolbox; } } // If not, load it now. toolbox = await gDevTools.showToolbox(target, toolId, hostType); // Make sure that the toolbox frame is focused. await new Promise(resolve => waitForFocus(resolve, toolbox.win)); info("Toolbox opened and focused"); return toolbox; }; /** * Find multiple messages in the output. * * @param object hud * The web console. * @param string text * A substring that can be found in the message. * @param selector [optional] * The selector to use in finding the message. */ function findMessages(hud, text, selector = ".message") { const messages = hud.ui.experimentalOutputNode.querySelectorAll(selector); const elements = Array.prototype.filter.call(messages, el => el.textContent.includes(text) ); return elements; }