diff options
author | bors-servo <release+servo@mozilla.com> | 2014-01-31 01:22:18 -0800 |
---|---|---|
committer | bors-servo <release+servo@mozilla.com> | 2014-01-31 01:22:18 -0800 |
commit | 1bf44289b1779bab79b0cb1b3cbf011864fb49d5 (patch) | |
tree | b559fa5add7a0a900ee09e6fcdbe2fc6fbe3c6ca | |
parent | e2e848c6adae74b564d6696da5a7f9b346347a08 (diff) | |
parent | 56572a28142978c4e6e620c21c0b3e5497e3e477 (diff) | |
download | servo-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.rs | 20 | ||||
-rw-r--r-- | src/components/script/dom/webidls/Document.webidl | 3 | ||||
-rw-r--r-- | src/components/script/html/hubbub_html_parser.rs | 1 | ||||
-rw-r--r-- | src/test/html/content/test_document_compatMode.html | 21 | ||||
-rw-r--r-- | src/test/html/content/test_document_compatMode_loose.html | 13 | ||||
-rw-r--r-- | src/test/html/content/test_document_compatMode_strict.html | 13 |
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> |