<!DOCTYPE html>
<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>
</head>
<body>
<h1>Post-navigation activation state in child</h1>
<p>
Tests that navigating a same-origin child frame resets its activation
states.
</p>
<ol id="instructions">
<li>Click inside the yellow area.</li>
</ol>
<iframe id="child" width="200" height="50"> </iframe>
<script>
function message(type) {
return new Promise((resolve) => {
window.addEventListener("message", function listener(event) {
const data = JSON.parse(event.data);
if (data.type === type) {
window.removeEventListener("message", listener);
resolve(data);
}
});
});
}
promise_test(async (t) => {
var child = document.getElementById("child");
child.src = "./resources/child-one.html";
const unclickeData = await message("child-one-loaded");
assert_false(navigator.userActivation.isActive);
assert_false(navigator.userActivation.hasBeenActive);
assert_false(unclickeData.isActive);
assert_false(unclickeData.hasBeenActive);
const [, child1Data] = await Promise.all([
test_driver.click(child),
message("child-one-clicked"),
]);
assert_true(navigator.userActivation.isActive);
assert_true(navigator.userActivation.hasBeenActive);
assert_true(child1Data.isActive);
assert_true(child1Data.hasBeenActive);
child.src = "./resources/child-two.html";
const child2Data = await message("child-two-loaded");
assert_true(navigator.userActivation.isActive);
assert_true(navigator.userActivation.hasBeenActive);
assert_false(child2Data.isActive);
assert_false(child2Data.hasBeenActive);
}, "Post-navigation state reset.");
</script>
</body>
</html>