From a6c897e445edf93f7ebd2230343d53789409e628 Mon Sep 17 00:00:00 2001 From: Bruno de Oliveira Abinader Date: Fri, 31 Jan 2014 12:18:36 -0400 Subject: [PATCH] Implement document.characterSet Spec: http://dom.spec.whatwg.org/#dom-document-characterset This is a sub-task for #1428. --- src/components/script/dom/document.rs | 16 ++++++++++++-- .../script/dom/webidls/Document.webidl | 2 +- .../script/html/hubbub_html_parser.rs | 7 ++++--- .../content/test_document_characterSet.html | 21 +++++++++++++++++++ .../test_document_characterSet_default.html | 15 +++++++++++++ .../test_document_characterSet_invalid.html | 15 +++++++++++++ .../test_document_characterSet_long.html | 15 +++++++++++++ .../test_document_characterSet_short.html | 15 +++++++++++++ 8 files changed, 100 insertions(+), 6 deletions(-) create mode 100644 src/test/html/content/test_document_characterSet.html create mode 100644 src/test/html/content/test_document_characterSet_default.html create mode 100644 src/test/html/content/test_document_characterSet_invalid.html create mode 100644 src/test/html/content/test_document_characterSet_long.html create mode 100644 src/test/html/content/test_document_characterSet_short.html diff --git a/src/components/script/dom/document.rs b/src/components/script/dom/document.rs index b5d404ca1c2..84343959866 100644 --- a/src/components/script/dom/document.rs +++ b/src/components/script/dom/document.rs @@ -93,7 +93,8 @@ pub struct Document { implementation: Option<@mut DOMImplementation>, content_type: DOMString, url: Url, - quirks_mode: QuirksMode + quirks_mode: QuirksMode, + encoding_name: DOMString, } impl Document { @@ -140,7 +141,9 @@ impl Document { Some(_url) => _url }, // http://dom.spec.whatwg.org/#concept-document-quirks - quirks_mode: NoQuirks + quirks_mode: NoQuirks, + // http://dom.spec.whatwg.org/#concept-document-encoding + encoding_name: ~"utf-8", } } @@ -207,6 +210,15 @@ impl Document { self.quirks_mode = mode; } + // http://dom.spec.whatwg.org/#dom-document-characterset + pub fn CharacterSet(&self) -> DOMString { + self.encoding_name.to_ascii_lower() + } + + pub fn set_encoding_name(&mut self, name: DOMString) { + self.encoding_name = name; + } + // 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 4fa78a479b1..975fac355e2 100644 --- a/src/components/script/dom/webidls/Document.webidl +++ b/src/components/script/dom/webidls/Document.webidl @@ -30,7 +30,7 @@ interface Document : Node { readonly attribute DOMString documentURI; // readonly attribute DOMString origin; readonly attribute DOMString compatMode; - // readonly attribute DOMString characterSet; + readonly attribute DOMString characterSet; readonly attribute DOMString contentType; readonly attribute DocumentType? doctype; diff --git a/src/components/script/html/hubbub_html_parser.rs b/src/components/script/html/hubbub_html_parser.rs index c9817dbd6ff..09956f6a6ef 100644 --- a/src/components/script/html/hubbub_html_parser.rs +++ b/src/components/script/html/hubbub_html_parser.rs @@ -443,12 +443,13 @@ pub fn parse_html(cx: *JSContext, add_attributes: |_node, _attributes| { debug!("add attributes"); }, - set_quirks_mode: |_mode| { + set_quirks_mode: |mode| { debug!("set quirks mode"); - document.mut_document().set_quirks_mode(_mode); + document.mut_document().set_quirks_mode(mode); }, - encoding_change: |_encname| { + encoding_change: |encname| { debug!("encoding change"); + document.mut_document().set_encoding_name(encname); }, complete_script: |script| { unsafe { diff --git a/src/test/html/content/test_document_characterSet.html b/src/test/html/content/test_document_characterSet.html new file mode 100644 index 00000000000..c1d5ed9f103 --- /dev/null +++ b/src/test/html/content/test_document_characterSet.html @@ -0,0 +1,21 @@ + + + + + + + + diff --git a/src/test/html/content/test_document_characterSet_default.html b/src/test/html/content/test_document_characterSet_default.html new file mode 100644 index 00000000000..08fc63075e2 --- /dev/null +++ b/src/test/html/content/test_document_characterSet_default.html @@ -0,0 +1,15 @@ + + + + + + + diff --git a/src/test/html/content/test_document_characterSet_invalid.html b/src/test/html/content/test_document_characterSet_invalid.html new file mode 100644 index 00000000000..80984ad3e45 --- /dev/null +++ b/src/test/html/content/test_document_characterSet_invalid.html @@ -0,0 +1,15 @@ + + + + + + + + diff --git a/src/test/html/content/test_document_characterSet_long.html b/src/test/html/content/test_document_characterSet_long.html new file mode 100644 index 00000000000..abf547127a8 --- /dev/null +++ b/src/test/html/content/test_document_characterSet_long.html @@ -0,0 +1,15 @@ + + + + + + + + diff --git a/src/test/html/content/test_document_characterSet_short.html b/src/test/html/content/test_document_characterSet_short.html new file mode 100644 index 00000000000..358d4f8ba74 --- /dev/null +++ b/src/test/html/content/test_document_characterSet_short.html @@ -0,0 +1,15 @@ + + + + + + + +