Bug 1059308 - Fix tests to support chrome actor. r=jryans

This commit is contained in:
Alexandre Poirot 2015-02-26 03:56:00 +01:00
parent 9ddabe8061
commit 2b002a6748
19 changed files with 160 additions and 246 deletions

View File

@ -23,6 +23,7 @@ function test() {
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}
DebuggerServer.allowChromeProcess = true;
let transport = DebuggerServer.connectPipe();
gClient = new DebuggerClient(transport);
@ -42,26 +43,26 @@ function test() {
}
function testChromeActor() {
gClient.listTabs(aResponse => {
ok(aResponse.chromeDebugger.contains("chromeDebugger"),
"Chrome debugger actor should identify itself accordingly.");
gClient.attachProcess().then(aResponse => {
gClient.addListener("newGlobal", onNewGlobal);
gClient.addListener("newSource", onNewSource);
gClient.attachThread(aResponse.chromeDebugger, (aResponse, aThreadClient) => {
gThreadClient = aThreadClient;
let actor = aResponse.form.actor;
gClient.attachTab(actor, (response, tabClient) => {
tabClient.attachThread(null, (aResponse, aThreadClient) => {
gThreadClient = aThreadClient;
if (aResponse.error) {
ok(false, "Couldn't attach to the chrome debugger.");
gAttached.reject();
} else {
ok(true, "Attached to the chrome debugger.");
gAttached.resolve();
if (aResponse.error) {
ok(false, "Couldn't attach to the chrome debugger.");
gAttached.reject();
} else {
ok(true, "Attached to the chrome debugger.");
gAttached.resolve();
// Ensure that a new chrome global will be created.
gBrowser.selectedTab = gBrowser.addTab("about:mozilla");
}
// Ensure that a new chrome global will be created.
gBrowser.selectedTab = gBrowser.addTab("about:mozilla");
}
});
});
});
}

View File

@ -563,6 +563,7 @@ AddonDebugger.prototype = {
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}
DebuggerServer.allowChromeProcess = true;
this.frame = document.createElement("iframe");
this.frame.setAttribute("height", 400);

View File

@ -1,10 +1,6 @@
/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
let { DebuggerServer } =
Cu.import("resource://gre/modules/devtools/dbg-server.jsm", {});
let { DebuggerClient } =
Cu.import("resource://gre/modules/devtools/dbg-client.jsm", {});
let { devtools } =
Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
@ -12,28 +8,19 @@ let { devtools } =
function test() {
waitForExplicitFinish();
if (!DebuggerServer.initialized) {
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}
getChromeActors((client, response) => {
let options = {
form: response,
client: client,
chrome: true
};
var client = new DebuggerClient(DebuggerServer.connectPipe());
client.connect(() => {
client.listTabs(response => {
let options = {
form: response,
client: client,
chrome: true
};
devtools.TargetFactory.forRemoteTab(options).then(target => {
target.on("close", () => {
ok(true, "Target was closed");
DebuggerServer.destroy();
finish();
});
client.close();
devtools.TargetFactory.forRemoteTab(options).then(target => {
target.on("close", () => {
ok(true, "Target was closed");
finish();
});
client.close();
});
});
}

View File

@ -4,10 +4,6 @@
// Test support methods on Target, such as `hasActor`, `getActorDescription`,
// `actorHasMethod` and `getTrait`.
let { DebuggerServer } =
Cu.import("resource://gre/modules/devtools/dbg-server.jsm", {});
let { DebuggerClient } =
Cu.import("resource://gre/modules/devtools/dbg-client.jsm", {});
let { devtools } =
Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
let { Task } =
@ -60,29 +56,20 @@ function* testTarget (client, target) {
function test() {
waitForExplicitFinish();
if (!DebuggerServer.initialized) {
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}
getChromeActors((client, response) => {
let options = {
form: response,
client: client,
chrome: true
};
var client = new DebuggerClient(DebuggerServer.connectPipe());
client.connect(() => {
client.listTabs(response => {
let options = {
form: response,
client: client,
chrome: true
};
devtools.TargetFactory.forRemoteTab(options).then(Task.async(testTarget).bind(null, client));
});
devtools.TargetFactory.forRemoteTab(options).then(Task.async(testTarget).bind(null, client));
});
}
function close (target, client) {
target.on("close", () => {
ok(true, "Target was closed");
DebuggerServer.destroy();
finish();
});
client.close();

View File

@ -152,3 +152,26 @@ function toggleAllTools(state) {
}
}
}
function getChromeActors(callback)
{
let { DebuggerServer } = Cu.import("resource://gre/modules/devtools/dbg-server.jsm", {});
let { DebuggerClient } = Cu.import("resource://gre/modules/devtools/dbg-client.jsm", {});
if (!DebuggerServer.initialized) {
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}
DebuggerServer.allowChromeProcess = true;
let client = new DebuggerClient(DebuggerServer.connectPipe());
client.connect(() => {
client.attachProcess().then(response => {
callback(client, response.form);
});
});
SimpleTest.registerCleanupFunction(() => {
DebuggerServer.destroy();
});
}

View File

@ -382,6 +382,7 @@ function _setupDebuggerServer(breakpointFiles, callback) {
DebuggerServer.init();
DebuggerServer.addBrowserActors();
DebuggerServer.addActors("resource://testing-common/dbg-actors.js");
DebuggerServer.allowChromeProcess = true;
// An observer notification that tells us when we can "resume" script
// execution.

View File

@ -227,6 +227,24 @@ function finishClient(aClient)
});
}
// Create a server, connect to it and fetch tab actors for the parent process;
// pass |aCallback| the debugger client and tab actor form with all actor IDs.
function get_chrome_actors(callback)
{
if (!DebuggerServer.initialized) {
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}
DebuggerServer.allowChromeProcess = true;
let client = new DebuggerClient(DebuggerServer.connectPipe());
client.connect(() => {
client.attachProcess().then(response => {
callback(client, response.form);
});
});
}
/**
* Takes a relative file path and returns the absolute file url for it.
*/

View File

@ -11,11 +11,6 @@ function run_test()
{
let EventEmitter = devtools.require("devtools/toolkit/event-emitter");
DebuggerServer.init();
DebuggerServer.addBrowserActors();
let client = new DebuggerClient(DebuggerServer.connectPipe());
function MonitorClient(client, form) {
this.client = client;
this.actor = form.monitorActor;
@ -25,7 +20,7 @@ function run_test()
client.registerClient(this);
}
MonitorClient.prototype.destroy = function () {
client.unregisterClient(this);
this.client.unregisterClient(this);
}
MonitorClient.prototype.start = function (callback) {
this.client.request({
@ -40,15 +35,14 @@ function run_test()
}, callback);
}
let monitor;
let monitor, client;
// Start the monitor actor.
client.connect(function () {
client.listTabs(function(resp) {
monitor = new MonitorClient(client, resp);
monitor.on("update", gotUpdate);
monitor.start(update);
});
get_chrome_actors((c, form) => {
client = c;
monitor = new MonitorClient(client, form);
monitor.on("update", gotUpdate);
monitor.start(update);
});
let time = Date.now();

View File

@ -10,27 +10,16 @@
const Profiler = Cc["@mozilla.org/tools/profiler;1"].getService(Ci.nsIProfiler);
function connect_client(callback)
{
let client = new DebuggerClient(DebuggerServer.connectPipe());
client.connect(() => {
client.listTabs(response => {
callback(client, response.profilerActor);
});
});
}
function run_test()
{
// Ensure the profiler is not running when the test starts (it could
// happen if the MOZ_PROFILER_STARTUP environment variable is set).
Profiler.StopProfiler();
DebuggerServer.init();
DebuggerServer.addBrowserActors();
connect_client((client1, actor1) => {
connect_client((client2, actor2) => {
get_chrome_actors((client1, form1) => {
let actor1 = form1.profilerActor;
get_chrome_actors((client2, form2) => {
let actor2 = form2.profilerActor;
test_activate(client1, actor1, client2, actor2, () => {
do_test_finished();
});

View File

@ -11,26 +11,15 @@
const Profiler = Cc["@mozilla.org/tools/profiler;1"].getService(Ci.nsIProfiler);
const WAIT_TIME = 1000; // ms
function connect_client(callback)
{
let client = new DebuggerClient(DebuggerServer.connectPipe());
client.connect(() => {
client.listTabs(response => {
callback(client, response.profilerActor);
});
});
}
function run_test()
{
// Ensure the profiler is already running when the test starts.
Profiler.StartProfiler(1000000, 1, ["js"], 1);
DevToolsUtils.waitForTime(WAIT_TIME).then(() => {
DebuggerServer.init();
DebuggerServer.addBrowserActors();
connect_client((client, actor) => {
get_chrome_actors((client, form) => {
let actor = form.profilerActor;
test_start_time(client, actor, () => {
client.close(do_test_finished);
});

View File

@ -10,23 +10,12 @@
const Profiler = Cc["@mozilla.org/tools/profiler;1"].getService(Ci.nsIProfiler);
function connect_client(callback)
{
let client = new DebuggerClient(DebuggerServer.connectPipe());
client.connect(() => {
client.listTabs(response => {
callback(client, response.profilerActor);
});
});
}
function run_test()
{
DebuggerServer.init();
DebuggerServer.addBrowserActors();
connect_client((client1, actor1) => {
connect_client((client2, actor2) => {
get_chrome_actors((client1, form1) => {
let actor1 = form1.profilerActor;
get_chrome_actors((client2, form2) => {
let actor2 = form2.profilerActor;
test_close(client1, actor1, client2, actor2, () => {
client1.close(() => {
client2.close(() => {

View File

@ -12,22 +12,10 @@ const Profiler = Cc["@mozilla.org/tools/profiler;1"].getService(Ci.nsIProfiler);
const INITIAL_WAIT_TIME = 100; // ms
const MAX_WAIT_TIME = 20000; // ms
function connect_client(callback)
{
let client = new DebuggerClient(DebuggerServer.connectPipe());
client.connect(() => {
client.listTabs(response => {
callback(client, response.profilerActor);
});
});
}
function run_test()
{
DebuggerServer.init();
DebuggerServer.addBrowserActors();
connect_client((client, actor) => {
get_chrome_actors((client, form) => {
let actor = form.profilerActor;
activate_profiler(client, actor, () => {
test_data(client, actor, () => {
deactivate_profiler(client, actor, () => {

View File

@ -9,22 +9,10 @@
const Profiler = Cc["@mozilla.org/tools/profiler;1"].getService(Ci.nsIProfiler);
function connect_client(callback)
{
let client = new DebuggerClient(DebuggerServer.connectPipe());
client.connect(() => {
client.listTabs(response => {
callback(client, response.profilerActor);
});
});
}
function run_test()
{
DebuggerServer.init();
DebuggerServer.addBrowserActors();
connect_client((client, actor) => {
get_chrome_actors((client, form) => {
let actor = form.profilerActor;
activate_profiler(client, actor, () => {
test_events(client, actor, () => {
client.close(do_test_finished);

View File

@ -10,22 +10,10 @@
const Profiler = Cc["@mozilla.org/tools/profiler;1"].getService(Ci.nsIProfiler);
function connect_client(callback)
{
let client = new DebuggerClient(DebuggerServer.connectPipe());
client.connect(() => {
client.listTabs(response => {
callback(client, response.profilerActor);
});
});
}
function run_test()
{
DebuggerServer.init();
DebuggerServer.addBrowserActors();
connect_client((client, actor) => {
get_chrome_actors((client, form) => {
let actor = form.profilerActor;
activate_profiler(client, actor, () => {
test_events(client, actor, () => {
client.close(do_test_finished);

View File

@ -9,22 +9,10 @@
const Profiler = Cc["@mozilla.org/tools/profiler;1"].getService(Ci.nsIProfiler);
function connect_client(callback)
{
let client = new DebuggerClient(DebuggerServer.connectPipe());
client.connect(() => {
client.listTabs(response => {
callback(client, response.profilerActor);
});
});
}
function run_test()
{
DebuggerServer.init();
DebuggerServer.addBrowserActors();
connect_client((client, actor) => {
get_chrome_actors((client, form) => {
let actor = form.profilerActor;
test_getfeatures(client, actor, () => {
client.close(() => {
do_test_finished();

View File

@ -9,22 +9,10 @@
const Profiler = Cc["@mozilla.org/tools/profiler;1"].getService(Ci.nsIProfiler);
function connect_client(callback)
{
let client = new DebuggerClient(DebuggerServer.connectPipe());
client.connect(() => {
client.listTabs(response => {
callback(client, response.profilerActor);
});
});
}
function run_test()
{
DebuggerServer.init();
DebuggerServer.addBrowserActors();
connect_client((client, actor) => {
get_chrome_actors((client, form) => {
let actor = form.profilerActor;
test_getsharedlibraryinformation(client, actor, () => {
client.close(() => {
do_test_finished();

View File

@ -3,48 +3,33 @@
"use strict";
const { RootActor } = devtools.require("devtools/server/actors/root");
function test_requestTypes_request(aClient, anActor)
{
var calls = [];
aClient.request({ to: "root", type: "requestTypes" }, function (aResponse) {
var expectedRequestTypes = Object.keys(RootActor.
prototype.
requestTypes);
calls.push(test_existent_actor(aClient, anActor));
do_check_true(Array.isArray(aResponse.requestTypes));
do_check_eq(JSON.stringify(aResponse.requestTypes),
JSON.stringify(expectedRequestTypes));
promise.all(calls).then(() => {
aClient.close(() => {
do_test_finished();
});
});
}
function test_existent_actor(aClient, anActor)
{
let deferred = promise.defer();
aClient.request({ to: anActor, type: "requestTypes" }, function (aResponse) {
var expectedRequestTypes = Object.keys(DebuggerServer.
globalActorFactories["chromeDebugger"].
_getConstructor().
prototype.requestTypes);
do_check_true(Array.isArray(aResponse.requestTypes));
do_check_eq(JSON.stringify(aResponse.requestTypes),
JSON.stringify(expectedRequestTypes));
deferred.resolve();
});
return deferred.promise;
}
function run_test()
{
DebuggerServer.init();
DebuggerServer.addBrowserActors();
var client = new DebuggerClient(DebuggerServer.connectPipe());
client.connect(function() {
client.listTabs(function(aResponse) {
test_requestTypes_request(client, aResponse.chromeDebugger);
});
test_requestTypes_request(client);
});
do_test_pending();

View File

@ -14,30 +14,32 @@ function run_test() {
let client = new DebuggerClient(transport);
client.connect(() => {
// Even though we have no tabs, listTabs gives us the chromeDebugger.
client.listTabs(response => {
let chromeDebugger = response.chromeDebugger;
client.attachThread(chromeDebugger, (response, threadClient) => {
threadClient.addOneTimeListener("paused", (event, packet) => {
equal(packet.why.type, "breakpoint",
"yay - hit the breakpoint at the first line in our script");
// Resume again - next stop should be our "debugger" statement.
client.attachProcess().then(response => {
let actor = response.form.actor;
client.attachTab(actor, (response, tabClient) => {
tabClient.attachThread(null, (response, threadClient) => {
threadClient.addOneTimeListener("paused", (event, packet) => {
equal(packet.why.type, "debuggerStatement",
"yay - hit the 'debugger' statement in our script");
threadClient.resume(() => {
finishClient(client);
equal(packet.why.type, "breakpoint",
"yay - hit the breakpoint at the first line in our script");
// Resume again - next stop should be our "debugger" statement.
threadClient.addOneTimeListener("paused", (event, packet) => {
equal(packet.why.type, "debuggerStatement",
"yay - hit the 'debugger' statement in our script");
threadClient.resume(() => {
finishClient(client);
});
});
threadClient.resume();
});
// tell the thread to do the initial resume. This would cause the
// xpcshell test harness to resume and load the file under test.
threadClient.resume(response => {
// should have been told to resume the test itself.
ok(testResumed);
// Now load our test script.
load(testFile.path);
// and our "paused" listener above should get hit.
});
threadClient.resume();
});
// tell the thread to do the initial resume. This would cause the
// xpcshell test harness to resume and load the file under test.
threadClient.resume(response => {
// should have been told to resume the test itself.
ok(testResumed);
// Now load our test script.
load(testFile.path);
// and our "paused" listener above should get hit.
});
});
});

View File

@ -32,6 +32,7 @@ function initDebuggerServer()
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}
DebuggerServer.allowChromeProcess = true;
}
function connectToDebugger(aCallback)
@ -68,20 +69,27 @@ function attachConsole(aListeners, aCallback, aAttachToTab)
return;
}
aState.dbgClient.listTabs(function _onListTabs(aResponse) {
if (aResponse.error) {
Cu.reportError("listTabs failed: " + aResponse.error + " " +
aResponse.message);
aCallback(aState, aResponse);
return;
}
let consoleActor = aAttachToTab ?
aResponse.tabs[aResponse.selected].consoleActor :
aResponse.consoleActor;
aState.actor = consoleActor;
aState.dbgClient.attachConsole(consoleActor, aListeners,
_onAttachConsole.bind(null, aState));
});
if (aAttachToTab) {
aState.dbgClient.listTabs(function _onListTabs(aResponse) {
if (aResponse.error) {
Cu.reportError("listTabs failed: " + aResponse.error + " " +
aResponse.message);
aCallback(aState, aResponse);
return;
}
let consoleActor = aResponse.tabs[aResponse.selected].consoleActor;
aState.actor = consoleActor;
aState.dbgClient.attachConsole(consoleActor, aListeners,
_onAttachConsole.bind(null, aState));
});
} else {
aState.dbgClient.attachProcess().then(response => {
let consoleActor = response.form.consoleActor;
aState.actor = consoleActor;
aState.dbgClient.attachConsole(consoleActor, aListeners,
_onAttachConsole.bind(null, aState));
});
}
});
}