DEFINE_EXPECT(AXSetInterfaceSafetyOptions_IDispatchEx_caller);
DEFINE_EXPECT(external_success);
DEFINE_EXPECT(QS_VariantConversion);
+DEFINE_EXPECT(QS_IActiveScriptSite);
+DEFINE_EXPECT(QS_GetCaller);
DEFINE_EXPECT(ChangeType);
#define TESTSCRIPT_CLSID "{178fc163-f585-4e24-9c13-4bb7faf80746}"
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;
static HRESULT ax_setopt_disp_caller_hres = S_OK, ax_setopt_disp_data_hres = S_OK;
static BOOL skip_loadobject_tests;
-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 IActiveScriptSite *site;
+static SCRIPTSTATE state;
static int strcmp_wa(LPCWSTR strw, const char *stra)
{
DWORD res;
if(!init) {
- RegDeleteKey(HKEY_CLASSES_ROOT, key_name);
+ RegDeleteKeyA(HKEY_CLASSES_ROOT, key_name);
return TRUE;
}
static HRESULT WINAPI VariantChangeType_QueryInterface(IVariantChangeType *iface, REFIID riid, void **ppv)
{
- ok(0, "unexpected call %s\n", debugstr_guid(riid));
+ ok(0, "unexpected call %s\n", wine_dbgstr_guid(riid));
*ppv = NULL;
return E_NOINTERFACE;
}
{
if(IsEqualGUID(guidService, &SID_VariantConversion)) {
CHECK_EXPECT(QS_VariantConversion);
- ok(IsEqualGUID(riid, &IID_IVariantChangeType), "uenxpected riid %s\n", debugstr_guid(riid));
+ ok(IsEqualGUID(riid, &IID_IVariantChangeType), "uenxpected riid %s\n", wine_dbgstr_guid(riid));
*ppv = &VChangeType;
return S_OK;
}
- ok(0, "unexpected service %s\n", debugstr_guid(guidService));
+ if(IsEqualGUID(guidService, &IID_IActiveScriptSite)) {
+ CHECK_EXPECT(QS_IActiveScriptSite);
+ ok(IsEqualGUID(riid, &IID_IOleCommandTarget), "uenxpected riid %s\n", wine_dbgstr_guid(riid));
+ return IActiveScriptSite_QueryInterface(site, riid, ppv);
+ }
+
+ if(IsEqualGUID(guidService, &SID_GetCaller)) {
+ CHECK_EXPECT(QS_GetCaller);
+ ok(IsEqualGUID(riid, &IID_IServiceProvider), "uenxpected riid %s\n", wine_dbgstr_guid(riid));
+ *ppv = NULL;
+ return E_NOINTERFACE;
+ }
+
+ ok(0, "unexpected service %s\n", wine_dbgstr_guid(guidService));
return E_NOINTERFACE;
}
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)
load_string(doc, str);
do_advise(doc, &IID_IPropertyNotifySink, (IUnknown*)&PropertyNotifySink);
- while(!doc_complete && GetMessage(&msg, NULL, 0, 0)) {
+ while(!doc_complete && GetMessageW(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
- DispatchMessage(&msg);
+ DispatchMessageW(&msg);
}
hres = IHTMLDocument2_get_body(doc, &body);
IHTMLElement_Release(body);
}
-static IActiveScriptSite *site;
-static SCRIPTSTATE state;
-
static HRESULT WINAPI ObjectSafety_QueryInterface(IObjectSafety *iface, REFIID riid, void **ppv)
{
*ppv = NULL;
- ok(0, "unexpected call %s\n", debugstr_guid(riid));
+ ok(0, "unexpected call %s\n", wine_dbgstr_guid(riid));
return E_NOINTERFACE;
}
{
CHECK_EXPECT(GetInterfaceSafetyOptions);
- ok(IsEqualGUID(&IID_IActiveScriptParse, riid), "unexpected riid %s\n", debugstr_guid(riid));
+ ok(IsEqualGUID(&IID_IActiveScriptParse, riid), "unexpected riid %s\n", wine_dbgstr_guid(riid));
ok(pdwSupportedOptions != NULL, "pdwSupportedOptions == NULL\n");
ok(pdwEnabledOptions != NULL, "pdwEnabledOptions == NULL\n");
{
CHECK_EXPECT(SetInterfaceSafetyOptions);
- ok(IsEqualGUID(&IID_IActiveScriptParse, riid), "unexpected riid %s\n", debugstr_guid(riid));
+ ok(IsEqualGUID(&IID_IActiveScriptParse, riid), "unexpected riid %s\n", wine_dbgstr_guid(riid));
ok(dwOptionSetMask == (INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER),
"dwOptionSetMask=%x\n", dwOptionSetMask);
return S_OK;
}
- ok(0, "unexpected call %s\n", debugstr_guid(riid));
+ ok(0, "unexpected call %s\n", wine_dbgstr_guid(riid));
return E_NOINTERFACE;
}
{
CHECK_EXPECT(AXGetInterfaceSafetyOptions);
- ok(IsEqualGUID(&IID_IDispatchEx, riid), "unexpected riid %s\n", debugstr_guid(riid));
+ ok(IsEqualGUID(&IID_IDispatchEx, riid), "unexpected riid %s\n", wine_dbgstr_guid(riid));
ok(pdwSupportedOptions != NULL, "pdwSupportedOptions == NULL\n");
ok(pdwEnabledOptions != NULL, "pdwEnabledOptions == NULL\n");
return hres;
}
- ok(0, "unexpected riid %s\n", debugstr_guid(riid));
+ ok(0, "unexpected riid %s\n", wine_dbgstr_guid(riid));
return E_NOINTERFACE;
}
hres = dispex_propput(obj, id, 0, &var, NULL);
ok(hres == E_NOTIMPL, "InvokeEx failed: %08x\n", hres);
+ hres = dispex_propget(dispex, DISPID_VALUE, &var, NULL);
+ ok(hres == E_ACCESSDENIED, "InvokeEx returned: %08x, expected E_ACCESSDENIED\n", hres);
+ if(SUCCEEDED(hres))
+ VariantClear(&var);
+
+ SET_EXPECT(QS_IActiveScriptSite);
+ SET_EXPECT(QS_GetCaller);
+ hres = dispex_propget(dispex, DISPID_VALUE, &var, &caller_sp);
+ ok(hres == S_OK, "InvokeEx returned: %08x, expected S_OK\n", hres);
+ ok(V_VT(&var) == VT_BSTR, "V_VT(var) = %d\n", V_VT(&var));
+ ok(!strcmp_wa(V_BSTR(&var), "\nfunction toString() {\n [native code]\n}\n"),
+ "V_BSTR(var) = %s\n", wine_dbgstr_w(V_BSTR(&var)));
+ VariantClear(&var);
+ todo_wine CHECK_CALLED(QS_IActiveScriptSite);
+ todo_wine CHECK_CALLED(QS_GetCaller);
+
IDispatchEx_Release(dispex);
}
test_elem_disabled(elem, VARIANT_TRUE);
V_VT(&v) = VT_I4;
- V_BSTR(&v) = 0;
+ V_I4(&v) = 0;
hres = dispex_propput(dispex, DISPID_IHTMLELEMENT3_DISABLED, 0, &v, NULL);
ok(hres == S_OK, "InvokeEx failed: %08x\n", hres);
test_elem_disabled(elem, VARIANT_FALSE);
+ V_VT(&v) = VT_I4;
+ V_I4(&v) = 1;
+ hres = dispex_propput(dispex, DISPID_IHTMLELEMENT3_DISABLED, DISPATCH_PROPERTYPUTREF, &v, NULL);
+ ok(hres == S_OK, "InvokeEx failed: %08x\n", hres);
+
+ test_elem_disabled(elem, VARIANT_TRUE);
+
IHTMLElement_Release(elem);
IDispatchEx_Release(dispex);
}
if(IsEqualGUID(&IID_IActiveScriptDebug, riid))
return E_NOINTERFACE;
- trace("QI(%s)\n", debugstr_guid(riid));
+ trace("QI(%s)\n", wine_dbgstr_guid(riid));
return E_NOINTERFACE;
}
if(IsEqualGUID(&CLSID_IdentityUnmarshal, riid))
return E_NOINTERFACE;
- ok(0, "unexpected riid %s\n", debugstr_guid(riid));
+ ok(0, "unexpected riid %s\n", wine_dbgstr_guid(riid));
return E_NOTIMPL;
}
CHECK_EXPECT(CreateInstance);
ok(!outer, "outer = %p\n", outer);
- ok(IsEqualGUID(&IID_IActiveScript, riid), "unexpected riid %s\n", debugstr_guid(riid));
+ ok(IsEqualGUID(&IID_IActiveScript, riid), "unexpected riid %s\n", wine_dbgstr_guid(riid));
*ppv = &ActiveScript;
return S_OK;
}
SET_EXPECT(external_success);
- while(!called_external_success && GetMessage(&msg, NULL, 0, 0)) {
+ while(!called_external_success && GetMessageW(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
- DispatchMessage(&msg);
+ DispatchMessageW(&msg);
}
CHECK_CALLED(external_success);
run_js_script("exectest.html");
run_js_script("vbtest.html");
run_js_script("events.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)
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)
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);