mirror of
https://github.com/servo/servo.git
synced 2025-08-05 05:30:08 +01:00
Merge pull request #2771 from jviereck/fix_2230_link_DOMImplementation_to_document
Link DOMImplementation to the Document; r=Ms2ger
This commit is contained in:
commit
df4bb6947e
2 changed files with 14 additions and 13 deletions
|
@ -329,8 +329,7 @@ impl<'a> DocumentMethods for JSRef<'a, Document> {
|
||||||
// http://dom.spec.whatwg.org/#dom-document-implementation
|
// http://dom.spec.whatwg.org/#dom-document-implementation
|
||||||
fn Implementation(&self) -> Temporary<DOMImplementation> {
|
fn Implementation(&self) -> Temporary<DOMImplementation> {
|
||||||
if self.implementation.get().is_none() {
|
if self.implementation.get().is_none() {
|
||||||
let window = self.window.root();
|
self.implementation.assign(Some(DOMImplementation::new(self)));
|
||||||
self.implementation.assign(Some(DOMImplementation::new(&*window)));
|
|
||||||
}
|
}
|
||||||
Temporary::new(self.implementation.get().get_ref().clone())
|
Temporary::new(self.implementation.get().get_ref().clone())
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,25 +16,26 @@ use dom::htmlhtmlelement::HTMLHtmlElement;
|
||||||
use dom::htmltitleelement::HTMLTitleElement;
|
use dom::htmltitleelement::HTMLTitleElement;
|
||||||
use dom::node::{Node, NodeMethods};
|
use dom::node::{Node, NodeMethods};
|
||||||
use dom::text::Text;
|
use dom::text::Text;
|
||||||
use dom::window::{Window, WindowMethods};
|
|
||||||
use servo_util::str::DOMString;
|
use servo_util::str::DOMString;
|
||||||
|
|
||||||
#[deriving(Encodable)]
|
#[deriving(Encodable)]
|
||||||
pub struct DOMImplementation {
|
pub struct DOMImplementation {
|
||||||
owner: JS<Window>,
|
document: JS<Document>,
|
||||||
reflector_: Reflector,
|
reflector_: Reflector,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl DOMImplementation {
|
impl DOMImplementation {
|
||||||
pub fn new_inherited(owner: &JSRef<Window>) -> DOMImplementation {
|
pub fn new_inherited(document: &JSRef<Document>) -> DOMImplementation {
|
||||||
DOMImplementation {
|
DOMImplementation {
|
||||||
owner: JS::from_rooted(owner),
|
document: JS::from_rooted(document),
|
||||||
reflector_: Reflector::new(),
|
reflector_: Reflector::new(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn new(owner: &JSRef<Window>) -> Temporary<DOMImplementation> {
|
pub fn new(document: &JSRef<Document>) -> Temporary<DOMImplementation> {
|
||||||
reflect_dom_object(box DOMImplementation::new_inherited(owner), owner,
|
let window = document.window.root();
|
||||||
|
reflect_dom_object(box DOMImplementation::new_inherited(document),
|
||||||
|
&*window,
|
||||||
DOMImplementationBinding::Wrap)
|
DOMImplementationBinding::Wrap)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -63,8 +64,7 @@ impl<'a> DOMImplementationMethods for JSRef<'a, DOMImplementation> {
|
||||||
Name => Err(NamespaceError),
|
Name => Err(NamespaceError),
|
||||||
// Step 3.
|
// Step 3.
|
||||||
QName => {
|
QName => {
|
||||||
let owner = self.owner.root();
|
let document = self.document.root();
|
||||||
let document = owner.deref().Document().root();
|
|
||||||
Ok(DocumentType::new(qname, Some(pubid), Some(sysid), &*document))
|
Ok(DocumentType::new(qname, Some(pubid), Some(sysid), &*document))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -73,7 +73,8 @@ impl<'a> DOMImplementationMethods for JSRef<'a, DOMImplementation> {
|
||||||
// http://dom.spec.whatwg.org/#dom-domimplementation-createdocument
|
// http://dom.spec.whatwg.org/#dom-domimplementation-createdocument
|
||||||
fn CreateDocument(&self, namespace: Option<DOMString>, qname: DOMString,
|
fn CreateDocument(&self, namespace: Option<DOMString>, qname: DOMString,
|
||||||
maybe_doctype: Option<JSRef<DocumentType>>) -> Fallible<Temporary<Document>> {
|
maybe_doctype: Option<JSRef<DocumentType>>) -> Fallible<Temporary<Document>> {
|
||||||
let win = self.owner.root();
|
let doc = self.document.root();
|
||||||
|
let win = doc.window.root();
|
||||||
|
|
||||||
// Step 1.
|
// Step 1.
|
||||||
let doc = Document::new(&win.root_ref(), None, NonHTMLDocument, None).root();
|
let doc = Document::new(&win.root_ref(), None, NonHTMLDocument, None).root();
|
||||||
|
@ -117,10 +118,11 @@ impl<'a> DOMImplementationMethods for JSRef<'a, DOMImplementation> {
|
||||||
|
|
||||||
// http://dom.spec.whatwg.org/#dom-domimplementation-createhtmldocument
|
// http://dom.spec.whatwg.org/#dom-domimplementation-createhtmldocument
|
||||||
fn CreateHTMLDocument(&self, title: Option<DOMString>) -> Temporary<Document> {
|
fn CreateHTMLDocument(&self, title: Option<DOMString>) -> Temporary<Document> {
|
||||||
let owner = self.owner.root();
|
let document = self.document.root();
|
||||||
|
let win = document.window.root();
|
||||||
|
|
||||||
// Step 1-2.
|
// Step 1-2.
|
||||||
let doc = Document::new(&owner.root_ref(), None, HTMLDocument, None).root();
|
let doc = Document::new(&win.root_ref(), None, HTMLDocument, None).root();
|
||||||
let doc_node: &JSRef<Node> = NodeCast::from_ref(&*doc);
|
let doc_node: &JSRef<Node> = NodeCast::from_ref(&*doc);
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue