mirror of
https://github.com/reactos/reactos.git
synced 2025-06-23 17:20:20 +00:00
[MSHTML_WINETEST]
* Sync with Wine 1.7.17. CORE-8080 svn path=/trunk/; revision=63005
This commit is contained in:
parent
874b7e16f9
commit
f550748eed
14 changed files with 1254 additions and 319 deletions
|
@ -20,16 +20,18 @@ add_executable(mshtml_winetest ${SOURCE} rsrc.rc)
|
||||||
|
|
||||||
list(APPEND mshtml_winetest_rc_deps
|
list(APPEND mshtml_winetest_rc_deps
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/test_tlb.tlb
|
${CMAKE_CURRENT_BINARY_DIR}/test_tlb.tlb
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/blank.html
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/exectest.html
|
${CMAKE_CURRENT_SOURCE_DIR}/exectest.html
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/jstest.html
|
${CMAKE_CURRENT_SOURCE_DIR}/jstest.html
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/nav_test.html
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/vbtest.html
|
${CMAKE_CURRENT_SOURCE_DIR}/vbtest.html
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/events.html
|
${CMAKE_CURRENT_SOURCE_DIR}/events.html
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/externscr.js)
|
${CMAKE_CURRENT_SOURCE_DIR}/externscr.js)
|
||||||
|
|
||||||
set_source_files_properties(rsrc.rc PROPERTIES OBJECT_DEPENDS "${mshtml_winetest_rc_deps}")
|
set_source_files_properties(rsrc.rc PROPERTIES OBJECT_DEPENDS "${mshtml_winetest_rc_deps}")
|
||||||
|
|
||||||
target_link_libraries(mshtml_winetest wine uuid strmiids)
|
target_link_libraries(mshtml_winetest uuid strmiids)
|
||||||
set_module_type(mshtml_winetest win32cui)
|
set_module_type(mshtml_winetest win32cui)
|
||||||
add_importlibs(mshtml_winetest wininet ole32 oleaut32 user32 gdi32 urlmon advapi32 msvcrt kernel32 ntdll)
|
add_importlibs(mshtml_winetest wininet ole32 oleaut32 user32 gdi32 urlmon advapi32 msvcrt kernel32)
|
||||||
add_dependencies(mshtml_winetest test_tlb_header stdole2)
|
add_dependencies(mshtml_winetest test_tlb_header stdole2)
|
||||||
add_cd_file(TARGET mshtml_winetest DESTINATION reactos/bin FOR all)
|
add_cd_file(TARGET mshtml_winetest DESTINATION reactos/bin FOR all)
|
||||||
|
|
|
@ -119,6 +119,7 @@ static ITypeInfo *actxtest_typeinfo, *class_typeinfo;
|
||||||
static HWND container_hwnd, plugin_hwnd;
|
static HWND container_hwnd, plugin_hwnd;
|
||||||
static int plugin_behavior;
|
static int plugin_behavior;
|
||||||
static BOOL no_quickact;
|
static BOOL no_quickact;
|
||||||
|
static LONG activex_refcnt;
|
||||||
|
|
||||||
#define TESTACTIVEX_CLSID "{178fc163-f585-4e24-9c13-4bb7f6680746}"
|
#define TESTACTIVEX_CLSID "{178fc163-f585-4e24-9c13-4bb7f6680746}"
|
||||||
|
|
||||||
|
@ -164,18 +165,6 @@ static REFIID pluginhost_iids[] = {
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
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 BOOL iface_cmp(IUnknown *iface1, IUnknown *iface2)
|
static BOOL iface_cmp(IUnknown *iface1, IUnknown *iface2)
|
||||||
{
|
{
|
||||||
IUnknown *unk1, *unk2;
|
IUnknown *unk1, *unk2;
|
||||||
|
@ -200,7 +189,7 @@ static void _test_ifaces(unsigned line, IUnknown *iface, REFIID *iids)
|
||||||
|
|
||||||
for(piid = iids; *piid; piid++) {
|
for(piid = iids; *piid; piid++) {
|
||||||
hres = IUnknown_QueryInterface(iface, *piid, (void**)&unk);
|
hres = IUnknown_QueryInterface(iface, *piid, (void**)&unk);
|
||||||
ok_(__FILE__,line) (hres == S_OK, "Could not get %s interface: %08x\n", debugstr_guid(*piid), hres);
|
ok_(__FILE__,line) (hres == S_OK, "Could not get %s interface: %08x\n", wine_dbgstr_guid(*piid), hres);
|
||||||
if(SUCCEEDED(hres))
|
if(SUCCEEDED(hres))
|
||||||
IUnknown_Release(unk);
|
IUnknown_Release(unk);
|
||||||
}
|
}
|
||||||
|
@ -283,7 +272,7 @@ static LRESULT WINAPI plugin_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPa
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return DefWindowProc(hwnd, msg, wParam, lParam);
|
return DefWindowProcW(hwnd, msg, wParam, lParam);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void create_plugin_window(HWND parent, const RECT *rect)
|
static void create_plugin_window(HWND parent, const RECT *rect)
|
||||||
|
@ -307,7 +296,7 @@ static void create_plugin_window(HWND parent, const RECT *rect)
|
||||||
|
|
||||||
static HRESULT WINAPI ConnectionPoint_QueryInterface(IConnectionPoint *iface, REFIID riid, void **ppv)
|
static HRESULT WINAPI ConnectionPoint_QueryInterface(IConnectionPoint *iface, REFIID riid, void **ppv)
|
||||||
{
|
{
|
||||||
ok(0, "unexpected QI call %s\n", debugstr_guid(riid));
|
ok(0, "unexpected QI call %s\n", wine_dbgstr_guid(riid));
|
||||||
return E_NOINTERFACE;
|
return E_NOINTERFACE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -398,12 +387,12 @@ static HRESULT WINAPI OleControl_QueryInterface(IOleControl *iface, REFIID riid,
|
||||||
|
|
||||||
static ULONG WINAPI OleControl_AddRef(IOleControl *iface)
|
static ULONG WINAPI OleControl_AddRef(IOleControl *iface)
|
||||||
{
|
{
|
||||||
return 2;
|
return ++activex_refcnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ULONG WINAPI OleControl_Release(IOleControl *iface)
|
static ULONG WINAPI OleControl_Release(IOleControl *iface)
|
||||||
{
|
{
|
||||||
return 1;
|
return --activex_refcnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI OleControl_GetControlInfo(IOleControl *iface, CONTROLINFO *pCI)
|
static HRESULT WINAPI OleControl_GetControlInfo(IOleControl *iface, CONTROLINFO *pCI)
|
||||||
|
@ -459,12 +448,12 @@ static HRESULT WINAPI QuickActivate_QueryInterface(IQuickActivate *iface, REFIID
|
||||||
|
|
||||||
static ULONG WINAPI QuickActivate_AddRef(IQuickActivate *iface)
|
static ULONG WINAPI QuickActivate_AddRef(IQuickActivate *iface)
|
||||||
{
|
{
|
||||||
return 2;
|
return ++activex_refcnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ULONG WINAPI QuickActivate_Release(IQuickActivate *iface)
|
static ULONG WINAPI QuickActivate_Release(IQuickActivate *iface)
|
||||||
{
|
{
|
||||||
return 1;
|
return --activex_refcnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI QuickActivate_QuickActivate(IQuickActivate *iface, QACONTAINER *container, QACONTROL *control)
|
static HRESULT WINAPI QuickActivate_QuickActivate(IQuickActivate *iface, QACONTAINER *container, QACONTROL *control)
|
||||||
|
@ -547,12 +536,12 @@ static HRESULT WINAPI PersistPropertyBag_QueryInterface(IPersistPropertyBag *ifa
|
||||||
|
|
||||||
static ULONG WINAPI PersistPropertyBag_AddRef(IPersistPropertyBag *iface)
|
static ULONG WINAPI PersistPropertyBag_AddRef(IPersistPropertyBag *iface)
|
||||||
{
|
{
|
||||||
return 2;
|
return ++activex_refcnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ULONG WINAPI PersistPropertyBag_Release(IPersistPropertyBag *iface)
|
static ULONG WINAPI PersistPropertyBag_Release(IPersistPropertyBag *iface)
|
||||||
{
|
{
|
||||||
return 1;
|
return --activex_refcnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI PersistPropertyBag_GetClassID(IPersistPropertyBag *face, CLSID *pClassID)
|
static HRESULT WINAPI PersistPropertyBag_GetClassID(IPersistPropertyBag *face, CLSID *pClassID)
|
||||||
|
@ -689,12 +678,12 @@ static HRESULT WINAPI Dispatch_QueryInterface(IDispatch *iface, REFIID riid, voi
|
||||||
|
|
||||||
static ULONG WINAPI Dispatch_AddRef(IDispatch *iface)
|
static ULONG WINAPI Dispatch_AddRef(IDispatch *iface)
|
||||||
{
|
{
|
||||||
return 2;
|
return ++activex_refcnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ULONG WINAPI Dispatch_Release(IDispatch *iface)
|
static ULONG WINAPI Dispatch_Release(IDispatch *iface)
|
||||||
{
|
{
|
||||||
return 1;
|
return --activex_refcnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI Dispatch_GetTypeInfoCount(IDispatch *iface, UINT *pctinfo)
|
static HRESULT WINAPI Dispatch_GetTypeInfoCount(IDispatch *iface, UINT *pctinfo)
|
||||||
|
@ -716,7 +705,7 @@ static HRESULT WINAPI Dispatch_GetTypeInfo(IDispatch *iface, UINT iTInfo, LCID l
|
||||||
static HRESULT WINAPI Dispatch_GetIDsOfNames(IDispatch *iface, REFIID riid, LPOLESTR *rgszNames,
|
static HRESULT WINAPI Dispatch_GetIDsOfNames(IDispatch *iface, REFIID riid, LPOLESTR *rgszNames,
|
||||||
UINT cNames, LCID lcid, DISPID *rgDispId)
|
UINT cNames, LCID lcid, DISPID *rgDispId)
|
||||||
{
|
{
|
||||||
ok(IsEqualGUID(riid, &IID_NULL), "riid = %s\n", debugstr_guid(riid));
|
ok(IsEqualGUID(riid, &IID_NULL), "riid = %s\n", wine_dbgstr_guid(riid));
|
||||||
ok(cNames == 1, "cNames = %d\n", cNames);
|
ok(cNames == 1, "cNames = %d\n", cNames);
|
||||||
ok(rgszNames != NULL, "rgszNames == NULL\n");
|
ok(rgszNames != NULL, "rgszNames == NULL\n");
|
||||||
ok(rgDispId != NULL, "rgDispId == NULL\n");
|
ok(rgDispId != NULL, "rgDispId == NULL\n");
|
||||||
|
@ -737,7 +726,7 @@ static HRESULT WINAPI Dispatch_Invoke(IDispatch *iface, DISPID dispIdMember, REF
|
||||||
LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult,
|
LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult,
|
||||||
EXCEPINFO *pExcepInfo, UINT *puArgErr)
|
EXCEPINFO *pExcepInfo, UINT *puArgErr)
|
||||||
{
|
{
|
||||||
ok(IsEqualGUID(riid, &IID_NULL), "riid = %s\n", debugstr_guid(riid));
|
ok(IsEqualGUID(riid, &IID_NULL), "riid = %s\n", wine_dbgstr_guid(riid));
|
||||||
ok(pDispParams != NULL, "pDispParams == NULL\n");
|
ok(pDispParams != NULL, "pDispParams == NULL\n");
|
||||||
ok(!pDispParams->cNamedArgs, "pDispParams->cNamedArgs = %d\n", pDispParams->cNamedArgs);
|
ok(!pDispParams->cNamedArgs, "pDispParams->cNamedArgs = %d\n", pDispParams->cNamedArgs);
|
||||||
ok(!pDispParams->rgdispidNamedArgs, "pDispParams->rgdispidNamedArgs != NULL\n");
|
ok(!pDispParams->rgdispidNamedArgs, "pDispParams->rgdispidNamedArgs != NULL\n");
|
||||||
|
@ -832,12 +821,12 @@ static HRESULT WINAPI ProvideClassInfo_QueryInterface(IProvideClassInfo *iface,
|
||||||
|
|
||||||
static ULONG WINAPI ProvideClassInfo_AddRef(IProvideClassInfo *iface)
|
static ULONG WINAPI ProvideClassInfo_AddRef(IProvideClassInfo *iface)
|
||||||
{
|
{
|
||||||
return 2;
|
return ++activex_refcnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ULONG WINAPI ProvideClassInfo_Release(IProvideClassInfo *iface)
|
static ULONG WINAPI ProvideClassInfo_Release(IProvideClassInfo *iface)
|
||||||
{
|
{
|
||||||
return 1;
|
return --activex_refcnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI ProvideClassInfo_GetClassInfo(IProvideClassInfo *iface, ITypeInfo **ppTI)
|
static HRESULT WINAPI ProvideClassInfo_GetClassInfo(IProvideClassInfo *iface, ITypeInfo **ppTI)
|
||||||
|
@ -865,12 +854,12 @@ static HRESULT WINAPI ConnectionPointContainer_QueryInterface(IConnectionPointCo
|
||||||
|
|
||||||
static ULONG WINAPI ConnectionPointContainer_AddRef(IConnectionPointContainer *iface)
|
static ULONG WINAPI ConnectionPointContainer_AddRef(IConnectionPointContainer *iface)
|
||||||
{
|
{
|
||||||
return 2;
|
return ++activex_refcnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ULONG WINAPI ConnectionPointContainer_Release(IConnectionPointContainer *iface)
|
static ULONG WINAPI ConnectionPointContainer_Release(IConnectionPointContainer *iface)
|
||||||
{
|
{
|
||||||
return 1;
|
return --activex_refcnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI ConnectionPointContainer_EnumConnectionPoints(IConnectionPointContainer *iface,
|
static HRESULT WINAPI ConnectionPointContainer_EnumConnectionPoints(IConnectionPointContainer *iface,
|
||||||
|
@ -890,8 +879,9 @@ static HRESULT WINAPI ConnectionPointContainer_FindConnectionPoint(IConnectionPo
|
||||||
}
|
}
|
||||||
|
|
||||||
CHECK_EXPECT(FindConnectionPoint);
|
CHECK_EXPECT(FindConnectionPoint);
|
||||||
ok(IsEqualGUID(riid, &DIID_DispActiveXTest), "riid = %s\n", debugstr_guid(riid));
|
ok(IsEqualGUID(riid, &DIID_DispActiveXTest), "riid = %s\n", wine_dbgstr_guid(riid));
|
||||||
|
|
||||||
|
IConnectionPoint_AddRef(&ConnectionPoint);
|
||||||
*ppCP = &ConnectionPoint;
|
*ppCP = &ConnectionPoint;
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
@ -913,12 +903,12 @@ static HRESULT WINAPI ViewObjectEx_QueryInterface(IViewObjectEx *iface, REFIID r
|
||||||
|
|
||||||
static ULONG WINAPI ViewObjectEx_AddRef(IViewObjectEx *iface)
|
static ULONG WINAPI ViewObjectEx_AddRef(IViewObjectEx *iface)
|
||||||
{
|
{
|
||||||
return 2;
|
return ++activex_refcnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ULONG WINAPI ViewObjectEx_Release(IViewObjectEx *iface)
|
static ULONG WINAPI ViewObjectEx_Release(IViewObjectEx *iface)
|
||||||
{
|
{
|
||||||
return 1;
|
return --activex_refcnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI ViewObjectEx_Draw(IViewObjectEx *iface, DWORD dwDrawAspect, LONG lindex, void *pvAspect, DVTARGETDEVICE *ptd,
|
static HRESULT WINAPI ViewObjectEx_Draw(IViewObjectEx *iface, DWORD dwDrawAspect, LONG lindex, void *pvAspect, DVTARGETDEVICE *ptd,
|
||||||
|
@ -987,7 +977,7 @@ static HRESULT WINAPI ViewObjectEx_GetViewStatus(IViewObjectEx *iface, DWORD *pd
|
||||||
static HRESULT WINAPI ViewObjectEx_QueryHitPoint(IViewObjectEx *iface, DWORD dwAspect, LPCRECT pRectBounds, POINT ptlLoc,
|
static HRESULT WINAPI ViewObjectEx_QueryHitPoint(IViewObjectEx *iface, DWORD dwAspect, LPCRECT pRectBounds, POINT ptlLoc,
|
||||||
LONG lCloseHint, DWORD *pHitResult)
|
LONG lCloseHint, DWORD *pHitResult)
|
||||||
{
|
{
|
||||||
ok(0, "unexpected call\n");
|
trace("QueryHitPoint call ignored\n");
|
||||||
return E_NOTIMPL;
|
return E_NOTIMPL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1032,12 +1022,12 @@ static HRESULT WINAPI OleObject_QueryInterface(IOleObject *iface, REFIID riid, v
|
||||||
|
|
||||||
static ULONG WINAPI OleObject_AddRef(IOleObject *iface)
|
static ULONG WINAPI OleObject_AddRef(IOleObject *iface)
|
||||||
{
|
{
|
||||||
return 2;
|
return ++activex_refcnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ULONG WINAPI OleObject_Release(IOleObject *iface)
|
static ULONG WINAPI OleObject_Release(IOleObject *iface)
|
||||||
{
|
{
|
||||||
return 1;
|
return --activex_refcnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, IOleClientSite *pClientSite)
|
static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, IOleClientSite *pClientSite)
|
||||||
|
@ -1291,12 +1281,12 @@ static HRESULT WINAPI OleInPlaceObject_QueryInterface(IOleInPlaceObjectWindowles
|
||||||
|
|
||||||
static ULONG WINAPI OleInPlaceObject_AddRef(IOleInPlaceObjectWindowless *iface)
|
static ULONG WINAPI OleInPlaceObject_AddRef(IOleInPlaceObjectWindowless *iface)
|
||||||
{
|
{
|
||||||
return 2;
|
return ++activex_refcnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ULONG WINAPI OleInPlaceObject_Release(IOleInPlaceObjectWindowless *iface)
|
static ULONG WINAPI OleInPlaceObject_Release(IOleInPlaceObjectWindowless *iface)
|
||||||
{
|
{
|
||||||
return 1;
|
return --activex_refcnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI OleInPlaceObject_GetWindow(IOleInPlaceObjectWindowless *iface,
|
static HRESULT WINAPI OleInPlaceObject_GetWindow(IOleInPlaceObjectWindowless *iface,
|
||||||
|
@ -1343,7 +1333,7 @@ static HRESULT WINAPI OleInPlaceObject_UIDeactivate(IOleInPlaceObjectWindowless
|
||||||
static HRESULT WINAPI OleInPlaceObject_SetObjectRects(IOleInPlaceObjectWindowless *iface,
|
static HRESULT WINAPI OleInPlaceObject_SetObjectRects(IOleInPlaceObjectWindowless *iface,
|
||||||
LPCRECT lprcPosRect, LPCRECT lprcClipRect)
|
LPCRECT lprcPosRect, LPCRECT lprcClipRect)
|
||||||
{
|
{
|
||||||
CHECK_EXPECT(SetObjectRects);
|
CHECK_EXPECT2(SetObjectRects);
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1456,15 +1446,20 @@ static HRESULT ax_qi(REFIID riid, void **ppv)
|
||||||
}else if(IsEqualGUID(riid, &IID_ITestActiveX)) {
|
}else if(IsEqualGUID(riid, &IID_ITestActiveX)) {
|
||||||
CHECK_EXPECT(QI_ITestActiveX);
|
CHECK_EXPECT(QI_ITestActiveX);
|
||||||
*ppv = &wrapped_iface;
|
*ppv = &wrapped_iface;
|
||||||
|
return S_OK;
|
||||||
}else if(IsEqualGUID(riid, &IID_IOleWindow) || IsEqualGUID(riid, &IID_IOleInPlaceObject)
|
}else if(IsEqualGUID(riid, &IID_IOleWindow) || IsEqualGUID(riid, &IID_IOleInPlaceObject)
|
||||||
|| IsEqualGUID(&IID_IOleInPlaceObjectWindowless, riid)) {
|
|| IsEqualGUID(&IID_IOleInPlaceObjectWindowless, riid)) {
|
||||||
*ppv = plugin_behavior == TEST_DISPONLY ? NULL : &OleInPlaceObjectWindowless;
|
*ppv = plugin_behavior == TEST_DISPONLY ? NULL : &OleInPlaceObjectWindowless;
|
||||||
}else {
|
}else {
|
||||||
trace("QI %s\n", debugstr_guid(riid));
|
trace("QI %s\n", wine_dbgstr_guid(riid));
|
||||||
*ppv = NULL;
|
*ppv = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return *ppv ? S_OK : E_NOINTERFACE;
|
if(!*ppv)
|
||||||
|
return E_NOINTERFACE;
|
||||||
|
|
||||||
|
IUnknown_AddRef((IUnknown*)*ppv);
|
||||||
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFIID riid, void **ppv)
|
static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFIID riid, void **ppv)
|
||||||
|
@ -1483,7 +1478,7 @@ static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFIID r
|
||||||
if(IsEqualGUID(&IID_IClassFactoryEx, riid))
|
if(IsEqualGUID(&IID_IClassFactoryEx, riid))
|
||||||
return E_NOINTERFACE; /* TODO */
|
return E_NOINTERFACE; /* TODO */
|
||||||
|
|
||||||
ok(0, "unexpected riid %s\n", debugstr_guid(riid));
|
ok(0, "unexpected riid %s\n", wine_dbgstr_guid(riid));
|
||||||
return E_NOTIMPL;
|
return E_NOTIMPL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1502,8 +1497,9 @@ static HRESULT WINAPI ClassFactory_CreateInstance(IClassFactory *iface, IUnknown
|
||||||
CHECK_EXPECT(CreateInstance);
|
CHECK_EXPECT(CreateInstance);
|
||||||
|
|
||||||
ok(!outer, "outer = %p\n", outer);
|
ok(!outer, "outer = %p\n", outer);
|
||||||
ok(IsEqualGUID(riid, &IID_IUnknown), "riid = %s\n", debugstr_guid(riid));
|
ok(IsEqualGUID(riid, &IID_IUnknown), "riid = %s\n", wine_dbgstr_guid(riid));
|
||||||
|
|
||||||
|
activex_refcnt++;
|
||||||
*ppv = &OleControl;
|
*ppv = &OleControl;
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
@ -1675,7 +1671,7 @@ static void test_object_elem(IHTMLDocument2 *doc)
|
||||||
hres = IHTMLObjectElement_put_width(objelem, v);
|
hres = IHTMLObjectElement_put_width(objelem, v);
|
||||||
ok(hres == S_OK, "put_width failed: %08x\n", hres);
|
ok(hres == S_OK, "put_width failed: %08x\n", hres);
|
||||||
CHECK_CALLED(OnAmbientPropertyChange_UNKNOWN);
|
CHECK_CALLED(OnAmbientPropertyChange_UNKNOWN);
|
||||||
CHECK_CALLED(Invoke_ENABLED);
|
CLEAR_CALLED(Invoke_ENABLED); /* Not called on IE10 */
|
||||||
|
|
||||||
hres = IHTMLObjectElement_get_width(objelem, &v);
|
hres = IHTMLObjectElement_get_width(objelem, &v);
|
||||||
ok(hres == S_OK, "get_width failed: %08x\n", hres);
|
ok(hres == S_OK, "get_width failed: %08x\n", hres);
|
||||||
|
@ -1690,7 +1686,7 @@ static void test_object_elem(IHTMLDocument2 *doc)
|
||||||
hres = IHTMLObjectElement_put_height(objelem, v);
|
hres = IHTMLObjectElement_put_height(objelem, v);
|
||||||
ok(hres == S_OK, "put_height failed: %08x\n", hres);
|
ok(hres == S_OK, "put_height failed: %08x\n", hres);
|
||||||
CHECK_CALLED(OnAmbientPropertyChange_UNKNOWN);
|
CHECK_CALLED(OnAmbientPropertyChange_UNKNOWN);
|
||||||
CHECK_CALLED(Invoke_ENABLED);
|
CLEAR_CALLED(Invoke_ENABLED); /* Not called on IE10 */
|
||||||
|
|
||||||
hres = IHTMLObjectElement_get_height(objelem, &v);
|
hres = IHTMLObjectElement_get_height(objelem, &v);
|
||||||
ok(hres == S_OK, "get_height failed: %08x\n", hres);
|
ok(hres == S_OK, "get_height failed: %08x\n", hres);
|
||||||
|
@ -1739,6 +1735,7 @@ static void test_container(IHTMLDocument2 *doc_obj)
|
||||||
ok(hres == S_OK, "QueryService(CLSID_TestActiveX) failed: %08x\n", hres);
|
ok(hres == S_OK, "QueryService(CLSID_TestActiveX) failed: %08x\n", hres);
|
||||||
ok(unk == (IUnknown*)&OleObject, "unexpected unk %p\n", unk);
|
ok(unk == (IUnknown*)&OleObject, "unexpected unk %p\n", unk);
|
||||||
CHECK_CALLED(QueryService_TestActiveX);
|
CHECK_CALLED(QueryService_TestActiveX);
|
||||||
|
IUnknown_Release(unk);
|
||||||
|
|
||||||
IServiceProvider_Release(serv_prov);
|
IServiceProvider_Release(serv_prov);
|
||||||
|
|
||||||
|
@ -1757,7 +1754,7 @@ static void test_ui_activate(void)
|
||||||
SET_EXPECT(Invoke_ENABLED);
|
SET_EXPECT(Invoke_ENABLED);
|
||||||
hres = IOleInPlaceSite_OnUIActivate(ip_site);
|
hres = IOleInPlaceSite_OnUIActivate(ip_site);
|
||||||
ok(hres == S_OK, "OnUIActivate failed: %08x\n", hres);
|
ok(hres == S_OK, "OnUIActivate failed: %08x\n", hres);
|
||||||
CHECK_CALLED(Invoke_ENABLED);
|
CLEAR_CALLED(Invoke_ENABLED); /* Not called on IE10 */
|
||||||
|
|
||||||
IOleInPlaceSite_Release(ip_site);
|
IOleInPlaceSite_Release(ip_site);
|
||||||
}
|
}
|
||||||
|
@ -1770,7 +1767,7 @@ static HRESULT WINAPI InPlaceFrame_QueryInterface(IOleInPlaceFrame *iface, REFII
|
||||||
static const GUID undocumented_frame_iid = {0xfbece6c9,0x48d7,0x4a37,{0x8f,0xe3,0x6a,0xd4,0x27,0x2f,0xdd,0xac}};
|
static const GUID undocumented_frame_iid = {0xfbece6c9,0x48d7,0x4a37,{0x8f,0xe3,0x6a,0xd4,0x27,0x2f,0xdd,0xac}};
|
||||||
|
|
||||||
if(!IsEqualGUID(&undocumented_frame_iid, riid))
|
if(!IsEqualGUID(&undocumented_frame_iid, riid))
|
||||||
ok(0, "unexpected riid %s\n", debugstr_guid(riid));
|
ok(0, "unexpected riid %s\n", wine_dbgstr_guid(riid));
|
||||||
|
|
||||||
*ppv = NULL;
|
*ppv = NULL;
|
||||||
return E_NOINTERFACE;
|
return E_NOINTERFACE;
|
||||||
|
@ -2143,7 +2140,7 @@ static HRESULT WINAPI ServiceProvider_QueryService(IServiceProvider *iface, REFG
|
||||||
{
|
{
|
||||||
if(IsEqualGUID(&CLSID_TestActiveX, guidService)) {
|
if(IsEqualGUID(&CLSID_TestActiveX, guidService)) {
|
||||||
CHECK_EXPECT(QueryService_TestActiveX);
|
CHECK_EXPECT(QueryService_TestActiveX);
|
||||||
ok(IsEqualGUID(&IID_IUnknown, riid), "unexpected riid %s\n", debugstr_guid(riid));
|
ok(IsEqualGUID(&IID_IUnknown, riid), "unexpected riid %s\n", wine_dbgstr_guid(riid));
|
||||||
*ppv = &OleObject;
|
*ppv = &OleObject;
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
@ -2334,9 +2331,9 @@ static IHTMLDocument2 *create_doc(const char *str)
|
||||||
doc_load_string(doc, str);
|
doc_load_string(doc, str);
|
||||||
do_advise((IUnknown*)doc, &IID_IPropertyNotifySink, (IUnknown*)&PropertyNotifySink);
|
do_advise((IUnknown*)doc, &IID_IPropertyNotifySink, (IUnknown*)&PropertyNotifySink);
|
||||||
|
|
||||||
while(!doc_complete && GetMessage(&msg, NULL, 0, 0)) {
|
while(!doc_complete && GetMessageW(&msg, NULL, 0, 0)) {
|
||||||
TranslateMessage(&msg);
|
TranslateMessage(&msg);
|
||||||
DispatchMessage(&msg);
|
DispatchMessageW(&msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
return doc;
|
return doc;
|
||||||
|
@ -2359,12 +2356,15 @@ static void release_doc(IHTMLDocument2 *doc)
|
||||||
DestroyWindow(plugin_hwnd);
|
DestroyWindow(plugin_hwnd);
|
||||||
plugin_hwnd = NULL;
|
plugin_hwnd = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ok(!activex_refcnt, "activex_refcnt = %d\n", activex_refcnt);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void init_test(int behavior)
|
static void init_test(int behavior)
|
||||||
{
|
{
|
||||||
plugin_behavior = behavior;
|
plugin_behavior = behavior;
|
||||||
|
|
||||||
|
activex_refcnt = 0;
|
||||||
no_quickact = behavior == TEST_NOQUICKACT || behavior == TEST_DISPONLY;
|
no_quickact = behavior == TEST_NOQUICKACT || behavior == TEST_DISPONLY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2399,6 +2399,7 @@ static void test_event_call(void)
|
||||||
static void test_flash_ax(void)
|
static void test_flash_ax(void)
|
||||||
{
|
{
|
||||||
IHTMLDocument2 *doc;
|
IHTMLDocument2 *doc;
|
||||||
|
IOleClientSite *cs;
|
||||||
|
|
||||||
init_test(TEST_FLASH);
|
init_test(TEST_FLASH);
|
||||||
|
|
||||||
|
@ -2448,6 +2449,9 @@ static void test_flash_ax(void)
|
||||||
skip("Skipping test_object_elem(notif_doc). ROSTESTS-114.\n");
|
skip("Skipping test_object_elem(notif_doc). ROSTESTS-114.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IOleClientSite_AddRef(client_site);
|
||||||
|
cs = client_site;
|
||||||
|
|
||||||
SET_EXPECT(UIDeactivate);
|
SET_EXPECT(UIDeactivate);
|
||||||
SET_EXPECT(Invoke_ENABLED);
|
SET_EXPECT(Invoke_ENABLED);
|
||||||
SET_EXPECT(Invoke_VALID);
|
SET_EXPECT(Invoke_VALID);
|
||||||
|
@ -2456,13 +2460,14 @@ static void test_flash_ax(void)
|
||||||
SET_EXPECT(SetClientSite_NULL);
|
SET_EXPECT(SetClientSite_NULL);
|
||||||
release_doc(doc);
|
release_doc(doc);
|
||||||
CHECK_CALLED(UIDeactivate);
|
CHECK_CALLED(UIDeactivate);
|
||||||
todo_wine
|
CLEAR_CALLED(Invoke_ENABLED); /* Not called on IE10 */
|
||||||
CHECK_CALLED(Invoke_ENABLED);
|
|
||||||
todo_wine
|
todo_wine
|
||||||
CHECK_CALLED(Invoke_VALID);
|
CHECK_CALLED(Invoke_VALID);
|
||||||
CHECK_CALLED(InPlaceDeactivate);
|
CHECK_CALLED(InPlaceDeactivate);
|
||||||
CHECK_CALLED(Close);
|
CHECK_CALLED(Close);
|
||||||
CHECK_CALLED(SetClientSite_NULL);
|
CHECK_CALLED(SetClientSite_NULL);
|
||||||
|
|
||||||
|
IOleClientSite_Release(cs);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_noquickact_ax(void)
|
static void test_noquickact_ax(void)
|
||||||
|
@ -2602,7 +2607,7 @@ static void test_nooleobj_ax(void)
|
||||||
|
|
||||||
static LRESULT WINAPI wnd_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
static LRESULT WINAPI wnd_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
return DefWindowProc(hwnd, msg, wParam, lParam);
|
return DefWindowProcW(hwnd, msg, wParam, lParam);
|
||||||
}
|
}
|
||||||
|
|
||||||
static HWND create_container_window(void)
|
static HWND create_container_window(void)
|
||||||
|
@ -2650,7 +2655,7 @@ static BOOL init_key(const char *key_name, const char *def_value, BOOL init)
|
||||||
DWORD res;
|
DWORD res;
|
||||||
|
|
||||||
if(!init) {
|
if(!init) {
|
||||||
RegDeleteKey(HKEY_CLASSES_ROOT, key_name);
|
RegDeleteKeyA(HKEY_CLASSES_ROOT, key_name);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
1
rostests/winetests/mshtml/blank.html
Normal file
1
rostests/winetests/mshtml/blank.html
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<html></html>
|
|
@ -470,18 +470,6 @@ static const elem_type_info_t elem_type_infos[] = {
|
||||||
{"BUTTON", button_iids, &DIID_DispHTMLButtonElement}
|
{"BUTTON", button_iids, &DIID_DispHTMLButtonElement}
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char *dbgstr_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)
|
static int strcmp_wa(LPCWSTR strw, const char *stra)
|
||||||
{
|
{
|
||||||
CHAR buf[512];
|
CHAR buf[512];
|
||||||
|
@ -562,7 +550,7 @@ static void _test_ifaces(unsigned line, IUnknown *iface, REFIID *iids)
|
||||||
|
|
||||||
for(piid = iids; *piid; piid++) {
|
for(piid = iids; *piid; piid++) {
|
||||||
hres = IUnknown_QueryInterface(iface, *piid, (void**)&unk);
|
hres = IUnknown_QueryInterface(iface, *piid, (void**)&unk);
|
||||||
ok_(__FILE__,line) (hres == S_OK, "Could not get %s interface: %08x\n", dbgstr_guid(*piid), hres);
|
ok_(__FILE__,line) (hres == S_OK, "Could not get %s interface: %08x\n", wine_dbgstr_guid(*piid), hres);
|
||||||
if(SUCCEEDED(hres))
|
if(SUCCEEDED(hres))
|
||||||
IUnknown_Release(unk);
|
IUnknown_Release(unk);
|
||||||
}
|
}
|
||||||
|
@ -639,7 +627,7 @@ static void _test_disp(unsigned line, IUnknown *unk, const IID *diid, const char
|
||||||
IID iid;
|
IID iid;
|
||||||
|
|
||||||
if(_test_get_dispid(line, unk, &iid))
|
if(_test_get_dispid(line, unk, &iid))
|
||||||
ok_(__FILE__,line) (IsEqualGUID(&iid, diid), "unexpected guid %s\n", dbgstr_guid(&iid));
|
ok_(__FILE__,line) (IsEqualGUID(&iid, diid), "unexpected guid %s\n", wine_dbgstr_guid(&iid));
|
||||||
|
|
||||||
if(val)
|
if(val)
|
||||||
_test_disp_value(line, unk, val);
|
_test_disp_value(line, unk, val);
|
||||||
|
@ -652,7 +640,7 @@ static void _test_disp2(unsigned line, IUnknown *unk, const IID *diid, const IID
|
||||||
|
|
||||||
if(_test_get_dispid(line, unk, &iid))
|
if(_test_get_dispid(line, unk, &iid))
|
||||||
ok_(__FILE__,line) (IsEqualGUID(&iid, diid) || broken(IsEqualGUID(&iid, diid2)),
|
ok_(__FILE__,line) (IsEqualGUID(&iid, diid) || broken(IsEqualGUID(&iid, diid2)),
|
||||||
"unexpected guid %s\n", dbgstr_guid(&iid));
|
"unexpected guid %s\n", wine_dbgstr_guid(&iid));
|
||||||
|
|
||||||
if(val)
|
if(val)
|
||||||
_test_disp_value(line, unk, val);
|
_test_disp_value(line, unk, val);
|
||||||
|
@ -684,7 +672,7 @@ static void _test_class_info(unsigned line, IUnknown *unk)
|
||||||
if(SUCCEEDED(hres))
|
if(SUCCEEDED(hres))
|
||||||
{
|
{
|
||||||
ok_(__FILE__,line)(IsEqualGUID(&type_attr->guid, &CLSID_HTMLDocument),
|
ok_(__FILE__,line)(IsEqualGUID(&type_attr->guid, &CLSID_HTMLDocument),
|
||||||
"unexpected guid %s\n", dbgstr_guid(&type_attr->guid));
|
"unexpected guid %s\n", wine_dbgstr_guid(&type_attr->guid));
|
||||||
ok_(__FILE__,line)(type_attr->typekind == TKIND_COCLASS,
|
ok_(__FILE__,line)(type_attr->typekind == TKIND_COCLASS,
|
||||||
"unexpected typekind %d\n", type_attr->typekind);
|
"unexpected typekind %d\n", type_attr->typekind);
|
||||||
ITypeInfo_ReleaseTypeAttr(typeinfo, type_attr);
|
ITypeInfo_ReleaseTypeAttr(typeinfo, type_attr);
|
||||||
|
@ -759,6 +747,18 @@ static IHTMLElement4 *_get_elem4_iface(unsigned line, IUnknown *unk)
|
||||||
return elem;
|
return elem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define get_doc3_iface(u) _get_doc3_iface(__LINE__,u)
|
||||||
|
static IHTMLDocument3 *_get_doc3_iface(unsigned line, IHTMLDocument2 *doc)
|
||||||
|
{
|
||||||
|
IHTMLDocument3 *doc3;
|
||||||
|
HRESULT hres;
|
||||||
|
|
||||||
|
hres = IHTMLDocument2_QueryInterface(doc, &IID_IHTMLDocument3, (void**)&doc3);
|
||||||
|
ok_(__FILE__,line) (hres == S_OK, "Could not get IHTMLDocument3 interface: %08x\n", hres);
|
||||||
|
|
||||||
|
return doc3;
|
||||||
|
}
|
||||||
|
|
||||||
#define get_node_iface(u) _get_node_iface(__LINE__,u)
|
#define get_node_iface(u) _get_node_iface(__LINE__,u)
|
||||||
static IHTMLDOMNode *_get_node_iface(unsigned line, IUnknown *unk)
|
static IHTMLDOMNode *_get_node_iface(unsigned line, IUnknown *unk)
|
||||||
{
|
{
|
||||||
|
@ -1943,6 +1943,28 @@ static void _test_select_type(unsigned line, IHTMLSelectElement *select, const c
|
||||||
SysFreeString(type);
|
SysFreeString(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define test_select_multiple(s,t) _test_select_multiple(__LINE__,s,t)
|
||||||
|
static void _test_select_multiple(unsigned line, IHTMLSelectElement *select, VARIANT_BOOL exmultiple)
|
||||||
|
{
|
||||||
|
VARIANT_BOOL b = 100;
|
||||||
|
HRESULT hres;
|
||||||
|
|
||||||
|
hres = IHTMLSelectElement_get_multiple(select, &b);
|
||||||
|
ok_(__FILE__,line) (hres == S_OK, "get_multiple failed: %08x\n", hres);
|
||||||
|
ok_(__FILE__,line) (b == exmultiple, "multiple=%x, expected %x\n", b, exmultiple);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define test_select_set_multiple(s,v) _test_select_set_multiple(__LINE__,s,v)
|
||||||
|
static void _test_select_set_multiple(unsigned line, IHTMLSelectElement *select, VARIANT_BOOL val)
|
||||||
|
{
|
||||||
|
HRESULT hres;
|
||||||
|
|
||||||
|
hres = IHTMLSelectElement_put_multiple(select, val);
|
||||||
|
ok_(__FILE__,line) (hres == S_OK, "put_multiple failed: %08x\n", hres);
|
||||||
|
|
||||||
|
_test_select_multiple(line, select, val);
|
||||||
|
}
|
||||||
|
|
||||||
#define test_range_text(r,t) _test_range_text(__LINE__,r,t)
|
#define test_range_text(r,t) _test_range_text(__LINE__,r,t)
|
||||||
static void _test_range_text(unsigned line, IHTMLTxtRange *range, const char *extext)
|
static void _test_range_text(unsigned line, IHTMLTxtRange *range, const char *extext)
|
||||||
{
|
{
|
||||||
|
@ -4212,6 +4234,9 @@ static void test_select_elem(IHTMLSelectElement *select)
|
||||||
ok(iface_cmp((IUnknown*)disp, (IUnknown*)disp2), "disp != disp2\n");
|
ok(iface_cmp((IUnknown*)disp, (IUnknown*)disp2), "disp != disp2\n");
|
||||||
IDispatch_Release(disp2);
|
IDispatch_Release(disp2);
|
||||||
IDispatch_Release(disp);
|
IDispatch_Release(disp);
|
||||||
|
|
||||||
|
test_select_multiple(select, VARIANT_FALSE);
|
||||||
|
test_select_set_multiple(select, VARIANT_TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_form_item(IHTMLElement *elem)
|
static void test_form_item(IHTMLElement *elem)
|
||||||
|
@ -5171,6 +5196,31 @@ static void test_default_body(IHTMLBodyElement *body)
|
||||||
VariantClear(&v);
|
VariantClear(&v);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define test_body_scroll(a,b) _test_body_scroll(__LINE__,a,b)
|
||||||
|
static void _test_body_scroll(unsigned line, IHTMLBodyElement *body, const char *ex)
|
||||||
|
{
|
||||||
|
BSTR str;
|
||||||
|
HRESULT hres;
|
||||||
|
|
||||||
|
hres = IHTMLBodyElement_get_scroll(body, &str);
|
||||||
|
ok_(__FILE__,line)(hres == S_OK, "get_scroll failed: %08x\n", hres);
|
||||||
|
ok_(__FILE__,line)(ex ? !strcmp_wa(str, ex) : !str, "scroll = %s\n", wine_dbgstr_w(str));
|
||||||
|
SysFreeString(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define set_body_scroll(a,b) _set_body_scroll(__LINE__,a,b)
|
||||||
|
static void _set_body_scroll(unsigned line, IHTMLBodyElement *body, const char *val)
|
||||||
|
{
|
||||||
|
BSTR str = a2bstr(val);
|
||||||
|
HRESULT hres;
|
||||||
|
|
||||||
|
hres = IHTMLBodyElement_put_scroll(body, str);
|
||||||
|
ok_(__FILE__,line)(hres == S_OK, "put_scroll failed: %08x\n", hres);
|
||||||
|
SysFreeString(str);
|
||||||
|
|
||||||
|
_test_body_scroll(line, body, val);
|
||||||
|
}
|
||||||
|
|
||||||
static void test_body_funs(IHTMLBodyElement *body)
|
static void test_body_funs(IHTMLBodyElement *body)
|
||||||
{
|
{
|
||||||
VARIANT vbg, vDefaultbg;
|
VARIANT vbg, vDefaultbg;
|
||||||
|
@ -5197,6 +5247,11 @@ static void test_body_funs(IHTMLBodyElement *body)
|
||||||
hres = IHTMLBodyElement_put_bgColor(body, vDefaultbg);
|
hres = IHTMLBodyElement_put_bgColor(body, vDefaultbg);
|
||||||
ok(hres == S_OK, "put_bgColor failed: %08x\n", hres);
|
ok(hres == S_OK, "put_bgColor failed: %08x\n", hres);
|
||||||
VariantClear(&vDefaultbg);
|
VariantClear(&vDefaultbg);
|
||||||
|
|
||||||
|
test_body_scroll(body, NULL);
|
||||||
|
set_body_scroll(body, "yes");
|
||||||
|
set_body_scroll(body, "no");
|
||||||
|
set_body_scroll(body, "auto");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_history(IHTMLWindow2 *window)
|
static void test_history(IHTMLWindow2 *window)
|
||||||
|
@ -5521,6 +5576,9 @@ static void test_tr_elem(IHTMLElement *elem)
|
||||||
IHTMLElementCollection *col;
|
IHTMLElementCollection *col;
|
||||||
IHTMLTableRow *row;
|
IHTMLTableRow *row;
|
||||||
HRESULT hres;
|
HRESULT hres;
|
||||||
|
BSTR bstr;
|
||||||
|
LONG lval;
|
||||||
|
VARIANT vbg, vDefaultbg;
|
||||||
|
|
||||||
static const elem_type_t cell_types[] = {ET_TD,ET_TD};
|
static const elem_type_t cell_types[] = {ET_TD,ET_TD};
|
||||||
|
|
||||||
|
@ -5537,6 +5595,74 @@ static void test_tr_elem(IHTMLElement *elem)
|
||||||
test_elem_collection((IUnknown*)col, cell_types, sizeof(cell_types)/sizeof(*cell_types));
|
test_elem_collection((IUnknown*)col, cell_types, sizeof(cell_types)/sizeof(*cell_types));
|
||||||
IHTMLElementCollection_Release(col);
|
IHTMLElementCollection_Release(col);
|
||||||
|
|
||||||
|
bstr = a2bstr("left");
|
||||||
|
hres = IHTMLTableRow_put_align(row, bstr);
|
||||||
|
ok(hres == S_OK, "set_align failed: %08x\n", hres);
|
||||||
|
SysFreeString(bstr);
|
||||||
|
|
||||||
|
bstr = NULL;
|
||||||
|
hres = IHTMLTableRow_get_align(row, &bstr);
|
||||||
|
ok(hres == S_OK, "get_align failed: %08x\n", hres);
|
||||||
|
ok(bstr != NULL, "get_align returned NULL\n");
|
||||||
|
ok(!strcmp_wa(bstr, "left"), "get_align returned %s\n", wine_dbgstr_w(bstr));
|
||||||
|
SysFreeString(bstr);
|
||||||
|
|
||||||
|
bstr = a2bstr("top");
|
||||||
|
hres = IHTMLTableRow_put_vAlign(row, bstr);
|
||||||
|
ok(hres == S_OK, "set_valign failed: %08x\n", hres);
|
||||||
|
SysFreeString(bstr);
|
||||||
|
|
||||||
|
bstr = NULL;
|
||||||
|
hres = IHTMLTableRow_get_vAlign(row, &bstr);
|
||||||
|
ok(hres == S_OK, "get_valign failed: %08x\n", hres);
|
||||||
|
ok(bstr != NULL, "get_valign returned NULL\n");
|
||||||
|
ok(!strcmp_wa(bstr, "top"), "get_valign returned %s\n", wine_dbgstr_w(bstr));
|
||||||
|
SysFreeString(bstr);
|
||||||
|
|
||||||
|
lval = 0xdeadbeef;
|
||||||
|
hres = IHTMLTableRow_get_rowIndex(row, &lval);
|
||||||
|
ok(hres == S_OK, "get_rowIndex failed: %08x\n", hres);
|
||||||
|
ok(lval == 1, "get_rowIndex returned %d\n", lval);
|
||||||
|
|
||||||
|
lval = 0xdeadbeef;
|
||||||
|
hres = IHTMLTableRow_get_sectionRowIndex(row, &lval);
|
||||||
|
ok(hres == S_OK, "get_sectionRowIndex failed: %08x\n", hres);
|
||||||
|
ok(lval == 1, "get_sectionRowIndex returned %d\n", lval);
|
||||||
|
|
||||||
|
hres = IHTMLTableRow_get_bgColor(row, &vDefaultbg);
|
||||||
|
ok(hres == S_OK, "get_bgColor failed: %08x\n", hres);
|
||||||
|
ok(V_VT(&vDefaultbg) == VT_BSTR, "bstr != NULL\n");
|
||||||
|
ok(!V_BSTR(&vDefaultbg), "V_BSTR(bgColor) = %s\n", wine_dbgstr_w(V_BSTR(&vDefaultbg)));
|
||||||
|
|
||||||
|
V_VT(&vbg) = VT_BSTR;
|
||||||
|
V_BSTR(&vbg) = a2bstr("red");
|
||||||
|
hres = IHTMLTableRow_put_bgColor(row, vbg);
|
||||||
|
ok(hres == S_OK, "put_bgColor failed: %08x\n", hres);
|
||||||
|
VariantClear(&vbg);
|
||||||
|
|
||||||
|
hres = IHTMLTableRow_get_bgColor(row, &vbg);
|
||||||
|
ok(hres == S_OK, "get_bgColor failed: %08x\n", hres);
|
||||||
|
ok(V_VT(&vDefaultbg) == VT_BSTR, "V_VT(&vDefaultbg) != VT_BSTR\n");
|
||||||
|
ok(!strcmp_wa(V_BSTR(&vbg), "#ff0000"), "Unexpected bgcolor %s\n", wine_dbgstr_w(V_BSTR(&vbg)));
|
||||||
|
VariantClear(&vbg);
|
||||||
|
|
||||||
|
V_VT(&vbg) = VT_I4;
|
||||||
|
V_I4(&vbg) = 0xff0000;
|
||||||
|
hres = IHTMLTableRow_put_bgColor(row, vbg);
|
||||||
|
ok(hres == S_OK, "put_bgColor failed: %08x\n", hres);
|
||||||
|
VariantClear(&vbg);
|
||||||
|
|
||||||
|
hres = IHTMLTableRow_get_bgColor(row, &vbg);
|
||||||
|
ok(hres == S_OK, "get_bgColor failed: %08x\n", hres);
|
||||||
|
ok(V_VT(&vDefaultbg) == VT_BSTR, "V_VT(&vDefaultbg) != VT_BSTR\n");
|
||||||
|
ok(!strcmp_wa(V_BSTR(&vbg), "#ff0000"), "Unexpected bgcolor %s\n", wine_dbgstr_w(V_BSTR(&vbg)));
|
||||||
|
VariantClear(&vbg);
|
||||||
|
|
||||||
|
/* Restore Originial */
|
||||||
|
hres = IHTMLTableRow_put_bgColor(row, vDefaultbg);
|
||||||
|
ok(hres == S_OK, "put_bgColor failed: %08x\n", hres);
|
||||||
|
VariantClear(&vDefaultbg);
|
||||||
|
|
||||||
IHTMLTableRow_Release(row);
|
IHTMLTableRow_Release(row);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5602,6 +5728,8 @@ static void test_table_elem(IHTMLElement *elem)
|
||||||
IHTMLDOMNode *node;
|
IHTMLDOMNode *node;
|
||||||
VARIANT v;
|
VARIANT v;
|
||||||
HRESULT hres;
|
HRESULT hres;
|
||||||
|
BSTR bstr;
|
||||||
|
VARIANT vbg, vDefaultbg;
|
||||||
|
|
||||||
static const elem_type_t row_types[] = {ET_TR,ET_TR};
|
static const elem_type_t row_types[] = {ET_TR,ET_TR};
|
||||||
static const elem_type_t all_types[] = {ET_TBODY,ET_TR,ET_TR,ET_TD,ET_TD};
|
static const elem_type_t all_types[] = {ET_TBODY,ET_TR,ET_TR,ET_TD,ET_TD};
|
||||||
|
@ -5655,6 +5783,52 @@ static void test_table_elem(IHTMLElement *elem)
|
||||||
test_table_cell_spacing(table, "11");
|
test_table_cell_spacing(table, "11");
|
||||||
VariantClear(&v);
|
VariantClear(&v);
|
||||||
|
|
||||||
|
bstr = a2bstr("left");
|
||||||
|
hres = IHTMLTable_put_align(table, bstr);
|
||||||
|
ok(hres == S_OK, "set_align failed: %08x\n", hres);
|
||||||
|
SysFreeString(bstr);
|
||||||
|
|
||||||
|
bstr = NULL;
|
||||||
|
hres = IHTMLTable_get_align(table, &bstr);
|
||||||
|
ok(hres == S_OK, "get_align failed: %08x\n", hres);
|
||||||
|
ok(bstr != NULL, "get_align returned NULL\n");
|
||||||
|
ok(!strcmp_wa(bstr, "left"), "get_align returned %s\n", wine_dbgstr_w(bstr));
|
||||||
|
SysFreeString(bstr);
|
||||||
|
|
||||||
|
hres = IHTMLTable_get_bgColor(table, &vDefaultbg);
|
||||||
|
ok(hres == S_OK, "get_bgColor failed: %08x\n", hres);
|
||||||
|
ok(V_VT(&vDefaultbg) == VT_BSTR, "bstr != NULL\n");
|
||||||
|
ok(!V_BSTR(&vDefaultbg), "V_BSTR(bgColor) = %s\n", wine_dbgstr_w(V_BSTR(&vDefaultbg)));
|
||||||
|
|
||||||
|
V_VT(&vbg) = VT_BSTR;
|
||||||
|
V_BSTR(&vbg) = a2bstr("red");
|
||||||
|
hres = IHTMLTable_put_bgColor(table, vbg);
|
||||||
|
ok(hres == S_OK, "put_bgColor failed: %08x\n", hres);
|
||||||
|
VariantClear(&vbg);
|
||||||
|
|
||||||
|
hres = IHTMLTable_get_bgColor(table, &vbg);
|
||||||
|
ok(hres == S_OK, "get_bgColor failed: %08x\n", hres);
|
||||||
|
ok(V_VT(&vDefaultbg) == VT_BSTR, "V_VT(&vDefaultbg) != VT_BSTR\n");
|
||||||
|
ok(!strcmp_wa(V_BSTR(&vbg), "#ff0000"), "Unexpected bgcolor %s\n", wine_dbgstr_w(V_BSTR(&vbg)));
|
||||||
|
VariantClear(&vbg);
|
||||||
|
|
||||||
|
V_VT(&vbg) = VT_I4;
|
||||||
|
V_I4(&vbg) = 0xff0000;
|
||||||
|
hres = IHTMLTable_put_bgColor(table, vbg);
|
||||||
|
ok(hres == S_OK, "put_bgColor failed: %08x\n", hres);
|
||||||
|
VariantClear(&vbg);
|
||||||
|
|
||||||
|
hres = IHTMLTable_get_bgColor(table, &vbg);
|
||||||
|
ok(hres == S_OK, "get_bgColor failed: %08x\n", hres);
|
||||||
|
ok(V_VT(&vDefaultbg) == VT_BSTR, "V_VT(&vDefaultbg) != VT_BSTR\n");
|
||||||
|
ok(!strcmp_wa(V_BSTR(&vbg), "#ff0000"), "Unexpected bgcolor %s\n", wine_dbgstr_w(V_BSTR(&vbg)));
|
||||||
|
VariantClear(&vbg);
|
||||||
|
|
||||||
|
/* Restore Originial */
|
||||||
|
hres = IHTMLTable_put_bgColor(table, vDefaultbg);
|
||||||
|
ok(hres == S_OK, "put_bgColor failed: %08x\n", hres);
|
||||||
|
VariantClear(&vDefaultbg);
|
||||||
|
|
||||||
IHTMLTable_Release(table);
|
IHTMLTable_Release(table);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5903,6 +6077,7 @@ static void test_stylesheet(IDispatch *disp)
|
||||||
IHTMLStyleSheetRulesCollection *col = NULL;
|
IHTMLStyleSheetRulesCollection *col = NULL;
|
||||||
IHTMLStyleSheet *stylesheet;
|
IHTMLStyleSheet *stylesheet;
|
||||||
HRESULT hres;
|
HRESULT hres;
|
||||||
|
BSTR href;
|
||||||
|
|
||||||
test_disp2((IUnknown*)disp, &DIID_DispHTMLStyleSheet, &IID_IHTMLStyleSheet, "[object]");
|
test_disp2((IUnknown*)disp, &DIID_DispHTMLStyleSheet, &IID_IHTMLStyleSheet, "[object]");
|
||||||
|
|
||||||
|
@ -5912,8 +6087,14 @@ static void test_stylesheet(IDispatch *disp)
|
||||||
hres = IHTMLStyleSheet_get_rules(stylesheet, &col);
|
hres = IHTMLStyleSheet_get_rules(stylesheet, &col);
|
||||||
ok(hres == S_OK, "get_rules failed: %08x\n", hres);
|
ok(hres == S_OK, "get_rules failed: %08x\n", hres);
|
||||||
ok(col != NULL, "col == NULL\n");
|
ok(col != NULL, "col == NULL\n");
|
||||||
|
|
||||||
IHTMLStyleSheetRulesCollection_Release(col);
|
IHTMLStyleSheetRulesCollection_Release(col);
|
||||||
|
|
||||||
|
href = (void*)0xdeadbeef;
|
||||||
|
hres = IHTMLStyleSheet_get_href(stylesheet, &href);
|
||||||
|
ok(hres == S_OK, "get_href failed: %08x\n", hres);
|
||||||
|
ok(href == NULL, "got href != NULL\n");
|
||||||
|
SysFreeString(href);
|
||||||
|
|
||||||
IHTMLStyleSheet_Release(stylesheet);
|
IHTMLStyleSheet_Release(stylesheet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5952,7 +6133,6 @@ static void test_stylesheets(IHTMLDocument2 *doc)
|
||||||
hres = IHTMLStyleSheetsCollection_item(col, &idx, &res);
|
hres = IHTMLStyleSheetsCollection_item(col, &idx, &res);
|
||||||
ok(hres == E_INVALIDARG, "item failed: %08x, expected E_INVALIDARG\n", hres);
|
ok(hres == E_INVALIDARG, "item failed: %08x, expected E_INVALIDARG\n", hres);
|
||||||
ok(V_VT(&res) == VT_EMPTY, "V_VT(res) = %d\n", V_VT(&res));
|
ok(V_VT(&res) == VT_EMPTY, "V_VT(res) = %d\n", V_VT(&res));
|
||||||
ok(V_DISPATCH(&res) != NULL, "V_DISPATCH(&res) == NULL\n");
|
|
||||||
VariantClear(&res);
|
VariantClear(&res);
|
||||||
|
|
||||||
IHTMLStyleSheetsCollection_Release(col);
|
IHTMLStyleSheetsCollection_Release(col);
|
||||||
|
@ -6682,6 +6862,54 @@ static void test_blocked(IHTMLDocument2 *doc, IHTMLElement *outer_elem)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define doc_get_elems_by_name(a,b) _doc_get_elems_by_name(__LINE__,a,b)
|
||||||
|
static IHTMLElementCollection *_doc_get_elems_by_name(unsigned line, IHTMLDocument2 *doc, const char *name)
|
||||||
|
{
|
||||||
|
IHTMLDocument3 *doc3 = _get_doc3_iface(line, doc);
|
||||||
|
IHTMLElementCollection *col;
|
||||||
|
BSTR str = a2bstr(name);
|
||||||
|
HRESULT hres;
|
||||||
|
|
||||||
|
hres = IHTMLDocument3_getElementsByName(doc3, str, &col);
|
||||||
|
ok_(__FILE__,line)(hres == S_OK, "getElementsByName failed: %08x\n", hres);
|
||||||
|
ok_(__FILE__,line)(col != NULL, "col = NULL\n");
|
||||||
|
|
||||||
|
IHTMLDocument3_Release(doc3);
|
||||||
|
SysFreeString(str);
|
||||||
|
return col;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_elem_names(IHTMLDocument2 *doc)
|
||||||
|
{
|
||||||
|
IHTMLElementCollection *col;
|
||||||
|
IHTMLElement *body;
|
||||||
|
LONG len;
|
||||||
|
HRESULT hres;
|
||||||
|
|
||||||
|
static const elem_type_t test1_types[] = {ET_INPUT, ET_A, ET_DIV};
|
||||||
|
|
||||||
|
body = doc_get_body(doc);
|
||||||
|
|
||||||
|
test_elem_set_innerhtml((IUnknown*)body,
|
||||||
|
"<input name=\"test\"><a name=\"test\"></a><a name=\"xxx\"></a><div id=\"test\"></div>");
|
||||||
|
col = doc_get_elems_by_name(doc, "test");
|
||||||
|
test_elem_collection((IUnknown*)col, test1_types, sizeof(test1_types)/sizeof(*test1_types));
|
||||||
|
IHTMLElementCollection_Release(col);
|
||||||
|
|
||||||
|
col = doc_get_elems_by_name(doc, "yyy");
|
||||||
|
test_elem_collection((IUnknown*)col, NULL, 0);
|
||||||
|
IHTMLElementCollection_Release(col);
|
||||||
|
|
||||||
|
/* case insensivity test */
|
||||||
|
col = doc_get_elems_by_name(doc, "Xxx");
|
||||||
|
hres = IHTMLElementCollection_get_length(col, &len);
|
||||||
|
ok(hres == S_OK, "get_length failed: %08x\n", hres);
|
||||||
|
todo_wine ok(len == 1, "len = %d\n", len);
|
||||||
|
IHTMLElementCollection_Release(col);
|
||||||
|
|
||||||
|
IHTMLElement_Release(body);
|
||||||
|
}
|
||||||
|
|
||||||
static void test_elems2(IHTMLDocument2 *doc)
|
static void test_elems2(IHTMLDocument2 *doc)
|
||||||
{
|
{
|
||||||
IHTMLElement *elem, *elem2, *div;
|
IHTMLElement *elem, *elem2, *div;
|
||||||
|
@ -6770,6 +6998,7 @@ static void test_elems2(IHTMLDocument2 *doc)
|
||||||
|
|
||||||
test_attr(div);
|
test_attr(div);
|
||||||
test_blocked(doc, div);
|
test_blocked(doc, div);
|
||||||
|
test_elem_names(doc);
|
||||||
|
|
||||||
IHTMLElement_Release(div);
|
IHTMLElement_Release(div);
|
||||||
}
|
}
|
||||||
|
@ -7120,7 +7349,7 @@ static void test_cond_comment(IHTMLDocument2 *doc)
|
||||||
|
|
||||||
static HRESULT WINAPI Unknown_QueryInterface(IUnknown *iface, REFIID riid, void **ppv)
|
static HRESULT WINAPI Unknown_QueryInterface(IUnknown *iface, REFIID riid, void **ppv)
|
||||||
{
|
{
|
||||||
ok(IsEqualGUID(riid, &IID_IServiceProvider), "riid = %s\n", dbgstr_guid(riid));
|
ok(IsEqualGUID(riid, &IID_IServiceProvider), "riid = %s\n", wine_dbgstr_guid(riid));
|
||||||
return E_NOINTERFACE;
|
return E_NOINTERFACE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7542,9 +7771,9 @@ static void run_domtest(const char *str, domtest_t test)
|
||||||
|
|
||||||
do_advise((IUnknown*)doc, &IID_IPropertyNotifySink, (IUnknown*)&PropertyNotifySink);
|
do_advise((IUnknown*)doc, &IID_IPropertyNotifySink, (IUnknown*)&PropertyNotifySink);
|
||||||
|
|
||||||
while(!doc_complete && GetMessage(&msg, NULL, 0, 0)) {
|
while(!doc_complete && GetMessageW(&msg, NULL, 0, 0)) {
|
||||||
TranslateMessage(&msg);
|
TranslateMessage(&msg);
|
||||||
DispatchMessage(&msg);
|
DispatchMessageW(&msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
test(doc);
|
test(doc);
|
||||||
|
|
|
@ -83,11 +83,13 @@ DEFINE_EXPECT(submit_onclick_attached);
|
||||||
DEFINE_EXPECT(submit_onclick_attached_check_cancel);
|
DEFINE_EXPECT(submit_onclick_attached_check_cancel);
|
||||||
DEFINE_EXPECT(submit_onclick_setret);
|
DEFINE_EXPECT(submit_onclick_setret);
|
||||||
DEFINE_EXPECT(elem2_cp_onclick);
|
DEFINE_EXPECT(elem2_cp_onclick);
|
||||||
|
DEFINE_EXPECT(iframe_onload);
|
||||||
|
|
||||||
static HWND container_hwnd = NULL;
|
static HWND container_hwnd = NULL;
|
||||||
static IHTMLWindow2 *window;
|
static IHTMLWindow2 *window;
|
||||||
static IOleDocumentView *view;
|
static IOleDocumentView *view;
|
||||||
static BOOL xy_todo;
|
static BOOL xy_todo;
|
||||||
|
static BOOL is_ie9plus;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
LONG x;
|
LONG x;
|
||||||
|
@ -125,18 +127,6 @@ static const char form_doc_str[] =
|
||||||
"<input type=\"submit\" id=\"submitid\" />"
|
"<input type=\"submit\" id=\"submitid\" />"
|
||||||
"</form></body></html>";
|
"</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)
|
static int strcmp_wa(LPCWSTR strw, const char *stra)
|
||||||
{
|
{
|
||||||
CHAR buf[512];
|
CHAR buf[512];
|
||||||
|
@ -198,7 +188,7 @@ static void _test_disp(unsigned line, IUnknown *unk, const IID *diid)
|
||||||
hres = ITypeInfo_GetTypeAttr(typeinfo, &type_attr);
|
hres = ITypeInfo_GetTypeAttr(typeinfo, &type_attr);
|
||||||
ok_(__FILE__,line) (hres == S_OK, "GetTypeAttr failed: %08x\n", hres);
|
ok_(__FILE__,line) (hres == S_OK, "GetTypeAttr failed: %08x\n", hres);
|
||||||
ok_(__FILE__,line) (IsEqualGUID(&type_attr->guid, diid), "unexpected guid %s\n",
|
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_ReleaseTypeAttr(typeinfo, type_attr);
|
||||||
ITypeInfo_Release(typeinfo);
|
ITypeInfo_Release(typeinfo);
|
||||||
|
@ -255,6 +245,18 @@ static IHTMLElement3 *_get_elem3_iface(unsigned line, IUnknown *unk)
|
||||||
return elem3;
|
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)
|
#define doc_get_body(d) _doc_get_body(__LINE__,d)
|
||||||
static IHTMLElement *_doc_get_body(unsigned line, IHTMLDocument2 *doc)
|
static IHTMLElement *_doc_get_body(unsigned line, IHTMLDocument2 *doc)
|
||||||
{
|
{
|
||||||
|
@ -729,7 +731,7 @@ static HRESULT WINAPI DispatchEx_QueryInterface(IDispatchEx *iface, REFIID riid,
|
||||||
|| IsEqualGUID(riid, &IID_IDispatchEx))
|
|| IsEqualGUID(riid, &IID_IDispatchEx))
|
||||||
*ppv = iface;
|
*ppv = iface;
|
||||||
else {
|
else {
|
||||||
ok(0, "unexpected riid %s\n", debugstr_guid(riid));
|
ok(0, "unexpected riid %s\n", wine_dbgstr_guid(riid));
|
||||||
return E_NOINTERFACE;
|
return E_NOINTERFACE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -746,7 +748,7 @@ static HRESULT WINAPI Dispatch_QueryInterface(IDispatchEx *iface, REFIID riid, v
|
||||||
}else if(IsEqualGUID(riid, &IID_IDispatchEx)) {
|
}else if(IsEqualGUID(riid, &IID_IDispatchEx)) {
|
||||||
return E_NOINTERFACE;
|
return E_NOINTERFACE;
|
||||||
}else {
|
}else {
|
||||||
ok(0, "unexpected riid %s\n", debugstr_guid(riid));
|
ok(0, "unexpected riid %s\n", wine_dbgstr_guid(riid));
|
||||||
return E_NOINTERFACE;
|
return E_NOINTERFACE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1005,6 +1007,17 @@ static HRESULT WINAPI submit_onclick(IDispatchEx *iface, DISPID id, LCID lcid, W
|
||||||
|
|
||||||
EVENT_HANDLER_FUNC_OBJ(submit_onclick);
|
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,
|
static HRESULT WINAPI submit_onclick_attached(IDispatchEx *iface, DISPID id, LCID lcid, WORD wFlags, DISPPARAMS *pdp,
|
||||||
VARIANT *pvarRes, EXCEPINFO *pei, IServiceProvider *pspCaller)
|
VARIANT *pvarRes, EXCEPINFO *pei, IServiceProvider *pspCaller)
|
||||||
{
|
{
|
||||||
|
@ -1200,7 +1213,7 @@ EVENT_HANDLER_FUNC_OBJ(nocall);
|
||||||
|| IsEqualGUID(riid, &diid)) \
|
|| IsEqualGUID(riid, &diid)) \
|
||||||
*ppv = iface; \
|
*ppv = iface; \
|
||||||
else { \
|
else { \
|
||||||
ok(0, "unexpected riid %s\n", debugstr_guid(riid)); \
|
ok(0, "unexpected riid %s\n", wine_dbgstr_guid(riid)); \
|
||||||
return E_NOINTERFACE; \
|
return E_NOINTERFACE; \
|
||||||
} \
|
} \
|
||||||
return S_OK; \
|
return S_OK; \
|
||||||
|
@ -1227,7 +1240,7 @@ EVENT_HANDLER_FUNC_OBJ(nocall);
|
||||||
#define test_cp_args(a,b,c,d,e,f) _test_cp_args(__LINE__,a,b,c,d,e,f)
|
#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)
|
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)(flags == DISPATCH_METHOD, "flags = %x\n", flags);
|
||||||
ok_(__FILE__,line)(dp != NULL, "dp == NULL\n");
|
ok_(__FILE__,line)(dp != NULL, "dp == NULL\n");
|
||||||
ok_(__FILE__,line)(!dp->cArgs, "dp->cArgs = %d\n", dp->cArgs);
|
ok_(__FILE__,line)(!dp->cArgs, "dp->cArgs = %d\n", dp->cArgs);
|
||||||
|
@ -1245,7 +1258,7 @@ static void _test_cp_eventarg(unsigned line, REFIID riid, WORD flags, DISPPARAMS
|
||||||
{
|
{
|
||||||
IHTMLEventObj *event;
|
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)(flags == DISPATCH_METHOD, "flags = %x\n", flags);
|
||||||
ok_(__FILE__,line)(dp != NULL, "dp == NULL\n");
|
ok_(__FILE__,line)(dp != NULL, "dp == NULL\n");
|
||||||
ok_(__FILE__,line)(dp->cArgs == 1, "dp->cArgs = %d\n", dp->cArgs);
|
ok_(__FILE__,line)(dp->cArgs == 1, "dp->cArgs = %d\n", dp->cArgs);
|
||||||
|
@ -1329,7 +1342,7 @@ static HRESULT WINAPI timeoutFunc_Invoke(IDispatchEx *iface, DISPID dispIdMember
|
||||||
CHECK_EXPECT(timeout);
|
CHECK_EXPECT(timeout);
|
||||||
|
|
||||||
ok(dispIdMember == DISPID_VALUE, "dispIdMember = %d\n", dispIdMember);
|
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(wFlags == DISPATCH_METHOD, "wFlags = %x\n", wFlags);
|
||||||
ok(!lcid, "lcid = %x\n", lcid);
|
ok(!lcid, "lcid = %x\n", lcid);
|
||||||
ok(pDispParams != NULL, "pDispParams == NULL\n");
|
ok(pDispParams != NULL, "pDispParams == NULL\n");
|
||||||
|
@ -1373,7 +1386,7 @@ static HRESULT WINAPI div_onclick_disp_Invoke(IDispatchEx *iface, DISPID id,
|
||||||
|
|
||||||
test_attached_event_args(id, wFlags, pdp, pvarRes, pei);
|
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);
|
ok(!puArgErr, "puArgErr = %p\n", puArgErr);
|
||||||
|
|
||||||
return S_OK;
|
return S_OK;
|
||||||
|
@ -1398,12 +1411,12 @@ static void pump_msgs(BOOL *b)
|
||||||
if(b) {
|
if(b) {
|
||||||
while(!*b && GetMessageW(&msg, NULL, 0, 0)) {
|
while(!*b && GetMessageW(&msg, NULL, 0, 0)) {
|
||||||
TranslateMessage(&msg);
|
TranslateMessage(&msg);
|
||||||
DispatchMessage(&msg);
|
DispatchMessageW(&msg);
|
||||||
}
|
}
|
||||||
}else {
|
}else {
|
||||||
while(!b && PeekMessageW(&msg, NULL, 0, 0, PM_REMOVE)) {
|
while(!b && PeekMessageW(&msg, NULL, 0, 0, PM_REMOVE)) {
|
||||||
TranslateMessage(&msg);
|
TranslateMessage(&msg);
|
||||||
DispatchMessage(&msg);
|
DispatchMessageW(&msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1493,7 +1506,7 @@ static HRESULT WINAPI EventDispatch_Invoke(IDispatch *iface, DISPID dispIdMember
|
||||||
LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult,
|
LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult,
|
||||||
EXCEPINFO *pExcepInfo, UINT *puArgErr)
|
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(pDispParams != NULL, "pDispParams == NULL\n");
|
||||||
ok(pExcepInfo != NULL, "pExcepInfo == NULL\n");
|
ok(pExcepInfo != NULL, "pExcepInfo == NULL\n");
|
||||||
ok(puArgErr != NULL, "puArgErr == NULL\n");
|
ok(puArgErr != NULL, "puArgErr == NULL\n");
|
||||||
|
@ -2070,6 +2083,8 @@ static void test_submit(IHTMLDocument2 *doc)
|
||||||
CHECK_CALLED(submit_onclick_attached_check_cancel);
|
CHECK_CALLED(submit_onclick_attached_check_cancel);
|
||||||
CHECK_CALLED(submit_onclick_attached);
|
CHECK_CALLED(submit_onclick_attached);
|
||||||
|
|
||||||
|
if(1)pump_msgs(NULL);
|
||||||
|
|
||||||
IHTMLElement_Release(submit);
|
IHTMLElement_Release(submit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2156,16 +2171,19 @@ static IHTMLDocument2* get_iframe_doc(IHTMLIFrameElement *iframe)
|
||||||
|
|
||||||
static void test_iframe_connections(IHTMLDocument2 *doc)
|
static void test_iframe_connections(IHTMLDocument2 *doc)
|
||||||
{
|
{
|
||||||
HRESULT hres;
|
|
||||||
IHTMLIFrameElement *iframe;
|
IHTMLIFrameElement *iframe;
|
||||||
IHTMLDocument2 *iframes_doc;
|
IHTMLDocument2 *iframes_doc;
|
||||||
DWORD cookie;
|
DWORD cookie;
|
||||||
IConnectionPoint *cp;
|
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);
|
IHTMLElement_Release(element);
|
||||||
ok(hres == S_OK, "QueryInterface(IID_IHTMLIFrameElement) failed: %08x\n", hres);
|
|
||||||
|
|
||||||
iframes_doc = get_iframe_doc(iframe);
|
iframes_doc = get_iframe_doc(iframe);
|
||||||
IHTMLIFrameElement_Release(iframe);
|
IHTMLIFrameElement_Release(iframe);
|
||||||
|
@ -2177,6 +2195,43 @@ static void test_iframe_connections(IHTMLDocument2 *doc)
|
||||||
IConnectionPoint_Release(cp);
|
IConnectionPoint_Release(cp);
|
||||||
ok(hres == CONNECT_E_NOCONNECTION, "Unadvise returned %08x, expected CONNECT_E_NOCONNECTION\n", hres);
|
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);
|
IHTMLDocument2_Release(iframes_doc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2684,24 +2739,12 @@ static void set_client_site(IHTMLDocument2 *doc, BOOL set)
|
||||||
static IHTMLDocument2 *create_document(void)
|
static IHTMLDocument2 *create_document(void)
|
||||||
{
|
{
|
||||||
IHTMLDocument2 *doc;
|
IHTMLDocument2 *doc;
|
||||||
IHTMLDocument5 *doc5;
|
|
||||||
HRESULT hres;
|
HRESULT hres;
|
||||||
|
|
||||||
hres = CoCreateInstance(&CLSID_HTMLDocument, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
|
hres = CoCreateInstance(&CLSID_HTMLDocument, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
|
||||||
&IID_IHTMLDocument2, (void**)&doc);
|
&IID_IHTMLDocument2, (void**)&doc);
|
||||||
ok(hres == S_OK, "CoCreateInstance failed: %08x\n", hres);
|
ok(hres == S_OK, "CoCreateInstance failed: %08x\n", hres);
|
||||||
if (FAILED(hres))
|
return SUCCEEDED(hres) ? doc : NULL;
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2722,9 +2765,9 @@ static void run_test(const char *str, testfunc_t test)
|
||||||
doc_load_string(doc, str);
|
doc_load_string(doc, str);
|
||||||
do_advise((IUnknown*)doc, &IID_IPropertyNotifySink, (IUnknown*)&PropertyNotifySink);
|
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);
|
TranslateMessage(&msg);
|
||||||
DispatchMessage(&msg);
|
DispatchMessageA(&msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
hres = IHTMLDocument2_get_body(doc, &body);
|
hres = IHTMLDocument2_get_body(doc, &body);
|
||||||
|
@ -2751,7 +2794,7 @@ static void run_test(const char *str, testfunc_t test)
|
||||||
|
|
||||||
static LRESULT WINAPI wnd_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
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)
|
static HWND create_container_window(void)
|
||||||
|
@ -2802,9 +2845,38 @@ static void test_empty_document(void)
|
||||||
IHTMLDocument2_Release(doc);
|
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)
|
START_TEST(events)
|
||||||
{
|
{
|
||||||
CoInitialize(NULL);
|
CoInitialize(NULL);
|
||||||
|
|
||||||
|
if(check_ie()) {
|
||||||
container_hwnd = create_container_window();
|
container_hwnd = create_container_window();
|
||||||
|
|
||||||
if(winetest_interactive)
|
if(winetest_interactive)
|
||||||
|
@ -2821,5 +2893,9 @@ START_TEST(events)
|
||||||
test_empty_document();
|
test_empty_document();
|
||||||
|
|
||||||
DestroyWindow(container_hwnd);
|
DestroyWindow(container_hwnd);
|
||||||
|
}else {
|
||||||
|
win_skip("Too old IE\n");
|
||||||
|
}
|
||||||
|
|
||||||
CoUninitialize();
|
CoUninitialize();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<script>
|
<script>
|
||||||
var testevent_divid2_called = false, cnt=0;
|
var testevent_divid2_called = false, testevent_document_called = false, cnt=0;
|
||||||
|
|
||||||
function ok(b,m) {
|
function ok(b,m) {
|
||||||
return external.ok(b, m);
|
return external.ok(b, m);
|
||||||
|
@ -71,8 +71,11 @@ function test_scriptfor() {
|
||||||
ok("onclick" in div, "testevent not in div");
|
ok("onclick" in div, "testevent not in div");
|
||||||
ok(typeof(div.onclick) === "function", "typeof(div.onclick) = " + typeof(div.onclick));
|
ok(typeof(div.onclick) === "function", "typeof(div.onclick) = " + typeof(div.onclick));
|
||||||
ok(testevent_divid2_called === false, "testevent_divid2_called = " + testevent_divid2_called);
|
ok(testevent_divid2_called === false, "testevent_divid2_called = " + testevent_divid2_called);
|
||||||
|
ok(typeof(document.onclick) === "function", "typeof(document.onclick) = " + typeof(document.onclick));
|
||||||
|
ok(testevent_document_called === false, "testevent_document_called = " + testevent_document_called);
|
||||||
div.click();
|
div.click();
|
||||||
ok(testevent_divid2_called === true, "testevent_divid2_called = " + testevent_divid2_called);
|
ok(testevent_divid2_called === true, "testevent_divid2_called = " + testevent_divid2_called);
|
||||||
|
ok(testevent_document_called === true, "testevent_document_called = " + testevent_document_called);
|
||||||
|
|
||||||
ok(!("ontest" in div), "testevent in div");
|
ok(!("ontest" in div), "testevent in div");
|
||||||
ok(typeof(div.ontest) === "undefined", "typeof(div.ontest) = " + typeof(div.ontest));
|
ok(typeof(div.ontest) === "undefined", "typeof(div.ontest) = " + typeof(div.ontest));
|
||||||
|
@ -136,6 +139,9 @@ function runTests(t) {
|
||||||
<script event="onclick" for="divid2">
|
<script event="onclick" for="divid2">
|
||||||
testevent_divid2_called = true;
|
testevent_divid2_called = true;
|
||||||
</script>
|
</script>
|
||||||
|
<script event="onclick" for="document">
|
||||||
|
testevent_document_called = true;
|
||||||
|
</script>
|
||||||
<script event="ontest" for="divid2">
|
<script event="ontest" for="divid2">
|
||||||
ok(false, "unexpected ontest");
|
ok(false, "unexpected ontest");
|
||||||
</script>
|
</script>
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -24,10 +24,10 @@ static BOOL is_ie_hardened(void)
|
||||||
DWORD ie_harden, type, size;
|
DWORD ie_harden, type, size;
|
||||||
|
|
||||||
ie_harden = 0;
|
ie_harden = 0;
|
||||||
if(RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap",
|
if(RegOpenKeyExA(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap",
|
||||||
0, KEY_QUERY_VALUE, &zone_map) == ERROR_SUCCESS) {
|
0, KEY_QUERY_VALUE, &zone_map) == ERROR_SUCCESS) {
|
||||||
size = sizeof(DWORD);
|
size = sizeof(DWORD);
|
||||||
if (RegQueryValueEx(zone_map, "IEHarden", NULL, &type, (LPBYTE) &ie_harden, &size) != ERROR_SUCCESS ||
|
if (RegQueryValueExA(zone_map, "IEHarden", NULL, &type, (LPBYTE) &ie_harden, &size) != ERROR_SUCCESS ||
|
||||||
type != REG_DWORD) {
|
type != REG_DWORD) {
|
||||||
ie_harden = 0;
|
ie_harden = 0;
|
||||||
}
|
}
|
||||||
|
|
42
rostests/winetests/mshtml/nav_test.html
Normal file
42
rostests/winetests/mshtml/nav_test.html
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<script>
|
||||||
|
function ok(b,m) {
|
||||||
|
return external.ok(b, m);
|
||||||
|
}
|
||||||
|
|
||||||
|
function nav_back_test() {
|
||||||
|
external.trace("Running _parent navigation tests...");
|
||||||
|
|
||||||
|
var iframe = document.getElementById("testframe");
|
||||||
|
var subframe = iframe.contentWindow.document.createElement("iframe");
|
||||||
|
|
||||||
|
subframe.onload = function() {
|
||||||
|
var doc = subframe.contentWindow.document;
|
||||||
|
doc.body.innerHTML = '<a href="blank2.html" id="aid" target="_parent">test</a>';
|
||||||
|
doc.getElementById("aid").click();
|
||||||
|
}
|
||||||
|
|
||||||
|
iframe.onload = function() {
|
||||||
|
var href = iframe.contentWindow.location.href;
|
||||||
|
ok(/.*blank2.html/.test(href), "Unexpected href " + href);
|
||||||
|
next_test();
|
||||||
|
}
|
||||||
|
|
||||||
|
iframe.contentWindow.document.body.appendChild(subframe);
|
||||||
|
subframe.src = "blank.html";
|
||||||
|
}
|
||||||
|
|
||||||
|
var tests = [
|
||||||
|
nav_back_test,
|
||||||
|
function() { external.reportSuccess(); }
|
||||||
|
];
|
||||||
|
|
||||||
|
function next_test() {
|
||||||
|
window.setTimeout(tests.shift(), 0);
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<body onload="next_test()">
|
||||||
|
<iframe src="about:blank" id="testframe"></iframe>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -25,7 +25,7 @@
|
||||||
//#include "windef.h"
|
//#include "windef.h"
|
||||||
//#include "winbase.h"
|
//#include "winbase.h"
|
||||||
//#include "ole2.h"
|
//#include "ole2.h"
|
||||||
//#include "urlmon.h"
|
#include <urlmon.h>
|
||||||
#include <shlwapi.h>
|
#include <shlwapi.h>
|
||||||
#include <wininet.h>
|
#include <wininet.h>
|
||||||
|
|
||||||
|
@ -77,18 +77,6 @@ static const WCHAR javascript_test_url[] = {'j','a','v','a','s','c','r','i','p',
|
||||||
static WCHAR res_url_base[INTERNET_MAX_URL_LENGTH] = {'r','e','s',':','/','/'};
|
static WCHAR res_url_base[INTERNET_MAX_URL_LENGTH] = {'r','e','s',':','/','/'};
|
||||||
static unsigned res_url_base_len;
|
static unsigned res_url_base_len;
|
||||||
|
|
||||||
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 HRESULT WINAPI ProtocolSink_QueryInterface(IInternetProtocolSink *iface, REFIID riid, void **ppv)
|
static HRESULT WINAPI ProtocolSink_QueryInterface(IInternetProtocolSink *iface, REFIID riid, void **ppv)
|
||||||
{
|
{
|
||||||
if(IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_IInternetProtocolSink, riid)) {
|
if(IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_IInternetProtocolSink, riid)) {
|
||||||
|
@ -97,7 +85,7 @@ static HRESULT WINAPI ProtocolSink_QueryInterface(IInternetProtocolSink *iface,
|
||||||
}
|
}
|
||||||
|
|
||||||
*ppv = NULL;
|
*ppv = NULL;
|
||||||
ok(0, "unexpected riid %s\n", debugstr_guid(riid));
|
ok(0, "unexpected riid %s\n", wine_dbgstr_guid(riid));
|
||||||
return E_NOINTERFACE;
|
return E_NOINTERFACE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -184,7 +172,7 @@ static HRESULT WINAPI BindInfo_QueryInterface(IInternetBindInfo *iface, REFIID r
|
||||||
}
|
}
|
||||||
|
|
||||||
*ppv = NULL;
|
*ppv = NULL;
|
||||||
ok(0, "unexpected riid %s\n", debugstr_guid(riid));
|
ok(0, "unexpected riid %s\n", wine_dbgstr_guid(riid));
|
||||||
return E_NOINTERFACE;
|
return E_NOINTERFACE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,15 @@ events.html HTML "events.html"
|
||||||
/* @makedep: externscr.js */
|
/* @makedep: externscr.js */
|
||||||
externscr.js HTML "externscr.js"
|
externscr.js HTML "externscr.js"
|
||||||
|
|
||||||
|
/* @makedep: nav_test.html */
|
||||||
|
nav_test.html HTML "nav_test.html"
|
||||||
|
|
||||||
|
/* @makedep: blank.html */
|
||||||
|
blank.html HTML "blank.html"
|
||||||
|
|
||||||
|
/* @makedep: blank.html */
|
||||||
|
blank2.html HTML "blank.html"
|
||||||
|
|
||||||
/* @makedep: test_tlb.tlb */
|
/* @makedep: test_tlb.tlb */
|
||||||
1 TYPELIB test_tlb.tlb
|
1 TYPELIB test_tlb.tlb
|
||||||
|
|
||||||
|
|
|
@ -150,6 +150,7 @@ static const GUID CLSID_TestScript =
|
||||||
static const GUID CLSID_TestActiveX =
|
static const GUID CLSID_TestActiveX =
|
||||||
{0x178fc163,0xf585,0x4e24,{0x9c,0x13,0x4b,0xb7,0xfa,0xf8,0x06,0x46}};
|
{0x178fc163,0xf585,0x4e24,{0x9c,0x13,0x4b,0xb7,0xfa,0xf8,0x06,0x46}};
|
||||||
|
|
||||||
|
static BOOL is_ie9plus;
|
||||||
static IHTMLDocument2 *notif_doc;
|
static IHTMLDocument2 *notif_doc;
|
||||||
static IOleDocumentView *view;
|
static IOleDocumentView *view;
|
||||||
static IDispatchEx *window_dispex;
|
static IDispatchEx *window_dispex;
|
||||||
|
@ -161,18 +162,6 @@ static HRESULT ax_getopt_hres = S_OK, ax_setopt_dispex_hres = S_OK;
|
||||||
static HRESULT ax_setopt_disp_caller_hres = S_OK, ax_setopt_disp_data_hres = S_OK;
|
static HRESULT ax_setopt_disp_caller_hres = S_OK, ax_setopt_disp_data_hres = S_OK;
|
||||||
static BOOL skip_loadobject_tests;
|
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 int strcmp_wa(LPCWSTR strw, const char *stra)
|
static int strcmp_wa(LPCWSTR strw, const char *stra)
|
||||||
{
|
{
|
||||||
CHAR buf[512];
|
CHAR buf[512];
|
||||||
|
@ -201,7 +190,7 @@ static BOOL init_key(const char *key_name, const char *def_value, BOOL init)
|
||||||
DWORD res;
|
DWORD res;
|
||||||
|
|
||||||
if(!init) {
|
if(!init) {
|
||||||
RegDeleteKey(HKEY_CLASSES_ROOT, key_name);
|
RegDeleteKeyA(HKEY_CLASSES_ROOT, key_name);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -276,7 +265,7 @@ static IPropertyNotifySink PropertyNotifySink = { &PropertyNotifySinkVtbl };
|
||||||
|
|
||||||
static HRESULT WINAPI VariantChangeType_QueryInterface(IVariantChangeType *iface, REFIID riid, void **ppv)
|
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;
|
*ppv = NULL;
|
||||||
return E_NOINTERFACE;
|
return E_NOINTERFACE;
|
||||||
}
|
}
|
||||||
|
@ -338,12 +327,12 @@ static HRESULT WINAPI ServiceProvider_QueryService(IServiceProvider *iface, REFG
|
||||||
{
|
{
|
||||||
if(IsEqualGUID(guidService, &SID_VariantConversion)) {
|
if(IsEqualGUID(guidService, &SID_VariantConversion)) {
|
||||||
CHECK_EXPECT(QS_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;
|
*ppv = &VChangeType;
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
ok(0, "unexpected service %s\n", debugstr_guid(guidService));
|
ok(0, "unexpected service %s\n", wine_dbgstr_guid(guidService));
|
||||||
return E_NOINTERFACE;
|
return E_NOINTERFACE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1177,23 +1166,12 @@ static HRESULT QueryInterface(REFIID riid, void **ppv)
|
||||||
static IHTMLDocument2 *create_document(void)
|
static IHTMLDocument2 *create_document(void)
|
||||||
{
|
{
|
||||||
IHTMLDocument2 *doc;
|
IHTMLDocument2 *doc;
|
||||||
IHTMLDocument5 *doc5;
|
|
||||||
HRESULT hres;
|
HRESULT hres;
|
||||||
|
|
||||||
hres = CoCreateInstance(&CLSID_HTMLDocument, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
|
hres = CoCreateInstance(&CLSID_HTMLDocument, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
|
||||||
&IID_IHTMLDocument2, (void**)&doc);
|
&IID_IHTMLDocument2, (void**)&doc);
|
||||||
ok(hres == S_OK, "CoCreateInstance failed: %08x\n", hres);
|
ok(hres == S_OK, "CoCreateInstance failed: %08x\n", hres);
|
||||||
if (hres != S_OK) return NULL;
|
return SUCCEEDED(hres) ? doc : 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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void load_string(IHTMLDocument2 *doc, const char *str)
|
static void load_string(IHTMLDocument2 *doc, const char *str)
|
||||||
|
@ -1285,9 +1263,9 @@ static void load_doc(IHTMLDocument2 *doc, const char *str)
|
||||||
load_string(doc, str);
|
load_string(doc, str);
|
||||||
do_advise(doc, &IID_IPropertyNotifySink, (IUnknown*)&PropertyNotifySink);
|
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);
|
TranslateMessage(&msg);
|
||||||
DispatchMessage(&msg);
|
DispatchMessageW(&msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
hres = IHTMLDocument2_get_body(doc, &body);
|
hres = IHTMLDocument2_get_body(doc, &body);
|
||||||
|
@ -1308,7 +1286,7 @@ static SCRIPTSTATE state;
|
||||||
static HRESULT WINAPI ObjectSafety_QueryInterface(IObjectSafety *iface, REFIID riid, void **ppv)
|
static HRESULT WINAPI ObjectSafety_QueryInterface(IObjectSafety *iface, REFIID riid, void **ppv)
|
||||||
{
|
{
|
||||||
*ppv = NULL;
|
*ppv = NULL;
|
||||||
ok(0, "unexpected call %s\n", debugstr_guid(riid));
|
ok(0, "unexpected call %s\n", wine_dbgstr_guid(riid));
|
||||||
return E_NOINTERFACE;
|
return E_NOINTERFACE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1327,7 +1305,7 @@ static HRESULT WINAPI ObjectSafety_GetInterfaceSafetyOptions(IObjectSafety *ifac
|
||||||
{
|
{
|
||||||
CHECK_EXPECT(GetInterfaceSafetyOptions);
|
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(pdwSupportedOptions != NULL, "pdwSupportedOptions == NULL\n");
|
||||||
ok(pdwEnabledOptions != NULL, "pdwEnabledOptions == NULL\n");
|
ok(pdwEnabledOptions != NULL, "pdwEnabledOptions == NULL\n");
|
||||||
|
|
||||||
|
@ -1342,7 +1320,7 @@ static HRESULT WINAPI ObjectSafety_SetInterfaceSafetyOptions(IObjectSafety *ifac
|
||||||
{
|
{
|
||||||
CHECK_EXPECT(SetInterfaceSafetyOptions);
|
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),
|
ok(dwOptionSetMask == (INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER),
|
||||||
"dwOptionSetMask=%x\n", dwOptionSetMask);
|
"dwOptionSetMask=%x\n", dwOptionSetMask);
|
||||||
|
@ -1379,7 +1357,7 @@ static HRESULT WINAPI AXObjectSafety_QueryInterface(IObjectSafety *iface, REFIID
|
||||||
return S_OK;
|
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;
|
return E_NOINTERFACE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1388,7 +1366,7 @@ static HRESULT WINAPI AXObjectSafety_GetInterfaceSafetyOptions(IObjectSafety *if
|
||||||
{
|
{
|
||||||
CHECK_EXPECT(AXGetInterfaceSafetyOptions);
|
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(pdwSupportedOptions != NULL, "pdwSupportedOptions == NULL\n");
|
||||||
ok(pdwEnabledOptions != NULL, "pdwEnabledOptions == NULL\n");
|
ok(pdwEnabledOptions != NULL, "pdwEnabledOptions == NULL\n");
|
||||||
|
|
||||||
|
@ -1439,7 +1417,7 @@ static HRESULT WINAPI AXObjectSafety_SetInterfaceSafetyOptions(IObjectSafety *if
|
||||||
return hres;
|
return hres;
|
||||||
}
|
}
|
||||||
|
|
||||||
ok(0, "unexpected riid %s\n", debugstr_guid(riid));
|
ok(0, "unexpected riid %s\n", wine_dbgstr_guid(riid));
|
||||||
return E_NOINTERFACE;
|
return E_NOINTERFACE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2424,7 +2402,7 @@ static HRESULT WINAPI ActiveScript_QueryInterface(IActiveScript *iface, REFIID r
|
||||||
if(IsEqualGUID(&IID_IActiveScriptDebug, riid))
|
if(IsEqualGUID(&IID_IActiveScriptDebug, riid))
|
||||||
return E_NOINTERFACE;
|
return E_NOINTERFACE;
|
||||||
|
|
||||||
trace("QI(%s)\n", debugstr_guid(riid));
|
trace("QI(%s)\n", wine_dbgstr_guid(riid));
|
||||||
return E_NOINTERFACE;
|
return E_NOINTERFACE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2653,7 +2631,7 @@ static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFIID r
|
||||||
if(IsEqualGUID(&CLSID_IdentityUnmarshal, riid))
|
if(IsEqualGUID(&CLSID_IdentityUnmarshal, riid))
|
||||||
return E_NOINTERFACE;
|
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;
|
return E_NOTIMPL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2672,7 +2650,7 @@ static HRESULT WINAPI ClassFactory_CreateInstance(IClassFactory *iface, IUnknown
|
||||||
CHECK_EXPECT(CreateInstance);
|
CHECK_EXPECT(CreateInstance);
|
||||||
|
|
||||||
ok(!outer, "outer = %p\n", outer);
|
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;
|
*ppv = &ActiveScript;
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
@ -2826,9 +2804,9 @@ static void run_js_script(const char *test_name)
|
||||||
|
|
||||||
SET_EXPECT(external_success);
|
SET_EXPECT(external_success);
|
||||||
|
|
||||||
while(!called_external_success && GetMessage(&msg, NULL, 0, 0)) {
|
while(!called_external_success && GetMessageW(&msg, NULL, 0, 0)) {
|
||||||
TranslateMessage(&msg);
|
TranslateMessage(&msg);
|
||||||
DispatchMessage(&msg);
|
DispatchMessageW(&msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
CHECK_CALLED(external_success);
|
CHECK_CALLED(external_success);
|
||||||
|
@ -2843,6 +2821,10 @@ static void run_js_tests(void)
|
||||||
run_js_script("exectest.html");
|
run_js_script("exectest.html");
|
||||||
run_js_script("vbtest.html");
|
run_js_script("vbtest.html");
|
||||||
run_js_script("events.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 BOOL init_registry(BOOL init)
|
||||||
|
@ -2873,7 +2855,7 @@ static BOOL register_script_engine(void)
|
||||||
|
|
||||||
static LRESULT WINAPI wnd_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
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)
|
static HWND create_container_window(void)
|
||||||
|
@ -2894,11 +2876,39 @@ static HWND create_container_window(void)
|
||||||
300, 300, NULL, NULL, NULL, NULL);
|
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)
|
START_TEST(script)
|
||||||
{
|
{
|
||||||
CoInitialize(NULL);
|
CoInitialize(NULL);
|
||||||
container_hwnd = create_container_window();
|
container_hwnd = create_container_window();
|
||||||
|
|
||||||
|
if(check_ie()) {
|
||||||
if(winetest_interactive || ! is_ie_hardened()) {
|
if(winetest_interactive || ! is_ie_hardened()) {
|
||||||
if(register_script_engine()) {
|
if(register_script_engine()) {
|
||||||
test_simple_script();
|
test_simple_script();
|
||||||
|
@ -2910,6 +2920,9 @@ START_TEST(script)
|
||||||
}else {
|
}else {
|
||||||
skip("IE running in Enhanced Security Configuration\n");
|
skip("IE running in Enhanced Security Configuration\n");
|
||||||
}
|
}
|
||||||
|
}else {
|
||||||
|
win_skip("Too old IE.\n");
|
||||||
|
}
|
||||||
|
|
||||||
DestroyWindow(container_hwnd);
|
DestroyWindow(container_hwnd);
|
||||||
CoUninitialize();
|
CoUninitialize();
|
||||||
|
|
|
@ -37,6 +37,13 @@ static int strcmp_wa(LPCWSTR strw, const char *stra)
|
||||||
return lstrcmpA(stra, buf);
|
return lstrcmpA(stra, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static BOOL wstr_contains(const WCHAR *strw, const char *stra)
|
||||||
|
{
|
||||||
|
CHAR buf[512];
|
||||||
|
WideCharToMultiByte(CP_ACP, 0, strw, -1, buf, sizeof(buf), NULL, NULL);
|
||||||
|
return strstr(buf, stra) != NULL;
|
||||||
|
}
|
||||||
|
|
||||||
static BSTR a2bstr(const char *str)
|
static BSTR a2bstr(const char *str)
|
||||||
{
|
{
|
||||||
BSTR ret;
|
BSTR ret;
|
||||||
|
@ -464,11 +471,52 @@ static void test_style4(IHTMLStyle4 *style4)
|
||||||
VariantClear(&vdefault);
|
VariantClear(&vdefault);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_style6(IHTMLStyle6 *style)
|
||||||
|
{
|
||||||
|
BSTR str;
|
||||||
|
HRESULT hres;
|
||||||
|
|
||||||
|
str = (void*)0xdeadbeef;
|
||||||
|
hres = IHTMLStyle6_get_outline(style, &str);
|
||||||
|
ok(hres == S_OK, "get_outline failed: %08x\n", hres);
|
||||||
|
ok(str && !*str, "outline = %s\n", wine_dbgstr_w(str));
|
||||||
|
SysFreeString(str);
|
||||||
|
|
||||||
|
str = a2bstr("1px");
|
||||||
|
hres = IHTMLStyle6_put_outline(style, str);
|
||||||
|
ok(hres == S_OK, "put_outline failed: %08x\n", hres);
|
||||||
|
SysFreeString(str);
|
||||||
|
|
||||||
|
str = (void*)0xdeadbeef;
|
||||||
|
hres = IHTMLStyle6_get_outline(style, &str);
|
||||||
|
ok(hres == S_OK, "get_outline failed: %08x\n", hres);
|
||||||
|
ok(wstr_contains(str, "1px"), "outline = %s\n", wine_dbgstr_w(str));
|
||||||
|
SysFreeString(str);
|
||||||
|
|
||||||
|
str = (void*)0xdeadbeef;
|
||||||
|
hres = IHTMLStyle6_get_boxSizing(style, &str);
|
||||||
|
ok(hres == S_OK, "get_boxSizing failed: %08x\n", hres);
|
||||||
|
ok(!str, "boxSizing = %s\n", wine_dbgstr_w(str));
|
||||||
|
SysFreeString(str);
|
||||||
|
|
||||||
|
str = a2bstr("border-box");
|
||||||
|
hres = IHTMLStyle6_put_boxSizing(style, str);
|
||||||
|
ok(hres == S_OK, "put_boxSizing failed: %08x\n", hres);
|
||||||
|
SysFreeString(str);
|
||||||
|
|
||||||
|
str = NULL;
|
||||||
|
hres = IHTMLStyle6_get_boxSizing(style, &str);
|
||||||
|
ok(hres == S_OK, "get_boxSizing failed: %08x\n", hres);
|
||||||
|
ok(!strcmp_wa(str, "border-box"), "boxSizing = %s\n", wine_dbgstr_w(str));
|
||||||
|
SysFreeString(str);
|
||||||
|
}
|
||||||
|
|
||||||
static void test_body_style(IHTMLStyle *style)
|
static void test_body_style(IHTMLStyle *style)
|
||||||
{
|
{
|
||||||
IHTMLStyle2 *style2;
|
IHTMLStyle2 *style2;
|
||||||
IHTMLStyle3 *style3;
|
IHTMLStyle3 *style3;
|
||||||
IHTMLStyle4 *style4;
|
IHTMLStyle4 *style4;
|
||||||
|
IHTMLStyle6 *style6;
|
||||||
VARIANT_BOOL b;
|
VARIANT_BOOL b;
|
||||||
VARIANT v;
|
VARIANT v;
|
||||||
BSTR str;
|
BSTR str;
|
||||||
|
@ -2044,6 +2092,22 @@ static void test_body_style(IHTMLStyle *style)
|
||||||
ok(!strcmp_wa(str, "nowrap"), "whiteSpace = %s\n", wine_dbgstr_w(str));
|
ok(!strcmp_wa(str, "nowrap"), "whiteSpace = %s\n", wine_dbgstr_w(str));
|
||||||
SysFreeString(str);
|
SysFreeString(str);
|
||||||
|
|
||||||
|
/* listStyleType */
|
||||||
|
hres = IHTMLStyle_get_listStyleType(style, &str);
|
||||||
|
ok(hres == S_OK, "get_listStyleType failed: %08x\n", hres);
|
||||||
|
ok(!str, "listStyleType = %s\n", wine_dbgstr_w(str));
|
||||||
|
|
||||||
|
str = a2bstr("square");
|
||||||
|
hres = IHTMLStyle_put_listStyleType(style, str);
|
||||||
|
ok(hres == S_OK, "put_listStyleType failed: %08x\n", hres);
|
||||||
|
SysFreeString(str);
|
||||||
|
|
||||||
|
str = NULL;
|
||||||
|
hres = IHTMLStyle_get_listStyleType(style, &str);
|
||||||
|
ok(hres == S_OK, "get_listStyleType failed: %08x\n", hres);
|
||||||
|
ok(!strcmp_wa(str, "square"), "listStyleType = %s\n", wine_dbgstr_w(str));
|
||||||
|
SysFreeString(str);
|
||||||
|
|
||||||
hres = IHTMLStyle_QueryInterface(style, &IID_IHTMLStyle2, (void**)&style2);
|
hres = IHTMLStyle_QueryInterface(style, &IID_IHTMLStyle2, (void**)&style2);
|
||||||
ok(hres == S_OK, "Could not get IHTMLStyle2 iface: %08x\n", hres);
|
ok(hres == S_OK, "Could not get IHTMLStyle2 iface: %08x\n", hres);
|
||||||
if(SUCCEEDED(hres)) {
|
if(SUCCEEDED(hres)) {
|
||||||
|
@ -2064,6 +2128,14 @@ static void test_body_style(IHTMLStyle *style)
|
||||||
test_style4(style4);
|
test_style4(style4);
|
||||||
IHTMLStyle4_Release(style4);
|
IHTMLStyle4_Release(style4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hres = IHTMLStyle_QueryInterface(style, &IID_IHTMLStyle6, (void**)&style6);
|
||||||
|
if(SUCCEEDED(hres)) {
|
||||||
|
test_style6(style6);
|
||||||
|
IHTMLStyle6_Release(style6);
|
||||||
|
}else {
|
||||||
|
win_skip("IHTMLStyle6 not available\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#define test_style_filter(a,b) _test_style_filter(__LINE__,a,b)
|
#define test_style_filter(a,b) _test_style_filter(__LINE__,a,b)
|
||||||
|
@ -2647,9 +2719,9 @@ static void run_test(const char *str, style_test_t test)
|
||||||
|
|
||||||
do_advise((IUnknown*)doc, &IID_IPropertyNotifySink, (IUnknown*)&PropertyNotifySink);
|
do_advise((IUnknown*)doc, &IID_IPropertyNotifySink, (IUnknown*)&PropertyNotifySink);
|
||||||
|
|
||||||
while(!doc_complete && GetMessage(&msg, NULL, 0, 0)) {
|
while(!doc_complete && GetMessageW(&msg, NULL, 0, 0)) {
|
||||||
TranslateMessage(&msg);
|
TranslateMessage(&msg);
|
||||||
DispatchMessage(&msg);
|
DispatchMessageW(&msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
test(doc);
|
test(doc);
|
||||||
|
|
|
@ -16,6 +16,8 @@
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#pragma makedep typelib
|
||||||
|
|
||||||
import "oaidl.idl";
|
import "oaidl.idl";
|
||||||
|
|
||||||
[
|
[
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue