Jacek Caban : mshtml: Make nsIIOService::NewURI IUri-based.

Alexandre Julliard julliard at winehq.org
Fri Dec 31 11:01:04 CST 2010


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Dec 30 16:32:58 2010 -0600

mshtml: Make nsIIOService::NewURI IUri-based.

---

 dlls/mshtml/nsio.c |   73 ++++++++++++++++++++++------------------------------
 1 files changed, 31 insertions(+), 42 deletions(-)

diff --git a/dlls/mshtml/nsio.c b/dlls/mshtml/nsio.c
index 30185dd..e7f8a70 100644
--- a/dlls/mshtml/nsio.c
+++ b/dlls/mshtml/nsio.c
@@ -2699,13 +2699,13 @@ static nsresult NSAPI nsIOService_NewURI(nsIIOService *iface, const nsACString *
         const char *aOriginCharset, nsIURI *aBaseURI, nsIURI **_retval)
 {
     nsWineURI *wine_uri, *base_wine_uri = NULL;
-    const char *spec = NULL;
+    WCHAR new_spec[INTERNET_MAX_URL_LENGTH];
     HTMLWindow *window = NULL;
+    const char *spec = NULL;
     nsIURI *uri = NULL;
-    LPCWSTR base_wine_url = NULL;
-    nsACString spec_str;
+    IUri *urlmon_uri;
     nsresult nsres;
-
+    HRESULT hres;
 
     TRACE("(%s %s %p %p)\n", debugstr_nsacstr(aSpec), debugstr_a(aOriginCharset),
           aBaseURI, _retval);
@@ -2718,60 +2718,49 @@ static nsresult NSAPI nsIOService_NewURI(nsIIOService *iface, const nsACString *
         spec += 5;
 
     if(aBaseURI) {
-        PARSEDURLA parsed_url = {sizeof(PARSEDURLA)};
-
         nsres = nsIURI_QueryInterface(aBaseURI, &IID_nsWineURI, (void**)&base_wine_uri);
         if(NS_SUCCEEDED(nsres)) {
-            base_wine_url = base_wine_uri->wine_url;
-            if(base_wine_uri->window_ref && base_wine_uri->window_ref->window) {
+            if(!ensure_uri(base_wine_uri))
+                return NS_ERROR_UNEXPECTED;
+            if(base_wine_uri->window_ref)
                 window = base_wine_uri->window_ref->window;
-                IHTMLWindow2_AddRef(&window->IHTMLWindow2_iface);
-            }
-            TRACE("base url: %s window: %p\n", debugstr_w(base_wine_url), window);
-        }else if(FAILED(ParseURLA(spec, &parsed_url))) {
-            TRACE("not wraping\n");
-            return nsIIOService_NewURI(nsio, aSpec, aOriginCharset, aBaseURI, _retval);
         }else {
             WARN("Could not get base nsWineURI: %08x\n", nsres);
         }
     }
 
-    nsACString_InitDepend(&spec_str, spec);
-    nsres = nsIIOService_NewURI(nsio, &spec_str, aOriginCharset, aBaseURI, &uri);
-    nsACString_Finish(&spec_str);
-    if(NS_FAILED(nsres))
-        TRACE("NewURI failed: %08x\n", nsres);
-
-    nsres = create_uri(uri, window, NULL, &wine_uri);
-    *_retval = (nsIURI*)wine_uri;
+    MultiByteToWideChar(CP_ACP, 0, spec, -1, new_spec, sizeof(new_spec)/sizeof(WCHAR));
 
-    if(window)
-        IHTMLWindow2_Release(&window->IHTMLWindow2_iface);
-
-    if(base_wine_url) {
-        WCHAR url[INTERNET_MAX_URL_LENGTH], rel_url[INTERNET_MAX_URL_LENGTH];
-        DWORD len;
-        HRESULT hres;
-
-        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,
-                                    url, sizeof(url)/sizeof(WCHAR), &len, 0);
-        if(SUCCEEDED(hres))
-            set_wine_url(wine_uri, url);
-        else
-             WARN("CoCombineUrl failed: %08x\n", hres);
+    if(base_wine_uri) {
+        hres = CoInternetCombineUrlEx(base_wine_uri->uri, new_spec, URL_ESCAPE_SPACES_ONLY|URL_DONT_ESCAPE_EXTRA_INFO,
+                &urlmon_uri, 0);
+        if(FAILED(hres))
+            WARN("CoInternetCombineUrlEx failed: %08x\n", hres);
     }else {
-        WCHAR url[INTERNET_MAX_URL_LENGTH];
+        hres = CreateUri(new_spec, 0, 0, &urlmon_uri);
+        if(FAILED(hres))
+            WARN("CreateUri failed: %08x\n", hres);
+    }
 
-        MultiByteToWideChar(CP_ACP, 0, spec, -1, url, sizeof(url)/sizeof(WCHAR));
-        set_wine_url(wine_uri, url);
+    nsres = nsIIOService_NewURI(nsio, aSpec, aOriginCharset, aBaseURI, &uri);
+    if(NS_FAILED(nsres))
+        TRACE("NewURI failed: %08x\n", nsres);
+
+    if(FAILED(hres)) {
+        *_retval = uri;
+        return nsres;
     }
 
+    nsres = create_uri(uri, window, NULL, &wine_uri);
     if(base_wine_uri)
         nsIURI_Release(NSURI(base_wine_uri));
+    if(NS_FAILED(nsres))
+        return nsres;
 
+    wine_uri->uri = urlmon_uri;
+
+    sync_wine_url(wine_uri);
+    *_retval = (nsIURI*)wine_uri;
     return nsres;
 }
 




More information about the wine-cvs mailing list