get_user_media_in_frame.html (2702B)
1 <!DOCTYPE html> 2 <html> 3 <head><meta charset="UTF-8"></head> 4 <body> 5 <div id="message"></div> 6 <script> 7 // Specifies whether we are using fake streams to run this automation 8 var useFakeStreams = true; 9 try { 10 var audioDevice = SpecialPowers.getCharPref("media.audio_loopback_dev"); 11 var videoDevice = SpecialPowers.getCharPref("media.video_loopback_dev"); 12 dump("TEST DEVICES: Using media devices:\n"); 13 dump("audio: " + audioDevice + "\nvideo: " + videoDevice + "\n"); 14 useFakeStreams = false; 15 } catch (e) { 16 dump("TEST DEVICES: No test devices found (in media.{audio,video}_loopback_dev, using fake streams.\n"); 17 useFakeStreams = true; 18 } 19 20 function message(m) { 21 document.getElementById("message").innerHTML += `${m}<br>`; 22 window.top.postMessage(m, "*"); 23 } 24 25 var gStreams = []; 26 27 function requestDevice(aAudio, aVideo, aShare) { 28 var opts = {video: aVideo, audio: aAudio}; 29 if (aShare) { 30 opts.video = { mediaSource: aShare }; 31 } else if (useFakeStreams) { 32 opts.fake = true; 33 } 34 35 window.navigator.mediaDevices.getUserMedia(opts) 36 .then(stream => { 37 gStreams.push(stream); 38 message("ok"); 39 }, err => message("error: " + err)); 40 } 41 message("pending"); 42 43 function stopTracks(aKind) { 44 for (let stream of gStreams) { 45 for (let track of stream.getTracks()) { 46 if (track.kind == aKind) { 47 track.stop(); 48 stream.removeTrack(track); 49 } 50 } 51 } 52 gStreams = gStreams.filter(s => !!s.getTracks().length); 53 } 54 55 function closeStream() { 56 for (let stream of gStreams) { 57 for (let track of stream.getTracks()) { 58 track.stop(); 59 } 60 } 61 gStreams = []; 62 message("closed"); 63 } 64 65 const query = document.location.search.substring(1); 66 const params = new URLSearchParams(query); 67 const origins = params.getAll("origin"); 68 const nested = params.getAll("nested"); 69 const gumpage = nested.length 70 ? "get_user_media_in_frame.html" 71 : "get_user_media.html"; 72 let id = 1; 73 if (!origins.length) { 74 for(let i = 0; i < 2; ++i) { 75 const iframe = document.createElement("iframe"); 76 iframe.id = `frame${id++}`; 77 iframe.src = gumpage; 78 document.body.appendChild(iframe); 79 } 80 } else { 81 for (let origin of origins) { 82 const iframe = document.createElement("iframe"); 83 iframe.id = `frame${id++}`; 84 const base = new URL("browser/browser/base/content/test/webrtc/", origin).href; 85 const url = new URL(gumpage, base); 86 for (let nestedOrigin of nested) { 87 url.searchParams.append("origin", nestedOrigin); 88 } 89 iframe.src = url.href; 90 iframe.allow = "camera;microphone"; 91 iframe.style = `width:${300 * Math.max(1, nested.length) + (nested.length ? 50 : 0)}px;`; 92 document.body.appendChild(iframe); 93 } 94 } 95 </script> 96 </body> 97 </html>