From 8af4148dc10f18bf67e39442ee93169cb66382d5 Mon Sep 17 00:00:00 2001 --- browser/devtools/debugger/debugger-controller.js | 36 ++++++- browser/devtools/debugger/debugger-panes.js | 17 +++- browser/devtools/debugger/test/browser.ini | 1 + .../debugger/test/browser_dbg_addon-sources.js | 108 ++++++++++++++++++++ browser/devtools/debugger/test/head.js | 29 ++++++ browser/devtools/framework/ToolboxProcess.jsm | 31 ++++-- .../devtools/framework/toolbox-process-window.js | 18 +++- modules/libpref/src/init/all.js | 3 + .../en-US/chrome/mozapps/extensions/extensions.dtd | 1 + toolkit/mozapps/extensions/content/extensions.js | 55 +++++++--- toolkit/mozapps/extensions/content/extensions.xml | 31 +++++- toolkit/mozapps/extensions/content/extensions.xul | 6 ++ .../mozapps/extensions/internal/XPIProvider.jsm | 4 + .../extensions/internal/XPIProviderUtils.js | 2 +- .../test/addons/test_jetpack/bootstrap.js | 17 ++++ .../test/addons/test_jetpack/harness-options.json | 1 + .../test/addons/test_jetpack/install.rdf | 28 ++++++ .../extensions/test/browser/browser-common.ini | 1 + .../test/browser/browser_debug_button.js | 112 +++++++++++++++++++++ toolkit/mozapps/extensions/test/browser/head.js | 3 + .../extensions/test/xpcshell/test_isDebuggable.js | 36 +++++++ .../extensions/test/xpcshell/xpcshell-shared.ini | 1 + 22 files changed, 508 insertions(+), 33 deletions(-) create mode 100644 browser/devtools/debugger/test/browser_dbg_addon-sources.js create mode 100644 toolkit/mozapps/extensions/test/addons/test_jetpack/bootstrap.js create mode 100644 toolkit/mozapps/extensions/test/addons/test_jetpack/harness-options.json create mode 100644 toolkit/mozapps/extensions/test/addons/test_jetpack/install.rdf create mode 100644 toolkit/mozapps/extensions/test/browser/browser_debug_button.js create mode 100644 toolkit/mozapps/extensions/test/xpcshell/test_isDebuggable.js * * * Leak fix
125 lines
3.4 KiB
JavaScript
125 lines
3.4 KiB
JavaScript
/* 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";
|
|
|
|
const { classes: Cc, interfaces: Ci, utils: Cu } = Components;
|
|
|
|
let { gDevTools } = Cu.import("resource:///modules/devtools/gDevTools.jsm", {});
|
|
let { devtools } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
|
|
let { Services } = Cu.import("resource://gre/modules/Services.jsm", {});
|
|
let { debuggerSocketConnect, DebuggerClient } =
|
|
Cu.import("resource://gre/modules/devtools/dbg-client.jsm", {});
|
|
let { ViewHelpers } =
|
|
Cu.import("resource:///modules/devtools/ViewHelpers.jsm", {});
|
|
|
|
/**
|
|
* Shortcuts for accessing various debugger preferences.
|
|
*/
|
|
let Prefs = new ViewHelpers.Prefs("devtools.debugger", {
|
|
chromeDebuggingHost: ["Char", "chrome-debugging-host"],
|
|
chromeDebuggingPort: ["Int", "chrome-debugging-port"]
|
|
});
|
|
|
|
let gToolbox, gClient;
|
|
|
|
function connect() {
|
|
window.removeEventListener("load", connect);
|
|
// Initiate the connection
|
|
let transport = debuggerSocketConnect(
|
|
Prefs.chromeDebuggingHost,
|
|
Prefs.chromeDebuggingPort
|
|
);
|
|
gClient = new DebuggerClient(transport);
|
|
gClient.connect(() => {
|
|
let addonID = getParameterByName("addonID");
|
|
|
|
if (addonID) {
|
|
gClient.listAddons(({addons}) => {
|
|
let addonActor = addons.filter(addon => addon.id === addonID).pop();
|
|
openToolbox({ addonActor: addonActor.actor });
|
|
});
|
|
} else {
|
|
gClient.listTabs(openToolbox);
|
|
}
|
|
});
|
|
}
|
|
|
|
window.addEventListener("load", connect);
|
|
|
|
function openToolbox(form) {
|
|
let options = {
|
|
form: form,
|
|
client: gClient,
|
|
chrome: true
|
|
};
|
|
devtools.TargetFactory.forRemoteTab(options).then(target => {
|
|
let frame = document.getElementById("toolbox-iframe");
|
|
let options = { customIframe: frame };
|
|
gDevTools.showToolbox(target,
|
|
"jsdebugger",
|
|
devtools.Toolbox.HostType.CUSTOM,
|
|
options)
|
|
.then(onNewToolbox);
|
|
});
|
|
}
|
|
|
|
function onNewToolbox(toolbox) {
|
|
gToolbox = toolbox;
|
|
bindToolboxHandlers();
|
|
raise();
|
|
}
|
|
|
|
function bindToolboxHandlers() {
|
|
gToolbox.once("destroyed", quitApp);
|
|
window.addEventListener("unload", onUnload);
|
|
}
|
|
|
|
function onUnload() {
|
|
window.removeEventListener("unload", onUnload);
|
|
window.removeEventListener("message", onMessage);
|
|
gToolbox.destroy();
|
|
}
|
|
|
|
function onMessage(event) {
|
|
try {
|
|
let json = JSON.parse(event.data);
|
|
switch (json.name) {
|
|
case "toolbox-raise":
|
|
raise();
|
|
break;
|
|
case "toolbox-title":
|
|
setTitle(json.data.value);
|
|
break;
|
|
}
|
|
} catch(e) { Cu.reportError(e); }
|
|
}
|
|
|
|
window.addEventListener("message", onMessage);
|
|
|
|
function raise() {
|
|
window.focus();
|
|
}
|
|
|
|
function setTitle(title) {
|
|
document.title = title;
|
|
}
|
|
|
|
function quitApp() {
|
|
let quit = Cc["@mozilla.org/supports-PRBool;1"]
|
|
.createInstance(Ci.nsISupportsPRBool);
|
|
Services.obs.notifyObservers(quit, "quit-application-requested", null);
|
|
|
|
let shouldProceed = !quit.data;
|
|
if (shouldProceed) {
|
|
Services.startup.quit(Ci.nsIAppStartup.eForceQuit);
|
|
}
|
|
}
|
|
|
|
function getParameterByName (name) {
|
|
let name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
|
|
let regex = new RegExp("[\\?&]" + name + "=([^&#]*)");
|
|
let results = regex.exec(window.location.search);
|
|
return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
|
|
}
|