Jacek Caban : mshtml: Improve loading document detection in AsyncOpen.

Alexandre Julliard julliard at wine.codeweavers.com
Fri Dec 22 04:59:03 CST 2006


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Dec 21 23:32:25 2006 +0100

mshtml: Improve loading document detection in AsyncOpen.

---

 dlls/mshtml/nsembed.c   |    1 +
 dlls/mshtml/nsiface.idl |    2 ++
 dlls/mshtml/nsio.c      |   32 +++++++++++++++++++++++++++++---
 3 files changed, 32 insertions(+), 3 deletions(-)

diff --git a/dlls/mshtml/nsembed.c b/dlls/mshtml/nsembed.c
index f1c2dd2..08917d1 100644
--- a/dlls/mshtml/nsembed.c
+++ b/dlls/mshtml/nsembed.c
@@ -931,6 +931,7 @@ static nsresult NSAPI nsURIContentListen
     }
 
     nsIWineURI_SetNSContainer(wine_uri, This);
+    nsIWineURI_SetIsDocumentURI(wine_uri, TRUE);
 
     if(This->bscallback && This->bscallback->mon) {
         LPWSTR url = NULL;
diff --git a/dlls/mshtml/nsiface.idl b/dlls/mshtml/nsiface.idl
index 3cff0da..fafa15d 100644
--- a/dlls/mshtml/nsiface.idl
+++ b/dlls/mshtml/nsiface.idl
@@ -1531,4 +1531,6 @@ interface nsIWineURI : nsIURI
     nsresult SetNSContainer(NSContainer *aNSContainer);
     nsresult GetMoniker(IMoniker **aMoniker);
     nsresult SetMoniker(IMoniker *aMoniker);
+    nsresult GetIsDocumentURI(PRBool *aIsDocumentURI);
+    nsresult SetIsDocumentURI(PRBool aIsDocumentURI);
 }
diff --git a/dlls/mshtml/nsio.c b/dlls/mshtml/nsio.c
index 4ce041e..6366ba2 100644
--- a/dlls/mshtml/nsio.c
+++ b/dlls/mshtml/nsio.c
@@ -54,6 +54,7 @@ typedef struct {
     NSContainer *container;
     IMoniker *mon;
     LPSTR spec;
+    PRBool is_doc_uri;
 } nsURI;
 
 #define NSURI(x)         ((nsIURI*)            &(x)->lpWineURIVtbl)
@@ -598,11 +599,14 @@ static nsresult NSAPI nsChannel_AsyncOpe
     BSCallback *bscallback;
     nsIWineURI *wine_uri;
     IMoniker *mon;
+    PRBool is_doc_uri;
     nsresult nsres;
 
     TRACE("(%p)->(%p %p)\n", This, aListener, aContext);
 
-    if(This->load_flags & LOAD_INITIAL_DOCUMENT_URI) {
+    nsIWineURI_GetIsDocumentURI(This->uri, &is_doc_uri);
+
+    if(is_doc_uri && (This->load_flags & LOAD_INITIAL_DOCUMENT_URI)) {
         NSContainer *container;
 
         nsIWineURI_GetNSContainer(This->uri, &container);
@@ -633,7 +637,6 @@ static nsresult NSAPI nsChannel_AsyncOpe
                     if(NS_FAILED(nsres))
                         ERR("AddRequest failed:%08x\n", nsres);
                 }
-
                 return WINE_NS_LOAD_FROM_MONIKER;
             }
         }else if(container->doc) {
@@ -1589,6 +1592,26 @@ static nsresult NSAPI nsURI_SetMoniker(n
     return NS_OK;
 }
 
+static nsresult NSAPI nsURI_GetIsDocumentURI(nsIWineURI *iface, PRBool *aIsDocumentURI)
+{
+    nsURI *This = NSURI_THIS(iface);
+
+    TRACE("(%p)->(%p)\n", This, aIsDocumentURI);
+
+    *aIsDocumentURI = This->is_doc_uri;
+    return NS_OK;
+}
+
+static nsresult NSAPI nsURI_SetIsDocumentURI(nsIWineURI *iface, PRBool aIsDocumentURI)
+{
+    nsURI *This = NSURI_THIS(iface);
+
+    TRACE("(%p)->(%x)\n", This, aIsDocumentURI);
+
+    This->is_doc_uri = aIsDocumentURI;
+    return NS_OK;
+}
+
 #undef NSURI_THIS
 
 static const nsIWineURIVtbl nsWineURIVtbl = {
@@ -1624,7 +1647,9 @@ static const nsIWineURIVtbl nsWineURIVtb
     nsURI_GetNSContainer,
     nsURI_SetNSContainer,
     nsURI_GetMoniker,
-    nsURI_SetMoniker
+    nsURI_SetMoniker,
+    nsURI_GetIsDocumentURI,
+    nsURI_SetIsDocumentURI
 };
 
 static nsresult create_uri(nsIURI *uri, NSContainer *container, nsIURI **_retval)
@@ -1637,6 +1662,7 @@ static nsresult create_uri(nsIURI *uri,
     ret->container = container;
     ret->mon = NULL;
     ret->spec = NULL;
+    ret->is_doc_uri = FALSE;
 
     if(container)
         nsIWebBrowserChrome_AddRef(NSWBCHROME(container));




More information about the wine-cvs mailing list