blob: 5435f10c8ca5af7b16d8c3e9c745fc869ad4ccbd [file] [log] [blame]
<html>
<head>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script src="../../resources/gc.js"></script>
</head>
<body>
<script>
promise_test(async t => {
let iframe = document.createElement("iframe");
document.body.appendChild( iframe );
let iframe_pc = new iframe.contentWindow.RTCPeerConnection();
let iframe_exception_constructor = iframe.contentWindow.DOMException;
iframe.remove();
assert_equals(iframe_pc.signalingState, 'closed');
// Calling functions on the RTCPeerConnection should have no effect.
await promise_rejects_dom(t, 'InvalidStateError', iframe_exception_constructor,
iframe_pc.setLocalDescription({type:"answer", sdp:"v0"}));
await promise_rejects_dom(t, 'InvalidStateError', iframe_exception_constructor, iframe_pc.setRemoteDescription({type:"answer", sdp:"v0"}));
await promise_rejects_dom(t, 'InvalidStateError', iframe_exception_constructor, iframe_pc.createOffer());
await promise_rejects_dom(t, 'InvalidStateError', iframe_exception_constructor, iframe_pc.createAnswer());
// Verify equivalent (that error callback is called) for callback-based APIs.
await promise_rejects_dom(t, 'InvalidStateError',
new Promise((resolve, reject) => {
iframe_pc.setLocalDescription(
{type:"answer", sdp:"v0"},
() => { assert_unreached(); },
e => { reject(e); });
}));
await promise_rejects_dom(t, 'InvalidStateError',
new Promise((resolve, reject) => {
iframe_pc.setRemoteDescription(
{type:"answer", sdp:"v0"},
() => { assert_unreached(); },
e => { reject(e); });
}));
await promise_rejects_dom(t, 'InvalidStateError',
new Promise((resolve, reject) => {
iframe_pc.createOffer(
() => { assert_unreached(); },
e => { reject(e); });
}));
await promise_rejects_dom(t, 'InvalidStateError',
new Promise((resolve, reject) => {
iframe_pc.createAnswer(
() => { assert_unreached(); },
e => { reject(e); });
}));
}, 'PeerConnection in iframe closes properly when context is destroyed');
</script>
</body>
</html>