зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1379466 - Use auxclick event to trigger new tab on middle click. r=smaug
So it is still preventDefault()able once non-primary clicks aren't web visible. Don't let browser.js' contentAreaClick handle any non-primary clicks. ClickHandlerChild.jsm handles them first anyway. Can probably rip it out entirely in another bug. Differential Revision: https://phabricator.services.mozilla.com/D26791 --HG-- extra : moz-landing-system : lando
This commit is contained in:
Родитель
1b8f11bedf
Коммит
1cabd68a41
|
@ -19,7 +19,8 @@ ChromeUtils.defineModuleGetter(this, "E10SUtils",
|
|||
|
||||
class ClickHandlerChild extends ActorChild {
|
||||
handleEvent(event) {
|
||||
if (!event.isTrusted || event.defaultPrevented || event.button == 2) {
|
||||
if (!event.isTrusted || event.defaultPrevented || event.button == 2 ||
|
||||
(event.type == "click" && event.button == 1)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -6281,7 +6281,7 @@ function hrefAndLinkNodeForClickEvent(event) {
|
|||
* @note default event is prevented if the click is handled.
|
||||
*/
|
||||
function contentAreaClick(event, isPanelClick) {
|
||||
if (!event.isTrusted || event.defaultPrevented || event.button == 2)
|
||||
if (!event.isTrusted || event.defaultPrevented || event.button != 0)
|
||||
return;
|
||||
|
||||
let [href, linkNode] = hrefAndLinkNodeForClickEvent(event);
|
||||
|
|
|
@ -123,6 +123,7 @@ var gTests = [
|
|||
setup() {},
|
||||
clean() {},
|
||||
event: { button: 1 },
|
||||
wantedEvent: "auxclick",
|
||||
targets: [ "commonlink", "mathxlink", "svgxlink", "maplink" ],
|
||||
expectedInvokedMethods: [ "urlSecurityCheck", "openLinkIn" ],
|
||||
preventDefault: true,
|
||||
|
@ -137,6 +138,7 @@ var gTests = [
|
|||
Services.prefs.clearUserPref("browser.tabs.opentabfor.middleclick");
|
||||
},
|
||||
event: { button: 1 },
|
||||
wantedEvent: "auxclick",
|
||||
targets: [ "commonlink", "mathxlink", "svgxlink", "maplink" ],
|
||||
expectedInvokedMethods: [ "urlSecurityCheck", "openLinkIn" ],
|
||||
preventDefault: true,
|
||||
|
@ -153,6 +155,7 @@ var gTests = [
|
|||
Services.prefs.clearUserPref("general.autoScroll");
|
||||
},
|
||||
event: { button: 1 },
|
||||
wantedEvent: "auxclick",
|
||||
targets: [ "emptylink" ],
|
||||
expectedInvokedMethods: [ "middleMousePaste" ],
|
||||
preventDefault: true,
|
||||
|
@ -208,9 +211,13 @@ function test() {
|
|||
// Click handler used to steal click events.
|
||||
var gClickHandler = {
|
||||
handleEvent(event) {
|
||||
if (event.type == "click" && event.button != 0) {
|
||||
return;
|
||||
}
|
||||
let linkId = event.target.id || event.target.localName;
|
||||
is(event.type, "click",
|
||||
gCurrentTest.desc + ":Handler received a click event on " + linkId);
|
||||
let wantedEvent = gCurrentTest.wantedEvent || "click";
|
||||
is(event.type, wantedEvent,
|
||||
`${gCurrentTest.desc}:Handler received a ${wantedEvent} event on ${linkId}`);
|
||||
|
||||
let isPanelClick = linkId == "panellink";
|
||||
gTestWin.contentAreaClick(event, isPanelClick);
|
||||
|
@ -241,6 +248,7 @@ var gClickHandler = {
|
|||
function setupTestBrowserWindow() {
|
||||
// Steal click events and don't propagate them.
|
||||
gTestWin.addEventListener("click", gClickHandler, true);
|
||||
gTestWin.addEventListener("auxclick", gClickHandler, true);
|
||||
|
||||
// Replace methods.
|
||||
gReplacedMethods.forEach(function(methodName) {
|
||||
|
@ -286,7 +294,7 @@ function runNextTest() {
|
|||
|
||||
info(gCurrentTest.desc + ": testing " + target);
|
||||
|
||||
// Fire click event.
|
||||
// Fire (aux)click event.
|
||||
let targetElt = gTestWin.content.document.getElementById(target);
|
||||
ok(targetElt, gCurrentTest.desc + ": target is valid (" + targetElt.id + ")");
|
||||
EventUtils.synthesizeMouseAtCenter(targetElt, gCurrentTest.event, gTestWin.content);
|
||||
|
@ -295,6 +303,7 @@ function runNextTest() {
|
|||
function finishTest() {
|
||||
info("Restoring browser...");
|
||||
gTestWin.removeEventListener("click", gClickHandler, true);
|
||||
gTestWin.removeEventListener("auxclick", gClickHandler, true);
|
||||
gTestWin.close();
|
||||
finish();
|
||||
}
|
||||
|
|
|
@ -77,6 +77,7 @@ let ACTORS = {
|
|||
module: "resource:///actors/ClickHandlerChild.jsm",
|
||||
events: {
|
||||
"click": {capture: true, mozSystemGroup: true},
|
||||
"auxclick": {capture: true, mozSystemGroup: true},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
Загрузка…
Ссылка в новой задаче