test_peerConnection_throwInCallbacks.html (2326B)
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: "857765", 11 title: "Throw in PeerConnection callbacks" 12 }); 13 14 runNetworkTest(async function () { 15 // Tests trigger warnings 16 await SpecialPowers.pushPrefEnv({ 17 set: [['media.peerconnection.treat_warnings_as_errors', false]] 18 }); 19 20 let finish; 21 const onfinished = new Promise(r => finish = async () => { 22 window.onerror = oldOnError; 23 is(error_count, 7, "Seven expected errors verified."); 24 r(); 25 }); 26 27 function getFail() { 28 return err => { 29 window.onerror = oldOnError; 30 generateErrorCallback()(err); 31 }; 32 } 33 34 let error_count = 0; 35 let oldOnError = window.onerror; 36 window.onerror = (errorMsg, url, lineNumber) => { 37 if (!errorMsg.includes("Expected")) { 38 getFail()(errorMsg); 39 } 40 error_count += 1; 41 info("onerror " + error_count + ": " + errorMsg); 42 if (error_count == 7) { 43 finish(); 44 } 45 throw new Error("window.onerror may throw"); 46 } 47 48 let pc0, pc1, pc2; 49 // Test failure callbacks (limited to 1 for now) 50 pc0 = new RTCPeerConnection(); 51 pc0.close(); 52 pc0.createOffer(getFail(), function(err) { 53 pc1 = new RTCPeerConnection(); 54 pc2 = new RTCPeerConnection(); 55 56 // Test success callbacks (happy path) 57 navigator.mediaDevices.getUserMedia({video:true}).then(function(video1) { 58 pc1.addStream(video1); 59 pc1.createOffer(function(offer) { 60 pc1.setLocalDescription(offer, function() { 61 pc2.setRemoteDescription(offer, function() { 62 pc2.createAnswer(function(answer) { 63 pc2.setLocalDescription(answer, function() { 64 pc1.setRemoteDescription(answer, function() { 65 throw new Error("Expected"); 66 }, getFail()); 67 throw new Error("Expected"); 68 }, getFail()); 69 throw new Error("Expected"); 70 }, getFail()); 71 throw new Error("Expected"); 72 }, getFail()); 73 throw new Error("Expected"); 74 }, getFail()); 75 throw new Error("Expected"); 76 }, getFail()); 77 }, getFail()); 78 throw new Error("Expected"); 79 }); 80 81 return onfinished; 82 }); 83 84 </script> 85 </pre> 86 </body> 87 </html>