diff options
Diffstat (limited to 'dom/media/test/file_access_controls.html')
-rw-r--r-- | dom/media/test/file_access_controls.html | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/dom/media/test/file_access_controls.html b/dom/media/test/file_access_controls.html new file mode 100644 index 0000000000..2f7bc360ed --- /dev/null +++ b/dom/media/test/file_access_controls.html @@ -0,0 +1,160 @@ +<html> +<head> + <script type="text/javascript" src="manifest.js"></script> +</head> +<body onload="setTimeout(load, 0);"> +<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. + done(); + 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> + |