Backed out changeset 2450366cf7ca (bug 1891629) for causing win msix mochitest failures
[gecko.git] / widget / tests / test_contextmenu_by_mouse_on_unix.html
blob04bca8116c3c305f89765d9ac43619adc5445dea
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <title>Test to fire contextmenu event by widget level</title>
5 <script src="/tests/SimpleTest/EventUtils.js"></script>
6 <script src="/tests/SimpleTest/SimpleTest.js"></script>
7 <script src="/tests/SimpleTest/SpecialPowers.js"></script>
8 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css">
9 <style>
10 #target {
11 width: 100px;
12 height: 100px;
13 background-color: blue;
15 </style>
16 <script>
17 "use strict";
18 add_task(async function test_fire_contextmenu_by_mousedown() {
19 await SpecialPowers.pushPrefEnv({
20 set: [["ui.context_menus.after_mouseup", false]],
21 });
22 await SimpleTest.promiseFocus();
24 // contextmenu event is fired by mouse down.
25 await process_contextmenu_event({ isMousedown: true, preventEvent: false });
26 // contextmenu event is fired by mouse down even if mouse handler calls preventDefault.
27 await process_contextmenu_event({ isMousedown: true, preventEvent: true });
28 });
30 add_task(async function test_fire_contextmenu_by_mouseup() {
31 await SpecialPowers.pushPrefEnv({
32 set: [["ui.context_menus.after_mouseup", true]],
33 });
34 await SimpleTest.promiseFocus();
36 // contextmenu event is fired by mouse up.
37 await process_contextmenu_event({ isMousedown: false, preventEvent: false });
38 // contextmenu event is fired by mouse up even if mouse handler calls preventDefault.
39 await process_contextmenu_event({ isMousedown: false, preventEvent: true });
40 });
42 async function process_contextmenu_event({ isMousedown, preventEvent }) {
43 await SpecialPowers.contentTransformsReceived(window);
45 const target = document.getElementById("target");
47 let count = 0;
49 const promise = new Promise(resolve => {
50 target.addEventListener("mousedown", e => {
51 is(e.buttons, 2, "The right button down should be fired");
52 is(count++, 0, "The first event is mousedown");
53 if (isMousedown && preventEvent) {
54 e.preventDefault();
56 }, { once: true });
58 if (isMousedown) {
59 target.addEventListener("contextmenu", e => {
60 is(count++, 1, "The second event is contextmenu");
61 e.preventDefault();
62 }, { once: true });
63 target.addEventListener("mouseup", () => {
64 is(count++, 2, "The third event is mouseup");
65 resolve();
66 }, { once: true} );
67 } else {
68 target.addEventListener("mouseup", e => {
69 is(count++, 1, "The second event is mouseup");
70 if (preventEvent) {
71 e.preventDefault();
73 }, { once: true });
74 target.addEventListener("contextmenu", e => {
75 is(count++, 2, "The third event is contextmenu");
76 e.preventDefault();
77 resolve();
78 }, { once: true });
80 });
82 synthesizeNativeMouseEvent({
83 type: "mousedown",
84 target,
85 offsetX: 10,
86 offsetY: 10,
87 button: 2,
88 });
90 synthesizeNativeMouseEvent({
91 type: "mouseup",
92 target,
93 offsetX: 10,
94 offsetY: 10,
95 button: 2,
96 });
98 await promise;
100 </script>
101 </head>
102 <body>
103 <div id="target"></div>
104 </body>
105 </html>