Jacek Caban : mshtml: Properly implement nsIURI::EqualsExceptRef.

Alexandre Julliard julliard at winehq.org
Tue Nov 15 13:17:33 CST 2011


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue Nov 15 13:31:22 2011 +0100

mshtml: Properly implement nsIURI::EqualsExceptRef.

---

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

diff --git a/dlls/mshtml/nsio.c b/dlls/mshtml/nsio.c
index 547f258..b39453e 100644
--- a/dlls/mshtml/nsio.c
+++ b/dlls/mshtml/nsio.c
@@ -113,6 +113,25 @@ static IUri *get_uri_nofrag(IUri *uri)
     return ret;
 }
 
+static BOOL compare_ignoring_frag(IUri *uri1, IUri *uri2)
+{
+    IUri *uri_nofrag1, *uri_nofrag2;
+    BOOL ret = FALSE;
+
+    uri_nofrag1 = get_uri_nofrag(uri1);
+    if(!uri_nofrag1)
+        return FALSE;
+
+    uri_nofrag2 = get_uri_nofrag(uri2);
+    if(uri_nofrag2) {
+        IUri_IsEqual(uri_nofrag1, uri_nofrag2, &ret);
+        IUri_Release(uri_nofrag2);
+    }
+
+    IUri_Release(uri_nofrag1);
+    return ret;
+}
+
 static nsresult create_nsuri(IUri*,nsIURI*,HTMLWindow*,NSContainer*,nsWineURI**);
 
 static const char *debugstr_nsacstr(const nsACString *nsstr)
@@ -2200,13 +2219,6 @@ static nsresult NSAPI nsURI_Equals(nsIURL *iface, nsIURI *other, PRBool *_retval
     return nsres;
 }
 
-static nsresult NSAPI nsURI_EqualsExceptRef(nsIURL *iface, nsIURI *other, PRBool *_retval)
-{
-    nsWineURI *This = impl_from_nsIURL(iface);
-    FIXME("(%p)->(%p %p)\n", This, other, _retval);
-    return nsIURL_Equals(&This->nsIURL_iface, other, _retval);
-}
-
 static nsresult NSAPI nsURI_SchemeIs(nsIURL *iface, const char *scheme, PRBool *_retval)
 {
     nsWineURI *This = impl_from_nsIURL(iface);
@@ -2334,6 +2346,32 @@ static nsresult NSAPI nsURI_GetOriginCharset(nsIURL *iface, nsACString *aOriginC
     return NS_ERROR_NOT_IMPLEMENTED;
 }
 
+static nsresult NSAPI nsURI_EqualsExceptRef(nsIURL *iface, nsIURI *other, PRBool *_retval)
+{
+    nsWineURI *This = impl_from_nsIURL(iface);
+    nsWineURI *other_obj;
+    nsresult nsres;
+
+    TRACE("(%p)->(%p %p)\n", This, other, _retval);
+
+    nsres = nsIURI_QueryInterface(other, &IID_nsWineURI, (void**)&other_obj);
+    if(NS_FAILED(nsres)) {
+        TRACE("Could not get nsWineURI interface\n");
+        *_retval = FALSE;
+        return NS_OK;
+    }
+
+    if(ensure_uri(This) && ensure_uri(other_obj)) {
+        *_retval = compare_ignoring_frag(This->uri, other_obj->uri);
+        nsres = NS_OK;
+    }else {
+        nsres = NS_ERROR_UNEXPECTED;
+    }
+
+    nsIURI_Release(&other_obj->nsIURL_iface);
+    return nsres;
+}
+
 static nsresult NSAPI nsURI_CloneIgnoreRef(nsIURL *iface, nsIURI **_retval)
 {
     nsWineURI *This = impl_from_nsIURL(iface);




More information about the wine-cvs mailing list