зеркало из https://github.com/mozilla/gecko-dev.git
Bug 997315: Verify that multiple calls to listTabs doesn't prematurely disconnect actors. r=panos
This commit is contained in:
Родитель
5ac6d5ccbe
Коммит
3814d89cf2
|
@ -149,6 +149,7 @@ support-files =
|
|||
[browser_dbg_listaddons.js]
|
||||
[browser_dbg_listtabs-01.js]
|
||||
[browser_dbg_listtabs-02.js]
|
||||
[browser_dbg_listtabs-03.js]
|
||||
[browser_dbg_location-changes-01-simple.js]
|
||||
[browser_dbg_location-changes-02-blank.js]
|
||||
[browser_dbg_location-changes-03-new.js]
|
||||
|
|
|
@ -0,0 +1,80 @@
|
|||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
/**
|
||||
* Make sure the listTabs request works as specified.
|
||||
*/
|
||||
|
||||
const TAB1_URL = EXAMPLE_URL + "doc_empty-tab-01.html";
|
||||
|
||||
let gTab1, gTab1Actor, gTab2, gTab2Actor, gClient;
|
||||
|
||||
function listTabs() {
|
||||
let deferred = promise.defer();
|
||||
|
||||
gClient.listTabs(aResponse => {
|
||||
deferred.resolve(aResponse.tabs);
|
||||
});
|
||||
|
||||
return deferred.promise;
|
||||
}
|
||||
|
||||
function request(params) {
|
||||
let deferred = promise.defer();
|
||||
gClient.request(params, deferred.resolve);
|
||||
return deferred.promise;
|
||||
}
|
||||
|
||||
function test() {
|
||||
if (!DebuggerServer.initialized) {
|
||||
DebuggerServer.init(() => true);
|
||||
DebuggerServer.addBrowserActors();
|
||||
}
|
||||
|
||||
let transport = DebuggerServer.connectPipe();
|
||||
gClient = new DebuggerClient(transport);
|
||||
gClient.connect(Task.async(function*(aType, aTraits) {
|
||||
is(aType, "browser",
|
||||
"Root actor should identify itself as a browser.");
|
||||
let tab = yield addTab(TAB1_URL);
|
||||
|
||||
let tabs = yield listTabs();
|
||||
is(tabs.length, 2, "Should be two tabs");
|
||||
let tabGrip = tabs.filter(a => a.url ==TAB1_URL).pop();
|
||||
ok(tabGrip, "Should have an actor for the tab");
|
||||
|
||||
let response = yield request({ to: tabGrip.actor, type: "attach" });
|
||||
is(response.type, "tabAttached", "Should have attached");
|
||||
|
||||
tabs = yield listTabs();
|
||||
|
||||
response = yield request({ to: tabGrip.actor, type: "detach" });
|
||||
is(response.type, "detached", "Should have detached");
|
||||
|
||||
let newGrip = tabs.filter(a => a.url ==TAB1_URL).pop();
|
||||
is(newGrip.actor, tabGrip.actor, "Should have the same actor for the same tab");
|
||||
|
||||
response = yield request({ to: tabGrip.actor, type: "attach" });
|
||||
is(response.type, "tabAttached", "Should have attached");
|
||||
response = yield request({ to: tabGrip.actor, type: "detach" });
|
||||
is(response.type, "detached", "Should have detached");
|
||||
|
||||
yield removeTab(tab);
|
||||
yield closeConnection();
|
||||
finish();
|
||||
}));
|
||||
}
|
||||
|
||||
function closeConnection() {
|
||||
let deferred = promise.defer();
|
||||
gClient.close(deferred.resolve);
|
||||
return deferred.promise;
|
||||
}
|
||||
|
||||
registerCleanupFunction(function() {
|
||||
gTab1 = null;
|
||||
gTab1Actor = null;
|
||||
gTab2 = null;
|
||||
gTab2Actor = null;
|
||||
gClient = null;
|
||||
});
|
Загрузка…
Ссылка в новой задаче