Skip to content

Commit 01d6e21

Browse files
mfreed7moz-wptsync-bot
authored andcommitted
Bug 1986710 [wpt PR 54668] - Make ESC lose interest in all elements that have interest, a=testonly
Automatic update from web-platform-tests Make ESC lose interest in all elements that have interest This CL implements the behavior described in the spec PR: whatwg/html#11006 That is: the ESC key is handled very much like popovers - the focus doesn't need to be on the invoker for ESC to work. Also, hitting ESC loses interest in all elements that currently have interest, in reverse order. A test is added to confirm this. Note: I purposely did not use close watcher here, since I don't believe the close watcher stack should get involved. E.g. the android Back button should just navigate back, and not first lose interest in things. Closing a popover or modal dialog is different than a tooltip being open on a page. Bug: 326681249 Change-Id: I33cc2742a677f330d90b83c29b18b22bf49b716e Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6900679 Reviewed-by: Joey Arhar <[email protected]> Auto-Submit: Mason Freed <[email protected]> Commit-Queue: Mason Freed <[email protected]> Cr-Commit-Position: refs/heads/main@{#1510373} -- wpt-commits: d2c3a6825856a39ca05b811576676c4488ccf3e1 wpt-pr: 54668
1 parent 9ac96e2 commit 01d6e21

File tree

1 file changed

+59
-6
lines changed

1 file changed

+59
-6
lines changed

testing/web-platform/tests/html/semantics/the-button-element/interest-for/interestfor-keyboard-behavior.tentative.html

Lines changed: 59 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@
132132
'showing interest in another trigger should lose interest in the first, then gain interest in second');
133133
verifyInterest(another,`After show interest in ${another.id}`);
134134
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)']);
136136
verifyInterest(undefined,`After lose interest in ${another.id}`);
137137
assert_false(target.matches(':popover-open'));
138138
assert_false(anothertarget.matches(':popover-open'));
@@ -163,14 +163,67 @@
163163
assert_false(target.matches(':popover-open'),'anothertarget popover opens, closing target');
164164
assert_true(anothertarget.matches(':popover-open'));
165165
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');
167167
assert_false(target.matches(':popover-open'));
168168
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');
173169
verifyInterest(undefined,`Nothing has interest now`);
174170
}, `Canceling loseinterest caused by keyboard-gained interest cancels interest, ${description}`);
175171
});
176172
</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

Comments
 (0)