mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-05 07:18:39 +09:00
import FIREFOX_52_6_0esr_RELEASE from mozilla-esr52 hg repo
This commit is contained in:
commit
dcd9973243
150858 changed files with 23884658 additions and 0 deletions
149
devtools/client/framework/test/browser_two_tabs.js
Normal file
149
devtools/client/framework/test/browser_two_tabs.js
Normal file
|
|
@ -0,0 +1,149 @@
|
|||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
/**
|
||||
* Check regression when opening two tabs
|
||||
*/
|
||||
|
||||
var { DebuggerServer } = require("devtools/server/main");
|
||||
var { DebuggerClient } = require("devtools/shared/client/main");
|
||||
|
||||
const TAB_URL_1 = "data:text/html;charset=utf-8,foo";
|
||||
const TAB_URL_2 = "data:text/html;charset=utf-8,bar";
|
||||
|
||||
var gClient;
|
||||
var gTab1, gTab2;
|
||||
var gTabActor1, gTabActor2;
|
||||
|
||||
function test() {
|
||||
waitForExplicitFinish();
|
||||
|
||||
if (!DebuggerServer.initialized) {
|
||||
DebuggerServer.init();
|
||||
DebuggerServer.addBrowserActors();
|
||||
}
|
||||
|
||||
openTabs();
|
||||
}
|
||||
|
||||
function openTabs() {
|
||||
// Open two tabs, select the second
|
||||
addTab(TAB_URL_1).then(tab1 => {
|
||||
gTab1 = tab1;
|
||||
addTab(TAB_URL_2).then(tab2 => {
|
||||
gTab2 = tab2;
|
||||
|
||||
connect();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function connect() {
|
||||
// Connect to debugger server to fetch the two tab actors
|
||||
gClient = new DebuggerClient(DebuggerServer.connectPipe());
|
||||
gClient.connect()
|
||||
.then(() => gClient.listTabs())
|
||||
.then(response => {
|
||||
// Fetch the tab actors for each tab
|
||||
gTabActor1 = response.tabs.filter(a => a.url === TAB_URL_1)[0];
|
||||
gTabActor2 = response.tabs.filter(a => a.url === TAB_URL_2)[0];
|
||||
|
||||
checkGetTab();
|
||||
});
|
||||
}
|
||||
|
||||
function checkGetTab() {
|
||||
gClient.getTab({tab: gTab1})
|
||||
.then(response => {
|
||||
is(JSON.stringify(gTabActor1), JSON.stringify(response.tab),
|
||||
"getTab returns the same tab grip for first tab");
|
||||
})
|
||||
.then(() => {
|
||||
let filter = {};
|
||||
// Filter either by tabId or outerWindowID,
|
||||
// if we are running tests OOP or not.
|
||||
if (gTab1.linkedBrowser.frameLoader.tabParent) {
|
||||
filter.tabId = gTab1.linkedBrowser.frameLoader.tabParent.tabId;
|
||||
} else {
|
||||
let windowUtils = gTab1.linkedBrowser.contentWindow
|
||||
.QueryInterface(Ci.nsIInterfaceRequestor)
|
||||
.getInterface(Ci.nsIDOMWindowUtils);
|
||||
filter.outerWindowID = windowUtils.outerWindowID;
|
||||
}
|
||||
return gClient.getTab(filter);
|
||||
})
|
||||
.then(response => {
|
||||
is(JSON.stringify(gTabActor1), JSON.stringify(response.tab),
|
||||
"getTab returns the same tab grip when filtering by tabId/outerWindowID");
|
||||
})
|
||||
.then(() => gClient.getTab({tab: gTab2}))
|
||||
.then(response => {
|
||||
is(JSON.stringify(gTabActor2), JSON.stringify(response.tab),
|
||||
"getTab returns the same tab grip for second tab");
|
||||
})
|
||||
.then(checkGetTabFailures);
|
||||
}
|
||||
|
||||
function checkGetTabFailures() {
|
||||
gClient.getTab({ tabId: -999 })
|
||||
.then(
|
||||
response => ok(false, "getTab unexpectedly succeed with a wrong tabId"),
|
||||
response => {
|
||||
is(response.error, "noTab");
|
||||
is(response.message, "Unable to find tab with tabId '-999'");
|
||||
}
|
||||
)
|
||||
.then(() => gClient.getTab({ outerWindowID: -999 }))
|
||||
.then(
|
||||
response => ok(false, "getTab unexpectedly succeed with a wrong outerWindowID"),
|
||||
response => {
|
||||
is(response.error, "noTab");
|
||||
is(response.message, "Unable to find tab with outerWindowID '-999'");
|
||||
}
|
||||
)
|
||||
.then(checkSelectedTabActor);
|
||||
|
||||
}
|
||||
|
||||
function checkSelectedTabActor() {
|
||||
// Send a naive request to the second tab actor
|
||||
// to check if it works
|
||||
gClient.request({ to: gTabActor2.consoleActor, type: "startListeners", listeners: [] }, aResponse => {
|
||||
ok("startedListeners" in aResponse, "Actor from the selected tab should respond to the request.");
|
||||
|
||||
closeSecondTab();
|
||||
});
|
||||
}
|
||||
|
||||
function closeSecondTab() {
|
||||
// Close the second tab, currently selected
|
||||
let container = gBrowser.tabContainer;
|
||||
container.addEventListener("TabClose", function onTabClose() {
|
||||
container.removeEventListener("TabClose", onTabClose);
|
||||
|
||||
checkFirstTabActor();
|
||||
});
|
||||
gBrowser.removeTab(gTab2);
|
||||
}
|
||||
|
||||
function checkFirstTabActor() {
|
||||
// then send a request to the first tab actor
|
||||
// to check if it still works
|
||||
gClient.request({ to: gTabActor1.consoleActor, type: "startListeners", listeners: [] }, aResponse => {
|
||||
ok("startedListeners" in aResponse, "Actor from the first tab should still respond.");
|
||||
|
||||
cleanup();
|
||||
});
|
||||
}
|
||||
|
||||
function cleanup() {
|
||||
let container = gBrowser.tabContainer;
|
||||
container.addEventListener("TabClose", function onTabClose() {
|
||||
container.removeEventListener("TabClose", onTabClose);
|
||||
|
||||
gClient.close().then(finish);
|
||||
});
|
||||
gBrowser.removeTab(gTab1);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue