mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-23 10:15:41 +00:00
Bug 1275116 - Fix {document|target}UrlPatterns by passing in the correct arguments to SingleMatchPattern.match. r=kmag
MozReview-Commit-ID: LLNu7jNfUZq G: changed browser/components/extensions/test/browser/head.js --HG-- extra : transplant_source : %88%06%94%11%B5l%3B%9F%26%9CjGL%A3%F3%11%7F%40%D4Q
This commit is contained in:
parent
a2c5415c76
commit
7ea866f07e
@ -440,15 +440,22 @@ MenuItem.prototype = {
|
||||
}
|
||||
|
||||
let docPattern = this.documentUrlMatchPattern;
|
||||
if (docPattern && !docPattern.matches(contextData.pageUrl)) {
|
||||
let pageURI = Services.io.newURI(contextData.pageUrl, null, null);
|
||||
if (docPattern && !docPattern.matches(pageURI)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
let isMedia = contextData.onImage || contextData.onAudio || contextData.onVideo;
|
||||
let targetPattern = this.targetUrlMatchPattern;
|
||||
if (isMedia && targetPattern && !targetPattern.matches(contextData.srcURL)) {
|
||||
// TODO: double check if mediaURL is always set when we need it
|
||||
return false;
|
||||
if (targetPattern) {
|
||||
let isMedia = contextData.onImage || contextData.onAudio || contextData.onVideo;
|
||||
if (!isMedia) {
|
||||
return false;
|
||||
}
|
||||
let srcURI = Services.io.newURI(contextData.srcUrl, null, null);
|
||||
if (!targetPattern.matches(srcURI)) {
|
||||
// TODO: double check if mediaURL is always set when we need it
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -32,6 +32,7 @@ support-files =
|
||||
[browser_ext_contextMenus_icons.js]
|
||||
[browser_ext_contextMenus_radioGroups.js]
|
||||
[browser_ext_contextMenus_uninstall.js]
|
||||
[browser_ext_contextMenus_urlPatterns.js]
|
||||
[browser_ext_currentWindow.js]
|
||||
[browser_ext_getViews.js]
|
||||
[browser_ext_history.js]
|
||||
|
@ -0,0 +1,186 @@
|
||||
/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set sts=2 sw=2 et tw=80: */
|
||||
"use strict";
|
||||
|
||||
add_task(function* () {
|
||||
let tab1 = yield BrowserTestUtils.openNewForegroundTab(gBrowser,
|
||||
"http://mochi.test:8888/browser/browser/components/extensions/test/browser/context.html");
|
||||
|
||||
let extension = ExtensionTestUtils.loadExtension({
|
||||
manifest: {
|
||||
"permissions": ["contextMenus"],
|
||||
},
|
||||
|
||||
background: function() {
|
||||
// Test menu items using targetUrlPatterns.
|
||||
browser.contextMenus.create({
|
||||
title: "targetUrlPatterns-patternMatches-contextAll",
|
||||
targetUrlPatterns: ["*://*/*ctxmenu-image.png"],
|
||||
contexts: ["all"],
|
||||
});
|
||||
|
||||
browser.contextMenus.create({
|
||||
title: "targetUrlPatterns-patternMatches-contextImage",
|
||||
targetUrlPatterns: ["*://*/*ctxmenu-image.png"],
|
||||
contexts: ["image"],
|
||||
});
|
||||
|
||||
browser.contextMenus.create({
|
||||
title: "targetUrlPatterns-patternDoesNotMatch-contextAll",
|
||||
targetUrlPatterns: ["*://*/does-not-match"],
|
||||
contexts: ["all"],
|
||||
});
|
||||
|
||||
browser.contextMenus.create({
|
||||
title: "targetUrlPatterns-patternDoesNotMatch-contextImage",
|
||||
targetUrlPatterns: ["*://*/does-not-match"],
|
||||
contexts: ["image"],
|
||||
});
|
||||
|
||||
// Test menu items using documentUrlPatterns.
|
||||
browser.contextMenus.create({
|
||||
title: "documentUrlPatterns-patternMatches-contextAll",
|
||||
documentUrlPatterns: ["*://*/*context.html"],
|
||||
contexts: ["all"],
|
||||
});
|
||||
|
||||
browser.contextMenus.create({
|
||||
title: "documentUrlPatterns-patternMatches-contextImage",
|
||||
documentUrlPatterns: ["*://*/*context.html", "http://*/url-that-does-not-match"],
|
||||
contexts: ["image"],
|
||||
});
|
||||
|
||||
browser.contextMenus.create({
|
||||
title: "documentUrlPatterns-patternDoesNotMatch-contextAll",
|
||||
documentUrlPatterns: ["*://*/does-not-match"],
|
||||
contexts: ["all"],
|
||||
});
|
||||
|
||||
browser.contextMenus.create({
|
||||
title: "documentUrlPatterns-patternDoesNotMatch-contextImage",
|
||||
documentUrlPatterns: ["*://*/does-not-match"],
|
||||
contexts: ["image"],
|
||||
});
|
||||
|
||||
// Test menu items using both targetUrlPatterns and documentUrlPatterns.
|
||||
browser.contextMenus.create({
|
||||
title: "documentUrlPatterns-patternMatches-targetUrlPatterns-patternMatches-contextAll",
|
||||
documentUrlPatterns: ["*://*/*context.html"],
|
||||
targetUrlPatterns: ["*://*/*ctxmenu-image.png"],
|
||||
contexts: ["all"],
|
||||
});
|
||||
|
||||
browser.contextMenus.create({
|
||||
title: "documentUrlPatterns-patternDoesNotMatch-targetUrlPatterns-patternMatches-contextAll",
|
||||
documentUrlPatterns: ["*://does-not-match"],
|
||||
targetUrlPatterns: ["*://*/*ctxmenu-image.png"],
|
||||
contexts: ["all"],
|
||||
});
|
||||
|
||||
browser.contextMenus.create({
|
||||
title: "documentUrlPatterns-patternMatches-targetUrlPatterns-patternDoesNotMatch-contextAll",
|
||||
documentUrlPatterns: ["*://*/*context.html"],
|
||||
targetUrlPatterns: ["*://does-not-match"],
|
||||
contexts: ["all"],
|
||||
});
|
||||
|
||||
browser.contextMenus.create({
|
||||
title: "documentUrlPatterns-patternDoesNotMatch-targetUrlPatterns-patternDoesNotMatch-contextAll",
|
||||
documentUrlPatterns: ["*://does-not-match"],
|
||||
targetUrlPatterns: ["*://does-not-match"],
|
||||
contexts: ["all"],
|
||||
});
|
||||
|
||||
browser.contextMenus.create({
|
||||
title: "documentUrlPatterns-patternMatches-targetUrlPatterns-patternMatches-contextImage",
|
||||
documentUrlPatterns: ["*://*/*context.html"],
|
||||
targetUrlPatterns: ["*://*/*ctxmenu-image.png"],
|
||||
contexts: ["image"],
|
||||
});
|
||||
|
||||
browser.contextMenus.create({
|
||||
title: "documentUrlPatterns-patternDoesNotMatch-targetUrlPatterns-patternMatches-contextImage",
|
||||
documentUrlPatterns: ["*://does-not-match"],
|
||||
targetUrlPatterns: ["*://*/*ctxmenu-image.png"],
|
||||
contexts: ["image"],
|
||||
});
|
||||
|
||||
browser.contextMenus.create({
|
||||
title: "documentUrlPatterns-patternMatches-targetUrlPatterns-patternDoesNotMatch-contextImage",
|
||||
documentUrlPatterns: ["*://*/*context.html"],
|
||||
targetUrlPatterns: ["*://does-not-match"],
|
||||
contexts: ["image"],
|
||||
});
|
||||
|
||||
browser.contextMenus.create({
|
||||
title: "documentUrlPatterns-patternDoesNotMatch-targetUrlPatterns-patternDoesNotMatch-contextImage",
|
||||
documentUrlPatterns: ["*://does-not-match"],
|
||||
targetUrlPatterns: ["*://does-not-match"],
|
||||
contexts: ["image"],
|
||||
});
|
||||
|
||||
browser.test.notifyPass("contextmenus-urlPatterns");
|
||||
},
|
||||
});
|
||||
|
||||
function* confirmContextMenuItems(menu, expected) {
|
||||
for (let [label, shouldShow] of expected) {
|
||||
let items = menu.getElementsByAttribute("label", label);
|
||||
if (shouldShow) {
|
||||
is(items.length, 1, `The menu item for label ${label} was correctly shown`);
|
||||
} else {
|
||||
is(items.length, 0, `The menu item for label ${label} was correctly not shown`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
yield extension.startup();
|
||||
yield extension.awaitFinish("contextmenus-urlPatterns");
|
||||
|
||||
let extensionContextMenu = yield openExtensionContextMenu("#img1");
|
||||
let expected = [
|
||||
["targetUrlPatterns-patternMatches-contextAll", true],
|
||||
["targetUrlPatterns-patternMatches-contextImage", true],
|
||||
["targetUrlPatterns-patternDoesNotMatch-contextAll", false],
|
||||
["targetUrlPatterns-patternDoesNotMatch-contextImage", false],
|
||||
["documentUrlPatterns-patternMatches-contextAll", true],
|
||||
["documentUrlPatterns-patternMatches-contextImage", true],
|
||||
["documentUrlPatterns-patternDoesNotMatch-contextAll", false],
|
||||
["documentUrlPatterns-patternDoesNotMatch-contextImage", false],
|
||||
["documentUrlPatterns-patternMatches-targetUrlPatterns-patternMatches-contextAll", true],
|
||||
["documentUrlPatterns-patternDoesNotMatch-targetUrlPatterns-patternMatches-contextAll", false],
|
||||
["documentUrlPatterns-patternMatches-targetUrlPatterns-patternDoesNotMatch-contextAll", false],
|
||||
["documentUrlPatterns-patternDoesNotMatch-targetUrlPatterns-patternDoesNotMatch-contextAll", false],
|
||||
["documentUrlPatterns-patternMatches-targetUrlPatterns-patternMatches-contextImage", true],
|
||||
["documentUrlPatterns-patternDoesNotMatch-targetUrlPatterns-patternMatches-contextImage", false],
|
||||
["documentUrlPatterns-patternMatches-targetUrlPatterns-patternDoesNotMatch-contextImage", false],
|
||||
["documentUrlPatterns-patternDoesNotMatch-targetUrlPatterns-patternDoesNotMatch-contextImage", false],
|
||||
];
|
||||
yield confirmContextMenuItems(extensionContextMenu, expected);
|
||||
yield closeContextMenu();
|
||||
|
||||
let contextMenu = yield openContextMenu("body");
|
||||
expected = [
|
||||
["targetUrlPatterns-patternMatches-contextAll", false],
|
||||
["targetUrlPatterns-patternMatches-contextImage", false],
|
||||
["targetUrlPatterns-patternDoesNotMatch-contextAll", false],
|
||||
["targetUrlPatterns-patternDoesNotMatch-contextImage", false],
|
||||
["documentUrlPatterns-patternMatches-contextAll", true],
|
||||
["documentUrlPatterns-patternMatches-contextImage", false],
|
||||
["documentUrlPatterns-patternDoesNotMatch-contextAll", false],
|
||||
["documentUrlPatterns-patternDoesNotMatch-contextImage", false],
|
||||
["documentUrlPatterns-patternMatches-targetUrlPatterns-patternMatches-contextAll", false],
|
||||
["documentUrlPatterns-patternDoesNotMatch-targetUrlPatterns-patternMatches-contextAll", false],
|
||||
["documentUrlPatterns-patternMatches-targetUrlPatterns-patternDoesNotMatch-contextAll", false],
|
||||
["documentUrlPatterns-patternDoesNotMatch-targetUrlPatterns-patternDoesNotMatch-contextAll", false],
|
||||
["documentUrlPatterns-patternMatches-targetUrlPatterns-patternMatches-contextImage", false],
|
||||
["documentUrlPatterns-patternDoesNotMatch-targetUrlPatterns-patternMatches-contextImage", false],
|
||||
["documentUrlPatterns-patternMatches-targetUrlPatterns-patternDoesNotMatch-contextImage", false],
|
||||
["documentUrlPatterns-patternDoesNotMatch-targetUrlPatterns-patternDoesNotMatch-contextImage", false],
|
||||
];
|
||||
yield confirmContextMenuItems(contextMenu, expected);
|
||||
yield closeContextMenu();
|
||||
|
||||
yield extension.unload();
|
||||
yield BrowserTestUtils.removeTab(tab1);
|
||||
});
|
@ -124,10 +124,10 @@ function closeBrowserAction(extension, win = window) {
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
function* openContextMenu(id) {
|
||||
function* openContextMenu(selector="#img1") {
|
||||
let contentAreaContextMenu = document.getElementById("contentAreaContextMenu");
|
||||
let popupShownPromise = BrowserTestUtils.waitForEvent(contentAreaContextMenu, "popupshown");
|
||||
yield BrowserTestUtils.synthesizeMouseAtCenter(id, {type: "contextmenu", button: 2}, gBrowser.selectedBrowser);
|
||||
yield BrowserTestUtils.synthesizeMouseAtCenter(selector, {type: "contextmenu"}, gBrowser.selectedBrowser);
|
||||
yield popupShownPromise;
|
||||
return contentAreaContextMenu;
|
||||
}
|
||||
@ -139,8 +139,8 @@ function* closeContextMenu() {
|
||||
yield popupHiddenPromise;
|
||||
}
|
||||
|
||||
function* openExtensionContextMenu() {
|
||||
let contextMenu = yield openContextMenu("#img1");
|
||||
function* openExtensionContextMenu(selector="#img1") {
|
||||
let contextMenu = yield openContextMenu(selector);
|
||||
let topLevelMenu = contextMenu.getElementsByAttribute("ext-type", "top-level-menu");
|
||||
|
||||
// Return null if the extension only has one item and therefore no extension menu.
|
||||
|
Loading…
Reference in New Issue
Block a user