diff options
-rw-r--r-- | components/style/gecko/generated/bindings.rs | 3 | ||||
-rw-r--r-- | ports/geckolib/error_reporter.rs | 43 |
2 files changed, 30 insertions, 16 deletions
diff --git a/components/style/gecko/generated/bindings.rs b/components/style/gecko/generated/bindings.rs index fb3d1a35c89..cf5d36969dd 100644 --- a/components/style/gecko/generated/bindings.rs +++ b/components/style/gecko/generated/bindings.rs @@ -2844,5 +2844,6 @@ extern "C" { source: *const ::std::os::raw::c_char, sourceLen: u32, lineNumber: u32, - colNumber: u32, aURI: *mut nsIURI); + colNumber: u32, aURI: *mut nsIURI, + followup: *const ::std::os::raw::c_char); } diff --git a/ports/geckolib/error_reporter.rs b/ports/geckolib/error_reporter.rs index e829737fa73..7c6690716f0 100644 --- a/ports/geckolib/error_reporter.rs +++ b/ports/geckolib/error_reporter.rs @@ -9,6 +9,7 @@ use cssparser::{Parser, SourcePosition, ParseError as CssParseError, Token, BasicParseError}; use cssparser::CowRcStr; use selectors::parser::SelectorParseError; +use std::ptr; use style::error_reporting::{ParseErrorReporter, ContextualParseError}; use style::gecko_bindings::bindings::{Gecko_CreateCSSErrorReporter, Gecko_DestroyCSSErrorReporter}; use style::gecko_bindings::bindings::Gecko_ReportUnexpectedCSSError; @@ -185,10 +186,16 @@ fn token_to_str<'a>(t: Token<'a>) -> String { } } +enum Action { + Nothing, + Skip, + Drop, +} + trait ErrorHelpers<'a> { fn error_data(self) -> (CowRcStr<'a>, ParseError<'a>); fn error_param(self) -> ErrorString<'a>; - fn to_gecko_message(&self) -> &'static [u8]; + fn to_gecko_message(&self) -> (&'static [u8], Action); } impl<'a> ErrorHelpers<'a> for ContextualParseError<'a> { @@ -245,37 +252,37 @@ impl<'a> ErrorHelpers<'a> for ContextualParseError<'a> { } } - fn to_gecko_message(&self) -> &'static [u8] { + fn to_gecko_message(&self) -> (&'static [u8], Action) { match *self { ContextualParseError::UnsupportedPropertyDeclaration( _, CssParseError::Basic(BasicParseError::UnexpectedToken(_))) | ContextualParseError::UnsupportedPropertyDeclaration( _, CssParseError::Basic(BasicParseError::AtRuleInvalid(_))) => - b"PEParseDeclarationDeclExpected\0", + (b"PEParseDeclarationDeclExpected\0", Action::Skip), ContextualParseError::UnsupportedPropertyDeclaration( _, CssParseError::Custom(SelectorParseError::Custom( StyleParseError::PropertyDeclaration( PropertyDeclarationParseError::InvalidValue(_))))) => - b"PEValueParsingError\0", + (b"PEValueParsingError\0", Action::Drop), ContextualParseError::UnsupportedPropertyDeclaration(..) => - b"PEUnknownProperty\0", + (b"PEUnknownProperty\0", Action::Drop), ContextualParseError::UnsupportedFontFaceDescriptor(..) => - b"PEUnknwnFontDesc\0", + (b"PEUnknwnFontDesc\0", Action::Skip), ContextualParseError::InvalidKeyframeRule(..) => - b"PEKeyframeBadName\0", + (b"PEKeyframeBadName\0", Action::Nothing), ContextualParseError::UnsupportedKeyframePropertyDeclaration(..) => - b"PEBadSelectorKeyframeRuleIgnored\0", + (b"PEBadSelectorKeyframeRuleIgnored\0", Action::Nothing), ContextualParseError::InvalidRule( _, CssParseError::Custom(SelectorParseError::ExpectedNamespace(_))) => - b"PEUnknownNamespacePrefix\0", + (b"PEUnknownNamespacePrefix\0", Action::Nothing), ContextualParseError::InvalidRule( _, CssParseError::Custom(SelectorParseError::Custom( StyleParseError::UnexpectedTokenWithinNamespace(_)))) => - b"PEAtNSUnexpected\0", + (b"PEAtNSUnexpected\0", Action::Nothing), ContextualParseError::InvalidRule(..) => - b"PEBadSelectorRSIgnored\0", + (b"PEBadSelectorRSIgnored\0", Action::Nothing), ContextualParseError::UnsupportedRule(..) => - b"PEDeclDropped\0", + (b"PEDeclDropped\0", Action::Nothing), ContextualParseError::UnsupportedViewportDescriptorDeclaration(..) | ContextualParseError::UnsupportedCounterStyleDescriptorDeclaration(..) | ContextualParseError::InvalidCounterStyleWithoutSymbols(..) | @@ -283,7 +290,7 @@ impl<'a> ErrorHelpers<'a> for ContextualParseError<'a> { ContextualParseError::InvalidCounterStyleWithoutAdditiveSymbols | ContextualParseError::InvalidCounterStyleExtendsWithSymbols | ContextualParseError::InvalidCounterStyleExtendsWithAdditiveSymbols => - b"PEUnknownAtRule\0", + (b"PEUnknownAtRule\0", Action::Skip), } } } @@ -298,7 +305,12 @@ impl ParseErrorReporter for ErrorReporter { let location = input.source_location(position); let line_number = location.line + line_number_offset as u32; - let name = error.to_gecko_message(); + let (name, action) = error.to_gecko_message(); + let followup = match action { + Action::Nothing => ptr::null(), + Action::Skip => b"PEDeclSkipped\0".as_ptr(), + Action::Drop => b"PEDeclDropped\0".as_ptr(), + }; let param = error.error_param().into_str(); // The CSS source text is unused and will be removed in bug 1381188. let source = ""; @@ -311,7 +323,8 @@ impl ParseErrorReporter for ErrorReporter { source.len() as u32, line_number as u32, location.column as u32, - url.mBaseURI.raw::<nsIURI>()); + url.mBaseURI.raw::<nsIURI>(), + followup as *const _); } } } |