Bug 1408839: Hide some moz-scrollbar media features in content docs. r?xidorn draft
authorEmilio Cobos Álvarez <emilio@crisal.io>
Mon, 16 Oct 2017 09:24:24 +0200
changeset 680738 e2e8fe807215e670fc4582e1a0753664000b3a57
parent 680727 bca770c9ad3773a11d2587d73d65519a9ef987d9
child 735947 8a60bec182ae071014ef3a8dce20834069eb48ed
push id84603
push userbmo:emilio@crisal.io
push dateMon, 16 Oct 2017 07:28:39 +0000
reviewersxidorn
bugs1408839
milestone58.0a1
Bug 1408839: Hide some moz-scrollbar media features in content docs. r?xidorn MozReview-Commit-ID: 4I1697PAIy0
layout/style/nsMediaFeatures.cpp
layout/style/test/chrome/bug418986-2.js
layout/style/test/test_media_queries.html
--- a/layout/style/nsMediaFeatures.cpp
+++ b/layout/style/nsMediaFeatures.cpp
@@ -632,49 +632,49 @@ nsMediaFeatures::features[] = {
     nsMediaFeature::eNoRequirements,
     { nullptr },
     GetIsResourceDocument
   },
   {
     &nsGkAtoms::_moz_scrollbar_start_backward,
     nsMediaFeature::eMinMaxNotAllowed,
     nsMediaFeature::eBoolInteger,
-    nsMediaFeature::eNoRequirements,
+    nsMediaFeature::eUserAgentAndChromeOnly,
     { &nsGkAtoms::scrollbar_start_backward },
     GetSystemMetric
   },
   {
     &nsGkAtoms::_moz_scrollbar_start_forward,
     nsMediaFeature::eMinMaxNotAllowed,
     nsMediaFeature::eBoolInteger,
-    nsMediaFeature::eNoRequirements,
+    nsMediaFeature::eUserAgentAndChromeOnly,
     { &nsGkAtoms::scrollbar_start_forward },
     GetSystemMetric
   },
   {
     &nsGkAtoms::_moz_scrollbar_end_backward,
     nsMediaFeature::eMinMaxNotAllowed,
     nsMediaFeature::eBoolInteger,
-    nsMediaFeature::eNoRequirements,
+    nsMediaFeature::eUserAgentAndChromeOnly,
     { &nsGkAtoms::scrollbar_end_backward },
     GetSystemMetric
   },
   {
     &nsGkAtoms::_moz_scrollbar_end_forward,
     nsMediaFeature::eMinMaxNotAllowed,
     nsMediaFeature::eBoolInteger,
-    nsMediaFeature::eNoRequirements,
+    nsMediaFeature::eUserAgentAndChromeOnly,
     { &nsGkAtoms::scrollbar_end_forward },
     GetSystemMetric
   },
   {
     &nsGkAtoms::_moz_scrollbar_thumb_proportional,
     nsMediaFeature::eMinMaxNotAllowed,
     nsMediaFeature::eBoolInteger,
-    nsMediaFeature::eNoRequirements,
+    nsMediaFeature::eUserAgentAndChromeOnly,
     { &nsGkAtoms::scrollbar_thumb_proportional },
     GetSystemMetric
   },
   {
     &nsGkAtoms::_moz_overlay_scrollbars,
     nsMediaFeature::eMinMaxNotAllowed,
     nsMediaFeature::eBoolInteger,
     nsMediaFeature::eNoRequirements,
--- a/layout/style/test/chrome/bug418986-2.js
+++ b/layout/style/test/chrome/bug418986-2.js
@@ -46,16 +46,24 @@ var suppressed_toggles = [
   "-moz-scrollbar-start-forward",
   "-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",
 ];
 
 // Possible values for '-moz-windows-theme'
@@ -72,16 +80,17 @@ 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.
@@ -99,17 +108,17 @@ var testMatch = function (key, val) {
 };
 
 // __testToggles(resisting)__.
 // Test whether we are able to match the "toggle" media queries.
 var testToggles = function (resisting) {
   suppressed_toggles.forEach(
     function (key) {
       var exists = keyValMatches(key, 0) || keyValMatches(key, 1);
-      if (resisting) {
+      if (resisting || toggles_enabled_in_content.indexOf(key) === -1) {
          ok(!exists, key + " should not exist.");
       } else {
          ok(exists, key + " should exist.");
       }
     });
 };
 
 // __testWindowsSpecific__.
@@ -188,24 +197,29 @@ var suppressedMediaQueryCSSLine = functi
 };
 
 // __generateCSSLines(resisting)__.
 // Creates a series of lines of CSS, each of which corresponds to
 // a different media query. If the query produces a match to the
 // expected value, then the element will be colored green.
 var generateCSSLines = function (resisting) {
   let lines = ".spoof { background-color: red;}\n";
+  let is_chrome_window = window.location.protocol === "chrome:";
   expected_values.forEach(
     function ([key, offVal, onVal]) {
       lines += mediaQueryCSSLine(key, resisting ? onVal : offVal, "green");
     });
   lines += ".suppress { background-color: " + (resisting ? "green" : "red") + ";}\n";
   suppressed_toggles.forEach(
     function (key) {
-      lines += suppressedMediaQueryCSSLine(key, resisting ? "red" : "green");
+      if (toggles_enabled_in_content.indexOf(key) === -1 && !resisting && !is_chrome_window) {
+        lines += "#" + key + " { background-color: green; }\n";
+      } else {
+        lines += suppressedMediaQueryCSSLine(key, resisting ? "red" : "green");
+      }
     });
   if (OS === "WINNT") {
     lines += ".windows { background-color: " + (resisting ? "green" : "red") + ";}\n";
     lines += windows_versions.map(val => "(-moz-os-version: " + val + ")").join(", ") +
              " { #-moz-os-version { background-color: " + (resisting ? "red" : "green") + ";} }\n";
     lines += windows_themes.map(val => "(-moz-windows-theme: " + val + ")").join(",") +
              " { #-moz-windows-theme { background-color: " + (resisting ? "red" : "green") + ";} }\n";
   }
--- a/layout/style/test/test_media_queries.html
+++ b/layout/style/test/test_media_queries.html
@@ -628,53 +628,53 @@ function run() {
   // Assume we don't support grid devices
   should_not_apply("(grid)");
   should_apply("(grid: 0)");
   should_not_apply("(grid: 1)");
   should_not_apply("(grid: 2)");
   should_not_apply("(grid: -1)");
 
   // System metrics
-  expression_should_be_parseable("-moz-scrollbar-start-backward");
-  expression_should_be_parseable("-moz-scrollbar-start-forward");
-  expression_should_be_parseable("-moz-scrollbar-end-backward");
-  expression_should_be_parseable("-moz-scrollbar-end-forward");
-  expression_should_be_parseable("-moz-scrollbar-thumb-proportional");
+  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_be_parseable("-moz-touch-enabled");
   expression_should_be_parseable("-moz-swipe-animation-enabled");
 
-  expression_should_be_parseable("-moz-scrollbar-start-backward: 0");
-  expression_should_be_parseable("-moz-scrollbar-start-forward: 0");
-  expression_should_be_parseable("-moz-scrollbar-end-backward: 0");
-  expression_should_be_parseable("-moz-scrollbar-end-forward: 0");
-  expression_should_be_parseable("-moz-scrollbar-thumb-proportional: 0");
+  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_be_parseable("-moz-touch-enabled: 0");
   expression_should_be_parseable("-moz-swipe-animation-enabled: 0");
 
-  expression_should_be_parseable("-moz-scrollbar-start-backward: 1");
-  expression_should_be_parseable("-moz-scrollbar-start-forward: 1");
-  expression_should_be_parseable("-moz-scrollbar-end-backward: 1");
-  expression_should_be_parseable("-moz-scrollbar-end-forward: 1");
-  expression_should_be_parseable("-moz-scrollbar-thumb-proportional: 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_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");