summaryrefslogtreecommitdiffstats
path: root/dom/media/test/file_access_controls.html
diff options
context:
space:
mode:
Diffstat (limited to 'dom/media/test/file_access_controls.html')
-rw-r--r--dom/media/test/file_access_controls.html156
1 files changed, 156 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 000000000..ae55154c0
--- /dev/null
+++ b/dom/media/test/file_access_controls.html
@@ -0,0 +1,156 @@
+<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>
+