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