1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
/* -*- 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(
"http://mochi.test:8888/browser/browser/components/extensions/test/browser/redirect_to.sjs?ctxmenu-image.png",
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,
url: "http://mochi.test:8888/browser/browser/components/extensions/test/browser/context_with_redirect.html",
},
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();
});
|