Bug 1911736 - Enable dom.popup.experimental on Nightly, r=edgar

Differential Revision: https://phabricator.services.mozilla.com/D225518
This commit is contained in:
Olli Pettay
2024-10-15 19:06:51 +00:00
parent 9f1d3166de
commit f1b3788478
5 changed files with 123 additions and 26 deletions

View File

@@ -24,6 +24,7 @@
#include "mozilla/MouseEvents.h"
#include "mozilla/PresShell.h"
#include "mozilla/ScrollContainerFrame.h"
#include "mozilla/StaticPrefs_dom.h"
#include "mozilla/TouchEvents.h"
#include "nsView.h"
#include "nsGkAtoms.h"
@@ -115,6 +116,11 @@ void nsCoreUtils::DispatchClickEvent(XULTreeElement* aTree, int32_t aRowIndex,
int32_t cnvdY = presContext->CSSPixelsToDevPixels(tcY + int32_t(rect.y) + 1) +
presContext->AppUnitsToDevPixels(offset.y);
if (StaticPrefs::dom_popup_experimental()) {
// This isn't needed once bug 1924790 is fixed.
tcElm->OwnerDoc()->NotifyUserGestureActivation();
}
// XUL is just desktop, so there is no real reason for senfing touch events.
DispatchMouseEvent(eMouseDown, cnvdX, cnvdY, tcElm, tcFrame, presShell,
rootWidget);

View File

@@ -72,6 +72,7 @@
#include "mozilla/PresShell.h"
#include "mozilla/ProfilerMarkers.h"
#include "mozilla/ScrollContainerFrame.h"
#include "mozilla/StaticPrefs_dom.h"
#include "mozilla/StaticPrefs_ui.h"
#include "mozilla/dom/Element.h"
#include "mozilla/dom/HTMLLabelElement.h"
@@ -2556,6 +2557,11 @@ void LocalAccessible::DispatchClickEvent(nsIContent* aContent,
// Simulate a touch interaction by dispatching touch events with mouse events.
nsCoreUtils::DispatchTouchEvent(eTouchStart, x, y, aContent, frame, presShell,
widget);
if (StaticPrefs::dom_popup_experimental()) {
// This isn't needed once bug 1924790 is fixed.
aContent->OwnerDoc()->NotifyUserGestureActivation();
}
nsCoreUtils::DispatchMouseEvent(eMouseDown, x, y, aContent, frame, presShell,
widget);
nsCoreUtils::DispatchTouchEvent(eTouchEnd, x, y, aContent, frame, presShell,

View File

@@ -11,7 +11,7 @@
<div id="target" style="width: 50px; height: 50px; background: green"></div>
<script>
const experimental = SpecialPowers.getBoolPref("dom.popup.experimental");
var experimental = false;
function sendMouseEvent(element, eventName, button, listenEventName, handler) {
let needToCheckHandler = false;
@@ -61,7 +61,31 @@ const MIDDLE_BUTTON = 1;
const RIGHT_BUTTON = 2;
let target = document.getElementById("target");
add_task(function testMouseDownUpMove() {
async function beginTest() {
if (!experimental) {
info("NOT EXPERIMENTAL");
await SpecialPowers.pushPrefEnv({
set: [
["dom.popup.experimental", false]
],
});
} else {
info("EXPERIMENTAL");
await SpecialPowers.pushPrefEnv({
set: [
["dom.popup.experimental", true],
],
});
}
}
async function endTest() {
await SpecialPowers.popPrefEnv();
}
async function testMouseDownUpMove() {
await beginTest();
// Left button
sendMouseEvent(target, "mousedown", LEFT_BUTTON, "mousedown", checkAllowOpenPopup);
sendMouseEvent(target, "mousemove", LEFT_BUTTON, "mousemove", checkBlockOpenPopup);
@@ -78,15 +102,23 @@ add_task(function testMouseDownUpMove() {
checkBlockOpenPopup);
sendMouseEvent(target, "mousemove", RIGHT_BUTTON, "mousemove", checkBlockOpenPopup);
sendMouseEvent(target, "mouseup", RIGHT_BUTTON, "mouseup", checkBlockOpenPopup);
});
add_task(function testMouseClick() {
await endTest();
}
async function testMouseClick() {
await beginTest();
// Left button
sendMouseEvent(target, "mousedown", LEFT_BUTTON);
sendMouseEvent(target, "mouseup", LEFT_BUTTON, "click", checkAllowOpenPopup);
});
add_task(function testMouseAuxclick() {
await endTest();
}
async function testMouseAuxclick() {
await beginTest();
// Middle button
sendMouseEvent(target, "mousedown", MIDDLE_BUTTON);
sendMouseEvent(target, "mouseup", MIDDLE_BUTTON, "auxclick", checkAllowOpenPopup);
@@ -94,7 +126,20 @@ add_task(function testMouseAuxclick() {
// Right button
sendMouseEvent(target, "mousedown", RIGHT_BUTTON);
sendMouseEvent(target, "mouseup", RIGHT_BUTTON, "auxclick", checkAllowOpenPopup);
});
await endTest();
}
add_task(testMouseDownUpMove);
add_task(testMouseClick);
add_task(testMouseAuxclick);
add_task(() => experimental = true);
add_task(testMouseDownUpMove);
add_task(testMouseClick);
add_task(testMouseAuxclick);
</script>
</body>
</html>

View File

@@ -11,7 +11,7 @@
<div id="target" style="width: 50px; height: 50px; background: green"></div>
<script>
const experimental = SpecialPowers.getBoolPref("dom.popup.experimental");
let experimental = false;
function sendMouseEvent(element, eventName, button, listenEventName, handler) {
let needToCheckHandler = false;
@@ -46,17 +46,6 @@
}
add_setup(async function() {
if (experimental) {
// This is a rather fragile test when experimental pref isn't enabled.
// Use default prefs in experimental case.
SpecialPowers.wrap(document).clearUserGestureActivation();
await SpecialPowers.pushPrefEnv({
set: [
// Enable popup blocker
["dom.disable_open_during_load", true],
],
});
}
const DENY_ACTION = SpecialPowers.Ci.nsIPermissionManager.DENY_ACTION;
let xorigin = SimpleTest.getTestFileURL("").replace(location.hostname, 'mochi.xorigin-test');
await SpecialPowers.pushPermissions([
@@ -73,7 +62,36 @@
const RIGHT_BUTTON = 2;
let target = document.getElementById("target");
add_task(async function testPointerEventDefault() {
async function beginTest() {
if (!experimental) {
info("NOT EXPERIMENTAL");
await SpecialPowers.pushPrefEnv({
set: [
["dom.popup.experimental", false]
],
});
} else {
info("EXPERIMENTAL");
// This is a rather fragile test when experimental pref isn't enabled.
// Use default prefs in experimental case.
SpecialPowers.wrap(document).clearUserGestureActivation();
await SpecialPowers.pushPrefEnv({
set: [
["dom.popup.experimental", true],
// Enable popup blocker
["dom.disable_open_during_load", true],
],
});
}
}
async function endTest() {
await SpecialPowers.popPrefEnv();
}
async function testPointerEventDefault() {
await beginTest();
// By default, only allow opening popup in the pointerup listener.
// Left button
sendMouseEvent(target, "mousedown", LEFT_BUTTON, "pointerdown", checkAllowOpenPopup);
@@ -95,9 +113,13 @@
checkBlockOpenPopup);
sendMouseEvent(target, "mousemove", RIGHT_BUTTON, "pointermove", checkBlockOpenPopup);
sendMouseEvent(target, "mouseup", RIGHT_BUTTON, "pointerup", checkBlockOpenPopup);
});
add_task(async function testPointerEventAddPointerDownToPref() {
await endTest();
};
async function testPointerEventAddPointerDownToPref() {
await beginTest();
// Adding pointerdown to preference
await SpecialPowers.pushPrefEnv({"set": [["dom.popup_allowed_events",
"pointerdown pointerup"]]});
@@ -121,9 +143,14 @@
checkBlockOpenPopup);
sendMouseEvent(target, "mousemove", RIGHT_BUTTON, "pointermove", checkBlockOpenPopup);
sendMouseEvent(target, "mouseup", RIGHT_BUTTON, "pointerup", checkBlockOpenPopup);
});
await SpecialPowers.popPrefEnv();
await endTest();
}
async function testPointerEventAddPointerMoveToPref() {
await beginTest();
add_task(async function testPointerEventAddPointerMoveToPref() {
// Adding pointermove to preference should have no effect.
await SpecialPowers.pushPrefEnv({"set": [["dom.popup_allowed_events",
"pointerdown pointerup pointermove"]]});
@@ -147,7 +174,20 @@
checkBlockOpenPopup);
sendMouseEvent(target, "mousemove", RIGHT_BUTTON, "pointermove", checkBlockOpenPopup);
sendMouseEvent(target, "mouseup", RIGHT_BUTTON, "pointerup", checkBlockOpenPopup);
});
await SpecialPowers.popPrefEnv();
await endTest();
}
add_task(testPointerEventDefault);
add_task(testPointerEventAddPointerDownToPref);
add_task(testPointerEventAddPointerMoveToPref);
add_task(() => experimental = true);
add_task(testPointerEventDefault);
add_task(testPointerEventAddPointerDownToPref);
add_task(testPointerEventAddPointerMoveToPref);
</script>
</body>
</html>

View File

@@ -2298,7 +2298,7 @@
# Enable experimental popup blocker changes.
- name: dom.popup.experimental
type: bool
value: false
value: @IS_NIGHTLY_BUILD@
mirror: always
# Enable CacheAPI in private browsing mode with encryption