Bug 1350175 - stylo: Support getting line / column number of CSS rules. Part 5: MediaRule. r=xidorn
authorFernando Jimenez Moreno <ferjmoreno@gmail.com>
Wed, 26 Apr 2017 11:22:25 +0200
changeset 568556 99d71a3c9719c62ee095fd5d9dd89058306b15a4
parent 568555 420f0ce9dcf78103612512ec17cf2b9938bf4768
child 568557 00c3e819e419d67c008c2f704790c17775fde15e
push id55899
push userferjmoreno@gmail.com
push dateWed, 26 Apr 2017 09:27:14 +0000
reviewersxidorn
bugs1350175
milestone55.0a1
Bug 1350175 - stylo: Support getting line / column number of CSS rules. Part 5: MediaRule. r=xidorn MozReview-Commit-ID: GOzF6wGwxYu
servo/components/style/stylesheets.rs
--- a/servo/components/style/stylesheets.rs
+++ b/servo/components/style/stylesheets.rs
@@ -542,16 +542,17 @@ impl ToCssWithGuard for KeyframesRule {
     }
 }
 
 #[allow(missing_docs)]
 #[derive(Debug)]
 pub struct MediaRule {
     pub media_queries: Arc<Locked<MediaList>>,
     pub rules: Arc<Locked<CssRules>>,
+    pub source_location: SourceLocation,
 }
 
 impl ToCssWithGuard for MediaRule {
     // Serialization of MediaRule is not specced.
     // https://drafts.csswg.org/cssom/#serialize-a-css-rule CSSMediaRule
     fn to_css<W>(&self, guard: &SharedRwLockReadGuard, dest: &mut W) -> fmt::Result
     where W: fmt::Write {
         try!(dest.write_str("@media "));
@@ -1157,19 +1158,24 @@ impl<'a, 'b> AtRuleParser for NestedRule
     fn parse_block(&mut self, prelude: AtRulePrelude, input: &mut Parser) -> Result<CssRule, ()> {
         match prelude {
             AtRulePrelude::FontFace => {
                 let context = ParserContext::new_with_rule_type(self.context, Some(CssRuleType::FontFace));
                 Ok(CssRule::FontFace(Arc::new(self.shared_lock.wrap(
                    parse_font_face_block(&context, input).into()))))
             }
             AtRulePrelude::Media(media_queries) => {
+                let location = input.current_source_location();
                 Ok(CssRule::Media(Arc::new(self.shared_lock.wrap(MediaRule {
                     media_queries: media_queries,
                     rules: self.parse_nested_rules(input, CssRuleType::Media),
+                    source_location: SourceLocation {
+                        line: location.line + self.context.line_number_offset as usize - 1,
+                        column: location.column,
+                    },
                 }))))
             }
             AtRulePrelude::Supports(cond) => {
                 let enabled = cond.eval(self.context);
                 Ok(CssRule::Supports(Arc::new(self.shared_lock.wrap(SupportsRule {
                     condition: cond,
                     rules: self.parse_nested_rules(input, CssRuleType::Supports),
                     enabled: enabled,