aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/domimplementation.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom/domimplementation.rs')
-rw-r--r--components/script/dom/domimplementation.rs178
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