<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, false); v.addEventListener('error', eventHandler, false); 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.parentNode) gVideo.parentNode.removeChild(gVideo); 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>