diff --git a/components/style/values/generics/counters.rs b/components/style/values/generics/counters.rs index 0396b240112..c83a336f948 100644 --- a/components/style/values/generics/counters.rs +++ b/components/style/values/generics/counters.rs @@ -264,6 +264,11 @@ pub enum GenericContentItem { /// `-moz-alt-content`. #[cfg(feature = "gecko")] MozAltContent, + /// `-moz-label-content`. + /// This is needed to make `accesskey` work for XUL labels. It's basically + /// attr(value) otherwise. + #[cfg(feature = "gecko")] + MozLabelContent, /// `attr([namespace? `|`]? ident)` Attr(Attr), /// image-set(url) | url(url) diff --git a/components/style/values/specified/counters.rs b/components/style/values/specified/counters.rs index dbd4e8b8dd7..a958a5bcc6c 100644 --- a/components/style/values/specified/counters.rs +++ b/components/style/values/specified/counters.rs @@ -198,7 +198,7 @@ impl Parse for Content { } let mut content = vec![]; - let mut has_alt_content = false; + let mut has_moz_keyword = false; loop { { if let Ok(image) = input.try_parse(|i| Image::parse_only_url(context, i)) { @@ -249,9 +249,13 @@ impl Parse for Content { "no-close-quote" => generics::ContentItem::NoCloseQuote, #[cfg(feature = "gecko")] "-moz-alt-content" => { - has_alt_content = true; + has_moz_keyword = true; generics::ContentItem::MozAltContent }, + "-moz-label-content" if context.chrome_rules_enabled() => { + has_moz_keyword = true; + generics::ContentItem::MozLabelContent + }, _ =>{ let ident = ident.clone(); return Err(input.new_custom_error( @@ -267,8 +271,9 @@ impl Parse for Content { }, } } - // We don't allow to parse `-moz-alt-content in multiple positions. - if content.is_empty() || (has_alt_content && content.len() != 1) { + // We don't allow to parse `-moz-alt/label-content` in multiple + // positions. + if content.is_empty() || (has_moz_keyword && content.len() != 1) { return Err(input.new_custom_error(StyleParseErrorKind::UnspecifiedError)); } Ok(generics::Content::Items(content.into()))