mshtml: Get owner document from Gecko node in get_node.
Signed-off-by: Jacek Caban <jacek@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
b5aff99233
commit
23b1d3a79d
|
@ -5205,6 +5205,25 @@ static HRESULT create_document_fragment(nsIDOMNode *nsnode, HTMLDocumentNode *do
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HRESULT get_document_node(nsIDOMDocument *dom_document, HTMLDocumentNode **ret)
|
||||||
|
{
|
||||||
|
HTMLDOMNode *node;
|
||||||
|
HRESULT hres;
|
||||||
|
|
||||||
|
hres = get_node(NULL, (nsIDOMNode*)dom_document, FALSE, &node);
|
||||||
|
if(FAILED(hres))
|
||||||
|
return hres;
|
||||||
|
|
||||||
|
if(!node) {
|
||||||
|
ERR("document not initialized\n");
|
||||||
|
return E_FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
assert(node->vtbl == &HTMLDocumentNodeImplVtbl);
|
||||||
|
*ret = impl_from_HTMLDOMNode(node);
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
static inline HTMLDocumentObj *impl_from_IUnknown(IUnknown *iface)
|
static inline HTMLDocumentObj *impl_from_IUnknown(IUnknown *iface)
|
||||||
{
|
{
|
||||||
return CONTAINING_RECORD(iface, HTMLDocumentObj, IUnknown_outer);
|
return CONTAINING_RECORD(iface, HTMLDocumentObj, IUnknown_outer);
|
||||||
|
|
|
@ -1616,8 +1616,11 @@ void init_node_cc(void)
|
||||||
|
|
||||||
HRESULT get_node(HTMLDocumentNode *This, nsIDOMNode *nsnode, BOOL create, HTMLDOMNode **ret)
|
HRESULT get_node(HTMLDocumentNode *This, nsIDOMNode *nsnode, BOOL create, HTMLDOMNode **ret)
|
||||||
{
|
{
|
||||||
|
nsIDOMDocument *dom_document;
|
||||||
|
HTMLDocumentNode *document;
|
||||||
nsISupports *unk = NULL;
|
nsISupports *unk = NULL;
|
||||||
nsresult nsres;
|
nsresult nsres;
|
||||||
|
HRESULT hres;
|
||||||
|
|
||||||
nsres = nsIDOMNode_GetMshtmlNode(nsnode, &unk);
|
nsres = nsIDOMNode_GetMshtmlNode(nsnode, &unk);
|
||||||
assert(nsres == NS_OK);
|
assert(nsres == NS_OK);
|
||||||
|
@ -1633,5 +1636,18 @@ HRESULT get_node(HTMLDocumentNode *This, nsIDOMNode *nsnode, BOOL create, HTMLDO
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
return create_node(This, nsnode, ret);
|
nsres = nsIDOMNode_GetOwnerDocument(nsnode, &dom_document);
|
||||||
|
if(NS_FAILED(nsres) || !dom_document) {
|
||||||
|
ERR("GetOwnerDocument failed: %08x\n", nsres);
|
||||||
|
return E_FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
hres = get_document_node(dom_document, &document);
|
||||||
|
nsIDOMDocument_Release(dom_document);
|
||||||
|
if(!document)
|
||||||
|
return E_FAIL;
|
||||||
|
|
||||||
|
hres = create_node(document, nsnode, ret);
|
||||||
|
htmldoc_release(&document->basedoc);
|
||||||
|
return hres;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1074,6 +1074,7 @@ void HTMLFrameBase_destructor(HTMLFrameBase*) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
HRESULT get_node(HTMLDocumentNode*,nsIDOMNode*,BOOL,HTMLDOMNode**) DECLSPEC_HIDDEN;
|
HRESULT get_node(HTMLDocumentNode*,nsIDOMNode*,BOOL,HTMLDOMNode**) DECLSPEC_HIDDEN;
|
||||||
HRESULT get_elem(HTMLDocumentNode*,nsIDOMElement*,HTMLElement**) DECLSPEC_HIDDEN;
|
HRESULT get_elem(HTMLDocumentNode*,nsIDOMElement*,HTMLElement**) DECLSPEC_HIDDEN;
|
||||||
|
HRESULT get_document_node(nsIDOMDocument*,HTMLDocumentNode**) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
HTMLElement *unsafe_impl_from_IHTMLElement(IHTMLElement*) DECLSPEC_HIDDEN;
|
HTMLElement *unsafe_impl_from_IHTMLElement(IHTMLElement*) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue