Jacek Caban : mshtml: Moved parse_post_data to GetBindInfo.

Alexandre Julliard julliard at winehq.org
Thu Aug 20 12:58:58 CDT 2009


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Aug 19 20:40:00 2009 +0200

mshtml: Moved parse_post_data to GetBindInfo.

---

 dlls/mshtml/navigate.c |   38 ++++++++++++++++++++++++++++++++------
 1 files changed, 32 insertions(+), 6 deletions(-)

diff --git a/dlls/mshtml/navigate.c b/dlls/mshtml/navigate.c
index ac979cc..0980686 100644
--- a/dlls/mshtml/navigate.c
+++ b/dlls/mshtml/navigate.c
@@ -54,6 +54,7 @@ typedef struct {
 
 typedef struct {
     void (*destroy)(BSCallback*);
+    HRESULT (*init_bindinfo)(BSCallback*);
     HRESULT (*start_binding)(BSCallback*);
     HRESULT (*stop_binding)(BSCallback*,HRESULT);
     HRESULT (*read_data)(BSCallback*,IStream*);
@@ -76,6 +77,7 @@ struct BSCallback {
     ULONG post_data_len;
     ULONG readed;
     DWORD bindf;
+    BOOL bindinfo_ready;
 
     IMoniker *mon;
     IBinding *binding;
@@ -372,6 +374,16 @@ static HRESULT WINAPI BindStatusCallback_GetBindInfo(IBindStatusCallback *iface,
 
     TRACE("(%p)->(%p %p)\n", This, grfBINDF, pbindinfo);
 
+    if(!This->bindinfo_ready) {
+        HRESULT hres;
+
+        hres = This->vtbl->init_bindinfo(This);
+        if(FAILED(hres))
+            return hres;
+
+        This->bindinfo_ready = TRUE;
+    }
+
     *grfBINDF = This->bindf;
 
     size = pbindinfo->cbSize;
@@ -751,6 +763,11 @@ static void BufferBSC_destroy(BSCallback *bsc)
     heap_free(This);
 }
 
+static HRESULT BufferBSC_init_bindinfo(BSCallback *bsc)
+{
+    return S_OK;
+}
+
 static HRESULT BufferBSC_start_binding(BSCallback *bsc)
 {
     return S_OK;
@@ -810,6 +827,7 @@ static HRESULT BufferBSC_on_response(BSCallback *bsc, DWORD response_code)
 
 static const BSCallbackVtbl BufferBSCVtbl = {
     BufferBSC_destroy,
+    BufferBSC_init_bindinfo,
     BufferBSC_start_binding,
     BufferBSC_stop_binding,
     BufferBSC_read_data,
@@ -979,6 +997,19 @@ static HRESULT nsChannelBSC_start_binding(BSCallback *bsc)
     return S_OK;
 }
 
+static HRESULT nsChannelBSC_init_bindinfo(BSCallback *bsc)
+{
+    nsChannelBSC *This = NSCHANNELBSC_THIS(bsc);
+
+    if(This->nschannel && This->nschannel->post_data_stream) {
+        parse_post_data(This->nschannel->post_data_stream, &This->bsc.headers, &This->bsc.post_data, &This->bsc.post_data_len);
+        TRACE("headers = %s post_data = %s\n", debugstr_w(This->bsc.headers),
+              debugstr_an(This->bsc.post_data, This->bsc.post_data_len));
+    }
+
+    return S_OK;
+}
+
 static HRESULT nsChannelBSC_stop_binding(BSCallback *bsc, HRESULT result)
 {
     nsChannelBSC *This = NSCHANNELBSC_THIS(bsc);
@@ -1034,6 +1065,7 @@ static HRESULT nsChannelBSC_on_response(BSCallback *bsc, DWORD response_code)
 
 static const BSCallbackVtbl nsChannelBSCVtbl = {
     nsChannelBSC_destroy,
+    nsChannelBSC_init_bindinfo,
     nsChannelBSC_start_binding,
     nsChannelBSC_stop_binding,
     nsChannelBSC_read_data,
@@ -1110,12 +1142,6 @@ void channelbsc_set_channel(nsChannelBSC *This, nsChannel *channel, nsIStreamLis
         nsISupports_AddRef(context);
         This->nscontext = context;
     }
-
-    if(channel->post_data_stream) {
-        parse_post_data(channel->post_data_stream, &This->bsc.headers, &This->bsc.post_data, &This->bsc.post_data_len);
-        TRACE("headers = %s post_data = %s\n", debugstr_w(This->bsc.headers),
-              debugstr_an(This->bsc.post_data, This->bsc.post_data_len));
-    }
 }
 
 void hlink_frame_navigate(HTMLDocument *doc, IHlinkFrame *hlink_frame,




More information about the wine-cvs mailing list