зеркало из https://github.com/mozilla/gecko-dev.git
85 строки
2.2 KiB
JavaScript
85 строки
2.2 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
/**
|
|
* Check extension-added tab actor lifetimes.
|
|
*/
|
|
|
|
const CHROME_URL = "chrome://mochitests/content/browser/browser/devtools/debugger/test/"
|
|
const ACTORS_URL = CHROME_URL + "testactors.js";
|
|
const TAB_URL = EXAMPLE_URL + "doc_empty-tab-01.html";
|
|
|
|
let gClient;
|
|
|
|
function test() {
|
|
if (!DebuggerServer.initialized) {
|
|
DebuggerServer.init(() => true);
|
|
DebuggerServer.addBrowserActors();
|
|
}
|
|
|
|
DebuggerServer.addActors(ACTORS_URL);
|
|
|
|
let transport = DebuggerServer.connectPipe();
|
|
gClient = new DebuggerClient(transport);
|
|
gClient.connect((aType, aTraits) => {
|
|
is(aType, "browser",
|
|
"Root actor should identify itself as a browser.");
|
|
|
|
addTab(TAB_URL)
|
|
.then(() => attachTabActorForUrl(gClient, TAB_URL))
|
|
.then(testTabActor)
|
|
.then(closeTab)
|
|
.then(closeConnection)
|
|
.then(finish)
|
|
.then(null, aError => {
|
|
ok(false, "Got an error: " + aError.message + "\n" + aError.stack);
|
|
});
|
|
});
|
|
}
|
|
|
|
function testTabActor([aGrip, aResponse]) {
|
|
let deferred = promise.defer();
|
|
|
|
ok(aGrip.testTabActor1,
|
|
"Found the test tab actor.");
|
|
ok(aGrip.testTabActor1.contains("test_one"),
|
|
"testTabActor1's actorPrefix should be used.");
|
|
|
|
gClient.request({ to: aGrip.testTabActor1, type: "ping" }, aResponse => {
|
|
is(aResponse.pong, "pong",
|
|
"Actor should respond to requests.");
|
|
|
|
deferred.resolve(aResponse.actor);
|
|
});
|
|
|
|
return deferred.promise;
|
|
}
|
|
|
|
function closeTab(aTestActor) {
|
|
return removeTab(gBrowser.selectedTab).then(() => {
|
|
let deferred = promise.defer();
|
|
|
|
try {
|
|
gClient.request({ to: aTestActor, type: "ping" }, aResponse => {
|
|
ok(false, "testTabActor1 didn't go away with the tab.");
|
|
deferred.reject(aResponse);
|
|
});
|
|
} catch(e) {
|
|
is(e.message, "'ping' request packet has no destination.", "testTabActor1 went away.");
|
|
deferred.resolve();
|
|
}
|
|
|
|
return deferred.promise;
|
|
});
|
|
}
|
|
|
|
function closeConnection() {
|
|
let deferred = promise.defer();
|
|
gClient.close(deferred.resolve);
|
|
return deferred.promise;
|
|
}
|
|
|
|
registerCleanupFunction(function() {
|
|
gClient = null;
|
|
});
|