summaryrefslogtreecommitdiffstats
path: root/widget/tests/test_mouse_event_with_control_on_mac.html
diff options
context:
space:
mode:
Diffstat (limited to 'widget/tests/test_mouse_event_with_control_on_mac.html')
-rw-r--r--widget/tests/test_mouse_event_with_control_on_mac.html116
1 files changed, 116 insertions, 0 deletions
diff --git a/widget/tests/test_mouse_event_with_control_on_mac.html b/widget/tests/test_mouse_event_with_control_on_mac.html
new file mode 100644
index 0000000000..52ce206d35
--- /dev/null
+++ b/widget/tests/test_mouse_event_with_control_on_mac.html
@@ -0,0 +1,116 @@
+<html>
+<head>
+ <title>Test control+click on Mac</title>
+ <script src="/tests/SimpleTest/EventUtils.js"></script>
+ <script src="/tests/SimpleTest/SimpleTest.js"></script>
+ <script src="/tests/SimpleTest/SpecialPowers.js"></script>
+ <script src="/tests/SimpleTest/paint_listener.js"></script>
+ <script src="/tests/gfx/layers/apz/test/mochitest/apz_test_utils.js"></script>
+ <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css">
+ <style>
+ #target {
+ width: 100px;
+ height: 100px;
+ background-color: lightgreen;
+ };
+ </style>
+</head>
+<body>
+<div id="target"></div>
+<script type="application/javascript">
+
+function waitAndCheckMouseEvents(aTarget, aExpectedEvents) {
+ return new Promise((aResolve, aReject) => {
+ let timer;
+ let cleanup = function() {
+ if (timer) {
+ clearTimeout(timer);
+ timer = null;
+ }
+ aTarget.removeEventListener("mousedown", listener);
+ aTarget.removeEventListener("mouseup", listener);
+ aTarget.removeEventListener("contextmenu", listener);
+ aTarget.removeEventListener("click", listener);
+ aTarget.removeEventListener("auxclick", listener);
+ };
+
+ let listener = function(aEvent) {
+ aEvent.preventDefault();
+ let expectedEvent = aExpectedEvents.shift();
+ if (!expectedEvent) {
+ cleanup();
+ ok(false, `receive unexpected ${aEvent.type} event`);
+ aReject(new Error(`receive unexpected ${aEvent.type} event`));
+ return;
+ }
+
+ isDeeply([aEvent.type, aEvent.button, aEvent.ctrlKey], expectedEvent,
+ `check received ${aEvent.type} event`);
+ if (!aExpectedEvents.length) {
+ // Wait a bit to see if there is any unexpected event.
+ timer = setTimeout(function() {
+ cleanup();
+ aResolve();
+ }, 0);
+ }
+ };
+
+ aTarget.addEventListener("mousedown", listener);
+ aTarget.addEventListener("mouseup", listener);
+ aTarget.addEventListener("contextmenu", listener);
+ aTarget.addEventListener("click", listener);
+ aTarget.addEventListener("auxclick", listener);
+ });
+}
+
+add_task(async function Init() {
+ await SimpleTest.promiseFocus();
+ await waitUntilApzStable();
+
+ let target = document.getElementById("target");
+ target.addEventListener("click", function() {
+ ok(false, `should not receive click event`);
+ });
+});
+
+add_task(async function TestMouseClickWithControl() {
+ await SpecialPowers.pushPrefEnv({
+ set: [["dom.event.treat_ctrl_click_as_right_click.disabled", true]],
+ });
+
+ let target = document.getElementById("target");
+ let promise = waitAndCheckMouseEvents(target, [["mousedown", 0, true],
+ ["contextmenu", 0, true],
+ ["mouseup", 0, true]]);
+ synthesizeNativeMouseEvent({
+ type: "click",
+ target,
+ offsetX: 10,
+ offsetY: 10,
+ modifiers: { ctrlKey: true },
+ });
+ await promise;
+});
+
+add_task(async function TestOldBehavior() {
+ await SpecialPowers.pushPrefEnv({
+ set: [["dom.event.treat_ctrl_click_as_right_click.disabled", false]],
+ });
+
+ let target = document.getElementById("target");
+ let promise = waitAndCheckMouseEvents(target, [["mousedown", 2, true],
+ ["contextmenu", 2, true],
+ ["mouseup", 2, true],
+ ["auxclick", 2, true]]);
+ synthesizeNativeMouseEvent({
+ type: "click",
+ target,
+ offsetX: 10,
+ offsetY: 10,
+ modifiers: { ctrlKey: true },
+ });
+ await promise;
+});
+</script>
+</body>
+</html>