Jacek Caban : mshtml: Always call OnStartRequest before OnStopRequest.

Alexandre Julliard julliard at winehq.org
Mon Aug 31 10:46:51 CDT 2009


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Sun Aug 30 01:01:16 2009 +0200

mshtml: Always call OnStartRequest before OnStopRequest.

---

 dlls/mshtml/navigate.c |   50 +++++++++++++++++++++++++++++++----------------
 1 files changed, 33 insertions(+), 17 deletions(-)

diff --git a/dlls/mshtml/navigate.c b/dlls/mshtml/navigate.c
index 0980686..1a0d5eb 100644
--- a/dlls/mshtml/navigate.c
+++ b/dlls/mshtml/navigate.c
@@ -879,6 +879,38 @@ struct nsChannelBSC {
     nsProtocolStream *nsstream;
 };
 
+static void on_start_nsrequest(nsChannelBSC *This)
+{
+    nsresult nsres;
+
+    /* FIXME: it's needed for http connections from BindToObject. */
+    if(!This->nschannel->response_status)
+        This->nschannel->response_status = 200;
+
+    nsres = nsIStreamListener_OnStartRequest(This->nslistener,
+            (nsIRequest*)NSCHANNEL(This->nschannel), This->nscontext);
+    if(NS_FAILED(nsres))
+        FIXME("OnStartRequest failed: %08x\n", nsres);
+}
+
+static void on_stop_nsrequest(nsChannelBSC *This)
+{
+    nsresult nsres;
+
+    if(!This->nslistener)
+        return;
+
+    if(!This->bsc.readed) {
+        TRACE("No data read! Calling OnStartRequest\n");
+        on_start_nsrequest(This);
+    }
+
+    nsres = nsIStreamListener_OnStopRequest(This->nslistener, (nsIRequest*)NSCHANNEL(This->nschannel),
+            This->nscontext, NS_OK);
+    if(NS_FAILED(nsres))
+        WARN("OnStopRequest failed: %08x\n", nsres);
+}
+
 static HRESULT read_stream_data(nsChannelBSC *This, IStream *stream)
 {
     DWORD read;
@@ -914,14 +946,7 @@ static HRESULT read_stream_data(nsChannelBSC *This, IStream *stream)
                && (BYTE)This->nsstream->buf[1] == 0xfe)
                 This->nschannel->charset = heap_strdupA(UTF16_STR);
 
-            /* FIXME: it's needed for http connections from BindToObject. */
-            if(!This->nschannel->response_status)
-                This->nschannel->response_status = 200;
-
-            nsres = nsIStreamListener_OnStartRequest(This->nslistener,
-                    (nsIRequest*)NSCHANNEL(This->nschannel), This->nscontext);
-            if(NS_FAILED(nsres))
-                FIXME("OnStartRequest failed: %08x\n", nsres);
+            on_start_nsrequest(This);
 
             /* events are reset when a new document URI is loaded, so re-initialise them here */
             if(This->bsc.doc && This->bsc.doc->bscallback == This && This->bsc.doc->nscontainer) {
@@ -948,15 +973,6 @@ static HRESULT read_stream_data(nsChannelBSC *This, IStream *stream)
     return S_OK;
 }
 
-static void on_stop_nsrequest(nsChannelBSC *This)
-{
-    if(!This->nslistener)
-        return;
-
-    nsIStreamListener_OnStopRequest(This->nslistener, (nsIRequest*)NSCHANNEL(This->nschannel),
-            This->nscontext, NS_OK);
-}
-
 static void add_nsrequest(nsChannelBSC *This)
 {
     nsresult nsres;




More information about the wine-cvs mailing list