summaryrefslogtreecommitdiffstats
path: root/gfx/tests/mochitest
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/tests/mochitest')
-rw-r--r--gfx/tests/mochitest/mochitest.ini11
-rw-r--r--gfx/tests/mochitest/test_acceleration.html111
-rw-r--r--gfx/tests/mochitest/test_bug509244.html47
-rw-r--r--gfx/tests/mochitest/test_bug513439.html37
-rw-r--r--gfx/tests/mochitest/test_font_whitelist.html85
-rw-r--r--gfx/tests/mochitest/test_overdraw.html23
6 files changed, 314 insertions, 0 deletions
diff --git a/gfx/tests/mochitest/mochitest.ini b/gfx/tests/mochitest/mochitest.ini
new file mode 100644
index 000000000..6622245b5
--- /dev/null
+++ b/gfx/tests/mochitest/mochitest.ini
@@ -0,0 +1,11 @@
+[DEFAULT]
+
+[test_acceleration.html]
+subsuite = gpu
+fail-if = (os == "win" && os_version == "5.1" && e10s) # Bug 1253862
+[test_bug509244.html]
+[test_bug513439.html]
+[test_font_whitelist.html]
+[test_overdraw.html]
+# Disable test until bug 1064136 is fixed
+skip-if = true
diff --git a/gfx/tests/mochitest/test_acceleration.html b/gfx/tests/mochitest/test_acceleration.html
new file mode 100644
index 000000000..0475a9590
--- /dev/null
+++ b/gfx/tests/mochitest/test_acceleration.html
@@ -0,0 +1,111 @@
+<!DOCTYPE HTML>
+<html>
+<!--
+https://bugzilla.mozilla.org/show_bug.cgi?id=627498
+-->
+<head>
+ <title>Test hardware acceleration</title>
+ <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
+ <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+</head>
+<body>
+<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=627498">Mozilla Bug 627498</a>
+<p id="display"></p>
+<div id="content" style="display: none">
+
+</div>
+<pre id="test">
+<script type="application/javascript">
+
+// Make sure that acceleration is enabled/disabled the way we expect it to be
+// based on platform.
+
+var importObj = {};
+
+var Cc = SpecialPowers.Cc;
+var Ci = SpecialPowers.Ci;
+
+var sysInfo = Cc["@mozilla.org/system-info;1"].getService(Ci.nsIPropertyBag2);
+var xr = Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULRuntime);
+
+var windows = SpecialPowers.Services.ww.getWindowEnumerator();
+var windowutils;
+var acceleratedWindows = 0;
+while (windows.hasMoreElements()) {
+ windowutils = windows.getNext().QueryInterface(Ci.nsIInterfaceRequestor)
+ .getInterface(Ci.nsIDOMWindowUtils);
+ try {
+ if (windowutils.layerManagerType != "Basic") {
+ acceleratedWindows++;
+ }
+ } catch (e) {
+ // The window may not have a layer manager, in which case we get an error.
+ // Don't count it as an accelerated window.
+ }
+}
+
+var osName = sysInfo.getProperty("name");
+switch(osName)
+{
+ case "Darwin": // Mac OS X.
+ // We only enable OpenGL layers on machines that don't support QuickDraw
+ // plugins. x86-64 architecture is a good proxy for this plugin support.
+ if (sysInfo.getProperty("arch") != "x86-64") {
+ is(acceleratedWindows, 0, "Acceleration not supported on x86 OS X");
+ } else {
+ // Workaround for SeaMonkey tinderboxes which don't support acceleration.
+ if (navigator.userAgent.match(/ SeaMonkey\//)) {
+ if (acceleratedWindows == 0) {
+ todo(false, "Acceleration not supported on x86-64 OS X" +
+ " (This is expected on SeaMonkey (tinderboxes).)");
+ break;
+ }
+ }
+
+ isnot(acceleratedWindows, 0, "Acceleration enabled on x86-64 OS X");
+ }
+ break;
+
+ case "Windows_NT": // Windows.
+ var version = parseFloat(sysInfo.getProperty("version"));
+ if (version == 5.0) {
+ is(acceleratedWindows, 0, "Acceleration not supported on Windows 2000");
+ } else {
+ // Workaround for SeaMonkey tinderboxes which don't support acceleration.
+ if (navigator.userAgent.match(/ SeaMonkey\//)) {
+ if (acceleratedWindows == 0) {
+ todo(false, "Acceleration not supported on Windows XP or newer" +
+ " (This is expected on SeaMonkey (tinderboxes).)");
+ break;
+ }
+ }
+
+ isnot(acceleratedWindows, 0, "Acceleration enabled on Windows XP or newer");
+ }
+
+ var gfxInfo = Cc["@mozilla.org/gfx/info;1"].getService(Ci.nsIGfxInfo);
+ if (version < 6.2) {
+ ok(!gfxInfo.D2DEnabled, "Direct2D not supported on Windows 2008 or older");
+ ok(!gfxInfo.DWriteEnabled, "DirectWrite not supported on Windows 2008 or older");
+ } else {
+ ok(gfxInfo.D2DEnabled, "Direct2D enabled on Windows 8 or newer");
+ ok(gfxInfo.DWriteEnabled, "DirectWrite enabled on Windows 8 or newer");
+ }
+ break;
+
+ case "Linux":
+ todo(false, "Acceleration supported on Linux, but only on taskcluster instances (bug 1296086)");
+ break;
+
+ default:
+ if (xr.OS == "Android" && xr.widgetToolkit != "gonk") {
+ isnot(acceleratedWindows, 0, "Acceleration enabled on Android");
+ } else {
+ is(acceleratedWindows, 0, "Acceleration not supported on '" + osName + "'");
+ }
+}
+
+</script>
+</pre>
+</body>
+</html>
diff --git a/gfx/tests/mochitest/test_bug509244.html b/gfx/tests/mochitest/test_bug509244.html
new file mode 100644
index 000000000..662d024d1
--- /dev/null
+++ b/gfx/tests/mochitest/test_bug509244.html
@@ -0,0 +1,47 @@
+<!DOCTYPE HTML>
+<html>
+<!--
+https://bugzilla.mozilla.org/show_bug.cgi?id=509244
+-->
+<head>
+ <title>Test for Bug 509244</title>
+ <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
+ <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+</head>
+<body>
+<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=509244">Mozilla Bug 509244</a>
+<p id="display">A</p>
+<div id="content" style="display: none">
+
+</div>
+<pre id="test">
+<script type="application/javascript">
+
+/** Test for Bug 509244 **/
+
+function flush() { document.documentElement.offsetHeight; }
+
+var text = document.getElementById("display");
+
+// layout text, caching monospace font
+text.style.fontFamily = "monospace";
+flush();
+// relayout text so that monospace font is no longer used (but cached)
+text.style.fontFamily = "sans-serif";
+flush();
+
+// flush cache
+var os = SpecialPowers.Cc["@mozilla.org/observer-service;1"]
+ .getService(SpecialPowers.Ci.nsIObserverService);
+os.notifyObservers(null, "memory-pressure", "heap-minimize");
+
+// reuse font that was flushed from cache
+text.style.fontFamily = "monospace";
+flush();
+
+ok(true, "not crashed");
+
+</script>
+</pre>
+</body>
+</html>
diff --git a/gfx/tests/mochitest/test_bug513439.html b/gfx/tests/mochitest/test_bug513439.html
new file mode 100644
index 000000000..b3def2b6a
--- /dev/null
+++ b/gfx/tests/mochitest/test_bug513439.html
@@ -0,0 +1,37 @@
+<!DOCTYPE HTML>
+<html>
+<!--
+https://bugzilla.mozilla.org/show_bug.cgi?id=513439
+-->
+<head>
+ <title>Test for Bug 513439</title>
+ <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
+ <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+</head>
+<body>
+<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=513439">Mozilla Bug 513439</a>
+<p id="display"></p>
+<div id="content" style="display: none">
+
+</div>
+<pre id="test">
+<script type="application/javascript">
+
+/** Test for Bug 513439 **/
+
+SimpleTest.waitForExplicitFinish();
+
+var domWindowUtils = SpecialPowers.DOMWindowUtils;
+SpecialPowers.pushPrefEnv({set: [["layout.css.devPixelsPerPx", "2"]]}, () => {
+ is(domWindowUtils.screenPixelsPerCSSPixel, 2, "devPixelsPerPx wasn't set correctly");
+
+ SpecialPowers.pushPrefEnv({set: [["layout.css.devPixelsPerPx", "1.5"]]}, () => {
+ is(domWindowUtils.screenPixelsPerCSSPixel, 1.5, "devPixelsPerPx wasn't set correctly");
+ SimpleTest.finish();
+ });
+});
+
+</script>
+</pre>
+</body>
+</html>
diff --git a/gfx/tests/mochitest/test_font_whitelist.html b/gfx/tests/mochitest/test_font_whitelist.html
new file mode 100644
index 000000000..52c88662c
--- /dev/null
+++ b/gfx/tests/mochitest/test_font_whitelist.html
@@ -0,0 +1,85 @@
+<!DOCTYPE HTML>
+<html>
+<!--
+https://bugzilla.mozilla.org/show_bug.cgi?id=1121643
+-->
+<head>
+ <title>Test for Bug 1121643</title>
+ <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
+ <script type="application/javascript" src="/tests/SimpleTest/SpawnTask.js"></script>
+ <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+</head>
+<body>
+<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1121643">Mozilla Bug 1121643</a>
+<span id="mono" style="font-family: monospace; font-size: 64px;">M</span>
+<span id="sans" style="font-family: sans-serif; font-size: 64px;">M</span>
+<span id="serif" style="font-family: serif; font-size: 64px;">M</span>
+<div id="content" style="display: none">
+
+</div>
+<script class="testbody" type="application/javascript;version=1.7">
+
+/** Test for Bug 1121643 **/
+
+const DOMUtils = SpecialPowers.Cc["@mozilla.org/inspector/dom-utils;1"]
+ .getService(SpecialPowers.Ci.inIDOMUtils);
+
+// Given an element id, returns the first font face name encountered.
+let fontUsed = id => {
+ let element = document.getElementById(id),
+ range = document.createRange();
+ range.selectNode(element);
+ return DOMUtils.getUsedFontFaces(range).item(0).CSSFamilyName;
+}
+
+// A map of the default mono, sans and serif fonts, obtained when
+// whitelisting is disabled.
+const fonts = { mono : fontUsed("mono"),
+ sans : fontUsed("sans"),
+ serif : fontUsed("serif") };
+
+// Set the font whitelist to contain none, some, or all of the
+// default mono, sans, and serif fonts. Check that the rendering
+// of our three test elements uses only fonts present in the
+// whitelist.
+let testFontWhitelist = function* (useMono, useSans, useSerif) {
+ let whitelist = [];
+ if (useMono) {
+ whitelist.push(fonts.mono);
+ }
+ if (useSans) {
+ whitelist.push(fonts.sans);
+ }
+ if (useSerif) {
+ whitelist.push(fonts.serif);
+ }
+ yield SpecialPowers.pushPrefEnv({"set": [["font.system.whitelist",
+ whitelist.join(", ")]]});
+ // If whitelist is empty, then whitelisting is considered disabled
+ // and all fonts are allowed.
+ info("font whitelist: " + JSON.stringify(whitelist));
+ let whitelistEmpty = whitelist.length === 0;
+ is(useMono || whitelistEmpty, fontUsed("mono") === fonts.mono,
+ "Correct mono whitelisting state; got " + fontUsed("mono") + ", requested " + fonts.mono);
+ is(useSans || whitelistEmpty, fontUsed("sans") === fonts.sans,
+ "Correct sans whitelisting state; got " + fontUsed("sans") + ", requested " + fonts.sans);
+ is(useSerif || whitelistEmpty, fontUsed("serif") === fonts.serif,
+ "Correct serif whitelisting state; got " + fontUsed("serif") + ", requested " + fonts.serif);
+}
+
+// Run tests to confirm that only whitelisting fonts are present in a
+// rendered page. Try turning mono, sans, and serif off and on in
+// every combination.
+add_task(function* () {
+ for (let useMono of [false, true]) {
+ for (let useSans of [false, true]) {
+ for (let useSerif of [false, true]) {
+ yield testFontWhitelist(useMono, useSans, useSerif);
+ }
+ }
+ }
+});
+
+</script>
+</body>
+</html>
diff --git a/gfx/tests/mochitest/test_overdraw.html b/gfx/tests/mochitest/test_overdraw.html
new file mode 100644
index 000000000..3ff9ec32e
--- /dev/null
+++ b/gfx/tests/mochitest/test_overdraw.html
@@ -0,0 +1,23 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+ <title>Test overdraw</title>
+ <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
+ <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+</head>
+<body>
+<script type="application/javascript">
+var domWindowUtils = SpecialPowers.getDOMWindowUtils(window);
+
+var overdraw = domWindowUtils.requestCompositorProperty("overdraw");
+
+if (overdraw == -1) {
+ // Overdraw queries are not supported on non OMTC builds.
+ ok(overdraw == -1, "Platform doesn't use a compositor.");
+} else {
+ // Overdraw may be lower than 100% like on OS X where we don't
+ // composite the window corners.
+ ok(overdraw > 0.95 && overdraw < 200, "Overdraw: " + overdraw);
+}
+</script>
+</body>