mshtml: Added IHTMLWindow2::close tests.
This commit is contained in:
parent
e13cf82e61
commit
9f62d217c3
|
@ -43,6 +43,7 @@
|
||||||
#include "shobjidl.h"
|
#include "shobjidl.h"
|
||||||
#include "htiface.h"
|
#include "htiface.h"
|
||||||
#include "tlogstg.h"
|
#include "tlogstg.h"
|
||||||
|
#include "exdispid.h"
|
||||||
#include "mshtml_test.h"
|
#include "mshtml_test.h"
|
||||||
|
|
||||||
DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0);
|
DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0);
|
||||||
|
@ -194,6 +195,10 @@ DEFINE_EXPECT(ActiveElementChanged);
|
||||||
DEFINE_EXPECT(IsErrorUrl);
|
DEFINE_EXPECT(IsErrorUrl);
|
||||||
DEFINE_EXPECT(get_LocationURL);
|
DEFINE_EXPECT(get_LocationURL);
|
||||||
DEFINE_EXPECT(CountEntries);
|
DEFINE_EXPECT(CountEntries);
|
||||||
|
DEFINE_EXPECT(FindConnectionPoint);
|
||||||
|
DEFINE_EXPECT(EnumConnections);
|
||||||
|
DEFINE_EXPECT(EnumConnections_Next);
|
||||||
|
DEFINE_EXPECT(WindowClosing);
|
||||||
|
|
||||||
static IUnknown *doc_unk;
|
static IUnknown *doc_unk;
|
||||||
static IMoniker *doc_mon;
|
static IMoniker *doc_mon;
|
||||||
|
@ -3940,6 +3945,244 @@ static HRESULT browserservice_qi(REFIID riid, void **ppv)
|
||||||
return E_NOINTERFACE;
|
return E_NOINTERFACE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI WBE2Sink_QueryInterface(IDispatch *iface, REFIID riid, void **ppv)
|
||||||
|
{
|
||||||
|
if(IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_IDispatch, riid)) {
|
||||||
|
*ppv = iface;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
*ppv = NULL;
|
||||||
|
ok(0, "unexpected riid: %s\n", debugstr_guid(riid));
|
||||||
|
return E_NOINTERFACE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI WBE2Sink_Invoke(IDispatch *iface, DISPID dispIdMember, REFIID riid,
|
||||||
|
LCID lcid, WORD wFlags, DISPPARAMS *pdp, VARIANT *pVarResult,
|
||||||
|
EXCEPINFO *pExcepInfo, UINT *puArgErr)
|
||||||
|
{
|
||||||
|
ok(IsEqualGUID(&IID_NULL, riid), "riid != IID_NULL\n");
|
||||||
|
ok(pdp != NULL, "pDispParams == NULL\n");
|
||||||
|
ok(pExcepInfo == NULL, "pExcepInfo=%p, expected NULL\n", pExcepInfo);
|
||||||
|
ok(puArgErr == NULL, "puArgErr != NULL\n");
|
||||||
|
ok(pVarResult == NULL, "pVarResult != NULL\n");
|
||||||
|
ok(wFlags == DISPATCH_METHOD, "wFlags=%08x, expected DISPATCH_METHOD\n", wFlags);
|
||||||
|
ok(!pdp->cNamedArgs, "pdp->cNamedArgs = %d\n", pdp->cNamedArgs);
|
||||||
|
ok(!pdp->rgdispidNamedArgs, "rgdispidNamedArgs = %p\n", pdp->rgdispidNamedArgs);
|
||||||
|
|
||||||
|
switch(dispIdMember) {
|
||||||
|
case DISPID_WINDOWCLOSING: {
|
||||||
|
VARIANT *is_child = pdp->rgvarg+1, *cancel = pdp->rgvarg;
|
||||||
|
|
||||||
|
CHECK_EXPECT(WindowClosing);
|
||||||
|
|
||||||
|
ok(pdp->cArgs == 2, "pdp->cArgs = %d\n", pdp->cArgs);
|
||||||
|
ok(V_VT(is_child) == VT_BOOL, "V_VT(is_child) = %d\n", V_VT(is_child));
|
||||||
|
ok(!V_BOOL(is_child), "V_BOOL(is_child) = %x\n", V_BOOL(is_child));
|
||||||
|
ok(V_VT(cancel) == (VT_BYREF|VT_BOOL), "V_VT(cancel) = %d\n", V_VT(cancel));
|
||||||
|
ok(!*V_BOOLREF(cancel), "*V_BOOLREF(cancel) = %x\n", *V_BOOLREF(cancel));
|
||||||
|
|
||||||
|
*V_BOOLREF(cancel) = VARIANT_TRUE;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
ok(0, "unexpected id %d\n", dispIdMember);
|
||||||
|
}
|
||||||
|
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const IDispatchVtbl WBE2SinkVtbl = {
|
||||||
|
WBE2Sink_QueryInterface,
|
||||||
|
Dispatch_AddRef,
|
||||||
|
Dispatch_Release,
|
||||||
|
Dispatch_GetTypeInfoCount,
|
||||||
|
Dispatch_GetTypeInfo,
|
||||||
|
Dispatch_GetIDsOfNames,
|
||||||
|
WBE2Sink_Invoke
|
||||||
|
};
|
||||||
|
|
||||||
|
static IDispatch WBE2Sink = { &WBE2SinkVtbl };
|
||||||
|
|
||||||
|
static HRESULT WINAPI EnumConnections_QueryInterface(IEnumConnections *iface, REFIID riid, LPVOID *ppv)
|
||||||
|
{
|
||||||
|
ok(0, "unexpected call\n");
|
||||||
|
return E_NOINTERFACE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI EnumConnections_AddRef(IEnumConnections *iface)
|
||||||
|
{
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI EnumConnections_Release(IEnumConnections *iface)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOL next_called;
|
||||||
|
|
||||||
|
static HRESULT WINAPI EnumConnections_Next(IEnumConnections *iface, ULONG cConnections, CONNECTDATA *rgcd, ULONG *pcFetched)
|
||||||
|
{
|
||||||
|
CHECK_EXPECT2(EnumConnections_Next);
|
||||||
|
|
||||||
|
ok(cConnections == 1, "cConnections = %d\n", cConnections);
|
||||||
|
ok(pcFetched != NULL, "pcFetched == NULL\n");
|
||||||
|
|
||||||
|
if(next_called) {
|
||||||
|
*pcFetched = 0;
|
||||||
|
return S_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
next_called = TRUE;
|
||||||
|
rgcd->pUnk = (IUnknown*)&WBE2Sink;
|
||||||
|
rgcd->dwCookie = 0xdeadbeef;
|
||||||
|
*pcFetched = 1;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI EnumConnections_Skip(IEnumConnections *iface, ULONG ulConnections)
|
||||||
|
{
|
||||||
|
ok(0, "unexpected call\n");
|
||||||
|
return E_NOINTERFACE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI EnumConnections_Reset(IEnumConnections *iface)
|
||||||
|
{
|
||||||
|
ok(0, "unexpected call\n");
|
||||||
|
return E_NOINTERFACE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI EnumConnections_Clone(IEnumConnections *iface, IEnumConnections **ppEnum)
|
||||||
|
{
|
||||||
|
ok(0, "unexpected call\n");
|
||||||
|
return E_NOINTERFACE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const IEnumConnectionsVtbl EnumConnectionsVtbl = {
|
||||||
|
EnumConnections_QueryInterface,
|
||||||
|
EnumConnections_AddRef,
|
||||||
|
EnumConnections_Release,
|
||||||
|
EnumConnections_Next,
|
||||||
|
EnumConnections_Skip,
|
||||||
|
EnumConnections_Reset,
|
||||||
|
EnumConnections_Clone
|
||||||
|
};
|
||||||
|
|
||||||
|
static IEnumConnections EnumConnections = { &EnumConnectionsVtbl };
|
||||||
|
|
||||||
|
static HRESULT WINAPI ConnectionPoint_QueryInterface(IConnectionPoint *iface, REFIID riid, LPVOID *ppv)
|
||||||
|
{
|
||||||
|
ok(0, "unexpected call\n");
|
||||||
|
return E_NOINTERFACE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI ConnectionPoint_AddRef(IConnectionPoint *iface)
|
||||||
|
{
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI ConnectionPoint_Release(IConnectionPoint *iface)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI ConnectionPoint_GetConnectionInterface(IConnectionPoint *iface, IID *pIID)
|
||||||
|
{
|
||||||
|
ok(0, "unexpected call\n");
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI ConnectionPoint_GetConnectionPointContainer(IConnectionPoint *iface,
|
||||||
|
IConnectionPointContainer **ppCPC)
|
||||||
|
{
|
||||||
|
ok(0, "unexpected call\n");
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI ConnectionPoint_Advise(IConnectionPoint *iface, IUnknown *pUnkSink, DWORD *pdwCookie)
|
||||||
|
{
|
||||||
|
ok(0, "unexpected call\n");
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI ConnectionPoint_Unadvise(IConnectionPoint *iface, DWORD dwCookie)
|
||||||
|
{
|
||||||
|
ok(0, "unexpected call\n");
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI ConnectionPoint_EnumConnections(IConnectionPoint *iface, IEnumConnections **ppEnum)
|
||||||
|
{
|
||||||
|
CHECK_EXPECT(EnumConnections);
|
||||||
|
|
||||||
|
*ppEnum = &EnumConnections;
|
||||||
|
next_called = FALSE;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const IConnectionPointVtbl ConnectionPointVtbl =
|
||||||
|
{
|
||||||
|
ConnectionPoint_QueryInterface,
|
||||||
|
ConnectionPoint_AddRef,
|
||||||
|
ConnectionPoint_Release,
|
||||||
|
ConnectionPoint_GetConnectionInterface,
|
||||||
|
ConnectionPoint_GetConnectionPointContainer,
|
||||||
|
ConnectionPoint_Advise,
|
||||||
|
ConnectionPoint_Unadvise,
|
||||||
|
ConnectionPoint_EnumConnections
|
||||||
|
};
|
||||||
|
|
||||||
|
static IConnectionPoint ConnectionPointWBE2 = { &ConnectionPointVtbl };
|
||||||
|
|
||||||
|
static HRESULT WINAPI ConnectionPointContainer_QueryInterface(IConnectionPointContainer *iface,
|
||||||
|
REFIID riid, void **ppv)
|
||||||
|
{
|
||||||
|
ok(0, "unexpected call\n");
|
||||||
|
return E_NOINTERFACE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI ConnectionPointContainer_AddRef(IConnectionPointContainer *iface)
|
||||||
|
{
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI ConnectionPointContainer_Release(IConnectionPointContainer *iface)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI ConnectionPointContainer_EnumConnectionPoints(IConnectionPointContainer *iface,
|
||||||
|
IEnumConnectionPoints **ppEnum)
|
||||||
|
{
|
||||||
|
ok(0, "unexpected call\n");
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI ConnectionPointContainer_FindConnectionPoint(IConnectionPointContainer *iface,
|
||||||
|
REFIID riid, IConnectionPoint **ppCP)
|
||||||
|
{
|
||||||
|
CHECK_EXPECT(FindConnectionPoint);
|
||||||
|
|
||||||
|
if(IsEqualGUID(riid, &DIID_DWebBrowserEvents2)) {
|
||||||
|
*ppCP = &ConnectionPointWBE2;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
ok(0, "unexpected riid %s\n", debugstr_guid(riid));
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const IConnectionPointContainerVtbl ConnectionPointContainerVtbl = {
|
||||||
|
ConnectionPointContainer_QueryInterface,
|
||||||
|
ConnectionPointContainer_AddRef,
|
||||||
|
ConnectionPointContainer_Release,
|
||||||
|
ConnectionPointContainer_EnumConnectionPoints,
|
||||||
|
ConnectionPointContainer_FindConnectionPoint
|
||||||
|
};
|
||||||
|
|
||||||
|
static IConnectionPointContainer ConnectionPointContainer = { &ConnectionPointContainerVtbl };
|
||||||
|
|
||||||
static HRESULT WINAPI WebBrowser_QueryInterface(IWebBrowser2 *iface, REFIID riid, void **ppv)
|
static HRESULT WINAPI WebBrowser_QueryInterface(IWebBrowser2 *iface, REFIID riid, void **ppv)
|
||||||
{
|
{
|
||||||
*ppv = NULL;
|
*ppv = NULL;
|
||||||
|
@ -3953,6 +4196,11 @@ static HRESULT WINAPI WebBrowser_QueryInterface(IWebBrowser2 *iface, REFIID riid
|
||||||
if(IsEqualGUID(riid, &IID_IOleObject))
|
if(IsEqualGUID(riid, &IID_IOleObject))
|
||||||
return E_NOINTERFACE; /* TODO */
|
return E_NOINTERFACE; /* TODO */
|
||||||
|
|
||||||
|
if(IsEqualGUID(riid, &IID_IConnectionPointContainer)) {
|
||||||
|
*ppv = &ConnectionPointContainer;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
ok(0, "unexpected call %s\n", debugstr_guid(riid));
|
ok(0, "unexpected call %s\n", debugstr_guid(riid));
|
||||||
return E_NOINTERFACE;
|
return E_NOINTERFACE;
|
||||||
}
|
}
|
||||||
|
@ -5580,6 +5828,30 @@ static void test_open_window(IHTMLDocument2 *doc, BOOL do_block)
|
||||||
IHTMLWindow2_Release(window);
|
IHTMLWindow2_Release(window);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_window_close(IHTMLDocument2 *doc)
|
||||||
|
{
|
||||||
|
IHTMLWindow2 *window;
|
||||||
|
HRESULT hres;
|
||||||
|
|
||||||
|
hres = IHTMLDocument2_get_parentWindow(doc, &window);
|
||||||
|
ok(hres == S_OK, "get_parentWindow failed: %08x\n", hres);
|
||||||
|
|
||||||
|
SET_EXPECT(FindConnectionPoint);
|
||||||
|
SET_EXPECT(EnumConnections);
|
||||||
|
SET_EXPECT(EnumConnections_Next);
|
||||||
|
SET_EXPECT(WindowClosing);
|
||||||
|
|
||||||
|
hres = IHTMLWindow2_close(window);
|
||||||
|
ok(hres == S_OK, "close failed: %08x\n", hres);
|
||||||
|
|
||||||
|
CHECK_CALLED(FindConnectionPoint);
|
||||||
|
CHECK_CALLED(EnumConnections);
|
||||||
|
CHECK_CALLED(EnumConnections_Next);
|
||||||
|
CHECK_CALLED(WindowClosing);
|
||||||
|
|
||||||
|
IHTMLWindow2_Release(window);
|
||||||
|
}
|
||||||
|
|
||||||
static void test_elem_from_point(IHTMLDocument2 *doc)
|
static void test_elem_from_point(IHTMLDocument2 *doc)
|
||||||
{
|
{
|
||||||
IHTMLElement *elem;
|
IHTMLElement *elem;
|
||||||
|
@ -7014,6 +7286,8 @@ static void test_HTMLDocument_http(BOOL with_wbapp)
|
||||||
test_open_window(doc, TRUE);
|
test_open_window(doc, TRUE);
|
||||||
if(!support_wbapp) /* FIXME */
|
if(!support_wbapp) /* FIXME */
|
||||||
test_open_window(doc, FALSE);
|
test_open_window(doc, FALSE);
|
||||||
|
if(support_wbapp)
|
||||||
|
test_window_close(doc);
|
||||||
|
|
||||||
test_InPlaceDeactivate(doc, TRUE);
|
test_InPlaceDeactivate(doc, TRUE);
|
||||||
test_Close(doc, FALSE);
|
test_Close(doc, FALSE);
|
||||||
|
|
Loading…
Reference in New Issue