aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2016-12-17 13:25:06 -0800
committerGitHub <noreply@github.com>2016-12-17 13:25:06 -0800
commit164426a7f90c90652d2d52c5a54be91154d26af7 (patch)
treed0e1bd189bb9985e6be053dd7411cab9b40608e5 /components/script/dom
parent9d2b98e6f82fe601672dbf435a920ccceffe78dc (diff)
parentd02478718850f5348e203472828ffcf445e5a0ee (diff)
downloadservo-164426a7f90c90652d2d52c5a54be91154d26af7.tar.gz
servo-164426a7f90c90652d2d52c5a54be91154d26af7.zip
Auto merge of #14430 - julienw:access-quirks-mode-from-layout, r=emilio
Expose Quirks Mode information in the layout data and code <!-- Please describe your changes on the following line: --> This patch exposes the Quirks (NoQuirks/LimitedQuirks/Quirks) state to the layout subsystem. --- <!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: --> - [X] `./mach build -d` does not report any errors - [X] `./mach test-tidy` does not report any errors - [ ] These changes fix #__ (github issue number if applicable). Prelimary work for issue #11704. <!-- Either: --> - [ ] There are tests for these changes OR - [ ] These changes do not require tests because _____ (Waiting for guidance of where/which tests I could do here) <!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. --> <!-- 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/14430) <!-- Reviewable:end -->
Diffstat (limited to 'components/script/dom')
-rw-r--r--components/script/dom/bindings/trace.rs2
-rw-r--r--components/script/dom/document.rs17
-rw-r--r--components/script/dom/element.rs27
-rw-r--r--components/script/dom/node.rs2
-rw-r--r--components/script/dom/servoparser/html.rs6
5 files changed, 32 insertions, 22 deletions
diff --git a/components/script/dom/bindings/trace.rs b/components/script/dom/bindings/trace.rs
index 3365c106bd9..850bef189c7 100644
--- a/components/script/dom/bindings/trace.rs
+++ b/components/script/dom/bindings/trace.rs
@@ -48,7 +48,6 @@ use euclid::length::Length as EuclidLength;
use euclid::rect::Rect;
use euclid::size::Size2D;
use html5ever::tokenizer::buffer_queue::BufferQueue;
-use html5ever::tree_builder::QuirksMode;
use html5ever_atoms::{Prefix, LocalName, Namespace, QualName};
use hyper::header::Headers;
use hyper::method::Method;
@@ -92,6 +91,7 @@ use std::sync::atomic::{AtomicBool, AtomicUsize};
use std::sync::mpsc::{Receiver, Sender};
use std::time::{SystemTime, Instant};
use style::attr::{AttrIdentifier, AttrValue, LengthOrPercentageOrAuto};
+use style::context::QuirksMode;
use style::element_state::*;
use style::font_face::FontFaceRule;
use style::keyframes::Keyframe;
diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs
index 36a2af07e63..6f8f2435311 100644
--- a/components/script/dom/document.rs
+++ b/components/script/dom/document.rs
@@ -91,7 +91,6 @@ use encoding::EncodingRef;
use encoding::all::UTF_8;
use euclid::point::Point2D;
use gfx_traits::ScrollRootId;
-use html5ever::tree_builder::{LimitedQuirks, NoQuirks, Quirks, QuirksMode};
use html5ever_atoms::{LocalName, QualName};
use hyper::header::{Header, SetCookie};
use hyper_serde::Serde;
@@ -129,7 +128,7 @@ use std::rc::Rc;
use std::sync::Arc;
use std::time::{Duration, Instant};
use style::attr::AttrValue;
-use style::context::ReflowGoal;
+use style::context::{QuirksMode, ReflowGoal};
use style::restyle_hints::RestyleHint;
use style::selector_parser::{RestyleDamage, Snapshot};
use style::str::{split_html_space_chars, str_join};
@@ -490,7 +489,7 @@ impl Document {
pub fn set_quirks_mode(&self, mode: QuirksMode) {
self.quirks_mode.set(mode);
- if mode == Quirks {
+ if mode == QuirksMode::Quirks {
self.window.layout_chan().send(Msg::SetQuirksMode).unwrap();
}
}
@@ -1777,6 +1776,7 @@ pub trait LayoutDocumentHelpers {
unsafe fn drain_pending_restyles(&self) -> Vec<(LayoutJS<Element>, PendingRestyle)>;
unsafe fn needs_paint_from_layout(&self);
unsafe fn will_paint(&self);
+ unsafe fn quirks_mode(&self) -> QuirksMode;
}
#[allow(unsafe_code)]
@@ -1803,6 +1803,11 @@ impl LayoutDocumentHelpers for LayoutJS<Document> {
unsafe fn will_paint(&self) {
(*self.unsafe_get()).needs_paint.set(false)
}
+
+ #[inline]
+ unsafe fn quirks_mode(&self) -> QuirksMode {
+ (*self.unsafe_get()).quirks_mode()
+ }
}
/// https://url.spec.whatwg.org/#network-scheme
@@ -1860,7 +1865,7 @@ impl Document {
last_modified: last_modified,
url: DOMRefCell::new(url),
// https://dom.spec.whatwg.org/#concept-document-quirks
- quirks_mode: Cell::new(NoQuirks),
+ quirks_mode: Cell::new(QuirksMode::NoQuirks),
// https://dom.spec.whatwg.org/#concept-document-encoding
encoding: Cell::new(UTF_8),
is_html_document: is_html_document == IsHTMLDocument::HTMLDocument,
@@ -2303,8 +2308,8 @@ impl DocumentMethods for Document {
// https://dom.spec.whatwg.org/#dom-document-compatmode
fn CompatMode(&self) -> DOMString {
DOMString::from(match self.quirks_mode.get() {
- LimitedQuirks | NoQuirks => "CSS1Compat",
- Quirks => "BackCompat",
+ QuirksMode::LimitedQuirks | QuirksMode::NoQuirks => "CSS1Compat",
+ QuirksMode::Quirks => "BackCompat",
})
}
diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs
index 21dfde99f22..27386eb2da8 100644
--- a/components/script/dom/element.rs
+++ b/components/script/dom/element.rs
@@ -77,7 +77,6 @@ use html5ever::serialize;
use html5ever::serialize::SerializeOpts;
use html5ever::serialize::TraversalScope;
use html5ever::serialize::TraversalScope::{ChildrenOnly, IncludeNode};
-use html5ever::tree_builder::{LimitedQuirks, NoQuirks, Quirks};
use html5ever_atoms::{Prefix, LocalName, Namespace, QualName};
use js::jsapi::{HandleValue, JSAutoCompartment};
use parking_lot::RwLock;
@@ -98,7 +97,7 @@ use std::rc::Rc;
use std::sync::Arc;
use std::sync::atomic::{AtomicUsize, Ordering};
use style::attr::{AttrValue, LengthOrPercentageOrAuto};
-use style::context::ReflowGoal;
+use style::context::{QuirksMode, ReflowGoal};
use style::element_state::*;
use style::matching::{common_style_affecting_attributes, rare_style_affecting_attributes};
use style::parser::ParserContextExtraData;
@@ -1084,8 +1083,8 @@ impl Element {
let quirks_mode = document_from_node(self).quirks_mode();
let is_equal = |lhs: &Atom, rhs: &Atom| {
match quirks_mode {
- NoQuirks | LimitedQuirks => lhs == rhs,
- Quirks => lhs.eq_ignore_ascii_case(&rhs),
+ QuirksMode::NoQuirks | QuirksMode::LimitedQuirks => lhs == rhs,
+ QuirksMode::Quirks => lhs.eq_ignore_ascii_case(&rhs),
}
};
self.get_attribute(&ns!(), &local_name!("class"))
@@ -1265,7 +1264,7 @@ impl Element {
// Step 7
if *self.root_element() == *self {
- if doc.quirks_mode() != Quirks {
+ if doc.quirks_mode() != QuirksMode::Quirks {
win.scroll(x, y, behavior);
}
@@ -1274,7 +1273,7 @@ impl Element {
// Step 9
if doc.GetBody().r() == self.downcast::<HTMLElement>() &&
- doc.quirks_mode() == Quirks &&
+ doc.quirks_mode() == QuirksMode::Quirks &&
!self.potentially_scrollable() {
win.scroll(x, y, behavior);
return;
@@ -1645,7 +1644,7 @@ impl ElementMethods for Element {
// Step 5
if *self.root_element() == *self {
- if doc.quirks_mode() == Quirks {
+ if doc.quirks_mode() == QuirksMode::Quirks {
return 0.0;
}
@@ -1655,7 +1654,7 @@ impl ElementMethods for Element {
// Step 7
if doc.GetBody().r() == self.downcast::<HTMLElement>() &&
- doc.quirks_mode() == Quirks &&
+ doc.quirks_mode() == QuirksMode::Quirks &&
!self.potentially_scrollable() {
return win.ScrollY() as f64;
}
@@ -1696,7 +1695,7 @@ impl ElementMethods for Element {
// Step 7
if *self.root_element() == *self {
- if doc.quirks_mode() != Quirks {
+ if doc.quirks_mode() != QuirksMode::Quirks {
win.scroll(win.ScrollX() as f64, y, behavior);
}
@@ -1705,7 +1704,7 @@ impl ElementMethods for Element {
// Step 9
if doc.GetBody().r() == self.downcast::<HTMLElement>() &&
- doc.quirks_mode() == Quirks &&
+ doc.quirks_mode() == QuirksMode::Quirks &&
!self.potentially_scrollable() {
win.scroll(win.ScrollX() as f64, y, behavior);
return;
@@ -1737,7 +1736,7 @@ impl ElementMethods for Element {
// Step 5
if *self.root_element() == *self {
- if doc.quirks_mode() != Quirks {
+ if doc.quirks_mode() != QuirksMode::Quirks {
// Step 6
return win.ScrollX() as f64;
}
@@ -1747,7 +1746,7 @@ impl ElementMethods for Element {
// Step 7
if doc.GetBody().r() == self.downcast::<HTMLElement>() &&
- doc.quirks_mode() == Quirks &&
+ doc.quirks_mode() == QuirksMode::Quirks &&
!self.potentially_scrollable() {
return win.ScrollX() as f64;
}
@@ -1788,7 +1787,7 @@ impl ElementMethods for Element {
// Step 7
if *self.root_element() == *self {
- if doc.quirks_mode() == Quirks {
+ if doc.quirks_mode() == QuirksMode::Quirks {
return;
}
@@ -1798,7 +1797,7 @@ impl ElementMethods for Element {
// Step 9
if doc.GetBody().r() == self.downcast::<HTMLElement>() &&
- doc.quirks_mode() == Quirks &&
+ doc.quirks_mode() == QuirksMode::Quirks &&
!self.potentially_scrollable() {
win.scroll(x, win.ScrollY() as f64, behavior);
return;
diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs
index 7146154a647..3e2de9bfa8e 100644
--- a/components/script/dom/node.rs
+++ b/components/script/dom/node.rs
@@ -57,7 +57,6 @@ use euclid::point::Point2D;
use euclid::rect::Rect;
use euclid::size::Size2D;
use heapsize::{HeapSizeOf, heap_size_of};
-use html5ever::tree_builder::QuirksMode;
use html5ever_atoms::{Prefix, Namespace, QualName};
use js::jsapi::{JSContext, JSObject, JSRuntime};
use libc::{self, c_void, uintptr_t};
@@ -78,6 +77,7 @@ use std::iter;
use std::mem;
use std::ops::Range;
use std::sync::Arc;
+use style::context::QuirksMode;
use style::dom::OpaqueNode;
use style::selector_parser::{SelectorImpl, SelectorParser};
use style::stylesheets::Stylesheet;
diff --git a/components/script/dom/servoparser/html.rs b/components/script/dom/servoparser/html.rs
index ac6330c3ca2..28f8735891e 100644
--- a/components/script/dom/servoparser/html.rs
+++ b/components/script/dom/servoparser/html.rs
@@ -34,6 +34,7 @@ use js::jsapi::JSTracer;
use servo_url::ServoUrl;
use std::borrow::Cow;
use std::io::{self, Write};
+use style::context::QuirksMode as ServoQuirksMode;
#[derive(HeapSizeOf, JSTraceable)]
#[must_root]
@@ -187,6 +188,11 @@ impl<'a> TreeSink for Sink {
}
fn set_quirks_mode(&mut self, mode: QuirksMode) {
+ let mode = match mode {
+ QuirksMode::Quirks => ServoQuirksMode::Quirks,
+ QuirksMode::LimitedQuirks => ServoQuirksMode::LimitedQuirks,
+ QuirksMode::NoQuirks => ServoQuirksMode::NoQuirks,
+ };
self.document.set_quirks_mode(mode);
}