diff options
Diffstat (limited to 'dom/media/webrtc/tests/mochitests/test_peerConnection_replaceVideoThenRenegotiate.html')
-rw-r--r-- | dom/media/webrtc/tests/mochitests/test_peerConnection_replaceVideoThenRenegotiate.html | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/dom/media/webrtc/tests/mochitests/test_peerConnection_replaceVideoThenRenegotiate.html b/dom/media/webrtc/tests/mochitests/test_peerConnection_replaceVideoThenRenegotiate.html new file mode 100644 index 0000000000..070cb42fcb --- /dev/null +++ b/dom/media/webrtc/tests/mochitests/test_peerConnection_replaceVideoThenRenegotiate.html @@ -0,0 +1,74 @@ +<!DOCTYPE HTML> +<html> +<head> + <script type="application/javascript" src="pc.js"></script> + <script type="application/javascript" src="/tests/dom/canvas/test/captureStream_common.js"></script> +</head> +<body> +<pre id="test"> +<script type="application/javascript"> + createHTML({ + bug: "1017888", + title: "Renegotiation: replaceTrack followed by adding a second video stream" + }); + + runNetworkTest(async (options) => { + await pushPrefs(['media.peerconnection.video.min_bitrate_estimate', 180*1000]); + // [TODO] re-enable HW decoder after bug 1526207 is fixed. + if (navigator.userAgent.includes("Android")) { + await pushPrefs(["media.navigator.mediadatadecoder_vpx_enabled", false], + ["media.webrtc.hw.h264.enabled", false]); + } + + const test = new PeerConnectionTest(options); + test.setMediaConstraints([{video:true}], [{video:true}]); + const helper = new VideoStreamHelper(); + const emitter1 = new VideoFrameEmitter(CaptureStreamTestHelper.prototype.red, + CaptureStreamTestHelper.prototype.green); + const emitter2 = new VideoFrameEmitter(CaptureStreamTestHelper.prototype.blue, + CaptureStreamTestHelper.prototype.grey); + test.chain.replace("PC_LOCAL_GUM", [ + function PC_LOCAL_ADDTRACK(test) { + test.pcLocal.attachLocalStream(emitter1.stream()); + emitter1.start(); + }, + ]); + addRenegotiation(test.chain, + [ + function PC_LOCAL_REPLACE_VIDEO_TRACK_THEN_ADD_SECOND_STREAM(test) { + emitter1.stop(); + emitter2.start(); + const newstream = emitter2.stream(); + const newtrack = newstream.getVideoTracks()[0]; + var sender = test.pcLocal._pc.getSenders()[0]; + return test.pcLocal.senderReplaceTrack(sender, newtrack, newstream) + .then(() => { + test.setMediaConstraints([{video: true}, {video: true}], + [{video: true}]); + }); + }, + ], + [ + function PC_REMOTE_CHECK_ORIGINAL_TRACK_NOT_ENDED(test) { + is(test.pcRemote._pc.getTransceivers().length, 1, + "pcRemote should have one transceiver"); + const track = test.pcRemote._pc.getTransceivers()[0].receiver.track; + + const vremote = test.pcRemote.remoteMediaElements.find( + elem => elem.id.includes(track.id)); + if (!vremote) { + return Promise.reject(new Error("Couldn't find video element")); + } + ok(!vremote.ended, "Original track should not have ended after renegotiation (replaceTrack is not signalled!)"); + return helper.checkVideoPlaying(vremote); + } + ] + ); + + await test.run(); + }); + +</script> +</pre> +</body> +</html> |