diff --git a/dlls/mshtml/editor.c b/dlls/mshtml/editor.c index a1d7b38b8e2..651e856dae9 100644 --- a/dlls/mshtml/editor.c +++ b/dlls/mshtml/editor.c @@ -340,7 +340,7 @@ static void set_font_size(HTMLDocument *This, LPCWSTR size) nsAString size_str; nsAString val_str; - if(!This->nsdoc) { + if(!This->doc_node->nsdoc) { WARN("NULL nsdoc\n"); return; } @@ -1155,7 +1155,7 @@ static HRESULT exec_hyperlink(HTMLDocument *This, DWORD cmdexecopt, VARIANT *in, return OLECMDERR_E_CANCELED; } - if(!This->nsdoc) { + if(!This->doc_node->nsdoc) { WARN("NULL nsdoc\n"); return E_UNEXPECTED; } @@ -1178,7 +1178,7 @@ static HRESULT exec_hyperlink(HTMLDocument *This, DWORD cmdexecopt, VARIANT *in, if (insert_link_at_caret) { nsIDOMNode *text_node, *unused_node; - nsIDOMDocument_CreateTextNode(This->nsdoc, &ns_url, (nsIDOMText **)&text_node); + nsIDOMDocument_CreateTextNode(This->doc_node->nsdoc, &ns_url, (nsIDOMText **)&text_node); /* wrap the tags around the text element */ nsIDOMElement_AppendChild(anchor_elem, text_node, &unused_node); diff --git a/dlls/mshtml/htmlbody.c b/dlls/mshtml/htmlbody.c index 5e0a68665c3..50fb9cfe9f5 100644 --- a/dlls/mshtml/htmlbody.c +++ b/dlls/mshtml/htmlbody.c @@ -606,12 +606,12 @@ static HRESULT WINAPI HTMLBodyElement_createTextRange(IHTMLBodyElement *iface, I TRACE("(%p)->(%p)\n", This, range); - if(!This->textcont.element.node.doc->basedoc.nsdoc) { + if(!This->textcont.element.node.doc->nsdoc) { WARN("No nsdoc\n"); return E_UNEXPECTED; } - nsres = nsIDOMDocument_QueryInterface(This->textcont.element.node.doc->basedoc.nsdoc, &IID_nsIDOMDocumentRange, + nsres = nsIDOMDocument_QueryInterface(This->textcont.element.node.doc->nsdoc, &IID_nsIDOMDocumentRange, (void**)&nsdocrange); if(NS_FAILED(nsres)) { ERR("Could not get nsIDOMDocumentRabge iface: %08x\n", nsres); diff --git a/dlls/mshtml/htmlcurstyle.c b/dlls/mshtml/htmlcurstyle.c index dc23e8ca857..4f56e87e428 100644 --- a/dlls/mshtml/htmlcurstyle.c +++ b/dlls/mshtml/htmlcurstyle.c @@ -899,12 +899,12 @@ HRESULT HTMLCurrentStyle_Create(HTMLElement *elem, IHTMLCurrentStyle **p) HTMLCurrentStyle *ret; nsresult nsres; - if(!elem->node.doc->basedoc.nsdoc) { + if(!elem->node.doc->nsdoc) { WARN("NULL nsdoc\n"); return E_UNEXPECTED; } - nsres = nsIDOMHTMLDocument_QueryInterface(elem->node.doc->basedoc.nsdoc, &IID_nsIDOMDocumentView, (void**)&nsdocview); + nsres = nsIDOMHTMLDocument_QueryInterface(elem->node.doc->nsdoc, &IID_nsIDOMDocumentView, (void**)&nsdocview); if(NS_FAILED(nsres)) { ERR("Could not get nsIDOMDocumentView: %08x\n", nsres); return E_FAIL; diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c index f0c636044a8..cf663d5a9c3 100644 --- a/dlls/mshtml/htmldoc.c +++ b/dlls/mshtml/htmldoc.c @@ -113,12 +113,12 @@ static HRESULT WINAPI HTMLDocument_get_all(IHTMLDocument2 *iface, IHTMLElementCo TRACE("(%p)->(%p)\n", This, p); - if(!This->nsdoc) { + if(!This->doc_node->nsdoc) { WARN("NULL nsdoc\n"); return E_UNEXPECTED; } - nsres = nsIDOMHTMLDocument_GetDocumentElement(This->nsdoc, &nselem); + nsres = nsIDOMHTMLDocument_GetDocumentElement(This->doc_node->nsdoc, &nselem); if(NS_FAILED(nsres)) { ERR("GetDocumentElement failed: %08x\n", nsres); return E_FAIL; @@ -143,12 +143,12 @@ static HRESULT WINAPI HTMLDocument_get_body(IHTMLDocument2 *iface, IHTMLElement TRACE("(%p)->(%p)\n", This, p); - if(!This->nsdoc) { + if(!This->doc_node->nsdoc) { WARN("NULL nsdoc\n"); return E_UNEXPECTED; } - nsres = nsIDOMHTMLDocument_GetBody(This->nsdoc, &nsbody); + nsres = nsIDOMHTMLDocument_GetBody(This->doc_node->nsdoc, &nsbody); if(NS_FAILED(nsres)) { TRACE("Could not get body: %08x\n", nsres); return E_UNEXPECTED; @@ -187,12 +187,12 @@ static HRESULT WINAPI HTMLDocument_get_images(IHTMLDocument2 *iface, IHTMLElemen *p = NULL; - if(!This->nsdoc) { + if(!This->doc_node->nsdoc) { WARN("NULL nsdoc\n"); return E_UNEXPECTED; } - nsres = nsIDOMHTMLDocument_GetImages(This->nsdoc, &nscoll); + nsres = nsIDOMHTMLDocument_GetImages(This->doc_node->nsdoc, &nscoll); if(NS_FAILED(nsres)) { ERR("GetImages failed: %08x\n", nsres); return E_FAIL; @@ -219,12 +219,12 @@ static HRESULT WINAPI HTMLDocument_get_applets(IHTMLDocument2 *iface, IHTMLEleme *p = NULL; - if(!This->nsdoc) { + if(!This->doc_node->nsdoc) { WARN("NULL nsdoc\n"); return E_UNEXPECTED; } - nsres = nsIDOMHTMLDocument_GetApplets(This->nsdoc, &nscoll); + nsres = nsIDOMHTMLDocument_GetApplets(This->doc_node->nsdoc, &nscoll); if(NS_FAILED(nsres)) { ERR("GetApplets failed: %08x\n", nsres); return E_FAIL; @@ -251,12 +251,12 @@ static HRESULT WINAPI HTMLDocument_get_links(IHTMLDocument2 *iface, IHTMLElement *p = NULL; - if(!This->nsdoc) { + if(!This->doc_node->nsdoc) { WARN("NULL nsdoc\n"); return E_UNEXPECTED; } - nsres = nsIDOMHTMLDocument_GetLinks(This->nsdoc, &nscoll); + nsres = nsIDOMHTMLDocument_GetLinks(This->doc_node->nsdoc, &nscoll); if(NS_FAILED(nsres)) { ERR("GetLinks failed: %08x\n", nsres); return E_FAIL; @@ -283,12 +283,12 @@ static HRESULT WINAPI HTMLDocument_get_forms(IHTMLDocument2 *iface, IHTMLElement *p = NULL; - if(!This->nsdoc) { + if(!This->doc_node->nsdoc) { WARN("NULL nsdoc\n"); return E_UNEXPECTED; } - nsres = nsIDOMHTMLDocument_GetForms(This->nsdoc, &nscoll); + nsres = nsIDOMHTMLDocument_GetForms(This->doc_node->nsdoc, &nscoll); if(NS_FAILED(nsres)) { ERR("GetForms failed: %08x\n", nsres); return E_FAIL; @@ -315,12 +315,12 @@ static HRESULT WINAPI HTMLDocument_get_anchors(IHTMLDocument2 *iface, IHTMLEleme *p = NULL; - if(!This->nsdoc) { + if(!This->doc_node->nsdoc) { WARN("NULL nsdoc\n"); return E_UNEXPECTED; } - nsres = nsIDOMHTMLDocument_GetAnchors(This->nsdoc, &nscoll); + nsres = nsIDOMHTMLDocument_GetAnchors(This->doc_node->nsdoc, &nscoll); if(NS_FAILED(nsres)) { ERR("GetAnchors failed: %08x\n", nsres); return E_FAIL; @@ -342,13 +342,13 @@ static HRESULT WINAPI HTMLDocument_put_title(IHTMLDocument2 *iface, BSTR v) TRACE("(%p)->(%s)\n", This, debugstr_w(v)); - if(!This->nsdoc) { + if(!This->doc_node->nsdoc) { WARN("NULL nsdoc\n"); return E_UNEXPECTED; } nsAString_Init(&nsstr, v); - nsres = nsIDOMHTMLDocument_SetTitle(This->nsdoc, &nsstr); + nsres = nsIDOMHTMLDocument_SetTitle(This->doc_node->nsdoc, &nsstr); nsAString_Finish(&nsstr); if(NS_FAILED(nsres)) ERR("SetTitle failed: %08x\n", nsres); @@ -365,14 +365,14 @@ static HRESULT WINAPI HTMLDocument_get_title(IHTMLDocument2 *iface, BSTR *p) TRACE("(%p)->(%p)\n", This, p); - if(!This->nsdoc) { + if(!This->doc_node->nsdoc) { WARN("NULL nsdoc\n"); return E_UNEXPECTED; } nsAString_Init(&nsstr, NULL); - nsres = nsIDOMHTMLDocument_GetTitle(This->nsdoc, &nsstr); + nsres = nsIDOMHTMLDocument_GetTitle(This->doc_node->nsdoc, &nsstr); if (NS_SUCCEEDED(nsres)) { nsAString_GetData(&nsstr, &ret); *p = SysAllocString(ret); @@ -727,7 +727,7 @@ static HRESULT document_write(HTMLDocument *This, SAFEARRAY *psarray, BOOL ln) nsresult nsres; HRESULT hres; - if(!This->nsdoc) { + if(!This->doc_node->nsdoc) { WARN("NULL nsdoc\n"); return E_UNEXPECTED; } @@ -750,9 +750,9 @@ static HRESULT document_write(HTMLDocument *This, SAFEARRAY *psarray, BOOL ln) if(V_VT(var+i) == VT_BSTR) { nsAString_SetData(&nsstr, V_BSTR(var+i)); if(!ln || i != argc-1) - nsres = nsIDOMHTMLDocument_Write(This->nsdoc, &nsstr); + nsres = nsIDOMHTMLDocument_Write(This->doc_node->nsdoc, &nsstr); else - nsres = nsIDOMHTMLDocument_Writeln(This->nsdoc, &nsstr); + nsres = nsIDOMHTMLDocument_Writeln(This->doc_node->nsdoc, &nsstr); if(NS_FAILED(nsres)) ERR("Write failed: %08x\n", nsres); }else { @@ -795,7 +795,7 @@ static HRESULT WINAPI HTMLDocument_open(IHTMLDocument2 *iface, BSTR url, VARIANT TRACE("(%p)->(%s %s %s %s %p)\n", This, debugstr_w(url), debugstr_variant(&name), debugstr_variant(&features), debugstr_variant(&replace), pomWindowResult); - if(!This->nsdoc) { + if(!This->doc_node->nsdoc) { ERR("!nsdoc\n"); return E_NOTIMPL; } @@ -804,7 +804,7 @@ static HRESULT WINAPI HTMLDocument_open(IHTMLDocument2 *iface, BSTR url, VARIANT || V_VT(&features) != VT_ERROR || V_VT(&replace) != VT_ERROR) FIXME("unsupported args\n"); - nsres = nsIDOMHTMLDocument_Open(This->nsdoc); + nsres = nsIDOMHTMLDocument_Open(This->doc_node->nsdoc); if(NS_FAILED(nsres)) { ERR("Open failed: %08x\n", nsres); return E_FAIL; @@ -822,12 +822,12 @@ static HRESULT WINAPI HTMLDocument_close(IHTMLDocument2 *iface) TRACE("(%p)\n", This); - if(!This->nsdoc) { + if(!This->doc_node->nsdoc) { ERR("!nsdoc\n"); return E_NOTIMPL; } - nsres = nsIDOMHTMLDocument_Close(This->nsdoc); + nsres = nsIDOMHTMLDocument_Close(This->doc_node->nsdoc); if(NS_FAILED(nsres)) { ERR("Close failed: %08x\n", nsres); return E_FAIL; @@ -1222,12 +1222,12 @@ static HRESULT WINAPI HTMLDocument_get_styleSheets(IHTMLDocument2 *iface, *p = NULL; - if(!This->nsdoc) { + if(!This->doc_node->nsdoc) { WARN("NULL nsdoc\n"); return E_UNEXPECTED; } - nsIDOMHTMLDocument_QueryInterface(This->nsdoc, &IID_nsIDOMDocumentStyle, (void**)&nsdocstyle); + nsIDOMHTMLDocument_QueryInterface(This->doc_node->nsdoc, &IID_nsIDOMDocumentStyle, (void**)&nsdocstyle); nsres = nsIDOMDocumentStyle_GetStyleSheets(nsdocstyle, &nsstylelist); nsIDOMDocumentStyle_Release(nsdocstyle); if(NS_FAILED(nsres)) { @@ -1736,9 +1736,6 @@ static void destroy_htmldoc(HTMLDocument *This) remove_doc_tasks(This); ConnectionPointContainer_Destroy(&This->cp_container); - - if(This->nsdoc) - nsIDOMHTMLDocument_Release(This->nsdoc); } #define HTMLDOCNODE_NODE_THIS(iface) DEFINE_THIS2(HTMLDocumentNode, node, iface) @@ -1771,6 +1768,10 @@ static void HTMLDocumentNode_destructor(HTMLDOMNode *iface) detach_selection(This); detach_ranges(This); release_nodes(This); + + if(This->nsdoc) + nsIDOMHTMLDocument_Release(This->nsdoc); + destroy_htmldoc(&This->basedoc); } @@ -1816,7 +1817,7 @@ HRESULT create_doc_from_nsdoc(nsIDOMHTMLDocument *nsdoc, HTMLDocumentObj *doc_ob doc->ref = 1; nsIDOMHTMLDocument_AddRef(nsdoc); - doc->basedoc.nsdoc = nsdoc; + doc->nsdoc = nsdoc; doc->basedoc.window = window; @@ -1885,6 +1886,8 @@ static ULONG WINAPI CustomDoc_Release(ICustomDoc *iface) set_document_bscallback(&This->basedoc, NULL); set_current_mon(&This->basedoc, NULL); if(This->basedoc.doc_node) { + if(This->basedoc.doc_node->nsdoc) + remove_mutation_observer(This->nscontainer, This->basedoc.doc_node->nsdoc); This->basedoc.doc_node->basedoc.doc_obj = NULL; IHTMLDocument2_Release(HTMLDOC(&This->basedoc.doc_node->basedoc)); } @@ -1911,8 +1914,6 @@ static ULONG WINAPI CustomDoc_Release(ICustomDoc *iface) destroy_htmldoc(&This->basedoc); release_dispex(&This->dispex); - if(This->basedoc.nsdoc) - remove_mutation_observer(This->nscontainer, This->basedoc.nsdoc); if(This->nscontainer) NSContainer_Release(This->nscontainer); heap_free(This); diff --git a/dlls/mshtml/htmldoc3.c b/dlls/mshtml/htmldoc3.c index c5a7a97221e..e4c2d4f2c92 100644 --- a/dlls/mshtml/htmldoc3.c +++ b/dlls/mshtml/htmldoc3.c @@ -111,13 +111,13 @@ static HRESULT WINAPI HTMLDocument3_createTextNode(IHTMLDocument3 *iface, BSTR t TRACE("(%p)->(%s %p)\n", This, debugstr_w(text), newTextNode); - if(!This->nsdoc) { + if(!This->doc_node->nsdoc) { WARN("NULL nsdoc\n"); return E_UNEXPECTED; } nsAString_Init(&text_str, text); - nsres = nsIDOMHTMLDocument_CreateTextNode(This->nsdoc, &text_str, &nstext); + nsres = nsIDOMHTMLDocument_CreateTextNode(This->doc_node->nsdoc, &text_str, &nstext); nsAString_Finish(&text_str); if(NS_FAILED(nsres)) { ERR("CreateTextNode failed: %08x\n", nsres); @@ -146,12 +146,12 @@ static HRESULT WINAPI HTMLDocument3_get_documentElement(IHTMLDocument3 *iface, I return S_OK; } - if(!This->nsdoc) { + if(!This->doc_node->nsdoc) { WARN("NULL nsdoc\n"); return E_UNEXPECTED; } - nsres = nsIDOMHTMLDocument_GetDocumentElement(This->nsdoc, &nselem); + nsres = nsIDOMHTMLDocument_GetDocumentElement(This->doc_node->nsdoc, &nselem); if(NS_FAILED(nsres)) { ERR("GetDocumentElement failed: %08x\n", nsres); return E_FAIL; @@ -436,13 +436,13 @@ static HRESULT WINAPI HTMLDocument3_getElementById(IHTMLDocument3 *iface, BSTR v TRACE("(%p)->(%s %p)\n", This, debugstr_w(v), pel); - if(!This->nsdoc) { + if(!This->doc_node->nsdoc) { WARN("NULL nsdoc\n"); return E_UNEXPECTED; } nsAString_Init(&id_str, v); - nsres = nsIDOMHTMLDocument_GetElementById(This->nsdoc, &id_str, &nselem); + nsres = nsIDOMHTMLDocument_GetElementById(This->doc_node->nsdoc, &id_str, &nselem); nsAString_Finish(&id_str); if(FAILED(nsres)) { ERR("GetElementById failed: %08x\n", nsres); @@ -473,14 +473,14 @@ static HRESULT WINAPI HTMLDocument3_getElementsByTagName(IHTMLDocument3 *iface, TRACE("(%p)->(%s %p)\n", This, debugstr_w(v), pelColl); - if(!This->nsdoc) { + if(!This->doc_node->nsdoc) { WARN("NULL nsdoc\n"); return E_UNEXPECTED; } nsAString_Init(&id_str, v); nsAString_Init(&ns_str, str); - nsres = nsIDOMHTMLDocument_GetElementsByTagNameNS(This->nsdoc, &ns_str, &id_str, &nslist); + nsres = nsIDOMHTMLDocument_GetElementsByTagNameNS(This->doc_node->nsdoc, &ns_str, &id_str, &nslist); nsAString_Finish(&id_str); nsAString_Finish(&ns_str); if(FAILED(nsres)) { @@ -607,7 +607,7 @@ static HRESULT WINAPI HTMLDocument4_focus(IHTMLDocument4 *iface) TRACE("(%p)->()\n", This); - nsres = nsIDOMHTMLDocument_GetBody(This->nsdoc, &nsbody); + nsres = nsIDOMHTMLDocument_GetBody(This->doc_node->nsdoc, &nsbody); if(NS_FAILED(nsres) || !nsbody) { ERR("GetBody failed: %08x\n", nsres); return E_FAIL; diff --git a/dlls/mshtml/htmldoc5.c b/dlls/mshtml/htmldoc5.c index 4c8d173c796..e3b14231e69 100644 --- a/dlls/mshtml/htmldoc5.c +++ b/dlls/mshtml/htmldoc5.c @@ -131,13 +131,13 @@ static HRESULT WINAPI HTMLDocument5_createComment(IHTMLDocument5 *iface, BSTR bs TRACE("(%p)->(%s %p)\n", This, debugstr_w(bstrdata), ppRetNode); - if(!This->nsdoc) { + if(!This->doc_node->nsdoc) { WARN("NULL nsdoc\n"); return E_UNEXPECTED; } nsAString_Init(&str, bstrdata); - nsres = nsIDOMHTMLDocument_CreateComment(This->nsdoc, &str, &nscomment); + nsres = nsIDOMHTMLDocument_CreateComment(This->doc_node->nsdoc, &str, &nscomment); nsAString_Finish(&str); if(NS_FAILED(nsres)) { ERR("CreateTextNode failed: %08x\n", nsres); @@ -246,12 +246,12 @@ static HRESULT WINAPI HTMLDocument5_get_compatMode(IHTMLDocument5 *iface, BSTR * TRACE("(%p)->(%p)\n", This, p); - if(!This->nsdoc) { + if(!This->doc_node->nsdoc) { WARN("NULL nsdoc\n"); return E_UNEXPECTED; } - nsres = nsIDOMHTMLDocument_QueryInterface(This->nsdoc, &IID_nsIDOMNSHTMLDocument, (void**)&nshtmldoc); + nsres = nsIDOMHTMLDocument_QueryInterface(This->doc_node->nsdoc, &IID_nsIDOMNSHTMLDocument, (void**)&nshtmldoc); if(NS_FAILED(nsres)) { ERR("Could not get nsIDOMNSHTMLDocument: %08x\n", nsres); return S_OK; diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index 24e8e15364f..ebfbcdc99b6 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -44,13 +44,13 @@ HRESULT create_nselem(HTMLDocumentNode *doc, const WCHAR *tag, nsIDOMHTMLElement nsAString tag_str; nsresult nsres; - if(!doc->basedoc.nsdoc) { + if(!doc->nsdoc) { WARN("NULL nsdoc\n"); return E_UNEXPECTED; } nsAString_Init(&tag_str, tag); - nsres = nsIDOMDocument_CreateElement(doc->basedoc.nsdoc, &tag_str, &nselem); + nsres = nsIDOMDocument_CreateElement(doc->nsdoc, &tag_str, &nselem); nsAString_Finish(&tag_str); if(NS_FAILED(nsres)) { ERR("CreateElement failed: %08x\n", nsres); @@ -879,7 +879,7 @@ static HRESULT WINAPI HTMLElement_put_innerText(IHTMLElement *iface, BSTR v) } nsAString_Init(&text_str, v); - nsres = nsIDOMHTMLDocument_CreateTextNode(This->node.doc->basedoc.nsdoc, &text_str, &text_node); + nsres = nsIDOMHTMLDocument_CreateTextNode(This->node.doc->nsdoc, &text_str, &text_node); nsAString_Finish(&text_str); if(NS_FAILED(nsres)) { ERR("CreateTextNode failed: %08x\n", nsres); @@ -1035,12 +1035,12 @@ static HRESULT WINAPI HTMLElement_insertAdjacentHTML(IHTMLElement *iface, BSTR w TRACE("(%p)->(%s %s)\n", This, debugstr_w(where), debugstr_w(html)); - if(!This->node.doc->basedoc.nsdoc) { + if(!This->node.doc->nsdoc) { WARN("NULL nsdoc\n"); return E_UNEXPECTED; } - nsres = nsIDOMDocument_QueryInterface(This->node.doc->basedoc.nsdoc, &IID_nsIDOMDocumentRange, (void **)&nsdocrange); + nsres = nsIDOMDocument_QueryInterface(This->node.doc->nsdoc, &IID_nsIDOMDocumentRange, (void **)&nsdocrange); if(NS_FAILED(nsres)) { ERR("getting nsIDOMDocumentRange failed: %08x\n", nsres); @@ -1093,14 +1093,14 @@ static HRESULT WINAPI HTMLElement_insertAdjacentText(IHTMLElement *iface, BSTR w TRACE("(%p)->(%s %s)\n", This, debugstr_w(where), debugstr_w(text)); - if(!This->node.doc->basedoc.nsdoc) { + if(!This->node.doc->nsdoc) { WARN("NULL nsdoc\n"); return E_UNEXPECTED; } nsAString_Init(&ns_text, text); - nsres = nsIDOMDocument_CreateTextNode(This->node.doc->basedoc.nsdoc, &ns_text, (nsIDOMText **)&nsnode); + nsres = nsIDOMDocument_CreateTextNode(This->node.doc->nsdoc, &ns_text, (nsIDOMText **)&nsnode); nsAString_Finish(&ns_text); if(NS_FAILED(nsres) || !nsnode) diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c index a6c95a3e1d0..d1cc6b7dcd1 100644 --- a/dlls/mshtml/htmlevent.c +++ b/dlls/mshtml/htmlevent.c @@ -713,7 +713,7 @@ static IHTMLEventObj *create_event(HTMLDOMNode *target, eventid_t eid, nsIDOMEve nsIDOMDocumentEvent *doc_event; nsresult nsres; - nsres = nsIDOMHTMLDocument_QueryInterface(target->doc->basedoc.nsdoc, &IID_nsIDOMDocumentEvent, + nsres = nsIDOMHTMLDocument_QueryInterface(target->doc->nsdoc, &IID_nsIDOMDocumentEvent, (void**)&doc_event); if(NS_SUCCEEDED(nsres)) { nsAString type_str; @@ -827,7 +827,7 @@ void fire_event(HTMLDocumentNode *doc, eventid_t eid, nsIDOMNode *target, nsIDOM nsIDOMHTMLElement *nsbody; nsresult nsres; - nsres = nsIDOMHTMLDocument_GetBody(doc->basedoc.nsdoc, &nsbody); + nsres = nsIDOMHTMLDocument_GetBody(doc->nsdoc, &nsbody); if(NS_SUCCEEDED(nsres) && nsbody) { node = get_node(doc, (nsIDOMNode*)nsbody, FALSE); if(node) diff --git a/dlls/mshtml/htmloption.c b/dlls/mshtml/htmloption.c index e034d9d2e08..92c666bfbca 100644 --- a/dlls/mshtml/htmloption.c +++ b/dlls/mshtml/htmloption.c @@ -187,7 +187,7 @@ static HRESULT WINAPI HTMLOptionElement_put_text(IHTMLOptionElement *iface, BSTR TRACE("(%p)->(%s)\n", This, debugstr_w(v)); - if(!This->element.node.doc->basedoc.nsdoc) { + if(!This->element.node.doc->nsdoc) { WARN("NULL nsdoc\n"); return E_UNEXPECTED; } @@ -210,7 +210,7 @@ static HRESULT WINAPI HTMLOptionElement_put_text(IHTMLOptionElement *iface, BSTR } nsAString_Init(&text_str, v); - nsres = nsIDOMHTMLDocument_CreateTextNode(This->element.node.doc->basedoc.nsdoc, &text_str, &text_node); + nsres = nsIDOMHTMLDocument_CreateTextNode(This->element.node.doc->nsdoc, &text_str, &text_node); nsAString_Finish(&text_str); if(NS_FAILED(nsres)) { ERR("CreateTextNode failed: %08x\n", nsres); diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 299f968aa5e..aa46dac1ff2 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -291,7 +291,6 @@ struct HTMLDocument { HTMLDocumentNode *doc_node; HTMLWindow *window; - nsIDOMHTMLDocument *nsdoc; ConnectionPointContainer cp_container; ConnectionPoint cp_htmldocevents; @@ -485,6 +484,7 @@ struct HTMLDocumentNode { LONG ref; + nsIDOMHTMLDocument *nsdoc; HTMLDOMNode *nodes; BOOL content_ready; diff --git a/dlls/mshtml/mutation.c b/dlls/mshtml/mutation.c index 023c9c4122a..0ea1bf24d17 100644 --- a/dlls/mshtml/mutation.c +++ b/dlls/mshtml/mutation.c @@ -73,7 +73,7 @@ void remove_mutation_observer(NSContainer *nscontainer, nsIDOMHTMLDocument *nsht #define IE_MAJOR_VERSION 7 #define IE_MINOR_VERSION 0 -static BOOL handle_insert_comment(HTMLDocument *doc, const PRUnichar *comment) +static BOOL handle_insert_comment(HTMLDocumentNode *doc, const PRUnichar *comment) { DWORD len; int majorv = 0, minorv = 0; @@ -214,7 +214,7 @@ static void add_script_runner(NSContainer *This) nsIDOMNSDocument *nsdoc; nsresult nsres; - nsres = nsIDOMHTMLDocument_QueryInterface(This->doc->basedoc.nsdoc, &IID_nsIDOMNSDocument, (void**)&nsdoc); + nsres = nsIDOMHTMLDocument_QueryInterface(This->doc->basedoc.doc_node->nsdoc, &IID_nsIDOMNSDocument, (void**)&nsdoc); if(NS_FAILED(nsres)) { ERR("Could not get nsIDOMNSDocument: %08x\n", nsres); return; @@ -300,7 +300,7 @@ static nsresult NSAPI nsRunnable_Run(nsIRunnable *iface) const PRUnichar *comment; nsAString_GetData(&comment_str, &comment); - remove_comment = handle_insert_comment(&This->doc->basedoc, comment); + remove_comment = handle_insert_comment(This->doc->basedoc.doc_node, comment); } nsAString_Finish(&comment_str); diff --git a/dlls/mshtml/nsembed.c b/dlls/mshtml/nsembed.c index 6a413769ffb..5cdf433de0d 100644 --- a/dlls/mshtml/nsembed.c +++ b/dlls/mshtml/nsembed.c @@ -831,14 +831,13 @@ void update_nsdocument(HTMLDocumentObj *doc) return; } - if(nsdoc == doc->basedoc.nsdoc) { + if(doc->basedoc.doc_node && nsdoc == doc->basedoc.doc_node->nsdoc) { nsIDOMHTMLDocument_Release(nsdoc); return; } - if(doc->basedoc.nsdoc) { - remove_mutation_observer(doc->nscontainer, doc->basedoc.nsdoc); - nsIDOMHTMLDocument_Release(doc->basedoc.nsdoc); + if(doc->basedoc.doc_node && doc->basedoc.doc_node->nsdoc) { + remove_mutation_observer(doc->nscontainer, doc->basedoc.doc_node->nsdoc); doc_node = doc->basedoc.doc_node; doc_node->basedoc.doc_obj = NULL; @@ -846,8 +845,8 @@ void update_nsdocument(HTMLDocumentObj *doc) doc->basedoc.doc_node = NULL; } - doc->basedoc.nsdoc = nsdoc; if(!nsdoc) { + doc->basedoc.doc_node = NULL; window_set_docnode(doc->basedoc.window, NULL); return; } diff --git a/dlls/mshtml/nsevents.c b/dlls/mshtml/nsevents.c index f145cc63adf..2a0130a471f 100644 --- a/dlls/mshtml/nsevents.c +++ b/dlls/mshtml/nsevents.c @@ -148,12 +148,12 @@ static nsresult NSAPI handle_load(nsIDOMEventListener *iface, nsIDOMEvent *event if(This->doc->usermode == EDITMODE) handle_edit_load(&This->doc->basedoc); - if(!This->doc->basedoc.nsdoc) { + if(!This->doc->basedoc.doc_node->nsdoc) { ERR("NULL nsdoc\n"); return NS_ERROR_FAILURE; } - nsIDOMHTMLDocument_GetBody(This->doc->basedoc.nsdoc, &nsbody); + nsIDOMHTMLDocument_GetBody(This->doc->basedoc.doc_node->nsdoc, &nsbody); if(nsbody) { fire_event(This->doc->basedoc.doc_node, EVENTID_LOAD, (nsIDOMNode*)nsbody, event); nsIDOMHTMLElement_Release(nsbody); diff --git a/dlls/mshtml/persist.c b/dlls/mshtml/persist.c index f89cde8afcd..36b1a348996 100644 --- a/dlls/mshtml/persist.c +++ b/dlls/mshtml/persist.c @@ -205,7 +205,7 @@ static HRESULT set_moniker(HTMLDocument *This, IMoniker *mon, IBindCtx *pibc, BO return S_OK; } -static HRESULT get_doc_string(HTMLDocument *This, char **str) +static HRESULT get_doc_string(HTMLDocumentNode *This, char **str) { nsIDOMNode *nsnode; LPCWSTR strw; @@ -462,7 +462,7 @@ static HRESULT WINAPI PersistFile_Save(IPersistFile *iface, LPCOLESTR pszFileNam return E_FAIL; } - hres = get_doc_string(This, &str); + hres = get_doc_string(This->doc_node, &str); if(SUCCEEDED(hres)) WriteFile(file, str, strlen(str), &written, NULL); @@ -569,7 +569,7 @@ static HRESULT WINAPI PersistStreamInit_Save(IPersistStreamInit *iface, LPSTREAM TRACE("(%p)->(%p %x)\n", This, pStm, fClearDirty); - hres = get_doc_string(This, &str); + hres = get_doc_string(This->doc_node, &str); if(FAILED(hres)) return hres; diff --git a/dlls/mshtml/selection.c b/dlls/mshtml/selection.c index f1909beadc2..4c670a6063d 100644 --- a/dlls/mshtml/selection.c +++ b/dlls/mshtml/selection.c @@ -156,12 +156,12 @@ static HRESULT WINAPI HTMLSelectionObject_createRange(IHTMLSelectionObject *ifac TRACE("nsrange_cnt = 0\n"); - if(!This->doc->basedoc.nsdoc) { + if(!This->doc->nsdoc) { WARN("nsdoc is NULL\n"); return E_UNEXPECTED; } - nsres = nsIDOMHTMLDocument_GetBody(This->doc->basedoc.nsdoc, &nsbody); + nsres = nsIDOMHTMLDocument_GetBody(This->doc->nsdoc, &nsbody); if(NS_FAILED(nsres) || !nsbody) { ERR("Could not get body: %08x\n", nsres); return E_FAIL; diff --git a/dlls/mshtml/txtrange.c b/dlls/mshtml/txtrange.c index 3309bbe884e..c068c06014c 100644 --- a/dlls/mshtml/txtrange.c +++ b/dlls/mshtml/txtrange.c @@ -342,7 +342,7 @@ static nsIDOMNode *prev_node(HTMLTxtRange *This, nsIDOMNode *iter) if(!iter) { nsIDOMHTMLElement *nselem; - nsIDOMHTMLDocument_GetBody(This->doc->basedoc.nsdoc, &nselem); + nsIDOMHTMLDocument_GetBody(This->doc->nsdoc, &nselem); nsIDOMElement_GetLastChild(nselem, &tmp); if(!tmp) return (nsIDOMNode*)nselem; @@ -1139,7 +1139,7 @@ static HRESULT WINAPI HTMLTxtRange_put_text(IHTMLTxtRange *iface, BSTR v) return MSHTML_E_NODOC; nsAString_Init(&text_str, v); - nsres = nsIDOMHTMLDocument_CreateTextNode(This->doc->basedoc.nsdoc, &text_str, &text_node); + nsres = nsIDOMHTMLDocument_CreateTextNode(This->doc->nsdoc, &text_str, &text_node); nsAString_Finish(&text_str); if(NS_FAILED(nsres)) { ERR("CreateTextNode failed: %08x\n", nsres); @@ -1348,7 +1348,7 @@ static HRESULT WINAPI HTMLTxtRange_expand(IHTMLTxtRange *iface, BSTR Unit, VARIA nsIDOMHTMLElement *nsbody = NULL; nsresult nsres; - nsres = nsIDOMHTMLDocument_GetBody(This->doc->basedoc.nsdoc, &nsbody); + nsres = nsIDOMHTMLDocument_GetBody(This->doc->nsdoc, &nsbody); if(NS_FAILED(nsres) || !nsbody) { ERR("Could not get body: %08x\n", nsres); break; @@ -1787,7 +1787,7 @@ static HRESULT exec_indent(HTMLTxtRange *This, VARIANT *in, VARIANT *out) TRACE("(%p)->(%p %p)\n", This, in, out); - if(!This->doc->basedoc.nsdoc) { + if(!This->doc->nsdoc) { WARN("NULL nsdoc\n"); return E_NOTIMPL; }