diff --git a/dlls/mshtml/nsembed.c b/dlls/mshtml/nsembed.c
index f1c2dd2d215..08917d187d4 100644
--- a/dlls/mshtml/nsembed.c
+++ b/dlls/mshtml/nsembed.c
@@ -931,6 +931,7 @@ static nsresult NSAPI nsURIContentListener_OnStartURIOpen(nsIURIContentListener
}
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 3cff0dad973..fafa15d3e5c 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 4ce041e6050..6366ba266ef 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_AsyncOpen(nsIHttpChannel *iface, nsIStreamListen
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_AsyncOpen(nsIHttpChannel *iface, nsIStreamListen
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(nsIWineURI *iface, IMoniker *aMoniker)
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 nsWineURIVtbl = {
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, NSContainer *container, nsIURI **_retval
ret->container = container;
ret->mon = NULL;
ret->spec = NULL;
+ ret->is_doc_uri = FALSE;
if(container)
nsIWebBrowserChrome_AddRef(NSWBCHROME(container));