summaryrefslogtreecommitdiffstats
path: root/dom/canvas/test/crossorigin/test_webgl_crossorigin_textures.html
diff options
context:
space:
mode:
Diffstat (limited to 'dom/canvas/test/crossorigin/test_webgl_crossorigin_textures.html')
-rw-r--r--dom/canvas/test/crossorigin/test_webgl_crossorigin_textures.html143
1 files changed, 143 insertions, 0 deletions
diff --git a/dom/canvas/test/crossorigin/test_webgl_crossorigin_textures.html b/dom/canvas/test/crossorigin/test_webgl_crossorigin_textures.html
new file mode 100644
index 0000000000..545048a340
--- /dev/null
+++ b/dom/canvas/test/crossorigin/test_webgl_crossorigin_textures.html
@@ -0,0 +1,143 @@
+<!DOCTYPE HTML>
+<title>WebGL cross-origin textures test</title>
+<script src="/tests/SimpleTest/SimpleTest.js"></script>
+<link rel="stylesheet" href="/tests/SimpleTest/test.css">
+<body>
+<canvas id="canvas" style="border: none;" width="100" height="100">
+ <p class="fallback"> FAIL (fallback content) </p>
+</canvas>
+<script>
+
+ SimpleTest.waitForExplicitFinish();
+
+ const OK = "";
+
+ var gl;
+ var number_of_tests_live = 0;
+ var all_tests_started = false;
+
+ function verifyError(actual_error, expected_error, message) {
+ ok(actual_error == expected_error,
+ message + ": expected " + expected_error + ", got " + actual_error);
+ }
+
+ function testTexture(url, crossOriginAttribute, expected_error) {
+ number_of_tests_live++;
+ var image = new Image();
+ if (crossOriginAttribute == "just-crossOrigin-without-value") {
+ var div = document.createElement('div');
+ div.innerHTML="<img crossOrigin>";
+ image = div.children[0];
+ }
+ else if (crossOriginAttribute != "missing-value-default")
+ image.crossOrigin = crossOriginAttribute;
+
+
+ function testDone() {
+ number_of_tests_live--;
+
+ if (number_of_tests_live == 0 && all_tests_started)
+ SimpleTest.finish();
+ }
+
+ image.onload = function() {
+ var tex = gl.createTexture();
+ gl.bindTexture(gl.TEXTURE_2D, tex);
+ var actual_error = OK;
+ try {
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);
+ } catch(e) {
+ actual_error = e.name;
+ }
+ verifyError(actual_error, expected_error, "texImage2D on " + url + " with crossOrigin=" + image.crossOrigin);
+
+ testDone();
+ };
+
+ image.onerror = function(event) {
+ ok(expected_error != OK, "Got an error but expected OK!");
+
+ testDone();
+ }
+
+ image.src = url;
+ }
+
+ addLoadEvent(function () {
+ var canvas = document.getElementById("canvas");
+ gl = canvas.getContext("experimental-webgl");
+ if (!gl) {
+ todo(false, "Canvas WebGL not supported");
+ SimpleTest.finish();
+ return;
+ }
+
+
+ testTexture("http://mochi.test:8888/tests/dom/canvas/test/crossorigin/image.png",
+ "missing-value-default",
+ OK);
+ testTexture("http://mochi.test:8888/tests/dom/canvas/test/crossorigin/image.png",
+ "",
+ OK);
+ testTexture("http://mochi.test:8888/tests/dom/canvas/test/crossorigin/image.png",
+ "just-crossOrigin-without-value",
+ OK);
+ testTexture("http://example.com/tests/dom/canvas/test/crossorigin/image.png",
+ "missing-value-default",
+ "SecurityError");
+ testTexture("http://example.com/tests/dom/canvas/test/crossorigin/image.png",
+ "",
+ "SecurityError");
+ testTexture("http://example.com/tests/dom/canvas/test/crossorigin/image.png",
+ "just-crossOrigin-without-value",
+ "SecurityError");
+
+ testTexture("http://example.com/tests/dom/canvas/test/crossorigin/image-allow-star.png",
+ "missing-value-default",
+ "SecurityError");
+ testTexture("http://example.com/tests/dom/canvas/test/crossorigin/image-allow-star.png",
+ "",
+ OK);
+ testTexture("http://example.com/tests/dom/canvas/test/crossorigin/image-allow-star.png",
+ "just-crossOrigin-without-value",
+ OK);
+ testTexture("http://example.com/tests/dom/canvas/test/crossorigin/image-allow-star.png",
+ "anonymous",
+ OK);
+ testTexture("http://example.com/tests/dom/canvas/test/crossorigin/image-allow-star.png",
+ "use-credentials",
+ "SecurityError");
+
+ testTexture("http://example.com/tests/dom/canvas/test/crossorigin/image-allow-credentials.png",
+ "missing-value-default",
+ "SecurityError");
+ testTexture("http://example.com/tests/dom/canvas/test/crossorigin/image-allow-credentials.png",
+ "",
+ OK);
+ testTexture("http://example.com/tests/dom/canvas/test/crossorigin/image-allow-credentials.png",
+ "just-crossOrigin-without-value",
+ OK);
+ testTexture("http://example.com/tests/dom/canvas/test/crossorigin/image-allow-credentials.png",
+ "anonymous",
+ OK);
+ testTexture("http://example.com/tests/dom/canvas/test/crossorigin/image-allow-credentials.png",
+ "use-credentials",
+ OK);
+
+ // Test that bad values for crossorigin="..." are interpreted as invalid-value-default which is "anonymous".
+ testTexture("http://mochi.test:8888/tests/dom/canvas/test/crossorigin/image.png",
+ "foobar",
+ OK);
+ testTexture("http://example.com/tests/dom/canvas/test/crossorigin/image.png",
+ "foobar",
+ "SecurityError");
+ testTexture("http://example.com/tests/dom/canvas/test/crossorigin/image-allow-star.png",
+ "foobar",
+ OK);
+ testTexture("http://example.com/tests/dom/canvas/test/crossorigin/image-allow-credentials.png",
+ "foobar",
+ OK);
+
+ all_tests_started = true;
+ });
+</script>