Jacek Caban : ieframe: Added IDocObjectService:: FireBeforeNavigate2 implementation.
Alexandre Julliard
julliard at winehq.org
Tue Nov 15 13:17:32 CST 2011
Module: wine
Branch: master
Commit: 4816929cfeb0018d7a3247237ea286f1d10df2be
URL: http://source.winehq.org/git/wine.git/?a=commit;h=4816929cfeb0018d7a3247237ea286f1d10df2be
Author: Jacek Caban <jacek at codeweavers.com>
Date: Tue Nov 15 13:28:32 2011 +0100
ieframe: Added IDocObjectService::FireBeforeNavigate2 implementation.
---
dlls/ieframe/shellbrowser.c | 68 +++++++++++++++++++++++++++++++++++++++++-
1 files changed, 66 insertions(+), 2 deletions(-)
diff --git a/dlls/ieframe/shellbrowser.c b/dlls/ieframe/shellbrowser.c
index be15613..a81fa16 100644
--- a/dlls/ieframe/shellbrowser.c
+++ b/dlls/ieframe/shellbrowser.c
@@ -21,6 +21,7 @@
#include <assert.h>
#include "ieframe.h"
+#include "exdispid.h"
#include "wine/debug.h"
@@ -646,10 +647,73 @@ static HRESULT WINAPI DocObjectService_FireBeforeNavigate2(
BOOL *pfCancel)
{
ShellBrowser *This = impl_from_IDocObjectService(iface);
- FIXME("%p %p %s %x %s %p %d %s %d %p\n", This, pDispatch, debugstr_w(lpszUrl),
+ VARIANT var_url, var_flags, var_frame_name, var_post_data, var_post_data2, var_headers;
+ VARIANTARG params[7];
+ DISPPARAMS dp = {params, NULL, 7, 0};
+ VARIANT_BOOL cancel = VARIANT_FALSE;
+ SAFEARRAY *post_data;
+
+ TRACE("%p %p %s %x %s %p %d %s %d %p\n", This, pDispatch, debugstr_w(lpszUrl),
dwFlags, debugstr_w(lpszFrameName), pPostData, cbPostData,
debugstr_w(lpszHeaders), fPlayNavSound, pfCancel);
- return E_NOTIMPL;
+
+ if(cbPostData) {
+ post_data = SafeArrayCreateVector(VT_UI1, 0, cbPostData);
+ memcpy(post_data->pvData, pPostData, cbPostData);
+ if(!post_data)
+ return E_OUTOFMEMORY;
+ }else {
+ post_data = NULL;
+ }
+
+ V_VT(params) = VT_BOOL|VT_BYREF;
+ V_BOOLREF(params) = &cancel;
+
+ V_VT(params+1) = (VT_BYREF|VT_VARIANT);
+ V_VARIANTREF(params+1) = &var_headers;
+ V_VT(&var_headers) = VT_BSTR;
+ V_BSTR(&var_headers) = lpszHeaders ? SysAllocString(lpszHeaders) : NULL;
+
+ V_VT(params+2) = (VT_BYREF|VT_VARIANT);
+ V_VARIANTREF(params+2) = &var_post_data2;
+ V_VT(&var_post_data2) = (VT_BYREF|VT_VARIANT);
+ V_VARIANTREF(&var_post_data2) = &var_post_data;
+
+ if(post_data) {
+ V_VT(&var_post_data) = VT_UI1|VT_ARRAY;
+ V_ARRAY(&var_post_data) = post_data;
+ }else {
+ V_VT(&var_post_data) = VT_EMPTY;
+ }
+
+ V_VT(params+3) = (VT_BYREF|VT_VARIANT);
+ V_VARIANTREF(params+3) = &var_frame_name;
+ V_VT(&var_frame_name) = VT_BSTR;
+ V_BSTR(&var_frame_name) = NULL;
+
+ V_VT(params+4) = (VT_BYREF|VT_VARIANT);
+ V_VARIANTREF(params+4) = &var_flags;
+ V_VT(&var_flags) = VT_I4;
+ V_I4(&var_flags) = 0;
+
+ V_VT(params+5) = (VT_BYREF|VT_VARIANT);
+ V_VARIANTREF(params+5) = &var_url;
+ V_VT(&var_url) = VT_BSTR;
+ V_BSTR(&var_url) = SysAllocString(lpszUrl);
+
+ V_VT(params+6) = (VT_DISPATCH);
+ V_DISPATCH(params+6) = This->doc_host->disp;
+
+ TRACE(">>>\n");
+ call_sink(This->doc_host->cps.wbe2, DISPID_BEFORENAVIGATE2, &dp);
+ TRACE("<<<\n");
+
+ SysFreeString(V_BSTR(&var_url));
+ SysFreeString(V_BSTR(&var_headers));
+ SafeArrayDestroy(post_data);
+
+ *pfCancel = !!cancel;
+ return S_OK;
}
static HRESULT WINAPI DocObjectService_FireNavigateComplete2(
More information about the wine-cvs
mailing list