mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-27 02:47:31 +09:00
import FIREFOX_52_6_0esr_RELEASE from mozilla-esr52 hg repo
This commit is contained in:
commit
dcd9973243
150858 changed files with 23884658 additions and 0 deletions
130
dom/media/mediasource/test/mediasource.js
Normal file
130
dom/media/mediasource/test/mediasource.js
Normal file
|
|
@ -0,0 +1,130 @@
|
|||
// Helpers for Media Source Extensions tests
|
||||
|
||||
function runWithMSE(testFunction) {
|
||||
function bootstrapTest() {
|
||||
var ms = new MediaSource();
|
||||
|
||||
var el = document.createElement("video");
|
||||
el.src = URL.createObjectURL(ms);
|
||||
el.preload = "auto";
|
||||
|
||||
document.body.appendChild(el);
|
||||
SimpleTest.registerCleanupFunction(function () {
|
||||
el.parentNode.removeChild(el);
|
||||
});
|
||||
|
||||
testFunction(ms, el);
|
||||
}
|
||||
|
||||
addLoadEvent(function () {
|
||||
SpecialPowers.pushPrefEnv({"set": [
|
||||
[ "media.mediasource.enabled", true ],
|
||||
]},
|
||||
bootstrapTest);
|
||||
});
|
||||
}
|
||||
|
||||
function fetchWithXHR(uri, onLoadFunction) {
|
||||
var p = new Promise(function(resolve, reject) {
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.open("GET", uri, true);
|
||||
xhr.responseType = "arraybuffer";
|
||||
xhr.addEventListener("load", function () {
|
||||
is(xhr.status, 200, "fetchWithXHR load uri='" + uri + "' status=" + xhr.status);
|
||||
resolve(xhr.response);
|
||||
});
|
||||
xhr.send();
|
||||
});
|
||||
|
||||
if (onLoadFunction) {
|
||||
p.then(onLoadFunction);
|
||||
}
|
||||
|
||||
return p;
|
||||
};
|
||||
|
||||
function range(start, end) {
|
||||
var rv = [];
|
||||
for (var i = start; i < end; ++i) {
|
||||
rv.push(i);
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
function once(target, name, cb) {
|
||||
var p = new Promise(function(resolve, reject) {
|
||||
target.addEventListener(name, function onceEvent() {
|
||||
target.removeEventListener(name, onceEvent);
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
if (cb) {
|
||||
p.then(cb);
|
||||
}
|
||||
return p;
|
||||
}
|
||||
|
||||
function timeRangeToString(r) {
|
||||
var str = "TimeRanges: ";
|
||||
for (var i = 0; i < r.length; i++) {
|
||||
str += "[" + r.start(i) + ", " + r.end(i) + ")";
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
function loadSegment(sb, typedArrayOrArrayBuffer) {
|
||||
var typedArray = (typedArrayOrArrayBuffer instanceof ArrayBuffer) ? new Uint8Array(typedArrayOrArrayBuffer)
|
||||
: typedArrayOrArrayBuffer;
|
||||
info(`Loading buffer: [${typedArray.byteOffset}, ${typedArray.byteOffset + typedArray.byteLength})`);
|
||||
var beforeBuffered = timeRangeToString(sb.buffered);
|
||||
return new Promise(function(resolve, reject) {
|
||||
once(sb, 'update').then(function() {
|
||||
var afterBuffered = timeRangeToString(sb.buffered);
|
||||
info(`SourceBuffer buffered ranges grew from ${beforeBuffered} to ${afterBuffered}`);
|
||||
resolve();
|
||||
});
|
||||
sb.appendBuffer(typedArray);
|
||||
});
|
||||
}
|
||||
|
||||
function fetchAndLoad(sb, prefix, chunks, suffix) {
|
||||
|
||||
// Fetch the buffers in parallel.
|
||||
var buffers = {};
|
||||
var fetches = [];
|
||||
for (var chunk of chunks) {
|
||||
fetches.push(fetchWithXHR(prefix + chunk + suffix).then(((c, x) => buffers[c] = x).bind(null, chunk)));
|
||||
}
|
||||
|
||||
// Load them in series, as required per spec.
|
||||
return Promise.all(fetches).then(function() {
|
||||
var rv = Promise.resolve();
|
||||
for (var chunk of chunks) {
|
||||
rv = rv.then(loadSegment.bind(null, sb, buffers[chunk]));
|
||||
}
|
||||
return rv;
|
||||
});
|
||||
}
|
||||
|
||||
//Register timeout function to dump debugging logs.
|
||||
SimpleTest.registerTimeoutFunction(function() {
|
||||
for (var v of document.getElementsByTagName("video")) {
|
||||
v.mozDumpDebugInfo();
|
||||
}
|
||||
for (var a of document.getElementsByTagName("audio")) {
|
||||
a.mozDumpDebugInfo();
|
||||
}
|
||||
});
|
||||
|
||||
function waitUntilTime(target, targetTime) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
target.addEventListener("waiting", function onwaiting() {
|
||||
info("Got a waiting event at " + target.currentTime);
|
||||
if (target.currentTime >= targetTime) {
|
||||
ok(true, "Reached target time of: " + targetTime);
|
||||
target.removeEventListener("waiting", onwaiting);
|
||||
resolve();
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue