diff options
-rw-r--r-- | components/style/stylesheets.rs | 12 | ||||
-rw-r--r-- | ports/geckolib/glue.rs | 15 |
2 files changed, 22 insertions, 5 deletions
diff --git a/components/style/stylesheets.rs b/components/style/stylesheets.rs index e3dcfaa6b4e..8c01c2adf22 100644 --- a/components/style/stylesheets.rs +++ b/components/style/stylesheets.rs @@ -633,6 +633,9 @@ pub struct ImportRule { /// It contains an empty list of rules and namespace set that is updated /// when it loads. pub stylesheet: Arc<Stylesheet>, + + /// The line and column of the rule's source code. + pub source_location: SourceLocation, } impl Clone for ImportRule { @@ -641,6 +644,7 @@ impl Clone for ImportRule { ImportRule { url: self.url.clone(), stylesheet: Arc::new(stylesheet.clone()), + source_location: self.source_location.clone(), } } } @@ -1530,6 +1534,8 @@ impl<'a> AtRuleParser for TopLevelRuleParser<'a> { fn parse_prelude(&mut self, name: &str, input: &mut Parser) -> Result<AtRuleType<AtRulePrelude, CssRule>, ()> { + let location = get_location_with_offset(input.current_source_location(), + self.context.line_number_offset); match_ignore_ascii_case! { name, "import" => { if self.state.get() <= State::Imports { @@ -1561,7 +1567,8 @@ impl<'a> AtRuleParser for TopLevelRuleParser<'a> { dirty_on_viewport_size_change: AtomicBool::new(false), disabled: AtomicBool::new(false), quirks_mode: self.context.quirks_mode, - }) + }), + source_location: location, } }, &mut |import_rule| { Arc::new(self.shared_lock.wrap(import_rule)) @@ -1576,9 +1583,6 @@ impl<'a> AtRuleParser for TopLevelRuleParser<'a> { if self.state.get() <= State::Namespaces { self.state.set(State::Namespaces); - let location = get_location_with_offset(input.current_source_location(), - self.context.line_number_offset); - let prefix_result = input.try(|input| input.expect_ident()); let url = Namespace::from(try!(input.expect_url_or_string())); diff --git a/ports/geckolib/glue.rs b/ports/geckolib/glue.rs index 37c9c70f6aa..1cd599d003d 100644 --- a/ports/geckolib/glue.rs +++ b/ports/geckolib/glue.rs @@ -30,6 +30,7 @@ use style::gecko_bindings::bindings::{RawGeckoElementBorrowed, RawGeckoElementBo use style::gecko_bindings::bindings::{RawGeckoKeyframeListBorrowed, RawGeckoKeyframeListBorrowedMut}; use style::gecko_bindings::bindings::{RawServoDeclarationBlockBorrowed, RawServoDeclarationBlockStrong}; use style::gecko_bindings::bindings::{RawServoDocumentRule, RawServoDocumentRuleBorrowed}; +use style::gecko_bindings::bindings::{RawServoImportRule, RawServoImportRuleBorrowed}; use style::gecko_bindings::bindings::{RawServoKeyframe, RawServoKeyframeBorrowed, RawServoKeyframeStrong}; use style::gecko_bindings::bindings::{RawServoKeyframesRule, RawServoKeyframesRuleBorrowed}; use style::gecko_bindings::bindings::{RawServoMediaList, RawServoMediaListBorrowed, RawServoMediaListStrong}; @@ -56,7 +57,6 @@ use style::gecko_bindings::bindings::RawGeckoServoStyleRuleListBorrowedMut; use style::gecko_bindings::bindings::RawServoAnimationValueBorrowed; use style::gecko_bindings::bindings::RawServoAnimationValueMapBorrowedMut; use style::gecko_bindings::bindings::RawServoAnimationValueStrong; -use style::gecko_bindings::bindings::RawServoImportRuleBorrowed; use style::gecko_bindings::bindings::RawServoStyleRuleBorrowed; use style::gecko_bindings::bindings::ServoComputedValuesBorrowedOrNull; use style::gecko_bindings::bindings::nsTArrayBorrowed_uintptr_t; @@ -988,6 +988,12 @@ impl_basic_rule_funcs! { (Style, StyleRule, RawServoStyleRule), to_css: Servo_StyleRule_GetCssText, } +impl_basic_rule_funcs! { (Import, ImportRule, RawServoImportRule), + getter: Servo_CssRules_GetImportRuleAt, + debug: Servo_ImportRule_Debug, + to_css: Servo_ImportRule_GetCssText, +} + impl_basic_rule_funcs_without_getter! { (Keyframe, RawServoKeyframe), debug: Servo_Keyframe_Debug, to_css: Servo_Keyframe_GetCssText, @@ -1078,6 +1084,13 @@ pub extern "C" fn Servo_StyleRule_GetSelectorText(rule: RawServoStyleRuleBorrowe } #[no_mangle] +pub extern "C" fn Servo_ImportRule_GetHref(rule: RawServoImportRuleBorrowed, result: *mut nsAString) { + read_locked_arc(rule, |rule: &ImportRule| { + write!(unsafe { &mut *result }, "{}", rule.url.as_str()).unwrap(); + }) +} + +#[no_mangle] pub extern "C" fn Servo_Keyframe_GetKeyText(keyframe: RawServoKeyframeBorrowed, result: *mut nsAString) { read_locked_arc(keyframe, |keyframe: &Keyframe| { keyframe.selector.to_css(unsafe { result.as_mut().unwrap() }).unwrap() |