test_peerConnection_addtrack_removetrack_events.html (2565B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <script type="application/javascript" src="pc.js"></script> 5 </head> 6 <body> 7 <pre id="test"> 8 <script type="application/javascript"> 9 "use strict"; 10 11 createHTML({ 12 title: "MediaStream's 'addtrack' and 'removetrack' events with gUM", 13 bug: "1208328" 14 }); 15 16 runNetworkTest(function (options) { 17 let test = new PeerConnectionTest(options); 18 let eventsPromise; 19 addRenegotiation(test.chain, 20 [ 21 function PC_LOCAL_SWAP_VIDEO_TRACKS(test) { 22 return getUserMedia({video: true}).then(stream => { 23 var videoTransceiver = test.pcLocal._pc.getTransceivers()[1]; 24 is(videoTransceiver.currentDirection, "sendonly", 25 "Video transceiver's current direction is sendonly"); 26 is(videoTransceiver.direction, "sendrecv", 27 "Video transceiver's desired direction is sendrecv"); 28 29 const localStream = test.pcLocal._pc.getLocalStreams()[0]; 30 ok(localStream, "Should have local stream"); 31 32 const remoteStream = test.pcRemote._pc.getRemoteStreams()[0]; 33 ok(remoteStream, "Should have remote stream"); 34 35 const newTrack = stream.getTracks()[0]; 36 37 const videoSenderIndex = 38 test.pcLocal._pc.getSenders().findIndex(s => s.track.kind == "video"); 39 isnot(videoSenderIndex, -1, "Should have video sender"); 40 41 test.pcLocal.removeSender(videoSenderIndex); 42 is(videoTransceiver.direction, "recvonly", 43 "Video transceiver should be recvonly after removeTrack"); 44 test.pcLocal.attachLocalTrack(stream.getTracks()[0], localStream); 45 is(videoTransceiver.direction, "recvonly", 46 "Video transceiver should be recvonly after addTrack"); 47 48 eventsPromise = haveEvent(remoteStream, "addtrack", 49 wait(50000, new Error("No addtrack event for " + newTrack.id))) 50 .then(trackEvent => { 51 ok(trackEvent instanceof MediaStreamTrackEvent, 52 "Expected event to be instance of MediaStreamTrackEvent"); 53 is(trackEvent.type, "addtrack", 54 "Expected addtrack event type"); 55 is(trackEvent.track.readyState, "live", 56 "added track should be live"); 57 }) 58 .then(() => haveNoEvent(remoteStream, "addtrack")); 59 }); 60 }, 61 ], 62 [ 63 function PC_REMOTE_CHECK_EVENTS(test) { 64 return eventsPromise; 65 }, 66 ] 67 ); 68 69 test.setMediaConstraints([{audio: true, video: true}], []); 70 return test.run(); 71 }); 72 </script> 73 </pre> 74 </body> 75 </html>