Jacek Caban : shdocvw: Store URL in BindStatusCallback.

Alexandre Julliard julliard at winehq.org
Mon Jan 21 05:58:52 CST 2008


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Fri Jan 18 21:53:06 2008 +0100

shdocvw: Store URL in BindStatusCallback.

---

 dlls/shdocvw/navigate.c |    7 +++++--
 dlls/shdocvw/shdocvw.h  |   17 +++++++++++++++++
 2 files changed, 22 insertions(+), 2 deletions(-)

diff --git a/dlls/shdocvw/navigate.c b/dlls/shdocvw/navigate.c
index ad9fc0b..37245f7 100644
--- a/dlls/shdocvw/navigate.c
+++ b/dlls/shdocvw/navigate.c
@@ -40,6 +40,7 @@ typedef struct {
 
     DocHost *doc_host;
 
+    LPWSTR url;
     HGLOBAL post_data;
     LPWSTR headers;
     ULONG post_data_len;
@@ -160,6 +161,7 @@ static ULONG WINAPI BindStatusCallback_Release(IBindStatusCallback *iface)
             IOleClientSite_Release(CLIENTSITE(This->doc_host));
         if(This->post_data)
             GlobalFree(This->post_data);
+        heap_free(This->url);
         heap_free(This->headers);
         heap_free(This);
     }
@@ -379,7 +381,7 @@ static const IHttpNegotiateVtbl HttpNegotiateVtbl = {
     HttpNegotiate_OnResponse
 };
 
-static IBindStatusCallback *create_callback(DocHost *doc_host, PBYTE post_data,
+static IBindStatusCallback *create_callback(DocHost *doc_host, LPCWSTR url, PBYTE post_data,
         ULONG post_data_len, LPWSTR headers)
 {
     BindStatusCallback *ret = heap_alloc(sizeof(BindStatusCallback));
@@ -388,6 +390,7 @@ static IBindStatusCallback *create_callback(DocHost *doc_host, PBYTE post_data,
     ret->lpHttpNegotiateVtbl      = &HttpNegotiateVtbl;
 
     ret->ref = 1;
+    ret->url = heap_strdupW(url);
     ret->post_data = NULL;
     ret->post_data_len = post_data_len;
     ret->headers = NULL;
@@ -613,7 +616,7 @@ static HRESULT navigate_mon(DocHost *This, IMoniker *mon, PBYTE post_data, ULONG
     CoTaskMemFree(This->url);
     This->url = url;
 
-    callback = create_callback(This, post_data, post_data_len, (LPWSTR)headers);
+    callback = create_callback(This, url, post_data, post_data_len, (LPWSTR)headers);
     CreateAsyncBindCtx(0, callback, 0, &bindctx);
 
     hres = bind_to_object(This, mon, This->url, bindctx, callback);
diff --git a/dlls/shdocvw/shdocvw.h b/dlls/shdocvw/shdocvw.h
index 494bae9..5b9ed46 100644
--- a/dlls/shdocvw/shdocvw.h
+++ b/dlls/shdocvw/shdocvw.h
@@ -38,6 +38,8 @@
 #include "mshtmhst.h"
 #include "hlink.h"
 
+#include "wine/unicode.h"
+
 /**********************************************************************
  * Shell Instance Objects
  */
@@ -241,4 +243,19 @@ static inline BOOL heap_free(void *mem)
     return HeapFree(GetProcessHeap(), 0, mem);
 }
 
+static inline LPWSTR heap_strdupW(LPCWSTR str)
+{
+    LPWSTR ret = NULL;
+
+    if(str) {
+        DWORD size;
+
+        size = (strlenW(str)+1)*sizeof(WCHAR);
+        ret = heap_alloc(size);
+        memcpy(ret, str, size);
+    }
+
+    return ret;
+}
+
 #endif /* __WINE_SHDOCVW_H */




More information about the wine-cvs mailing list