| <!DOCTYPE html> |
| <!-- |
| Tentative due to: |
| https://github.com/whatwg/html/issues/1983 |
| --> |
| <html> |
| <head> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="/resources/testdriver.js"></script> |
| <script src="/resources/testdriver-vendor.js"></script> |
| <script> |
| let chained_timeout_test = async_test("Chained setTimeout test"); |
| |
| const max_call_depth = 3; |
| const delay_ms = 10; |
| |
| function testInitialStates(depth) { |
| assert_true(1 <= depth && depth <= max_call_depth); |
| |
| chained_timeout_test.step_timeout(() => { |
| let test_name = "Call-depth=" + depth + ": initial activation states are false"; |
| test(() => { |
| assert_false(navigator.userActivation.isActive); |
| assert_false(navigator.userActivation.hasBeenActive); |
| }, test_name); |
| |
| if (depth < max_call_depth) |
| testInitialStates(depth+1); |
| else |
| test_driver.click(document.body); |
| }, delay_ms); |
| } |
| |
| function testFinalStates(depth) { |
| assert_true(1 <= depth && depth <= max_call_depth); |
| |
| chained_timeout_test.step_timeout(() => { |
| let test_name = "Call-depth=" + depth + ": after-click activation states are true"; |
| test(() => { |
| assert_true(navigator.userActivation.isActive); |
| assert_true(navigator.userActivation.hasBeenActive); |
| }, test_name); |
| |
| if (depth < max_call_depth) |
| testFinalStates(depth+1); |
| else |
| chained_timeout_test.done(); |
| }, delay_ms) |
| } |
| |
| function run() { |
| window.addEventListener("click", event => { |
| testFinalStates(1); |
| }); |
| |
| testInitialStates(1); |
| } |
| </script> |
| </head> |
| <body onload="run()"> |
| <h1>User activation state in chained setTimeout calls</h1> |
| <p>Tests that user activation state is visible in arbitrary call depth of setTimeout.</p> |
| <ol id="instructions"> |
| <li>Click anywhere in the document. |
| </ol></body> |
| </html> |