<!DOCTYPE html>
<html>
<head><title>getUserMedia sanity test</title></head>
<body>
  <video id="localVideo" width="1280" height="720" autoplay muted></video>
<script>

var testStatus = 'running';

function getStatus() {
  return testStatus;
}

function runTest() {
  var test = new SanityTest();
  test.start();
}

function SanityTest() {
  this.localVideo = document.getElementById("localVideo");
}

SanityTest.prototype = {
  start: function() {
    this.localVideo.addEventListener('play',
        this.onVideoPlaying.bind(this), false);
    navigator.getUserMedia = navigator.getUserMedia ||
        navigator.webkitGetUserMedia || navigator.mozGetUserMedia;
    navigator.getUserMedia({audio: true, video: true},
        this.gotLocalStream.bind(this),
        this.gotUserMediaError.bind(this));
  },

  gotLocalStream: function(stream) {
    console.log('Attaching video stream to video tag, waiting for onplay()');
    this.localVideo.srcObject = stream;
  },

  gotUserMediaError: function(error) {
    console.error('navigator.getUserMedia error: ', error);
    testStatus = 'navigator.getUserMedia error: ' + error.toString();
  },

  onVideoPlaying: function() {
    testStatus = 'ok-video-playing';
  }
}

window.onload = runTest;
window.onerror = function (message, filename, lineno, colno, error) {
  console.log("Something went wrong, here is the stack trace --> %s",
      error.stack);
  testStatus = 'exception-in-test-page: ' + error.stack
};
</script>
</body>
</html>
