diff --git a/dlls/mshtml/navigate.c b/dlls/mshtml/navigate.c index 5cd63c1b505..64830c3d27b 100644 --- a/dlls/mshtml/navigate.c +++ b/dlls/mshtml/navigate.c @@ -982,18 +982,25 @@ static void on_stop_nsrequest(nsChannelBSC *This, HRESULT result) { nsresult nsres; - if(!This->nslistener) - return; - if(!This->bsc.readed && SUCCEEDED(result)) { TRACE("No data read! Calling OnStartRequest\n"); on_start_nsrequest(This); } - nsres = nsIStreamListener_OnStopRequest(This->nslistener, (nsIRequest*)NSCHANNEL(This->nschannel), - This->nscontext, SUCCEEDED(result) ? NS_OK : NS_ERROR_FAILURE); - if(NS_FAILED(nsres)) - WARN("OnStopRequest failed: %08x\n", nsres); + if(This->nslistener) { + nsres = nsIStreamListener_OnStopRequest(This->nslistener, + (nsIRequest*)NSCHANNEL(This->nschannel), + This->nscontext, SUCCEEDED(result) ? NS_OK : NS_ERROR_FAILURE); + if(NS_FAILED(nsres)) + WARN("OnStopRequet failed: %08x\n", nsres); + } + + if(This->nschannel->load_group) { + nsres = nsILoadGroup_RemoveRequest(This->nschannel->load_group, + (nsIRequest*)NSCHANNEL(This->nschannel), NULL, NS_OK); + if(NS_FAILED(nsres)) + ERR("RemoveRequest failed: %08x\n", nsres); + } } static HRESULT read_stream_data(nsChannelBSC *This, IStream *stream) @@ -1073,20 +1080,6 @@ static HRESULT read_stream_data(nsChannelBSC *This, IStream *stream) return S_OK; } -static void add_nsrequest(nsChannelBSC *This) -{ - nsresult nsres; - - if(!This->nschannel || !This->nschannel->load_group) - return; - - nsres = nsILoadGroup_AddRequest(This->nschannel->load_group, - (nsIRequest*)NSCHANNEL(This->nschannel), This->nscontext); - - if(NS_FAILED(nsres)) - ERR("AddRequest failed:%08x\n", nsres); -} - #define NSCHANNELBSC_THIS(bsc) ((nsChannelBSC*) bsc) static void nsChannelBSC_destroy(BSCallback *bsc) @@ -1106,10 +1099,6 @@ static void nsChannelBSC_destroy(BSCallback *bsc) static HRESULT nsChannelBSC_start_binding(BSCallback *bsc) { - nsChannelBSC *This = NSCHANNELBSC_THIS(bsc); - - add_nsrequest(This); - return S_OK; } @@ -1393,8 +1382,6 @@ HRESULT channelbsc_load_stream(nsChannelBSC *bscallback, IStream *stream) if(!bscallback->nschannel->content_type) return E_OUTOFMEMORY; - add_nsrequest(bscallback); - hres = read_stream_data(bscallback, stream); IBindStatusCallback_OnStopBinding(STATUSCLB(&bscallback->bsc), hres, ERROR_SUCCESS); diff --git a/dlls/mshtml/nsio.c b/dlls/mshtml/nsio.c index d88ccded322..758bac04a4d 100644 --- a/dlls/mshtml/nsio.c +++ b/dlls/mshtml/nsio.c @@ -1035,6 +1035,12 @@ static nsresult NSAPI nsChannel_AsyncOpen(nsIHttpChannel *iface, nsIStreamListen if(open) nsres = async_open(This, window, This->uri->is_doc_uri, aListener, aContext); + if(NS_SUCCEEDED(nsres) && This->load_group) { + nsres = nsILoadGroup_AddRequest(This->load_group, (nsIRequest*)NSCHANNEL(This), aContext); + if(NS_FAILED(nsres)) + ERR("AddRequest failed: %08x\n", nsres); + } + IHTMLWindow2_Release(HTMLWINDOW2(window)); return nsres; }