diff --git a/dlls/mshtml/tests/events.c b/dlls/mshtml/tests/events.c
index d1a36f09e92..6755591f19a 100644
--- a/dlls/mshtml/tests/events.c
+++ b/dlls/mshtml/tests/events.c
@@ -89,6 +89,7 @@ static HWND container_hwnd = NULL;
static IHTMLWindow2 *window;
static IOleDocumentView *view;
static BOOL xy_todo;
+static BOOL is_ie9plus;
typedef struct {
LONG x;
@@ -2170,13 +2171,11 @@ static IHTMLDocument2* get_iframe_doc(IHTMLIFrameElement *iframe)
static void test_iframe_connections(IHTMLDocument2 *doc)
{
- IHTMLFrameBase2 *frame_base2;
IHTMLIFrameElement *iframe;
IHTMLDocument2 *iframes_doc;
DWORD cookie;
IConnectionPoint *cp;
IHTMLElement *element;
- VARIANT v;
BSTR str;
HRESULT hres;
@@ -2198,33 +2197,40 @@ static void test_iframe_connections(IHTMLDocument2 *doc)
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);
+ if(is_ie9plus) {
+ IHTMLFrameBase2 *frame_base2;
+ VARIANT v;
- 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);
+ hres = IHTMLIFrameElement_QueryInterface(iframe, &IID_IHTMLFrameBase2, (void**)&frame_base2);
+ ok(hres == S_OK, "Could not get IHTMLFrameBase2 iface: %08x\n", hres);
- IHTMLFrameBase2_Release(frame_base2);
+ 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);
- str = a2bstr("about:blank");
- hres = IHTMLDocument2_put_URL(iframes_doc, str);
- ok(hres == S_OK, "put_URL failed: %08x\n", hres);
- SysFreeString(str);
+ IHTMLFrameBase2_Release(frame_base2);
- SET_EXPECT(iframe_onload);
- pump_msgs(&called_iframe_onload);
- CHECK_CALLED(iframe_onload);
+ str = a2bstr("about:blank");
+ hres = IHTMLDocument2_put_URL(iframes_doc, str);
+ ok(hres == S_OK, "put_URL failed: %08x\n", hres);
+ SysFreeString(str);
- 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);
- 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);
}
@@ -2733,24 +2739,12 @@ static void set_client_site(IHTMLDocument2 *doc, BOOL set)
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;
}
@@ -2851,24 +2845,57 @@ static void test_empty_document(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();
}
diff --git a/dlls/mshtml/tests/script.c b/dlls/mshtml/tests/script.c
index de0bf656b5e..df52a758958 100644
--- a/dlls/mshtml/tests/script.c
+++ b/dlls/mshtml/tests/script.c
@@ -150,6 +150,7 @@ static const GUID CLSID_TestScript =
static const GUID CLSID_TestActiveX =
{0x178fc163,0xf585,0x4e24,{0x9c,0x13,0x4b,0xb7,0xfa,0xf8,0x06,0x46}};
+static BOOL is_ie9plus;
static IHTMLDocument2 *notif_doc;
static IOleDocumentView *view;
static IDispatchEx *window_dispex;
@@ -1165,23 +1166,12 @@ static HRESULT QueryInterface(REFIID riid, void **ppv)
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 (hres != S_OK) return NULL;
-
- hres = IHTMLDocument2_QueryInterface(doc, &IID_IHTMLDocument5, (void**)&doc5);
- if(FAILED(hres)) {
- win_skip("Could not get IHTMLDocument5, probably too old IE\n");
- IHTMLDocument2_Release(doc);
- return NULL;
- }
-
- IHTMLDocument5_Release(doc5);
- return doc;
+ return SUCCEEDED(hres) ? doc : NULL;
}
static void load_string(IHTMLDocument2 *doc, const char *str)
@@ -2831,7 +2821,10 @@ static void run_js_tests(void)
run_js_script("exectest.html");
run_js_script("vbtest.html");
run_js_script("events.html");
- run_js_script("nav_test.html");
+ if(is_ie9plus)
+ run_js_script("nav_test.html");
+ else
+ win_skip("Skipping nav_test.html on IE older than 9 (for broken ieframe onload).\n");
}
static BOOL init_registry(BOOL init)
@@ -2883,21 +2876,52 @@ static HWND create_container_window(void)
300, 300, NULL, NULL, NULL, NULL);
}
+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(script)
{
CoInitialize(NULL);
container_hwnd = create_container_window();
- if(winetest_interactive || ! is_ie_hardened()) {
- if(register_script_engine()) {
- test_simple_script();
- init_registry(FALSE);
+ if(check_ie()) {
+ if(winetest_interactive || ! is_ie_hardened()) {
+ if(register_script_engine()) {
+ test_simple_script();
+ init_registry(FALSE);
+ }else {
+ skip("Could not register TestScript engine\n");
+ }
+ run_js_tests();
}else {
- skip("Could not register TestScript engine\n");
+ skip("IE running in Enhanced Security Configuration\n");
}
- run_js_tests();
}else {
- skip("IE running in Enhanced Security Configuration\n");
+ win_skip("Too old IE.\n");
}
DestroyWindow(container_hwnd);