mshtml: Return wine: URI for protocols handled by MSHTML.

This commit is contained in:
Jacek Caban 2007-08-14 22:36:10 +02:00 committed by Alexandre Julliard
parent 000c3d4295
commit 718b771f2a
1 changed files with 18 additions and 6 deletions

View File

@ -1186,8 +1186,8 @@ static nsresult NSAPI nsURI_GetSpec(nsIWineURI *iface, nsACString *aSpec)
TRACE("(%p)->(%p)\n", This, aSpec); TRACE("(%p)->(%p)\n", This, aSpec);
if(This->use_wine_url) { if(This->use_wine_url) {
char speca[INTERNET_MAX_URL_LENGTH]; char speca[INTERNET_MAX_URL_LENGTH] = "wine:";
WideCharToMultiByte(CP_ACP, 0, This->wine_url, -1, speca, sizeof(speca), NULL, NULL); WideCharToMultiByte(CP_ACP, 0, This->wine_url, -1, speca+5, sizeof(speca)-5, NULL, NULL);
nsACString_SetData(aSpec, speca); nsACString_SetData(aSpec, speca);
return NS_OK; return NS_OK;
@ -1956,10 +1956,12 @@ static nsresult NSAPI nsIOService_NewURI(nsIIOService *iface, const nsACString *
const char *aOriginCharset, nsIURI *aBaseURI, nsIURI **_retval) const char *aOriginCharset, nsIURI *aBaseURI, nsIURI **_retval)
{ {
const char *spec = NULL; const char *spec = NULL;
nsACString spec_str;
NSContainer *nscontainer = NULL; NSContainer *nscontainer = NULL;
nsIURI *uri = NULL; nsIURI *uri = NULL;
LPCWSTR base_wine_url = NULL; LPCWSTR base_wine_url = NULL;
nsIWineURI *base_wine_uri = NULL, *wine_uri; nsIWineURI *base_wine_uri = NULL, *wine_uri;
BOOL is_wine_uri = FALSE;
nsresult nsres; nsresult nsres;
nsACString_GetData(aSpec, &spec, NULL); nsACString_GetData(aSpec, &spec, NULL);
@ -1970,6 +1972,11 @@ static nsresult NSAPI nsIOService_NewURI(nsIIOService *iface, const nsACString *
if(is_gecko_special_uri(spec)) if(is_gecko_special_uri(spec))
return nsIIOService_NewURI(nsio, aSpec, aOriginCharset, aBaseURI, _retval); return nsIIOService_NewURI(nsio, aSpec, aOriginCharset, aBaseURI, _retval);
if(!strncmp(spec, "wine:", 5)) {
spec += 5;
is_wine_uri = TRUE;
}
if(aBaseURI) { if(aBaseURI) {
nsACString base_uri_str; nsACString base_uri_str;
const char *base_uri = NULL; const char *base_uri = NULL;
@ -1987,7 +1994,9 @@ static nsresult NSAPI nsIOService_NewURI(nsIIOService *iface, const nsACString *
nsACString_Finish(&base_uri_str); nsACString_Finish(&base_uri_str);
} }
nsACString_Init(&spec_str, spec);
nsres = nsIIOService_NewURI(nsio, aSpec, aOriginCharset, aBaseURI, &uri); nsres = nsIIOService_NewURI(nsio, aSpec, aOriginCharset, aBaseURI, &uri);
nsACString_Finish(&spec_str);
if(NS_FAILED(nsres)) if(NS_FAILED(nsres))
TRACE("NewURI failed: %08x\n", nsres); TRACE("NewURI failed: %08x\n", nsres);
@ -2009,12 +2018,10 @@ static nsresult NSAPI nsIOService_NewURI(nsIIOService *iface, const nsACString *
if(base_wine_url) { if(base_wine_url) {
WCHAR url[INTERNET_MAX_URL_LENGTH], rel_url[INTERNET_MAX_URL_LENGTH]; WCHAR url[INTERNET_MAX_URL_LENGTH], rel_url[INTERNET_MAX_URL_LENGTH];
LPCSTR speca;
DWORD len; DWORD len;
HRESULT hres; HRESULT hres;
nsACString_GetData(aSpec, &speca, NULL); MultiByteToWideChar(CP_ACP, 0, spec, -1, rel_url, sizeof(rel_url)/sizeof(WCHAR));
MultiByteToWideChar(CP_ACP, 0, speca, -1, rel_url, sizeof(rel_url)/sizeof(WCHAR));
hres = CoInternetCombineUrl(base_wine_url, rel_url, hres = CoInternetCombineUrl(base_wine_url, rel_url,
URL_ESCAPE_SPACES_ONLY|URL_DONT_ESCAPE_EXTRA_INFO, URL_ESCAPE_SPACES_ONLY|URL_DONT_ESCAPE_EXTRA_INFO,
@ -2022,7 +2029,12 @@ static nsresult NSAPI nsIOService_NewURI(nsIIOService *iface, const nsACString *
if(SUCCEEDED(hres)) if(SUCCEEDED(hres))
nsIWineURI_SetWineURL(wine_uri, url); nsIWineURI_SetWineURL(wine_uri, url);
else else
WARN("CoCombineUrl failed: %08x\n", hres); WARN("CoCombineUrl failed: %08x\n", hres);
}else if(is_wine_uri) {
WCHAR url[INTERNET_MAX_URL_LENGTH];
MultiByteToWideChar(CP_ACP, 0, spec, -1, url, sizeof(url)/sizeof(WCHAR));
nsIWineURI_SetWineURL(wine_uri, url);
} }
if(base_wine_uri) if(base_wine_uri)