| <!doctype HTML> |
| |
| <div id="host"> |
| <input id="slotted" type="text"> |
| </div> |
| |
| <script src="../../resources/testharness.js"></script> |
| <script src="../../resources/testharnessreport.js"></script> |
| |
| <script> |
| promise_test((t) => { |
| const container = document.createElement("div"); |
| container.style = "contain: style layout;"; |
| container.innerHTML = "<slot></slot>"; |
| |
| const shadowRoot = host.attachShadow({ mode: "open" }); |
| shadowRoot.appendChild(container); |
| const acquirePromise = container.displayLock.acquire({ timeout: Infinity, activatable: true }); |
| |
| return new Promise((resolve, reject) => { |
| const eventPromise = new Promise((resolve, reject) => { |
| container.onbeforeactivate = (e) => { |
| t.step(() => assert_equals(e.target, container)); |
| t.step(() => assert_equals(e.activatedElement, slotted)); |
| resolve(); |
| }; |
| }); |
| host.onbeforeactivate = reject; |
| slotted.onbeforeactivate = reject; |
| |
| t.step(() => assert_not_equals(document.activeElement, slotted)); |
| acquirePromise.then(() => { |
| slotted.focus(); |
| |
| eventPromise.then(() => { |
| t.step(() => assert_equals(document.activeElement, slotted)); |
| resolve(); |
| }); |
| }); |
| }); |
| }, "Activating locked element through focus() fires beforeactivate, doesn't go through shadow boundary"); |
| </script> |