mshtml: Implement nsIURI::SetUserPass on top of IUri.

This commit is contained in:
Jacek Caban 2011-07-19 16:01:44 +02:00 committed by Alexandre Julliard
parent d15b567ca5
commit 0289530f07
1 changed files with 54 additions and 8 deletions

View File

@ -1747,28 +1747,74 @@ static nsresult NSAPI nsURI_SetScheme(nsIURL *iface, const nsACString *aScheme)
static nsresult NSAPI nsURI_GetUserPass(nsIURL *iface, nsACString *aUserPass) static nsresult NSAPI nsURI_GetUserPass(nsIURL *iface, nsACString *aUserPass)
{ {
nsWineURI *This = impl_from_nsIURL(iface); nsWineURI *This = impl_from_nsIURL(iface);
BSTR user, pass;
HRESULT hres;
TRACE("(%p)->(%p)\n", This, aUserPass); TRACE("(%p)->(%p)\n", This, aUserPass);
if(This->nsuri) if(!ensure_uri(This))
return nsIURI_GetUserPass(This->nsuri, aUserPass); return NS_ERROR_UNEXPECTED;
return get_uri_string(This, Uri_PROPERTY_USER_INFO, aUserPass); hres = IUri_GetUserName(This->uri, &user);
if(FAILED(hres))
return NS_ERROR_FAILURE;
hres = IUri_GetPassword(This->uri, &pass);
if(FAILED(hres)) {
SysFreeString(user);
return NS_ERROR_FAILURE;
}
if(*user || *pass) {
FIXME("Construct user:pass string\n");
}else {
nsACString_SetData(aUserPass, "");
}
SysFreeString(user);
SysFreeString(pass);
return NS_OK;
} }
static nsresult NSAPI nsURI_SetUserPass(nsIURL *iface, const nsACString *aUserPass) static nsresult NSAPI nsURI_SetUserPass(nsIURL *iface, const nsACString *aUserPass)
{ {
nsWineURI *This = impl_from_nsIURL(iface); nsWineURI *This = impl_from_nsIURL(iface);
WCHAR *user = NULL, *pass = NULL, *buf = NULL;
const char *user_pass;
HRESULT hres;
TRACE("(%p)->(%s)\n", This, debugstr_nsacstr(aUserPass)); TRACE("(%p)->(%s)\n", This, debugstr_nsacstr(aUserPass));
if(This->nsuri) { if(!ensure_uri_builder(This))
invalidate_uri(This); return NS_ERROR_UNEXPECTED;
return nsIURI_SetUserPass(This->nsuri, aUserPass);
nsACString_GetData(aUserPass, &user_pass);
if(*user_pass) {
WCHAR *ptr;
buf = heap_strdupAtoW(user_pass);
if(!buf)
return NS_ERROR_OUT_OF_MEMORY;
ptr = strchrW(buf, ':');
if(!ptr) {
user = buf;
}else if(ptr != buf) {
*ptr++ = 0;
user = buf;
if(*ptr)
pass = ptr;
}else {
pass = buf+1;
}
} }
FIXME("default action not implemented\n"); hres = IUriBuilder_SetUserName(This->uri_builder, user);
return NS_ERROR_NOT_IMPLEMENTED; if(SUCCEEDED(hres))
hres = IUriBuilder_SetPassword(This->uri_builder, pass);
heap_free(buf);
return SUCCEEDED(hres) ? NS_OK : NS_ERROR_FAILURE;
} }
static nsresult NSAPI nsURI_GetUsername(nsIURL *iface, nsACString *aUsername) static nsresult NSAPI nsURI_GetUsername(nsIURL *iface, nsACString *aUsername)