test_popup_blocker_pointer_event.html (5649B)
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title>Test for triggering popup by pointer events</title> 6 <script src="/tests/SimpleTest/SimpleTest.js"></script> 7 <script src="/tests/SimpleTest/EventUtils.js"></script> 8 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> 9 </head> 10 <body> 11 <div id="target" style="width: 50px; height: 50px; background: green"></div> 12 <script> 13 14 function sendMouseEvent(element, eventName, button, listenEventName, handler) { 15 let needToCheckHandler = false; 16 let handlerIsCalled = false; 17 if (listenEventName && handler) { 18 needToCheckHandler = true; 19 element.addEventListener(listenEventName, (e) => { 20 handler(e); 21 handlerIsCalled = true; 22 }, {once: true}); 23 } 24 synthesizeMouseAtCenter(element, {type: eventName, button}); 25 if (needToCheckHandler) { 26 ok(handlerIsCalled, "Handler should be called"); 27 } 28 } 29 30 function checkAllowOpenPopup(e) { 31 let w = window.open("about:blank"); 32 ok(w, `Should allow popup in the ${e.type} listener with button=${e.button}`); 33 if (w) { 34 w.close(); 35 } 36 } 37 38 function checkBlockOpenPopup(e) { 39 let w = window.open("about:blank"); 40 ok(!w, `Should block popup in the ${e.type} listener with button=${e.button}`); 41 if (w) { 42 w.close(); 43 } 44 } 45 46 add_setup(async function() { 47 const DENY_ACTION = SpecialPowers.Ci.nsIPermissionManager.DENY_ACTION; 48 let xorigin = SimpleTest.getTestFileURL("").replace(location.hostname, 'mochi.xorigin-test'); 49 await SpecialPowers.pushPermissions([ 50 {'type': 'popup', 'allow': DENY_ACTION, 51 'context': document}, 52 {'type': 'popup', 'allow': DENY_ACTION, 53 'context': xorigin} 54 ]); 55 await new Promise(resolve => SimpleTest.waitForFocus(resolve)); 56 }); 57 58 const LEFT_BUTTON = 0; 59 const MIDDLE_BUTTON = 1; 60 const RIGHT_BUTTON = 2; 61 let target = document.getElementById("target"); 62 63 async function testPointerEventDefault() { 64 // By default, only allow opening popup in the pointerup listener. 65 // Left button 66 sendMouseEvent(target, "mousedown", LEFT_BUTTON, "pointerdown", checkAllowOpenPopup); 67 sendMouseEvent(target, "mousemove", LEFT_BUTTON, "pointermove", checkBlockOpenPopup); 68 sendMouseEvent(target, "mouseup", LEFT_BUTTON, "pointerup", checkBlockOpenPopup); 69 70 // Middle button 71 sendMouseEvent(target, "mousedown", MIDDLE_BUTTON, "pointerdown", checkAllowOpenPopup); 72 sendMouseEvent(target, "mousemove", MIDDLE_BUTTON, "pointermove", checkBlockOpenPopup); 73 sendMouseEvent(target, "mouseup", MIDDLE_BUTTON, "pointerup", checkBlockOpenPopup); 74 75 // Right button 76 sendMouseEvent(target, "mousedown", RIGHT_BUTTON, "pointerdown", checkAllowOpenPopup); 77 sendMouseEvent(target, "mousemove", RIGHT_BUTTON, "pointermove", checkBlockOpenPopup); 78 sendMouseEvent(target, "mouseup", RIGHT_BUTTON, "pointerup", checkBlockOpenPopup); 79 }; 80 81 async function testPointerEventAddPointerDownToPref() { 82 // Adding pointerdown to preference 83 await SpecialPowers.pushPrefEnv({"set": [["dom.popup_allowed_events", 84 "pointerdown pointerup"]]}); 85 // Left button 86 sendMouseEvent(target, "mousedown", LEFT_BUTTON, "pointerdown", checkAllowOpenPopup); 87 sendMouseEvent(target, "mousemove", LEFT_BUTTON, "pointermove", checkBlockOpenPopup); 88 sendMouseEvent(target, "mouseup", LEFT_BUTTON, "pointerup", checkBlockOpenPopup); 89 90 // Middle button 91 sendMouseEvent(target, "mousedown", MIDDLE_BUTTON, "pointerdown", checkAllowOpenPopup); 92 sendMouseEvent(target, "mousemove", MIDDLE_BUTTON, "pointermove", checkBlockOpenPopup); 93 sendMouseEvent(target, "mouseup", MIDDLE_BUTTON, "pointerup", checkBlockOpenPopup); 94 95 // Right button 96 sendMouseEvent(target, "mousedown", RIGHT_BUTTON, "pointerdown", checkAllowOpenPopup); 97 sendMouseEvent(target, "mousemove", RIGHT_BUTTON, "pointermove", checkBlockOpenPopup); 98 sendMouseEvent(target, "mouseup", RIGHT_BUTTON, "pointerup", checkBlockOpenPopup); 99 await SpecialPowers.popPrefEnv(); 100 } 101 102 async function testPointerEventAddPointerMoveToPref() { 103 // Adding pointermove to preference should have no effect. 104 await SpecialPowers.pushPrefEnv({"set": [["dom.popup_allowed_events", 105 "pointerdown pointerup pointermove"]]}); 106 // Left button 107 sendMouseEvent(target, "mousedown", LEFT_BUTTON, "pointerdown", checkAllowOpenPopup); 108 sendMouseEvent(target, "mousemove", LEFT_BUTTON, "pointermove", checkBlockOpenPopup); 109 sendMouseEvent(target, "mouseup", LEFT_BUTTON, "pointerup", checkBlockOpenPopup); 110 111 // Middle button 112 sendMouseEvent(target, "mousedown", MIDDLE_BUTTON, "pointerdown", checkAllowOpenPopup); 113 sendMouseEvent(target, "mousemove", MIDDLE_BUTTON, "pointermove", checkBlockOpenPopup); 114 sendMouseEvent(target, "mouseup", MIDDLE_BUTTON, "pointerup", checkBlockOpenPopup); 115 116 // Right button 117 sendMouseEvent(target, "mousedown", RIGHT_BUTTON, "pointerdown", checkAllowOpenPopup); 118 sendMouseEvent(target, "mousemove", RIGHT_BUTTON, "pointermove", checkBlockOpenPopup); 119 sendMouseEvent(target, "mouseup", RIGHT_BUTTON, "pointerup", checkBlockOpenPopup); 120 await SpecialPowers.popPrefEnv(); 121 } 122 123 add_task(testPointerEventDefault); 124 add_task(testPointerEventAddPointerDownToPref); 125 add_task(testPointerEventAddPointerMoveToPref); 126 </script> 127 </body> 128 </html>