From c99c9b03e9f99f6bbb8cefb2a707128db71b5c51 Mon Sep 17 00:00:00 2001 From: Ivan Sinitsin Date: Mon, 28 Apr 2008 17:58:17 +0400 Subject: [PATCH] Fix eterbug #993 --- dlls/mshtml/htmldoc.c | 66 +++++++++++++------------------------------ 1 file changed, 20 insertions(+), 46 deletions(-) diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c index 290a7b62c3..b13bc73767 100644 --- a/dlls/mshtml/htmldoc.c +++ b/dlls/mshtml/htmldoc.c @@ -727,59 +727,33 @@ static HRESULT WINAPI HTMLDocument_get_nameProp(IHTMLDocument2 *iface, BSTR *p) static HRESULT WINAPI HTMLDocument_write(IHTMLDocument2 *iface, SAFEARRAY *psarray) { - HTMLDocument *This = HTMLDOC_THIS(iface); - nsIDOMDocument *domdoc; - nsIDOMHTMLDocument *nsdoc; - nsAString nsstr; - VARIANT *var; - int i; - nsresult nsres; HRESULT hres; + VARIANT *pvar; + IHTMLElement *pbody; + BSTR vtext; + int i; - TRACE("(%p)->(%p)\n", iface, psarray); - - if(psarray->cDims != 1) { - FIXME("cDims=%d\n", psarray->cDims); - return E_INVALIDARG; - } - - if(!This->nscontainer) - return S_OK; - - nsres = nsIWebNavigation_GetDocument(This->nscontainer->navigation, &domdoc); - if(NS_FAILED(nsres)) { - ERR("GetDocument failed: %08x\n", nsres); - return S_OK; - } + vtext = SysAllocString(L""); - nsres = nsIDOMDocument_QueryInterface(domdoc, &IID_nsIDOMHTMLDocument, (void**)&nsdoc); - nsIDOMDocument_Release(domdoc); - if(NS_FAILED(nsres)) - return S_OK; + HTMLDocument_get_body(iface,&pbody); - hres = SafeArrayAccessData(psarray, (void**)&var); - if(FAILED(hres)) { - WARN("SafeArrayAccessData failed: %08x\n", hres); - nsIDOMHTMLDocument_Release(nsdoc); - return hres; + hres = IHTMLElement_get_innerHTML(pbody, &vtext); + if (FAILED(hres)) { + vtext = SysAllocString(L""); } - nsAString_Init(&nsstr, NULL); - - for(i=0; i < psarray->rgsabound[0].cElements; i++) { - if(V_VT(var+i) == VT_BSTR) { - nsAString_SetData(&nsstr, V_BSTR(var+i)); - nsres = nsIDOMHTMLDocument_Write(nsdoc, &nsstr); - if(NS_FAILED(nsres)) - ERR("Write failed: %08x\n", nsres); - }else { - FIXME("vt=%d\n", V_VT(var+i)); + hres=SafeArrayAccessData(psarray, (void **)&pvar); + if (FAILED(hres)) return hres; + for (i=0; i < psarray->rgsabound[0].cElements; i++) { + hres = VarBstrCat(vtext, V_BSTR(&(pvar[i])), &vtext); + if (FAILED(hres)) { + break; } } - nsAString_Finish(&nsstr); - SafeArrayUnaccessData(psarray); - nsIDOMHTMLDocument_Release(nsdoc); + IHTMLElement_put_innerHTML(pbody,vtext); + SysFreeString(vtext); + hres = SafeArrayUnaccessData(psarray); return S_OK; } @@ -795,8 +769,8 @@ static HRESULT WINAPI HTMLDocument_open(IHTMLDocument2 *iface, BSTR url, VARIANT VARIANT features, VARIANT replace, IDispatch **pomWindowResult) { HTMLDocument *This = HTMLDOC_THIS(iface); - FIXME("(%p)->(%s %p)\n", This, debugstr_w(url), pomWindowResult); - return E_NOTIMPL; + TRACE("(%p)->(%s %p)\n", iface, debugstr_w(url), pomWindowResult); + return IHTMLDocument2_QueryInterface(iface, &IID_IDispatch, (void**)pomWindowResult); } static HRESULT WINAPI HTMLDocument_close(IHTMLDocument2 *iface) -- 2.33.8