test_peerConnection_promiseSendOnly.html (2307B)
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 createHTML({ 10 bug: "1091898", 11 title: "PeerConnection with promises (sendonly)", 12 visible: true 13 }); 14 15 var pc1 = new RTCPeerConnection(); 16 var pc2 = new RTCPeerConnection(); 17 18 var add = (pc, can, failed) => can && pc.addIceCandidate(can).catch(failed); 19 pc1.onicecandidate = e => add(pc2, e.candidate, generateErrorCallback()); 20 pc2.onicecandidate = e => add(pc1, e.candidate, generateErrorCallback()); 21 22 var v1, v2; 23 var delivered = new Promise(resolve => pc2.ontrack = e => { 24 // Test RTCTrackEvent here. 25 ok(e.streams.length, "has streams"); 26 ok(e.streams[0].getTrackById(e.track.id), "has track"); 27 ok(pc2.getReceivers().some(receiver => receiver == e.receiver), "has receiver"); 28 if (e.streams[0].getTracks().length == 2) { 29 // Test RTCTrackEvent required args here. 30 mustThrowWith("RTCTrackEvent wo/required args", 31 "TypeError", () => new RTCTrackEvent("track", {})); 32 v2.srcObject = e.streams[0]; 33 resolve(); 34 } 35 }); 36 37 runNetworkTest(function() { 38 v1 = createMediaElement('video', 'v1'); 39 v2 = createMediaElement('video', 'v2'); 40 var canPlayThrough = new Promise(resolve => v2.canplaythrough = e => resolve()); 41 42 is(v2.currentTime, 0, "v2.currentTime is zero at outset"); 43 44 return navigator.mediaDevices.getUserMedia({ video: true, audio: true }) 45 .then(stream => (v1.srcObject = stream).getTracks().forEach(t => pc1.addTrack(t, stream))) 46 .then(() => pc1.createOffer({})) // check that createOffer accepts arg. 47 .then(offer => pc1.setLocalDescription(offer)) 48 .then(() => pc2.setRemoteDescription(pc1.localDescription)) 49 .then(() => pc2.createAnswer({})) // check that createAnswer accepts arg. 50 .then(answer => pc2.setLocalDescription(answer)) 51 .then(() => pc1.setRemoteDescription(pc2.localDescription)) 52 .then(() => delivered) 53 // .then(() => canPlayThrough) // why doesn't this fire? 54 .then(() => waitUntil(() => v2.currentTime > 0)) 55 .then(() => ok(v2.currentTime > 0, "v2.currentTime is moving (" + v2.currentTime + ")")) 56 .then(() => ok(true, "Connected.")); 57 }); 58 </script> 59 </pre> 60 </body> 61 </html>