aboutsummaryrefslogtreecommitdiffstats
path: root/components/script
diff options
context:
space:
mode:
authorAnthony Ramine <n.oxyde@gmail.com>2017-04-23 11:07:48 +0200
committerAnthony Ramine <n.oxyde@gmail.com>2017-04-27 10:41:55 +0200
commitf68e2fded92e769a1fc0d5bdc963f47da366d651 (patch)
tree9482e5104d03ecbf4bbc4626694389ca9de10e17 /components/script
parent10fb8e61c77fcb2ad1adfe517aa08ecbe64d4db6 (diff)
downloadservo-f68e2fded92e769a1fc0d5bdc963f47da366d651.tar.gz
servo-f68e2fded92e769a1fc0d5bdc963f47da366d651.zip
Propagate quirks mode all the way to ParserContext
The quirks mode is still not properly propagated in geckolib.
Diffstat (limited to 'components/script')
-rw-r--r--components/script/dom/css.rs7
-rw-r--r--components/script/dom/cssmediarule.rs5
-rw-r--r--components/script/dom/cssstyledeclaration.rs9
-rw-r--r--components/script/dom/csssupportsrule.rs4
-rw-r--r--components/script/dom/element.rs3
-rw-r--r--components/script/dom/htmllinkelement.rs3
-rw-r--r--components/script/dom/htmlmetaelement.rs1
-rw-r--r--components/script/dom/htmlstyleelement.rs6
-rw-r--r--components/script/dom/medialist.rs13
-rw-r--r--components/script/dom/mediaquerylist.rs2
-rw-r--r--components/script/dom/window.rs4
-rw-r--r--components/script/stylesheet_loader.rs3
12 files changed, 44 insertions, 16 deletions
diff --git a/components/script/dom/css.rs b/components/script/dom/css.rs
index 0e4a7f85065..72cdbfa5be6 100644
--- a/components/script/dom/css.rs
+++ b/components/script/dom/css.rs
@@ -9,6 +9,7 @@ use dom::bindings::reflector::Reflector;
use dom::bindings::str::DOMString;
use dom::window::Window;
use dom_struct::dom_struct;
+use style::context::QuirksMode;
use style::parser::{LengthParsingMode, ParserContext};
use style::stylesheets::CssRuleType;
use style::supports::{Declaration, parse_condition_or_declaration};
@@ -31,7 +32,8 @@ impl CSS {
let decl = Declaration { prop: property.into(), val: value.into() };
let url = win.Document().url();
let context = ParserContext::new_for_cssom(&url, win.css_error_reporter(), Some(CssRuleType::Supports),
- LengthParsingMode::Default);
+ LengthParsingMode::Default,
+ QuirksMode::NoQuirks);
decl.eval(&context)
}
@@ -42,7 +44,8 @@ impl CSS {
if let Ok(cond) = cond {
let url = win.Document().url();
let context = ParserContext::new_for_cssom(&url, win.css_error_reporter(), Some(CssRuleType::Supports),
- LengthParsingMode::Default);
+ LengthParsingMode::Default,
+ QuirksMode::NoQuirks);
cond.eval(&context)
} else {
false
diff --git a/components/script/dom/cssmediarule.rs b/components/script/dom/cssmediarule.rs
index aff12e2e2ad..45bf65b1adf 100644
--- a/components/script/dom/cssmediarule.rs
+++ b/components/script/dom/cssmediarule.rs
@@ -5,6 +5,7 @@
use cssparser::Parser;
use dom::bindings::codegen::Bindings::CSSMediaRuleBinding;
use dom::bindings::codegen::Bindings::CSSMediaRuleBinding::CSSMediaRuleMethods;
+use dom::bindings::codegen::Bindings::WindowBinding::WindowBinding::WindowMethods;
use dom::bindings::js::{MutNullableJS, Root};
use dom::bindings::reflector::{DomObject, reflect_dom_object};
use dom::bindings::str::DOMString;
@@ -72,8 +73,10 @@ impl CSSMediaRule {
let global = self.global();
let win = global.as_window();
let url = win.get_url();
+ let quirks_mode = win.Document().quirks_mode();
let context = ParserContext::new_for_cssom(&url, win.css_error_reporter(), Some(CssRuleType::Media),
- LengthParsingMode::Default);
+ LengthParsingMode::Default,
+ quirks_mode);
let new_medialist = parse_media_query_list(&context, &mut input);
let mut guard = self.cssconditionrule.shared_lock().write();
diff --git a/components/script/dom/cssstyledeclaration.rs b/components/script/dom/cssstyledeclaration.rs
index 22fd1194034..d0996f04567 100644
--- a/components/script/dom/cssstyledeclaration.rs
+++ b/components/script/dom/cssstyledeclaration.rs
@@ -256,9 +256,12 @@ impl CSSStyleDeclaration {
// Step 6
let window = self.owner.window();
+ let quirks_mode = window.Document().quirks_mode();
let result =
parse_one_declaration(id, &value, &self.owner.base_url(),
- window.css_error_reporter(), LengthParsingMode::Default);
+ window.css_error_reporter(),
+ LengthParsingMode::Default,
+ quirks_mode);
// Step 7
let parsed = match result {
@@ -434,11 +437,13 @@ impl CSSStyleDeclarationMethods for CSSStyleDeclaration {
return Err(Error::NoModificationAllowed);
}
+ let quirks_mode = window.Document().quirks_mode();
self.owner.mutate_associated_block(|mut pdb, mut _changed| {
// Step 3
*pdb = parse_style_attribute(&value,
&self.owner.base_url(),
- window.css_error_reporter());
+ window.css_error_reporter(),
+ quirks_mode);
});
Ok(())
diff --git a/components/script/dom/csssupportsrule.rs b/components/script/dom/csssupportsrule.rs
index 3ac60a00e06..86aedf10864 100644
--- a/components/script/dom/csssupportsrule.rs
+++ b/components/script/dom/csssupportsrule.rs
@@ -61,8 +61,10 @@ impl CSSSupportsRule {
let global = self.global();
let win = global.as_window();
let url = win.Document().url();
+ let quirks_mode = win.Document().quirks_mode();
let context = ParserContext::new_for_cssom(&url, win.css_error_reporter(), Some(CssRuleType::Supports),
- LengthParsingMode::Default);
+ LengthParsingMode::Default,
+ quirks_mode);
let enabled = cond.eval(&context);
let mut guard = self.cssconditionrule.shared_lock().write();
let rule = self.supportsrule.write_with(&mut guard);
diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs
index 7b56b6c6e81..d6974fb9075 100644
--- a/components/script/dom/element.rs
+++ b/components/script/dom/element.rs
@@ -2196,7 +2196,8 @@ impl VirtualMethods for Element {
Arc::new(doc.style_shared_lock().wrap(parse_style_attribute(
&attr.value(),
&doc.base_url(),
- win.css_error_reporter())))
+ win.css_error_reporter(),
+ doc.quirks_mode())))
};
Some(block)
diff --git a/components/script/dom/htmllinkelement.rs b/components/script/dom/htmllinkelement.rs
index c0d0d12a775..bf36d28b29d 100644
--- a/components/script/dom/htmllinkelement.rs
+++ b/components/script/dom/htmllinkelement.rs
@@ -282,7 +282,8 @@ impl HTMLLinkElement {
let win = document.window();
let doc_url = document.url();
let context = CssParserContext::new_for_cssom(&doc_url, win.css_error_reporter(), Some(CssRuleType::Media),
- LengthParsingMode::Default);
+ LengthParsingMode::Default,
+ document.quirks_mode());
let media = parse_media_query_list(&context, &mut css_parser);
let im_attribute = element.get_attribute(&ns!(), &local_name!("integrity"));
diff --git a/components/script/dom/htmlmetaelement.rs b/components/script/dom/htmlmetaelement.rs
index 3c4e817a132..62d7215e3df 100644
--- a/components/script/dom/htmlmetaelement.rs
+++ b/components/script/dom/htmlmetaelement.rs
@@ -113,6 +113,7 @@ impl HTMLMetaElement {
// force all styles to be recomputed.
dirty_on_viewport_size_change: AtomicBool::new(false),
disabled: AtomicBool::new(false),
+ quirks_mode: document.quirks_mode(),
}));
let doc = document_from_node(self);
doc.invalidate_stylesheets();
diff --git a/components/script/dom/htmlstyleelement.rs b/components/script/dom/htmlstyleelement.rs
index 0c026fcfe9a..8905c3baa65 100644
--- a/components/script/dom/htmlstyleelement.rs
+++ b/components/script/dom/htmlstyleelement.rs
@@ -76,6 +76,7 @@ impl HTMLStyleElement {
assert!(node.is_in_doc());
let win = window_from_node(node);
+ let doc = document_from_node(self);
let mq_attribute = element.get_attribute(&ns!(), &local_name!("media"));
let mq_str = match mq_attribute {
@@ -88,7 +89,8 @@ impl HTMLStyleElement {
let context = CssParserContext::new_for_cssom(&url,
win.css_error_reporter(),
Some(CssRuleType::Media),
- LengthParsingMode::Default);
+ LengthParsingMode::Default,
+ doc.quirks_mode());
let shared_lock = node.owner_doc().style_shared_lock().clone();
let mq = Arc::new(shared_lock.wrap(
parse_media_query_list(&context, &mut CssParser::new(&mq_str))));
@@ -96,6 +98,7 @@ impl HTMLStyleElement {
let sheet = Stylesheet::from_str(&data, win.get_url(), Origin::Author, mq,
shared_lock, Some(&loader),
win.css_error_reporter(),
+ doc.quirks_mode(),
self.line_number);
let sheet = Arc::new(sheet);
@@ -107,7 +110,6 @@ impl HTMLStyleElement {
win.layout_chan().send(Msg::AddStylesheet(sheet.clone())).unwrap();
*self.stylesheet.borrow_mut() = Some(sheet);
- let doc = document_from_node(self);
doc.invalidate_stylesheets();
}
diff --git a/components/script/dom/medialist.rs b/components/script/dom/medialist.rs
index 881c17966da..f2a2299d169 100644
--- a/components/script/dom/medialist.rs
+++ b/components/script/dom/medialist.rs
@@ -5,6 +5,7 @@
use cssparser::Parser;
use dom::bindings::codegen::Bindings::MediaListBinding;
use dom::bindings::codegen::Bindings::MediaListBinding::MediaListMethods;
+use dom::bindings::codegen::Bindings::WindowBinding::WindowBinding::WindowMethods;
use dom::bindings::js::{JS, Root};
use dom::bindings::reflector::{DomObject, Reflector, reflect_dom_object};
use dom::bindings::str::DOMString;
@@ -74,8 +75,10 @@ impl MediaListMethods for MediaList {
let global = self.global();
let win = global.as_window();
let url = win.get_url();
+ let quirks_mode = win.Document().quirks_mode();
let context = ParserContext::new_for_cssom(&url, win.css_error_reporter(), Some(CssRuleType::Media),
- LengthParsingMode::Default);
+ LengthParsingMode::Default,
+ quirks_mode);
*media_queries = parse_media_query_list(&context, &mut parser);
}
@@ -108,8 +111,10 @@ impl MediaListMethods for MediaList {
let global = self.global();
let win = global.as_window();
let url = win.get_url();
+ let quirks_mode = win.Document().quirks_mode();
let context = ParserContext::new_for_cssom(&url, win.css_error_reporter(), Some(CssRuleType::Media),
- LengthParsingMode::Default);
+ LengthParsingMode::Default,
+ quirks_mode);
let m = MediaQuery::parse(&context, &mut parser);
// Step 2
if let Err(_) = m {
@@ -134,8 +139,10 @@ impl MediaListMethods for MediaList {
let global = self.global();
let win = global.as_window();
let url = win.get_url();
+ let quirks_mode = win.Document().quirks_mode();
let context = ParserContext::new_for_cssom(&url, win.css_error_reporter(), Some(CssRuleType::Media),
- LengthParsingMode::Default);
+ LengthParsingMode::Default,
+ quirks_mode);
let m = MediaQuery::parse(&context, &mut parser);
// Step 2
if let Err(_) = m {
diff --git a/components/script/dom/mediaquerylist.rs b/components/script/dom/mediaquerylist.rs
index dafc7602794..b25e041f4ef 100644
--- a/components/script/dom/mediaquerylist.rs
+++ b/components/script/dom/mediaquerylist.rs
@@ -77,7 +77,7 @@ impl MediaQueryList {
if let Some(window_size) = self.document.window().window_size() {
let viewport_size = window_size.initial_viewport;
let device = Device::new(MediaType::Screen, viewport_size);
- self.media_query_list.evaluate(&device)
+ self.media_query_list.evaluate(&device, self.document.quirks_mode())
} else {
false
}
diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs
index eaba1ded928..6b8857b81b1 100644
--- a/components/script/dom/window.rs
+++ b/components/script/dom/window.rs
@@ -976,8 +976,10 @@ impl WindowMethods for Window {
fn MatchMedia(&self, query: DOMString) -> Root<MediaQueryList> {
let mut parser = Parser::new(&query);
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),
- LengthParsingMode::Default);
+ LengthParsingMode::Default,
+ quirks_mode);
let media_query_list = media_queries::parse_media_query_list(&context, &mut parser);
let document = self.Document();
let mql = MediaQueryList::new(&document, media_query_list);
diff --git a/components/script/stylesheet_loader.rs b/components/script/stylesheet_loader.rs
index a859e798818..14b8c385e39 100644
--- a/components/script/stylesheet_loader.rs
+++ b/components/script/stylesheet_loader.rs
@@ -144,7 +144,8 @@ impl FetchResponseListener for StylesheetContext {
media.take().unwrap(),
shared_lock,
Some(&loader),
- win.css_error_reporter()));
+ win.css_error_reporter(),
+ document.quirks_mode()));
if link.is_alternate() {
sheet.set_disabled(true);