Jacek Caban : mshtml: Allow customization of BeginningTransaction.

Alexandre Julliard julliard at winehq.org
Wed Aug 4 12:27:21 CDT 2010


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

Author: Jacek Caban <jacek at 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)




More information about the wine-cvs mailing list