Auto merge of #19955 - emilio:number-pseudos-chrome, r=jwatt

style: Make input[type=number] pseudo-elements accessible to chrome.

Bug: 1433389
Reviewed-by: jwatt
MozReview-Commit-ID: 2ycajPYd3CV

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/19955)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2018-02-05 09:50:35 -05:00 committed by GitHub
commit 3a3a7cdc22
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 509 additions and 840 deletions

View file

@ -614,89 +614,89 @@ impl PseudoElement {
PseudoElement::MozColorSwatch =>
structs::SERVO_CSS_PSEUDO_ELEMENT_FLAGS_mozColorSwatch,
PseudoElement::MozText =>
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
PseudoElement::OofPlaceholder =>
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
PseudoElement::FirstLetterContinuation =>
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
PseudoElement::MozBlockInsideInlineWrapper =>
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
PseudoElement::MozMathMLAnonymousBlock =>
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
PseudoElement::MozXULAnonymousBlock =>
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
PseudoElement::HorizontalFramesetBorder =>
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
PseudoElement::VerticalFramesetBorder =>
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
PseudoElement::MozLineFrame =>
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
PseudoElement::ButtonContent =>
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
PseudoElement::CellContent =>
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
PseudoElement::DropDownList =>
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
PseudoElement::FieldsetContent =>
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
PseudoElement::FramesetBlank =>
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
PseudoElement::MozDisplayComboboxControlFrame =>
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
PseudoElement::HtmlCanvasContent =>
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
PseudoElement::InlineTable =>
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
PseudoElement::Table =>
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
PseudoElement::TableCell =>
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
PseudoElement::TableColGroup =>
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
PseudoElement::TableCol =>
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
PseudoElement::TableWrapper =>
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
PseudoElement::TableRowGroup =>
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
PseudoElement::TableRow =>
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
PseudoElement::Canvas =>
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
PseudoElement::PageBreak =>
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
PseudoElement::Page =>
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
PseudoElement::PageContent =>
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
PseudoElement::PageSequence =>
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
PseudoElement::ScrolledContent =>
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
PseudoElement::ScrolledCanvas =>
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
PseudoElement::ScrolledPageSequence =>
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
PseudoElement::ColumnContent =>
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
PseudoElement::Viewport =>
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
PseudoElement::ViewportScroll =>
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
PseudoElement::AnonymousFlexItem =>
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
PseudoElement::AnonymousGridItem =>
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
PseudoElement::Ruby =>
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
PseudoElement::RubyBase =>
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
PseudoElement::RubyBaseContainer =>
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
PseudoElement::RubyText =>
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
PseudoElement::RubyTextContainer =>
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
PseudoElement::MozTreeColumn(..) =>
0,
PseudoElement::MozTreeRow(..) =>
@ -720,13 +720,13 @@ impl PseudoElement {
PseudoElement::MozTreeDropFeedback(..) =>
0,
PseudoElement::MozSVGMarkerAnonChild =>
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
PseudoElement::MozSVGOuterSVGAnonChild =>
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
PseudoElement::MozSVGForeignContent =>
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
PseudoElement::MozSVGText =>
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
}
}
@ -1360,365 +1360,230 @@ impl PseudoElement {
///
/// Returns `None` if the pseudo-element is not recognised.
#[inline]
pub fn from_slice(s: &str, in_ua_stylesheet: bool) -> Option<Self> {
#[allow(unused_imports)] use std::ascii::AsciiExt;
pub fn from_slice(name: &str) -> Option<Self> {
// We don't need to support tree pseudos because functional
// pseudo-elements needs arguments, and thus should be created
// via other methods.
if in_ua_stylesheet || PseudoElement::After.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("after") {
return Some(PseudoElement::After);
match_ignore_ascii_case! { name,
"after" => {
return Some(PseudoElement::After)
}
"before" => {
return Some(PseudoElement::Before)
}
if in_ua_stylesheet || PseudoElement::Before.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("before") {
return Some(PseudoElement::Before);
"backdrop" => {
return Some(PseudoElement::Backdrop)
}
"cue" => {
return Some(PseudoElement::Cue)
}
if in_ua_stylesheet || PseudoElement::Backdrop.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("backdrop") {
return Some(PseudoElement::Backdrop);
"first-letter" => {
return Some(PseudoElement::FirstLetter)
}
"first-line" => {
return Some(PseudoElement::FirstLine)
}
if in_ua_stylesheet || PseudoElement::Cue.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("cue") {
return Some(PseudoElement::Cue);
"-moz-selection" => {
return Some(PseudoElement::MozSelection)
}
"-moz-focus-inner" => {
return Some(PseudoElement::MozFocusInner)
}
if in_ua_stylesheet || PseudoElement::FirstLetter.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("first-letter") {
return Some(PseudoElement::FirstLetter);
"-moz-focus-outer" => {
return Some(PseudoElement::MozFocusOuter)
}
"-moz-list-bullet" => {
return Some(PseudoElement::MozListBullet)
}
if in_ua_stylesheet || PseudoElement::FirstLine.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("first-line") {
return Some(PseudoElement::FirstLine);
"-moz-list-number" => {
return Some(PseudoElement::MozListNumber)
}
"-moz-math-anonymous" => {
return Some(PseudoElement::MozMathAnonymous)
}
if in_ua_stylesheet || PseudoElement::MozSelection.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-selection") {
return Some(PseudoElement::MozSelection);
"-moz-number-wrapper" => {
return Some(PseudoElement::MozNumberWrapper)
}
"-moz-number-text" => {
return Some(PseudoElement::MozNumberText)
}
if in_ua_stylesheet || PseudoElement::MozFocusInner.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-focus-inner") {
return Some(PseudoElement::MozFocusInner);
"-moz-number-spin-box" => {
return Some(PseudoElement::MozNumberSpinBox)
}
"-moz-number-spin-up" => {
return Some(PseudoElement::MozNumberSpinUp)
}
if in_ua_stylesheet || PseudoElement::MozFocusOuter.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-focus-outer") {
return Some(PseudoElement::MozFocusOuter);
"-moz-number-spin-down" => {
return Some(PseudoElement::MozNumberSpinDown)
}
"-moz-progress-bar" => {
return Some(PseudoElement::MozProgressBar)
}
if in_ua_stylesheet || PseudoElement::MozListBullet.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-list-bullet") {
return Some(PseudoElement::MozListBullet);
"-moz-range-track" => {
return Some(PseudoElement::MozRangeTrack)
}
"-moz-range-progress" => {
return Some(PseudoElement::MozRangeProgress)
}
if in_ua_stylesheet || PseudoElement::MozListNumber.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-list-number") {
return Some(PseudoElement::MozListNumber);
"-moz-range-thumb" => {
return Some(PseudoElement::MozRangeThumb)
}
"-moz-meter-bar" => {
return Some(PseudoElement::MozMeterBar)
}
if in_ua_stylesheet || PseudoElement::MozMathAnonymous.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-math-anonymous") {
return Some(PseudoElement::MozMathAnonymous);
"-moz-placeholder" => {
return Some(PseudoElement::MozPlaceholder)
}
"placeholder" => {
return Some(PseudoElement::Placeholder)
}
if in_ua_stylesheet || PseudoElement::MozNumberWrapper.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-number-wrapper") {
return Some(PseudoElement::MozNumberWrapper);
"-moz-color-swatch" => {
return Some(PseudoElement::MozColorSwatch)
}
"-moz-text" => {
return Some(PseudoElement::MozText)
}
if in_ua_stylesheet || PseudoElement::MozNumberText.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-number-text") {
return Some(PseudoElement::MozNumberText);
"-moz-oof-placeholder" => {
return Some(PseudoElement::OofPlaceholder)
}
"-moz-first-letter-continuation" => {
return Some(PseudoElement::FirstLetterContinuation)
}
if in_ua_stylesheet || PseudoElement::MozNumberSpinBox.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-number-spin-box") {
return Some(PseudoElement::MozNumberSpinBox);
"-moz-block-inside-inline-wrapper" => {
return Some(PseudoElement::MozBlockInsideInlineWrapper)
}
"-moz-mathml-anonymous-block" => {
return Some(PseudoElement::MozMathMLAnonymousBlock)
}
if in_ua_stylesheet || PseudoElement::MozNumberSpinUp.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-number-spin-up") {
return Some(PseudoElement::MozNumberSpinUp);
"-moz-xul-anonymous-block" => {
return Some(PseudoElement::MozXULAnonymousBlock)
}
"-moz-hframeset-border" => {
return Some(PseudoElement::HorizontalFramesetBorder)
}
if in_ua_stylesheet || PseudoElement::MozNumberSpinDown.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-number-spin-down") {
return Some(PseudoElement::MozNumberSpinDown);
"-moz-vframeset-border" => {
return Some(PseudoElement::VerticalFramesetBorder)
}
"-moz-line-frame" => {
return Some(PseudoElement::MozLineFrame)
}
if in_ua_stylesheet || PseudoElement::MozProgressBar.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-progress-bar") {
return Some(PseudoElement::MozProgressBar);
"-moz-button-content" => {
return Some(PseudoElement::ButtonContent)
}
"-moz-cell-content" => {
return Some(PseudoElement::CellContent)
}
if in_ua_stylesheet || PseudoElement::MozRangeTrack.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-range-track") {
return Some(PseudoElement::MozRangeTrack);
"-moz-dropdown-list" => {
return Some(PseudoElement::DropDownList)
}
"-moz-fieldset-content" => {
return Some(PseudoElement::FieldsetContent)
}
if in_ua_stylesheet || PseudoElement::MozRangeProgress.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-range-progress") {
return Some(PseudoElement::MozRangeProgress);
"-moz-frameset-blank" => {
return Some(PseudoElement::FramesetBlank)
}
"-moz-display-comboboxcontrol-frame" => {
return Some(PseudoElement::MozDisplayComboboxControlFrame)
}
if in_ua_stylesheet || PseudoElement::MozRangeThumb.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-range-thumb") {
return Some(PseudoElement::MozRangeThumb);
"-moz-html-canvas-content" => {
return Some(PseudoElement::HtmlCanvasContent)
}
"-moz-inline-table" => {
return Some(PseudoElement::InlineTable)
}
if in_ua_stylesheet || PseudoElement::MozMeterBar.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-meter-bar") {
return Some(PseudoElement::MozMeterBar);
"-moz-table" => {
return Some(PseudoElement::Table)
}
"-moz-table-cell" => {
return Some(PseudoElement::TableCell)
}
if in_ua_stylesheet || PseudoElement::MozPlaceholder.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-placeholder") {
return Some(PseudoElement::MozPlaceholder);
"-moz-table-column-group" => {
return Some(PseudoElement::TableColGroup)
}
"-moz-table-column" => {
return Some(PseudoElement::TableCol)
}
if in_ua_stylesheet || PseudoElement::Placeholder.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("placeholder") {
return Some(PseudoElement::Placeholder);
"-moz-table-wrapper" => {
return Some(PseudoElement::TableWrapper)
}
"-moz-table-row-group" => {
return Some(PseudoElement::TableRowGroup)
}
if in_ua_stylesheet || PseudoElement::MozColorSwatch.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-color-swatch") {
return Some(PseudoElement::MozColorSwatch);
"-moz-table-row" => {
return Some(PseudoElement::TableRow)
}
"-moz-canvas" => {
return Some(PseudoElement::Canvas)
}
if in_ua_stylesheet || PseudoElement::MozText.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-text") {
return Some(PseudoElement::MozText);
"-moz-pagebreak" => {
return Some(PseudoElement::PageBreak)
}
"-moz-page" => {
return Some(PseudoElement::Page)
}
if in_ua_stylesheet || PseudoElement::OofPlaceholder.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-oof-placeholder") {
return Some(PseudoElement::OofPlaceholder);
"-moz-pagecontent" => {
return Some(PseudoElement::PageContent)
}
"-moz-page-sequence" => {
return Some(PseudoElement::PageSequence)
}
if in_ua_stylesheet || PseudoElement::FirstLetterContinuation.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-first-letter-continuation") {
return Some(PseudoElement::FirstLetterContinuation);
"-moz-scrolled-content" => {
return Some(PseudoElement::ScrolledContent)
}
"-moz-scrolled-canvas" => {
return Some(PseudoElement::ScrolledCanvas)
}
if in_ua_stylesheet || PseudoElement::MozBlockInsideInlineWrapper.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-block-inside-inline-wrapper") {
return Some(PseudoElement::MozBlockInsideInlineWrapper);
"-moz-scrolled-page-sequence" => {
return Some(PseudoElement::ScrolledPageSequence)
}
"-moz-column-content" => {
return Some(PseudoElement::ColumnContent)
}
if in_ua_stylesheet || PseudoElement::MozMathMLAnonymousBlock.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-mathml-anonymous-block") {
return Some(PseudoElement::MozMathMLAnonymousBlock);
"-moz-viewport" => {
return Some(PseudoElement::Viewport)
}
"-moz-viewport-scroll" => {
return Some(PseudoElement::ViewportScroll)
}
if in_ua_stylesheet || PseudoElement::MozXULAnonymousBlock.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-xul-anonymous-block") {
return Some(PseudoElement::MozXULAnonymousBlock);
"-moz-anonymous-flex-item" => {
return Some(PseudoElement::AnonymousFlexItem)
}
"-moz-anonymous-grid-item" => {
return Some(PseudoElement::AnonymousGridItem)
}
if in_ua_stylesheet || PseudoElement::HorizontalFramesetBorder.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-hframeset-border") {
return Some(PseudoElement::HorizontalFramesetBorder);
"-moz-ruby" => {
return Some(PseudoElement::Ruby)
}
"-moz-ruby-base" => {
return Some(PseudoElement::RubyBase)
}
if in_ua_stylesheet || PseudoElement::VerticalFramesetBorder.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-vframeset-border") {
return Some(PseudoElement::VerticalFramesetBorder);
"-moz-ruby-base-container" => {
return Some(PseudoElement::RubyBaseContainer)
}
"-moz-ruby-text" => {
return Some(PseudoElement::RubyText)
}
if in_ua_stylesheet || PseudoElement::MozLineFrame.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-line-frame") {
return Some(PseudoElement::MozLineFrame);
"-moz-ruby-text-container" => {
return Some(PseudoElement::RubyTextContainer)
}
"-moz-svg-marker-anon-child" => {
return Some(PseudoElement::MozSVGMarkerAnonChild)
}
if in_ua_stylesheet || PseudoElement::ButtonContent.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-button-content") {
return Some(PseudoElement::ButtonContent);
"-moz-svg-outer-svg-anon-child" => {
return Some(PseudoElement::MozSVGOuterSVGAnonChild)
}
"-moz-svg-foreign-content" => {
return Some(PseudoElement::MozSVGForeignContent)
}
if in_ua_stylesheet || PseudoElement::CellContent.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-cell-content") {
return Some(PseudoElement::CellContent);
"-moz-svg-text" => {
return Some(PseudoElement::MozSVGText)
}
_ => {
// FIXME: -moz-tree check should probably be
// ascii-case-insensitive.
if name.starts_with("-moz-tree-") {
return PseudoElement::tree_pseudo_element(name, Box::new([]))
}
if in_ua_stylesheet || PseudoElement::DropDownList.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-dropdown-list") {
return Some(PseudoElement::DropDownList);
}
}
if in_ua_stylesheet || PseudoElement::FieldsetContent.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-fieldset-content") {
return Some(PseudoElement::FieldsetContent);
}
}
if in_ua_stylesheet || PseudoElement::FramesetBlank.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-frameset-blank") {
return Some(PseudoElement::FramesetBlank);
}
}
if in_ua_stylesheet || PseudoElement::MozDisplayComboboxControlFrame.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-display-comboboxcontrol-frame") {
return Some(PseudoElement::MozDisplayComboboxControlFrame);
}
}
if in_ua_stylesheet || PseudoElement::HtmlCanvasContent.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-html-canvas-content") {
return Some(PseudoElement::HtmlCanvasContent);
}
}
if in_ua_stylesheet || PseudoElement::InlineTable.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-inline-table") {
return Some(PseudoElement::InlineTable);
}
}
if in_ua_stylesheet || PseudoElement::Table.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-table") {
return Some(PseudoElement::Table);
}
}
if in_ua_stylesheet || PseudoElement::TableCell.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-table-cell") {
return Some(PseudoElement::TableCell);
}
}
if in_ua_stylesheet || PseudoElement::TableColGroup.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-table-column-group") {
return Some(PseudoElement::TableColGroup);
}
}
if in_ua_stylesheet || PseudoElement::TableCol.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-table-column") {
return Some(PseudoElement::TableCol);
}
}
if in_ua_stylesheet || PseudoElement::TableWrapper.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-table-wrapper") {
return Some(PseudoElement::TableWrapper);
}
}
if in_ua_stylesheet || PseudoElement::TableRowGroup.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-table-row-group") {
return Some(PseudoElement::TableRowGroup);
}
}
if in_ua_stylesheet || PseudoElement::TableRow.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-table-row") {
return Some(PseudoElement::TableRow);
}
}
if in_ua_stylesheet || PseudoElement::Canvas.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-canvas") {
return Some(PseudoElement::Canvas);
}
}
if in_ua_stylesheet || PseudoElement::PageBreak.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-pagebreak") {
return Some(PseudoElement::PageBreak);
}
}
if in_ua_stylesheet || PseudoElement::Page.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-page") {
return Some(PseudoElement::Page);
}
}
if in_ua_stylesheet || PseudoElement::PageContent.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-pagecontent") {
return Some(PseudoElement::PageContent);
}
}
if in_ua_stylesheet || PseudoElement::PageSequence.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-page-sequence") {
return Some(PseudoElement::PageSequence);
}
}
if in_ua_stylesheet || PseudoElement::ScrolledContent.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-scrolled-content") {
return Some(PseudoElement::ScrolledContent);
}
}
if in_ua_stylesheet || PseudoElement::ScrolledCanvas.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-scrolled-canvas") {
return Some(PseudoElement::ScrolledCanvas);
}
}
if in_ua_stylesheet || PseudoElement::ScrolledPageSequence.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-scrolled-page-sequence") {
return Some(PseudoElement::ScrolledPageSequence);
}
}
if in_ua_stylesheet || PseudoElement::ColumnContent.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-column-content") {
return Some(PseudoElement::ColumnContent);
}
}
if in_ua_stylesheet || PseudoElement::Viewport.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-viewport") {
return Some(PseudoElement::Viewport);
}
}
if in_ua_stylesheet || PseudoElement::ViewportScroll.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-viewport-scroll") {
return Some(PseudoElement::ViewportScroll);
}
}
if in_ua_stylesheet || PseudoElement::AnonymousFlexItem.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-anonymous-flex-item") {
return Some(PseudoElement::AnonymousFlexItem);
}
}
if in_ua_stylesheet || PseudoElement::AnonymousGridItem.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-anonymous-grid-item") {
return Some(PseudoElement::AnonymousGridItem);
}
}
if in_ua_stylesheet || PseudoElement::Ruby.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-ruby") {
return Some(PseudoElement::Ruby);
}
}
if in_ua_stylesheet || PseudoElement::RubyBase.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-ruby-base") {
return Some(PseudoElement::RubyBase);
}
}
if in_ua_stylesheet || PseudoElement::RubyBaseContainer.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-ruby-base-container") {
return Some(PseudoElement::RubyBaseContainer);
}
}
if in_ua_stylesheet || PseudoElement::RubyText.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-ruby-text") {
return Some(PseudoElement::RubyText);
}
}
if in_ua_stylesheet || PseudoElement::RubyTextContainer.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-ruby-text-container") {
return Some(PseudoElement::RubyTextContainer);
}
}
if in_ua_stylesheet || PseudoElement::MozSVGMarkerAnonChild.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-svg-marker-anon-child") {
return Some(PseudoElement::MozSVGMarkerAnonChild);
}
}
if in_ua_stylesheet || PseudoElement::MozSVGOuterSVGAnonChild.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-svg-outer-svg-anon-child") {
return Some(PseudoElement::MozSVGOuterSVGAnonChild);
}
}
if in_ua_stylesheet || PseudoElement::MozSVGForeignContent.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-svg-foreign-content") {
return Some(PseudoElement::MozSVGForeignContent);
}
}
if in_ua_stylesheet || PseudoElement::MozSVGText.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("-moz-svg-text") {
return Some(PseudoElement::MozSVGText);
}
}

