Bug 1410074: Restrict system metric stuff in content pages. r=xidorn draft
authorEmilio Cobos Álvarez <emilio@crisal.io>
Thu, 19 Oct 2017 16:23:45 +0200
changeset 686863 4f9fdb0411beac0e754871994b7e1c6f3ffa0231
parent 686766 d734e6acf7778df7c933d33540203f08b44ff977
child 686864 a53d7991e5c8fbcd66bffd3dad60a6e6c6d93737
push id86327
push userbmo:emilio@crisal.io
push dateThu, 26 Oct 2017 14:40:02 +0000
reviewersxidorn
bugs1410074
milestone58.0a1
Bug 1410074: Restrict system metric stuff in content pages. r=xidorn MozReview-Commit-ID: 6rmMQfr8fzf
browser/base/content/test/static/browser_parsable_css.js
layout/style/nsMediaFeatures.cpp
layout/style/test/chrome/bug418986-2.js
layout/style/test/test_media_queries.html
--- a/browser/base/content/test/static/browser_parsable_css.js
+++ b/browser/base/content/test/static/browser_parsable_css.js
@@ -33,16 +33,20 @@ let whitelist = [
   // Highlighter CSS uses a UA-only pseudo-class, see bug 985597.
   {sourceName: /highlighters\.css$/i,
    errorMessage: /Unknown pseudo-class.*moz-native-anonymous/i,
    isFromDevTools: true},
   // Responsive Design Mode CSS uses a UA-only pseudo-class, see Bug 1241714.
   {sourceName: /responsive-ua\.css$/i,
    errorMessage: /Unknown pseudo-class.*moz-dropdown-list/i,
    isFromDevTools: true},
+  // UA-only media features.
+  {sourceName: /\b(autocomplete-item|svg)\.css$/,
+   errorMessage: /Expected media feature name but found \u2018-moz.*/i,
+   isFromDevTools: false},
 
   {sourceName: /\b(contenteditable|EditorOverride|svg|forms|html|mathml|ua)\.css$/i,
    errorMessage: /Unknown pseudo-class.*-moz-/i,
    isFromDevTools: false},
   {sourceName: /\b(html|mathml|ua)\.css$/i,
    errorMessage: /Unknown property.*-moz-/i,
    isFromDevTools: false},
   // Reserved to UA sheets unless layout.css.overflow-clip-box.enabled flipped to true.
--- a/layout/style/nsMediaFeatures.cpp
+++ b/layout/style/nsMediaFeatures.cpp
@@ -389,36 +389,42 @@ static void
 GetSystemMetric(nsPresContext* aPresContext, const nsMediaFeature* aFeature,
                 nsCSSValue& aResult)
 {
   aResult.Reset();
 
   const bool isAccessibleFromContentPages =
     !(aFeature->mReqFlags & nsMediaFeature::eUserAgentAndChromeOnly);
 
+  MOZ_ASSERT(!isAccessibleFromContentPages ||
+             *aFeature->mName == nsGkAtoms::_moz_touch_enabled);
+
   if (isAccessibleFromContentPages &&
       ShouldResistFingerprinting(aPresContext)) {
     // If "privacy.resistFingerprinting" is enabled, then we simply don't
     // return any system-backed media feature values. (No spoofed values
     // returned.)
     return;
   }
 
   MOZ_ASSERT(aFeature->mValueType == nsMediaFeature::eBoolInteger,
              "unexpected type");
+
   nsAtom* metricAtom = *aFeature->mData.mMetric;
   bool hasMetric = nsCSSRuleProcessor::HasSystemMetric(metricAtom);
   aResult.SetIntValue(hasMetric ? 1 : 0, eCSSUnit_Integer);
 }
 
 static void
 GetWindowsTheme(nsPresContext* aPresContext, const nsMediaFeature* aFeature,
                 nsCSSValue& aResult)
 {
   aResult.Reset();
+
+  MOZ_ASSERT(aFeature->mReqFlags & nsMediaFeature::eUserAgentAndChromeOnly);
   if (ShouldResistFingerprinting(aPresContext)) {
     return;
   }
 
 #ifdef XP_WIN
   uint8_t windowsThemeId =
     nsCSSRuleProcessor::GetWindowsThemeIdentifier();
 
@@ -437,16 +443,18 @@ GetWindowsTheme(nsPresContext* aPresCont
 #endif
 }
 
 static void
 GetOperatingSystemVersion(nsPresContext* aPresContext, const nsMediaFeature* aFeature,
                          nsCSSValue& aResult)
 {
   aResult.Reset();
+
+  MOZ_ASSERT(aFeature->mReqFlags & nsMediaFeature::eUserAgentAndChromeOnly);
   if (ShouldResistFingerprinting(aPresContext)) {
     return;
   }
 
 #ifdef XP_WIN
   int32_t metricResult;
   if (NS_SUCCEEDED(
         LookAndFeel::GetInt(LookAndFeel::eIntID_OperatingSystemVersionIdentifier,
@@ -461,16 +469,17 @@ GetOperatingSystemVersion(nsPresContext*
   }
 #endif
 }
 
 static void
 GetIsGlyph(nsPresContext* aPresContext, const nsMediaFeature* aFeature,
           nsCSSValue& aResult)
 {
+  MOZ_ASSERT(aFeature->mReqFlags & nsMediaFeature::eUserAgentAndChromeOnly);
   aResult.SetIntValue(aPresContext->IsGlyph() ? 1 : 0, eCSSUnit_Integer);
 }
 
 /*
  * Adding new media features requires (1) adding the new feature to this
  * array, with appropriate entries (and potentially any new code needed
  * to support new types in these entries and (2) ensuring that either
  * nsPresContext::MediaFeatureValuesChanged or
@@ -678,126 +687,127 @@ nsMediaFeatures::features[] = {
     nsMediaFeature::eUserAgentAndChromeOnly,
     { &nsGkAtoms::scrollbar_thumb_proportional },
     GetSystemMetric
   },
   {
     &nsGkAtoms::_moz_overlay_scrollbars,
     nsMediaFeature::eMinMaxNotAllowed,
     nsMediaFeature::eBoolInteger,
-    nsMediaFeature::eNoRequirements,
+    nsMediaFeature::eUserAgentAndChromeOnly,
     { &nsGkAtoms::overlay_scrollbars },
     GetSystemMetric
   },
   {
     &nsGkAtoms::_moz_windows_default_theme,
     nsMediaFeature::eMinMaxNotAllowed,
     nsMediaFeature::eBoolInteger,
-    nsMediaFeature::eNoRequirements,
+    nsMediaFeature::eUserAgentAndChromeOnly,
     { &nsGkAtoms::windows_default_theme },
     GetSystemMetric
   },
   {
     &nsGkAtoms::_moz_mac_graphite_theme,
     nsMediaFeature::eMinMaxNotAllowed,
     nsMediaFeature::eBoolInteger,
-    nsMediaFeature::eNoRequirements,
+    nsMediaFeature::eUserAgentAndChromeOnly,
     { &nsGkAtoms::mac_graphite_theme },
     GetSystemMetric
   },
   {
     &nsGkAtoms::_moz_mac_yosemite_theme,
     nsMediaFeature::eMinMaxNotAllowed,
     nsMediaFeature::eBoolInteger,
-    nsMediaFeature::eNoRequirements,
+    nsMediaFeature::eUserAgentAndChromeOnly,
     { &nsGkAtoms::mac_yosemite_theme },
     GetSystemMetric
   },
   {
     &nsGkAtoms::_moz_windows_accent_color_in_titlebar,
     nsMediaFeature::eMinMaxNotAllowed,
     nsMediaFeature::eBoolInteger,
-    nsMediaFeature::eNoRequirements,
+    nsMediaFeature::eUserAgentAndChromeOnly,
     { &nsGkAtoms::windows_accent_color_in_titlebar },
     GetSystemMetric
   },
   {
     &nsGkAtoms::_moz_windows_compositor,
     nsMediaFeature::eMinMaxNotAllowed,
     nsMediaFeature::eBoolInteger,
-    nsMediaFeature::eNoRequirements,
+    nsMediaFeature::eUserAgentAndChromeOnly,
     { &nsGkAtoms::windows_compositor },
     GetSystemMetric
   },
   {
     &nsGkAtoms::_moz_windows_classic,
     nsMediaFeature::eMinMaxNotAllowed,
     nsMediaFeature::eBoolInteger,
-    nsMediaFeature::eNoRequirements,
+    nsMediaFeature::eUserAgentAndChromeOnly,
     { &nsGkAtoms::windows_classic },
     GetSystemMetric
   },
   {
     &nsGkAtoms::_moz_windows_glass,
     nsMediaFeature::eMinMaxNotAllowed,
     nsMediaFeature::eBoolInteger,
-    nsMediaFeature::eNoRequirements,
+    nsMediaFeature::eUserAgentAndChromeOnly,
     { &nsGkAtoms::windows_glass },
     GetSystemMetric
   },
   {
     &nsGkAtoms::_moz_touch_enabled,
     nsMediaFeature::eMinMaxNotAllowed,
     nsMediaFeature::eBoolInteger,
+    // FIXME(emilio): Restrict (or remove?) when bug 1035774 lands.
     nsMediaFeature::eNoRequirements,
     { &nsGkAtoms::touch_enabled },
     GetSystemMetric
   },
   {
     &nsGkAtoms::_moz_menubar_drag,
     nsMediaFeature::eMinMaxNotAllowed,
     nsMediaFeature::eBoolInteger,
-    nsMediaFeature::eNoRequirements,
+    nsMediaFeature::eUserAgentAndChromeOnly,
     { &nsGkAtoms::menubar_drag },
     GetSystemMetric
   },
   {
     &nsGkAtoms::_moz_windows_theme,
     nsMediaFeature::eMinMaxNotAllowed,
     nsMediaFeature::eIdent,
-    nsMediaFeature::eNoRequirements,
+    nsMediaFeature::eUserAgentAndChromeOnly,
     { nullptr },
     GetWindowsTheme
   },
   {
     &nsGkAtoms::_moz_os_version,
     nsMediaFeature::eMinMaxNotAllowed,
     nsMediaFeature::eIdent,
-    nsMediaFeature::eNoRequirements,
+    nsMediaFeature::eUserAgentAndChromeOnly,
     { nullptr },
     GetOperatingSystemVersion
   },
 
   {
     &nsGkAtoms::_moz_swipe_animation_enabled,
     nsMediaFeature::eMinMaxNotAllowed,
     nsMediaFeature::eBoolInteger,
-    nsMediaFeature::eNoRequirements,
+    nsMediaFeature::eUserAgentAndChromeOnly,
     { &nsGkAtoms::swipe_animation_enabled },
     GetSystemMetric
   },
 
   // Internal -moz-is-glyph media feature: applies only inside SVG glyphs.
   // Internal because it is really only useful in the user agent anyway
   //  and therefore not worth standardizing.
   {
     &nsGkAtoms::_moz_is_glyph,
     nsMediaFeature::eMinMaxNotAllowed,
     nsMediaFeature::eBoolInteger,
-    nsMediaFeature::eNoRequirements,
+    nsMediaFeature::eUserAgentAndChromeOnly,
     { nullptr },
     GetIsGlyph
   },
   // Null-mName terminator:
   {
     nullptr,
     nsMediaFeature::eMinMaxAllowed,
     nsMediaFeature::eInteger,
--- a/layout/style/test/chrome/bug418986-2.js
+++ b/layout/style/test/chrome/bug418986-2.js
@@ -49,21 +49,17 @@ var suppressed_toggles = [
   "-moz-scrollbar-thumb-proportional",
   "-moz-touch-enabled",
   "-moz-windows-compositor",
   "-moz-windows-default-theme",
   "-moz-windows-glass",
 ];
 
 var toggles_enabled_in_content = [
-  "-moz-mac-graphite-theme",
   "-moz-touch-enabled",
-  "-moz-windows-compositor",
-  "-moz-windows-default-theme",
-  "-moz-windows-glass",
 ];
 
 // Possible values for '-moz-os-version'
 var windows_versions = [
   "windows-win7",
   "windows-win8",
   "windows-win10",
 ];
@@ -82,17 +78,16 @@ var windows_themes = [
 
 // Read the current OS.
 var OS = SpecialPowers.Services.appinfo.OS;
 
 // If we are using Windows, add an extra toggle only
 // available on that OS.
 if (OS === "WINNT") {
   suppressed_toggles.push("-moz-windows-classic");
-  toggles_enabled_in_content.push("-moz-windows-classic");
 }
 
 // __keyValMatches(key, val)__.
 // Runs a media query and returns true if key matches to val.
 var keyValMatches = (key, val) => matchMedia("(" + key + ":" + val +")").matches;
 
 // __testMatch(key, val)__.
 // Attempts to run a media query match for the given key and value.
@@ -127,17 +122,17 @@ var testToggles = function (resisting) {
 // Runs a media query on the queryName with the given possible matching values.
 var testWindowsSpecific = function (resisting, queryName, possibleValues) {
   let foundValue = null;
   possibleValues.forEach(function (val) {
     if (keyValMatches(queryName, val)) {
       foundValue = val;
     }
   });
-  if (resisting) {
+  if (resisting || !is_chrome_window) {
     ok(!foundValue, queryName + " should have no match");
   } else {
     ok(foundValue, foundValue ? ("Match found: '" + queryName + ":" + foundValue + "'")
                               : "Should have a match for '" + queryName + "'");
   }
 };
 
 // __generateHtmlLines(resisting)__.
--- a/layout/style/test/test_media_queries.html
+++ b/layout/style/test/test_media_queries.html
@@ -633,58 +633,58 @@ function run() {
   should_not_apply("(grid: -1)");
 
   // System metrics
   expression_should_not_be_parseable("-moz-scrollbar-start-backward");
   expression_should_not_be_parseable("-moz-scrollbar-start-forward");
   expression_should_not_be_parseable("-moz-scrollbar-end-backward");
   expression_should_not_be_parseable("-moz-scrollbar-end-forward");
   expression_should_not_be_parseable("-moz-scrollbar-thumb-proportional");
-  expression_should_be_parseable("-moz-overlay-scrollbars");
-  expression_should_be_parseable("-moz-windows-default-theme");
-  expression_should_be_parseable("-moz-mac-graphite-theme");
-  expression_should_be_parseable("-moz-mac-yosemite-theme");
-  expression_should_be_parseable("-moz-windows-accent-color-in-titlebar");
-  expression_should_be_parseable("-moz-windows-compositor");
-  expression_should_be_parseable("-moz-windows-classic");
-  expression_should_be_parseable("-moz-windows-glass");
+  expression_should_not_be_parseable("-moz-overlay-scrollbars");
+  expression_should_not_be_parseable("-moz-windows-default-theme");
+  expression_should_not_be_parseable("-moz-mac-graphite-theme");
+  expression_should_not_be_parseable("-moz-mac-yosemite-theme");
+  expression_should_not_be_parseable("-moz-windows-accent-color-in-titlebar");
+  expression_should_not_be_parseable("-moz-windows-compositor");
+  expression_should_not_be_parseable("-moz-windows-classic");
+  expression_should_not_be_parseable("-moz-windows-glass");
+  expression_should_not_be_parseable("-moz-swipe-animation-enabled");
   expression_should_be_parseable("-moz-touch-enabled");
-  expression_should_be_parseable("-moz-swipe-animation-enabled");
 
   expression_should_not_be_parseable("-moz-scrollbar-start-backward: 0");
   expression_should_not_be_parseable("-moz-scrollbar-start-forward: 0");
   expression_should_not_be_parseable("-moz-scrollbar-end-backward: 0");
   expression_should_not_be_parseable("-moz-scrollbar-end-forward: 0");
   expression_should_not_be_parseable("-moz-scrollbar-thumb-proportional: 0");
-  expression_should_be_parseable("-moz-overlay-scrollbars: 0");
-  expression_should_be_parseable("-moz-windows-default-theme: 0");
-  expression_should_be_parseable("-moz-mac-graphite-theme: 0");
-  expression_should_be_parseable("-moz-mac-yosemite-theme: 0");
-  expression_should_be_parseable("-moz-windows-accent-color-in-titlebar: 0");
-  expression_should_be_parseable("-moz-windows-compositor: 0");
-  expression_should_be_parseable("-moz-windows-classic: 0");
-  expression_should_be_parseable("-moz-windows-glass: 0");
+  expression_should_not_be_parseable("-moz-overlay-scrollbars: 0");
+  expression_should_not_be_parseable("-moz-windows-default-theme: 0");
+  expression_should_not_be_parseable("-moz-mac-graphite-theme: 0");
+  expression_should_not_be_parseable("-moz-mac-yosemite-theme: 0");
+  expression_should_not_be_parseable("-moz-windows-accent-color-in-titlebar: 0");
+  expression_should_not_be_parseable("-moz-windows-compositor: 0");
+  expression_should_not_be_parseable("-moz-windows-classic: 0");
+  expression_should_not_be_parseable("-moz-windows-glass: 0");
+  expression_should_not_be_parseable("-moz-swipe-animation-enabled: 0");
   expression_should_be_parseable("-moz-touch-enabled: 0");
-  expression_should_be_parseable("-moz-swipe-animation-enabled: 0");
 
   expression_should_not_be_parseable("-moz-scrollbar-start-backward: 1");
   expression_should_not_be_parseable("-moz-scrollbar-start-forward: 1");
   expression_should_not_be_parseable("-moz-scrollbar-end-backward: 1");
   expression_should_not_be_parseable("-moz-scrollbar-end-forward: 1");
   expression_should_not_be_parseable("-moz-scrollbar-thumb-proportional: 1");
-  expression_should_be_parseable("-moz-overlay-scrollbars: 1");
-  expression_should_be_parseable("-moz-windows-default-theme: 1");
-  expression_should_be_parseable("-moz-mac-graphite-theme: 1");
-  expression_should_be_parseable("-moz-mac-yosemite-theme: 1");
-  expression_should_be_parseable("-moz-windows-accent-color-in-titlebar: 1");
-  expression_should_be_parseable("-moz-windows-compositor: 1");
-  expression_should_be_parseable("-moz-windows-classic: 1");
-  expression_should_be_parseable("-moz-windows-glass: 1");
+  expression_should_not_be_parseable("-moz-overlay-scrollbars: 1");
+  expression_should_not_be_parseable("-moz-windows-default-theme: 1");
+  expression_should_not_be_parseable("-moz-mac-graphite-theme: 1");
+  expression_should_not_be_parseable("-moz-mac-yosemite-theme: 1");
+  expression_should_not_be_parseable("-moz-windows-accent-color-in-titlebar: 1");
+  expression_should_not_be_parseable("-moz-windows-compositor: 1");
+  expression_should_not_be_parseable("-moz-windows-classic: 1");
+  expression_should_not_be_parseable("-moz-windows-glass: 1");
+  expression_should_not_be_parseable("-moz-swipe-animation-enabled: 1");
   expression_should_be_parseable("-moz-touch-enabled: 1");
-  expression_should_be_parseable("-moz-swipe-animation-enabled: 1");
 
   expression_should_not_be_parseable("-moz-scrollbar-start-backward: -1");
   expression_should_not_be_parseable("-moz-scrollbar-start-forward: -1");
   expression_should_not_be_parseable("-moz-scrollbar-end-backward: -1");
   expression_should_not_be_parseable("-moz-scrollbar-end-forward: -1");
   expression_should_not_be_parseable("-moz-scrollbar-thumb-proportional: -1");
   expression_should_not_be_parseable("-moz-overlay-scrollbars: -1");
   expression_should_not_be_parseable("-moz-windows-default-theme: -1");
@@ -709,65 +709,65 @@ function run() {
   expression_should_not_be_parseable("-moz-windows-accent-color-in-titlebar: true");
   expression_should_not_be_parseable("-moz-windows-compositor: true");
   expression_should_not_be_parseable("-moz-windows-classic: true");
   expression_should_not_be_parseable("-moz-windows-glass: true");
   expression_should_not_be_parseable("-moz-touch-enabled: true");
   expression_should_not_be_parseable("-moz-swipe-animation-enabled: true");
 
   // windows theme media queries
-  expression_should_be_parseable("-moz-windows-theme: aero");
-  expression_should_be_parseable("-moz-windows-theme: aero-lite");
-  expression_should_be_parseable("-moz-windows-theme: luna-blue");
-  expression_should_be_parseable("-moz-windows-theme: luna-olive");
-  expression_should_be_parseable("-moz-windows-theme: luna-silver");
-  expression_should_be_parseable("-moz-windows-theme: royale");
-  expression_should_be_parseable("-moz-windows-theme: generic");
-  expression_should_be_parseable("-moz-windows-theme: zune");
-  expression_should_be_parseable("-moz-windows-theme: garbage");
+  expression_should_not_be_parseable("-moz-windows-theme: aero");
+  expression_should_not_be_parseable("-moz-windows-theme: aero-lite");
+  expression_should_not_be_parseable("-moz-windows-theme: luna-blue");
+  expression_should_not_be_parseable("-moz-windows-theme: luna-olive");
+  expression_should_not_be_parseable("-moz-windows-theme: luna-silver");
+  expression_should_not_be_parseable("-moz-windows-theme: royale");
+  expression_should_not_be_parseable("-moz-windows-theme: generic");
+  expression_should_not_be_parseable("-moz-windows-theme: zune");
+  expression_should_not_be_parseable("-moz-windows-theme: garbage");
   expression_should_not_be_parseable("-moz-windows-theme: ''");
   expression_should_not_be_parseable("-moz-windows-theme: ");
 
   // os version media queries (currently windows only)
-  expression_should_be_parseable("-moz-os-version: windows-win7");
-  expression_should_be_parseable("-moz-os-version: windows-win8");
-  expression_should_be_parseable("-moz-os-version: windows-win10");
+  expression_should_not_be_parseable("-moz-os-version: windows-win7");
+  expression_should_not_be_parseable("-moz-os-version: windows-win8");
+  expression_should_not_be_parseable("-moz-os-version: windows-win10");
   expression_should_not_be_parseable("-moz-os-version: ");
 
   // OpenType SVG media features
-  query_should_be_parseable("(-moz-is-glyph)");
+  query_should_not_be_parseable("(-moz-is-glyph)");
   query_should_not_be_parseable("not (-moz-is-glyph)");
   query_should_not_be_parseable("only (-moz-is-glyph)");
-  query_should_be_parseable("all and (-moz-is-glyph)");
-  query_should_be_parseable("not all and (-moz-is-glyph)");
-  query_should_be_parseable("only all and (-moz-is-glyph)");
+  query_should_not_be_parseable("all and (-moz-is-glyph)");
+  query_should_not_be_parseable("not all and (-moz-is-glyph)");
+  query_should_not_be_parseable("only all and (-moz-is-glyph)");
 
-  query_should_be_parseable("(-moz-is-glyph:0)");
+  query_should_not_be_parseable("(-moz-is-glyph:0)");
   query_should_not_be_parseable("not (-moz-is-glyph:0)");
   query_should_not_be_parseable("only (-moz-is-glyph:0)");
-  query_should_be_parseable("all and (-moz-is-glyph:0)");
-  query_should_be_parseable("not all and (-moz-is-glyph:0)");
-  query_should_be_parseable("only all and (-moz-is-glyph:0)");
+  query_should_not_be_parseable("all and (-moz-is-glyph:0)");
+  query_should_not_be_parseable("not all and (-moz-is-glyph:0)");
+  query_should_not_be_parseable("only all and (-moz-is-glyph:0)");
 
-  query_should_be_parseable("(-moz-is-glyph:1)");
+  query_should_not_be_parseable("(-moz-is-glyph:1)");
   query_should_not_be_parseable("not (-moz-is-glyph:1)");
   query_should_not_be_parseable("only (-moz-is-glyph:1)");
-  query_should_be_parseable("all and (-moz-is-glyph:1)");
-  query_should_be_parseable("not all and (-moz-is-glyph:1)");
-  query_should_be_parseable("only all and (-moz-is-glyph:1)");
+  query_should_not_be_parseable("all and (-moz-is-glyph:1)");
+  query_should_not_be_parseable("not all and (-moz-is-glyph:1)");
+  query_should_not_be_parseable("only all and (-moz-is-glyph:1)");
 
   query_should_not_be_parseable("(min--moz-is-glyph:0)");
   query_should_not_be_parseable("(max--moz-is-glyph:0)");
   query_should_not_be_parseable("(min--moz-is-glyph:1)");
   query_should_not_be_parseable("(max--moz-is-glyph:1)");
 
-  should_apply("not all and (-moz-is-glyph)");
-  should_apply("(-moz-is-glyph:0)");
-  should_apply("not all and (-moz-is-glyph:1)");
-  should_apply("only all and (-moz-is-glyph:0)");
+  should_not_apply("not all and (-moz-is-glyph)");
+  should_not_apply("(-moz-is-glyph:0)");
+  should_not_apply("not all and (-moz-is-glyph:1)");
+  should_not_apply("only all and (-moz-is-glyph:0)");
   should_not_apply("(-moz-is-glyph)");
   should_not_apply("(-moz-is-glyph:1)");
   should_not_apply("not all and (-moz-is-glyph:0)");
   should_not_apply("only all and (-moz-is-glyph:1)");
 
   // Parsing tests
   // bug 454227
   should_apply_unbalanced("(orientation");