blob: f11c1fd8d0d7e2db176d0c37153ac4f35aae4646 [file] [log] [blame]
importScripts("mediasource-worker-util.js");
// Note, we do not use testharness.js utilities within the worker context
// because it also communicates using postMessage to the main HTML document's
// harness, and would confuse the test case message parsing there.
onmessage = function(evt) {
postMessage({ subject: messageSubject.ERROR, info: "No message expected by Worker"});
};
let util = new MediaSourceWorkerUtil();
util.mediaSource.addEventListener("sourceopen", () => {
URL.revokeObjectURL(util.mediaSourceObjectUrl);
sourceBuffer = util.mediaSource.addSourceBuffer(util.mediaMetadata.type);
sourceBuffer.onerror = (err) => {
postMessage({ subject: messageSubject.ERROR, info: err });
};
sourceBuffer.onupdateend = () => {
// Reset the parser. Unnecessary for this buffering, except helps with test
// coverage.
sourceBuffer.abort();
// Shorten the buffered media and test playback duration to avoid timeouts.
sourceBuffer.remove(0.5, Infinity);
sourceBuffer.onupdateend = () => {
sourceBuffer.duration = 0.5;
// Issue changeType to the same type that we've already buffered.
// Unnecessary for this buffering, except helps with test coverage.
sourceBuffer.changeType(util.mediaMetadata.type);
util.mediaSource.endOfStream();
// Sanity check the duration.
// Unnecessary for this buffering, except helps with test coverage.
var duration = util.mediaSource.duration;
if (isNaN(duration) || duration <= 0.0 || duration >= 1.0) {
postMessage({
subject: messageSubject.ERROR,
info: "mediaSource.duration " + duration + " is not within expected range (0,1)"
});
}
};
};
util.mediaLoadPromise.then(mediaData => { sourceBuffer.appendBuffer(mediaData); },
err => { postMessage({ subject: messageSubject.ERROR, info: err }) });
}, { once : true });
postMessage({ subject: messageSubject.OBJECT_URL, info: util.mediaSourceObjectUrl });