Hi Ivan,
Ivan Sinitsin wrote:
This patch adds realization of function HTMLDocument_write, and HTMLDocument_open (it needed for method HTMLDocument_write).
Changelog: This patch adds realization of function HTMLDocument_write, and HTMLDocument_open.
First of all, these should be two separated patches.
static HRESULT WINAPI HTMLDocument_write(IHTMLDocument2 *iface, SAFEARRAY *psarray) {
- FIXME("(%p)->(%p)\n", iface, psarray);
- return E_NOTIMPL;
- HRESULT hres;
- VARIANT *pvar;
- IHTMLElement *pbody;
- BSTR vtext;
- int i;
- vtext = SysAllocString(L"");
- HTMLDocument_get_body(iface,&pbody);
You can't assume that write will be called inside body element.
- hres = IHTMLElement_get_innerHTML(pbody, &vtext);
You leak vtext memory here. Also you shouldn't use get_innerHTML at all.
- if (FAILED(hres)) {
vtext = SysAllocString(L"");
- }
- 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);
You should check if pvar[i] is VT_BSTR before using it.
if (FAILED(hres)) {
break;
}
- }
- IHTMLElement_put_innerHTML(pbody,vtext);
You can't use put_innerHTML here. It will cause recreating of whole body element content. What you probably want is nsIHTMLDocument::Write. I will send the right write implementation.
- SysFreeString(vtext);
- hres = SafeArrayUnaccessData(psarray);
- return S_OK;
}
static HRESULT WINAPI HTMLDocument_writeln(IHTMLDocument2 *iface, SAFEARRAY *psarray) @@ -688,8 +715,8 @@ static HRESULT WINAPI HTMLDocument_write static HRESULT WINAPI HTMLDocument_open(IHTMLDocument2 *iface, BSTR url, VARIANT name, VARIANT features, VARIANT replace, IDispatch **pomWindowResult) {
- FIXME("(%p)->(%s %p)\n", iface, 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);
}
This is obviously not IHTMLDocument2::open implementation.
Jacek