зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1480130 - Shadow DOM interferes with Cmd+click handling, r=felipe
This commit is contained in:
Родитель
b9479cb08b
Коммит
69b0c7d14a
|
@ -5891,9 +5891,9 @@ function hrefAndLinkNodeForClickEvent(event) {
|
|||
aNode instanceof HTMLLinkElement);
|
||||
}
|
||||
|
||||
let node = event.target;
|
||||
let node = event.composedTarget;
|
||||
while (node && !isHTMLLink(node)) {
|
||||
node = node.parentNode;
|
||||
node = node.flattenedTreeParentNode;
|
||||
}
|
||||
|
||||
if (node)
|
||||
|
@ -5901,7 +5901,7 @@ function hrefAndLinkNodeForClickEvent(event) {
|
|||
|
||||
// If there is no linkNode, try simple XLink.
|
||||
let href, baseURI;
|
||||
node = event.target;
|
||||
node = event.composedTarget;
|
||||
while (node && !href) {
|
||||
if (node.nodeType == Node.ELEMENT_NODE &&
|
||||
(node.localName == "a" ||
|
||||
|
@ -5914,7 +5914,7 @@ function hrefAndLinkNodeForClickEvent(event) {
|
|||
break;
|
||||
}
|
||||
}
|
||||
node = node.parentNode;
|
||||
node = node.flattenedTreeParentNode;
|
||||
}
|
||||
|
||||
// In case of XLink, we don't return the node we got href from since
|
||||
|
|
|
@ -17,12 +17,14 @@ ChromeUtils.defineModuleGetter(this, "Downloads",
|
|||
|
||||
function setup() {
|
||||
Services.prefs.setBoolPref("browser.altClickSave", true);
|
||||
Services.prefs.setBoolPref("dom.webcomponents.shadowdom.enabled", true);
|
||||
|
||||
let testPage =
|
||||
"data:text/html," +
|
||||
'<p><a id="commonlink" href="http://mochi.test/moz/">Common link</a></p>' +
|
||||
'<p><math id="mathxlink" xmlns="http://www.w3.org/1998/Math/MathML" xlink:type="simple" xlink:href="http://mochi.test/moz/"><mtext>MathML XLink</mtext></math></p>' +
|
||||
'<p><svg id="svgxlink" xmlns="http://www.w3.org/2000/svg" width="100px" height="50px" version="1.1"><a xlink:type="simple" xlink:href="http://mochi.test/moz/"><text transform="translate(10, 25)">SVG XLink</text></a></svg></p>';
|
||||
'<p><svg id="svgxlink" xmlns="http://www.w3.org/2000/svg" width="100px" height="50px" version="1.1"><a xlink:type="simple" xlink:href="http://mochi.test/moz/"><text transform="translate(10, 25)">SVG XLink</text></a></svg></p><br>' +
|
||||
'<span id="host"></span><script>document.getElementById("host").attachShadow({mode: "closed"}).appendChild(document.getElementById("commonlink").cloneNode(true));</script>';
|
||||
|
||||
return BrowserTestUtils.openNewForegroundTab(gBrowser, testPage);
|
||||
}
|
||||
|
@ -39,6 +41,7 @@ async function clean_up() {
|
|||
await PlacesUtils.history.clear();
|
||||
|
||||
Services.prefs.clearUserPref("browser.altClickSave");
|
||||
Services.prefs.clearUserPref("dom.webcomponents.shadowdom.enabled");
|
||||
BrowserTestUtils.removeTab(gBrowser.selectedTab);
|
||||
}
|
||||
|
||||
|
@ -70,6 +73,34 @@ add_task(async function test_alt_click() {
|
|||
await clean_up();
|
||||
});
|
||||
|
||||
add_task(async function test_alt_click_shadow_dom() {
|
||||
await setup();
|
||||
|
||||
let downloadList = await Downloads.getList(Downloads.ALL);
|
||||
let downloads = [];
|
||||
let downloadView;
|
||||
// When 1 download has been attempted then resolve the promise.
|
||||
let finishedAllDownloads = new Promise( (resolve) => {
|
||||
downloadView = {
|
||||
onDownloadAdded(aDownload) {
|
||||
downloads.push(aDownload);
|
||||
resolve();
|
||||
},
|
||||
};
|
||||
});
|
||||
await downloadList.addView(downloadView);
|
||||
await BrowserTestUtils.synthesizeMouseAtCenter("#host", {altKey: true}, gBrowser.selectedBrowser);
|
||||
|
||||
// Wait for all downloads to be added to the download list.
|
||||
await finishedAllDownloads;
|
||||
await downloadList.removeView(downloadView);
|
||||
|
||||
is(downloads.length, 1, "1 downloads");
|
||||
is(downloads[0].source.url, "http://mochi.test/moz/", "Downloaded #commonlink element in shadow DOM.");
|
||||
|
||||
await clean_up();
|
||||
});
|
||||
|
||||
add_task(async function test_alt_click_on_xlinks() {
|
||||
await setup();
|
||||
|
||||
|
|
|
@ -131,9 +131,9 @@ class ClickEventHandler {
|
|||
aNode instanceof content.HTMLLinkElement);
|
||||
}
|
||||
|
||||
let node = event.target;
|
||||
let node = event.composedTarget;
|
||||
while (node && !isHTMLLink(node)) {
|
||||
node = node.parentNode;
|
||||
node = node.flattenedTreeParentNode;
|
||||
}
|
||||
|
||||
if (node)
|
||||
|
@ -141,7 +141,7 @@ class ClickEventHandler {
|
|||
|
||||
// If there is no linkNode, try simple XLink.
|
||||
let href, baseURI;
|
||||
node = event.target;
|
||||
node = event.composedTarget;
|
||||
while (node && !href) {
|
||||
if (node.nodeType == content.Node.ELEMENT_NODE &&
|
||||
(node.localName == "a" ||
|
||||
|
@ -153,7 +153,7 @@ class ClickEventHandler {
|
|||
break;
|
||||
}
|
||||
}
|
||||
node = node.parentNode;
|
||||
node = node.flattenedTreeParentNode;
|
||||
}
|
||||
|
||||
// In case of XLink, we don't return the node we got href from since
|
||||
|
|
Загрузка…
Ссылка в новой задаче