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));