Module: wine Branch: master Commit: 508aec93c103f0e02eb5105707dfa3dcd98eb8a4 URL: http://source.winehq.org/git/wine.git/?a=commit;h=508aec93c103f0e02eb5105707...
Author: Jacek Caban jacek@codeweavers.com Date: Tue Aug 3 21:39:04 2010 +0200
mshtml: Allow customization of BeginningTransaction.
---
dlls/mshtml/navigate.c | 40 ++++++++++++++++++++++++++++++---------- 1 files changed, 30 insertions(+), 10 deletions(-)
diff --git a/dlls/mshtml/navigate.c b/dlls/mshtml/navigate.c index 3f83456..fc37f4d 100644 --- a/dlls/mshtml/navigate.c +++ b/dlls/mshtml/navigate.c @@ -63,6 +63,7 @@ typedef struct { HRESULT (*read_data)(BSCallback*,IStream*); HRESULT (*on_progress)(BSCallback*,ULONG,LPCWSTR); HRESULT (*on_response)(BSCallback*,DWORD,LPCWSTR); + HRESULT (*beginning_transaction)(BSCallback*,WCHAR**); } BSCallbackVtbl;
struct BSCallback { @@ -468,19 +469,26 @@ static HRESULT WINAPI HttpNegotiate_BeginningTransaction(IHttpNegotiate2 *iface, LPCWSTR szURL, LPCWSTR szHeaders, DWORD dwReserved, LPWSTR *pszAdditionalHeaders) { BSCallback *This = HTTPNEG_THIS(iface); - DWORD size; + HRESULT hres;
TRACE("(%p)->(%s %s %d %p)\n", This, debugstr_w(szURL), debugstr_w(szHeaders), dwReserved, pszAdditionalHeaders);
- if(!This->headers) { - *pszAdditionalHeaders = NULL; - return S_OK; - } + *pszAdditionalHeaders = NULL;
- size = (strlenW(This->headers)+1)*sizeof(WCHAR); - *pszAdditionalHeaders = CoTaskMemAlloc(size); - memcpy(*pszAdditionalHeaders, This->headers, size); + hres = This->vtbl->beginning_transaction(This, pszAdditionalHeaders); + if(hres != S_FALSE) + return hres; + + if(This->headers) { + DWORD size; + + size = (strlenW(This->headers)+1)*sizeof(WCHAR); + *pszAdditionalHeaders = CoTaskMemAlloc(size); + if(!*pszAdditionalHeaders) + return E_OUTOFMEMORY; + memcpy(*pszAdditionalHeaders, This->headers, size); + }
return S_OK; } @@ -864,6 +872,11 @@ static HRESULT BufferBSC_on_response(BSCallback *bsc, DWORD response_code, return S_OK; }
+static HRESULT BufferBSC_beginning_transaction(BSCallback *bsc, WCHAR **additional_headers) +{ + return S_FALSE; +} + #undef BUFFERBSC_THIS
static const BSCallbackVtbl BufferBSCVtbl = { @@ -873,7 +886,8 @@ static const BSCallbackVtbl BufferBSCVtbl = { BufferBSC_stop_binding, BufferBSC_read_data, BufferBSC_on_progress, - BufferBSC_on_response + BufferBSC_on_response, + BufferBSC_beginning_transaction };
@@ -1158,6 +1172,11 @@ static HRESULT nsChannelBSC_on_response(BSCallback *bsc, DWORD response_code, return S_OK; }
+static HRESULT nsChannelBSC_beginning_transaction(BSCallback *bsc, WCHAR **additional_headers) +{ + return S_FALSE; +} + #undef NSCHANNELBSC_THIS
static const BSCallbackVtbl nsChannelBSCVtbl = { @@ -1167,7 +1186,8 @@ static const BSCallbackVtbl nsChannelBSCVtbl = { nsChannelBSC_stop_binding, nsChannelBSC_read_data, nsChannelBSC_on_progress, - nsChannelBSC_on_response + nsChannelBSC_on_response, + nsChannelBSC_beginning_transaction };
HRESULT create_channelbsc(IMoniker *mon, WCHAR *headers, BYTE *post_data, DWORD post_data_size, nsChannelBSC **retval)