mirror of
https://github.com/servo/servo.git
synced 2025-08-03 12:40:06 +01:00
Auto merge of #16609 - nox:quirks, r=Manishearth,emilio
Implement unitless length quirk The Gecko side doesn't propagate its quirks mode yet. <!-- 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/16609) <!-- Reviewable:end -->
This commit is contained in:
commit
d8bcc0db1a
70 changed files with 2321 additions and 194 deletions
|
@ -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
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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(())
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -542,7 +542,7 @@ impl Document {
|
|||
self.quirks_mode.set(mode);
|
||||
|
||||
if mode == QuirksMode::Quirks {
|
||||
self.window.layout_chan().send(Msg::SetQuirksMode).unwrap();
|
||||
self.window.layout_chan().send(Msg::SetQuirksMode(mode)).unwrap();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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"));
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue