chromium/third_party/blink/web_tests/fast/mediarecorder/MediaRecorder-error.html

<!DOCTYPE html>
<script src=../../resources/testharness.js></script>
<script src=../../resources/testharnessreport.js></script>
<body>
  <!-- canvas cannot be arbitrarily small -->
  <canvas id='canvas'/>
</body>
<script>

var test = async_test('forces an error in the MediaRecorder API by changing ' +
    'the amount of tracks in the MediaStream, and checks that the correct ' +
    'sequence ondataavailable-stop-error is enforced');
var recorder;
var stream;

function drawSomethingOnCanvas(canvas) {
  // Drawing something on the canvas generates a frame in its captured stream.
  var context = canvas.getContext("2d");
  context.fillStyle = "red";
  context.fillRect(0, 0, 10, 10);
}

recorderOnDataAvailable = test.step_func(function(event) {
  recorder.onerror = recorderOnError;

  // Add another track to the MediaStream to force an error.
  stream.addTrack(stream.getVideoTracks()[0].clone());
  drawSomethingOnCanvas(document.getElementById('canvas'));
});

recorderOnStop = test.step_func(function() {
  recorder.ondataavailable = test.unreached_func('Unexpected data event');
  test.done();
});

recorderOnError = test.step_func(function() {
  recorder.onstop = recorderOnStop;
});

var step = test.step_func(function() {
  var canvas = document.getElementById('canvas');
  stream = canvas.captureStream();
  assert_equals(stream.getVideoTracks()[0].readyState, 'live');

  recorder = new MediaRecorder(stream);

  recorder.onstop = test.unreached_func('Unexpected stop event');
  recorder.onpause = test.unreached_func('Unexpected pause event');
  recorder.onresume = test.unreached_func('Unexpected resume event');
  recorder.onerror = test.unreached_func('Unexpected error event');
  recorder.ondataavailable = recorderOnDataAvailable;

  recorder.start(0);
  drawSomethingOnCanvas(canvas);
});

step();

</script>