aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/style/custom_properties.rs2
-rw-r--r--components/style/properties.mako.rs17
-rw-r--r--tests/wpt/mozilla/meta/css/test_variable_serialization_specified.html.ini116
-rw-r--r--tests/wpt/mozilla/tests/css/test_variable_serialization_specified.html5
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");