diff --git a/Cargo.lock b/Cargo.lock index 05d71cf2a12..a2d8483dbb4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1170,8 +1170,8 @@ dependencies = [ [[package]] name = "cssparser" -version = "0.30.0" -source = "git+https://github.com/servo/rust-cssparser?rev=45bc47e2bcb846f1efb5aea156be5fe7d18624bf#45bc47e2bcb846f1efb5aea156be5fe7d18624bf" +version = "0.31.0" +source = "git+https://github.com/servo/rust-cssparser?rev=3e1bd05139cb7174ace395d498ca7128feb8f69d#3e1bd05139cb7174ace395d498ca7128feb8f69d" dependencies = [ "cssparser-macros", "dtoa-short", @@ -1187,7 +1187,7 @@ dependencies = [ [[package]] name = "cssparser-macros" version = "0.6.0" -source = "git+https://github.com/servo/rust-cssparser?rev=45bc47e2bcb846f1efb5aea156be5fe7d18624bf#45bc47e2bcb846f1efb5aea156be5fe7d18624bf" +source = "git+https://github.com/servo/rust-cssparser?rev=3e1bd05139cb7174ace395d498ca7128feb8f69d#3e1bd05139cb7174ace395d498ca7128feb8f69d" dependencies = [ "quote", "syn 1.0.103", diff --git a/Cargo.toml b/Cargo.toml index 2be4868052c..65c3cedcbe5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -27,7 +27,7 @@ compositing_traits = { path = "components/shared/compositing" } content-security-policy = { version = "0.5", features = ["serde"] } cookie = "0.12" crossbeam-channel = "0.5" -cssparser = { version = "0.30", git = "https://github.com/servo/rust-cssparser", rev = "45bc47e2bcb846f1efb5aea156be5fe7d18624bf" } +cssparser = { version = "0.31", git = "https://github.com/servo/rust-cssparser", rev = "3e1bd05139cb7174ace395d498ca7128feb8f69d" } darling = { version = "0.14", default-features = false } data-url = "0.1.0" devtools_traits = { path = "components/shared/devtools" } diff --git a/components/style/counter_style/mod.rs b/components/style/counter_style/mod.rs index d968bf20d51..216e5e7fec7 100644 --- a/components/style/counter_style/mod.rs +++ b/components/style/counter_style/mod.rs @@ -13,7 +13,7 @@ use crate::str::CssStringWriter; use crate::values::specified::Integer; use crate::values::CustomIdent; use crate::Atom; -use cssparser::{AtRuleParser, DeclarationListParser, DeclarationParser}; +use cssparser::{AtRuleParser, DeclarationListParser, DeclarationParser, QualifiedRuleParser}; use cssparser::{CowRcStr, Parser, SourceLocation, Token}; use selectors::parser::SelectorParseErrorKind; use std::fmt::{self, Write}; @@ -153,6 +153,12 @@ impl<'a, 'b, 'i> AtRuleParser<'i> for CounterStyleRuleParser<'a, 'b> { type Error = StyleParseErrorKind<'i>; } +impl<'a, 'b, 'i> QualifiedRuleParser<'i> for CounterStyleRuleParser<'a, 'b> { + type Prelude = (); + type QualifiedRule = (); + type Error = StyleParseErrorKind<'i>; +} + macro_rules! checker { ($self:ident._($value:ident)) => {}; ($self:ident. $checker:ident($value:ident)) => { diff --git a/components/style/font_face.rs b/components/style/font_face.rs index 7ed545a1c4d..bcf8b91591e 100644 --- a/components/style/font_face.rs +++ b/components/style/font_face.rs @@ -16,18 +16,20 @@ use crate::values::computed::font::{FamilyName, FontStretch}; use crate::values::generics::font::FontStyle as GenericFontStyle; #[cfg(feature = "gecko")] use crate::values::specified::font::MetricsOverride; -#[cfg(feature = "gecko")] -use crate::values::specified::font::{FontFeatureSettings, FontVariationSettings}; use crate::values::specified::font::SpecifiedFontStyle; use crate::values::specified::font::{AbsoluteFontWeight, FontStretch as SpecifiedFontStretch}; +#[cfg(feature = "gecko")] +use crate::values::specified::font::{FontFeatureSettings, FontVariationSettings}; use crate::values::specified::url::SpecifiedUrl; use crate::values::specified::Angle; #[cfg(feature = "gecko")] use crate::values::specified::NonNegativePercentage; #[cfg(feature = "gecko")] use cssparser::UnicodeRange; -use cssparser::{AtRuleParser, DeclarationListParser, DeclarationParser, Parser}; -use cssparser::{CowRcStr, SourceLocation}; +use cssparser::{ + AtRuleParser, CowRcStr, DeclarationListParser, DeclarationParser, Parser, QualifiedRuleParser, + SourceLocation, +}; use selectors::parser::SelectorParseErrorKind; use std::fmt::{self, Write}; use style_traits::{CssWriter, ParseError}; @@ -558,6 +560,12 @@ impl<'a, 'b, 'i> AtRuleParser<'i> for FontFaceRuleParser<'a, 'b> { type Error = StyleParseErrorKind<'i>; } +impl<'a, 'b, 'i> QualifiedRuleParser<'i> for FontFaceRuleParser<'a, 'b> { + type Prelude = (); + type QualifiedRule = (); + type Error = StyleParseErrorKind<'i>; +} + fn font_tech_enabled() -> bool { #[cfg(feature = "gecko")] return static_prefs::pref!("layout.css.font-tech.enabled"); diff --git a/components/style/properties/declaration_block.rs b/components/style/properties/declaration_block.rs index d8ccf56b88b..152e111bd86 100644 --- a/components/style/properties/declaration_block.rs +++ b/components/style/properties/declaration_block.rs @@ -18,10 +18,12 @@ use crate::selector_map::PrecomputedHashSet; use crate::selector_parser::SelectorImpl; use crate::shared_lock::Locked; use crate::str::{CssString, CssStringWriter}; -use crate::stylesheets::{CssRuleType, Origin, UrlExtraData, layer_rule::LayerOrder}; +use crate::stylesheets::{layer_rule::LayerOrder, CssRuleType, Origin, UrlExtraData}; use crate::values::computed::Context; -use cssparser::{parse_important, CowRcStr, DeclarationListParser, ParserInput}; -use cssparser::{AtRuleParser, DeclarationParser, Delimiter, ParseErrorKind, Parser}; +use cssparser::{ + parse_important, AtRuleParser, CowRcStr, DeclarationListParser, DeclarationParser, Delimiter, + ParseErrorKind, Parser, ParserInput, QualifiedRuleParser, +}; use itertools::Itertools; use selectors::SelectorList; use smallbitvec::{self, SmallBitVec}; @@ -930,7 +932,13 @@ impl PropertyDeclarationBlock { for declaration in self.normal_declaration_iter() { if let PropertyDeclaration::Custom(ref declaration) = *declaration { - builder.cascade(declaration, CascadePriority::new(CascadeLevel::same_tree_author_normal(), LayerOrder::root())); + builder.cascade( + declaration, + CascadePriority::new( + CascadeLevel::same_tree_author_normal(), + LayerOrder::root(), + ), + ); } } @@ -1094,12 +1102,11 @@ impl PropertyDeclarationBlock { // 3.4.7: // Let value be the result of invoking serialize a CSS value // of current longhands. - let appendable_value = match shorthand - .get_shorthand_appendable_value(¤t_longhands) - { - None => continue, - Some(appendable_value) => appendable_value, - }; + let appendable_value = + match shorthand.get_shorthand_appendable_value(¤t_longhands) { + None => continue, + Some(appendable_value) => appendable_value, + }; // We avoid re-serializing if we're already an // AppendableValue::Css. @@ -1122,7 +1129,9 @@ impl PropertyDeclarationBlock { AppendableValue::Css({ // Safety: serialization only generates valid utf-8. #[cfg(feature = "gecko")] - unsafe { v.as_str_unchecked() } + unsafe { + v.as_str_unchecked() + } #[cfg(feature = "servo")] &v }) @@ -1353,6 +1362,13 @@ impl<'a, 'b, 'i> AtRuleParser<'i> for PropertyDeclarationParser<'a, 'b> { type Error = StyleParseErrorKind<'i>; } +/// Default methods reject all rules. +impl<'a, 'b, 'i> QualifiedRuleParser<'i> for PropertyDeclarationParser<'a, 'b> { + type Prelude = (); + type QualifiedRule = Importance; + type Error = StyleParseErrorKind<'i>; +} + /// Based on NonMozillaVendorIdentifier from Gecko's CSS parser. fn is_non_mozilla_vendor_identifier(name: &str) -> bool { (name.starts_with("-") && !name.starts_with("-moz-")) || name.starts_with("_") diff --git a/components/style/stylesheets/font_feature_values_rule.rs b/components/style/stylesheets/font_feature_values_rule.rs index 33b57e5fcfd..093539162fe 100644 --- a/components/style/stylesheets/font_feature_values_rule.rs +++ b/components/style/stylesheets/font_feature_values_rule.rs @@ -18,9 +18,10 @@ use crate::stylesheets::CssRuleType; use crate::values::computed::font::FamilyName; use crate::values::serialize_atom_identifier; use crate::Atom; -use cssparser::{AtRuleParser, BasicParseErrorKind, CowRcStr}; -use cssparser::{DeclarationListParser, DeclarationParser, Parser}; -use cssparser::{ParserState, QualifiedRuleParser, RuleListParser, SourceLocation, Token}; +use cssparser::{ + AtRuleParser, BasicParseErrorKind, CowRcStr, DeclarationListParser, DeclarationParser, Parser, + ParserState, QualifiedRuleParser, RuleListParser, SourceLocation, Token, +}; use std::fmt::{self, Write}; use style_traits::{CssWriter, ParseError, StyleParseErrorKind, ToCss}; @@ -193,6 +194,12 @@ impl<'a, 'b, 'i, T> AtRuleParser<'i> for FFVDeclarationsParser<'a, 'b, T> { type Error = StyleParseErrorKind<'i>; } +impl<'a, 'b, 'i, T> QualifiedRuleParser<'i> for FFVDeclarationsParser<'a, 'b, T> { + type Prelude = (); + type QualifiedRule = (); + type Error = StyleParseErrorKind<'i>; +} + impl<'a, 'b, 'i, T> DeclarationParser<'i> for FFVDeclarationsParser<'a, 'b, T> where T: Parse, diff --git a/components/style/stylesheets/keyframes_rule.rs b/components/style/stylesheets/keyframes_rule.rs index dd04dbf01a3..d44a7b13f14 100644 --- a/components/style/stylesheets/keyframes_rule.rs +++ b/components/style/stylesheets/keyframes_rule.rs @@ -636,6 +636,12 @@ impl<'a, 'b, 'i> AtRuleParser<'i> for KeyframeDeclarationParser<'a, 'b> { type Error = StyleParseErrorKind<'i>; } +impl<'a, 'b, 'i> QualifiedRuleParser<'i> for KeyframeDeclarationParser<'a, 'b> { + type Prelude = (); + type QualifiedRule = (); + type Error = StyleParseErrorKind<'i>; +} + impl<'a, 'b, 'i> DeclarationParser<'i> for KeyframeDeclarationParser<'a, 'b> { type Declaration = (); type Error = StyleParseErrorKind<'i>; diff --git a/components/style/stylesheets/viewport_rule.rs b/components/style/stylesheets/viewport_rule.rs index 73e16201638..6d61d299911 100644 --- a/components/style/stylesheets/viewport_rule.rs +++ b/components/style/stylesheets/viewport_rule.rs @@ -24,8 +24,10 @@ use crate::values::generics::NonNegative; use crate::values::specified::{self, NoCalcLength}; use crate::values::specified::{NonNegativeLengthPercentageOrAuto, ViewportPercentageLength}; use app_units::Au; -use cssparser::CowRcStr; -use cssparser::{parse_important, AtRuleParser, DeclarationListParser, DeclarationParser, Parser}; +use cssparser::{ + parse_important, AtRuleParser, CowRcStr, DeclarationListParser, DeclarationParser, Parser, + QualifiedRuleParser, +}; use euclid::Size2D; use selectors::parser::SelectorParseErrorKind; use std::borrow::Cow; @@ -237,6 +239,12 @@ impl<'a, 'b, 'i> AtRuleParser<'i> for ViewportRuleParser<'a, 'b> { type Error = StyleParseErrorKind<'i>; } +impl<'a, 'b, 'i> QualifiedRuleParser<'i> for ViewportRuleParser<'a, 'b> { + type Prelude = (); + type QualifiedRule = Vec; + type Error = StyleParseErrorKind<'i>; +} + impl<'a, 'b, 'i> DeclarationParser<'i> for ViewportRuleParser<'a, 'b> { type Declaration = Vec; type Error = StyleParseErrorKind<'i>;