| <!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> | |
| // Frame layout: | |
| // top=this-file [ | |
| // child1=child-one.html, | |
| // child-so=consumption-sameorigin-child.html [ | |
| // gchild=child-two.html | |
| // ] | |
| // ] | |
| let consumption_test = async_test("Consumption test"); | |
| let num_children_to_load = 3; | |
| let num_children_to_report = 3; | |
| function finishLoadPhase() { | |
| assert_equals(num_children_to_load, 0); | |
| test(() => { | |
| assert_false(navigator.userActivation.isActive); | |
| assert_false(navigator.userActivation.hasBeenActive); | |
| }, "Parent frame initial state"); | |
| test_driver.click(document.getElementById("child-so")); | |
| } | |
| function finishReportPhase() { | |
| assert_equals(num_children_to_report, 0); | |
| test(() => { | |
| assert_false(navigator.userActivation.isActive); | |
| assert_true(navigator.userActivation.hasBeenActive); | |
| }, "Parent frame final state"); | |
| consumption_test.done(); | |
| } | |
| window.addEventListener("message", event => { | |
| var msg = JSON.parse(event.data); | |
| if (msg.type == 'child-one-loaded') { | |
| test(() => { | |
| assert_false(msg.isActive); | |
| assert_false(msg.hasBeenActive); | |
| }, "Child1 frame initial state"); | |
| } else if (msg.type == 'child-sameorigin-loaded') { | |
| test(() => { | |
| assert_false(msg.isActive); | |
| assert_false(msg.hasBeenActive); | |
| }, "Child2 frame initial state"); | |
| } else if (msg.type == 'child-two-loaded') { | |
| test(() => { | |
| assert_false(msg.isActive); | |
| assert_false(msg.hasBeenActive); | |
| }, "Grandchild frame initial state"); | |
| } else if (msg.type == 'child-one-report') { | |
| test(() => { | |
| assert_false(msg.isActive); | |
| assert_true(msg.hasBeenActive); | |
| }, "Child1 frame final state"); | |
| } else if (msg.type == 'child-sameorigin-report') { | |
| // This msg was triggered by a user click followed by a window.open(). | |
| test(() => { | |
| assert_false(msg.isActive); | |
| assert_true(msg.hasBeenActive); | |
| }, "Child2 frame final state"); | |
| // Ask remaining frames to report states. | |
| let ask_report = JSON.stringify({"type": "report"}); | |
| frames[0].postMessage(ask_report, "*"); | |
| frames[1].frames[0].postMessage(ask_report, "*"); | |
| } else if (msg.type == 'child-two-report') { | |
| test(() => { | |
| assert_false(msg.isActive); | |
| assert_true(msg.hasBeenActive); | |
| }, "Grand child frame final state"); | |
| } | |
| // Phase switching. | |
| if (msg.type.endsWith("-loaded")) { | |
| if (--num_children_to_load == 0) | |
| finishLoadPhase(); | |
| } else if (msg.type.endsWith("-report")) { | |
| if (--num_children_to_report == 0) | |
| finishReportPhase(); | |
| } | |
| }); | |
| </script> | |
| </head> | |
| <body> | |
| <h1>User activation consumption across same-origin frame boundary</h1> | |
| <p>Tests that user activation consumption resets the transient states in all same-origin frames.</p> | |
| <ol id="instructions"> | |
| <li>Click anywhere on the green area (child frame). | |
| </ol> | |
| <iframe id="child1" width="300px" height="40px" | |
| src="resources/child-one.html"> | |
| </iframe> | |
| <iframe id="child-so" width="300px" height="140px" | |
| src="resources/consumption-sameorigin-child.html"> | |
| </iframe> | |
| </body> | |
| </html> |