blob: c9a030045475b9b80139ad4c6311c390b54c3496 [file] [log] [blame]
<!DOCTYPE html>
<body>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script>
'use strict';
function run_test(test) {
var did_load_event_fire = false;
var got_message_from_child = false;
function check_if_test_is_done() {
if (did_load_event_fire && got_message_from_child) {
test.done();
}
}
// Add a cross-site subframe that will post back a message
// from an inline script.
const frame = document.createElement('iframe');
frame.src = (location.protocol + '//localhost:' + location.port +
'/misc/resources/' +
'subframe-for-load-event-after-removing-child-frame.html');
document.body.appendChild(frame);
// The message from the subframe should hopefully reach back here
// while the subframe is still loading (this is race-y and can only
// happen with OOPIFs).
window.addEventListener('message', test.step_func(evt => {
assert_equals(evt.data, 'childmessage');
// Remove the subframe while it is (hopefully - see above) still loading.
//
// If the loading state of the removed subframe was the only thing
// preventing *our* 'load' event from being fired, then our 'load'
// event should be fired now. See also https://crbug.com/779433.
document.body.removeChild(frame);
got_message_from_child = true;
check_if_test_is_done();
}));
// Verify that the 'load' event gets fired.
window.addEventListener('load', test.step_func(evt => {
did_load_event_fire = true;
check_if_test_is_done();
}));
}
async_test(run_test, 'Got load event.');
</script>
</body>