Skip to content

Commit 0b37e58

Browse files
emiliomoz-wptsync-bot
authored andcommitted
Introduce FocusOptions.focusVisible.
As per: * whatwg/html#7830 * whatwg/html#8087 Replace the internal preventFocusRing with the new flag. Differential Revision: https://phabricator.services.mozilla.com/D151326 bugzilla-url: https://bugzilla.mozilla.org/show_bug.cgi?id=1765083 gecko-commit: 570b38756541697f8b5c3b8084b5a2fb438eeca9 gecko-reviewers: smaug, pip-reviewers
1 parent 25ac31f commit 0b37e58

File tree

1 file changed

+65
-0
lines changed

1 file changed

+65
-0
lines changed
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
<!doctype html>
2+
3+
<title>focus(options) - focusVisible</title>
4+
<script src=/resources/testharness.js></script>
5+
<script src=/resources/testharnessreport.js></script>
6+
<script src="/resources/testdriver.js"></script>
7+
<script src="/resources/testdriver-actions.js"></script>
8+
<script src="/resources/testdriver-vendor.js"></script>
9+
10+
<style>
11+
div {
12+
height: 10px;
13+
border: 1px solid black;
14+
}
15+
</style>
16+
17+
<button>ABC</button>
18+
<input>
19+
<div id="contenteditable" contenteditable></div>
20+
<div id="tabindex" tabindex=0></div>
21+
<div id="not_focusable"></div>
22+
23+
<div id="reset_focus" tabindex=0></div>
24+
25+
<script>
26+
const reset_focus = document.getElementById("reset_focus");
27+
28+
async function check_focus_visible(element, options, { shouldBeVisible, shouldBeFocused }) {
29+
// Reset focus by clicking on a div, which should not show focus rings.
30+
await test_driver.click(reset_focus);
31+
32+
assert_equals(document.activeElement, reset_focus, "Reset should be focused");
33+
assert_true(reset_focus.matches(":focus"), "Clicking focusable div should match :focus");
34+
assert_false(reset_focus.matches(":focus-visible"), "Clicking focusable div shouldn't match :focus-visible");
35+
36+
element.focus(options);
37+
38+
assert_equals(document.activeElement, shouldBeFocused ? element : reset_focus, "activeElement");
39+
assert_equals(element.matches(":focus"), shouldBeFocused, ":focus");
40+
assert_equals(element.matches(":focus-visible"), shouldBeVisible, ":focus-visible");
41+
}
42+
43+
for (let selector of ["button", "input", "#contenteditable", "#tabindex", "#not_focusable"]) {
44+
promise_test(async function() {
45+
const takesKeyboardInput = selector == "#contenteditable" || selector == "input";
46+
const shouldBeFocused = selector != "#not_focusable";
47+
48+
const element = document.querySelector(selector);
49+
50+
await check_focus_visible(element, {}, {
51+
shouldBeVisible: takesKeyboardInput,
52+
shouldBeFocused,
53+
});
54+
55+
await check_focus_visible(element, { focusVisible: true }, {
56+
shouldBeVisible: shouldBeFocused,
57+
shouldBeFocused,
58+
});
59+
await check_focus_visible(element, { focusVisible: false }, {
60+
shouldBeVisible: false,
61+
shouldBeFocused,
62+
});
63+
}, "FocusOptions.focusVisible: " + selector);
64+
}
65+
</script>

0 commit comments

Comments
 (0)