Module: wine Branch: master Commit: f35c66c693f5ec90bcf526d4d1b5edac49187941 URL: http://source.winehq.org/git/wine.git/?a=commit;h=f35c66c693f5ec90bcf526d4d1...
Author: Jacek Caban jacek@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));