browser_test_mousemove_optimization.js (2268B)
1 /* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */ 2 /* vim: set sts=2 sw=2 et tw=80: */ 3 "use strict"; 4 5 Services.scriptloader.loadSubScript( 6 "chrome://mochitests/content/browser/gfx/layers/apz/test/mochitest/apz_test_utils.js", 7 this 8 ); 9 10 Services.scriptloader.loadSubScript( 11 "chrome://mochitests/content/browser/gfx/layers/apz/test/mochitest/apz_test_native_event_utils.js", 12 this 13 ); 14 15 add_task(async function () { 16 await SpecialPowers.pushPrefEnv({ 17 set: [["apz.mousemove_hittest_optimization.enabled", true]], 18 }); 19 20 const tab = await BrowserTestUtils.openNewForegroundTab( 21 gBrowser, 22 "data:text/html,hello" 23 ); 24 25 const mousemoveEventPromise = new Promise(resolve => { 26 window.addEventListener( 27 "mousemove", 28 event => { 29 resolve({ 30 type: event.type, 31 clientX: event.clientX, 32 clientY: event.clientY, 33 }); 34 }, 35 { once: true } 36 ); 37 }); 38 39 // Send a mousemove event on this document. 40 await synthesizeNativeMouseEventWithAPZ({ 41 type: "mousemove", 42 target: document.documentElement, 43 offsetX: 100, 44 offsetY: 50, 45 }); 46 let result = await mousemoveEventPromise; 47 SimpleTest.isDeeply(result, { type: "mousemove", clientX: 100, clientY: 50 }); 48 49 const mousemoveEventPromiseOnContent = SpecialPowers.spawn( 50 tab.linkedBrowser, 51 [], 52 () => { 53 return new Promise(resolve => { 54 content.window.addEventListener( 55 "mousemove", 56 event => { 57 resolve({ 58 type: event.type, 59 clientX: event.clientX, 60 clientY: event.clientY, 61 }); 62 }, 63 { once: true } 64 ); 65 }); 66 } 67 ); 68 69 // Await a new SpecialPowers.spawn to flush the above queued task to the content process. 70 await SpecialPowers.spawn(tab.linkedBrowser, [], async () => { 71 await new Promise(resolve => resolve()); 72 }); 73 74 // Send a mousemove event on the iframe document. 75 await synthesizeNativeMouseEventWithAPZ({ 76 type: "mousemove", 77 target: tab.linkedBrowser, 78 offsetX: 100, 79 offsetY: 50, 80 }); 81 result = await mousemoveEventPromiseOnContent; 82 SimpleTest.isDeeply(result, { type: "mousemove", clientX: 100, clientY: 50 }); 83 84 BrowserTestUtils.removeTab(tab); 85 });