Tests getUserMedia called from a background thread. On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". tabState = 'background' PASS navigator.mediaDevices.getUserMedia({audio:true}).then(gotStream).catch(fail) did not throw exception. PASS navigator.mediaDevices.getUserMedia({audio:true}).then(gotStream).catch(fail) did not throw exception. PASS navigator.mediaDevices.getUserMedia({audio:true}).then(gotStream).catch(fail) did not throw exception. PASS navigator.mediaDevices.getUserMedia({audio:true}).then(gotStream).catch(fail) did not throw exception. ** timer fired ** PASS tabState is 'background' tabState = 'foreground' ** getUserMedia() promise resolved ** PASS tabState is 'foreground' PASS stream.getAudioTracks().length is 1 ** getUserMedia() promise resolved ** PASS tabState is 'foreground' PASS stream.getAudioTracks().length is 1 ** getUserMedia() promise resolved ** PASS tabState is 'foreground' PASS stream.getAudioTracks().length is 1 ** getUserMedia() promise resolved ** PASS tabState is 'foreground' PASS stream.getAudioTracks().length is 1 PASS successfullyParsed is true TEST COMPLETE