diff options
Diffstat (limited to 'components/script/dom/domimplementation.rs')
-rw-r--r-- | components/script/dom/domimplementation.rs | 178 |
1 files changed, 98 insertions, 80 deletions
diff --git a/components/script/dom/domimplementation.rs b/components/script/dom/domimplementation.rs index e0f9d69a45a..d5a3f07bde2 100644 --- a/components/script/dom/domimplementation.rs +++ b/components/script/dom/domimplementation.rs @@ -1,28 +1,30 @@ /* 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::DOMImplementationBinding; -use dom::bindings::codegen::Bindings::DOMImplementationBinding::DOMImplementationMethods; -use dom::bindings::codegen::Bindings::DocumentBinding::DocumentMethods; -use dom::bindings::codegen::Bindings::NodeBinding::NodeMethods; -use dom::bindings::error::Fallible; -use dom::bindings::inheritance::Castable; -use dom::bindings::js::{JS, Root}; -use dom::bindings::reflector::{Reflector, reflect_dom_object}; -use dom::bindings::str::DOMString; -use dom::bindings::xmlname::{namespace_from_domstring, validate_qualified_name}; -use dom::document::{Document, HasBrowsingContext, IsHTMLDocument}; -use dom::document::DocumentSource; -use dom::documenttype::DocumentType; -use dom::htmlbodyelement::HTMLBodyElement; -use dom::htmlheadelement::HTMLHeadElement; -use dom::htmlhtmlelement::HTMLHtmlElement; -use dom::htmltitleelement::HTMLTitleElement; -use dom::node::Node; -use dom::text::Text; -use dom::xmldocument::XMLDocument; + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +use crate::document_loader::DocumentLoader; +use crate::dom::bindings::codegen::Bindings::DOMImplementationBinding::DOMImplementationMethods; +use crate::dom::bindings::codegen::Bindings::DocumentBinding::{ + DocumentMethods, ElementCreationOptions, +}; +use crate::dom::bindings::codegen::Bindings::NodeBinding::NodeMethods; +use crate::dom::bindings::codegen::UnionTypes::StringOrElementCreationOptions; +use crate::dom::bindings::error::Fallible; +use crate::dom::bindings::inheritance::Castable; +use crate::dom::bindings::reflector::{reflect_dom_object, Reflector}; +use crate::dom::bindings::root::{Dom, DomRoot}; +use crate::dom::bindings::str::DOMString; +use crate::dom::bindings::xmlname::{namespace_from_domstring, validate_qualified_name}; +use crate::dom::document::DocumentSource; +use crate::dom::document::{Document, HasBrowsingContext, IsHTMLDocument}; +use crate::dom::documenttype::DocumentType; +use crate::dom::htmlbodyelement::HTMLBodyElement; +use crate::dom::htmlheadelement::HTMLHeadElement; +use crate::dom::htmlhtmlelement::HTMLHtmlElement; +use crate::dom::htmltitleelement::HTMLTitleElement; +use crate::dom::node::Node; +use crate::dom::text::Text; +use crate::dom::xmldocument::XMLDocument; use dom_struct::dom_struct; use script_traits::DocumentActivity; @@ -30,69 +32,83 @@ use script_traits::DocumentActivity; #[dom_struct] pub struct DOMImplementation { reflector_: Reflector, - document: JS<Document>, + document: Dom<Document>, } impl DOMImplementation { fn new_inherited(document: &Document) -> DOMImplementation { DOMImplementation { reflector_: Reflector::new(), - document: JS::from_ref(document), + document: Dom::from_ref(document), } } - pub fn new(document: &Document) -> Root<DOMImplementation> { + pub fn new(document: &Document) -> DomRoot<DOMImplementation> { let window = document.window(); - reflect_dom_object(box DOMImplementation::new_inherited(document), - window, - DOMImplementationBinding::Wrap) + reflect_dom_object(Box::new(DOMImplementation::new_inherited(document)), window) } } // https://dom.spec.whatwg.org/#domimplementation impl DOMImplementationMethods for DOMImplementation { // https://dom.spec.whatwg.org/#dom-domimplementation-createdocumenttype - fn CreateDocumentType(&self, - qualified_name: DOMString, - pubid: DOMString, - sysid: DOMString) - -> Fallible<Root<DocumentType>> { - try!(validate_qualified_name(&qualified_name)); - Ok(DocumentType::new(qualified_name, Some(pubid), Some(sysid), &self.document)) + fn CreateDocumentType( + &self, + qualified_name: DOMString, + pubid: DOMString, + sysid: DOMString, + ) -> Fallible<DomRoot<DocumentType>> { + validate_qualified_name(&qualified_name)?; + Ok(DocumentType::new( + qualified_name, + Some(pubid), + Some(sysid), + &self.document, + )) } // https://dom.spec.whatwg.org/#dom-domimplementation-createdocument - fn CreateDocument(&self, - maybe_namespace: Option<DOMString>, - qname: DOMString, - maybe_doctype: Option<&DocumentType>) - -> Fallible<Root<XMLDocument>> { + fn CreateDocument( + &self, + maybe_namespace: Option<DOMString>, + qname: DOMString, + maybe_doctype: Option<&DocumentType>, + ) -> Fallible<DomRoot<XMLDocument>> { let win = self.document.window(); let loader = DocumentLoader::new(&self.document.loader()); let namespace = namespace_from_domstring(maybe_namespace.to_owned()); let content_type = match namespace { - ns!(html) => "application/xhtml+xml", - ns!(svg) => "image/svg+xml", - _ => "application/xml" + ns!(html) => "application/xhtml+xml".parse().unwrap(), + ns!(svg) => mime::IMAGE_SVG, + _ => "application/xml".parse().unwrap(), }; // Step 1. - let doc = XMLDocument::new(win, - HasBrowsingContext::No, - None, - self.document.origin().clone(), - IsHTMLDocument::NonHTMLDocument, - Some(DOMString::from(content_type)), - None, - DocumentActivity::Inactive, - DocumentSource::NotFromParser, - loader); + let doc = XMLDocument::new( + win, + HasBrowsingContext::No, + None, + self.document.origin().clone(), + IsHTMLDocument::NonHTMLDocument, + Some(content_type), + None, + DocumentActivity::Inactive, + DocumentSource::NotFromParser, + loader, + ); // Step 2-3. let maybe_elem = if qname.is_empty() { None } else { - match doc.upcast::<Document>().CreateElementNS(maybe_namespace, qname) { + let options = + StringOrElementCreationOptions::ElementCreationOptions(ElementCreationOptions { + is: None, + }); + match doc + .upcast::<Document>() + .CreateElementNS(maybe_namespace, qname, options) + { Err(error) => return Err(error), Ok(elem) => Some(elem), } @@ -113,30 +129,33 @@ impl DOMImplementationMethods for DOMImplementation { } // Step 6. - // FIXME: https://github.com/mozilla/servo/issues/1522 + // The origin is already set // Step 7. Ok(doc) } // https://dom.spec.whatwg.org/#dom-domimplementation-createhtmldocument - fn CreateHTMLDocument(&self, title: Option<DOMString>) -> Root<Document> { + fn CreateHTMLDocument(&self, title: Option<DOMString>) -> DomRoot<Document> { let win = self.document.window(); let loader = DocumentLoader::new(&self.document.loader()); // Step 1-2. - let doc = Document::new(win, - HasBrowsingContext::No, - None, - self.document.origin().clone(), - IsHTMLDocument::HTMLDocument, - None, - None, - DocumentActivity::Inactive, - DocumentSource::NotFromParser, - loader, - None, - None); + let doc = Document::new( + win, + HasBrowsingContext::No, + None, + self.document.origin().clone(), + IsHTMLDocument::HTMLDocument, + None, + None, + DocumentActivity::Inactive, + DocumentSource::NotFromParser, + loader, + None, + None, + Default::default(), + ); { // Step 3. @@ -148,25 +167,24 @@ impl DOMImplementationMethods for DOMImplementation { { // Step 4. let doc_node = doc.upcast::<Node>(); - let doc_html = Root::upcast::<Node>(HTMLHtmlElement::new(local_name!("html"), - None, - &doc)); + let doc_html = + DomRoot::upcast::<Node>(HTMLHtmlElement::new(local_name!("html"), None, &doc)); doc_node.AppendChild(&doc_html).expect("Appending failed"); { // Step 5. - let doc_head = Root::upcast::<Node>(HTMLHeadElement::new(local_name!("head"), - None, - &doc)); + let doc_head = + DomRoot::upcast::<Node>(HTMLHeadElement::new(local_name!("head"), None, &doc)); doc_html.AppendChild(&doc_head).unwrap(); // Step 6. if let Some(title_str) = title { // Step 6.1. - let doc_title = - Root::upcast::<Node>(HTMLTitleElement::new(local_name!("title"), - None, - &doc)); + let doc_title = DomRoot::upcast::<Node>(HTMLTitleElement::new( + local_name!("title"), + None, + &doc, + )); doc_head.AppendChild(&doc_title).unwrap(); // Step 6.2. @@ -181,7 +199,7 @@ impl DOMImplementationMethods for DOMImplementation { } // Step 8. - // FIXME: https://github.com/mozilla/servo/issues/1522 + // The origin is already set // Step 9. doc |