aboutsummaryrefslogtreecommitdiffstats
path: root/components/style/parser.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/style/parser.rs')
-rw-r--r--components/style/parser.rs38
1 files changed, 36 insertions, 2 deletions
diff --git a/components/style/parser.rs b/components/style/parser.rs
index b044367e8dd..eadb778db55 100644
--- a/components/style/parser.rs
+++ b/components/style/parser.rs
@@ -5,20 +5,47 @@
use cssparser::{Parser, SourcePosition};
use error_reporting::ParseErrorReporter;
+#[cfg(feature = "gecko")]
+use gecko_bindings::ptr::{GeckoArcPrincipal, GeckoArcURI};
use selectors::parser::ParserContext as SelectorParserContext;
use stylesheets::Origin;
use url::Url;
+#[cfg(not(feature = "gecko"))]
+pub struct ParserContextExtraData;
+
+#[cfg(feature = "gecko")]
+pub struct ParserContextExtraData {
+ pub base: Option<GeckoArcURI>,
+ pub referrer: Option<GeckoArcURI>,
+ pub principal: Option<GeckoArcPrincipal>,
+}
+
+impl ParserContextExtraData {
+ #[cfg(not(feature = "gecko"))]
+ pub fn default() -> ParserContextExtraData {
+ ParserContextExtraData
+ }
+
+ #[cfg(feature = "gecko")]
+ pub fn default() -> ParserContextExtraData {
+ ParserContextExtraData { base: None, referrer: None, principal: None }
+ }
+}
+
pub struct ParserContext<'a> {
pub stylesheet_origin: Origin,
pub base_url: &'a Url,
pub selector_context: SelectorParserContext,
pub error_reporter: Box<ParseErrorReporter + Send>,
+ pub extra_data: ParserContextExtraData,
}
impl<'a> ParserContext<'a> {
- pub fn new(stylesheet_origin: Origin, base_url: &'a Url, error_reporter: Box<ParseErrorReporter + Send>)
- -> ParserContext<'a> {
+ pub fn new_with_extra_data(stylesheet_origin: Origin, base_url: &'a Url,
+ error_reporter: Box<ParseErrorReporter + Send>,
+ extra_data: ParserContextExtraData)
+ -> ParserContext<'a> {
let mut selector_context = SelectorParserContext::new();
selector_context.in_user_agent_stylesheet = stylesheet_origin == Origin::UserAgent;
ParserContext {
@@ -26,8 +53,15 @@ impl<'a> ParserContext<'a> {
base_url: base_url,
selector_context: selector_context,
error_reporter: error_reporter,
+ extra_data: extra_data,
}
}
+
+ pub fn new(stylesheet_origin: Origin, base_url: &'a Url, error_reporter: Box<ParseErrorReporter + Send>)
+ -> ParserContext<'a> {
+ let extra_data = ParserContextExtraData::default();
+ ParserContext::new_with_extra_data(stylesheet_origin, base_url, error_reporter, extra_data)
+ }
}