mshtml: Added IHTMLDocument3::createDocumentFragment implementation.
This commit is contained in:
parent
cb99f716a7
commit
d9aacfd989
|
@ -1930,35 +1930,47 @@ static dispex_static_data_t HTMLDocumentNode_dispex = {
|
||||||
HTMLDocumentNode_iface_tids
|
HTMLDocumentNode_iface_tids
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static HTMLDocumentNode *alloc_doc_node(HTMLDocumentObj *doc_obj, HTMLWindow *window)
|
||||||
|
{
|
||||||
|
HTMLDocumentNode *doc;
|
||||||
|
|
||||||
|
doc = heap_alloc_zero(sizeof(HTMLDocumentNode));
|
||||||
|
if(!doc)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
doc->ref = 1;
|
||||||
|
doc->basedoc.doc_node = doc;
|
||||||
|
doc->basedoc.doc_obj = doc_obj;
|
||||||
|
doc->basedoc.window = window;
|
||||||
|
|
||||||
|
init_dispex(&doc->node.dispex, (IUnknown*)HTMLDOMNODE(&doc->node), &HTMLDocumentNode_dispex);
|
||||||
|
init_doc(&doc->basedoc, (IUnknown*)HTMLDOMNODE(&doc->node), DISPATCHEX(&doc->node.dispex));
|
||||||
|
HTMLDocumentNode_SecMgr_Init(doc);
|
||||||
|
|
||||||
|
init_nsevents(doc);
|
||||||
|
|
||||||
|
list_init(&doc->bindings);
|
||||||
|
list_init(&doc->selection_list);
|
||||||
|
list_init(&doc->range_list);
|
||||||
|
|
||||||
|
return doc;
|
||||||
|
}
|
||||||
|
|
||||||
HRESULT create_doc_from_nsdoc(nsIDOMHTMLDocument *nsdoc, HTMLDocumentObj *doc_obj, HTMLWindow *window, HTMLDocumentNode **ret)
|
HRESULT create_doc_from_nsdoc(nsIDOMHTMLDocument *nsdoc, HTMLDocumentObj *doc_obj, HTMLWindow *window, HTMLDocumentNode **ret)
|
||||||
{
|
{
|
||||||
HTMLDocumentNode *doc;
|
HTMLDocumentNode *doc;
|
||||||
HRESULT hres;
|
HRESULT hres;
|
||||||
|
|
||||||
doc = heap_alloc_zero(sizeof(HTMLDocumentNode));
|
doc = alloc_doc_node(doc_obj, window);
|
||||||
if(!doc)
|
if(!doc)
|
||||||
return E_OUTOFMEMORY;
|
return E_OUTOFMEMORY;
|
||||||
|
|
||||||
doc->basedoc.doc_node = doc;
|
|
||||||
doc->basedoc.doc_obj = doc_obj;
|
|
||||||
|
|
||||||
init_dispex(&doc->node.dispex, (IUnknown*)HTMLDOMNODE(&doc->node), &HTMLDocumentNode_dispex);
|
|
||||||
init_doc(&doc->basedoc, (IUnknown*)HTMLDOMNODE(&doc->node), DISPATCHEX(&doc->node.dispex));
|
|
||||||
HTMLDocumentNode_SecMgr_Init(doc);
|
|
||||||
doc->ref = 1;
|
|
||||||
|
|
||||||
doc->basedoc.window = window;
|
|
||||||
if(window == doc_obj->basedoc.window)
|
if(window == doc_obj->basedoc.window)
|
||||||
doc->basedoc.cp_container.forward_container = &doc_obj->basedoc.cp_container;
|
doc->basedoc.cp_container.forward_container = &doc_obj->basedoc.cp_container;
|
||||||
|
|
||||||
nsIDOMHTMLDocument_AddRef(nsdoc);
|
nsIDOMHTMLDocument_AddRef(nsdoc);
|
||||||
doc->nsdoc = nsdoc;
|
doc->nsdoc = nsdoc;
|
||||||
init_mutation(doc);
|
init_mutation(doc);
|
||||||
init_nsevents(doc);
|
|
||||||
|
|
||||||
list_init(&doc->bindings);
|
|
||||||
list_init(&doc->selection_list);
|
|
||||||
list_init(&doc->range_list);
|
|
||||||
|
|
||||||
HTMLDOMNode_Init(doc, &doc->node, (nsIDOMNode*)nsdoc);
|
HTMLDOMNode_Init(doc, &doc->node, (nsIDOMNode*)nsdoc);
|
||||||
doc->node.vtbl = &HTMLDocumentNodeImplVtbl;
|
doc->node.vtbl = &HTMLDocumentNodeImplVtbl;
|
||||||
|
@ -1974,6 +1986,23 @@ HRESULT create_doc_from_nsdoc(nsIDOMHTMLDocument *nsdoc, HTMLDocumentObj *doc_ob
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HRESULT create_document_fragment(nsIDOMNode *nsnode, HTMLDocumentNode *doc_node, HTMLDocumentNode **ret)
|
||||||
|
{
|
||||||
|
HTMLDocumentNode *doc_frag;
|
||||||
|
|
||||||
|
doc_frag = alloc_doc_node(doc_node->basedoc.doc_obj, doc_node->basedoc.window);
|
||||||
|
if(!doc_frag)
|
||||||
|
return E_OUTOFMEMORY;
|
||||||
|
|
||||||
|
HTMLDOMNode_Init(doc_node, &doc_frag->node, nsnode);
|
||||||
|
doc_frag->node.vtbl = &HTMLDocumentNodeImplVtbl;
|
||||||
|
doc_frag->node.cp_container = &doc_frag->basedoc.cp_container;
|
||||||
|
|
||||||
|
htmldoc_addref(&doc_frag->basedoc);
|
||||||
|
*ret = doc_frag;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
/**********************************************************
|
/**********************************************************
|
||||||
* ICustomDoc implementation
|
* ICustomDoc implementation
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -343,8 +343,31 @@ static HRESULT WINAPI HTMLDocument3_createDocumentFragment(IHTMLDocument3 *iface
|
||||||
IHTMLDocument2 **ppNewDoc)
|
IHTMLDocument2 **ppNewDoc)
|
||||||
{
|
{
|
||||||
HTMLDocument *This = HTMLDOC3_THIS(iface);
|
HTMLDocument *This = HTMLDOC3_THIS(iface);
|
||||||
FIXME("(%p)->(%p)\n", This, ppNewDoc);
|
nsIDOMDocumentFragment *doc_frag;
|
||||||
|
HTMLDocumentNode *docnode;
|
||||||
|
nsresult nsres;
|
||||||
|
HRESULT hres;
|
||||||
|
|
||||||
|
TRACE("(%p)->(%p)\n", This, ppNewDoc);
|
||||||
|
|
||||||
|
if(!This->doc_node->nsdoc) {
|
||||||
|
FIXME("NULL nsdoc\n");
|
||||||
return E_NOTIMPL;
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsres = nsIDOMHTMLDocument_CreateDocumentFragment(This->doc_node->nsdoc, &doc_frag);
|
||||||
|
if(NS_FAILED(nsres)) {
|
||||||
|
ERR("CreateDocumentFragment failed: %08x\n", nsres);
|
||||||
|
return E_FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
hres = create_document_fragment((nsIDOMNode*)doc_frag, This->doc_node, &docnode);
|
||||||
|
nsIDOMDocumentFragment_Release(doc_frag);
|
||||||
|
if(FAILED(hres))
|
||||||
|
return hres;
|
||||||
|
|
||||||
|
*ppNewDoc = HTMLDOC(&docnode->basedoc);
|
||||||
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI HTMLDocument3_get_parentDocument(IHTMLDocument3 *iface,
|
static HRESULT WINAPI HTMLDocument3_get_parentDocument(IHTMLDocument3 *iface,
|
||||||
|
|
|
@ -701,6 +701,7 @@ struct HTMLDocumentNode {
|
||||||
HRESULT HTMLDocument_Create(IUnknown*,REFIID,void**);
|
HRESULT HTMLDocument_Create(IUnknown*,REFIID,void**);
|
||||||
HRESULT HTMLLoadOptions_Create(IUnknown*,REFIID,void**);
|
HRESULT HTMLLoadOptions_Create(IUnknown*,REFIID,void**);
|
||||||
HRESULT create_doc_from_nsdoc(nsIDOMHTMLDocument*,HTMLDocumentObj*,HTMLWindow*,HTMLDocumentNode**);
|
HRESULT create_doc_from_nsdoc(nsIDOMHTMLDocument*,HTMLDocumentObj*,HTMLWindow*,HTMLDocumentNode**);
|
||||||
|
HRESULT create_document_fragment(nsIDOMNode*,HTMLDocumentNode*,HTMLDocumentNode**);
|
||||||
|
|
||||||
HRESULT HTMLWindow_Create(HTMLDocumentObj*,nsIDOMWindow*,HTMLWindow*,HTMLWindow**);
|
HRESULT HTMLWindow_Create(HTMLDocumentObj*,nsIDOMWindow*,HTMLWindow*,HTMLWindow**);
|
||||||
void update_window_doc(HTMLWindow*);
|
void update_window_doc(HTMLWindow*);
|
||||||
|
|
Loading…
Reference in New Issue