diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2017-06-09 14:31:48 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-06-09 14:31:48 -0700 |
commit | 061cb5f48e5c93a5decf39e530aea4a566e97341 (patch) | |
tree | 1682083740ce2a850c5204cd046918a8427c57ba /components/script/dom | |
parent | 8fee7f45e0481bf6074788029f8a1eaea24fcca5 (diff) | |
parent | 27ae1ef2e7d78f38e744f2e00e177302f2d6aa82 (diff) | |
download | servo-061cb5f48e5c93a5decf39e530aea4a566e97341.tar.gz servo-061cb5f48e5c93a5decf39e530aea4a566e97341.zip |
Auto merge of #16752 - jdm:css-parse-error, r=SimonSapin
Report more informative CSS errors
This requires https://github.com/servo/rust-cssparser/pull/143 for the final commit. There's no better way to split that work up, unfortunately, and it's extremely easy to bitrot. I would appreciate if we could expedite reviewing this work.
This is the work necessary to enable https://bugzilla.mozilla.org/show_bug.cgi?id=1352669. It makes sense to merge it separately because it's so much effort to keep it up to date with the ongoing Stylo work.
---
- [X] `./mach build -d` does not report any errors
- [X] `./mach test-tidy` does not report any errors
- [x] There are tests for these changes
<!-- 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/16752)
<!-- Reviewable:end -->
Diffstat (limited to 'components/script/dom')
-rw-r--r-- | components/script/dom/canvasgradient.rs | 5 | ||||
-rw-r--r-- | components/script/dom/canvasrenderingcontext2d.rs | 8 | ||||
-rw-r--r-- | components/script/dom/css.rs | 5 | ||||
-rw-r--r-- | components/script/dom/csskeyframesrule.rs | 5 | ||||
-rw-r--r-- | components/script/dom/cssmediarule.rs | 5 | ||||
-rw-r--r-- | components/script/dom/csssupportsrule.rs | 5 | ||||
-rw-r--r-- | components/script/dom/element.rs | 4 | ||||
-rw-r--r-- | components/script/dom/htmllinkelement.rs | 5 | ||||
-rw-r--r-- | components/script/dom/htmlstyleelement.rs | 5 | ||||
-rw-r--r-- | components/script/dom/medialist.rs | 11 | ||||
-rw-r--r-- | components/script/dom/node.rs | 4 | ||||
-rw-r--r-- | components/script/dom/window.rs | 5 |
12 files changed, 40 insertions, 27 deletions
diff --git a/components/script/dom/canvasgradient.rs b/components/script/dom/canvasgradient.rs index 994582f509b..64df591f760 100644 --- a/components/script/dom/canvasgradient.rs +++ b/components/script/dom/canvasgradient.rs @@ -3,7 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use canvas_traits::{CanvasGradientStop, FillOrStrokeStyle, LinearGradientStyle, RadialGradientStyle}; -use cssparser::{Parser, RGBA}; +use cssparser::{Parser, ParserInput, RGBA}; use cssparser::Color as CSSColor; use dom::bindings::cell::DOMRefCell; use dom::bindings::codegen::Bindings::CanvasGradientBinding; @@ -53,7 +53,8 @@ impl CanvasGradientMethods for CanvasGradient { return Err(Error::IndexSize); } - let mut parser = Parser::new(&color); + let mut input = ParserInput::new(&color); + let mut parser = Parser::new(&mut input); let color = CSSColor::parse(&mut parser); let color = if parser.is_exhausted() { match color { diff --git a/components/script/dom/canvasrenderingcontext2d.rs b/components/script/dom/canvasrenderingcontext2d.rs index 348ec08aced..8fb17c90fea 100644 --- a/components/script/dom/canvasrenderingcontext2d.rs +++ b/components/script/dom/canvasrenderingcontext2d.rs @@ -6,7 +6,7 @@ use canvas_traits::{Canvas2dMsg, CanvasCommonMsg, CanvasMsg}; use canvas_traits::{CompositionOrBlending, FillOrStrokeStyle, FillRule}; use canvas_traits::{LineCapStyle, LineJoinStyle, LinearGradientStyle}; use canvas_traits::{RadialGradientStyle, RepetitionStyle, byte_swap_and_premultiply}; -use cssparser::{Parser, RGBA}; +use cssparser::{Parser, ParserInput, RGBA}; use cssparser::Color as CSSColor; use dom::bindings::cell::DOMRefCell; use dom::bindings::codegen::Bindings::CSSStyleDeclarationBinding::CSSStyleDeclarationMethods; @@ -463,7 +463,8 @@ impl CanvasRenderingContext2D { } fn parse_color(&self, string: &str) -> Result<RGBA, ()> { - let mut parser = Parser::new(&string); + let mut input = ParserInput::new(string); + let mut parser = Parser::new(&mut input); let color = CSSColor::parse(&mut parser); if parser.is_exhausted() { match color { @@ -1314,7 +1315,8 @@ impl Drop for CanvasRenderingContext2D { } pub fn parse_color(string: &str) -> Result<RGBA, ()> { - let mut parser = Parser::new(&string); + let mut input = ParserInput::new(string); + let mut parser = Parser::new(&mut input); match CSSColor::parse(&mut parser) { Ok(CSSColor::RGBA(rgba)) => { if parser.is_exhausted() { diff --git a/components/script/dom/css.rs b/components/script/dom/css.rs index 521c09ed4c2..66f522b2371 100644 --- a/components/script/dom/css.rs +++ b/components/script/dom/css.rs @@ -2,7 +2,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -use cssparser::{Parser, serialize_identifier}; +use cssparser::{Parser, ParserInput, serialize_identifier}; use dom::bindings::codegen::Bindings::WindowBinding::WindowBinding::WindowMethods; use dom::bindings::error::Fallible; use dom::bindings::reflector::Reflector; @@ -39,7 +39,8 @@ impl CSS { /// https://drafts.csswg.org/css-conditional/#dom-css-supports pub fn Supports_(win: &Window, condition: DOMString) -> bool { - let mut input = Parser::new(&condition); + let mut input = ParserInput::new(&condition); + let mut input = Parser::new(&mut input); let cond = parse_condition_or_declaration(&mut input); if let Ok(cond) = cond { let url = win.Document().url(); diff --git a/components/script/dom/csskeyframesrule.rs b/components/script/dom/csskeyframesrule.rs index 42cb4b374fa..469f9b7d026 100644 --- a/components/script/dom/csskeyframesrule.rs +++ b/components/script/dom/csskeyframesrule.rs @@ -2,7 +2,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -use cssparser::Parser; +use cssparser::{Parser, ParserInput}; use dom::bindings::codegen::Bindings::CSSKeyframesRuleBinding; use dom::bindings::codegen::Bindings::CSSKeyframesRuleBinding::CSSKeyframesRuleMethods; use dom::bindings::error::ErrorResult; @@ -58,7 +58,8 @@ impl CSSKeyframesRule { /// Given a keyframe selector, finds the index of the first corresponding rule if any fn find_rule(&self, selector: &str) -> Option<usize> { - let mut input = Parser::new(selector); + let mut input = ParserInput::new(selector); + let mut input = Parser::new(&mut input); if let Ok(sel) = KeyframeSelector::parse(&mut input) { let guard = self.cssrule.shared_lock().read(); // This finds the *last* element matching a selector diff --git a/components/script/dom/cssmediarule.rs b/components/script/dom/cssmediarule.rs index 6986b0fe03d..1f5535f1b3e 100644 --- a/components/script/dom/cssmediarule.rs +++ b/components/script/dom/cssmediarule.rs @@ -2,7 +2,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -use cssparser::Parser; +use cssparser::{Parser, ParserInput}; use dom::bindings::codegen::Bindings::CSSMediaRuleBinding; use dom::bindings::codegen::Bindings::CSSMediaRuleBinding::CSSMediaRuleMethods; use dom::bindings::codegen::Bindings::WindowBinding::WindowBinding::WindowMethods; @@ -69,7 +69,8 @@ impl CSSMediaRule { /// https://drafts.csswg.org/css-conditional-3/#the-cssmediarule-interface pub fn set_condition_text(&self, text: DOMString) { - let mut input = Parser::new(&text); + let mut input = ParserInput::new(&text); + let mut input = Parser::new(&mut input); let global = self.global(); let win = global.as_window(); let url = win.get_url(); diff --git a/components/script/dom/csssupportsrule.rs b/components/script/dom/csssupportsrule.rs index 5d01c2cfdd3..2897b47b35f 100644 --- a/components/script/dom/csssupportsrule.rs +++ b/components/script/dom/csssupportsrule.rs @@ -2,7 +2,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -use cssparser::Parser; +use cssparser::{Parser, ParserInput}; use dom::bindings::codegen::Bindings::CSSSupportsRuleBinding; use dom::bindings::codegen::Bindings::WindowBinding::WindowBinding::WindowMethods; use dom::bindings::js::Root; @@ -55,7 +55,8 @@ impl CSSSupportsRule { /// https://drafts.csswg.org/css-conditional-3/#the-csssupportsrule-interface pub fn set_condition_text(&self, text: DOMString) { - let mut input = Parser::new(&text); + let mut input = ParserInput::new(&text); + let mut input = Parser::new(&mut input); let cond = SupportsCondition::parse(&mut input); if let Ok(cond) = cond { let global = self.global(); diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs index 189410ce77a..b4e7be3203a 100644 --- a/components/script/dom/element.rs +++ b/components/script/dom/element.rs @@ -2061,7 +2061,7 @@ impl ElementMethods for Element { // https://dom.spec.whatwg.org/#dom-element-matches fn Matches(&self, selectors: DOMString) -> Fallible<bool> { match SelectorParser::parse_author_origin_no_namespace(&selectors) { - Err(()) => Err(Error::Syntax), + Err(_) => Err(Error::Syntax), Ok(selectors) => { let mut ctx = MatchingContext::new(MatchingMode::Normal, None); Ok(matches_selector_list(&selectors, &Root::from_ref(self), &mut ctx)) @@ -2077,7 +2077,7 @@ impl ElementMethods for Element { // https://dom.spec.whatwg.org/#dom-element-closest fn Closest(&self, selectors: DOMString) -> Fallible<Option<Root<Element>>> { match SelectorParser::parse_author_origin_no_namespace(&selectors) { - Err(()) => Err(Error::Syntax), + Err(_) => Err(Error::Syntax), Ok(selectors) => { let root = self.upcast::<Node>(); for element in root.inclusive_ancestors() { diff --git a/components/script/dom/htmllinkelement.rs b/components/script/dom/htmllinkelement.rs index fc1783985f8..da004317179 100644 --- a/components/script/dom/htmllinkelement.rs +++ b/components/script/dom/htmllinkelement.rs @@ -2,7 +2,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -use cssparser::Parser as CssParser; +use cssparser::{Parser as CssParser, ParserInput}; use dom::attr::Attr; use dom::bindings::cell::DOMRefCell; use dom::bindings::codegen::Bindings::DOMTokenListBinding::DOMTokenListBinding::DOMTokenListMethods; @@ -278,7 +278,8 @@ impl HTMLLinkElement { None => "", }; - let mut css_parser = CssParser::new(&mq_str); + let mut input = ParserInput::new(&mq_str); + let mut css_parser = CssParser::new(&mut input); let win = document.window(); let doc_url = document.url(); let context = CssParserContext::new_for_cssom(&doc_url, win.css_error_reporter(), Some(CssRuleType::Media), diff --git a/components/script/dom/htmlstyleelement.rs b/components/script/dom/htmlstyleelement.rs index 9f7a36c040c..4067cb7439d 100644 --- a/components/script/dom/htmlstyleelement.rs +++ b/components/script/dom/htmlstyleelement.rs @@ -2,7 +2,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -use cssparser::Parser as CssParser; +use cssparser::{Parser as CssParser, ParserInput}; use dom::bindings::cell::DOMRefCell; use dom::bindings::codegen::Bindings::HTMLStyleElementBinding; use dom::bindings::codegen::Bindings::HTMLStyleElementBinding::HTMLStyleElementMethods; @@ -91,8 +91,9 @@ impl HTMLStyleElement { PARSING_MODE_DEFAULT, doc.quirks_mode()); let shared_lock = node.owner_doc().style_shared_lock().clone(); + let mut input = ParserInput::new(&mq_str); let mq = Arc::new(shared_lock.wrap( - parse_media_query_list(&context, &mut CssParser::new(&mq_str)))); + parse_media_query_list(&context, &mut CssParser::new(&mut input)))); let loader = StylesheetLoader::for_element(self.upcast()); let sheet = Stylesheet::from_str(&data, win.get_url(), Origin::Author, mq, shared_lock, Some(&loader), diff --git a/components/script/dom/medialist.rs b/components/script/dom/medialist.rs index 8915615ca37..d77af9dc1b9 100644 --- a/components/script/dom/medialist.rs +++ b/components/script/dom/medialist.rs @@ -2,7 +2,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -use cssparser::Parser; +use cssparser::{Parser, ParserInput}; use dom::bindings::codegen::Bindings::MediaListBinding; use dom::bindings::codegen::Bindings::MediaListBinding::MediaListMethods; use dom::bindings::codegen::Bindings::WindowBinding::WindowBinding::WindowMethods; @@ -71,7 +71,8 @@ impl MediaListMethods for MediaList { return; } // Step 3 - let mut parser = Parser::new(&value); + let mut input = ParserInput::new(&value); + let mut parser = Parser::new(&mut input); let global = self.global(); let win = global.as_window(); let url = win.get_url(); @@ -107,7 +108,8 @@ impl MediaListMethods for MediaList { // https://drafts.csswg.org/cssom/#dom-medialist-appendmedium fn AppendMedium(&self, medium: DOMString) { // Step 1 - let mut parser = Parser::new(&medium); + let mut input = ParserInput::new(&medium); + let mut parser = Parser::new(&mut input); let global = self.global(); let win = global.as_window(); let url = win.get_url(); @@ -135,7 +137,8 @@ impl MediaListMethods for MediaList { // https://drafts.csswg.org/cssom/#dom-medialist-deletemedium fn DeleteMedium(&self, medium: DOMString) { // Step 1 - let mut parser = Parser::new(&medium); + let mut input = ParserInput::new(&medium); + let mut parser = Parser::new(&mut input); let global = self.global(); let win = global.as_window(); let url = win.get_url(); diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs index 8dde9cc7b01..ec0a1117669 100644 --- a/components/script/dom/node.rs +++ b/components/script/dom/node.rs @@ -717,7 +717,7 @@ impl Node { // Step 1. match SelectorParser::parse_author_origin_no_namespace(&selectors) { // Step 2. - Err(()) => Err(Error::Syntax), + Err(_) => Err(Error::Syntax), // Step 3. Ok(selectors) => { let mut ctx = MatchingContext::new(MatchingMode::Normal, None); @@ -737,7 +737,7 @@ impl Node { // Step 1. match SelectorParser::parse_author_origin_no_namespace(&selectors) { // Step 2. - Err(()) => Err(Error::Syntax), + Err(_) => Err(Error::Syntax), // Step 3. Ok(selectors) => { let mut descendants = self.traverse_preorder(); diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs index e627721bd05..bcc5a749d33 100644 --- a/components/script/dom/window.rs +++ b/components/script/dom/window.rs @@ -5,7 +5,7 @@ use app_units::Au; use base64; use bluetooth_traits::BluetoothRequest; -use cssparser::Parser; +use cssparser::{Parser, ParserInput}; use devtools_traits::{ScriptToDevtoolsControlMsg, TimelineMarker, TimelineMarkerType}; use dom::bindings::cell::DOMRefCell; use dom::bindings::codegen::Bindings::DocumentBinding::{DocumentMethods, DocumentReadyState}; @@ -1003,7 +1003,8 @@ impl WindowMethods for Window { // https://drafts.csswg.org/cssom-view/#dom-window-matchmedia fn MatchMedia(&self, query: DOMString) -> Root<MediaQueryList> { - let mut parser = Parser::new(&query); + let mut input = ParserInput::new(&query); + let mut parser = Parser::new(&mut input); let url = self.get_url(); let quirks_mode = self.Document().quirks_mode(); let context = CssParserContext::new_for_cssom(&url, self.css_error_reporter(), Some(CssRuleType::Media), |