Jacek Caban : mshtml: Added IHTMLFrameBase2:: onload property implementation.
Alexandre Julliard
julliard at winehq.org
Tue Mar 11 14:45:41 CDT 2014
Module: wine
Branch: master
Commit: d6bb86e84cb441ab1b1321113f602fe41f252d8f
URL: http://source.winehq.org/git/wine.git/?a=commit;h=d6bb86e84cb441ab1b1321113f602fe41f252d8f
Author: Jacek Caban <jacek at codeweavers.com>
Date: Tue Mar 11 19:01:09 2014 +0100
mshtml: Added IHTMLFrameBase2::onload property implementation.
---
dlls/mshtml/htmlframebase.c | 13 +++++---
dlls/mshtml/tests/events.c | 69 ++++++++++++++++++++++++++++++++++++++++---
2 files changed, 74 insertions(+), 8 deletions(-)
diff --git a/dlls/mshtml/htmlframebase.c b/dlls/mshtml/htmlframebase.c
index e05e219..380691f 100644
--- a/dlls/mshtml/htmlframebase.c
+++ b/dlls/mshtml/htmlframebase.c
@@ -28,6 +28,7 @@
#include "mshtml_private.h"
#include "binding.h"
+#include "htmlevent.h"
#include "wine/debug.h"
@@ -593,15 +594,19 @@ static HRESULT WINAPI HTMLFrameBase2_get_contentWindow(IHTMLFrameBase2 *iface, I
static HRESULT WINAPI HTMLFrameBase2_put_onload(IHTMLFrameBase2 *iface, VARIANT v)
{
HTMLFrameBase *This = impl_from_IHTMLFrameBase2(iface);
- FIXME("(%p)->(%s)\n", This, debugstr_variant(&v));
- return E_NOTIMPL;
+
+ TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
+
+ return set_node_event(&This->element.node, EVENTID_LOAD, &v);
}
static HRESULT WINAPI HTMLFrameBase2_get_onload(IHTMLFrameBase2 *iface, VARIANT *p)
{
HTMLFrameBase *This = impl_from_IHTMLFrameBase2(iface);
- FIXME("(%p)->(%p)\n", This, p);
- return E_NOTIMPL;
+
+ TRACE("(%p)->(%p)\n", This, p);
+
+ return get_node_event(&This->element.node, EVENTID_LOAD, p);
}
static HRESULT WINAPI HTMLFrameBase2_put_onreadystatechange(IHTMLFrameBase2 *iface, VARIANT v)
diff --git a/dlls/mshtml/tests/events.c b/dlls/mshtml/tests/events.c
index 7d8fef4..d1a36f0 100644
--- a/dlls/mshtml/tests/events.c
+++ b/dlls/mshtml/tests/events.c
@@ -83,6 +83,7 @@ DEFINE_EXPECT(submit_onclick_attached);
DEFINE_EXPECT(submit_onclick_attached_check_cancel);
DEFINE_EXPECT(submit_onclick_setret);
DEFINE_EXPECT(elem2_cp_onclick);
+DEFINE_EXPECT(iframe_onload);
static HWND container_hwnd = NULL;
static IHTMLWindow2 *window;
@@ -243,6 +244,18 @@ static IHTMLElement3 *_get_elem3_iface(unsigned line, IUnknown *unk)
return elem3;
}
+#define get_iframe_iface(u) _get_iframe_iface(__LINE__,u)
+static IHTMLIFrameElement *_get_iframe_iface(unsigned line, IUnknown *unk)
+{
+ IHTMLIFrameElement *iframe;
+ HRESULT hres;
+
+ hres = IUnknown_QueryInterface(unk, &IID_IHTMLIFrameElement, (void**)&iframe);
+ ok_(__FILE__,line)(hres == S_OK, "QueryInterface(IID_IHTMLIFrameElement) failed: %08x\n", hres);
+
+ return iframe;
+}
+
#define doc_get_body(d) _doc_get_body(__LINE__,d)
static IHTMLElement *_doc_get_body(unsigned line, IHTMLDocument2 *doc)
{
@@ -993,6 +1006,17 @@ static HRESULT WINAPI submit_onclick(IDispatchEx *iface, DISPID id, LCID lcid, W
EVENT_HANDLER_FUNC_OBJ(submit_onclick);
+static HRESULT WINAPI iframe_onload(IDispatchEx *iface, DISPID id, LCID lcid, WORD wFlags, DISPPARAMS *pdp,
+ VARIANT *pvarRes, EXCEPINFO *pei, IServiceProvider *pspCaller)
+{
+ CHECK_EXPECT(iframe_onload);
+ test_event_args(&DIID_DispHTMLIFrame, id, wFlags, pdp, pvarRes, pei, pspCaller);
+ test_event_src("IFRAME");
+ return S_OK;
+}
+
+EVENT_HANDLER_FUNC_OBJ(iframe_onload);
+
static HRESULT WINAPI submit_onclick_attached(IDispatchEx *iface, DISPID id, LCID lcid, WORD wFlags, DISPPARAMS *pdp,
VARIANT *pvarRes, EXCEPINFO *pei, IServiceProvider *pspCaller)
{
@@ -2058,6 +2082,8 @@ static void test_submit(IHTMLDocument2 *doc)
CHECK_CALLED(submit_onclick_attached_check_cancel);
CHECK_CALLED(submit_onclick_attached);
+ if(1)pump_msgs(NULL);
+
IHTMLElement_Release(submit);
}
@@ -2144,16 +2170,21 @@ static IHTMLDocument2* get_iframe_doc(IHTMLIFrameElement *iframe)
static void test_iframe_connections(IHTMLDocument2 *doc)
{
- HRESULT hres;
+ IHTMLFrameBase2 *frame_base2;
IHTMLIFrameElement *iframe;
IHTMLDocument2 *iframes_doc;
DWORD cookie;
IConnectionPoint *cp;
- IHTMLElement *element = find_element_by_id(doc, "ifr");
+ IHTMLElement *element;
+ VARIANT v;
+ BSTR str;
+ HRESULT hres;
+
+ trace("iframe tests...\n");
- hres = IHTMLElement_QueryInterface(element, &IID_IHTMLIFrameElement, (void**)&iframe);
+ element = find_element_by_id(doc, "ifr");
+ iframe = get_iframe_iface((IUnknown*)element);
IHTMLElement_Release(element);
- ok(hres == S_OK, "QueryInterface(IID_IHTMLIFrameElement) failed: %08x\n", hres);
iframes_doc = get_iframe_doc(iframe);
IHTMLIFrameElement_Release(iframe);
@@ -2165,6 +2196,36 @@ static void test_iframe_connections(IHTMLDocument2 *doc)
IConnectionPoint_Release(cp);
ok(hres == CONNECT_E_NOCONNECTION, "Unadvise returned %08x, expected CONNECT_E_NOCONNECTION\n", hres);
+ unregister_cp((IUnknown*)iframes_doc, &IID_IDispatch, cookie);
+
+ hres = IHTMLIFrameElement_QueryInterface(iframe, &IID_IHTMLFrameBase2, (void**)&frame_base2);
+ ok(hres == S_OK, "Could not get IHTMLFrameBase2 iface: %08x\n", hres);
+
+ V_VT(&v) = VT_DISPATCH;
+ V_DISPATCH(&v) = (IDispatch*)&iframe_onload_obj;
+ hres = IHTMLFrameBase2_put_onload(frame_base2, v);
+ ok(hres == S_OK, "put_onload failed: %08x\n", hres);
+
+ IHTMLFrameBase2_Release(frame_base2);
+
+ str = a2bstr("about:blank");
+ hres = IHTMLDocument2_put_URL(iframes_doc, str);
+ ok(hres == S_OK, "put_URL failed: %08x\n", hres);
+ SysFreeString(str);
+
+ SET_EXPECT(iframe_onload);
+ pump_msgs(&called_iframe_onload);
+ CHECK_CALLED(iframe_onload);
+
+ str = a2bstr("about:test");
+ hres = IHTMLDocument2_put_URL(iframes_doc, str);
+ ok(hres == S_OK, "put_URL failed: %08x\n", hres);
+ SysFreeString(str);
+
+ SET_EXPECT(iframe_onload);
+ pump_msgs(&called_iframe_onload);
+ CHECK_CALLED(iframe_onload);
+
IHTMLDocument2_Release(iframes_doc);
}
More information about the wine-cvs
mailing list