gecko/toolkit/devtools/server/tests/unit/testcompatactors.js

120 lines
3.4 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
var gTestGlobals = [];
function createRootActor()
{
let actor = {
sayHello: function() {
this._tabActors = [];
for each (let g in gTestGlobals) {
let actor = new BrowserTabActor(this.conn);
actor.thread = new ThreadActor({});
actor.thread.addDebuggee(g);
actor.thread.global = g;
actor.json = function() {
return { actor: actor.actorID,
url: "http://www.example.com/",
title: actor.thread.global.__name };
};
actor.requestTypes["attach"] = function (aRequest) {
dump("actor.thread.actorID = " + actor.thread.actorID + "\n");
return {
from: actor.actorID,
type: "tabAttached",
threadActor: actor.thread.actorID
};
};
actor.thread.requestTypes["scripts"] = function (aRequest) {
return this._discoverSources().then(function () {
let scripts = [];
for (let s of this.dbg.findScripts()) {
if (!s.url) {
continue;
}
let script = {
url: s.url,
startLine: s.startLine,
lineCount: s.lineCount,
source: this.sources.source(s.url).form()
};
scripts.push(script);
}
return {
from: this.actorID,
scripts: scripts
};
}.bind(this));
};
// Pretend that we do not know about the "sources" packet to force the
// client to go into its backwards compatibility mode.
actor.thread.requestTypes["sources"] = function () {
return {
error: "unrecognizedPacketType"
};
};
let { conn } = this;
actor.thread.onNewScript = (function (oldOnNewScript) {
return function (aScript) {
oldOnNewScript.call(this, aScript);
conn.send({
from: actor.thread.actorID,
type: "newScript",
url: aScript.url,
startLine: aScript.startLine,
lineCount: aScript.lineCount,
source: actor.thread.sources.source(aScript.url).form()
});
};
}(actor.thread.onNewScript));
this.conn.addActor(actor);
this.conn.addActor(actor.thread);
this._tabActors.push(actor);
}
this.conn.send = (function (aOldSend) {
return function (aPacket) {
if (aPacket.type === "newSource") {
// Don't send newSource Packets b/c we are an old version of the
// RDP!
return undefined;
} else {
return aOldSend.call(this, aPacket);
}
};
}(this.conn.send));
return { from: "root",
applicationType: "xpcshell-tests",
traits: {} };
},
listTabs: function(aRequest) {
return {
from: "root",
selected: 0,
tabs: [ actor.json() for (actor of this._tabActors) ]
};
},
};
actor.requestTypes = {
"listTabs": actor.listTabs,
"echo": function(aRequest) { return aRequest; },
};
return actor;
}
DebuggerServer.addTestGlobal = function addTestGlobal(aGlobal)
{
gTestGlobals.push(aGlobal);
}