Ivan Sinitsin wrote:
> Changelog:
> mshtml.dll:Add implementation of HTMLDocument_(Get|Set)Title
>
First of all it would be nice if you could add a test case for these.
>static HRESULT WINAPI HTMLDocument_put_title(IHTMLDocument2 *iface, BSTR v)
> {
> HTMLDocument *This = HTMLDOC_THIS(iface);
>- FIXME("(%p)->(%s)\n", This, debugstr_w(v));
>- return E_NOTIMPL;
>+ nsIDOMDocument *nsdoc;
>+ nsIDOMHTMLDocument *nshtmldoc;
>+ nsAString nsstr;
>+ nsresult nsres;
>+
>+ TRACE("(%p)->(%s)\n", This, debugstr_w(v));
>+
>+ if(!This->nscontainer)
>+ return E_POINTER;
>+
>+ nsres = nsIWebNavigation_GetDocument(This->nscontainer->navigation, &nsdoc);
>+ if(NS_FAILED(nsres)) {
>+ ERR("GetDocument failed: %08x\n", nsres);
>+ return nsres;
>+ }
>+
>+ if(NS_FAILED(nsres) || !nsdoc).
>+ return E_FAIL;
>+
>+ nsIDOMDocument_QueryInterface(nsdoc, &IID_nsIDOMHTMLDocument, (void**)&nshtmldoc);
>+ nsIDOMDocument_Release(nsdoc);
>+
>+ nsAString_Init(&nsstr, NULL);
>+ nsAString_SetData(&nsstr, v);
Use second argument of nsAString_Init instead of nsAString_SetData.
>+
>+ nsres = nsIDOMHTMLDocument_SetTitle(nshtmldoc, &nsstr);
>+ nsIDOMHTMLDocument_Release(nshtmldoc);
>+
You leak nsstr here.
>+ return nsres;
Don't mix nsresult with HRESULT. You should return S_OK here.
> }
>
> static HRESULT WINAPI HTMLDocument_get_title(IHTMLDocument2 *iface, BSTR *p)
> {
> HTMLDocument *This = HTMLDOC_THIS(iface);
>- FIXME("(%p)->(%p)\n", This, p);
>- return E_NOTIMPL;
>+ nsIDOMDocument *nsdoc;
>+ nsIDOMHTMLDocument *nshtmldoc;
>+ nsAString nsstr;
>+ const PRUnichar *ret;
>+ nsresult nsres;
>+
>+ TRACE("(%p)->(%p)\n", This, p);
>+
>+ if (!p).
>+ return E_POINTER;
>+
>+ if(!This->nscontainer)
>+ return E_POINTER;
>+
>+ nsres = nsIWebNavigation_GetDocument(This->nscontainer->navigation, &nsdoc);
>+ if(NS_FAILED(nsres)) {
>+ ERR("GetDocument failed: %08x\n", nsres);
>+ return nsres;
>+ }
>+
>+ if(NS_FAILED(nsres) || !nsdoc).
>+ return E_FAIL;
>+
>+ nsIDOMDocument_QueryInterface(nsdoc, &IID_nsIDOMHTMLDocument, (void**)&nshtmldoc);
>+ nsIDOMDocument_Release(nsdoc);
>+
>+ nsAString_Init(&nsstr, NULL);
>+
>+ nsres = nsIDOMHTMLDocument_GetTitle(nshtmldoc, &nsstr);
>+ nsIDOMHTMLDocument_Release(nshtmldoc);
>+
>+ if (NS_FAILED(nsres))
>+ return nsres;
Don't mix nsresult with HRESULT. Also ERR would be nice in this case.
>+
>+ nsAString_GetData(&nsstr, &ret);
>+ *p = SysAllocString(ret);
DOM API usually returns NULL instead of empty string. That's worth testing.
>+
>+ return nsres;
> }
Again, don't mix nsresult with HRESULT.
Jacek