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;
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;
*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;
*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;
*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;
*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;
*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;
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);
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);
if(!p)
return E_POINTER;
- *p = SysAllocString(readystate_str[This->doc_obj->readystate]);
+ *p = SysAllocString(readystate_str[This->window->readystate]);
return S_OK;
}
TRACE("(%p)->(%p)\n", iface, p);
- *p = SysAllocString(This->doc_obj->url ? This->doc_obj->url : about_blank_url);
+ *p = SysAllocString(This->window->url ? This->window->url : about_blank_url);
return *p ? S_OK : E_OUTOFMEMORY;
}
nsresult nsres;
HRESULT hres;
- if(!This->nsdoc) {
+ if(!This->doc_node->nsdoc) {
WARN("NULL nsdoc\n");
return E_UNEXPECTED;
}
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 {
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;
}
|| 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;
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;
IHTMLElement **newElem)
{
HTMLDocument *This = HTMLDOC_THIS(iface);
- nsIDOMElement *nselem;
+ nsIDOMHTMLElement *nselem;
HTMLElement *elem;
- nsAString tag_str;
- nsresult nsres;
+ HRESULT hres;
TRACE("(%p)->(%s %p)\n", This, debugstr_w(eTag), newElem);
- if(!This->nsdoc) {
- WARN("NULL nsdoc\n");
- return E_UNEXPECTED;
- }
-
- nsAString_Init(&tag_str, eTag);
- nsres = nsIDOMDocument_CreateElement(This->nsdoc, &tag_str, &nselem);
- nsAString_Finish(&tag_str);
- if(NS_FAILED(nsres)) {
- ERR("CreateElement failed: %08x\n", nsres);
- return E_FAIL;
- }
+ hres = create_nselem(This->doc_node, eTag, &nselem);
+ if(FAILED(hres))
+ return hres;
elem = HTMLElement_Create(This->doc_node, (nsIDOMNode*)nselem, TRUE);
- nsIDOMElement_Release(nselem);
+ nsIDOMHTMLElement_Release(nselem);
*newElem = HTMLELEM(elem);
IHTMLElement_AddRef(HTMLELEM(elem));
*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)) {
return E_INVALIDARG;
V_VT(pVarResult) = VT_I4;
- V_I4(pVarResult) = This->doc_obj->readystate;
+ V_I4(pVarResult) = This->window->readystate;
return S_OK;
}
}else if(IsEqualGUID(&IID_IHTMLDocument5, riid)) {
TRACE("(%p)->(IID_IHTMLDocument5, %p)\n", This, ppv);
*ppv = HTMLDOC5(This);
+ }else if(IsEqualGUID(&IID_IHTMLDocument6, riid)) {
+ TRACE("(%p)->(IID_IHTMLDocument6, %p)\n", This, ppv);
+ *ppv = HTMLDOC6(This);
}else if(IsEqualGUID(&IID_IPersist, riid)) {
TRACE("(%p)->(IID_IPersist, %p)\n", This, ppv);
*ppv = PERSIST(This);
doc->unk_impl = unk_impl;
doc->dispex = dispex;
+ doc->task_magic = get_task_target_magic();
HTMLDocument_HTMLDocument3_Init(doc);
HTMLDocument_HTMLDocument5_Init(doc);
static void destroy_htmldoc(HTMLDocument *This)
{
- remove_doc_tasks(This);
+ remove_target_tasks(This->task_magic);
ConnectionPointContainer_Destroy(&This->cp_container);
-
- if(This->nsdoc)
- nsIDOMHTMLDocument_Release(This->nsdoc);
}
#define HTMLDOCNODE_NODE_THIS(iface) DEFINE_THIS2(HTMLDocumentNode, node, iface)
{
HTMLDocumentNode *This = HTMLDOCNODE_NODE_THIS(iface);
+ if(This->nsevent_listener)
+ release_nsevents(This);
if(This->secmgr)
IInternetSecurityManager_Release(This->secmgr);
detach_selection(This);
detach_ranges(This);
release_nodes(This);
+
+ if(This->nsdoc) {
+ release_mutation(This);
+ nsIDOMHTMLDocument_Release(This->nsdoc);
+ }
+
+ heap_free(This->event_vector);
destroy_htmldoc(&This->basedoc);
}
HTMLDocumentNode_SecMgr_Init(doc);
doc->ref = 1;
- nsIDOMHTMLDocument_AddRef(nsdoc);
- doc->basedoc.nsdoc = nsdoc;
-
doc->basedoc.window = window;
+ nsIDOMHTMLDocument_AddRef(nsdoc);
+ doc->nsdoc = nsdoc;
+ init_mutation(doc);
+ init_nsevents(doc);
+
+ list_init(&doc->bindings);
list_init(&doc->selection_list);
list_init(&doc->range_list);
TRACE("(%p) ref = %u\n", This, ref);
if(!ref) {
- set_document_bscallback(&This->basedoc, NULL);
- set_current_mon(&This->basedoc, NULL);
if(This->basedoc.doc_node) {
This->basedoc.doc_node->basedoc.doc_obj = NULL;
IHTMLDocument2_Release(HTMLDOC(&This->basedoc.doc_node->basedoc));
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);
{
HTMLDocumentObj *doc;
nsIDOMWindow *nswindow = NULL;
+ nsresult nsres;
HRESULT hres;
TRACE("(%p %s %p)\n", pUnkOuter, debugstr_guid(riid), ppvObject);
doc->ref = 1;
doc->basedoc.doc_obj = doc;
+ doc->usermode = UNKNOWN_USERMODE;
+
+ doc->nscontainer = NSContainer_Create(doc, NULL);
+ if(!doc->nscontainer) {
+ ERR("Failed to init Gecko, returning CLASS_E_CLASSNOTAVAILABLE\n");
+ htmldoc_release(&doc->basedoc);
+ return CLASS_E_CLASSNOTAVAILABLE;
+ }
+
hres = htmldoc_query_interface(&doc->basedoc, riid, ppvObject);
htmldoc_release(&doc->basedoc);
if(FAILED(hres))
return hres;
- doc->nscontainer = NSContainer_Create(doc, NULL);
- list_init(&doc->bindings);
- doc->usermode = UNKNOWN_USERMODE;
- doc->readystate = READYSTATE_UNINITIALIZED;
-
- if(doc->nscontainer) {
- nsresult nsres;
nsres = nsIWebBrowser_GetContentDOMWindow(doc->nscontainer->webbrowser, &nswindow);
if(NS_FAILED(nsres))
ERR("GetContentDOMWindow failed: %08x\n", nsres);
- }
- hres = HTMLWindow_Create(doc, nswindow, &doc->basedoc.window);
+ hres = HTMLWindow_Create(doc, nswindow, NULL /* FIXME */, &doc->basedoc.window);
if(nswindow)
nsIDOMWindow_Release(nswindow);
if(FAILED(hres)) {
return hres;
}
- update_nsdocument(doc);
+ if(!doc->basedoc.doc_node && doc->basedoc.window->doc) {
+ doc->basedoc.doc_node = doc->basedoc.window->doc;
+ htmldoc_addref(&doc->basedoc.doc_node->basedoc);
+ }
+
get_thread_hwnd();
return S_OK;