merge fx-team to mozilla-central a=merge

This commit is contained in:
Carsten "Tomcat" Book 2014-12-03 13:38:31 +01:00
commit 8514c91337
93 changed files with 415 additions and 349 deletions

View File

@ -29,7 +29,7 @@ exports.testDebugger = function(assert, done) {
set('devtools.debugger.log', true);
if (!DebuggerServer.initialized) {
DebuggerServer.init(() => true);
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}

View File

@ -36,7 +36,7 @@ exports.testDebugger = function(assert, done) {
ok(true, 'PageMod was created');
if (!DebuggerServer.initialized) {
DebuggerServer.init(() => true);
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}

View File

@ -74,7 +74,7 @@ let RemoteDebugger = {
}
// Ask for remote connections.
DebuggerServer.init(this.prompt.bind(this));
DebuggerServer.init();
// /!\ Be careful when adding a new actor, especially global actors.
// Any new global actor will be exposed and returned by the root actor.
@ -119,6 +119,8 @@ let RemoteDebugger = {
}
};
RemoteDebugger.prompt = RemoteDebugger.prompt.bind(RemoteDebugger);
let USBRemoteDebugger = {
get isDebugging() {
@ -144,6 +146,7 @@ let USBRemoteDebugger = {
try {
debug("Starting USB debugger on " + portOrPath);
this._listener = DebuggerServer.openListener(portOrPath);
this._listener.allowConnection = RemoteDebugger.prompt;
// Temporary event, until bug 942756 lands and offers a way to know
// when the server is up and running.
Services.obs.notifyObservers(null, "debugger-server-started", null);
@ -179,6 +182,7 @@ let WiFiRemoteDebugger = {
try {
debug("Starting WiFi debugger");
this._listener = DebuggerServer.openListener(-1);
this._listener.allowConnection = RemoteDebugger.prompt;
let port = this._listener.port;
debug("Started WiFi debugger on " + port);
discovery.addService("devtools", { port: port });

View File

@ -28,7 +28,7 @@ Bug 901519 - [app manager] data store for connections
Cu.import("resource://gre/modules/devtools/dbg-server.jsm");
if (!DebuggerServer.initialized) {
DebuggerServer.init(function () { return true; });
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}

View File

@ -22,7 +22,7 @@ Bug 901520 - [app manager] data store for device
Cu.import("resource://gre/modules/devtools/dbg-server.jsm");
if (!DebuggerServer.initialized) {
DebuggerServer.init(function () { return true; });
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}

View File

@ -22,7 +22,7 @@ Bug 912646 - Closing app toolbox causes phone to disconnect
Cu.import("resource://gre/modules/devtools/dbg-server.jsm");
if (!DebuggerServer.initialized) {
DebuggerServer.init(function () { return true; });
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}

View File

@ -184,7 +184,7 @@ function reload(aTarget, aWaitForTargetEvent = "navigate") {
function initServer() {
if (!DebuggerServer.initialized) {
DebuggerServer.init(() => true);
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}
}

View File

@ -10,7 +10,7 @@ var gAddon, gClient, gThreadClient;
function test() {
if (!DebuggerServer.initialized) {
DebuggerServer.init(() => true);
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}

View File

@ -11,7 +11,7 @@ let gClient, gThreadClient, gInput, gButton;
function test() {
if (!DebuggerServer.initialized) {
DebuggerServer.init(() => true);
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}

View File

@ -12,7 +12,7 @@ let gClient, gThreadClient;
function test() {
if (!DebuggerServer.initialized) {
DebuggerServer.init(() => true);
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}

View File

@ -20,7 +20,7 @@ let DebuggerServer = loader.DebuggerServer;
function test() {
if (!DebuggerServer.initialized) {
DebuggerServer.init(() => true);
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}

View File

@ -12,7 +12,7 @@ let gTab;
function test() {
if (!DebuggerServer.initialized) {
DebuggerServer.init(() => true);
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}

View File

@ -12,7 +12,7 @@ let gTab;
function test() {
if (!DebuggerServer.initialized) {
DebuggerServer.init(() => true);
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}

View File

@ -13,7 +13,7 @@ let gTab;
function test() {
if (!DebuggerServer.initialized) {
DebuggerServer.init(() => true);
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}

View File

@ -13,7 +13,7 @@ let gTab;
function test() {
if (!DebuggerServer.initialized) {
DebuggerServer.init(() => true);
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}

View File

@ -12,7 +12,7 @@ function test() {
let gClient;
if (!DebuggerServer.initialized) {
DebuggerServer.init(() => true);
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}

View File

@ -11,7 +11,7 @@ let gAddon1, gAddon1Actor, gAddon2, gAddon2Actor, gClient;
function test() {
if (!DebuggerServer.initialized) {
DebuggerServer.init(() => true);
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}

View File

@ -12,7 +12,7 @@ let gTab1, gTab1Actor, gTab2, gTab2Actor, gClient;
function test() {
if (!DebuggerServer.initialized) {
DebuggerServer.init(() => true);
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}

View File

@ -25,7 +25,7 @@ function onListChangedHandler() {
function test() {
if (!DebuggerServer.initialized) {
DebuggerServer.init(() => true);
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}

View File

@ -27,7 +27,7 @@ function request(params) {
function test() {
if (!DebuggerServer.initialized) {
DebuggerServer.init(() => true);
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}

View File

@ -14,7 +14,7 @@ let gClient;
function test() {
if (!DebuggerServer.initialized) {
DebuggerServer.init(() => true);
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}

View File

@ -12,7 +12,7 @@ let gClient;
function test() {
if (!DebuggerServer.initialized) {
DebuggerServer.init(() => true);
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}

View File

@ -13,7 +13,7 @@ let gClient;
function test() {
if (!DebuggerServer.initialized) {
DebuggerServer.init(() => true);
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}

View File

@ -13,7 +13,7 @@ let gClient;
function test() {
if (!DebuggerServer.initialized) {
DebuggerServer.init(() => true);
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}

View File

@ -551,7 +551,7 @@ AddonDebugger.prototype = {
info("Initializing an addon debugger panel.");
if (!DebuggerServer.initialized) {
DebuggerServer.init(() => true);
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}

View File

@ -62,9 +62,9 @@ function submit() {
// Initiate the connection
let transport;
try {
transport = debuggerSocketConnect(host, port);
transport = DebuggerClient.socketConnect(host, port);
} catch(e) {
// Bug 921850: catch rare exception from debuggerSocketConnect
// Bug 921850: catch rare exception from DebuggerClient.socketConnect
showError("unexpected");
return;
}

View File

@ -13,7 +13,7 @@ function test() {
waitForExplicitFinish();
if (!DebuggerServer.initialized) {
DebuggerServer.init(function () { return true; });
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}

View File

@ -61,7 +61,7 @@ function test() {
waitForExplicitFinish();
if (!DebuggerServer.initialized) {
DebuggerServer.init(function () { return true; });
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}

View File

@ -66,7 +66,7 @@ function getClient() {
let deferred = promise.defer();
if (!DebuggerServer.initialized) {
DebuggerServer.init(() => true);
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}

View File

@ -23,7 +23,7 @@ function test() {
waitForExplicitFinish();
if (!DebuggerServer.initialized) {
DebuggerServer.init(() => true);
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}

View File

@ -81,6 +81,9 @@ function OptionsPanel(iframeWindow, toolbox) {
this._prefChanged = this._prefChanged.bind(this);
this._themeRegistered = this._themeRegistered.bind(this);
this._themeUnregistered = this._themeUnregistered.bind(this);
this._disableJSClicked = this._disableJSClicked.bind(this);
this.disableJSNode = this.panelDoc.getElementById("devtools-disable-javascript");
this._addListeners();
@ -112,11 +115,6 @@ OptionsPanel.prototype = {
this.setupBrowserThemeButton();
this.populatePreferences();
this.updateDefaultTheme();
this._disableJSClicked = this._disableJSClicked.bind(this);
let disableJSNode = this.panelDoc.getElementById("devtools-disable-javascript");
disableJSNode.addEventListener("click", this._disableJSClicked, false);
}).then(() => {
this.isReady = true;
this.emit("ready");
@ -369,11 +367,15 @@ OptionsPanel.prototype = {
}.bind(menulist));
}
this.target.client.attachTab(this.target.activeTab._actor, (response) => {
this._origJavascriptEnabled = response.javascriptEnabled;
this._populateDisableJSCheckbox();
});
if (this.target.activeTab) {
this.target.client.attachTab(this.target.activeTab._actor, (response) => {
this._origJavascriptEnabled = response.javascriptEnabled;
this.disableJSNode.checked = !this._origJavascriptEnabled
this.disableJSNode.addEventListener("click", this._disableJSClicked, false);
});
} else {
this.disableJSNode.hidden = true;
}
},
updateDefaultTheme: function() {
@ -395,11 +397,6 @@ OptionsPanel.prototype = {
}
},
_populateDisableJSCheckbox: function() {
let cbx = this.panelDoc.getElementById("devtools-disable-javascript");
cbx.checked = !this._origJavascriptEnabled;
},
/**
* Disables JavaScript for the currently loaded tab. We force a page refresh
* here because setting docShell.allowJavascript to true fails to block JS
@ -447,23 +444,21 @@ OptionsPanel.prototype = {
let deferred = promise.defer();
this.destroyPromise = deferred.promise;
let disableJSNode = this.panelDoc.getElementById("devtools-disable-javascript");
disableJSNode.removeEventListener("click", this._disableJSClicked, false);
this._removeListeners();
this.panelWin = this.panelDoc = null;
this._disableJSClicked = null;
if (this.target.activeTab) {
this.disableJSNode.removeEventListener("click", this._disableJSClicked, false);
// If JavaScript is disabled we need to revert it to it's original value.
let options = {
"javascriptEnabled": this._origJavascriptEnabled
};
this.target.activeTab.reconfigure(options, () => {
this.toolbox = null;
deferred.resolve();
}, true);
}
// If JavaScript is disabled we need to revert it to it's original value.
let options = {
"javascriptEnabled": this._origJavascriptEnabled
};
this.target.activeTab.reconfigure(options, () => {
this.toolbox = null;
deferred.resolve();
}, true);
this.panelWin = this.panelDoc = this.disableJSNode = null;
Services.obs.removeObserver(this, kDeveditionChangedNotification);

View File

@ -8,7 +8,7 @@ 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 } =
let { DebuggerClient } =
Cu.import("resource://gre/modules/devtools/dbg-client.jsm", {});
let { ViewHelpers } =
Cu.import("resource:///modules/devtools/ViewHelpers.jsm", {});
@ -26,7 +26,7 @@ let gToolbox, gClient;
function connect() {
window.removeEventListener("load", connect);
// Initiate the connection
let transport = debuggerSocketConnect(
let transport = DebuggerClient.socketConnect(
Prefs.chromeDebuggingHost,
Prefs.chromeDebuggingPort
);

View File

@ -139,7 +139,7 @@ function initBackend(aUrl) {
info("Initializing a performance front.");
if (!DebuggerServer.initialized) {
DebuggerServer.init(() => true);
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}

View File

@ -234,7 +234,7 @@ function initBackend(aUrl) {
info("Initializing a shader editor front.");
if (!DebuggerServer.initialized) {
DebuggerServer.init(() => true);
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}

View File

@ -129,7 +129,7 @@ function initBackend(aUrl) {
info("Initializing a web audio editor front.");
if (!DebuggerServer.initialized) {
DebuggerServer.init(() => true);
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}

View File

@ -15,7 +15,7 @@ function test() {
// Since we test the connections set below, destroy the server in case it
// was left open.
DebuggerServer.destroy();
DebuggerServer.init(function () { return true; });
DebuggerServer.init();
DebuggerServer.addBrowserActors();
let tab = yield addTab(TEST_URI);

View File

@ -21,7 +21,7 @@
Task.spawn(function* () {
Cu.import("resource://gre/modules/devtools/dbg-server.jsm");
DebuggerServer.init(function () { return true; });
DebuggerServer.init();
DebuggerServer.addBrowserActors();
let win = yield openWebIDE();

View File

@ -21,7 +21,7 @@
Cu.import("resource://gre/modules/devtools/dbg-server.jsm");
if (!DebuggerServer.initialized) {
DebuggerServer.init(function () { return true; });
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}

View File

@ -22,7 +22,7 @@
Cu.import("resource://gre/modules/devtools/dbg-server.jsm");
if (!DebuggerServer.initialized) {
DebuggerServer.init(function () { return true; });
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}

View File

@ -43,7 +43,7 @@
Cu.import("resource://gre/modules/devtools/dbg-server.jsm");
if (!DebuggerServer.initialized) {
DebuggerServer.init(function () { return true; });
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}

View File

@ -223,7 +223,7 @@
Cu.import("resource://gre/modules/devtools/dbg-server.jsm");
if (!DebuggerServer.initialized) {
DebuggerServer.init(function () { return true; });
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}

View File

@ -216,6 +216,7 @@ browser.jar:
skin/classic/browser/devtools/filters.svg (../shared/devtools/filters.svg)
skin/classic/browser/devtools/controls.png (../shared/devtools/images/controls.png)
skin/classic/browser/devtools/controls@2x.png (../shared/devtools/images/controls@2x.png)
skin/classic/browser/devtools/performance-icons.svg (../shared/devtools/images/performance-icons.svg)
skin/classic/browser/devtools/newtab.png (../shared/devtools/images/newtab.png)
skin/classic/browser/devtools/newtab@2x.png (../shared/devtools/images/newtab@2x.png)
skin/classic/browser/devtools/newtab-inverted.png (../shared/devtools/images/newtab-inverted.png)

View File

@ -342,6 +342,7 @@ browser.jar:
skin/classic/browser/devtools/filters.svg (../shared/devtools/filters.svg)
skin/classic/browser/devtools/controls.png (../shared/devtools/images/controls.png)
skin/classic/browser/devtools/controls@2x.png (../shared/devtools/images/controls@2x.png)
skin/classic/browser/devtools/performance-icons.svg (../shared/devtools/images/performance-icons.svg)
skin/classic/browser/devtools/newtab.png (../shared/devtools/images/newtab.png)
skin/classic/browser/devtools/newtab@2x.png (../shared/devtools/images/newtab@2x.png)
skin/classic/browser/devtools/newtab-inverted.png (../shared/devtools/images/newtab-inverted.png)

View File

@ -0,0 +1,41 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16px" height="16px">
<style>
g {
fill: #edf0f1;
}
g:not(:target) {
display: none;
}
</style>
<g id="call-tree">
<rect x="1px" y="3.5px" width="14px" height="2px" rx="1" ry="1"/>
<rect x="1px" y="7.5px" width="7px" height="2px" rx="1" ry="1"/>
<rect x="11px" y="7.5px" width="4px" height="2px" rx="1" ry="1"/>
<rect x="4px" y="11.5px" width="4px" height="2px" rx="1" ry="1"/>
</g>
<g id="flamechart">
<rect x="1px" y="3px" width="14px" height="4px" style="shape-rendering: crispEdges"/>
<rect x="1px" y="5px" width="3px" height="5px" rx="1" ry="1"/>
<rect x="4px" y="5px" width="3px" height="10px" rx="1" ry="1"/>
<rect x="7px" y="5px" width="5px" height="3px" rx="1" ry="1"/>
<rect x="12px" y="5px" width="3px" height="7px" rx="1" ry="1"/>
</g>
<g id="frame">
<rect x="1px" y="4px" width="2px" height="13px" rx="1" ry="1"/>
<rect x="5px" y="12px" width="2px" height="5px" rx="1" ry="1"/>
<rect x="9px" y="9px" width="2px" height="8px" rx="1" ry="1"/>
<rect x="13px" y="7px" width="2px" height="10px" rx="1" ry="1"/>
</g>
<g id="markers">
<path d="m2.1,2.1h9.6c.6,0 1.1,.5 1.1,1.1 0,.6-.5,1.1-1.1,1.1h-9.6c-.6,0-1.1-.5-1.1-1.1 .1-.6 .5-1.1 1.1-1.1z"/>
<path d="m7.4,5.3h7.4c.6,0 1.1,.5 1.1,1.1 0,.6-.5,1.1-1.1,1.1h-7.4c-.5-.1-1-.5-1-1.1 0-.6 .5-1.1 1-1.1z"/>
<path d="m5.3,8.5h3.2c.6,0 1.1,.5 1.1,1.1 0,.6-.5,1.1-1.1,1.1h-3.2c-.6,0-1.1-.5-1.1-1.1 .1-.6 .5-1.1 1.1-1.1z"/>
<path d="m4.3,11.7h2.1c.6,0 1.1,.5 1.1,1.1 0,.6-.5,1.1-1.1,1.1h-2.1c-.6,0-1.1-.5-1.1-1.1 0-.6 .5-1.1 1.1-1.1z"/>
<path d="m4.3,11.7h2.1c.6,0 1.1,.5 1.1,1.1 0,.6-.5,1.1-1.1,1.1h-2.1c-.6,0-1.1-.5-1.1-1.1 0-.6 .5-1.1 1.1-1.1z" style="transform: translateX(7px)"/>
</g>
<g id="waterfall">
<rect x="1px" y="3px" width="8px" height="2.5px" rx="1" ry="1"/>
<rect x="5px" y="7px" width="8px" height="2.5px" rx="1" ry="1"/>
<rect x="7px" y="11.5px" width="8px" height="2.5px" rx="1" ry="1"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@ -251,6 +251,7 @@ browser.jar:
skin/classic/browser/devtools/filters.svg (../shared/devtools/filters.svg)
skin/classic/browser/devtools/controls.png (../shared/devtools/images/controls.png)
skin/classic/browser/devtools/controls@2x.png (../shared/devtools/images/controls@2x.png)
skin/classic/browser/devtools/performance-icons.svg (../shared/devtools/images/performance-icons.svg)
skin/classic/browser/devtools/newtab.png (../shared/devtools/images/newtab.png)
skin/classic/browser/devtools/newtab@2x.png (../shared/devtools/images/newtab@2x.png)
skin/classic/browser/devtools/newtab-inverted.png (../shared/devtools/images/newtab-inverted.png)
@ -696,6 +697,7 @@ browser.jar:
skin/classic/aero/browser/devtools/filters.svg (../shared/devtools/filters.svg)
skin/classic/aero/browser/devtools/controls.png (../shared/devtools/images/controls.png)
skin/classic/aero/browser/devtools/controls@2x.png (../shared/devtools/images/controls@2x.png)
skin/classic/aero/browser/devtools/performance-icons.svg (../shared/devtools/images/performance-icons.svg)
skin/classic/aero/browser/devtools/newtab.png (../shared/devtools/images/newtab.png)
skin/classic/aero/browser/devtools/newtab@2x.png (../shared/devtools/images/newtab@2x.png)
skin/classic/aero/browser/devtools/newtab-inverted.png (../shared/devtools/images/newtab-inverted.png)

View File

@ -7295,7 +7295,7 @@ var RemoteDebugger = {
_start: function rd_start() {
try {
if (!DebuggerServer.initialized) {
DebuggerServer.init(this._showConnectionPrompt.bind(this));
DebuggerServer.init();
DebuggerServer.addBrowserActors();
DebuggerServer.registerModule("resource://gre/modules/dbg-browser-actors.js");
}
@ -7303,7 +7303,8 @@ var RemoteDebugger = {
let pathOrPort = this._getPath();
if (!pathOrPort)
pathOrPort = this._getPort();
DebuggerServer.openListener(pathOrPort);
let listener = DebuggerServer.openListener(pathOrPort);
listener.allowConnection = this._showConnectionPrompt.bind(this);
dump("Remote debugger listening at path " + pathOrPort);
} catch(e) {
dump("Remote debugger didn't start: " + e);

View File

@ -354,7 +354,7 @@ function _initDebugging(port) {
}
let {DebuggerServer} = Components.utils.import('resource://gre/modules/devtools/dbg-server.jsm', {});
DebuggerServer.init(() => true);
DebuggerServer.init();
DebuggerServer.addBrowserActors();
DebuggerServer.addActors("resource://testing-common/dbg-actors.js");
@ -406,7 +406,8 @@ function _initDebugging(port) {
do_print("*******************************************************************");
do_print("")
DebuggerServer.openListener(port);
let listener = DebuggerServer.openListener(port);
listener.allowConnection = () => true;
// spin an event loop until the debugger connects.
let thr = Components.classes["@mozilla.org/thread-manager;1"]

View File

@ -28,14 +28,14 @@ function connect(onDone) {
let observer = {
observe: function (subject, topic, data) {
Services.obs.removeObserver(observer, "debugger-server-started");
let transport = debuggerSocketConnect("127.0.0.1", 6000);
let transport = DebuggerClient.socketConnect("127.0.0.1", 6000);
startClient(transport, onDone);
}
};
Services.obs.addObserver(observer, "debugger-server-started", false);
} else {
// Initialize a loopback remote protocol connection
DebuggerServer.init(function () { return true; });
DebuggerServer.init();
// We need to register browser actors to have `listTabs` working
// and also have a root actor
DebuggerServer.addBrowserActors();

View File

@ -21,7 +21,7 @@ let gClient, gActor, gActorFront;
function connect(onDone) {
// Initialize a loopback remote protocol connection
DebuggerServer.init(function () { return true; });
DebuggerServer.init();
// We need to register browser actors to have `listTabs` working
// and also have a root actor
DebuggerServer.addBrowserActors();

View File

@ -231,10 +231,10 @@ Connection.prototype = {
transport = DebuggerServer.connectPipe();
} else {
try {
transport = debuggerSocketConnect(this.host, this.port);
transport = DebuggerClient.socketConnect(this.host, this.port);
} catch (e) {
// In some cases, especially on Mac, the openOutputStream call in
// debuggerSocketConnect may throw NS_ERROR_NOT_INITIALIZED.
// DebuggerClient.socketConnect may throw NS_ERROR_NOT_INITIALIZED.
// It occurs when we connect agressively to the simulator,
// and keep trying to open a socket to the server being started in
// the simulator.
@ -299,4 +299,3 @@ Connection.prototype = {
exports.ConnectionManager = ConnectionManager;
exports.Connection = Connection;

View File

@ -21,7 +21,6 @@ this.CC = CC;
this.EXPORTED_SYMBOLS = ["DebuggerTransport",
"DebuggerClient",
"RootClient",
"debuggerSocketConnect",
"LongStringClient",
"EnvironmentClient",
"ObjectClient"];
@ -33,10 +32,6 @@ Cu.import("resource://gre/modules/Services.jsm");
let promise = Cu.import("resource://gre/modules/devtools/deprecated-sync-thenables.js").Promise;
const { defer, resolve, reject } = promise;
XPCOMUtils.defineLazyServiceGetter(this, "socketTransportService",
"@mozilla.org/network/socket-transport-service;1",
"nsISocketTransportService");
XPCOMUtils.defineLazyModuleGetter(this, "console",
"resource://gre/modules/devtools/Console.jsm");
@ -84,6 +79,11 @@ let loader = Cc["@mozilla.org/moz/jssubscript-loader;1"]
.getService(Ci.mozIJSSubScriptLoader);
loader.loadSubScript("resource://gre/modules/devtools/transport/transport.js", this);
DevToolsUtils.defineLazyGetter(this, "DebuggerSocket", () => {
let { DebuggerSocket } = devtools.require("devtools/toolkit/security/socket");
return DebuggerSocket;
});
/**
* TODO: Get rid of this API in favor of EventTarget (bug 1042642)
*
@ -371,6 +371,12 @@ DebuggerClient.Argument.prototype.getArgument = function (aParams) {
return aParams[this.position];
};
// Expose this to save callers the trouble of importing DebuggerSocket
DebuggerClient.socketConnect = function(host, port) {
// Defined here instead of just copying the function to allow lazy-load
return DebuggerSocket.connect(host, port);
};
DebuggerClient.prototype = {
/**
* Connect to the server and start exchanging protocol messages.
@ -2578,33 +2584,3 @@ EnvironmentClient.prototype = {
};
eventSource(EnvironmentClient.prototype);
/**
* Connects to a debugger server socket and returns a DebuggerTransport.
*
* @param aHost string
* The host name or IP address of the debugger server.
* @param aPort number
* The port number of the debugger server.
*/
this.debuggerSocketConnect = function (aHost, aPort)
{
let s = socketTransportService.createTransport(null, 0, aHost, aPort, null);
// By default the CONNECT socket timeout is very long, 65535 seconds,
// so that if we race to be in CONNECT state while the server socket is still
// initializing, the connection is stuck in connecting state for 18.20 hours!
s.setTimeout(Ci.nsISocketTransport.TIMEOUT_CONNECT, 2);
// openOutputStream may throw NS_ERROR_NOT_INITIALIZED if we hit some race
// where the nsISocketTransport gets shutdown in between its instantiation and
// the call to this method.
let transport;
try {
transport = new DebuggerTransport(s.openInputStream(0, 0, 0),
s.openOutputStream(0, 0, 0));
} catch(e) {
DevToolsUtils.reportException("debuggerSocketConnect", e);
throw e;
}
return transport;
}

View File

@ -18,7 +18,6 @@
var Cu = require('chrome').Cu;
var debuggerSocketConnect = Cu.import('resource://gre/modules/devtools/dbg-client.jsm', {}).debuggerSocketConnect;
var DebuggerClient = Cu.import('resource://gre/modules/devtools/dbg-client.jsm', {}).DebuggerClient;
var Promise = require('../util/promise').Promise;
@ -72,7 +71,7 @@ RdpConnection.create = function(url) {
this._emit = this._emit.bind(this);
return new Promise(function(resolve, reject) {
this.transport = debuggerSocketConnect(this.host, this.port);
this.transport = DebuggerClient.socketConnect(this.host, this.port);
this.client = new DebuggerClient(this.transport);
this.client.connect(function() {
this.client.listTabs(function(response) {

View File

@ -19,3 +19,7 @@ UNIFIED_SOURCES += [
FAIL_ON_WARNINGS = True
FINAL_LIBRARY = 'xul'
EXTRA_JS_MODULES.devtools.security += [
'socket.js',
]

View File

@ -0,0 +1,203 @@
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
/* 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";
let { Ci, Cc, CC, Cr } = require("chrome");
let Services = require("Services");
let DevToolsUtils = require("devtools/toolkit/DevToolsUtils");
let { dumpn } = DevToolsUtils;
loader.lazyRequireGetter(this, "DebuggerTransport",
"devtools/toolkit/transport/transport", true);
loader.lazyRequireGetter(this, "DebuggerServer",
"devtools/server/main", true);
DevToolsUtils.defineLazyGetter(this, "ServerSocket", () => {
return CC("@mozilla.org/network/server-socket;1",
"nsIServerSocket",
"initSpecialConnection");
});
DevToolsUtils.defineLazyGetter(this, "UnixDomainServerSocket", () => {
return CC("@mozilla.org/network/server-socket;1",
"nsIServerSocket",
"initWithFilename");
});
DevToolsUtils.defineLazyGetter(this, "nsFile", () => {
return CC("@mozilla.org/file/local;1", "nsIFile", "initWithPath");
});
DevToolsUtils.defineLazyGetter(this, "socketTransportService", () => {
return Cc["@mozilla.org/network/socket-transport-service;1"]
.getService(Ci.nsISocketTransportService);
});
const DBG_STRINGS_URI = "chrome://global/locale/devtools/debugger.properties";
/**
* Connects to a debugger server socket and returns a DebuggerTransport.
*
* @param host string
* The host name or IP address of the debugger server.
* @param port number
* The port number of the debugger server.
*/
function socketConnect(host, port) {
let s = socketTransportService.createTransport(null, 0, host, port, null);
// By default the CONNECT socket timeout is very long, 65535 seconds,
// so that if we race to be in CONNECT state while the server socket is still
// initializing, the connection is stuck in connecting state for 18.20 hours!
s.setTimeout(Ci.nsISocketTransport.TIMEOUT_CONNECT, 2);
// openOutputStream may throw NS_ERROR_NOT_INITIALIZED if we hit some race
// where the nsISocketTransport gets shutdown in between its instantiation and
// the call to this method.
let transport;
try {
transport = new DebuggerTransport(s.openInputStream(0, 0, 0),
s.openOutputStream(0, 0, 0));
} catch(e) {
DevToolsUtils.reportException("socketConnect", e);
throw e;
}
return transport;
}
/**
* Creates a new socket listener for remote connections to the DebuggerServer.
* This helps contain and organize the parts of the server that may differ or
* are particular to one given listener mechanism vs. another.
*/
function SocketListener() {}
/**
* Prompt the user to accept or decline the incoming connection. This is the
* default implementation that products embedding the debugger server may
* choose to override. A separate security handler can be specified for each
* socket via |allowConnection| on a socket listener instance.
*
* @return true if the connection should be permitted, false otherwise
*/
SocketListener.defaultAllowConnection = () => {
let bundle = Services.strings.createBundle(DBG_STRINGS_URI);
let title = bundle.GetStringFromName("remoteIncomingPromptTitle");
let msg = bundle.GetStringFromName("remoteIncomingPromptMessage");
let disableButton = bundle.GetStringFromName("remoteIncomingPromptDisable");
let prompt = Services.prompt;
let flags = prompt.BUTTON_POS_0 * prompt.BUTTON_TITLE_OK +
prompt.BUTTON_POS_1 * prompt.BUTTON_TITLE_CANCEL +
prompt.BUTTON_POS_2 * prompt.BUTTON_TITLE_IS_STRING +
prompt.BUTTON_POS_1_DEFAULT;
let result = prompt.confirmEx(null, title, msg, flags, null, null,
disableButton, null, { value: false });
if (result === 0) {
return true;
}
if (result === 2) {
DebuggerServer.closeAllListeners();
Services.prefs.setBoolPref("devtools.debugger.remote-enabled", false);
}
return false;
};
SocketListener.prototype = {
/**
* Listens on the given port or socket file for remote debugger connections.
*
* @param portOrPath int, string
* If given an integer, the port to listen on.
* Otherwise, the path to the unix socket domain file to listen on.
*/
open: function(portOrPath) {
let flags = Ci.nsIServerSocket.KeepWhenOffline;
// A preference setting can force binding on the loopback interface.
if (Services.prefs.getBoolPref("devtools.debugger.force-local")) {
flags |= Ci.nsIServerSocket.LoopbackOnly;
}
try {
let backlog = 4;
let port = Number(portOrPath);
if (port) {
this._socket = new ServerSocket(port, flags, backlog);
} else {
let file = nsFile(portOrPath);
if (file.exists())
file.remove(false);
this._socket = new UnixDomainServerSocket(file, parseInt("666", 8),
backlog);
}
this._socket.asyncListen(this);
} catch (e) {
dumpn("Could not start debugging listener on '" + portOrPath + "': " + e);
throw Cr.NS_ERROR_NOT_AVAILABLE;
}
},
/**
* Closes the SocketListener. Notifies the server to remove the listener from
* the set of active SocketListeners.
*/
close: function() {
this._socket.close();
DebuggerServer._removeListener(this);
},
/**
* Gets the port that a TCP socket listener is listening on, or null if this
* is not a TCP socket (so there is no port).
*/
get port() {
if (!this._socket) {
return null;
}
return this._socket.port;
},
/**
* Prompt the user to accept or decline the incoming connection. The default
* implementation is used unless this is overridden on a particular socket
* listener instance.
*
* @return true if the connection should be permitted, false otherwise
*/
allowConnection: SocketListener.defaultAllowConnection,
// nsIServerSocketListener implementation
onSocketAccepted:
DevToolsUtils.makeInfallible(function(socket, socketTransport) {
if (Services.prefs.getBoolPref("devtools.debugger.prompt-connection") &&
!this.allowConnection()) {
return;
}
dumpn("New debugging connection on " +
socketTransport.host + ":" + socketTransport.port);
let input = socketTransport.openInputStream(0, 0, 0);
let output = socketTransport.openOutputStream(0, 0, 0);
let transport = new DebuggerTransport(input, output);
DebuggerServer._onConnection(transport);
}, "SocketListener.onSocketAccepted"),
onStopListening: function(socket, status) {
dumpn("onStopListening, status: " + status);
}
};
// TODO: These high-level entry points will branch based on TLS vs. bare TCP as
// part of bug 1059001.
exports.DebuggerSocket = {
createListener() {
return new SocketListener();
},
connect(host, port) {
return socketConnect(host, port);
}
};

View File

@ -2121,21 +2121,7 @@ ThreadActor.prototype = {
* @returns true, if the script can be added, false otherwise.
*/
_allowSource: function (aSource) {
let url = getSourceURL(aSource);
if (isHiddenSource(aSource)) {
return false;
}
// Ignore XBL bindings for content debugging.
if (url && url.indexOf("chrome://") == 0) {
return false;
}
// Ignore about:* pages for content debugging.
if (url && url.indexOf("about:") == 0) {
return false;
}
return true;
return !isHiddenSource(aSource);
},
/**
@ -5201,16 +5187,7 @@ update(ChromeDebuggerActor.prototype, {
constructor: ChromeDebuggerActor,
// A constant prefix that will be used to form the actor ID by the server.
actorPrefix: "chromeDebugger",
/**
* Override the eligibility check for scripts and sources to make sure every
* script and source with a URL is stored when debugging chrome.
*/
_allowSource: function(aSource) {
return !isHiddenSource(aSource);
}
actorPrefix: "chromeDebugger"
});
exports.ChromeDebuggerActor = ChromeDebuggerActor;

View File

@ -13,13 +13,18 @@
let { Ci, Cc, CC, Cu, Cr } = require("chrome");
let Services = require("Services");
let { ActorPool, RegisteredActorFactory, ObservedActorFactory } = require("devtools/server/actors/common");
let { DebuggerTransport, LocalDebuggerTransport, ChildDebuggerTransport } =
let { LocalDebuggerTransport, ChildDebuggerTransport } =
require("devtools/toolkit/transport/transport");
let DevToolsUtils = require("devtools/toolkit/DevToolsUtils");
let { dumpn, dumpv, dbg_assert } = DevToolsUtils;
let EventEmitter = require("devtools/toolkit/event-emitter");
let Debugger = require("Debugger");
DevToolsUtils.defineLazyGetter(this, "DebuggerSocket", () => {
let { DebuggerSocket } = require("devtools/toolkit/security/socket");
return DebuggerSocket;
});
// On B2G, `this` != Global scope, so `Ci` won't be binded on `this`
// (i.e. this.Ci is undefined) Then later, when using loadSubScript,
// Ci,... won't be defined for sub scripts.
@ -42,12 +47,6 @@ Object.defineProperty(this, "Components", {
get: function () require("chrome").components
});
const DBG_STRINGS_URI = "chrome://global/locale/devtools/debugger.properties";
DevToolsUtils.defineLazyGetter(this, "nsFile", () => {
return CC("@mozilla.org/file/local;1", "nsIFile", "initWithPath");
});
if (isWorker) {
dumpn.wantLogging = true;
dumpv.wantVerbose = true;
@ -84,19 +83,6 @@ this.resolve = resolve;
this.reject = reject;
this.all = all;
// XPCOM constructors
DevToolsUtils.defineLazyGetter(this, "ServerSocket", () => {
return CC("@mozilla.org/network/server-socket;1",
"nsIServerSocket",
"initSpecialConnection");
});
DevToolsUtils.defineLazyGetter(this, "UnixDomainServerSocket", () => {
return CC("@mozilla.org/network/server-socket;1",
"nsIServerSocket",
"initWithFilename");
});
var gRegisteredModules = Object.create(null);
/**
@ -170,12 +156,6 @@ var DebuggerServer = {
LONG_STRING_INITIAL_LENGTH: 1000,
LONG_STRING_READ_LENGTH: 65 * 1024,
/**
* A handler function that prompts the user to accept or decline the incoming
* connection.
*/
_allowConnection: null,
/**
* The windowtype of the chrome window to use for actors that use the global
* window (i.e the global style editor). Set this to your main window type,
@ -183,48 +163,15 @@ var DebuggerServer = {
*/
chromeWindowType: null,
/**
* Prompt the user to accept or decline the incoming connection. This is the
* default implementation that products embedding the debugger server may
* choose to override.
*
* @return true if the connection should be permitted, false otherwise
*/
_defaultAllowConnection: function DS__defaultAllowConnection() {
let bundle = Services.strings.createBundle(DBG_STRINGS_URI)
let title = bundle.GetStringFromName("remoteIncomingPromptTitle");
let msg = bundle.GetStringFromName("remoteIncomingPromptMessage");
let disableButton = bundle.GetStringFromName("remoteIncomingPromptDisable");
let prompt = Services.prompt;
let flags = prompt.BUTTON_POS_0 * prompt.BUTTON_TITLE_OK +
prompt.BUTTON_POS_1 * prompt.BUTTON_TITLE_CANCEL +
prompt.BUTTON_POS_2 * prompt.BUTTON_TITLE_IS_STRING +
prompt.BUTTON_POS_1_DEFAULT;
let result = prompt.confirmEx(null, title, msg, flags, null, null,
disableButton, null, { value: false });
if (result == 0) {
return true;
}
if (result == 2) {
DebuggerServer.closeAllListeners();
Services.prefs.setBoolPref("devtools.debugger.remote-enabled", false);
}
return false;
},
/**
* Initialize the debugger server.
*
* @param function aAllowConnectionCallback
* The embedder-provider callback, that decides whether an incoming
* remote protocol conection should be allowed or refused.
*/
init: function DS_init(aAllowConnectionCallback) {
init: function DS_init() {
if (this.initialized) {
return;
}
this.initTransport(aAllowConnectionCallback);
this.initTransport();
this._initialized = true;
},
@ -234,12 +181,8 @@ var DebuggerServer = {
/**
* Initialize the debugger server's transport variables. This can be
* in place of init() for cases where the jsdebugger isn't needed.
*
* @param function aAllowConnectionCallback
* The embedder-provider callback, that decides whether an incoming
* remote protocol conection should be allowed or refused.
*/
initTransport: function DS_initTransport(aAllowConnectionCallback) {
initTransport: function DS_initTransport() {
if (this._transportInitialized) {
return;
}
@ -247,9 +190,6 @@ var DebuggerServer = {
this._connections = {};
this._nextConnID = 0;
this._transportInitialized = true;
this._allowConnection = aAllowConnectionCallback ?
aAllowConnectionCallback :
this._defaultAllowConnection;
},
get initialized() this._initialized,
@ -278,7 +218,6 @@ var DebuggerServer = {
this.closeAllListeners();
this.globalActorFactories = {};
this.tabActorFactories = {};
this._allowConnection = null;
this._transportInitialized = false;
this._initialized = false;
@ -621,7 +560,7 @@ var DebuggerServer = {
}
this._checkInit();
let listener = new SocketListener(this);
let listener = DebuggerSocket.createListener();
listener.open(portOrPath);
this._listeners.push(listener);
return listener;
@ -1088,94 +1027,6 @@ if (this.exports) {
exports.ActorPool = ActorPool;
}
/**
* Creates a new socket listener for remote connections to a given
* DebuggerServer. This helps contain and organize the parts of the server that
* may differ or are particular to one given listener mechanism vs. another.
*/
function SocketListener(server) {
this._server = server;
}
SocketListener.prototype = {
/**
* Listens on the given port or socket file for remote debugger connections.
*
* @param portOrPath int, string
* If given an integer, the port to listen on.
* Otherwise, the path to the unix socket domain file to listen on.
*/
open: function(portOrPath) {
let flags = Ci.nsIServerSocket.KeepWhenOffline;
// A preference setting can force binding on the loopback interface.
if (Services.prefs.getBoolPref("devtools.debugger.force-local")) {
flags |= Ci.nsIServerSocket.LoopbackOnly;
}
try {
let backlog = 4;
let port = Number(portOrPath);
if (port) {
this._socket = new ServerSocket(port, flags, backlog);
} else {
let file = nsFile(portOrPath);
if (file.exists())
file.remove(false);
this._socket = new UnixDomainServerSocket(file, parseInt("666", 8),
backlog);
}
this._socket.asyncListen(this);
} catch (e) {
dumpn("Could not start debugging listener on '" + portOrPath + "': " + e);
throw Cr.NS_ERROR_NOT_AVAILABLE;
}
},
/**
* Closes the SocketListener. Notifies the server to remove the listener from
* the set of active SocketListeners.
*/
close: function() {
this._socket.close();
this._server._removeListener(this);
this._server = null;
},
/**
* Gets the port that a TCP socket listener is listening on, or null if this
* is not a TCP socket (so there is no port).
*/
get port() {
if (!this._socket) {
return null;
}
return this._socket.port;
},
// nsIServerSocketListener implementation
onSocketAccepted:
DevToolsUtils.makeInfallible(function(aSocket, aTransport) {
if (Services.prefs.getBoolPref("devtools.debugger.prompt-connection") &&
!this._server._allowConnection()) {
return;
}
dumpn("New debugging connection on " +
aTransport.host + ":" + aTransport.port);
let input = aTransport.openInputStream(0, 0, 0);
let output = aTransport.openOutputStream(0, 0, 0);
let transport = new DebuggerTransport(input, output);
this._server._onConnection(transport);
}, "SocketListener.onSocketAccepted"),
onStopListening: function(aSocket, status) {
dumpn("onStopListening, status: " + status);
}
};
/**
* Creates a DebuggerServerConnection.
*

View File

@ -56,7 +56,7 @@ function initDebuggerServer() {
// tests.
DebuggerServer.destroy();
} catch (ex) { }
DebuggerServer.init(() => true);
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}

View File

@ -16,7 +16,7 @@ SimpleTest.registerCleanupFunction(function() {
if (!DebuggerServer.initialized) {
DebuggerServer.init(() => true);
DebuggerServer.init();
DebuggerServer.addBrowserActors();
SimpleTest.registerCleanupFunction(function() {
DebuggerServer.destroy();

View File

@ -20,7 +20,7 @@ let { require } = devtools;
let { MemoryFront } = require("devtools/server/actors/memory");
function startServerAndGetSelectedTabMemory() {
DebuggerServer.init(() => true);
DebuggerServer.init();
DebuggerServer.addBrowserActors();
var client = new DebuggerClient(DebuggerServer.connectPipe());

View File

@ -44,7 +44,7 @@ function runTests() {
// Instantiate a minimal server
if (!DebuggerServer.initialized) {
DebuggerServer.init(function () { return true; });
DebuggerServer.init();
}
if (!DebuggerServer.createRootActor) {
DebuggerServer.addBrowserActors();

View File

@ -68,7 +68,7 @@ function runTests() {
// Instantiate a minimal server
if (!DebuggerServer.initialized) {
DebuggerServer.init(function () { return true; });
DebuggerServer.init();
}
if (!DebuggerServer.createRootActor) {
DebuggerServer.addBrowserActors();

View File

@ -23,7 +23,7 @@ window.onload = function() {
Cu.import("resource://gre/modules/Services.jsm");
if (!DebuggerServer.initialized) {
DebuggerServer.init(function () { return true; });
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}

View File

@ -29,7 +29,7 @@ window.onload = function() {
var {getDeviceFront} = devtools.require("devtools/server/actors/device");
if (!DebuggerServer.initialized) {
DebuggerServer.init(function () { return true; });
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}

View File

@ -35,7 +35,7 @@ window.onload = function() {
var {FramerateFront} = devtools.require("devtools/server/actors/framerate");
if (!DebuggerServer.initialized) {
DebuggerServer.init(function () { return true; });
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}

View File

@ -35,7 +35,7 @@ window.onload = function() {
var {FramerateFront} = devtools.require("devtools/server/actors/framerate");
if (!DebuggerServer.initialized) {
DebuggerServer.init(function () { return true; });
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}

View File

@ -38,7 +38,7 @@ window.onload = function() {
var TOTAL_TIME = 5000;
if (!DebuggerServer.initialized) {
DebuggerServer.init(function () { return true; });
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}

View File

@ -34,7 +34,7 @@ window.onload = function() {
var {FramerateFront} = devtools.require("devtools/server/actors/framerate");
DebuggerServer.init(function () { return true; });
DebuggerServer.init();
DebuggerServer.addBrowserActors();
var client = new DebuggerClient(DebuggerServer.connectPipe());

View File

@ -27,7 +27,7 @@ function runTests() {
var {getPreferenceFront} = devtools.require("devtools/server/actors/preference");
DebuggerServer.init(function () { return true; });
DebuggerServer.init();
DebuggerServer.addBrowserActors();
var client = new DebuggerClient(DebuggerServer.connectPipe());

View File

@ -16,7 +16,7 @@ function run_test()
DebuggerServer.addActors("resource://test/pre_init_global_actors.js");
DebuggerServer.addActors("resource://test/pre_init_tab_actors.js");
DebuggerServer.init(function () { return true; });
DebuggerServer.init();
DebuggerServer.addBrowserActors();
DebuggerServer.addActors("resource://test/post_init_global_actors.js");

View File

@ -28,7 +28,7 @@ function run_test()
{
DebuggerServer.addGlobalActor(TestActor);
DebuggerServer.init(function () { return true; });
DebuggerServer.init();
DebuggerServer.addBrowserActors();
add_test(init);

View File

@ -15,7 +15,7 @@ function run_test()
check_except(DebuggerServer.connectPipe);
// Allow incoming connections.
DebuggerServer.init(function () { return true; });
DebuggerServer.init();
// These should still fail because we haven't added a createRootActor
// implementation yet.

View File

@ -11,7 +11,7 @@ function run_test()
{
let {EventLoopLagFront} = devtools.require("devtools/server/actors/eventlooplag");
DebuggerServer.init(function () { return true; });
DebuggerServer.init();
DebuggerServer.addBrowserActors();
// As seen in EventTracer.cpp

View File

@ -25,7 +25,7 @@ function check_footprint(step, max) {
}
function init_server() {
DebuggerServer.init(function () { return true; });
DebuggerServer.init();
check_footprint("DebuggerServer.init()", 500);
}

View File

@ -11,7 +11,7 @@ function run_test()
{
let EventEmitter = devtools.require("devtools/toolkit/event-emitter");
DebuggerServer.init(function () { return true; });
DebuggerServer.init();
DebuggerServer.addBrowserActors();
let client = new DebuggerClient(DebuggerServer.connectPipe());

View File

@ -26,7 +26,7 @@ function run_test()
// happen if the MOZ_PROFILER_STARTUP environment variable is set).
Profiler.StopProfiler();
DebuggerServer.init(() => true);
DebuggerServer.init();
DebuggerServer.addBrowserActors();
connect_client((client1, actor1) => {

View File

@ -27,7 +27,7 @@ function run_test()
Profiler.StartProfiler(1000000, 1, ["js"], 1);
DevToolsUtils.waitForTime(WAIT_TIME).then(() => {
DebuggerServer.init(() => true);
DebuggerServer.init();
DebuggerServer.addBrowserActors();
connect_client((client, actor) => {

View File

@ -22,7 +22,7 @@ function connect_client(callback)
function run_test()
{
DebuggerServer.init(() => true);
DebuggerServer.init();
DebuggerServer.addBrowserActors();
connect_client((client1, actor1) => {

View File

@ -24,7 +24,7 @@ function connect_client(callback)
function run_test()
{
DebuggerServer.init(() => true);
DebuggerServer.init();
DebuggerServer.addBrowserActors();
connect_client((client, actor) => {

View File

@ -21,7 +21,7 @@ function connect_client(callback)
function run_test()
{
DebuggerServer.init(() => true);
DebuggerServer.init();
DebuggerServer.addBrowserActors();
connect_client((client, actor) => {

View File

@ -22,7 +22,7 @@ function connect_client(callback)
function run_test()
{
DebuggerServer.init(() => true);
DebuggerServer.init();
DebuggerServer.addBrowserActors();
connect_client((client, actor) => {

View File

@ -91,7 +91,7 @@ let RootFront = protocol.FrontClass(RootActor, {
function run_test()
{
DebuggerServer.createRootActor = RootActor;
DebuggerServer.init(() => true);
DebuggerServer.init();
let trace = connectPipeTracing();
let client = new DebuggerClient(trace);

View File

@ -260,7 +260,7 @@ function run_test()
DebuggerServer.createRootActor = (conn => {
return RootActor(conn);
});
DebuggerServer.init(() => true);
DebuggerServer.init();
let trace = connectPipeTracing();
let client = new DebuggerClient(trace);

View File

@ -126,7 +126,7 @@ const run_test = Test(function*() {
DebuggerServer.createRootActor = (conn => {
return RootActor(conn);
});
DebuggerServer.init(() => true);
DebuggerServer.init();
const connection = DebuggerServer.connectPipe();
const conn = new DebuggerClient(connection);

View File

@ -83,7 +83,7 @@ function run_test()
return RootActor(conn);
});
DebuggerServer.init(() => true);
DebuggerServer.init();
let trace = connectPipeTracing();
let client = new DebuggerClient(trace);
let rootClient;

View File

@ -161,7 +161,7 @@ function run_test()
DebuggerServer.createRootActor = (conn => {
return RootActor(conn);
});
DebuggerServer.init(() => true);
DebuggerServer.init();
check_except(() => {
let badActor = ActorClass({

View File

@ -53,7 +53,7 @@ function run_test()
{
DebuggerServer.addGlobalActor(TestActor);
DebuggerServer.init(function () { return true; });
DebuggerServer.init();
DebuggerServer.addBrowserActors();
add_test(init);

View File

@ -16,7 +16,7 @@ function check_actors(expect) {
function run_test()
{
// Allow incoming connections.
DebuggerServer.init(function () { return true; });
DebuggerServer.init();
DebuggerServer.addBrowserActors();
add_test(test_deprecated_api);

View File

@ -38,7 +38,7 @@ function test_existent_actor(aClient, anActor)
function run_test()
{
DebuggerServer.init(function () { return true; });
DebuggerServer.init();
DebuggerServer.addBrowserActors();
var client = new DebuggerClient(DebuggerServer.connectPipe());
client.connect(function() {

View File

@ -196,7 +196,7 @@ function initTestDebuggerServer() {
});
DebuggerServer.registerModule("xpcshell-test/testactors");
// Allow incoming connections.
DebuggerServer.init(function () { return true; });
DebuggerServer.init();
}
function finishClient(aClient) {
@ -260,11 +260,12 @@ function writeTestTempFile(aFileName, aContent) {
function socket_transport() {
if (!DebuggerServer.listeningSockets) {
DebuggerServer.openListener(-1);
let listener = DebuggerServer.openListener(-1);
listener.allowConnection = () => true;
}
let port = DebuggerServer._listeners[0].port;
do_print("Debugger server port is " + port);
return debuggerSocketConnect("127.0.0.1", port);
return DebuggerClient.socketConnect("127.0.0.1", port);
}
function local_transport() {

View File

@ -22,17 +22,20 @@ function run_test()
function test_socket_conn()
{
do_check_eq(DebuggerServer.listeningSockets, 0);
do_check_true(DebuggerServer.openListener(-1));
let listener = DebuggerServer.openListener(-1);
listener.allowConnection = () => true;
do_check_true(listener);
do_check_eq(DebuggerServer.listeningSockets, 1);
gPort = DebuggerServer._listeners[0].port;
do_print("Debugger server port is " + gPort);
// Open a second, separate listener
gExtraListener = DebuggerServer.openListener(-1);
gExtraListener.allowConnection = () => true;
do_check_eq(DebuggerServer.listeningSockets, 2);
do_print("Starting long and unicode tests at " + new Date().toTimeString());
let unicodeString = "(╯°□°)╯︵ ┻━┻";
let transport = debuggerSocketConnect("127.0.0.1", gPort);
let transport = DebuggerClient.socketConnect("127.0.0.1", gPort);
transport.hooks = {
onPacket: function(aPacket) {
this.onPacket = function(aPacket) {
@ -66,7 +69,7 @@ function test_socket_shutdown()
do_check_eq(DebuggerServer.listeningSockets, 0);
do_print("Connecting to a server socket at " + new Date().toTimeString());
let transport = debuggerSocketConnect("127.0.0.1", gPort);
let transport = DebuggerClient.socketConnect("127.0.0.1", gPort);
transport.hooks = {
onPacket: function(aPacket) {
// Shouldn't reach this, should never connect.

View File

@ -48,8 +48,9 @@ function test_socket_conn_drops_after_too_long_header() {
function test_helper(payload) {
let listener = DebuggerServer.openListener(-1);
listener.allowConnection = () => true;
let transport = debuggerSocketConnect("127.0.0.1", listener.port);
let transport = DebuggerClient.socketConnect("127.0.0.1", listener.port);
transport.hooks = {
onPacket: function(aPacket) {
this.onPacket = function(aPacket) {

View File

@ -13,7 +13,7 @@ let { Promise: promise } = Cu.import("resource://gre/modules/Promise.jsm", {});
function run_test() {
DebuggerServer.registerModule("xpcshell-test/testactors-no-bulk");
// Allow incoming connections.
DebuggerServer.init(function () { return true; });
DebuggerServer.init();
add_task(function() {
yield test_bulk_send_error(socket_transport);

View File

@ -8,6 +8,7 @@ const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
do_get_profile();
Cu.import("resource://gre/modules/Promise.jsm");
Cu.import("resource://gre/modules/PromiseUtils.jsm");
Cu.import("resource://gre/modules/osfile.jsm");
Cu.import("resource://gre/modules/FileUtils.jsm");
Cu.import("resource://gre/modules/Services.jsm");
@ -1041,23 +1042,28 @@ add_task(function* test_forget_witness_on_close() {
add_task(function* test_close_database_on_gc() {
failTestsOnAutoClose(false);
let deferred = Promise.defer();
let finalPromise;
for (let i = 0; i < 100; ++i) {
let c = yield getDummyDatabase("gc_" + i);
c._connectionData._deferredClose.promise.then(deferred.resolve);
{
let collectedPromises = [];
for (let i = 0; i < 100; ++i) {
let deferred = PromiseUtils.defer();
let c = yield getDummyDatabase("gc_" + i);
c._connectionData._deferredClose.promise.then(deferred.resolve);
collectedPromises.push(deferred.promise);
}
finalPromise = Promise.all(collectedPromises);
}
// Call getDummyDatabase once more to clear any remaining
// references. This is needed at the moment, otherwise
// garbage-collection takes place after the shutdown barrier and the
// test will timeout. Once that is fixed, we can remove this line
// and be fine as long as at least one connection is
// garbage-collected.
// and be fine as long as the connections are garbage-collected.
let last = yield getDummyDatabase("gc_last");
yield last.close();
Components.utils.forceGC();
yield deferred.promise;
yield finalPromise;
failTestsOnAutoClose(true);
});