diff options
Diffstat (limited to 'dom/canvas/test/chrome')
4 files changed, 247 insertions, 0 deletions
diff --git a/dom/canvas/test/chrome/chrome.ini b/dom/canvas/test/chrome/chrome.ini new file mode 100644 index 000000000..6f7c96c27 --- /dev/null +++ b/dom/canvas/test/chrome/chrome.ini @@ -0,0 +1,8 @@ +[DEFAULT] +skip-if = os == 'android' +support-files = nonchrome_webgl_debug_renderer_info.html + +[test_webgl_debug_renderer_info.html] +subsuite = gpu +[test_drawWindow_widget_layers.html] +support-files = ../file_drawWindow_source.html ../file_drawWindow_common.js diff --git a/dom/canvas/test/chrome/nonchrome_webgl_debug_renderer_info.html b/dom/canvas/test/chrome/nonchrome_webgl_debug_renderer_info.html new file mode 100644 index 000000000..4668f2baf --- /dev/null +++ b/dom/canvas/test/chrome/nonchrome_webgl_debug_renderer_info.html @@ -0,0 +1,83 @@ +<!DOCTYPE HTML> +<html> +<script> + + +// This file has the portion of the test_webgl_renderer_info chrome mochitest +// that has to run as non-chrome to check that this WebGL extension is not exposed to content + +// we can't call the chrome Mochitest ok() function ourselves from non-chrome code. +// So we remote it to the chrome test. + +function ok(res, msg) { + // Note we post to ourselves as posting to the chrome code doesn't seem to work here. + // This works by having the chrome code put an event handler on our own window. + window.postMessage({ subTestFinished: true, result: res, message: msg }, "*"); +} + +function messageListener(e) { + // This is how the chrome test tells us to start running -- we have to wait for this + // message to avoid running before it's set up its event handler. + if (e.data.run) { + var canBeUnprivileged = e.data.canBeUnprivileged; + run(canBeUnprivileged); + } +} + +window.addEventListener("message", messageListener, true); + +function run(canBeUnprivileged) { + const UNMASKED_VENDOR_WEBGL = 0x9245; + const UNMASKED_RENDERER_WEBGL = 0x9246; + + var canvas = document.createElement("canvas"); + var gl = canvas.getContext("experimental-webgl"); + + ok(!gl.getError(), "getError on newly created WebGL context should return NO_ERROR"); + + ok(!gl.getParameter(UNMASKED_VENDOR_WEBGL) && gl.getError() == gl.INVALID_ENUM, + "Should not be able to query UNMASKED_VENDOR_WEBGL without having enabled the" + + " WEBGL_debug_renderer_info extension"); + ok(!gl.getParameter(UNMASKED_RENDERER_WEBGL) && gl.getError() == gl.INVALID_ENUM, + "Should not be able to query UNMASKED_RENDERER_WEBGL without having enabled the" + + " WEBGL_debug_renderer_info extension"); + + var exts = gl.getSupportedExtensions(); + if (canBeUnprivileged) { + ok(exts.indexOf("WEBGL_debug_renderer_info") != -1, + "WEBGL_debug_renderer_info should be listed by getSupportedExtensions in" + + " non-chrome contexts on non-RELEASE_OR_BETAs"); + + var ext = gl.getExtension("WEBGL_debug_renderer_info"); + ok(!!ext, + "WEBGL_debug_renderer_info should be available through getExtension in non-chrome" + + " contexts on non-RELEASE_OR_BETAs"); + + ok(gl.getParameter(UNMASKED_VENDOR_WEBGL) && gl.getError() == gl.NO_ERROR, + "Should be able to query UNMASKED_VENDOR_WEBGL if enabling" + + " WEBGL_debug_renderer_info succeeded"); + ok(gl.getParameter(UNMASKED_RENDERER_WEBGL) && gl.getError() == gl.NO_ERROR, + "Should be able to query UNMASKED_RENDERER_WEBGL if enabling" + + " WEBGL_debug_renderer_info succeeded"); + } else { + ok(exts.indexOf("WEBGL_debug_renderer_info") == -1, + "WEBGL_debug_renderer_info should not be listed by getSupportedExtensions in" + + " non-chrome contexts"); + var ext = gl.getExtension("WEBGL_debug_renderer_info"); + ok(!ext, + "WEBGL_debug_renderer_info should not be available through getExtension in" + + " non-chrome contexts"); + + ok(!gl.getParameter(UNMASKED_VENDOR_WEBGL) && gl.getError() == gl.INVALID_ENUM, + "Should not be able to query UNMASKED_VENDOR_WEBGL if enabling" + + " WEBGL_debug_renderer_info failed"); + ok(!gl.getParameter(UNMASKED_RENDERER_WEBGL) && gl.getError() == gl.INVALID_ENUM, + "Should not be able to query UNMASKED_RENDERER_WEBGL if enabling" + + " WEBGL_debug_renderer_info failed"); + + } + window.postMessage({allTestsFinished: true}, "*"); +} + +</script> +</html> diff --git a/dom/canvas/test/chrome/test_drawWindow_widget_layers.html b/dom/canvas/test/chrome/test_drawWindow_widget_layers.html new file mode 100644 index 000000000..a1f357f5a --- /dev/null +++ b/dom/canvas/test/chrome/test_drawWindow_widget_layers.html @@ -0,0 +1,54 @@ +<!DOCTYPE HTML> +<html> +<head> + <meta charset="utf-8"> + <title>Test for canvas drawWindow</title> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/WindowSnapshot.js"></script> + <script type="application/javascript" src="file_drawWindow_common.js"></script> + <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/> + <script type="application/javascript"> + + SimpleTest.waitForExplicitFinish(); + window.addEventListener("load", openSourceWindow, false); + + var sourceWindow; + + function openSourceWindow(event) { + if (event.target != document) { + return; + } + + // Add a little bottom padding to the window so that we don't capture the + // rounded corners at the bottom, which our GL drawing code on OS X draws + // for regular windows. + // (The reftest framework doesn't have this problem because it doesn't use + // a regular window with a titlebar, so there are no rounded corners.) + const WINDOW_INNER_WIDTH = CANVAS_WIDTH; + const WINDOW_INNER_HEIGHT = CANVAS_HEIGHT + 10; + + // Need to open as a toplevel chrome window so that + // DRAWWINDOW_USE_WIDGET_LAYERS is honored. + sourceWindow = window.open("file_drawWindow_source.html", "", + `chrome,width=${WINDOW_INNER_WIDTH},height=${WINDOW_INNER_HEIGHT}`); + SimpleTest.waitForFocus(runTests, sourceWindow); + } + + function runTests() { + var cxInterfaceWrap = SpecialPowers.wrap(CanvasRenderingContext2D); + var flags = cxInterfaceWrap.DRAWWINDOW_USE_WIDGET_LAYERS | + cxInterfaceWrap.DRAWWINDOW_DRAW_CARET | + cxInterfaceWrap.DRAWWINDOW_DRAW_VIEW; + runDrawWindowTests(sourceWindow, flags, true); + + sourceWindow.close(); + + SimpleTest.finish(); + } + + </script> +</head> +<body> +<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=">Mozilla Bug </a> +</body> +</html> diff --git a/dom/canvas/test/chrome/test_webgl_debug_renderer_info.html b/dom/canvas/test/chrome/test_webgl_debug_renderer_info.html new file mode 100644 index 000000000..9d4d38c3c --- /dev/null +++ b/dom/canvas/test/chrome/test_webgl_debug_renderer_info.html @@ -0,0 +1,102 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=666446 +--> +<head> + <title>Test for WEBGL_debug_renderer_info chrome-only extension</title> + <script type="application/javascript" src="chrome://mochikit/content/MochiKit/packed.js"></script> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css" /> +</head> +<body> + +<pre id="test"> +<script> + +const UNMASKED_VENDOR_WEBGL = 0x9245; +const UNMASKED_RENDERER_WEBGL = 0x9246; + + +var Cu = parent.Components.utils; +Cu.import("resource://gre/modules/AppConstants.jsm"); +// This gives us `AppConstants` in the global scope. +// We need this because we only expose debug_renderer_info #ifndef RELEASE_OR_BETA. +// This should match AppConstants.RELEASE_OR_BETA. + +const canBeUnprivileged = !AppConstants.RELEASE_OR_BETA; + + +function isNonEmptyString(s) +{ + return s && (typeof s) == "string"; +} + +function messageListener(e) { + if (e.data.allTestsFinished) { + SimpleTest.finish(); + } else if (e.data.subTestFinished) { + ok(e.data.result, "content iframe: " + e.data.message); + } +} + +function checkChromeCase(canvas) { + + var gl = canvas.getContext("experimental-webgl"); + ok(!gl.getError(), "getError on newly created WebGL context should return NO_ERROR"); + + ok(!gl.getParameter(UNMASKED_VENDOR_WEBGL) && gl.getError() == gl.INVALID_ENUM, + "Should not be able to query UNMASKED_VENDOR_WEBGL without having enabled the WEBGL_debug_renderer_info extension"); + ok(!gl.getParameter(UNMASKED_RENDERER_WEBGL) && gl.getError() == gl.INVALID_ENUM, + "Should not be able to query UNMASKED_RENDERER_WEBGL without having enabled the WEBGL_debug_renderer_info extension"); + + var exts = gl.getSupportedExtensions(); + ok(exts.indexOf("WEBGL_debug_renderer_info") != -1, + "WEBGL_debug_renderer_info should be listed by getSupportedExtensions in chrome contexts"); + var ext = gl.getExtension("WEBGL_debug_renderer_info"); + ok(ext, + "WEBGL_debug_renderer_info should be available through getExtension in chrome contexts"); + + ok(ext.UNMASKED_VENDOR_WEBGL == UNMASKED_VENDOR_WEBGL, + "UNMASKED_VENDOR_WEBGL has the correct value"); + ok(ext.UNMASKED_RENDERER_WEBGL == UNMASKED_RENDERER_WEBGL, + "UNMASKED_RENDERER_WEBGL has the correct value"); + + ok(isNonEmptyString(gl.getParameter(UNMASKED_VENDOR_WEBGL)) && gl.getError() == gl.NO_ERROR, + "Should be able to query UNMASKED_VENDOR_WEBGL in chrome context with WEBGL_debug_renderer_info enabled"); + ok(isNonEmptyString(gl.getParameter(UNMASKED_RENDERER_WEBGL)) && gl.getError() == gl.NO_ERROR, + "Should be able to query UNMASKED_RENDERER_WEBGL in chrome context with WEBGL_debug_renderer_info enabled"); +} + +function main() +{ + SimpleTest.waitForExplicitFinish(); + + checkChromeCase(document.createElement("canvas")); + + // Now run the non-chrome code to verify the security of this WebGL chrome-only extension. + + var iframe = document.createElement("iframe"); + iframe.src = "http://mochi.test:8888/chrome/dom/canvas/test/chrome/nonchrome_webgl_debug_renderer_info.html"; + + iframe.onload = function () { + + // test that chrome can get WEBGL_debug_renderer_info on a canvas on the iframe... + // this is useful to check in itself, and is also useful so the subsequent non-chrome test + // will also test that doing so doesn't confuse our chrome-only check. + checkChromeCase(iframe.contentDocument.createElement("canvas")); + + iframe.contentWindow.addEventListener("message", messageListener, false); + iframe.contentWindow.postMessage({run: true, + canBeUnprivileged: canBeUnprivileged}, + "*"); + }; + + document.body.appendChild(iframe); +} + +window.onload = main; +</script> +</pre> +</body> +</html> |