browser_mouse_click_screenXY.js (1785B)
1 "use strict"; 2 3 function waitForClickEvent(aTarget) { 4 return new Promise(resolve => { 5 aTarget.addEventListener( 6 "click", 7 e => { 8 resolve({ screenX: e.screenX, screenY: e.screenY }); 9 }, 10 { once: true } 11 ); 12 }); 13 } 14 15 function waitForRemoteClickEvent(aRemote) { 16 return SpecialPowers.spawn(aRemote, [], () => { 17 return new Promise(resolve => { 18 content.document.addEventListener( 19 "click", 20 e => { 21 resolve({ screenX: e.screenX, screenY: e.screenY }); 22 }, 23 { once: true } 24 ); 25 }); 26 }); 27 } 28 29 function executeSoonRemote(aRemote) { 30 return SpecialPowers.spawn(aRemote, [], () => { 31 return new Promise(resolve => { 32 SpecialPowers.executeSoon(resolve); 33 }); 34 }); 35 } 36 37 add_task(async function testClickScreenXY() { 38 await BrowserTestUtils.withNewTab( 39 "https://example.com/browser/browser/base/content/test/general/dummy_page.html", 40 async browser => { 41 let parentPromise = waitForClickEvent(document); 42 let contentPromise = waitForRemoteClickEvent(browser); 43 // Ensure the event listener has registered on the remote. 44 await executeSoonRemote(browser); 45 46 // We intentionally turn off this a11y check, because the following click 47 // is send on the <browser> to test click event, that's not meant to be 48 // interactive and is not expected to be accessible: 49 AccessibilityUtils.setEnv({ 50 mustHaveAccessibleRule: false, 51 }); 52 EventUtils.synthesizeMouseAtCenter(browser, {}); 53 AccessibilityUtils.resetEnv(); 54 55 let parent = await parentPromise; 56 let content = await contentPromise; 57 58 is(parent.screenX, content.screenX, "check screenX"); 59 is(parent.screenY, content.screenY, "check screenY"); 60 } 61 ); 62 });