Bug 1255378 - fix getCSSValuesForProperty for box-shadow and text-shadow; r?jryans draft
authorTom Tromey <tom@tromey.com>
Wed, 17 Jan 2018 10:34:34 -0700
changeset 738042 e2a4a2f150fd2784077dbcfc57d1aae96adb994c
parent 738041 260aa65420d8051be0626a9b722590a70797c81d
child 747300 b8c462cb68fcbb4c874dde57686f9bb83810cdfe
push id96827
push userbmo:ttromey@mozilla.com
push dateThu, 25 Jan 2018 16:28:33 +0000
reviewersjryans
bugs1255378
milestone60.0a1
Bug 1255378 - fix getCSSValuesForProperty for box-shadow and text-shadow; r?jryans This fixes InspectorUtils.getCSSValuesForProperty to return the correct values for box-shadow and text-shadow. It also takes a small step toward the goal of getting rid of InspectorUtils.cpp:PropertySupportsVariant, in favor of having all variants listed in nsCSSPropList.h. MozReview-Commit-ID: Dwh5s0IvYTX
devtools/shared/css/generated/properties-db.js
layout/inspector/InspectorUtils.cpp
layout/inspector/tests/test_bug877690.html
layout/style/nsCSSPropList.h
--- a/devtools/shared/css/generated/properties-db.js
+++ b/devtools/shared/css/generated/properties-db.js
@@ -2016,19 +2016,28 @@ exports.CSS_PROPERTIES = {
     "subproperties": [
       "box-shadow"
     ],
     "supports": [
       2,
       6
     ],
     "values": [
+      "COLOR",
+      "calc",
+      "currentColor",
+      "hsl",
+      "hsla",
       "inherit",
       "initial",
       "inset",
+      "none",
+      "rgb",
+      "rgba",
+      "transparent",
       "unset"
     ]
   },
   "-webkit-box-sizing": {
     "isInherited": false,
     "subproperties": [
       "box-sizing"
     ],
@@ -4864,19 +4873,28 @@ exports.CSS_PROPERTIES = {
     "subproperties": [
       "box-shadow"
     ],
     "supports": [
       2,
       6
     ],
     "values": [
+      "COLOR",
+      "calc",
+      "currentColor",
+      "hsl",
+      "hsla",
       "inherit",
       "initial",
       "inset",
+      "none",
+      "rgb",
+      "rgba",
+      "transparent",
       "unset"
     ]
   },
   "box-sizing": {
     "isInherited": false,
     "subproperties": [
       "box-sizing"
     ],
@@ -8833,18 +8851,27 @@ exports.CSS_PROPERTIES = {
     "subproperties": [
       "text-shadow"
     ],
     "supports": [
       2,
       6
     ],
     "values": [
-      "inherit",
-      "initial",
+      "COLOR",
+      "calc",
+      "currentColor",
+      "hsl",
+      "hsla",
+      "inherit",
+      "initial",
+      "none",
+      "rgb",
+      "rgba",
+      "transparent",
       "unset"
     ]
   },
   "text-transform": {
     "isInherited": true,
     "subproperties": [
       "text-transform"
     ],
--- a/layout/inspector/InspectorUtils.cpp
+++ b/layout/inspector/InspectorUtils.cpp
@@ -606,36 +606,37 @@ PropertySupportsVariant(nsCSSPropertyID 
          *props != eCSSProperty_UNKNOWN; ++props) {
       if (PropertySupportsVariant(*props, aVariant)) {
         return true;
       }
     }
     return false;
   }
 
-  // Properties that are parsed by functions must have their
-  // attributes hand-maintained here.
+  uint32_t supported = nsCSSProps::ParserVariant(aPropertyID);
+
+  // For the time being, properties that are parsed by functions must
+  // have some of their attributes hand-maintained here.
   if (nsCSSProps::PropHasFlags(aPropertyID, CSS_PROPERTY_VALUE_PARSER_FUNCTION) ||
       nsCSSProps::PropertyParseType(aPropertyID) == CSS_PROPERTY_PARSE_FUNCTION) {
     // These must all be special-cased.
-    uint32_t supported;
     switch (aPropertyID) {
       case eCSSProperty_border_image_slice:
       case eCSSProperty_grid_template:
       case eCSSProperty_grid:
-        supported = VARIANT_PN;
+        supported |= VARIANT_PN;
         break;
 
       case eCSSProperty_border_image_outset:
-        supported = VARIANT_LN;
+        supported |= VARIANT_LN;
         break;
 
       case eCSSProperty_border_image_width:
       case eCSSProperty_stroke_dasharray:
-        supported = VARIANT_LPN;
+        supported |= VARIANT_LPN;
         break;
 
       case eCSSProperty_border_top_left_radius:
       case eCSSProperty_border_top_right_radius:
       case eCSSProperty_border_bottom_left_radius:
       case eCSSProperty_border_bottom_right_radius:
       case eCSSProperty_background_position:
       case eCSSProperty_background_position_x:
@@ -654,69 +655,66 @@ PropertySupportsVariant(nsCSSPropertyID 
       case eCSSProperty_scroll_snap_destination:
       case eCSSProperty_transform_origin:
       case eCSSProperty_perspective_origin:
       case eCSSProperty__moz_outline_radius_topleft:
       case eCSSProperty__moz_outline_radius_topright:
       case eCSSProperty__moz_outline_radius_bottomleft:
       case eCSSProperty__moz_outline_radius_bottomright:
       case eCSSProperty__moz_window_transform_origin:
-        supported = VARIANT_LP;
+        supported |= VARIANT_LP;
         break;
 
       case eCSSProperty_text_shadow:
       case eCSSProperty_box_shadow:
-        supported = VARIANT_LENGTH | VARIANT_COLOR;
+        supported |= VARIANT_LENGTH | VARIANT_COLOR;
         break;
 
       case eCSSProperty_border_spacing:
-        supported = VARIANT_LENGTH;
+        supported |= VARIANT_LENGTH;
         break;
 
       case eCSSProperty_content:
       case eCSSProperty_cursor:
       case eCSSProperty_clip_path:
-        supported = VARIANT_URL;
+        supported |= VARIANT_URL;
         break;
 
       case eCSSProperty_shape_outside:
-        supported = VARIANT_IMAGE;
+        supported |= VARIANT_IMAGE;
         break;
 
       case eCSSProperty_fill:
       case eCSSProperty_stroke:
-        supported = VARIANT_COLOR | VARIANT_URL;
+        supported |= VARIANT_COLOR | VARIANT_URL;
         break;
 
       case eCSSProperty_image_orientation:
-        supported = VARIANT_ANGLE;
+        supported |= VARIANT_ANGLE;
         break;
 
       case eCSSProperty_filter:
-        supported = VARIANT_URL;
+        supported |= VARIANT_URL;
         break;
 
       case eCSSProperty_grid_column_start:
       case eCSSProperty_grid_column_end:
       case eCSSProperty_grid_row_start:
       case eCSSProperty_grid_row_end:
       case eCSSProperty_font_weight:
       case eCSSProperty_initial_letter:
-        supported = VARIANT_NUMBER;
+        supported |= VARIANT_NUMBER;
         break;
 
       default:
-        supported = 0;
         break;
     }
-
-    return (supported & aVariant) != 0;
   }
 
-  return (nsCSSProps::ParserVariant(aPropertyID) & aVariant) != 0;
+  return (supported & aVariant) != 0;
 }
 
 bool
 InspectorUtils::CssPropertySupportsType(GlobalObject& aGlobalObject,
                                         const nsAString& aProperty,
                                         uint32_t aType,
                                         ErrorResult& aRv)
 {
--- a/layout/inspector/tests/test_bug877690.html
+++ b/layout/inspector/tests/test_bug877690.html
@@ -182,16 +182,25 @@ function do_test() {
   // Regression test for bug 1255402.
   var expected = [ "inherit", "initial", "unset", "left", "right",
                    "top", "center", "bottom", "calc" ];
   for (prop of ["object-position", "perspective-origin"]) {
     var values = InspectorUtils.getCSSValuesForProperty(prop);
     ok(testValues(values, expected), "property " + prop + "'s values");
   }
 
+  // Regression test for bug 1255378.
+  var expected = [ "inherit", "initial", "unset", "none", "calc", ...allColors ];
+  var values = InspectorUtils.getCSSValuesForProperty("text-shadow");
+  ok(testValues(values, expected), "property text-shadow's values");
+
+  var expected = [ "inherit", "initial", "unset", "inset", "none", "calc", ...allColors ];
+  var values = InspectorUtils.getCSSValuesForProperty("box-shadow");
+  ok(testValues(values, expected), "property box-shadow's values");
+
   SimpleTest.finish();
 }
 
 SimpleTest.waitForExplicitFinish();
 addLoadEvent(do_test);
 
 </script>
 </head>
--- a/layout/style/nsCSSPropList.h
+++ b/layout/style/nsCSSPropList.h
@@ -1305,17 +1305,17 @@ CSS_PROP_EFFECTS(
     box_shadow,
     BoxShadow,
     CSS_PROPERTY_PARSE_FUNCTION |
         CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
         CSS_PROPERTY_VALUE_LIST_USES_COMMAS |
         CSS_PROPERTY_IGNORED_WHEN_COLORS_DISABLED,
         // NOTE: some components must be nonnegative
     "",
-    0,
+    VARIANT_COLOR | VARIANT_LENGTH | VARIANT_CALC | VARIANT_INHERIT | VARIANT_NONE,
     kBoxShadowTypeKTable,
     offsetof(nsStyleEffects, mBoxShadow),
     eStyleAnimType_Shadow)
 CSS_PROP_POSITION(
     box-sizing,
     box_sizing,
     BoxSizing,
     CSS_PROPERTY_PARSE_VALUE,
@@ -4125,17 +4125,17 @@ CSS_PROP_TEXT(
     TextShadow,
     CSS_PROPERTY_PARSE_FUNCTION |
         CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
         CSS_PROPERTY_APPLIES_TO_PLACEHOLDER |
         CSS_PROPERTY_VALUE_LIST_USES_COMMAS |
         CSS_PROPERTY_IGNORED_WHEN_COLORS_DISABLED,
         // NOTE: some components must be nonnegative
     "",
-    0,
+    VARIANT_COLOR | VARIANT_LENGTH | VARIANT_CALC | VARIANT_INHERIT | VARIANT_NONE,
     nullptr,
     offsetof(nsStyleText, mTextShadow),
     eStyleAnimType_Shadow)
 CSS_PROP_TEXT(
     -moz-text-size-adjust,
     _moz_text_size_adjust,
     CSS_PROP_DOMPROP_PREFIXED(TextSizeAdjust),
     CSS_PROPERTY_PARSE_VALUE,