summaryrefslogtreecommitdiffstats
path: root/layout/style/test/test_unprefixing_service_prefs.html
diff options
context:
space:
mode:
Diffstat (limited to 'layout/style/test/test_unprefixing_service_prefs.html')
-rw-r--r--layout/style/test/test_unprefixing_service_prefs.html132
1 files changed, 132 insertions, 0 deletions
diff --git a/layout/style/test/test_unprefixing_service_prefs.html b/layout/style/test/test_unprefixing_service_prefs.html
new file mode 100644
index 000000000..329dce2a6
--- /dev/null
+++ b/layout/style/test/test_unprefixing_service_prefs.html
@@ -0,0 +1,132 @@
+<!DOCTYPE HTML>
+<html>
+<!--
+https://bugzilla.mozilla.org/show_bug.cgi?id=1132743
+-->
+<head>
+ <meta charset="utf-8">
+ <title>Test for Bug 1132743</title>
+ <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
+ <script type="application/javascript;version=1.7" src="unprefixing_service_utils.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=1132743">Mozilla Bug 1132743</a>
+<div id="display">
+ <iframe id="testIframe"></iframe>
+</div>
+<pre id="test">
+<script type="application/javascript;version=1.7">
+"use strict";
+SimpleTest.waitForExplicitFinish();
+
+/**
+ * This test checks that our CSS unprefixing prefs are effective.
+ *
+ * We do this using an iframe, in which we load a test file at a test domain
+ * (whose whitelist-status depends on a pref), and we have the iframe report
+ * back to us (using postMessage) about whether unprefixing is working.
+ *
+ * High-level overview of the process here (starting with begin()):
+ * - First, we ensure that the pref...
+ * "layout.css.unprefixing-service.include-test-domains"
+ * ...is *unset* by default. (No point exposing it in about:config).
+ * - Then, we test that (as a result of this pref being unset) the
+ * unprefixing service is *inactive* at our test-domain, by default.
+ * - Then, via a series of calls to "startNextTest()"/"testHost()", we re-test
+ * the same test-domain with a variety of pref configurations, to ensure
+ * that unprefixing only happens there when we've preffed on the service
+ * *and* we've enabled the testing entries in the whiteslist.
+ */
+
+const IFRAME_TESTFILE = "unprefixing_service_iframe.html";
+
+// Just test the first host in our known-whitelisted-hosts list.
+const WHITELISTED_TEST_HOST = gWhitelistedHosts[0];
+
+// Configurations of our prefs to test.
+// Each is a 3-entry array, whose entries mean:
+// (1) should we enable the CSS Unprefixing Service pref?
+// (2) should we enable the "include test domains in whitelist" pref?
+// (3) in this pref-configuration, should we expect to see unprefixing active
+// on our whitelisted test-domain?
+//
+// As you can see, the only configuration which should produce unprefixing
+// activity is when *both* prefs are enabled.
+let gTestConfigs = [
+ [false, false, false],
+ [false, true, false],
+ [true, false, false],
+ [true, true, true],
+];
+
+// Test that a particular configuration of prefs will activate or inactivate
+// the CSS unprefixing service, for styles loaded from WHITELISTED_TEST_HOST.
+// aTestConfig is described above, in documentation for gTestConfigs.
+function testConfig(aTestConfig)
+{
+ if (aTestConfig.length != 3) {
+ ok(false, "bug in test; need 3 entries. see gTestConfigs documentation");
+ }
+
+ info("Verifying that CSS Unprefixing Service is " +
+ (aTestConfig[2] ? "active" : "inactive") +
+ " at test host, with prefs: " +
+ PREF_UNPREFIXING_SERVICE + "=" + aTestConfig[0] + ", " +
+ PREF_INCLUDE_TEST_DOMAINS + "=" + aTestConfig[1]);
+
+ SpecialPowers.pushPrefEnv(
+ { set:
+ [[PREF_UNPREFIXING_SERVICE, aTestConfig[0]],
+ [PREF_INCLUDE_TEST_DOMAINS, aTestConfig[1]]]
+ },
+ function() {
+ testHost(WHITELISTED_TEST_HOST, aTestConfig[2]);
+ });
+}
+
+// This function gets invoked when our iframe finishes a given round of testing.
+function startNextTest()
+{
+ if (gTestConfigs.length > 0) {
+ // Grab the next test-config, and kick off a test for it.
+ testConfig(gTestConfigs.pop());
+ return;
+ }
+
+ // Array empty --> we're done.
+ SimpleTest.finish();
+}
+
+function begin()
+{
+ // First, check that PREF_INCLUDE_TEST_DOMAINS is unset:
+ try {
+ let val = SpecialPowers.getBoolPref(PREF_INCLUDE_TEST_DOMAINS);
+ ok(false, "The test pref '" + PREF_INCLUDE_TEST_DOMAINS +
+ "' should be unspecified by default");
+ } catch(e) { /* Good, we threw; pref is unset. */ }
+
+ // Before we start loading things in iframes, set up postMessage handler.
+ registerPostMessageListener(startNextTest);
+
+ // To kick things off, we don't set any prefs; we just test the default state
+ // (which should have the "include test domains" pref implicitly disabled, &
+ // hence unprefixing should end up being disabled in our iframe). Subsequent
+ // tests are kicked off via postMessage-triggered calls to startNextTest(),
+ // which will tweak prefs and re-test.
+ info("Verifying that CSS Unprefixing Service is inactive at test host, " +
+ "with default pref configuration");
+ testHost(WHITELISTED_TEST_HOST, false);
+}
+
+// Before we start, make sure *native* -webkit prefix support is turned off.
+// It's not whitelist-restricted (and behaves slightly differently), so if we
+// left it enabled, it'd prevent us from being able to detect
+// CSSUnprefixingService's domain whitelisting in this test.
+SpecialPowers.pushPrefEnv({ set: [["layout.css.prefixes.webkit", false]]},
+ begin);
+</script>
+</pre>
+</body>
+</html>