|
132 | 132 | 'showing interest in another trigger should lose interest in the first, then gain interest in second'); |
133 | 133 | verifyInterest(another,`After show interest in ${another.id}`); |
134 | 134 | await sendLoseInterestHotkey(); |
135 | | - assert_array_equals(events,['target interest','target loseinterest (cancelable)','anothertarget interest','anothertarget loseinterest (cancelable)']); |
| 135 | + assert_array_equals(events,['target interest','target loseinterest (cancelable)','anothertarget interest','anothertarget loseinterest (not cancelable)']); |
136 | 136 | verifyInterest(undefined,`After lose interest in ${another.id}`); |
137 | 137 | assert_false(target.matches(':popover-open')); |
138 | 138 | assert_false(anothertarget.matches(':popover-open')); |
|
163 | 163 | assert_false(target.matches(':popover-open'),'anothertarget popover opens, closing target'); |
164 | 164 | assert_true(anothertarget.matches(':popover-open')); |
165 | 165 | await sendLoseInterestHotkey(); |
166 | | - assert_array_equals(events,['anothertarget loseinterest (cancelable)'],'Lose interest hot key on focused element loses just interest in that element'); |
| 166 | + assert_array_equals(events,['anothertarget loseinterest (not cancelable)', 'target loseinterest (not cancelable)'],'Lose interest hot key loses interest in all elements'); |
167 | 167 | assert_false(target.matches(':popover-open')); |
168 | 168 | assert_false(anothertarget.matches(':popover-open')); |
169 | | - shouldCancelLoseInterest = false; |
170 | | - await focusOn(el); |
171 | | - await sendLoseInterestHotkey(); |
172 | | - assert_array_equals(events,['anothertarget loseinterest (cancelable)','target loseinterest (cancelable)'],'Now both lost interest'); |
173 | 169 | verifyInterest(undefined,`Nothing has interest now`); |
174 | 170 | }, `Canceling loseinterest caused by keyboard-gained interest cancels interest, ${description}`); |
175 | 171 | }); |
176 | 172 | </script> |
| 173 | + |
| 174 | +<button id="esc_invoker1" class="longhide" interestfor="esc_target1">ESC Invoker 1</button> |
| 175 | +<div id="esc_target1">Non-popover target for ESC test</div> |
| 176 | +<button id="esc_invoker2" class="longhide" interestfor="esc_target2">ESC Invoker 2</button> |
| 177 | +<div id="esc_target2">Non-popover target for ESC test</div> |
| 178 | +<button id="esc_invoker3" class="longhide" interestfor="esc_target3">ESC Invoker 3</button> |
| 179 | +<div id="esc_target3">Non-popover target for ESC test</div> |
| 180 | + |
| 181 | +<script> |
| 182 | +promise_test(async function (t) { |
| 183 | + const invoker1 = document.getElementById('esc_invoker1'); |
| 184 | + const target1 = document.getElementById('esc_target1'); |
| 185 | + const invoker2 = document.getElementById('esc_invoker2'); |
| 186 | + const target2 = document.getElementById('esc_target2'); |
| 187 | + const invoker3 = document.getElementById('esc_invoker3'); |
| 188 | + const target3 = document.getElementById('esc_target3'); |
| 189 | + const otherbutton = document.getElementById('otherbutton'); |
| 190 | + t.add_cleanup(() => otherbutton.focus()); |
| 191 | + |
| 192 | + let events = []; |
| 193 | + const signal = t.get_signal(); |
| 194 | + [target1, target2, target3].forEach(target => { |
| 195 | + target.addEventListener('interest',(e) => events.push(`${e.source.id} interest`),{signal}); |
| 196 | + target.addEventListener('loseinterest',(e) => events.push(`${e.source.id} loseinterest`),{signal}); |
| 197 | + // These loseinterest events should not be cancelable: |
| 198 | + target.addEventListener('loseinterest',(e) => e.preventDefault(),{signal}); |
| 199 | + }); |
| 200 | + |
| 201 | + // Invoke them in non-tree order: |
| 202 | + await focusOn(invoker1); |
| 203 | + await focusOn(invoker3); |
| 204 | + await focusOn(invoker2); |
| 205 | + assert_array_equals(events, |
| 206 | + ['esc_invoker1 interest','esc_invoker3 interest','esc_invoker2 interest'], |
| 207 | + 'Events after gaining interest'); |
| 208 | + events = []; |
| 209 | + |
| 210 | + // Hit ESC once, while focused on the body |
| 211 | + document.body.focus(); |
| 212 | + await waitForRender(); |
| 213 | + assert_true(invoker1.matches(':interest-source'), 'invoker1 should still have interest'); |
| 214 | + assert_true(invoker3.matches(':interest-source'), 'invoker3 should still have interest'); |
| 215 | + assert_true(invoker2.matches(':interest-source'), 'invoker2 should still have interest'); |
| 216 | + const kEscape = '\uE00C'; |
| 217 | + await new test_driver.Actions() |
| 218 | + .keyDown(kEscape) |
| 219 | + .keyUp(kEscape) |
| 220 | + .send(); |
| 221 | + await waitForRender(); |
| 222 | + assert_false(invoker2.matches(':interest-source'), 'invoker2 should lose interest'); |
| 223 | + assert_false(invoker1.matches(':interest-source'), 'invoker1 should lose interest'); |
| 224 | + assert_false(invoker3.matches(':interest-source'), 'invoker3 should lose interest'); |
| 225 | + assert_array_equals(events, [ |
| 226 | + 'esc_invoker2 loseinterest', 'esc_invoker3 loseinterest', 'esc_invoker1 loseinterest'], |
| 227 | + 'ESC should lose interest in all invokers, in reverse order'); |
| 228 | +}, 'ESC key dismisses all interest invokers'); |
| 229 | +</script> |
0 commit comments