Files
tubestation/browser/devtools/framework/toolbox-process-window.js
Jordan Santell 13e58e7f00 Bug 911098 - Implement Addon Debugger UI, r=fitzgen,harthur,mossop
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
2014-03-25 10:59:14 -07:00

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, " "));
}