diff options
4 files changed, 13 insertions, 127 deletions
diff --git a/components/style/custom_properties.rs b/components/style/custom_properties.rs index 6e42edd82cf..8d0b2aba500 100644 --- a/components/style/custom_properties.rs +++ b/components/style/custom_properties.rs @@ -270,6 +270,8 @@ fn parse_var_function<'i, 't>(input: &mut Parser<'i, 't>, let name = try!(input.expect_ident()); let name = try!(parse_name(&name)); if input.try(|input| input.expect_comma()).is_ok() { + // Exclude `!` and `;` at the top level + // https://drafts.csswg.org/css-syntax/#typedef-declaration-value try!(input.parse_until_before(Delimiter::Bang | Delimiter::Semicolon, |input| { // At least one non-comment token. try!(input.next_including_whitespace()); diff --git a/components/style/properties.mako.rs b/components/style/properties.mako.rs index 78ed3098045..847155c8de8 100644 --- a/components/style/properties.mako.rs +++ b/components/style/properties.mako.rs @@ -14,7 +14,7 @@ use std::mem; use std::sync::Arc; use app_units::Au; -use cssparser::{Parser, Color, RGBA, AtRuleParser, DeclarationParser, +use cssparser::{Parser, Color, RGBA, AtRuleParser, DeclarationParser, Delimiter, DeclarationListParser, parse_important, ToCss, TokenSerializationType}; use url::Url; use util::logical_geometry::{LogicalMargin, PhysicalSide, WritingMode}; @@ -4846,7 +4846,10 @@ pub mod shorthands { -> Result<(), ()> { input.look_for_var_functions(); let start = input.position(); - let value = parse_value(context, input); + let value = input.parse_entirely(|input| parse_value(context, input)); + if value.is_err() { + while let Ok(_) = input.next() {} // Look for var() after the error. + } let var = input.seen_var_functions(); if let Ok(value) = value { % for sub_property in shorthand.sub_properties: @@ -5663,10 +5666,12 @@ impl<'a, 'b> DeclarationParser for PropertyDeclarationParser<'a, 'b> { fn parse_value(&self, name: &str, input: &mut Parser) -> Result<(Vec<PropertyDeclaration>, bool), ()> { let mut results = vec![]; - match PropertyDeclaration::parse(name, self.context, input, &mut results) { - PropertyDeclarationParseResult::ValidOrIgnoredDeclaration => {} - _ => return Err(()) - } + try!(input.parse_until_before(Delimiter::Bang, |input| { + match PropertyDeclaration::parse(name, self.context, input, &mut results) { + PropertyDeclarationParseResult::ValidOrIgnoredDeclaration => Ok(()), + _ => Err(()) + } + })); let important = input.try(parse_important).is_ok(); Ok((results, important)) } diff --git a/tests/wpt/mozilla/meta/css/test_variable_serialization_specified.html.ini b/tests/wpt/mozilla/meta/css/test_variable_serialization_specified.html.ini deleted file mode 100644 index b4b7a38b3f5..00000000000 --- a/tests/wpt/mozilla/meta/css/test_variable_serialization_specified.html.ini +++ /dev/null @@ -1,116 +0,0 @@ -[test_variable_serialization_specified.html] - type: testharness - [`var(--a)` is unchanged by specified value serialization] - expected: FAIL - - [`var(--a) ` is unchanged by specified value serialization] - expected: FAIL - - [`var( --a ) ` is unchanged by specified value serialization] - expected: FAIL - - [`var(--a, )` is unchanged by specified value serialization] - expected: FAIL - - [`var(--a,/**/a)` is unchanged by specified value serialization] - expected: FAIL - - [`1px var(--a)` is unchanged by specified value serialization] - expected: FAIL - - [`var(--a) 1px` is unchanged by specified value serialization] - expected: FAIL - - [`something 3px url(whereever) calc(var(--a) + 1px)` is unchanged by specified value serialization] - expected: FAIL - - [`var(--a)var(--b)` is unchanged by specified value serialization] - expected: FAIL - - [`var(--a, var(--b, var(--c, black)))` is unchanged by specified value serialization] - expected: FAIL - - [`var(--a) <!--` is unchanged by specified value serialization] - expected: FAIL - - [`--> var(--a)` is unchanged by specified value serialization] - expected: FAIL - - [`{ [ var(--a) \] }` is unchanged by specified value serialization] - expected: FAIL - - [`[;\] var(--a)` is unchanged by specified value serialization] - expected: FAIL - - [`var(--a,(;))` is unchanged by specified value serialization] - expected: FAIL - - [`VAR(--a)` is unchanged by specified value serialization] - expected: FAIL - - [`var(--0)` is unchanged by specified value serialization] - expected: FAIL - - [`var(--\\30)` is unchanged by specified value serialization] - expected: FAIL - - [`var(--\\d800)` is unchanged by specified value serialization] - expected: FAIL - - [`var(--\\ffffff)` is unchanged by specified value serialization] - expected: FAIL - - [`var(--a` becomes `var(--a)` in specified value serialization] - expected: FAIL - - [`var(--a , ` becomes `var(--a , )` in specified value serialization] - expected: FAIL - - [`var(--a, ` becomes `var(--a, )` in specified value serialization] - expected: FAIL - - [`var(--a, var(--b` becomes `var(--a, var(--b))` in specified value serialization] - expected: FAIL - - [`var(--a /* unclosed comment` becomes `var(--a /* unclosed comment*/)` in specified value serialization] - expected: FAIL - - [`var(--a /* unclosed comment *` becomes `var(--a /* unclosed comment */)` in specified value serialization] - expected: FAIL - - [`[{(((var(--a` becomes `[{(((var(--a))))}\]` in specified value serialization] - expected: FAIL - - [`var(--a, "unclosed string` becomes `var(--a, "unclosed string")` in specified value serialization] - expected: FAIL - - [`var(--a, 'unclosed string` becomes `var(--a, 'unclosed string')` in specified value serialization] - expected: FAIL - - [`var(--a) "unclosed string\\` becomes `var(--a) "unclosed string"` in specified value serialization] - expected: FAIL - - [`var(--a) 'unclosed string\\` becomes `var(--a) 'unclosed string'` in specified value serialization] - expected: FAIL - - [`var(--a) \\` becomes `var(--a) \\�` in specified value serialization] - expected: FAIL - - [`var(--a) url(unclosedurl` becomes `var(--a) url(unclosedurl)` in specified value serialization] - expected: FAIL - - [`var(--a) url('unclosedurl` becomes `var(--a) url('unclosedurl')` in specified value serialization] - expected: FAIL - - [`var(--a) url("unclosedurl` becomes `var(--a) url("unclosedurl")` in specified value serialization] - expected: FAIL - - [`var(--a) url(unclosedurl\\` becomes `var(--a) url(unclosedurl\\�)` in specified value serialization] - expected: FAIL - - [`var(--a) url('unclosedurl\\` becomes `var(--a) url('unclosedurl')` in specified value serialization] - expected: FAIL - - [`var(--a) url("unclosedurl\\` becomes `var(--a) url("unclosedurl")` in specified value serialization] - expected: FAIL - diff --git a/tests/wpt/mozilla/tests/css/test_variable_serialization_specified.html b/tests/wpt/mozilla/tests/css/test_variable_serialization_specified.html index cbb9e01e3fb..ce6219707c4 100644 --- a/tests/wpt/mozilla/tests/css/test_variable_serialization_specified.html +++ b/tests/wpt/mozilla/tests/css/test_variable_serialization_specified.html @@ -104,11 +104,6 @@ function test_specified_value_serialization(value, expected) { div1.style.removeProperty("margin"); } -/* -function test(f) { f() } -function assert_equals(a, b, m) { if (a == b) { console.log("`"+a+"`", "`"+b+"`", m) } } -*/ - values_with_unchanged_specified_value_serialization.forEach(function(value) { test(function() { test_specified_value_serialization(value, value) }, "`" + value + "` is unchanged by specified value serialization"); |