blob: c6a41bd55cb2690290ca7b3cc61bd0753082736b [file] [log] [blame]
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Testing description getters after connection is closed</title>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script src="routines.js"></script>
</head>
<body>
<script>
function closedConnection()
{
return new Promise((resolve, reject) => {
var localConnection = new RTCPeerConnection();
localConnection.close();
setTimeout(() => resolve(localConnection), 100);
});
}
promise_test(() => {
return closedConnection().then((localConnection) => {
assert_equals(localConnection.currentLocalDescription, localConnection.localDescription);
assert_equals(localConnection.pendingLocalDescription, localConnection.localDescription);
assert_equals(localConnection.currentRemoteDescription, localConnection.remoteDescription);
assert_equals(localConnection.pendingRemoteDescription, localConnection.remoteDescription);
});
}, "Ensuring closed connection getters do not crash");
promise_test((test) => {
return closedConnection().then((connection) => {
return promise_rejects(test, 'InvalidStateError', connection.createOffer());
});
}, "Ensuring closed connection createOffer does not crash");
promise_test(() => {
return closedConnection().then((connection) => {
assert_throws("InvalidStateError", () => { connection.createDataChannel("test"); });
});
}, "Ensuring closed connection createDataChannel does not crash");
promise_test(() => {
return closedConnection().then((connection) => {
assert_throws("InvalidStateError", () => { connection.addTransceiver("video"); });
});
}, "Ensuring closed connection addTransceiver does not crash");
promise_test(() => {
return closedConnection().then((connection) => {
return navigator.mediaDevices.getUserMedia({video: true}).then((stream) => {
assert_throws("InvalidStateError", () => { connection.addTrack(stream.getVideoTracks()[0], stream); });
});
});
}, "Ensuring closed connection addTrack does not crash");
promise_test((test) => {
var connection;
return closedConnection().then((pc) => {
connection = pc;
var pc2 = new RTCPeerConnection();
pc2.createDataChannel("test");
return pc2.createOffer();
}).then((sdp) => {
return promise_rejects(test, 'InvalidStateError', connection.setRemoteDescription(sdp));
});
}, "Ensuring closed connection setRemoteDescription does not crash");
promise_test((test) => {
var localConnection = new RTCPeerConnection();
return localConnection.createOffer().then((sdp) => {
localConnection.close();
return new Promise((resolve, reject) => {
setTimeout(() => resolve(sdp), 100);
});
}).then((sdp) => {
return promise_rejects(test, 'InvalidStateError', localConnection.setLocalDescription(sdp));
});
}, "Ensuring closed connection setLocalDescription does not crash");
promise_test((test) => {
var localConnection = new RTCPeerConnection();
var remoteConnection = new RTCPeerConnection();
remoteConnection.createDataChannel("test");
return remoteConnection.createOffer().then((sdp) => {
return localConnection.setRemoteDescription(sdp);
}).then(() => {
localConnection.close();
}).then(() => {
return promise_rejects(test, 'InvalidStateError', localConnection.createAnswer());
});
}, "Ensuring closed connection createAnswer does not crash");
</script>
</body>
</html>