mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-09 03:15:11 +00:00
Bug 1208371 - Improve reliability of test_mediarecorder_record_timeslice.html. r=jwwang
MozReview-Commit-ID: HFstfYnRyJP --HG-- extra : rebase_source : 80ed79a6f1e1a1e6eafb3426ef16e1739b353245
This commit is contained in:
parent
f33e7b4b07
commit
312d19a45e
@ -25,76 +25,76 @@ function startTest(test, token) {
|
||||
element.src = test.name;
|
||||
element.test = test;
|
||||
element.stream = element.mozCaptureStream();
|
||||
element.loop = true;
|
||||
element.preload = "auto";
|
||||
|
||||
var mediaRecorder = new MediaRecorder(element.stream);
|
||||
|
||||
mediaRecorder.onerror = function () {
|
||||
ok(false, 'Unexpected onerror callback fired');
|
||||
};
|
||||
|
||||
mediaRecorder.onwarning = function () {
|
||||
ok(false, 'Unexpected onwarning callback fired');
|
||||
};
|
||||
|
||||
mediaRecorder.onstop = function () {
|
||||
ok(false, 'Unexpected onstop callback fired');
|
||||
};
|
||||
|
||||
var dataAvailableCount = 0;
|
||||
var onDataAvailableFirst = false;
|
||||
|
||||
// This handler fires every 250ms to generate a blob.
|
||||
mediaRecorder.ondataavailable = function (evt) {
|
||||
info('ondataavailable fired');
|
||||
dataAvailableCount++;
|
||||
|
||||
ok(evt instanceof BlobEvent,
|
||||
'Events fired from ondataavailable should be BlobEvent');
|
||||
is(evt.type, 'dataavailable',
|
||||
'Event type should dataavailable');
|
||||
ok(evt.data.size >= 0,
|
||||
'Blob data size received is greater than or equal to zero');
|
||||
|
||||
is(evt.data.type, expectedMimeType,
|
||||
'Blob data received should have type = ' + expectedMimeType);
|
||||
is(mediaRecorder.mimeType, expectedMimeType,
|
||||
'Mime type in ondataavailable = ' + mediaRecorder.mimeType);
|
||||
|
||||
// We'll stop recording upon the 1st blob being received
|
||||
if (dataAvailableCount === 1) {
|
||||
mediaRecorder.onstop = function (evt) {
|
||||
info('onstop fired');
|
||||
|
||||
if (!onDataAvailableFirst) {
|
||||
ok(false, 'onstop unexpectedly fired before ondataavailable');
|
||||
}
|
||||
element.pause();
|
||||
manager.finished(token);
|
||||
};
|
||||
|
||||
mediaRecorder.stop();
|
||||
is(mediaRecorder.state, 'inactive',
|
||||
'Media recorder is inactive after being stopped');
|
||||
is(mediaRecorder.stream, element.stream,
|
||||
'Media recorder stream = element stream post recording');
|
||||
|
||||
} else if (dataAvailableCount === 2) {
|
||||
// Ensure we've received at least two ondataavailable events before onstop
|
||||
onDataAvailableFirst = true;
|
||||
}
|
||||
};
|
||||
|
||||
// Start recording once metadataloaded fires
|
||||
// Set up MediaRecorder once loadedmetadata fires and tracks are available.
|
||||
element.onloadedmetadata = function() {
|
||||
element.onloadedmetadata = null;
|
||||
|
||||
var mediaRecorder = new MediaRecorder(element.stream);
|
||||
|
||||
mediaRecorder.onerror = function () {
|
||||
ok(false, 'Unexpected onerror callback fired');
|
||||
};
|
||||
|
||||
mediaRecorder.onwarning = function () {
|
||||
ok(false, 'Unexpected onwarning callback fired');
|
||||
};
|
||||
|
||||
mediaRecorder.onstop = function () {
|
||||
ok(false, 'Unexpected onstop callback fired');
|
||||
};
|
||||
|
||||
var dataAvailableCount = 0;
|
||||
var onDataAvailableFirst = false;
|
||||
|
||||
// This handler fires every 250ms to generate a blob.
|
||||
mediaRecorder.ondataavailable = function (evt) {
|
||||
info('ondataavailable fired');
|
||||
dataAvailableCount++;
|
||||
|
||||
ok(evt instanceof BlobEvent,
|
||||
'Events fired from ondataavailable should be BlobEvent');
|
||||
is(evt.type, 'dataavailable',
|
||||
'Event type should dataavailable');
|
||||
ok(evt.data.size >= 0,
|
||||
'Blob data size received is greater than or equal to zero');
|
||||
|
||||
is(evt.data.type, expectedMimeType,
|
||||
'Blob data received should have type = ' + expectedMimeType);
|
||||
is(mediaRecorder.mimeType, expectedMimeType,
|
||||
'Mime type in ondataavailable = ' + mediaRecorder.mimeType);
|
||||
|
||||
// We'll stop recording upon the 1st blob being received
|
||||
if (dataAvailableCount === 1) {
|
||||
mediaRecorder.onstop = function (evt) {
|
||||
info('onstop fired');
|
||||
|
||||
if (!onDataAvailableFirst) {
|
||||
ok(false, 'onstop unexpectedly fired before ondataavailable');
|
||||
}
|
||||
element.pause();
|
||||
manager.finished(token);
|
||||
};
|
||||
|
||||
mediaRecorder.stop();
|
||||
is(mediaRecorder.state, 'inactive',
|
||||
'Media recorder is inactive after being stopped');
|
||||
is(mediaRecorder.stream, element.stream,
|
||||
'Media recorder stream = element stream post recording');
|
||||
|
||||
} else if (dataAvailableCount === 2) {
|
||||
// Ensure we've received at least two ondataavailable events before onstop
|
||||
onDataAvailableFirst = true;
|
||||
}
|
||||
};
|
||||
|
||||
mediaRecorder.start(250);
|
||||
element.play();
|
||||
is(mediaRecorder.state, 'recording', 'Media recorder should be recording');
|
||||
is(mediaRecorder.stream, element.stream,
|
||||
'Media recorder stream = element stream at the start of recording');
|
||||
};
|
||||
|
||||
element.play();
|
||||
}
|
||||
|
||||
manager.runTests(gMediaRecorderTests, startTest);
|
||||
|
Loading…
Reference in New Issue
Block a user