| <html> |
| <style> |
| .container { |
| background-color: blue; |
| width: 200px; |
| height: 600px; |
| position: absolute; |
| } |
| .inert { |
| background-color: yellow; |
| width: 100px; |
| height: 100px; |
| position: relative; |
| } |
| .target { |
| background-color: red; |
| width: 100px; |
| height: 100px; |
| position: relative; |
| } |
| .container:focus-within .target { |
| background-color: green; |
| } |
| .child { |
| width: 50px; |
| height: 50px; |
| } |
| </style> |
| <div class=container> |
| <div class=target tabindex=1 id=focusTarget> |
| </div> |
| <div class=target> |
| </div> |
| <div class=inert> |
| </div> |
| <div class=target> |
| <div class="inert child"> |
| </div> |
| </div> |
| <div class=inert> |
| <div class="target child"> |
| </div> |
| </div> |
| </div> |
| <pre id=log></pre> |
| |
| <script> |
| function testStyleChangeType(selector, expectedType) |
| { |
| let pass = true; |
| const elements = document.querySelectorAll(selector); |
| for (var i = 0; i < elements.length; ++i) { |
| const type = window.internals.styleChangeType(elements[i]); |
| if (type != expectedType) { |
| log.textContent += `FAIL ${selector} styleChangeType was ${type} expected ${expectedType}\n`; |
| pass = false; |
| } |
| } |
| if (pass) |
| log.textContent += "PASS\n"; |
| } |
| |
| window.onload = function () { |
| if (!window.testRunner) |
| return; |
| testRunner.dumpAsText(); |
| |
| document.body.offsetLeft; |
| focusTarget.focus(); |
| |
| testStyleChangeType(".target", "InlineStyleChange"); |
| testStyleChangeType(".container", "NoStyleChange"); |
| testStyleChangeType(".inert", "NoStyleChange"); |
| |
| document.body.offsetLeft; |
| focusTarget.blur(); |
| |
| testStyleChangeType(".target", "InlineStyleChange"); |
| testStyleChangeType(".container", "NoStyleChange"); |
| testStyleChangeType(".inert", "NoStyleChange"); |
| }; |
| </script> |