Track leak
by jib1
HTML
<div id="div"></div>
JavaScript
var console = { log: msg => div.innerHTML += msg + "<br>" };
var getUserMedia = c => navigator.mediaDevices.getUserMedia(c);
var haveGumOn = () => navigator.mediaDevices.enumerateDevices()
.then(([device]) => device && !!device.label.length);
var spinEventLoop = () => new Promise(r => setTimeout(r, 0));
getUserMedia({audio: true, video: true})
.then(stream => {
let clone = stream.clone();
stream.getTracks()[0].stop(); // <--- uncomment to leak track
stream.clone().getTracks().forEach(t => stream.addTrack(t));
stream.getTracks().concat(clone.getTracks()).forEach(t => t.stop());
return haveGumOn();
})
.then(on => console.log("gUM is left " + (on? "on":"off")))
.then(spinEventLoop)
.then(on => console.log("gUM is left " + (on? "on":"off")))
.catch(e => console.log(e));