summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/inert/dynamic-inert-on-focused-element.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/inert/dynamic-inert-on-focused-element.html')
-rw-r--r--testing/web-platform/tests/inert/dynamic-inert-on-focused-element.html72
1 files changed, 72 insertions, 0 deletions
diff --git a/testing/web-platform/tests/inert/dynamic-inert-on-focused-element.html b/testing/web-platform/tests/inert/dynamic-inert-on-focused-element.html
new file mode 100644
index 0000000000..0ddf5a995a
--- /dev/null
+++ b/testing/web-platform/tests/inert/dynamic-inert-on-focused-element.html
@@ -0,0 +1,72 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>Dynamic inertness on focused element</title>
+<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/interaction.html#focus-fixup-rule">
+<meta name="assert" content="If a focused element becomes inert, it stops being focused.">
+<div id="log"></div>
+
+<div class="test-wrapper" data-name="<input> that gets 'inert' attribute">
+ <input class="becomes-inert check-focus">
+</div>
+
+<div class="test-wrapper" data-name="<input> whose parent gets 'inert' attribute">
+ <div class="becomes-inert">
+ <input class="check-focus">
+ </div>
+</div>
+
+<div class="test-wrapper" data-name="<button> that gets 'inert' attribute">
+ <button class="becomes-inert check-focus">foo</button>
+</div>
+
+<div class="test-wrapper" data-name="<div> that gets 'inert' attribute">
+ <div class="becomes-inert check-focus" tabindex="-1"></div>
+</div>
+
+<div class="test-wrapper" data-name="<div> whose parent gets 'inert' attribute">
+ <div class="becomes-inert">
+ <div class="check-focus" tabindex="-1">bar</div>
+ </div>
+</div>
+
+<div class="test-wrapper" data-name="<div> whose grandparent gets 'inert' attribute">
+ <div class="becomes-inert">
+ <p>
+ <span class="check-focus" tabindex="-1">baz</span>
+ </p>
+ </div>
+</div>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+function nextRepaint() {
+ return new Promise(resolve => {
+ requestAnimationFrame(() => {
+ requestAnimationFrame(resolve);
+ });
+ });
+}
+
+const loaded = new Promise(resolve => {
+ addEventListener("load", resolve, {once: true});
+});
+promise_setup(() => loaded);
+
+for (const testWrapper of document.querySelectorAll(".test-wrapper")) {
+ const becomesInert = testWrapper.querySelector(".becomes-inert");
+ const checkFocus = testWrapper.querySelector(".check-focus");
+ promise_test(async function() {
+ checkFocus.focus();
+ assert_equals(document.activeElement, checkFocus, "The element is focused");
+
+ becomesInert.inert = true;
+
+ // The focus fixup rule should blur the element since it's no longer focusable.
+ // In Chromium this happens after a repaint (https://crbug.com/1275097).
+ await nextRepaint();
+ assert_equals(document.activeElement, document.body, "The element stops being focused");
+ }, testWrapper.dataset.name);
+}
+</script>