browser_cancel_caret_browsing_in_content.js (3075B)
1 /* Any copyright is dedicated to the Public Domain. 2 http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 add_task(async function () { 7 const kPrefName_CaretBrowsingOn = "accessibility.browsewithcaret"; 8 await SpecialPowers.pushPrefEnv({ 9 set: [ 10 ["accessibility.browsewithcaret_shortcut.enabled", true], 11 ["accessibility.warn_on_browsewithcaret", false], 12 ["test.events.async.enabled", true], 13 [kPrefName_CaretBrowsingOn, false], 14 ], 15 }); 16 17 await BrowserTestUtils.withNewTab( 18 "https://example.com/browser/browser/base/content/test/keyboard/file_empty.html", 19 async function (browser) { 20 await SpecialPowers.spawn(browser, [], () => { 21 content.document.documentElement.scrollTop; // Flush layout. 22 }); 23 function promiseFirstAndReplyKeyEvents(aExpectedConsume) { 24 return new Promise(resolve => { 25 const eventType = aExpectedConsume ? "keydown" : "keypress"; 26 let eventCount = 0; 27 let listener = () => { 28 if (++eventCount === 2) { 29 window.removeEventListener(eventType, listener, { 30 capture: true, 31 mozSystemGroup: true, 32 }); 33 resolve(); 34 } 35 }; 36 window.addEventListener(eventType, listener, { 37 capture: true, 38 mozSystemGroup: true, 39 }); 40 registerCleanupFunction(() => { 41 window.removeEventListener(eventType, listener, { 42 capture: true, 43 mozSystemGroup: true, 44 }); 45 }); 46 }); 47 } 48 let promiseReplyF7KeyEvents = promiseFirstAndReplyKeyEvents(false); 49 EventUtils.synthesizeKey("KEY_F7"); 50 info("Waiting reply F7 keypress event..."); 51 await promiseReplyF7KeyEvents; 52 await TestUtils.waitForTick(); 53 is( 54 Services.prefs.getBoolPref(kPrefName_CaretBrowsingOn), 55 true, 56 "F7 key should enable caret browsing mode" 57 ); 58 59 await SpecialPowers.pushPrefEnv({ 60 set: [[kPrefName_CaretBrowsingOn, false]], 61 }); 62 63 await SpecialPowers.spawn(browser, [], () => { 64 content.document.documentElement.scrollTop; // Flush layout. 65 content.window.addEventListener( 66 "keydown", 67 event => event.preventDefault(), 68 { capture: true } 69 ); 70 }); 71 promiseReplyF7KeyEvents = promiseFirstAndReplyKeyEvents(true); 72 EventUtils.synthesizeKey("KEY_F7"); 73 info("Waiting for reply F7 keydown event..."); 74 await promiseReplyF7KeyEvents; 75 try { 76 info(`Checking reply keypress event is not fired...`); 77 await TestUtils.waitForCondition( 78 () => Services.prefs.getBoolPref(kPrefName_CaretBrowsingOn), 79 "", 80 100, // interval 81 5 // maxTries 82 ); 83 } catch (e) {} 84 is( 85 Services.prefs.getBoolPref(kPrefName_CaretBrowsingOn), 86 false, 87 "F7 key shouldn't enable caret browsing mode because F7 keydown event is consumed by web content" 88 ); 89 } 90 ); 91 });