<!DOCTYPE html>
<meta charset=utf-8>
<title></title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src="resources/test-helpers.sub.js"></script>
<script>
promise_test(function(t) {
var scope = 'resources/fetch-event-throws-after-respond-with-iframe.html';
var workerscript = 'resources/respond-then-throw-worker.js';
var iframe;
return service_worker_unregister_and_register(t, workerscript, scope)
.then(function(reg) {
t.add_cleanup(function() {
return service_worker_unregister(t, scope);
});
return wait_for_state(t, reg.installing, 'activated')
.then(() => reg.active);
})
.then(function(worker) {
var channel = new MessageChannel();
channel.port1.onmessage = function(e) {
assert_equals(e.data, 'SYNC', ' Should receive sync message.');
channel.port1.postMessage('ACK');
}
worker.postMessage({port: channel.port2}, [channel.port2]);
// The iframe will only be loaded after the sync is completed.
return with_iframe(scope);
})
.then(function(frame) {
assert_true(frame.contentDocument.body.innerHTML.includes("intercepted"));
})
}, 'Fetch event handler throws after a successful respondWith()');
</script>