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;
static IOleDocumentView *view;
static BOOL xy_todo;
+static BOOL is_ie9plus;
typedef struct {
LONG x;
"<input type=\"submit\" id=\"submitid\" />"
"</form></body></html>";
-static const char *debugstr_guid(REFIID riid)
-{
- static char buf[50];
-
- sprintf(buf, "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
- riid->Data1, riid->Data2, riid->Data3, riid->Data4[0],
- riid->Data4[1], riid->Data4[2], riid->Data4[3], riid->Data4[4],
- riid->Data4[5], riid->Data4[6], riid->Data4[7]);
-
- return buf;
-}
-
static int strcmp_wa(LPCWSTR strw, const char *stra)
{
CHAR buf[512];
hres = ITypeInfo_GetTypeAttr(typeinfo, &type_attr);
ok_(__FILE__,line) (hres == S_OK, "GetTypeAttr failed: %08x\n", hres);
ok_(__FILE__,line) (IsEqualGUID(&type_attr->guid, diid), "unexpected guid %s\n",
- debugstr_guid(&type_attr->guid));
+ wine_dbgstr_guid(&type_attr->guid));
ITypeInfo_ReleaseTypeAttr(typeinfo, type_attr);
ITypeInfo_Release(typeinfo);
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)
{
|| IsEqualGUID(riid, &IID_IDispatchEx))
*ppv = iface;
else {
- ok(0, "unexpected riid %s\n", debugstr_guid(riid));
+ ok(0, "unexpected riid %s\n", wine_dbgstr_guid(riid));
return E_NOINTERFACE;
}
}else if(IsEqualGUID(riid, &IID_IDispatchEx)) {
return E_NOINTERFACE;
}else {
- ok(0, "unexpected riid %s\n", debugstr_guid(riid));
+ ok(0, "unexpected riid %s\n", wine_dbgstr_guid(riid));
return E_NOINTERFACE;
}
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)
{
|| IsEqualGUID(riid, &diid)) \
*ppv = iface; \
else { \
- ok(0, "unexpected riid %s\n", debugstr_guid(riid)); \
+ ok(0, "unexpected riid %s\n", wine_dbgstr_guid(riid)); \
return E_NOINTERFACE; \
} \
return S_OK; \
#define test_cp_args(a,b,c,d,e,f) _test_cp_args(__LINE__,a,b,c,d,e,f)
static void _test_cp_args(unsigned line, REFIID riid, WORD flags, DISPPARAMS *dp, VARIANT *vres, EXCEPINFO *ei, UINT *argerr)
{
- ok_(__FILE__,line)(IsEqualGUID(&IID_NULL, riid), "riid = %s\n", debugstr_guid(riid));
+ ok_(__FILE__,line)(IsEqualGUID(&IID_NULL, riid), "riid = %s\n", wine_dbgstr_guid(riid));
ok_(__FILE__,line)(flags == DISPATCH_METHOD, "flags = %x\n", flags);
ok_(__FILE__,line)(dp != NULL, "dp == NULL\n");
ok_(__FILE__,line)(!dp->cArgs, "dp->cArgs = %d\n", dp->cArgs);
{
IHTMLEventObj *event;
- ok_(__FILE__,line)(IsEqualGUID(&IID_NULL, riid), "riid = %s\n", debugstr_guid(riid));
+ ok_(__FILE__,line)(IsEqualGUID(&IID_NULL, riid), "riid = %s\n", wine_dbgstr_guid(riid));
ok_(__FILE__,line)(flags == DISPATCH_METHOD, "flags = %x\n", flags);
ok_(__FILE__,line)(dp != NULL, "dp == NULL\n");
ok_(__FILE__,line)(dp->cArgs == 1, "dp->cArgs = %d\n", dp->cArgs);
CHECK_EXPECT(timeout);
ok(dispIdMember == DISPID_VALUE, "dispIdMember = %d\n", dispIdMember);
- ok(IsEqualGUID(&IID_NULL, riid), "riid = %s\n", debugstr_guid(riid));
+ ok(IsEqualGUID(&IID_NULL, riid), "riid = %s\n", wine_dbgstr_guid(riid));
ok(wFlags == DISPATCH_METHOD, "wFlags = %x\n", wFlags);
ok(!lcid, "lcid = %x\n", lcid);
ok(pDispParams != NULL, "pDispParams == NULL\n");
test_attached_event_args(id, wFlags, pdp, pvarRes, pei);
- ok(IsEqualGUID(&IID_NULL, riid), "riid = %s\n", debugstr_guid(riid));
+ ok(IsEqualGUID(&IID_NULL, riid), "riid = %s\n", wine_dbgstr_guid(riid));
ok(!puArgErr, "puArgErr = %p\n", puArgErr);
return S_OK;
if(b) {
while(!*b && GetMessageW(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
- DispatchMessage(&msg);
+ DispatchMessageW(&msg);
}
}else {
while(!b && PeekMessageW(&msg, NULL, 0, 0, PM_REMOVE)) {
TranslateMessage(&msg);
- DispatchMessage(&msg);
+ DispatchMessageW(&msg);
}
}
}
LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult,
EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
- ok(IsEqualGUID(&IID_NULL, riid), "riid = %s\n", debugstr_guid(riid));
+ ok(IsEqualGUID(&IID_NULL, riid), "riid = %s\n", wine_dbgstr_guid(riid));
ok(pDispParams != NULL, "pDispParams == NULL\n");
ok(pExcepInfo != NULL, "pExcepInfo == NULL\n");
ok(puArgErr != NULL, "puArgErr == NULL\n");
CHECK_CALLED(submit_onclick_attached_check_cancel);
CHECK_CALLED(submit_onclick_attached);
+ if(1)pump_msgs(NULL);
+
IHTMLElement_Release(submit);
}
static void test_iframe_connections(IHTMLDocument2 *doc)
{
- HRESULT hres;
IHTMLIFrameElement *iframe;
IHTMLDocument2 *iframes_doc;
DWORD cookie;
IConnectionPoint *cp;
- IHTMLElement *element = find_element_by_id(doc, "ifr");
+ IHTMLElement *element;
+ BSTR str;
+ HRESULT hres;
- hres = IHTMLElement_QueryInterface(element, &IID_IHTMLIFrameElement, (void**)&iframe);
+ trace("iframe tests...\n");
+
+ 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);
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);
+
+ if(is_ie9plus) {
+ IHTMLFrameBase2 *frame_base2;
+ VARIANT v;
+
+ 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);
+ }else {
+ win_skip("Skipping iframe onload tests on IE older than 9.\n");
+ }
+
IHTMLDocument2_Release(iframes_doc);
}
static IHTMLDocument2 *create_document(void)
{
IHTMLDocument2 *doc;
- IHTMLDocument5 *doc5;
HRESULT hres;
hres = CoCreateInstance(&CLSID_HTMLDocument, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
&IID_IHTMLDocument2, (void**)&doc);
ok(hres == S_OK, "CoCreateInstance failed: %08x\n", hres);
- if (FAILED(hres))
- return NULL;
-
- hres = IHTMLDocument2_QueryInterface(doc, &IID_IHTMLDocument5, (void**)&doc5);
- if(FAILED(hres)) {
- win_skip("Could not get IHTMLDocument5 interface, probably too old IE\n");
- IHTMLDocument2_Release(doc);
- return NULL;
- }
-
- IHTMLDocument5_Release(doc5);
- return doc;
+ return SUCCEEDED(hres) ? doc : NULL;
}
doc_load_string(doc, str);
do_advise((IUnknown*)doc, &IID_IPropertyNotifySink, (IUnknown*)&PropertyNotifySink);
- while(!doc_complete && GetMessage(&msg, NULL, 0, 0)) {
+ while(!doc_complete && GetMessageA(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
- DispatchMessage(&msg);
+ DispatchMessageA(&msg);
}
hres = IHTMLDocument2_get_body(doc, &body);
static LRESULT WINAPI wnd_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
- return DefWindowProc(hwnd, msg, wParam, lParam);
+ return DefWindowProcA(hwnd, msg, wParam, lParam);
}
static HWND create_container_window(void)
IHTMLDocument2_Release(doc);
}
+static BOOL check_ie(void)
+{
+ IHTMLDocument2 *doc;
+ IHTMLDocument5 *doc5;
+ IHTMLDocument7 *doc7;
+ HRESULT hres;
+
+ doc = create_document();
+ if(!doc)
+ return FALSE;
+
+ hres = IHTMLDocument2_QueryInterface(doc, &IID_IHTMLDocument7, (void**)&doc7);
+ if(SUCCEEDED(hres)) {
+ is_ie9plus = TRUE;
+ IHTMLDocument7_Release(doc7);
+ }
+
+ trace("is_ie9plus %x\n", is_ie9plus);
+
+ hres = IHTMLDocument2_QueryInterface(doc, &IID_IHTMLDocument5, (void**)&doc5);
+ if(SUCCEEDED(hres))
+ IHTMLDocument5_Release(doc5);
+
+ IHTMLDocument2_Release(doc);
+ return SUCCEEDED(hres);
+}
+
START_TEST(events)
{
CoInitialize(NULL);
- container_hwnd = create_container_window();
- if(winetest_interactive)
- ShowWindow(container_hwnd, SW_SHOW);
+ if(check_ie()) {
+ container_hwnd = create_container_window();
- run_test(empty_doc_str, test_timeout);
- run_test(click_doc_str, test_onclick);
- run_test(readystate_doc_str, test_onreadystatechange);
- run_test(img_doc_str, test_imgload);
- run_test(input_doc_str, test_focus);
- run_test(form_doc_str, test_submit);
- run_test(iframe_doc_str, test_iframe_connections);
+ if(winetest_interactive)
+ ShowWindow(container_hwnd, SW_SHOW);
- test_empty_document();
+ run_test(empty_doc_str, test_timeout);
+ run_test(click_doc_str, test_onclick);
+ run_test(readystate_doc_str, test_onreadystatechange);
+ run_test(img_doc_str, test_imgload);
+ run_test(input_doc_str, test_focus);
+ run_test(form_doc_str, test_submit);
+ run_test(iframe_doc_str, test_iframe_connections);
+
+ test_empty_document();
+
+ DestroyWindow(container_hwnd);
+ }else {
+ win_skip("Too old IE\n");
+ }
- DestroyWindow(container_hwnd);
CoUninitialize();
}