haikuwebkit/LayoutTests/webrtc/calling-peerconnection-once...

97 lines
3.6 KiB
HTML
Raw Permalink Normal View History

2017-07-12 22:31:45 +00:00
<!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) => {
Add support for unified plan transceivers https://bugs.webkit.org/show_bug.cgi?id=189390 Reviewed by Eric Carlson. LayoutTests/imported/w3c: * web-platform-tests/webrtc/RTCDTMFSender-insertDTMF.https-expected.txt: * web-platform-tests/webrtc/RTCPeerConnection-addTrack.https-expected.txt: Regression comes from the fact that the sender was never used but transceiver direction is sendrecv. This might need further clarification in the spec or implementation of libwebrtc. * web-platform-tests/webrtc/RTCPeerConnection-addTransceiver-expected.txt: * web-platform-tests/webrtc/RTCPeerConnection-removeTrack.https-expected.txt: * web-platform-tests/webrtc/RTCPeerConnection-setDescription-transceiver-expected.txt: * web-platform-tests/webrtc/RTCRtpTransceiver-setDirection-expected.txt: Source/ThirdParty/libwebrtc: Expose more symbols. * Configurations/libwebrtc.iOS.exp: * Configurations/libwebrtc.iOSsim.exp: * Configurations/libwebrtc.mac.exp: Source/WebCore: Keep previous transceiver behavior when unified plan flag is off. Otherwise, use the libwebrtc transceiver API to create and use unified plan transceivers. Fuel the implementation of transceivers through a dedicated backend. Update transceiver IDL and make some smaller fixes at the same time: - Make sure remote sources have a proper name as per https://w3c.github.io/webrtc-pc/#dfn-create-an-rtcrtpreceiver. - Add support for transceiver.currentDirection. Our mock peer connections are only supporting plan B APIs at the moment. We therefore mandate plan B when using such mocks until we can upgrade mocks to support unified plan APIs. Covered by modified and rebased tests. * Modules/mediastream/PeerConnectionBackend.cpp: (WebCore::PeerConnectionBackend::addTrack): * Modules/mediastream/PeerConnectionBackend.h: * Modules/mediastream/RTCPeerConnection.cpp: (WebCore::RTCPeerConnection::addTrack): (WebCore::RTCPeerConnection::addTransceiver): * Modules/mediastream/RTCRtpSender.cpp: (WebCore::RTCRtpSender::RTCRtpSender): * Modules/mediastream/RTCRtpTransceiver.cpp: (WebCore::RTCRtpTransceiver::mid const): (WebCore::RTCRtpTransceiver::currentDirection const): * Modules/mediastream/RTCRtpTransceiver.h: (WebCore::RTCRtpTransceiver::backend): * Modules/mediastream/RTCRtpTransceiver.idl: * Modules/mediastream/RTCRtpTransceiverBackend.h: * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp: (WebCore::LibWebRTCMediaEndpoint::addTrack): (WebCore::LibWebRTCMediaEndpoint::newTransceiver): (WebCore::LibWebRTCMediaEndpoint::addTransceiver): (WebCore::LibWebRTCMediaEndpoint::transceiverBackendFromSender): (WebCore::LibWebRTCMediaEndpoint::OnAddTrack): (WebCore::LibWebRTCMediaEndpoint::OnTrack): * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h: * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp: (WebCore::createReceiverForSource): (WebCore::LibWebRTCPeerConnectionBackend::createReceiver): (WebCore::LibWebRTCPeerConnectionBackend::videoReceiver): (WebCore::LibWebRTCPeerConnectionBackend::audioReceiver): (WebCore::LibWebRTCPeerConnectionBackend::addTrack): (WebCore::LibWebRTCPeerConnectionBackend::addTransceiver): (WebCore::backendFromRTPTransceiver): (WebCore::LibWebRTCPeerConnectionBackend::existingTransceiver): (WebCore::LibWebRTCPeerConnectionBackend::newTransceiver): * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h: * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.cpp: (WebCore::LibWebRTCRtpSenderBackend::replaceTrack): * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.h: * Modules/mediastream/libwebrtc/LibWebRTCRtpTransceiverBackend.cpp: Added. (WebCore::LibWebRTCRtpTransceiverBackend::createReceiverBackend): (WebCore::LibWebRTCRtpTransceiverBackend::createSenderBackend): (WebCore::LibWebRTCRtpTransceiverBackend::direction const): (WebCore::LibWebRTCRtpTransceiverBackend::currentDirection const): (WebCore::LibWebRTCRtpTransceiverBackend::setDirection): (WebCore::LibWebRTCRtpTransceiverBackend::mid): (WebCore::LibWebRTCRtpTransceiverBackend::stop): * Modules/mediastream/libwebrtc/LibWebRTCRtpTransceiverBackend.h: Added. * Modules/mediastream/libwebrtc/LibWebRTCUtils.cpp: (WebCore::toRTCRtpTransceiverDirection): (WebCore::fromRTCRtpTransceiverDirection): (WebCore::fromRtpTransceiverInit): * Modules/mediastream/libwebrtc/LibWebRTCUtils.h: * WebCore.xcodeproj/project.pbxproj: * platform/mediastream/RealtimeIncomingAudioSource.cpp: (WebCore::RealtimeIncomingAudioSource::RealtimeIncomingAudioSource): * platform/mediastream/RealtimeIncomingVideoSource.cpp: (WebCore::RealtimeIncomingVideoSource::RealtimeIncomingVideoSource): * platform/mediastream/RealtimeMediaSource.h: * testing/Internals.cpp: (WebCore::Internals::useMockRTCPeerConnectionFactory): LayoutTests: Update tests using mock to enforce plan B for now until unified plan mocks are supported. * fast/mediastream/RTCPeerConnection-addIceCandidate-expected.txt: * fast/mediastream/RTCPeerConnection-icecandidate-event.html: * fast/mediastream/RTCPeerConnection-iceconnectionstatechange-event.html: * fast/mediastream/RTCPeerConnection-inspect-answer.html: * fast/mediastream/RTCPeerConnection-inspect-offer.html: * fast/mediastream/RTCPeerConnection-media-setup-single-dialog.html: * fast/mediastream/RTCPeerConnection-media-setup-two-dialogs.html: * fast/mediastream/RTCPeerConnection-remotely-assigned-transceiver-mid.html: * fast/mediastream/RTCPeerConnection-setLocalDescription-offer.html: * fast/mediastream/RTCPeerConnection-setRemoteDescription-offer.html: * webrtc/calling-peerconnection-once-closed.html: Once closed, addTransceiver is expected to throw. * webrtc/libwebrtc/release-while-creating-offer.html: * webrtc/libwebrtc/release-while-getting-stats.html: * webrtc/libwebrtc/release-while-setting-local-description.html: * webrtc/video-getParameters.html: sender and receiver parameters are no longer the same. Testing them individually. * webrtc/video-with-receiver.html: Test is working only with legacy mode. Canonical link: https://commits.webkit.org/204399@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@235809 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-09-07 21:57:47 +00:00
assert_throws("InvalidStateError", () => { connection.addTransceiver("video"); });
2017-07-12 22:31:45 +00:00
});
}, "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>