<!DOCTYPE HTML> <html> <head> <title>Test that preffed off properties do not appear in computed style</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=919594">Mozilla Bug 919594</a> <p id="display"></p> <div id="content" style="display: none"> </div> <pre id="test"> <script type="application/javascript; version=1.7"> /** Test that preffed off properties do not appear in computed style **/ function testWithAllPrefsDisabled() { let exposedProperties = Object.keys(gCS).map(i => gCS[i]); // Store the number of properties for later tests to use. gLengthWithAllPrefsDisabled = gCS.length; // Check that all of the properties behind the prefs are not exposed. for (let pref in gProps) { for (let prop of gProps[pref]) { ok(exposedProperties.indexOf(prop) == -1, prop + " not exposed when prefs are false"); } } } function testWithOnePrefEnabled(aPref) { let exposedProperties = Object.keys(gCS).map(i => gCS[i]); // Check that the number of properties on the object is as expected. is(gCS.length, gLengthWithAllPrefsDisabled + gProps[aPref].length, "length when " + aPref + " is true"); // Check that the properties corresponding to aPref are exposed. for (let prop of gProps[aPref]) { ok(exposedProperties.indexOf(prop) != -1, prop + " exposed when " + aPref + " is true"); } } function step() { if (gTestIndex == gTests.length) { // Reached the end of the tests. SimpleTest.finish(); return; } if (gPrefsPushed) { // We've just finished running one tests. Pop the prefs and go on to // the next test. gTestIndex++; gPrefsPushed = false; SpecialPowers.popPrefEnv(step); return; } // About to run one test. Push the prefs and run it. let fn = gTests[gTestIndex].fn; gPrefsPushed = true; SpecialPowers.pushPrefEnv(gTests[gTestIndex].settings, function() { fn(); SimpleTest.executeSoon(step); }); } // ---- var gProps = { "layout.css.text-combine-upright.enabled": ["text-combine-upright"], "layout.css.image-orientation.enabled": ["image-orientation"], "layout.css.mix-blend-mode.enabled": ["mix-blend-mode"], "layout.css.isolation.enabled": [ "isolation"], "layout.css.touch_action.enabled": ["touch-action"], "svg.transform-box.enabled": ["transform-box"] }; var gCS = getComputedStyle(document.body, ""); var gLengthWithAllPrefsDisabled; var gTestIndex = 0; var gPrefsPushed = false; var gTests = [ // First, test when all of the prefs are disabled. { settings: { set: Object.keys(gProps).map(x => [x, false]) }, fn: testWithAllPrefsDisabled }, // Then, test each pref enabled individually. ...Object.keys(gProps).map(p => ({ settings: { set: Object.keys(gProps).map(x => [x, x == p]) }, fn: testWithOnePrefEnabled.bind(null, p) })) ]; SimpleTest.waitForExplicitFinish(); step(); </script> </pre> </body> </html>