diff options
Diffstat (limited to 'layout/style/test/test_unprefixing_service_prefs.html')
-rw-r--r-- | layout/style/test/test_unprefixing_service_prefs.html | 132 |
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> |