aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbors-servo <release+servo@mozilla.com>2014-01-31 01:22:18 -0800
committerbors-servo <release+servo@mozilla.com>2014-01-31 01:22:18 -0800
commit1bf44289b1779bab79b0cb1b3cbf011864fb49d5 (patch)
treeb559fa5add7a0a900ee09e6fcdbe2fc6fbe3c6ca
parente2e848c6adae74b564d6696da5a7f9b346347a08 (diff)
parent56572a28142978c4e6e620c21c0b3e5497e3e477 (diff)
downloadservo-1bf44289b1779bab79b0cb1b3cbf011864fb49d5.tar.gz
servo-1bf44289b1779bab79b0cb1b3cbf011864fb49d5.zip
auto merge of #1599 : brunoabinader/servo/document-compatmode, r=Ms2ger
Spec: http://dom.spec.whatwg.org/#dom-document-compatmode This is a sub-task for #1428.
-rw-r--r--src/components/script/dom/document.rs20
-rw-r--r--src/components/script/dom/webidls/Document.webidl3
-rw-r--r--src/components/script/html/hubbub_html_parser.rs1
-rw-r--r--src/test/html/content/test_document_compatMode.html21
-rw-r--r--src/test/html/content/test_document_compatMode_loose.html13
-rw-r--r--src/test/html/content/test_document_compatMode_strict.html13
6 files changed, 68 insertions, 3 deletions
diff --git a/src/components/script/dom/document.rs b/src/components/script/dom/document.rs
index db6302e34d9..b5d404ca1c2 100644
--- a/src/components/script/dom/document.rs
+++ b/src/components/script/dom/document.rs
@@ -22,6 +22,7 @@ use dom::uievent::UIEvent;
use dom::window::Window;
use dom::htmltitleelement::HTMLTitleElement;
use html::hubbub_html_parser::build_element_from_tag;
+use hubbub::hubbub::{QuirksMode, NoQuirks, LimitedQuirks, FullQuirks};
use layout_interface::{DocumentDamageLevel, ContentChangedDocumentDamage};
use servo_util::namespace::Null;
@@ -91,7 +92,8 @@ pub struct Document {
idmap: HashMap<DOMString, AbstractNode>,
implementation: Option<@mut DOMImplementation>,
content_type: DOMString,
- url: Url
+ url: Url,
+ quirks_mode: QuirksMode
}
impl Document {
@@ -136,7 +138,9 @@ impl Document {
url: match url {
None => from_str("about:blank").unwrap(),
Some(_url) => _url
- }
+ },
+ // http://dom.spec.whatwg.org/#concept-document-quirks
+ quirks_mode: NoQuirks
}
}
@@ -191,6 +195,18 @@ impl Document {
self.URL()
}
+ // http://dom.spec.whatwg.org/#dom-document-compatmode
+ pub fn CompatMode(&self) -> DOMString {
+ match self.quirks_mode {
+ NoQuirks => ~"CSS1Compat",
+ LimitedQuirks | FullQuirks => ~"BackCompat"
+ }
+ }
+
+ pub fn set_quirks_mode(&mut self, mode: QuirksMode) {
+ self.quirks_mode = mode;
+ }
+
// http://dom.spec.whatwg.org/#dom-document-content_type
pub fn ContentType(&self) -> DOMString {
self.content_type.clone()
diff --git a/src/components/script/dom/webidls/Document.webidl b/src/components/script/dom/webidls/Document.webidl
index 6bf6ab776d2..4fa78a479b1 100644
--- a/src/components/script/dom/webidls/Document.webidl
+++ b/src/components/script/dom/webidls/Document.webidl
@@ -28,7 +28,8 @@ interface Document : Node {
readonly attribute DOMImplementation implementation;
readonly attribute DOMString URL;
readonly attribute DOMString documentURI;
- // readonly attribute DOMString compatMode;
+ // readonly attribute DOMString origin;
+ readonly attribute DOMString compatMode;
// readonly attribute DOMString characterSet;
readonly attribute DOMString contentType;
diff --git a/src/components/script/html/hubbub_html_parser.rs b/src/components/script/html/hubbub_html_parser.rs
index d7179221bb5..c9817dbd6ff 100644
--- a/src/components/script/html/hubbub_html_parser.rs
+++ b/src/components/script/html/hubbub_html_parser.rs
@@ -445,6 +445,7 @@ pub fn parse_html(cx: *JSContext,
},
set_quirks_mode: |_mode| {
debug!("set quirks mode");
+ document.mut_document().set_quirks_mode(_mode);
},
encoding_change: |_encname| {
debug!("encoding change");
diff --git a/src/test/html/content/test_document_compatMode.html b/src/test/html/content/test_document_compatMode.html
new file mode 100644
index 00000000000..754512c9a3b
--- /dev/null
+++ b/src/test/html/content/test_document_compatMode.html
@@ -0,0 +1,21 @@
+<html>
+ <head>
+ <script src="harness.js"></script>
+ <script>
+ // test1: BackCompat
+ {
+ is(document.compatMode, "BackCompat", "test1-0, BackCompat");
+ }
+
+ // test2: Non-parsed documents
+ {
+ var xmldoc = new Document;
+ is(xmldoc.compatMode, "CSS1Compat", "test2-0, Non-parsed documents");
+
+ var htmldoc = document.implementation.createHTMLDocument("title");
+ is(htmldoc.compatMode, "CSS1Compat", "test2-1, Non-parsed documents");
+ }
+ finish();
+ </script>
+ </head>
+</html>
diff --git a/src/test/html/content/test_document_compatMode_loose.html b/src/test/html/content/test_document_compatMode_loose.html
new file mode 100644
index 00000000000..8a03b25e5a1
--- /dev/null
+++ b/src/test/html/content/test_document_compatMode_loose.html
@@ -0,0 +1,13 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+<html>
+ <head>
+ <script src="harness.js"></script>
+ <script>
+ // test1: Loose HTML
+ {
+ is(document.compatMode, "BackCompat", "test1-0, Loose HTML");
+ }
+ finish();
+ </script>
+ </head>
+</html>
diff --git a/src/test/html/content/test_document_compatMode_strict.html b/src/test/html/content/test_document_compatMode_strict.html
new file mode 100644
index 00000000000..dd1b566735e
--- /dev/null
+++ b/src/test/html/content/test_document_compatMode_strict.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+ <head>
+ <script src="harness.js"></script>
+ <script>
+ // test1: Strict HTML
+ {
+ is(document.compatMode, "CSS1Compat", "test1-0, Strict HTML");
+ }
+ finish();
+ </script>
+ </head>
+</html>