Index: third_party/WebKit/LayoutTests/fast/mediarecorder/MediaRecorder-audio-video.html |
diff --git a/third_party/WebKit/LayoutTests/fast/mediarecorder/MediaRecorder-audio-video.html b/third_party/WebKit/LayoutTests/fast/mediarecorder/MediaRecorder-audio-video.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d65727c9da679f684e5b7d08f0a52e102ab152a0 |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/fast/mediarecorder/MediaRecorder-audio-video.html |
@@ -0,0 +1,90 @@ |
+<!DOCTYPE html> |
+<script src=../../resources/testharness.js></script> |
+<script src=../../resources/testharnessreport.js></script> |
+<script> |
+ |
+// This test attempts to save and verify MediaStream data in the |
+// ondataavailable event handler of MediaRecorder. |
+ |
+var checkStreamTracks = function(stream, has_video, has_audio) { |
+ if (has_video) { |
+ assert_equals(stream.getVideoTracks().length, 1); |
+ assert_equals(stream.getVideoTracks()[0].readyState, 'live'); |
+ } else { |
+ assert_equals(stream.getVideoTracks().length, 0); |
+ } |
+ |
+ if (has_audio) { |
+ assert_equals(stream.getAudioTracks().length, 1); |
+ assert_equals(stream.getAudioTracks()[0].readyState, 'live'); |
+ } else { |
+ assert_equals(stream.getAudioTracks().length, 0); |
+ } |
+}; |
+ |
+var makeAsyncTest = function(value, expected) { |
+ var recorder; |
+ |
+ async_test(function() { |
+ const recorderOnDataAvailable = this.step_func(function(event) { |
+ if (event) { |
+ assert_greater_than(event.data.size, 0, |
+ 'Recorded data size should be > 0'); |
+ assert_equals(recorder.state, "recording"); |
+ } else { |
+ assert_equals(recorder.state, "inactive"); |
+ } |
+ |
+ // TODO(mcasas): Let the test record for a while. |
+ // TODO(mcasas): Consider storing recorded data and playing it back. |
+ |
+ recorder.onstop = recorderOnStopExpected; |
+ recorder.stop(); |
+ }); |
+ |
+ const recorderOnStopExpected = this.step_func_done(); |
+ |
+ const recorderOnStopUnexpected = this.step_func(function() { |
+ assert_unreached('Recording stopped.'); |
+ }); |
+ |
+ const recorderOnError = this.step_func(function() { |
+ assert_unreached('Recording error.'); |
+ }); |
+ |
+ const gotStream = this.step_func_done(function(stream) { |
+ checkStreamTracks(stream, value['video'], value['audio']); |
+ |
+ try { |
+ recorder = new MediaRecorder(stream); |
+ } catch (e) { |
+ assert_unreached('Exception while creating MediaRecorder: ' + e); |
+ } |
+ |
+ assert_equals(recorder.state, "inactive"); |
+ recorder.ondataavailable = recorderOnDataAvailable; |
+ recorder.onstop = recorderOnStopUnexpected; |
+ recorder.onerror = recorderOnError; |
+ recorder.start(); |
+ |
+ assert_equals(recorder.state, "recording"); |
+ }); |
+ |
+ const onError = this.step_func(function() { |
+ assert_unreached('Error creating MediaRecorder.'); |
+ }); |
+ |
+ try { |
+ navigator.webkitGetUserMedia(value, gotStream, onError); |
+ } catch(e) { |
+ assert_unreached('Exception launching getUserMedia(): ' + e); |
+ } |
+ }); |
+}; |
+ |
+generate_tests(makeAsyncTest, |
+ [["video-only", {video: true, audio: false}], |
+ ["audio-only", {video: false, audio: true}], |
+ ["audio-video", {video: true, audio: true}]]); |
+ |
+</script> |