Jacek Caban : mshtml: Added nsIURI:: GetHost implementation based on IUri API.
Module: wine Branch: master Commit: 3a00f739b1a5b7c8591ad2a57f98019f0ecabf92 URL: http://source.winehq.org/git/wine.git/?a=commit;h=3a00f739b1a5b7c8591ad2a57f... Author: Jacek Caban <jacek(a)codeweavers.com> Date: Tue Sep 28 13:25:24 2010 +0200 mshtml: Added nsIURI::GetHost implementation based on IUri API. --- dlls/mshtml/nsio.c | 124 ++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 107 insertions(+), 17 deletions(-) diff --git a/dlls/mshtml/nsio.c b/dlls/mshtml/nsio.c index 4b9af43..019c612 100644 --- a/dlls/mshtml/nsio.c +++ b/dlls/mshtml/nsio.c @@ -64,6 +64,7 @@ struct nsWineURI { windowref_t *window_ref; nsChannelBSC *channel_bsc; LPWSTR wine_url; + IUri *uri; BOOL is_doc_uri; BOOL use_wine_url; }; @@ -1538,6 +1539,55 @@ static const nsIHttpChannelInternalVtbl nsHttpChannelInternalVtbl = { nsHttpChannelInternal_GetCanceled }; +static BOOL ensure_uri(nsWineURI *This) +{ + if(!This->uri) { + HRESULT hres; + + hres = CreateUri(This->wine_url, 0, 0, &This->uri); + if(FAILED(hres)) { + WARN("CreateUri failed: %08x\n", hres); + return FALSE; + } + } + + return TRUE; +} + +static nsresult get_uri_string(nsWineURI *This, Uri_PROPERTY prop, nsACString *ret) +{ + char *vala; + BSTR val; + HRESULT hres; + + if(!ensure_uri(This)) + return NS_ERROR_UNEXPECTED; + + hres = IUri_GetPropertyBSTR(This->uri, prop, &val, 0); + if(FAILED(hres)) { + WARN("GetPropertyBSTR failed: %08x\n", hres); + return NS_ERROR_UNEXPECTED; + } + + vala = heap_strdupWtoA(val); + SysFreeString(val); + if(!vala) + return NS_ERROR_OUT_OF_MEMORY; + + TRACE("ret %s\n", debugstr_a(vala)); + nsACString_SetData(ret, vala); + heap_free(vala); + return NS_OK; +} + +static void invalidate_uri(nsWineURI *This) +{ + if(This->uri) { + IUri_Release(This->uri); + This->uri = NULL; + } +} + #define NSURI_THIS(iface) DEFINE_THIS(nsWineURI, IURL, iface) static nsresult NSAPI nsURI_QueryInterface(nsIURL *iface, nsIIDRef riid, void **result) @@ -1595,6 +1645,8 @@ static nsrefcnt NSAPI nsURI_Release(nsIURL *iface) nsIURL_Release(This->nsurl); if(This->nsuri) nsIURI_Release(This->nsuri); + if(This->uri) + IUri_Release(This->uri); heap_free(This->wine_url); heap_free(This); } @@ -1630,8 +1682,10 @@ static nsresult NSAPI nsURI_SetSpec(nsIURL *iface, const nsACString *aSpec) TRACE("(%p)->(%p)\n", This, debugstr_nsacstr(aSpec)); - if(This->nsuri) + if(This->nsuri) { + invalidate_uri(This); return nsIURI_SetSpec(This->nsuri, aSpec); + } FIXME("default action not implemented\n"); return NS_ERROR_NOT_IMPLEMENTED; @@ -1687,8 +1741,10 @@ static nsresult NSAPI nsURI_SetScheme(nsIURL *iface, const nsACString *aScheme) TRACE("(%p)->(%s)\n", This, debugstr_nsacstr(aScheme)); - if(This->nsuri) + if(This->nsuri) { + invalidate_uri(This); return nsIURI_SetScheme(This->nsuri, aScheme); + } FIXME("default action not implemented\n"); return NS_ERROR_NOT_IMPLEMENTED; @@ -1713,8 +1769,10 @@ static nsresult NSAPI nsURI_SetUserPass(nsIURL *iface, const nsACString *aUserPa TRACE("(%p)->(%s)\n", This, debugstr_nsacstr(aUserPass)); - if(This->nsuri) + if(This->nsuri) { + invalidate_uri(This); return nsIURI_SetUserPass(This->nsuri, aUserPass); + } FIXME("default action not implemented\n"); return NS_ERROR_NOT_IMPLEMENTED; @@ -1739,8 +1797,10 @@ static nsresult NSAPI nsURI_SetUsername(nsIURL *iface, const nsACString *aUserna TRACE("(%p)->(%s)\n", This, debugstr_nsacstr(aUsername)); - if(This->nsuri) + if(This->nsuri) { + invalidate_uri(This); return nsIURI_SetUsername(This->nsuri, aUsername); + } FIXME("default action not implemented\n"); return NS_ERROR_NOT_IMPLEMENTED; @@ -1765,8 +1825,10 @@ static nsresult NSAPI nsURI_SetPassword(nsIURL *iface, const nsACString *aPasswo TRACE("(%p)->(%s)\n", This, debugstr_nsacstr(aPassword)); - if(This->nsuri) + if(This->nsuri) { + invalidate_uri(This); return nsIURI_SetPassword(This->nsuri, aPassword); + } FIXME("default action not implemented\n"); return NS_ERROR_NOT_IMPLEMENTED; @@ -1791,8 +1853,10 @@ static nsresult NSAPI nsURI_SetHostPort(nsIURL *iface, const nsACString *aHostPo TRACE("(%p)->(%s)\n", This, debugstr_nsacstr(aHostPort)); - if(This->nsuri) + if(This->nsuri) { + invalidate_uri(This); return nsIURI_SetHostPort(This->nsuri, aHostPort); + } FIXME("default action not implemented\n"); return NS_ERROR_NOT_IMPLEMENTED; @@ -1807,8 +1871,7 @@ static nsresult NSAPI nsURI_GetHost(nsIURL *iface, nsACString *aHost) if(This->nsuri) return nsIURI_GetHost(This->nsuri, aHost); - FIXME("default action not implemented\n"); - return NS_ERROR_NOT_IMPLEMENTED; + return get_uri_string(This, Uri_PROPERTY_HOST, aHost); } static nsresult NSAPI nsURI_SetHost(nsIURL *iface, const nsACString *aHost) @@ -1817,8 +1880,10 @@ static nsresult NSAPI nsURI_SetHost(nsIURL *iface, const nsACString *aHost) TRACE("(%p)->(%s)\n", This, debugstr_nsacstr(aHost)); - if(This->nsuri) + if(This->nsuri) { + invalidate_uri(This); return nsIURI_SetHost(This->nsuri, aHost); + } FIXME("default action not implemented\n"); return NS_ERROR_NOT_IMPLEMENTED; @@ -1843,8 +1908,10 @@ static nsresult NSAPI nsURI_SetPort(nsIURL *iface, PRInt32 aPort) TRACE("(%p)->(%d)\n", This, aPort); - if(This->nsuri) + if(This->nsuri) { + invalidate_uri(This); return nsIURI_SetPort(This->nsuri, aPort); + } FIXME("default action not implemented\n"); return NS_ERROR_NOT_IMPLEMENTED; @@ -1870,6 +1937,8 @@ static nsresult NSAPI nsURI_SetPath(nsIURL *iface, const nsACString *aPath) TRACE("(%p)->(%s)\n", This, debugstr_nsacstr(aPath)); + invalidate_uri(This); + nsACString_GetData(aPath, &path); if(This->wine_url) { WCHAR new_url[INTERNET_MAX_URL_LENGTH]; @@ -1964,6 +2033,11 @@ static nsresult NSAPI nsURI_Clone(nsIURL *iface, nsIURI **_retval) set_wine_url(wine_uri, This->wine_url); + if(This->uri) { + IUri_AddRef(This->uri); + wine_uri->uri = This->uri; + } + *_retval = NSURI(wine_uri); return NS_OK; } @@ -2069,8 +2143,10 @@ static nsresult NSAPI nsURL_SetFilePath(nsIURL *iface, const nsACString *aFilePa TRACE("(%p)->(%s)\n", This, debugstr_nsacstr(aFilePath)); - if(This->nsurl) + if(This->nsurl) { + invalidate_uri(This); return nsIURL_SetFilePath(This->nsurl, aFilePath); + } FIXME("default action not implemented\n"); return NS_ERROR_NOT_IMPLEMENTED; @@ -2095,8 +2171,10 @@ static nsresult NSAPI nsURL_SetParam(nsIURL *iface, const nsACString *aParam) TRACE("(%p)->(%s)\n", This, debugstr_nsacstr(aParam)); - if(This->nsurl) + if(This->nsurl) { + invalidate_uri(This); return nsIURL_SetParam(This->nsurl, aParam); + } FIXME("default action not implemented\n"); return NS_ERROR_NOT_IMPLEMENTED; @@ -2154,6 +2232,8 @@ static nsresult NSAPI nsURL_SetQuery(nsIURL *iface, const nsACString *aQuery) TRACE("(%p)->(%s)\n", This, debugstr_nsacstr(aQuery)); + invalidate_uri(This); + if(This->nsurl) nsIURL_SetQuery(This->nsurl, aQuery); @@ -2217,8 +2297,10 @@ static nsresult NSAPI nsURL_SetRef(nsIURL *iface, const nsACString *aRef) TRACE("(%p)->(%s)\n", This, debugstr_nsacstr(aRef)); - if(This->nsurl) + if(This->nsurl) { + invalidate_uri(This); return nsIURL_SetRef(This->nsurl, aRef); + } nsACString_GetData(aRef, &refa); if(!*refa) @@ -2247,8 +2329,10 @@ static nsresult NSAPI nsURL_SetDirectory(nsIURL *iface, const nsACString *aDirec TRACE("(%p)->(%s)\n", This, debugstr_nsacstr(aDirectory)); - if(This->nsurl) + if(This->nsurl) { + invalidate_uri(This); return nsIURL_SetDirectory(This->nsurl, aDirectory); + } FIXME("default action not implemented\n"); return NS_ERROR_NOT_IMPLEMENTED; @@ -2273,8 +2357,10 @@ static nsresult NSAPI nsURL_SetFileName(nsIURL *iface, const nsACString *aFileNa TRACE("(%p)->(%s)\n", This, debugstr_nsacstr(aFileName)); - if(This->nsurl) + if(This->nsurl) { + invalidate_uri(This); return nsIURL_SetFileName(This->nsurl, aFileName); + } FIXME("default action not implemented\n"); return NS_ERROR_NOT_IMPLEMENTED; @@ -2299,8 +2385,10 @@ static nsresult NSAPI nsURL_SetFileBaseName(nsIURL *iface, const nsACString *aFi TRACE("(%p)->(%s)\n", This, debugstr_nsacstr(aFileBaseName)); - if(This->nsurl) + if(This->nsurl) { + invalidate_uri(This); return nsIURL_SetFileBaseName(This->nsurl, aFileBaseName); + } FIXME("default action not implemented\n"); return NS_ERROR_NOT_IMPLEMENTED; @@ -2325,8 +2413,10 @@ static nsresult NSAPI nsURL_SetFileExtension(nsIURL *iface, const nsACString *aF TRACE("(%p)->(%s)\n", This, debugstr_nsacstr(aFileExtension)); - if(This->nsurl) + if(This->nsurl) { + invalidate_uri(This); return nsIURL_SetFileExtension(This->nsurl, aFileExtension); + } FIXME("default action not implemented\n"); return NS_ERROR_NOT_IMPLEMENTED;
participants (1)
-
Alexandre Julliard