aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/xmldocument.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom/xmldocument.rs')
-rw-r--r--components/script/dom/xmldocument.rs97
1 files changed, 97 insertions, 0 deletions
diff --git a/components/script/dom/xmldocument.rs b/components/script/dom/xmldocument.rs
new file mode 100644
index 00000000000..0553760ca6c
--- /dev/null
+++ b/components/script/dom/xmldocument.rs
@@ -0,0 +1,97 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+use document_loader::DocumentLoader;
+use dom::bindings::codegen::Bindings::DocumentBinding::DocumentMethods;
+use dom::bindings::codegen::Bindings::WindowBinding::WindowMethods;
+use dom::bindings::codegen::Bindings::XMLDocumentBinding::{self, XMLDocumentMethods};
+use dom::bindings::error::Fallible;
+use dom::bindings::global::GlobalRef;
+use dom::bindings::inheritance::Castable;
+use dom::bindings::js::{Root, RootedReference};
+use dom::bindings::reflector::{Reflectable, reflect_dom_object};
+use dom::document::{Document, DocumentSource, IsHTMLDocument};
+use dom::node::Node;
+use dom::window::Window;
+use js::jsapi::{JSContext, JSObject};
+use url::Url;
+use util::str::DOMString;
+
+// https://dom.spec.whatwg.org/#xmldocument
+#[dom_struct]
+pub struct XMLDocument {
+ document: Document,
+}
+
+impl XMLDocument {
+ fn new_inherited(window: &Window,
+ url: Option<Url>,
+ is_html_document: IsHTMLDocument,
+ content_type: Option<DOMString>,
+ last_modified: Option<String>,
+ source: DocumentSource,
+ doc_loader: DocumentLoader) -> XMLDocument {
+ XMLDocument {
+ document: Document::new_inherited(window,
+ url,
+ is_html_document,
+ content_type,
+ last_modified,
+ source,
+ doc_loader),
+ }
+ }
+
+ pub fn new(window: &Window,
+ url: Option<Url>,
+ doctype: IsHTMLDocument,
+ content_type: Option<DOMString>,
+ last_modified: Option<String>,
+ source: DocumentSource,
+ doc_loader: DocumentLoader)
+ -> Root<XMLDocument> {
+ let doc = reflect_dom_object(
+ box XMLDocument::new_inherited(window,
+ url,
+ doctype,
+ content_type,
+ last_modified,
+ source,
+ doc_loader),
+ GlobalRef::Window(window),
+ XMLDocumentBinding::Wrap);
+ {
+ let node = doc.upcast::<Node>();
+ node.set_owner_doc(&doc.r().document);
+ }
+ doc
+ }
+
+ pub fn Constructor(global: GlobalRef) -> Fallible<Root<XMLDocument>> {
+ let win = global.as_window();
+ let doc = win.Document();
+ let doc = doc.r();
+ let docloader = DocumentLoader::new(&*doc.loader());
+
+ Ok(XMLDocument::new(win,
+ None,
+ IsHTMLDocument::NonHTMLDocument,
+ None,
+ None,
+ DocumentSource::NotFromParser,
+ docloader))
+ }
+}
+
+impl XMLDocumentMethods for XMLDocument {
+ // https://html.spec.whatwg.org/multipage/#dom-tree-accessors:supported-property-names
+ fn SupportedPropertyNames(&self) -> Vec<DOMString> {
+ self.document.SupportedPropertyNames()
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-tree-accessors:dom-document-nameditem-filter
+ fn NamedGetter(&self, _cx: *mut JSContext, name: DOMString, found: &mut bool) -> *mut JSObject {
+ self.document.NamedGetter(_cx, name, found)
+ }
+}