Jacek Caban : mshtml: Use fregment-less URI in super_navigate.

Alexandre Julliard julliard at winehq.org
Fri Nov 9 11:03:23 CST 2012


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Nov  8 18:17:12 2012 +0100

mshtml: Use fregment-less URI in super_navigate.

---

 dlls/mshtml/mshtml_private.h |    1 -
 dlls/mshtml/navigate.c       |   22 +++++++++++++++++-----
 dlls/mshtml/nsio.c           |    2 +-
 dlls/mshtml/tests/htmldoc.c  |    6 ++----
 4 files changed, 20 insertions(+), 11 deletions(-)

diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index 97cd165..f24354d 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -780,7 +780,6 @@ BOOL is_gecko_path(const char*) DECLSPEC_HIDDEN;
 void init_node_cc(void);
 
 HRESULT nsuri_to_url(LPCWSTR,BOOL,BSTR*) DECLSPEC_HIDDEN;
-BOOL compare_ignoring_frag(IUri*,IUri*) DECLSPEC_HIDDEN;
 
 HRESULT navigate_url(HTMLOuterWindow*,const WCHAR*,IUri*) DECLSPEC_HIDDEN;
 HRESULT set_frame_doc(HTMLFrameBase*,nsIDOMDocument*) DECLSPEC_HIDDEN;
diff --git a/dlls/mshtml/navigate.c b/dlls/mshtml/navigate.c
index e2eecef..18961f6 100644
--- a/dlls/mshtml/navigate.c
+++ b/dlls/mshtml/navigate.c
@@ -2047,10 +2047,15 @@ static HRESULT navigate_fragment(HTMLOuterWindow *window, IUri *uri)
 HRESULT super_navigate(HTMLOuterWindow *window, IUri *uri, const WCHAR *headers, BYTE *post_data, DWORD post_data_size)
 {
     nsChannelBSC *bsc;
+    IUri *uri_nofrag;
     IMoniker *mon;
     DWORD scheme;
     HRESULT hres;
 
+    uri_nofrag = get_uri_nofrag(uri);
+    if(!uri_nofrag)
+        return E_FAIL;
+
     if(window->doc_obj->client) {
         IOleCommandTarget *cmdtrg;
 
@@ -2059,7 +2064,7 @@ HRESULT super_navigate(HTMLOuterWindow *window, IUri *uri, const WCHAR *headers,
             VARIANT in, out;
             BSTR url_str;
 
-            hres = IUri_GetDisplayUri(uri, &url_str);
+            hres = IUri_GetDisplayUri(uri_nofrag, &url_str);
             if(SUCCEEDED(hres)) {
                 V_VT(&in) = VT_BSTR;
                 V_BSTR(&in) = url_str;
@@ -2074,12 +2079,19 @@ HRESULT super_navigate(HTMLOuterWindow *window, IUri *uri, const WCHAR *headers,
         }
     }
 
-    if(window->uri && !post_data_size && compare_ignoring_frag(window->uri, uri)) {
-        TRACE("fragment navigate\n");
-        return navigate_fragment(window, uri);
+    if(window->uri_nofrag && !post_data_size) {
+        BOOL eq;
+
+        hres = IUri_IsEqual(uri_nofrag, window->uri_nofrag, &eq);
+        if(SUCCEEDED(hres) && eq) {
+            IUri_Release(uri_nofrag);
+            TRACE("fragment navigate\n");
+            return navigate_fragment(window, uri);
+        }
     }
 
-    hres = CreateURLMonikerEx2(NULL, uri, &mon, URL_MK_UNIFORM);
+    hres = CreateURLMonikerEx2(NULL, uri_nofrag, &mon, URL_MK_UNIFORM);
+    IUri_Release(uri_nofrag);
     if(FAILED(hres))
         return hres;
 
diff --git a/dlls/mshtml/nsio.c b/dlls/mshtml/nsio.c
index 204879f..5ce6648 100644
--- a/dlls/mshtml/nsio.c
+++ b/dlls/mshtml/nsio.c
@@ -121,7 +121,7 @@ IUri *get_uri_nofrag(IUri *uri)
     return ret;
 }
 
-BOOL compare_ignoring_frag(IUri *uri1, IUri *uri2)
+static BOOL compare_ignoring_frag(IUri *uri1, IUri *uri2)
 {
     IUri *uri_nofrag1, *uri_nofrag2;
     BOOL ret = FALSE;
diff --git a/dlls/mshtml/tests/htmldoc.c b/dlls/mshtml/tests/htmldoc.c
index 849b517..0e8e0bb 100644
--- a/dlls/mshtml/tests/htmldoc.c
+++ b/dlls/mshtml/tests/htmldoc.c
@@ -2835,10 +2835,8 @@ static HRESULT WINAPI OleCommandTarget_Exec(IOleCommandTarget *iface, const GUID
             CHECK_EXPECT(Exec_ShellDocView_67);
             ok(pvaIn != NULL, "pvaIn == NULL\n");
             ok(V_VT(pvaIn) == VT_BSTR, "V_VT(pvaIn) = %d\n", V_VT(pvaIn));
-            if(!loading_hash)
-                ok(!strcmp_wa(V_BSTR(pvaIn), nav_serv_url), "V_BSTR(pvaIn) = %s, expected %s\n", wine_dbgstr_w(V_BSTR(pvaIn)), nav_serv_url);
-            else
-                todo_wine ok(!strcmp_wa(V_BSTR(pvaIn), nav_serv_url), "V_BSTR(pvaIn) = %s, expected %s\n", wine_dbgstr_w(V_BSTR(pvaIn)), nav_serv_url);
+            ok(!strcmp_wa(V_BSTR(pvaIn), nav_serv_url), "V_BSTR(pvaIn) = %s, expected %s\n",
+               wine_dbgstr_w(V_BSTR(pvaIn)), nav_serv_url);
             ok(pvaOut != NULL, "pvaOut == NULL\n");
             ok(V_VT(pvaOut) == VT_BOOL, "V_VT(pvaOut) = %d\n", V_VT(pvaOut));
             ok(V_BOOL(pvaOut) == VARIANT_TRUE, "V_BOOL(pvaOut) = %x\n", V_BOOL(pvaOut));




More information about the wine-cvs mailing list