File diff suppressed because it is too large Load diff

View file

@ -124,16 +124,26 @@ impl PseudoElement {
!self.is_eager() && !self.is_precomputed()
}
/// Whether this pseudo-element is web-exposed.
pub fn exposed_in_non_ua_sheets(&self) -> bool {
(self.flags() & structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY) == 0
}
/// Whether this pseudo-element supports user action selectors.
pub fn supports_user_action_state(&self) -> bool {
(self.flags() & structs::CSS_PSEUDO_ELEMENT_SUPPORTS_USER_ACTION_STATE) != 0
}
/// Whether this pseudo-element is enabled for all content.
pub fn enabled_in_content(&self) -> bool {
(self.flags() & structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS_AND_CHROME) == 0
}
/// Whether this pseudo is enabled explicitly in UA sheets.
pub fn enabled_in_ua_sheets(&self) -> bool {
(self.flags() & structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS) != 0
}
/// Whether this pseudo is enabled explicitly in chrome sheets.
pub fn enabled_in_chrome(&self) -> bool {
(self.flags() & structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_CHROME) != 0
}
/// Whether this pseudo-element skips flex/grid container display-based
/// fixup.
#[inline]

View file

@ -114,7 +114,7 @@ impl PseudoElement {
% if pseudo.is_tree_pseudo_element():
0,
% elif pseudo.is_anon_box():
structs::CSS_PSEUDO_ELEMENT_UA_SHEET_ONLY,
structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
% else:
structs::SERVO_CSS_PSEUDO_ELEMENT_FLAGS_${pseudo.original_ident},
% endif
@ -224,19 +224,24 @@ impl PseudoElement {
///
/// Returns `None` if the pseudo-element is not recognised.
#[inline]
pub fn from_slice(s: &str, in_ua_stylesheet: bool) -> Option<Self> {
#[allow(unused_imports)] use std::ascii::AsciiExt;
pub fn from_slice(name: &str) -> Option<Self> {
// We don't need to support tree pseudos because functional
// pseudo-elements needs arguments, and thus should be created
// via other methods.
match_ignore_ascii_case! { name,
% for pseudo in SIMPLE_PSEUDOS:
if in_ua_stylesheet || ${pseudo_element_variant(pseudo)}.exposed_in_non_ua_sheets() {
if s.eq_ignore_ascii_case("${pseudo.value[1:]}") {
return Some(${pseudo_element_variant(pseudo)});
}
"${pseudo.value[1:]}" => {
return Some(${pseudo_element_variant(pseudo)})
}
% endfor
_ => {
// FIXME: -moz-tree check should probably be
// ascii-case-insensitive.
if name.starts_with("-moz-tree-") {
return PseudoElement::tree_pseudo_element(name, Box::new([]))
}
}
}
None
}

View file

@ -159,10 +159,10 @@ impl NonTSPseudoClass {
/// Returns whether the pseudo-class is enabled in content sheets.
fn is_enabled_in_content(&self) -> bool {
use gecko_bindings::structs::mozilla;
match self {
match *self {
// For pseudo-classes with pref, the availability in content
// depends on the pref.
&NonTSPseudoClass::Fullscreen =>
NonTSPseudoClass::Fullscreen =>
unsafe { mozilla::StylePrefs_sUnprefixedFullscreenApiEnabled },
// Otherwise, a pseudo-class is enabled in content when it
// doesn't have any enabled flag.
@ -322,6 +322,25 @@ impl<'a> SelectorParser<'a> {
return false;
}
fn is_pseudo_element_enabled(
&self,
pseudo_element: &PseudoElement,
) -> bool {
if pseudo_element.enabled_in_content() {
return true;
}
if self.in_user_agent_stylesheet() && pseudo_element.enabled_in_ua_sheets() {
return true;
}
if self.chrome_rules_enabled() && pseudo_element.enabled_in_chrome() {
return true;
}
return false;
}
}
impl<'a, 'i> ::selectors::Parser<'i> for SelectorParser<'a> {
@ -418,17 +437,15 @@ impl<'a, 'i> ::selectors::Parser<'i> for SelectorParser<'a> {
location: SourceLocation,
name: CowRcStr<'i>,
) -> Result<PseudoElement, ParseError<'i>> {
PseudoElement::from_slice(&name, self.in_user_agent_stylesheet())
.or_else(|| {
// FIXME: -moz-tree check should probably be
// ascii-case-insensitive.
if name.starts_with("-moz-tree-") {
PseudoElement::tree_pseudo_element(&name, Box::new([]))
} else {
None
if let Some(pseudo) = PseudoElement::from_slice(&name) {
if self.is_pseudo_element_enabled(&pseudo) {
return Ok(pseudo);
}
})
.ok_or(location.new_custom_error(SelectorParseErrorKind::UnsupportedPseudoClassOrElement(name.clone())))
}
Err(location.new_custom_error(
SelectorParseErrorKind::UnsupportedPseudoClassOrElement(name)
))
}
fn parse_functional_pseudo_element<'t>(
@ -456,7 +473,9 @@ impl<'a, 'i> ::selectors::Parser<'i> for SelectorParser<'a> {
return Ok(pseudo);
}
}
Err(parser.new_custom_error(SelectorParseErrorKind::UnsupportedPseudoClassOrElement(name.clone())))
Err(parser.new_custom_error(
SelectorParseErrorKind::UnsupportedPseudoClassOrElement(name)
))
}
fn default_namespace(&self) -> Option<Namespace> {