| <!DOCTYPE html> |
| <html> |
| <head> |
| <title>CSS Test (Selectors): "Always show focus" preference causes :focus-visible to always match</title> |
| <script src="../../resources/testharness.js"></script> |
| <script src="../../resources/testharnessreport.js"></script> |
| <style> |
| :focus-visible { |
| outline: darkgreen dotted 1px; /* fallback for Edge */ |
| outline: darkgreen auto 5px; |
| } |
| |
| :focus:not(:focus-visible) { |
| outline-color: darkred; |
| background-color: darkred; |
| } |
| </style> |
| </head> |
| <body> |
| <div id="el" tabindex="0">Focus me.</div> |
| <script> |
| function clickOn(element) { |
| return new Promise(function(resolve, reject) { |
| if (!window.eventSender) |
| return reject(); |
| |
| var rect = element.getBoundingClientRect(); |
| var x = rect.left + (rect.width / 2); |
| var y = rect.top + (rect.height / 2); |
| var pointerActions = [{ |
| source: "mouse", |
| actions: [ |
| { name: "pointerMove", x: x, y: y }, |
| { name: "pointerDown", x: x, y: y, button: 0 }, |
| { name: "pointerUp", x: x, y: y, button: 0 }, |
| { name: "pointerMove", x: 0, y: 0 } |
| ] |
| }]; |
| chrome.gpuBenchmarking.pointerActionSequence(pointerActions, resolve); |
| }); |
| } |
| |
| async_test(function(t) { |
| el.addEventListener("focus", t.step_func(function() { |
| assert_equals(getComputedStyle(el).outlineColor, "rgb(139, 0, 0)"); |
| internals.settings.setAccessibilityAlwaysShowFocus(true); |
| // changing the setting should trigger style recalc |
| assert_equals(getComputedStyle(el).outlineColor, "rgb(0, 100, 0)"); |
| }), true); |
| |
| // Click the div; without the setting, this would not trigger :focus-visible matching |
| clickOn(el) |
| .then(t.step_func(() => { |
| t.done(); |
| })).catch(t.step_func((reason) => { |
| assert_true(false, reason); |
| t.done(); |
| })); |
| }, ":focus-visible always matches if the 'always show focus' setting is enabled."); |
| </script> |
| </body> |
| </html> |