Jacek Caban : shdocvw: Pass post data as SAFEARRAY to on_before_navigate2.
Alexandre Julliard
julliard at winehq.org
Mon Mar 15 12:19:35 CDT 2010
Module: wine
Branch: master
Commit: 271993e279a537ac39647fcbff892680f3184192
URL: http://source.winehq.org/git/wine.git/?a=commit;h=271993e279a537ac39647fcbff892680f3184192
Author: Jacek Caban <jacek at codeweavers.com>
Date: Sat Mar 13 16:44:08 2010 +0100
shdocvw: Pass post data as SAFEARRAY to on_before_navigate2.
---
dlls/shdocvw/navigate.c | 31 +++++++++++++++----------------
1 files changed, 15 insertions(+), 16 deletions(-)
diff --git a/dlls/shdocvw/navigate.c b/dlls/shdocvw/navigate.c
index 456cd83..b65961a 100644
--- a/dlls/shdocvw/navigate.c
+++ b/dlls/shdocvw/navigate.c
@@ -378,8 +378,7 @@ static BindStatusCallback *create_callback(DocHost *doc_host, LPCWSTR url, PBYTE
return ret;
}
-static void on_before_navigate2(DocHost *This, LPCWSTR url, const BYTE *post_data,
- ULONG post_data_len, LPWSTR headers, VARIANT_BOOL *cancel)
+static void on_before_navigate2(DocHost *This, LPCWSTR url, SAFEARRAY *post_data, LPWSTR headers, VARIANT_BOOL *cancel)
{
VARIANT var_url, var_flags, var_frame_name, var_post_data, var_post_data2, var_headers;
DISPPARAMS dispparams;
@@ -404,18 +403,12 @@ static void on_before_navigate2(DocHost *This, LPCWSTR url, const BYTE *post_dat
V_VARIANTREF(params+2) = &var_post_data2;
V_VT(&var_post_data2) = (VT_BYREF|VT_VARIANT);
V_VARIANTREF(&var_post_data2) = &var_post_data;
- VariantInit(&var_post_data);
-
- if(post_data_len) {
- SAFEARRAYBOUND bound = {post_data_len, 0};
- void *data;
+ if(post_data) {
V_VT(&var_post_data) = VT_UI1|VT_ARRAY;
- V_ARRAY(&var_post_data) = SafeArrayCreate(VT_UI1, 1, &bound);
-
- SafeArrayAccessData(V_ARRAY(&var_post_data), &data);
- memcpy(data, post_data, post_data_len);
- SafeArrayUnaccessData(V_ARRAY(&var_post_data));
+ V_ARRAY(&var_post_data) = post_data;
+ }else {
+ V_VT(&var_post_data) = VT_EMPTY;
}
V_VT(params+3) = (VT_BYREF|VT_VARIANT);
@@ -439,8 +432,6 @@ static void on_before_navigate2(DocHost *This, LPCWSTR url, const BYTE *post_dat
call_sink(This->cps.wbe2, DISPID_BEFORENAVIGATE2, &dispparams);
SysFreeString(V_BSTR(&var_url));
- if(post_data_len)
- SafeArrayDestroy(V_ARRAY(&var_post_data));
}
/* FIXME: urlmon should handle it */
@@ -545,13 +536,21 @@ static HRESULT bind_to_object(DocHost *This, IMoniker *mon, LPCWSTR url, IBindCt
static HRESULT navigate_bsc(DocHost *This, BindStatusCallback *bsc, IMoniker *mon)
{
- IBindCtx *bindctx;
VARIANT_BOOL cancel = VARIANT_FALSE;
+ SAFEARRAY *post_data = NULL;
+ IBindCtx *bindctx;
HRESULT hres;
set_doc_state(This, READYSTATE_LOADING);
- on_before_navigate2(This, bsc->url, bsc->post_data, bsc->post_data_len, bsc->headers, &cancel);
+ if(bsc->post_data) {
+ post_data = SafeArrayCreateVector(VT_UI1, 0, bsc->post_data_len);
+ memcpy(post_data->pvData, post_data, bsc->post_data_len);
+ }
+
+ on_before_navigate2(This, bsc->url, post_data, bsc->headers, &cancel);
+ if(post_data)
+ SafeArrayDestroy(post_data);
if(cancel) {
FIXME("Navigation canceled\n");
return S_OK;
More information about the wine-cvs
mailing list