DXR is a code search and navigation tool aimed at making sense of large projects. It supports full-text and regex searches as well as structural queries.

Mercurial (b6057e17f856)

VCS Links

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
<!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.vertical-text.enabled": ["text-combine-upright", "text-orientation", "writing-mode"],
  "layout.css.font-features.enabled": ["font-kerning", "font-synthesis", "font-variant-alternates", "font-variant-caps", "font-variant-east-asian", "font-variant-ligatures", "font-variant-numeric", "font-variant-position"],
  "layout.css.image-orientation.enabled": ["image-orientation"],
  "layout.css.mix-blend-mode.enabled": ["mix-blend-mode"],
  "layout.css.masking.enabled": ["mask-type"],
  "layout.css.touch_action.enabled": ["touch-action"]
};

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>