shdocvw: Store URL in BindStatusCallback.

This commit is contained in:
Jacek Caban 2008-01-18 21:53:06 +01:00 committed by Alexandre Julliard
parent 6a23bd885d
commit 4ff6211895
2 changed files with 22 additions and 2 deletions

View File

@ -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);

View File

@ -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 */