mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 06:43:01 +00:00
sync mshtml and shdocvw winetests with wine 1.1.14
svn path=/trunk/; revision=39390
This commit is contained in:
parent
cc12355d0e
commit
43eb75a9e4
12 changed files with 5053 additions and 142 deletions
|
@ -28,11 +28,14 @@
|
|||
#include "ole2.h"
|
||||
#include "dispex.h"
|
||||
#include "mshtml.h"
|
||||
#include "initguid.h"
|
||||
#include "activscp.h"
|
||||
#include "activdbg.h"
|
||||
#include "objsafe.h"
|
||||
#include "mshtmdid.h"
|
||||
|
||||
DEFINE_GUID(CLSID_IdentityUnmarshal,0x0000001b,0x0000,0x0000,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46);
|
||||
|
||||
#define DEFINE_EXPECT(func) \
|
||||
static BOOL expect_ ## func = FALSE, called_ ## func = FALSE
|
||||
|
||||
|
@ -81,6 +84,7 @@ DEFINE_EXPECT(SetScriptState_DISCONNECTED);
|
|||
DEFINE_EXPECT(AddNamedItem);
|
||||
DEFINE_EXPECT(ParseScriptText);
|
||||
DEFINE_EXPECT(GetScriptDispatch);
|
||||
DEFINE_EXPECT(funcDisp);
|
||||
|
||||
#define TESTSCRIPT_CLSID "{178fc163-f585-4e24-9c13-4bb7faf80746}"
|
||||
|
||||
|
@ -167,6 +171,145 @@ static IPropertyNotifySinkVtbl PropertyNotifySinkVtbl = {
|
|||
|
||||
static IPropertyNotifySink PropertyNotifySink = { &PropertyNotifySinkVtbl };
|
||||
|
||||
static HRESULT WINAPI DispatchEx_QueryInterface(IDispatchEx *iface, REFIID riid, void **ppv)
|
||||
{
|
||||
*ppv = NULL;
|
||||
|
||||
if(IsEqualGUID(riid, &IID_IUnknown)
|
||||
|| IsEqualGUID(riid, &IID_IDispatch)
|
||||
|| IsEqualGUID(riid, &IID_IDispatchEx))
|
||||
*ppv = iface;
|
||||
else
|
||||
return E_NOINTERFACE;
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static ULONG WINAPI DispatchEx_AddRef(IDispatchEx *iface)
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
|
||||
static ULONG WINAPI DispatchEx_Release(IDispatchEx *iface)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI DispatchEx_GetTypeInfoCount(IDispatchEx *iface, UINT *pctinfo)
|
||||
{
|
||||
ok(0, "unexpected call\n");
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI DispatchEx_GetTypeInfo(IDispatchEx *iface, UINT iTInfo,
|
||||
LCID lcid, ITypeInfo **ppTInfo)
|
||||
{
|
||||
ok(0, "unexpected call\n");
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI DispatchEx_GetIDsOfNames(IDispatchEx *iface, REFIID riid,
|
||||
LPOLESTR *rgszNames, UINT cNames,
|
||||
LCID lcid, DISPID *rgDispId)
|
||||
{
|
||||
ok(0, "unexpected call\n");
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI DispatchEx_Invoke(IDispatchEx *iface, DISPID dispIdMember,
|
||||
REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
|
||||
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
|
||||
{
|
||||
ok(0, "unexpected call\n");
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI DispatchEx_DeleteMemberByName(IDispatchEx *iface, BSTR bstrName, DWORD grfdex)
|
||||
{
|
||||
ok(0, "unexpected call %s %x\n", debugstr_w(bstrName), grfdex);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI DispatchEx_DeleteMemberByDispID(IDispatchEx *iface, DISPID id)
|
||||
{
|
||||
ok(0, "unexpected call\n");
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI DispatchEx_GetMemberProperties(IDispatchEx *iface, DISPID id, DWORD grfdexFetch, DWORD *pgrfdex)
|
||||
{
|
||||
ok(0, "unexpected call\n");
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI DispatchEx_GetMemberName(IDispatchEx *iface, DISPID id, BSTR *pbstrName)
|
||||
{
|
||||
ok(0, "unexpected call\n");
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI DispatchEx_GetNextDispID(IDispatchEx *iface, DWORD grfdex, DISPID id, DISPID *pid)
|
||||
{
|
||||
ok(0, "unexpected call\n");
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI DispatchEx_GetNameSpaceParent(IDispatchEx *iface, IUnknown **ppunk)
|
||||
{
|
||||
ok(0, "unexpected call\n");
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI DispatchEx_GetDispID(IDispatchEx *iface, BSTR bstrName, DWORD grfdex, DISPID *pid)
|
||||
{
|
||||
ok(0, "unexpected call\n");
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI funcDisp_InvokeEx(IDispatchEx *iface, DISPID id, LCID lcid, WORD wFlags, DISPPARAMS *pdp,
|
||||
VARIANT *pvarRes, EXCEPINFO *pei, IServiceProvider *pspCaller)
|
||||
{
|
||||
CHECK_EXPECT(funcDisp);
|
||||
|
||||
ok(id == DISPID_VALUE, "id = %d\n", id);
|
||||
ok(lcid == 0, "lcid = %x\n", lcid);
|
||||
ok(wFlags == DISPATCH_METHOD, "wFlags = %x\n", wFlags);
|
||||
ok(pdp != NULL, "pdp == NULL\n");
|
||||
ok(pdp->cArgs == 2, "pdp->cArgs = %d\n", pdp->cArgs);
|
||||
ok(pdp->cNamedArgs == 1, "pdp->cNamedArgs = %d\n", pdp->cNamedArgs);
|
||||
ok(pdp->rgdispidNamedArgs[0] == DISPID_THIS, "pdp->rgdispidNamedArgs[0] = %d\n", pdp->rgdispidNamedArgs[0]);
|
||||
ok(V_VT(pdp->rgvarg) == VT_DISPATCH, "V_VT(rgvarg) = %d\n", V_VT(pdp->rgvarg));
|
||||
ok(V_VT(pdp->rgvarg+1) == VT_BOOL, "V_VT(rgvarg[1]) = %d\n", V_VT(pdp->rgvarg));
|
||||
ok(V_BOOL(pdp->rgvarg+1) == VARIANT_TRUE, "V_BOOL(rgvarg[1]) = %x\n", V_BOOL(pdp->rgvarg));
|
||||
ok(pvarRes != NULL, "pvarRes == NULL\n");
|
||||
ok(pei != NULL, "pei == NULL\n");
|
||||
ok(!pspCaller, "pspCaller != NULL\n");
|
||||
|
||||
V_VT(pvarRes) = VT_I4;
|
||||
V_I4(pvarRes) = 100;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static IDispatchExVtbl testObjVtbl = {
|
||||
DispatchEx_QueryInterface,
|
||||
DispatchEx_AddRef,
|
||||
DispatchEx_Release,
|
||||
DispatchEx_GetTypeInfoCount,
|
||||
DispatchEx_GetTypeInfo,
|
||||
DispatchEx_GetIDsOfNames,
|
||||
DispatchEx_Invoke,
|
||||
DispatchEx_GetDispID,
|
||||
funcDisp_InvokeEx,
|
||||
DispatchEx_DeleteMemberByName,
|
||||
DispatchEx_DeleteMemberByDispID,
|
||||
DispatchEx_GetMemberProperties,
|
||||
DispatchEx_GetMemberName,
|
||||
DispatchEx_GetNextDispID,
|
||||
DispatchEx_GetNameSpaceParent
|
||||
};
|
||||
|
||||
static IDispatchEx funcDisp = { &testObjVtbl };
|
||||
|
||||
static IHTMLDocument2 *create_document(void)
|
||||
{
|
||||
IHTMLDocument2 *doc;
|
||||
|
@ -234,6 +377,10 @@ static IHTMLDocument2 *create_and_load_doc(const char *str)
|
|||
ULONG ref;
|
||||
MSG msg;
|
||||
HRESULT hres;
|
||||
static const WCHAR ucPtr[] = {'b','a','c','k','g','r','o','u','n','d',0};
|
||||
DISPID dispID = -1;
|
||||
OLECHAR *name;
|
||||
|
||||
|
||||
doc = create_doc_with_string(str);
|
||||
do_advise((IUnknown*)doc, &IID_IPropertyNotifySink, (IUnknown*)&PropertyNotifySink);
|
||||
|
@ -253,6 +400,12 @@ static IHTMLDocument2 *create_and_load_doc(const char *str)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
/* Check we can query for function on the IHTMLElementBody interface */
|
||||
name = (WCHAR*)ucPtr;
|
||||
hres = IHTMLElement_GetIDsOfNames(body, &IID_NULL, &name, 1, LOCALE_USER_DEFAULT, &dispID);
|
||||
ok(hres == S_OK, "GetIDsOfNames(background) failed %08x\n", hres);
|
||||
ok(dispID == DISPID_IHTMLBODYELEMENT_BACKGROUND, "Incorrect dispID got (%d)\n", dispID);
|
||||
|
||||
IHTMLElement_Release(body);
|
||||
return doc;
|
||||
}
|
||||
|
@ -440,7 +593,7 @@ static HRESULT WINAPI ActiveScriptParse_ParseScriptText(IActiveScriptParse *ifac
|
|||
{
|
||||
IDispatchEx *document;
|
||||
IUnknown *unk;
|
||||
VARIANT var;
|
||||
VARIANT var, arg;
|
||||
DISPPARAMS dp;
|
||||
EXCEPINFO ei;
|
||||
DISPID id, named_arg = DISPID_PROPERTYPUT;
|
||||
|
@ -449,6 +602,7 @@ static HRESULT WINAPI ActiveScriptParse_ParseScriptText(IActiveScriptParse *ifac
|
|||
|
||||
static const WCHAR documentW[] = {'d','o','c','u','m','e','n','t',0};
|
||||
static const WCHAR testW[] = {'t','e','s','t',0};
|
||||
static const WCHAR funcW[] = {'f','u','n','c',0};
|
||||
|
||||
CHECK_EXPECT(ParseScriptText);
|
||||
|
||||
|
@ -512,13 +666,46 @@ static HRESULT WINAPI ActiveScriptParse_ParseScriptText(IActiveScriptParse *ifac
|
|||
ok(V_VT(&var) == VT_I4, "V_VT(var)=%d\n", V_VT(&var));
|
||||
ok(V_I4(&var) == 100, "V_I4(&var) == NULL\n");
|
||||
|
||||
IDispatchEx_Release(document);
|
||||
|
||||
unk = (void*)0xdeadbeef;
|
||||
hres = IDispatchEx_GetNameSpaceParent(window_dispex, &unk);
|
||||
ok(hres == S_OK, "GetNameSpaceParent failed: %08x\n", hres);
|
||||
ok(!unk, "unk=%p, expected NULL\n", unk);
|
||||
|
||||
id = 0;
|
||||
tmp = SysAllocString(funcW);
|
||||
hres = IDispatchEx_GetDispID(document, tmp, fdexNameCaseSensitive|fdexNameEnsure, &id);
|
||||
SysFreeString(tmp);
|
||||
ok(hres == S_OK, "GetDispID(func) failed: %08x\n", hres);
|
||||
ok(id, "id == 0\n");
|
||||
|
||||
dp.cArgs = 1;
|
||||
dp.rgvarg = &var;
|
||||
dp.cNamedArgs = 0;
|
||||
dp.rgdispidNamedArgs = NULL;
|
||||
V_VT(&var) = VT_DISPATCH;
|
||||
V_DISPATCH(&var) = (IDispatch*)&funcDisp;
|
||||
|
||||
hres = IDispatchEx_InvokeEx(document, id, LOCALE_NEUTRAL, INVOKE_PROPERTYPUT, &dp, NULL, &ei, NULL);
|
||||
ok(hres == S_OK, "InvokeEx failed: %08x\n", hres);
|
||||
|
||||
VariantInit(&var);
|
||||
memset(&dp, 0, sizeof(dp));
|
||||
memset(&ei, 0, sizeof(ei));
|
||||
V_VT(&arg) = VT_BOOL;
|
||||
V_BOOL(&arg) = VARIANT_TRUE;
|
||||
dp.cArgs = 1;
|
||||
dp.rgvarg = &arg;
|
||||
|
||||
SET_EXPECT(funcDisp);
|
||||
hres = IDispatchEx_InvokeEx(document, id, LOCALE_NEUTRAL, INVOKE_FUNC, &dp, &var, &ei, NULL);
|
||||
CHECK_CALLED(funcDisp);
|
||||
|
||||
ok(hres == S_OK, "InvokeEx(INVOKE_FUNC) failed: %08x\n", hres);
|
||||
ok(V_VT(&var) == VT_I4, "V_VT(var)=%d\n", V_VT(&var));
|
||||
ok(V_I4(&var) == 100, "V_I4(&var) == NULL\n");
|
||||
|
||||
IDispatchEx_Release(document);
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
@ -580,6 +767,8 @@ static HRESULT WINAPI ActiveScript_SetScriptSite(IActiveScript *iface, IActiveSc
|
|||
{
|
||||
IActiveScriptSiteInterruptPoll *poll;
|
||||
IActiveScriptSiteDebug *debug;
|
||||
IServiceProvider *service;
|
||||
ICanHandleException *canexpection;
|
||||
LCID lcid;
|
||||
HRESULT hres;
|
||||
|
||||
|
@ -603,6 +792,14 @@ static HRESULT WINAPI ActiveScript_SetScriptSite(IActiveScript *iface, IActiveSc
|
|||
if(SUCCEEDED(hres))
|
||||
IActiveScriptSiteDebug32_Release(debug);
|
||||
|
||||
hres = IActiveScriptSite_QueryInterface(pass, &IID_ICanHandleException, (void**)&canexpection);
|
||||
ok(hres == E_NOINTERFACE, "Could not get IID_ICanHandleException interface: %08x\n", hres);
|
||||
|
||||
hres = IActiveScriptSite_QueryInterface(pass, &IID_IServiceProvider, (void**)&service);
|
||||
todo_wine ok(hres == S_OK, "Could not get IServiceProvider interface: %08x\n", hres);
|
||||
if(SUCCEEDED(hres))
|
||||
IServiceProvider_Release(service);
|
||||
|
||||
site = pass;
|
||||
IActiveScriptSite_AddRef(site);
|
||||
return S_OK;
|
||||
|
@ -940,16 +1137,41 @@ static void gecko_installer_workaround(BOOL disable)
|
|||
RegCloseKey(hkey);
|
||||
}
|
||||
|
||||
/* Check if Internet Explorer is configured to run in "Enhanced Security Configuration" (aka hardened mode) */
|
||||
/* Note: this code is duplicated in dlls/mshtml/tests/dom.c, dlls/mshtml/tests/script.c and dlls/urlmon/tests/misc.c */
|
||||
static BOOL is_ie_hardened(void)
|
||||
{
|
||||
HKEY zone_map;
|
||||
DWORD ie_harden, type, size;
|
||||
|
||||
ie_harden = 0;
|
||||
if(RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap",
|
||||
0, KEY_QUERY_VALUE, &zone_map) == ERROR_SUCCESS) {
|
||||
size = sizeof(DWORD);
|
||||
if (RegQueryValueEx(zone_map, "IEHarden", NULL, &type, (LPBYTE) &ie_harden, &size) != ERROR_SUCCESS ||
|
||||
type != REG_DWORD) {
|
||||
ie_harden = 0;
|
||||
}
|
||||
RegCloseKey(zone_map);
|
||||
}
|
||||
|
||||
return ie_harden != 0;
|
||||
}
|
||||
|
||||
START_TEST(script)
|
||||
{
|
||||
gecko_installer_workaround(TRUE);
|
||||
CoInitialize(NULL);
|
||||
|
||||
if(register_script_engine()) {
|
||||
test_simple_script();
|
||||
init_registry(FALSE);
|
||||
if(winetest_interactive || ! is_ie_hardened()) {
|
||||
if(register_script_engine()) {
|
||||
test_simple_script();
|
||||
init_registry(FALSE);
|
||||
}else {
|
||||
skip("Could not register TestScript engine\n");
|
||||
}
|
||||
}else {
|
||||
skip("Could not register TestScript engine\n");
|
||||
skip("IE running in Enhanced Security Configuration\n");
|
||||
}
|
||||
|
||||
CoUninitialize();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue