browser_menu_and_alerts.js (4290B)
1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 "use strict"; 6 7 function matchHideParent(parent) { 8 return event => { 9 event.QueryInterface(Ci.nsIAccessibleHideEvent); 10 if (typeof parent == "string") { 11 return getAccessibleDOMNodeID(event.targetParent) == parent; 12 } 13 14 return event.targetParent == parent; 15 }; 16 } 17 18 /** 19 * Accessible menu popup start/end 20 */ 21 addAccessibleTask( 22 ` 23 <div id="container"> 24 <ul id="menu" role="menu" style="display: none;"> 25 <li role="menuitem">Hello</li> 26 </ul> 27 </div> 28 `, 29 async function (browser) { 30 let expectedEvents = waitForEvents( 31 [ 32 [EVENT_SHOW, "menu"], 33 [EVENT_REORDER, "container"], 34 [EVENT_MENUPOPUP_START, "menu"], 35 ], 36 "Popup start sequence", 37 true 38 ); 39 await invokeContentTask(browser, [], () => { 40 content.document.getElementById("menu").style.display = "block"; 41 }); 42 await expectedEvents; 43 44 expectedEvents = waitForEvents( 45 [ 46 [EVENT_MENUPOPUP_END, "menu"], 47 [EVENT_HIDE, matchHideParent("container")], 48 [EVENT_REORDER, "container"], 49 ], 50 "Popup end sequence", 51 true 52 ); 53 await invokeContentTask(browser, [], () => { 54 content.document.getElementById("menu").style.display = "none"; 55 }); 56 await expectedEvents; 57 }, 58 { chrome: true, topLevel: true } 59 ); 60 61 /** 62 * Accessible menu popup start/end in subtree 63 */ 64 addAccessibleTask( 65 ` 66 <div id="container" style="display: none;"> 67 <ul id="menu" role="menu"> 68 <li role="menuitem">Hello</li> 69 </ul> 70 </div> 71 `, 72 async function (browser, accDoc) { 73 let expectedEvents = waitForEvents( 74 [ 75 [EVENT_SHOW, "container"], 76 [EVENT_REORDER, accDoc], 77 [EVENT_MENUPOPUP_START, "menu"], 78 ], 79 "Embedded popup start sequence", 80 true 81 ); 82 await invokeContentTask(browser, [], () => { 83 content.document.getElementById("container").style.display = "block"; 84 }); 85 await expectedEvents; 86 87 expectedEvents = waitForEvents( 88 [ 89 [EVENT_MENUPOPUP_END, "menu"], 90 [EVENT_HIDE, matchHideParent(accDoc)], 91 [EVENT_REORDER, accDoc], 92 ], 93 "Embedded popup end sequence", 94 true 95 ); 96 await invokeContentTask(browser, [], () => { 97 content.document.getElementById("container").style.display = "none"; 98 }); 99 await expectedEvents; 100 }, 101 { chrome: true, topLevel: true } 102 ); 103 104 /** 105 * Accessible alert event 106 */ 107 addAccessibleTask( 108 ` 109 <div id="container"> 110 <div role="alert" id="alert" style="display: none;">Alert!</div> 111 </div> 112 `, 113 async function (browser, accDoc) { 114 let expectedEvents = waitForEvents( 115 [[EVENT_SHOW], [EVENT_REORDER, "container"], [EVENT_ALERT, "alert"]], 116 "Alert events sequence", 117 true 118 ); 119 await invokeContentTask(browser, [], () => { 120 content.document.getElementById("alert").style.display = "block"; 121 }); 122 await expectedEvents; 123 124 expectedEvents = waitForEvent(EVENT_REORDER, accDoc); 125 await invokeContentTask(browser, [], () => { 126 content.document.getElementById("container").style.display = "none"; 127 }); 128 await expectedEvents; 129 130 expectedEvents = waitForEvents( 131 [[EVENT_SHOW], [EVENT_REORDER, accDoc], [EVENT_ALERT, "alert"]], 132 "Embedded Alert events sequence", 133 true 134 ); 135 await invokeContentTask(browser, [], () => { 136 content.document.getElementById("container").style.display = "block"; 137 }); 138 await expectedEvents; 139 }, 140 { chrome: true, topLevel: true } 141 ); 142 143 /** 144 * No alert event at load. 145 */ 146 addAccessibleTask( 147 ``, 148 async function (browser) { 149 let onLoadEvents = waitForEvents({ 150 expected: [ 151 [EVENT_FOCUS, "body2"], 152 [EVENT_DOCUMENT_LOAD_COMPLETE, "body2"], 153 stateChangeEventArgs("body2", STATE_BUSY, false, false), 154 ], 155 unexpected: [[EVENT_ALERT]], 156 }); 157 158 BrowserTestUtils.startLoadingURIString( 159 browser, 160 `data:text/html;charset=utf-8, 161 <html><body id="body2"> 162 <div role="alert" id="alert">Alert!</div> 163 </body></html>` 164 ); 165 166 await onLoadEvents; 167 }, 168 { chrome: true, topLevel: true } 169 );