blob: 095f0f3bf4bad579d34fb11ec9c54d39fbbe0976 [file] [log] [blame]
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<script>
function with_iframe(url) {
return new Promise(function(resolve) {
var frame = document.createElement('iframe');
frame.src = url;
frame.onload = function() { resolve(frame); };
document.body.appendChild(frame);
});
}
promise_test(async (t) => {
const frame = await with_iframe('/');
const response = await frame.contentWindow.fetch('/');
await response.clone().text();
frame.remove();
response.clone();
}, "Cloning a response succeeds even if its body is stream based");
promise_test(async (t) => {
let frame = await with_iframe('/WebKit/fetch/resources/clone-realm-iframe.html');
if (window.internals) {
assert_false(internals.isFetchObjectContextStopped(testResponse), "response before");
assert_false(internals.isFetchObjectContextStopped(testRequest), "request before");
}
frame.remove();
const clonedResponse = testResponse.clone();
const clonedRequest = testRequest.clone();
if (window.internals) {
assert_true(internals.isFetchObjectContextStopped(testResponse), "response after");
assert_true(internals.isFetchObjectContextStopped(clonedResponse), "clonedResponse");
assert_true(internals.isFetchObjectContextStopped(testRequest), "request after");
assert_true(internals.isFetchObjectContextStopped(clonedRequest), "clonedRequest");
}
}, "Cloning request/response when its frame is detached");
</script>
</body>
</html>