blob: d7254917a2f882b34027f633b5a73555eb66d0ab [file] [log] [blame]
<!DOCTYPE html>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script src="../../external/wpt/html/interaction/focus/the-autofocus-attribute/resources/utils.js"></script>
<body>
<iframe src="resources/state-restore-dynamic-controls-frame.html"></iframe>
<script>
// A Promise for this function is resolved when the child frame dispatches
// a 'pageshow' event.
let promiseResolver = null;
promise_test(async t => {
await new Promise((resolve, reject) => {
window.promiseResolver = resolve;
});
const iframe = document.querySelector('iframe');
const container = iframe.contentDocument.querySelector('div');
// Change states of controls
container.firstChild.click();
container.lastChild.focus();
eventSender.keyDown('z');
assert_true(container.firstChild.checked, 'sanity check for a checkbox');
assert_equals(container.lastChild.value, 'z', 'sanity check for a text field');
// Navigate
iframe.src = 'data:text/html,<h1></h1>';
await waitForEvent(iframe, 'load', {once:true});
// Navigate back
await new Promise((resolve, reject) => {
window.promiseResolver = resolve;
history.back();
});
// Wait until finishing the scheduled restore task.
await timeOut(t, 0);
const inputs = iframe.contentDocument.querySelectorAll('input');
assert_true(inputs[0].checked, 'Checkbox state should be restored.');
assert_equals(inputs[1].value, 'z', 'Text field state should be restored.');
assert_false(inputs[2].checked, 'Checkbox should have initial value.');
assert_equals(inputs[3].value, '', 'Text field should have initial value.');
}, 'Control states should be restored correctly even if controls were inserted before existing controls.');
</script>