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;
}