Module: wine Branch: master Commit: 4ff62118954f2de233fc4ab326b0baf665d57cbd URL: http://source.winehq.org/git/wine.git/?a=commit;h=4ff62118954f2de233fc4ab326...
Author: Jacek Caban jacek@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 */