Skip to content
Permalink
Browse files

style: Parse '0' as a number for border-image-width.

As per CSS Values & Units:

"However, if a 0 could be parsed as either a <number> or a <length> in a
property (such as line-height), it must parse as a <number>."

(https://drafts.csswg.org/css-values-4/#lengths)

Differential Revision: https://phabricator.services.mozilla.com/D46723
  • Loading branch information...
birtles authored and emilio committed Sep 23, 2019
1 parent a0e2aeb commit 877c6ac821ae6f80735b0d7e45a82c209432495c
Showing with 6 additions and 20 deletions.
  1. +6 −2 components/style/values/generics/border.rs
  2. +0 −18 components/style/values/specified/border.rs
@@ -16,6 +16,7 @@ use style_traits::{CssWriter, ToCss};
Copy,
Debug,
MallocSizeOf,
Parse,
PartialEq,
SpecifiedValueInfo,
ToComputedValue,
@@ -25,10 +26,13 @@ use style_traits::{CssWriter, ToCss};
)]
#[repr(C, u8)]
pub enum GenericBorderImageSideWidth<LP, N> {
/// `<length-or-percentage>`
LengthPercentage(LP),
/// `<number>`
///
/// NOTE: Numbers need to be before length-percentagess, in order to parse
/// them first, since `0` should be a number, not the `0px` length.
Number(N),
/// `<length-or-percentage>`
LengthPercentage(LP),
/// `auto`
Auto,
}
@@ -180,24 +180,6 @@ impl BorderImageSideWidth {
}
}

impl Parse for BorderImageSideWidth {
fn parse<'i, 't>(
context: &ParserContext,
input: &mut Parser<'i, 't>,
) -> Result<Self, ParseError<'i>> {
if input.try(|i| i.expect_ident_matching("auto")).is_ok() {
return Ok(GenericBorderImageSideWidth::Auto);
}

if let Ok(len) = input.try(|i| NonNegativeLengthPercentage::parse(context, i)) {
return Ok(GenericBorderImageSideWidth::LengthPercentage(len));
}

let num = NonNegativeNumber::parse(context, input)?;
Ok(GenericBorderImageSideWidth::Number(num))
}
}

impl Parse for BorderImageSlice {
fn parse<'i, 't>(
context: &ParserContext,

0 comments on commit 877c6ac

Please sign in to comment.
You can’t perform that action at this time.