mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-12-11 16:32:59 +00:00
64c70317ce
Setting the src attribute to null was incorrect, per spec https://www.w3.org/TR/WebIDL-1/#es-DOMString, if null is passed, this is to be treated as ToString(null), which is "null" (https://tc39.github.io/ecma262/#sec-tostring). Hence setting src to null will cause a 404 error as it attempts to load "null". To unload the element, recommended practice is: Per spec: https://html.spec.whatwg.org/multipage/media.html#best-practices-for-authors-using-media-elements "by removing the element's src attribute and any source element descendants, and invoking the element's load() method." MozReview-Commit-ID: 5Lq13CeDCSZ --HG-- extra : rebase_source : 806bccb32fa0542ea3be3025a31da97bb331b29c
160 lines
4.9 KiB
HTML
160 lines
4.9 KiB
HTML
<html>
|
|
<head>
|
|
<script type="text/javascript" src="manifest.js"></script>
|
|
</head>
|
|
<body onload="setTimeout(load, 0);" onunload="done()">
|
|
<script>
|
|
|
|
// Page URL: http://example.org/tests/dom/media/test/file_access_controls.html
|
|
|
|
var gResource = getPlayableVideo(gSmallTests).name;
|
|
|
|
var gTests = [
|
|
{
|
|
// Test 0
|
|
url: "redirect.sjs?domain=example.com&file="+ gResource,
|
|
result: "error",
|
|
description: "Won't load when redirected to different domain",
|
|
},{
|
|
// Test 1
|
|
url: "redirect.sjs?domain=example.com&allowed&file=" + gResource,
|
|
result: "loadeddata",
|
|
description: "Can load when redirected to different domain with allow-origin",
|
|
},{
|
|
// Test 2
|
|
url: "redirect.sjs?domain=test1.example.org&file=" + gResource,
|
|
result: "error",
|
|
description: "Won't load when redirected to subdomain",
|
|
},{
|
|
// Test 3
|
|
url: "redirect.sjs?domain=test1.example.org&allowed&file=" + gResource,
|
|
result: "loadeddata",
|
|
description: "Can load when redirected to subdomain with allow-origin",
|
|
},{
|
|
// Test 4
|
|
url: "redirect.sjs?domain=example.org&file=" + gResource,
|
|
result: "loadeddata",
|
|
description: "Can load when redirected to same domain",
|
|
},{
|
|
// Test 5
|
|
url: "http://example.org/tests/dom/media/test/" + gResource,
|
|
result: "loadeddata",
|
|
description: "Can load from same domain"
|
|
},{
|
|
// Test 6
|
|
url: "http://example.org:8000/tests/dom/media/test/" + gResource,
|
|
result: "error",
|
|
description: "Won't load from different port on same domain"
|
|
},{
|
|
// Test 7
|
|
url: "http://example.org:8000/tests/dom/media/test/allowed.sjs?" + gResource,
|
|
result: "loadeddata",
|
|
description: "Can load from different port on same domain with allow-origin",
|
|
},{
|
|
// Test 8
|
|
url: "http://example.com/tests/dom/media/test/" + gResource,
|
|
result: "error",
|
|
description: "Won't load cross domain",
|
|
},{
|
|
// Test 9
|
|
url: "http://example.com/tests/dom/media/test/allowed.sjs?" + gResource,
|
|
result: "loadeddata",
|
|
description: "Can load cross domain with allow-origin",
|
|
},{
|
|
// Test 10
|
|
url: "http://test1.example.org/tests/dom/media/test/allowed.sjs?" + gResource,
|
|
result: "loadeddata",
|
|
description: "Can load from subdomain with allow-origin",
|
|
},{
|
|
// Test 11
|
|
url: "http://test1.example.org/tests/dom/media/test/" + gResource,
|
|
result: "error",
|
|
description: "Won't load from subdomain",
|
|
}
|
|
];
|
|
|
|
var gTestNum = 0;
|
|
var gVideo = null;
|
|
var gTestedRemoved = false;
|
|
|
|
function eventHandler(event) {
|
|
//dump((gTestNum - 1) + ": " + event.type + "\n");
|
|
var video = event.target;
|
|
opener.postMessage({"result": (event.type == video.expectedResult),
|
|
"message": video.testDescription + (gTestedRemoved ? " (element not in document)" : " (element in document)")},
|
|
"http://mochi.test:8888");
|
|
// Make sure any extra events cause an error
|
|
video.expectedResult = "<none>";
|
|
nextTest();
|
|
}
|
|
|
|
function createVideo() {
|
|
var v = document.createElement('video');
|
|
v.addEventListener('loadeddata', eventHandler);
|
|
v.addEventListener('error', eventHandler);
|
|
v.crossOrigin = 'anonymous';
|
|
return v;
|
|
}
|
|
|
|
function load() {
|
|
opener.postMessage({"result": (window.location.href == "http://example.org/tests/dom/media/test/file_access_controls.html"),
|
|
"message": "We must be on a example.org:80"},
|
|
"http://mochi.test:8888");
|
|
|
|
nextTest();
|
|
}
|
|
|
|
function nextTest() {
|
|
//dump("nextTest() called, gTestNum="+gTestNum+" gTestedRemoved="+gTestedRemoved+"\n");
|
|
if (gTestNum == gTests.length) {
|
|
//dump("gTestNum == gTests.length\n");
|
|
if (!gTestedRemoved) {
|
|
// Repeat all tests with element removed from doc, should get same result.
|
|
gTestedRemoved = true;
|
|
gTestNum = 0;
|
|
} else {
|
|
//dump("Exiting...\n");
|
|
// We're done, exit the test.
|
|
window.close();
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (gVideo) {
|
|
gVideo.remove();
|
|
gVideo.removeAttribute("src");
|
|
gVideo.load();
|
|
}
|
|
|
|
gVideo = null;
|
|
SpecialPowers.forceGC();
|
|
|
|
gVideo = createVideo();
|
|
gVideo.expectedResult = gTests[gTestNum].result;
|
|
gVideo.testDescription = gTests[gTestNum].description;
|
|
// Uniquify the resource URL to ensure that the resources loaded by earlier or subsequent tests
|
|
// don't overlap with the resources we load here, which are loaded with non-default preferences set.
|
|
// We also want to make sure that an HTTP fetch actually happens for each testcase.
|
|
var url = gTests[gTestNum].url;
|
|
var random = Math.floor(Math.random()*1000000000);
|
|
url += (url.search(/\?/) < 0 ? "?" : "&") + "rand=" + random;
|
|
gVideo.src = url;
|
|
//dump("Starting test " + gTestNum + " at " + gVideo.src + " expecting:" + gVideo.expectedResult + "\n");
|
|
if (!gTestedRemoved) {
|
|
document.body.appendChild(gVideo);
|
|
// Will cause load() to be invoked.
|
|
} else {
|
|
gVideo.load();
|
|
}
|
|
gTestNum++;
|
|
}
|
|
|
|
function done() {
|
|
opener.postMessage({"done": "true"}, "http://mochi.test:8888");
|
|
}
|
|
|
|
</script>
|
|
</body>
|
|
</html>
|
|
|