Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set sts=2 sw=2 et tw=80: */
"use strict";
add_task(async function test_srcUrl_of_redirected_image() {
let extension = ExtensionTestUtils.loadExtension({
manifest: {
permissions: ["contextMenus"],
},
background() {
browser.contextMenus.onClicked.addListener(info => {
browser.test.assertEq(
"before_redir",
info.menuItemId,
"Expected menu item matched for pre-redirect URL"
);
browser.test.assertEq("image", info.mediaType, "Expected mediaType");
browser.test.assertEq(
info.srcUrl,
"Expected srcUrl"
);
browser.test.sendMessage("contextMenus_onClicked");
});
browser.contextMenus.create({
id: "before_redir",
title: "MyMenu",
targetUrlPatterns: ["*://*/*redirect_to.sjs*"],
});
browser.contextMenus.create(
{
id: "after_redir",
title: "MyMenu",
targetUrlPatterns: ["*://*/*/ctxmenu-image.png*"],
},
() => {
browser.test.sendMessage("menus_setup");
}
);
},
});
await extension.startup();
await extension.awaitMessage("menus_setup");
await BrowserTestUtils.withNewTab(
{
gBrowser,
},
async browser => {
// Verify that the image has been loaded, which implies that the redirect has
// been followed.
let imgWidth = await SpecialPowers.spawn(browser, [], () => {
let img = content.document.getElementById("img_that_redirects");
return img.naturalWidth;
});
is(imgWidth, 100, "Image has been loaded");
let menu = await openContextMenu("#img_that_redirects");
let items = menu.getElementsByAttribute("label", "MyMenu");
is(items.length, 1, "Only one menu item should have been matched");
await closeExtensionContextMenu(items[0]);
await extension.awaitMessage("contextMenus_onClicked");
}
);
await extension.unload();
});