test_re_enable_apz_on_blur.html (2638B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <script src="/tests/SimpleTest/SimpleTest.js"></script> 6 <script src="/tests/SimpleTest/EventUtils.js"></script> 7 <script src="/tests/SimpleTest/paint_listener.js"></script> 8 <link rel="stylesheet" href="/tests/SimpleTest/test.css"/> 9 <style> 10 iframe { 11 width: 100vw; 12 height: 100vh; 13 border: none; 14 } 15 </style> 16 </head> 17 <body> 18 <p id="display"></p> 19 <div id="content" style="display: none"></div> 20 <pre id="test"></pre> 21 <iframe></iframe> 22 </body> 23 <script> 24 // Open a new document in an iframe with enabling accessible-carets. 25 add_setup(async () => { 26 await SpecialPowers.pushPrefEnv({ 27 set: [ 28 ["layout.accessiblecaret.enabled", true], 29 ["layout.accessiblecaret.enabled_on_touch", true], 30 ], 31 }); 32 await SpecialPowers.spawnChrome([], async () => { 33 browsingContext.touchEventsOverride = "enabled"; 34 }); 35 36 const iframe = document.querySelector("iframe"); 37 const loadPromise = new Promise(resolve => { 38 iframe.addEventListener("load", () => resolve()); 39 }); 40 iframe.src = "helper_re_enable_apz_on_blur.html"; 41 await loadPromise; 42 }); 43 44 add_task(async () => { 45 const iframe = document.querySelector("iframe"); 46 47 // Setup a selectionchange event listner in the iframe. 48 const selectionchangePromise = SpecialPowers.spawn(iframe, [], () => { 49 return new Promise(resolve => { 50 content.document.querySelector("textarea"). 51 addEventListener("selectionchange", () => resolve()); 52 }); 53 }); 54 // To make sure the listener has been setup in the iframe context. 55 await SpecialPowers.spawn(iframe, [], async () => { 56 await new Promise(resolve => resolve()); 57 }); 58 59 async function isApzDisabled() { 60 return SpecialPowers.spawn(iframe, [], () => { 61 return SpecialPowers.DOMWindowUtils.isApzDisabledForElement( 62 content.document.querySelector("textarea")); 63 }); 64 } 65 66 ok(!await isApzDisabled(), "APZ is not disabled on the textarea"); 67 68 // Tap on the text area in the iframe. 69 synthesizeTouch(iframe, 10, 10, { type: "touchstart" }); 70 synthesizeTouch(iframe, 10, 10, { type: "touchend" }); 71 72 await selectionchangePromise; 73 74 ok(await isApzDisabled(), "Now APZ is disabled on the textarea"); 75 76 // Now blur the focus from the textarea. 77 await SpecialPowers.spawn(iframe, [], async () => { 78 const target = content.document.querySelector("textarea"); 79 const blurPromise = new Promise(resolve => { 80 target.addEventListener("blur", () => resolve()); 81 }); 82 target.blur(); 83 await blurPromise; 84 }); 85 86 ok(!await isApzDisabled(), "Now APZ is re-enabled on the textarea"); 87 }); 88 </script> 89 </html>