195 lines
5.5 KiB
JavaScript
195 lines
5.5 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
add_task(async function () {
|
|
// allow top level data: URI navigations, otherwise loading data: URIs
|
|
// in toplevel windows fail.
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [["security.data_uri.block_toplevel_data_uri_navigations", false]],
|
|
});
|
|
|
|
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, null, false);
|
|
|
|
tab.linkedBrowser.stop(); // stop the about:blank load
|
|
|
|
let writeDomainURL = encodeURI(
|
|
"data:text/html,<script>document.write(document.domain);</script>"
|
|
);
|
|
|
|
let tests = [
|
|
{
|
|
name: "view image with background image",
|
|
url: "http://mochi.test:8888/",
|
|
element: "body",
|
|
opensNewTab: true,
|
|
go() {
|
|
return SpecialPowers.spawn(
|
|
gBrowser.selectedBrowser,
|
|
[{ writeDomainURL }],
|
|
async function (arg) {
|
|
let contentBody = content.document.body;
|
|
contentBody.style.backgroundImage =
|
|
"url('" + arg.writeDomainURL + "')";
|
|
|
|
return "context-viewimage";
|
|
}
|
|
);
|
|
},
|
|
verify(browser) {
|
|
return SpecialPowers.spawn(browser, [], async function () {
|
|
Assert.equal(
|
|
content.document.body.textContent,
|
|
"",
|
|
"no domain was inherited for view image with background image"
|
|
);
|
|
});
|
|
},
|
|
},
|
|
{
|
|
name: "view image",
|
|
url: "http://mochi.test:8888/",
|
|
element: "img",
|
|
opensNewTab: true,
|
|
go() {
|
|
return SpecialPowers.spawn(
|
|
gBrowser.selectedBrowser,
|
|
[{ writeDomainURL }],
|
|
async function (arg) {
|
|
let doc = content.document;
|
|
let img = doc.createElement("img");
|
|
img.height = 100;
|
|
img.width = 100;
|
|
img.setAttribute("src", arg.writeDomainURL);
|
|
doc.body.insertBefore(img, doc.body.firstElementChild);
|
|
|
|
return "context-viewimage";
|
|
}
|
|
);
|
|
},
|
|
verify(browser) {
|
|
return SpecialPowers.spawn(browser, [], async function () {
|
|
Assert.equal(
|
|
content.document.body.textContent,
|
|
"",
|
|
"no domain was inherited for view image"
|
|
);
|
|
});
|
|
},
|
|
},
|
|
{
|
|
name: "show only this frame",
|
|
url: "http://mochi.test:8888/",
|
|
element: "html",
|
|
frameIndex: 0,
|
|
go() {
|
|
return SpecialPowers.spawn(
|
|
gBrowser.selectedBrowser,
|
|
[{ writeDomainURL }],
|
|
async function (arg) {
|
|
let doc = content.document;
|
|
let iframe = doc.createElement("iframe");
|
|
iframe.setAttribute("src", arg.writeDomainURL);
|
|
doc.body.insertBefore(iframe, doc.body.firstElementChild);
|
|
|
|
// Wait for the iframe to load.
|
|
return new Promise(resolve => {
|
|
iframe.addEventListener(
|
|
"load",
|
|
function () {
|
|
resolve("context-showonlythisframe");
|
|
},
|
|
{ capture: true, once: true }
|
|
);
|
|
});
|
|
}
|
|
);
|
|
},
|
|
verify(browser) {
|
|
return SpecialPowers.spawn(browser, [], async function () {
|
|
Assert.equal(
|
|
content.document.body.textContent,
|
|
"",
|
|
"no domain was inherited for 'show only this frame'"
|
|
);
|
|
});
|
|
},
|
|
},
|
|
];
|
|
|
|
let contentAreaContextMenu = document.getElementById(
|
|
"contentAreaContextMenu"
|
|
);
|
|
|
|
for (let test of tests) {
|
|
let loadedPromise = BrowserTestUtils.browserLoaded(
|
|
gBrowser.selectedBrowser
|
|
);
|
|
BrowserTestUtils.startLoadingURIString(gBrowser, test.url);
|
|
await loadedPromise;
|
|
|
|
info("Run subtest " + test.name);
|
|
let commandToRun = await test.go();
|
|
|
|
let popupShownPromise = BrowserTestUtils.waitForEvent(
|
|
contentAreaContextMenu,
|
|
"popupshown"
|
|
);
|
|
|
|
let browsingContext = gBrowser.selectedBrowser.browsingContext;
|
|
if (test.frameIndex != null) {
|
|
browsingContext = browsingContext.children[test.frameIndex];
|
|
}
|
|
|
|
await new Promise(r => {
|
|
SimpleTest.executeSoon(r);
|
|
});
|
|
|
|
// Sometimes, the iframe test fails as the child iframe hasn't finishing layout
|
|
// yet. Try again in this case.
|
|
while (true) {
|
|
try {
|
|
await BrowserTestUtils.synthesizeMouse(
|
|
test.element,
|
|
3,
|
|
3,
|
|
{ type: "contextmenu", button: 2 },
|
|
browsingContext
|
|
);
|
|
} catch (ex) {
|
|
continue;
|
|
}
|
|
break;
|
|
}
|
|
|
|
await popupShownPromise;
|
|
info("onImage: " + gContextMenu.onImage);
|
|
|
|
let loadedAfterCommandPromise = test.opensNewTab
|
|
? BrowserTestUtils.waitForNewTab(gBrowser, null, true)
|
|
: BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser);
|
|
let popupHiddenPromise = BrowserTestUtils.waitForEvent(
|
|
contentAreaContextMenu,
|
|
"popuphidden"
|
|
);
|
|
if (commandToRun == "context-showonlythisframe") {
|
|
let subMenu = document.getElementById("frame");
|
|
let subMenuShown = BrowserTestUtils.waitForEvent(subMenu, "popupshown");
|
|
subMenu.openMenu(true);
|
|
await subMenuShown;
|
|
}
|
|
contentAreaContextMenu.activateItem(document.getElementById(commandToRun));
|
|
let result = await loadedAfterCommandPromise;
|
|
|
|
await test.verify(
|
|
test.opensNewTab ? result.linkedBrowser : gBrowser.selectedBrowser
|
|
);
|
|
|
|
await popupHiddenPromise;
|
|
|
|
if (test.opensNewTab) {
|
|
gBrowser.removeCurrentTab();
|
|
}
|
|
}
|
|
|
|
gBrowser.removeCurrentTab();
|
|
});
|