Jacek Caban : mshtml: Make translate_url IUri-based.

Alexandre Julliard julliard at winehq.org
Sun Dec 5 12:10:05 CST 2010


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Sat Dec  4 14:19:54 2010 +0100

mshtml: Make translate_url IUri-based.

---

 dlls/mshtml/nsio.c |  108 +++++++++++++++++++++++++++-------------------------
 1 files changed, 56 insertions(+), 52 deletions(-)

diff --git a/dlls/mshtml/nsio.c b/dlls/mshtml/nsio.c
index 412b1d4..aef54ee 100644
--- a/dlls/mshtml/nsio.c
+++ b/dlls/mshtml/nsio.c
@@ -192,58 +192,6 @@ HRESULT load_nsuri(HTMLWindow *window, nsWineURI *uri, nsChannelBSC *channelbsc,
     return S_OK;
 }
 
-static BOOL translate_url(HTMLDocumentObj *doc, nsWineURI *uri)
-{
-    OLECHAR *new_url = NULL, *url;
-    BOOL ret = FALSE;
-    HRESULT hres;
-
-    if(!doc->hostui)
-        return FALSE;
-
-    url = heap_strdupW(uri->wine_url);
-    hres = IDocHostUIHandler_TranslateUrl(doc->hostui, 0, url, &new_url);
-    if(hres == S_OK && new_url) {
-        if(strcmpW(url, new_url)) {
-            FIXME("TranslateUrl returned new URL %s -> %s\n", debugstr_w(url), debugstr_w(new_url));
-            ret = TRUE;
-        }
-        CoTaskMemFree(new_url);
-    }
-
-    heap_free(url);
-    return ret;
-}
-
-nsresult on_start_uri_open(NSContainer *nscontainer, nsIURI *uri, PRBool *_retval)
-{
-    nsWineURI *wine_uri;
-    nsresult nsres;
-
-    *_retval = FALSE;
-
-    nsres = nsIURI_QueryInterface(uri, &IID_nsWineURI, (void**)&wine_uri);
-    if(NS_FAILED(nsres)) {
-        WARN("Could not get nsWineURI: %08x\n", nsres);
-        return NS_ERROR_NOT_IMPLEMENTED;
-    }
-
-    if(!wine_uri->is_doc_uri) {
-        wine_uri->is_doc_uri = TRUE;
-
-        if(!wine_uri->container) {
-            nsIWebBrowserChrome_AddRef(NSWBCHROME(nscontainer));
-            wine_uri->container = nscontainer;
-        }
-
-        if(nscontainer->doc)
-            *_retval = translate_url(nscontainer->doc, wine_uri);
-    }
-
-    nsIURI_Release(NSURI(wine_uri));
-    return NS_OK;
-}
-
 HRESULT set_wine_url(nsWineURI *This, LPCWSTR url)
 {
     TRACE("(%p)->(%s)\n", This, debugstr_w(url));
@@ -3107,6 +3055,62 @@ static const nsIFactoryVtbl nsIOServiceFactoryVtbl = {
 
 static nsIFactory nsIOServiceFactory = { &nsIOServiceFactoryVtbl };
 
+static BOOL translate_url(HTMLDocumentObj *doc, nsWineURI *uri)
+{
+    OLECHAR *new_url = NULL;
+    WCHAR *url;
+    BOOL ret = FALSE;
+    HRESULT hres;
+
+    if(!doc->hostui || !ensure_uri(uri))
+        return FALSE;
+
+    hres = IUri_GetDisplayUri(uri->uri, &url);
+    if(FAILED(hres))
+        return FALSE;
+
+    hres = IDocHostUIHandler_TranslateUrl(doc->hostui, 0, url, &new_url);
+    if(hres == S_OK && new_url) {
+        if(strcmpW(url, new_url)) {
+            FIXME("TranslateUrl returned new URL %s -> %s\n", debugstr_w(url), debugstr_w(new_url));
+            ret = TRUE;
+        }
+        CoTaskMemFree(new_url);
+    }
+
+    SysFreeString(url);
+    return ret;
+}
+
+nsresult on_start_uri_open(NSContainer *nscontainer, nsIURI *uri, PRBool *_retval)
+{
+    nsWineURI *wine_uri;
+    nsresult nsres;
+
+    *_retval = FALSE;
+
+    nsres = nsIURI_QueryInterface(uri, &IID_nsWineURI, (void**)&wine_uri);
+    if(NS_FAILED(nsres)) {
+        WARN("Could not get nsWineURI: %08x\n", nsres);
+        return NS_ERROR_NOT_IMPLEMENTED;
+    }
+
+    if(!wine_uri->is_doc_uri) {
+        wine_uri->is_doc_uri = TRUE;
+
+        if(!wine_uri->container) {
+            nsIWebBrowserChrome_AddRef(NSWBCHROME(nscontainer));
+            wine_uri->container = nscontainer;
+        }
+
+        if(nscontainer->doc)
+            *_retval = translate_url(nscontainer->doc, wine_uri);
+    }
+
+    nsIURI_Release(NSURI(wine_uri));
+    return NS_OK;
+}
+
 void init_nsio(nsIComponentManager *component_manager, nsIComponentRegistrar *registrar)
 {
     nsIFactory *old_factory = NULL;




More information about the wine-cvs mailing list