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

Alexandre Julliard julliard at wine.codeweavers.com
Wed Aug 15 04:34:05 CDT 2007


Module: wine
Branch: master
Commit: 718b771f2a57d0c762d24c6ef62f070eb3647e8a
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=718b771f2a57d0c762d24c6ef62f070eb3647e8a

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue Aug 14 22:36:10 2007 +0200

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

---

 dlls/mshtml/nsio.c |   24 ++++++++++++++++++------
 1 files changed, 18 insertions(+), 6 deletions(-)

diff --git a/dlls/mshtml/nsio.c b/dlls/mshtml/nsio.c
index 13abe9b..61a6386 100644
--- a/dlls/mshtml/nsio.c
+++ b/dlls/mshtml/nsio.c
@@ -1186,8 +1186,8 @@ static nsresult NSAPI nsURI_GetSpec(nsIWineURI *iface, nsACString *aSpec)
     TRACE("(%p)->(%p)\n", This, aSpec);
 
     if(This->use_wine_url) {
-        char speca[INTERNET_MAX_URL_LENGTH];
-        WideCharToMultiByte(CP_ACP, 0, This->wine_url, -1, speca, sizeof(speca), NULL, NULL);
+        char speca[INTERNET_MAX_URL_LENGTH] = "wine:";
+        WideCharToMultiByte(CP_ACP, 0, This->wine_url, -1, speca+5, sizeof(speca)-5, NULL, NULL);
         nsACString_SetData(aSpec, speca);
 
         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 *spec = NULL;
+    nsACString spec_str;
     NSContainer *nscontainer = NULL;
     nsIURI *uri = NULL;
     LPCWSTR base_wine_url = NULL;
     nsIWineURI *base_wine_uri = NULL, *wine_uri;
+    BOOL is_wine_uri = FALSE;
     nsresult nsres;
 
     nsACString_GetData(aSpec, &spec, NULL);
@@ -1970,6 +1972,11 @@ static nsresult NSAPI nsIOService_NewURI(nsIIOService *iface, const nsACString *
     if(is_gecko_special_uri(spec))
         return nsIIOService_NewURI(nsio, aSpec, aOriginCharset, aBaseURI, _retval);
 
+    if(!strncmp(spec, "wine:", 5)) {
+        spec += 5;
+        is_wine_uri = TRUE;
+    }
+
     if(aBaseURI) {
         nsACString base_uri_str;
         const char *base_uri = NULL;
@@ -1987,7 +1994,9 @@ static nsresult NSAPI nsIOService_NewURI(nsIIOService *iface, const nsACString *
         nsACString_Finish(&base_uri_str);
     }
 
+    nsACString_Init(&spec_str, spec);
     nsres = nsIIOService_NewURI(nsio, aSpec, aOriginCharset, aBaseURI, &uri);
+    nsACString_Finish(&spec_str);
     if(NS_FAILED(nsres))
         TRACE("NewURI failed: %08x\n", nsres);
 
@@ -2009,12 +2018,10 @@ static nsresult NSAPI nsIOService_NewURI(nsIIOService *iface, const nsACString *
 
     if(base_wine_url) {
         WCHAR url[INTERNET_MAX_URL_LENGTH], rel_url[INTERNET_MAX_URL_LENGTH];
-        LPCSTR speca;
         DWORD len;
         HRESULT hres;
 
-        nsACString_GetData(aSpec, &speca, NULL);
-        MultiByteToWideChar(CP_ACP, 0, speca, -1, rel_url, sizeof(rel_url)/sizeof(WCHAR));
+        MultiByteToWideChar(CP_ACP, 0, spec, -1, rel_url, sizeof(rel_url)/sizeof(WCHAR));
 
         hres = CoInternetCombineUrl(base_wine_url, rel_url,
                                     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))
             nsIWineURI_SetWineURL(wine_uri, url);
         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)




More information about the wine-cvs mailing list