function createTestArray() { var tests = []; var tmpVid = document.createElement("video");
return makeInfoLeakTests().then(infoLeakTests => {
for (var testNum=0; testNum < infoLeakTests.length; testNum++) { var test = infoLeakTests[testNum];
if (!tmpVid.canPlayType(test.type)) {
continue;
}
var t = {};
t.name = test.src;
t.type = test.type;
tests.push(t);
}
return tests;
})
}
function log(msg) {
info(msg); var l = document.getElementById('log');
l.innerHTML += msg + " ";
}
function finish(v) {
log("finish: " + v.name);
clearInterval(v.checkStateInterval);
for (var i=0; i<gEventTypes.length; i++) {
v.removeEventListener(gEventTypes[i], listener);
}
removeNodeAndSource(v);
manager.finished(v.token);
v = null;
}
function listener(evt) { var v = evt.target;
log(filename(v.name) + ': got ' + evt.type);
// On slow machines like B2G emulator, progress timer could time out before
// receiving any HTTP notification. We will ignore the 'stalled' event to
// pass the tests.
if (evt.type == 'stalled') {
return;
}
ok(v.eventNum < gExpectedEvents.length, filename(v.name) + " Too many events received"); var expected = (v.eventNum < gExpectedEvents.length) ? gExpectedEvents[v.eventNum] : "NoEvent";
is(evt.type, expected, filename(v.name) + " Events received in wrong order");
v.eventNum++;
if (v.eventNum == gExpectedEvents.length) {
// In one second, move onto the next test. This give a chance for any
// other events to come in. Note: we don't expect any events to come
// in, unless we've leaked some info, and 1 second should be enough time
// for the leak to show up.
setTimeout(function() {finish(v);}, 1000);
}
}
function createMedia(type, src, token) { var tag = getMajorMimeType(type); var v = document.createElement(tag);
for (var i=0; i<gEventTypes.length; i++) {
v.addEventListener(gEventTypes[i], listener);
}
v.preload = "metadata";
v.src = src;
v.name = src;
document.body.appendChild(v);
v.eventNum = 0;
v.token = token;
setTimeout(
function() {
v.checkStateInterval = setInterval(function(){checkState(v);},1);
}, 0);
}
// Define our own ok() and is() functions. The mochitest ones take ages constructing the log
// of all the passes, so only report failures.
function test_ok(b, msg) {
if (!b) {
log("FAILED test_ok: " + msg);
ok(b, msg);
}
}
function test_is(a, b, msg) {
if (a != b) {
log("FAILED test_is: " + msg);
is(a,b,msg);
}
}
function filename(uri) {
return uri.substr(uri.lastIndexOf("/")+1);
}
function checkState(v) {
test_ok(v.networkState <= HTMLMediaElement.NETWORK_LOADING ||
v.networkState == HTMLMediaElement.NETWORK_NO_SOURCE, "NetworkState of " + v.networkState + " was leaked.");
test_ok(v.readyState == HTMLMediaElement.HAVE_NOTHING, "Ready state of " + v.readyState + " was leaked");
test_is(v.seeking, false, "Seeking leaked");
test_is(v.currentTime, 0, "Leaked currentTime");
test_ok(isNaN(v.duration), "Leaked duration");
test_is(v.paused, true, "Paused leaked");
test_is(v.ended, false, "Ended leaked");
test_is(v.autoplay, false, "Autoplay leaked");
test_is(v.controls, false, "Controls leaked");
test_is(v.muted, false, "muted leaked");
test_ok(v.error==null || v.error.code==MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED, "Error code should not exist or be SRC_NOT_SUPPORTED. v.error=" +
(v.error ? v.error.code : "null"));
test_ok(filename(v.currentSrc) == filename(v.name) ||
v.networkState == HTMLMediaElement.NETWORK_NO_SOURCE, "currentSrc should match candidate uri, if we've got a valid source");
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.