diff --git a/dlls/mshtml/tests/htmldoc.c b/dlls/mshtml/tests/htmldoc.c
index 619d36eb7c7..90b0295dc64 100644
--- a/dlls/mshtml/tests/htmldoc.c
+++ b/dlls/mshtml/tests/htmldoc.c
@@ -72,10 +72,12 @@ DEFINE_EXPECT(SetActiveObject);
DEFINE_EXPECT(GetWindow);
DEFINE_EXPECT(CanInPlaceActivate);
DEFINE_EXPECT(OnInPlaceActivate);
+DEFINE_EXPECT(OnInPlaceActivateEx);
DEFINE_EXPECT(OnUIActivate);
DEFINE_EXPECT(GetWindowContext);
DEFINE_EXPECT(OnUIDeactivate);
DEFINE_EXPECT(OnInPlaceDeactivate);
+DEFINE_EXPECT(OnInPlaceDeactivateEx);
DEFINE_EXPECT(GetContainer);
DEFINE_EXPECT(ShowUI);
DEFINE_EXPECT(ActivateMe);
@@ -122,7 +124,7 @@ DEFINE_EXPECT(UnlockRequest);
static IUnknown *doc_unk;
static BOOL expect_LockContainer_fLock;
-static BOOL expect_SetActiveObject_active;
+static BOOL expect_SetActiveObject_active, ipsex;
static BOOL set_clientsite = FALSE, container_locked = FALSE;
static BOOL readystate_set_loading = FALSE, load_from_stream;
static BOOL editmode = FALSE;
@@ -1180,22 +1182,22 @@ static const IOleInPlaceFrameVtbl InPlaceFrameVtbl = {
static IOleInPlaceFrame InPlaceFrame = { &InPlaceFrameVtbl };
-static HRESULT WINAPI InPlaceSite_QueryInterface(IOleInPlaceSite *iface, REFIID riid, void **ppv)
+static HRESULT WINAPI InPlaceSite_QueryInterface(IOleInPlaceSiteEx *iface, REFIID riid, void **ppv)
{
return QueryInterface(riid, ppv);
}
-static ULONG WINAPI InPlaceSite_AddRef(IOleInPlaceSite *iface)
+static ULONG WINAPI InPlaceSite_AddRef(IOleInPlaceSiteEx *iface)
{
return 2;
}
-static ULONG WINAPI InPlaceSite_Release(IOleInPlaceSite *iface)
+static ULONG WINAPI InPlaceSite_Release(IOleInPlaceSiteEx *iface)
{
return 1;
}
-static HRESULT WINAPI InPlaceSite_GetWindow(IOleInPlaceSite *iface, HWND *phwnd)
+static HRESULT WINAPI InPlaceSite_GetWindow(IOleInPlaceSiteEx *iface, HWND *phwnd)
{
CHECK_EXPECT(GetWindow);
ok(phwnd != NULL, "phwnd = NULL\n");
@@ -1203,31 +1205,31 @@ static HRESULT WINAPI InPlaceSite_GetWindow(IOleInPlaceSite *iface, HWND *phwnd)
return S_OK;
}
-static HRESULT WINAPI InPlaceSite_ContextSensitiveHelp(IOleInPlaceSite *iface, BOOL fEnterMode)
+static HRESULT WINAPI InPlaceSite_ContextSensitiveHelp(IOleInPlaceSiteEx *iface, BOOL fEnterMode)
{
ok(0, "unexpected call\n");
return E_NOTIMPL;
}
-static HRESULT WINAPI InPlaceSite_CanInPlaceActivate(IOleInPlaceSite *iface)
+static HRESULT WINAPI InPlaceSite_CanInPlaceActivate(IOleInPlaceSiteEx *iface)
{
CHECK_EXPECT(CanInPlaceActivate);
return S_OK;
}
-static HRESULT WINAPI InPlaceSite_OnInPlaceActivate(IOleInPlaceSite *iface)
+static HRESULT WINAPI InPlaceSite_OnInPlaceActivate(IOleInPlaceSiteEx *iface)
{
CHECK_EXPECT(OnInPlaceActivate);
return S_OK;
}
-static HRESULT WINAPI InPlaceSite_OnUIActivate(IOleInPlaceSite *iface)
+static HRESULT WINAPI InPlaceSite_OnUIActivate(IOleInPlaceSiteEx *iface)
{
CHECK_EXPECT(OnUIActivate);
return S_OK;
}
-static HRESULT WINAPI InPlaceSite_GetWindowContext(IOleInPlaceSite *iface,
+static HRESULT WINAPI InPlaceSite_GetWindowContext(IOleInPlaceSiteEx *iface,
IOleInPlaceFrame **ppFrame, IOleInPlaceUIWindow **ppDoc, LPRECT lprcPosRect,
LPRECT lprcClipRect, LPOLEINPLACEFRAMEINFO lpFrameInfo)
{
@@ -1259,44 +1261,70 @@ static HRESULT WINAPI InPlaceSite_GetWindowContext(IOleInPlaceSite *iface,
return S_OK;
}
-static HRESULT WINAPI InPlaceSite_Scroll(IOleInPlaceSite *iface, SIZE scrollExtant)
+static HRESULT WINAPI InPlaceSite_Scroll(IOleInPlaceSiteEx *iface, SIZE scrollExtant)
{
ok(0, "unexpected call\n");
return E_NOTIMPL;
}
-static HRESULT WINAPI InPlaceSite_OnUIDeactivate(IOleInPlaceSite *iface, BOOL fUndoable)
+static HRESULT WINAPI InPlaceSite_OnUIDeactivate(IOleInPlaceSiteEx *iface, BOOL fUndoable)
{
CHECK_EXPECT(OnUIDeactivate);
ok(!fUndoable, "fUndoable = TRUE\n");
return S_OK;
}
-static HRESULT WINAPI InPlaceSite_OnInPlaceDeactivate(IOleInPlaceSite *iface)
+static HRESULT WINAPI InPlaceSite_OnInPlaceDeactivate(IOleInPlaceSiteEx *iface)
{
CHECK_EXPECT(OnInPlaceDeactivate);
return S_OK;
}
-static HRESULT WINAPI InPlaceSite_DiscardUndoState(IOleInPlaceSite *iface)
+static HRESULT WINAPI InPlaceSite_DiscardUndoState(IOleInPlaceSiteEx *iface)
{
ok(0, "unexpected call\n");
return E_NOTIMPL;
}
-static HRESULT WINAPI InPlaceSite_DeactivateAndUndo(IOleInPlaceSite *iface)
+static HRESULT WINAPI InPlaceSite_DeactivateAndUndo(IOleInPlaceSiteEx *iface)
{
ok(0, "unexpected call\n");
return E_NOTIMPL;
}
-static HRESULT WINAPI InPlaceSite_OnPosRectChange(IOleInPlaceSite *iface, LPCRECT lprcPosRect)
+static HRESULT WINAPI InPlaceSite_OnPosRectChange(IOleInPlaceSiteEx *iface, LPCRECT lprcPosRect)
{
ok(0, "unexpected call\n");
return E_NOTIMPL;
}
-static const IOleInPlaceSiteVtbl InPlaceSiteVtbl = {
+static HRESULT WINAPI InPlaceSiteEx_OnInPlaceActivateEx(IOleInPlaceSiteEx *iface, BOOL *pfNoRedraw, DWORD dwFlags)
+{
+ CHECK_EXPECT(OnInPlaceActivateEx);
+
+ ok(pfNoRedraw != NULL, "pfNoRedraw == NULL\n");
+ ok(!*pfNoRedraw, "*pfNoRedraw == TRUE\n");
+ ok(dwFlags == 0, "dwFlags = %08x\n", dwFlags);
+
+ return S_OK;
+}
+
+static HRESULT WINAPI InPlaceSiteEx_OnInPlaceDeactivateEx(IOleInPlaceSiteEx *iface, BOOL fNoRedraw)
+{
+ CHECK_EXPECT(OnInPlaceDeactivateEx);
+
+ ok(fNoRedraw, "fNoRedraw == FALSE\n");
+
+ return S_OK;
+}
+
+static HRESULT WINAPI InPlaceSiteEx_RequestUIActivate(IOleInPlaceSiteEx *iface)
+{
+ ok(0, "unexpected call\n");
+ return E_NOTIMPL;
+}
+
+static const IOleInPlaceSiteExVtbl InPlaceSiteVtbl = {
InPlaceSite_QueryInterface,
InPlaceSite_AddRef,
InPlaceSite_Release,
@@ -1311,10 +1339,13 @@ static const IOleInPlaceSiteVtbl InPlaceSiteVtbl = {
InPlaceSite_OnInPlaceDeactivate,
InPlaceSite_DiscardUndoState,
InPlaceSite_DeactivateAndUndo,
- InPlaceSite_OnPosRectChange
+ InPlaceSite_OnPosRectChange,
+ InPlaceSiteEx_OnInPlaceActivateEx,
+ InPlaceSiteEx_OnInPlaceDeactivateEx,
+ InPlaceSiteEx_RequestUIActivate
};
-static IOleInPlaceSite InPlaceSite = { &InPlaceSiteVtbl };
+static IOleInPlaceSiteEx InPlaceSiteEx = { &InPlaceSiteVtbl };
static HRESULT WINAPI ClientSite_QueryInterface(IOleClientSite *iface, REFIID riid, void **ppv)
{
@@ -1412,7 +1443,7 @@ static HRESULT WINAPI DocumentSite_ActivateMe(IOleDocumentSite *iface, IOleDocum
ok(hres == S_OK, "could not get IOleDocument: %08x\n", hres);
if(SUCCEEDED(hres)) {
- hres = IOleDocument_CreateView(document, &InPlaceSite, NULL, 0, &view);
+ hres = IOleDocument_CreateView(document, (IOleInPlaceSite*)&InPlaceSiteEx, NULL, 0, &view);
ok(hres == S_OK, "CreateView failed: %08x\n", hres);
if(SUCCEEDED(hres)) {
@@ -1423,16 +1454,16 @@ static HRESULT WINAPI DocumentSite_ActivateMe(IOleDocumentSite *iface, IOleDocum
hres = IOleDocumentView_GetInPlaceSite(view, &inplacesite);
ok(hres == S_OK, "GetInPlaceSite failed: %08x\n", hres);
- ok(inplacesite == &InPlaceSite, "inplacesite=%p, expected %p\n",
- inplacesite, &InPlaceSite);
+ ok(inplacesite == (IOleInPlaceSite*)&InPlaceSiteEx, "inplacesite=%p, expected %p\n",
+ inplacesite, &InPlaceSiteEx);
- hres = IOleDocumentView_SetInPlaceSite(view, &InPlaceSite);
+ hres = IOleDocumentView_SetInPlaceSite(view, (IOleInPlaceSite*)&InPlaceSiteEx);
ok(hres == S_OK, "SetInPlaceSite failed: %08x\n", hres);
hres = IOleDocumentView_GetInPlaceSite(view, &inplacesite);
ok(hres == S_OK, "GetInPlaceSite failed: %08x\n", hres);
- ok(inplacesite == &InPlaceSite, "inplacesite=%p, expected %p\n",
- inplacesite, &InPlaceSite);
+ ok(inplacesite == (IOleInPlaceSite*)&InPlaceSiteEx, "inplacesite=%p, expected %p\n",
+ inplacesite, &InPlaceSiteEx);
hres = IOleDocumentView_QueryInterface(view, &IID_IOleInPlaceActiveObject, (void**)&activeobj);
ok(hres == S_OK, "Could not get IOleInPlaceActiveObject: %08x\n", hres);
@@ -1447,7 +1478,10 @@ static HRESULT WINAPI DocumentSite_ActivateMe(IOleDocumentSite *iface, IOleDocum
SET_EXPECT(CanInPlaceActivate);
SET_EXPECT(GetWindowContext);
SET_EXPECT(GetWindow);
- SET_EXPECT(OnInPlaceActivate);
+ if(ipsex)
+ SET_EXPECT(OnInPlaceActivateEx);
+ else
+ SET_EXPECT(OnInPlaceActivate);
SET_EXPECT(SetStatusText);
SET_EXPECT(Exec_SETPROGRESSMAX);
SET_EXPECT(Exec_SETPROGRESSPOS);
@@ -1468,7 +1502,10 @@ static HRESULT WINAPI DocumentSite_ActivateMe(IOleDocumentSite *iface, IOleDocum
CHECK_CALLED(CanInPlaceActivate);
CHECK_CALLED(GetWindowContext);
CHECK_CALLED(GetWindow);
- CHECK_CALLED(OnInPlaceActivate);
+ if(ipsex)
+ CHECK_CALLED(OnInPlaceActivateEx);
+ else
+ CHECK_CALLED(OnInPlaceActivate);
CHECK_CALLED(SetStatusText);
CHECK_CALLED(Exec_SETPROGRESSMAX);
CHECK_CALLED(Exec_SETPROGRESSPOS);
@@ -1504,7 +1541,10 @@ static HRESULT WINAPI DocumentSite_ActivateMe(IOleDocumentSite *iface, IOleDocum
SET_EXPECT(CanInPlaceActivate);
SET_EXPECT(GetWindowContext);
SET_EXPECT(GetWindow);
- SET_EXPECT(OnInPlaceActivate);
+ if(ipsex)
+ SET_EXPECT(OnInPlaceActivateEx);
+ else
+ SET_EXPECT(OnInPlaceActivate);
SET_EXPECT(SetStatusText);
SET_EXPECT(Exec_SETPROGRESSMAX);
SET_EXPECT(Exec_SETPROGRESSPOS);
@@ -1517,7 +1557,10 @@ static HRESULT WINAPI DocumentSite_ActivateMe(IOleDocumentSite *iface, IOleDocum
CHECK_CALLED(CanInPlaceActivate);
CHECK_CALLED(GetWindowContext);
CHECK_CALLED(GetWindow);
- CHECK_CALLED(OnInPlaceActivate);
+ if(ipsex)
+ CHECK_CALLED(OnInPlaceActivateEx);
+ else
+ CHECK_CALLED(OnInPlaceActivate);
CHECK_CALLED(SetStatusText);
CHECK_CALLED(Exec_SETPROGRESSMAX);
CHECK_CALLED(Exec_SETPROGRESSPOS);
@@ -2068,7 +2111,7 @@ static HRESULT QueryInterface(REFIID riid, void **ppv)
else if(IsEqualGUID(&IID_IOleContainer, riid))
*ppv = &OleContainer;
else if(IsEqualGUID(&IID_IOleWindow, riid) || IsEqualGUID(&IID_IOleInPlaceSite, riid))
- *ppv = &InPlaceSite;
+ *ppv = &InPlaceSiteEx;
else if(IsEqualGUID(&IID_IOleInPlaceUIWindow, riid) || IsEqualGUID(&IID_IOleInPlaceFrame, riid))
*ppv = &InPlaceFrame;
else if(IsEqualGUID(&IID_IOleCommandTarget , riid))
@@ -2077,9 +2120,10 @@ static HRESULT QueryInterface(REFIID riid, void **ppv)
*ppv = &Dispatch;
else if(IsEqualGUID(&IID_IServiceProvider, riid))
*ppv = &ServiceProvider;
+ else if(ipsex && IsEqualGUID(&IID_IOleInPlaceSiteEx, riid))
+ *ppv = &InPlaceSiteEx;
/* TODO:
- * IOleInPlaceSiteEx
* {D48A6EC6-6A4A-11CF-94A7-444553540000}
* {7BB0B520-B1A7-11D2-BB23-00C04F79ABCD}
* {000670BA-0000-0000-C000-000000000046}
@@ -3045,10 +3089,20 @@ static void test_InPlaceDeactivate(IUnknown *unk, BOOL expect_call)
if(FAILED(hres))
return;
- if(expect_call) SET_EXPECT(OnInPlaceDeactivate);
+ if(expect_call) {
+ if(ipsex)
+ SET_EXPECT(OnInPlaceDeactivateEx);
+ else
+ SET_EXPECT(OnInPlaceDeactivate);
+ }
hres = IOleInPlaceObjectWindowless_InPlaceDeactivate(windowlessobj);
ok(hres == S_OK, "InPlaceDeactivate failed: %08x\n", hres);
- if(expect_call) CHECK_CALLED(OnInPlaceDeactivate);
+ if(expect_call) {
+ if(ipsex)
+ CHECK_CALLED(OnInPlaceDeactivateEx);
+ else
+ CHECK_CALLED(OnInPlaceDeactivate);
+ }
IOleInPlaceObjectWindowless_Release(windowlessobj);
}
@@ -3245,6 +3299,7 @@ static void init_test(enum load_state_t ls) {
editmode = FALSE;
stream_read = 0;
protocol_read = 0;
+ ipsex = FALSE;
}
static void test_HTMLDocument(enum load_state_t ls)
@@ -3343,6 +3398,7 @@ static void test_HTMLDocument_hlink(void)
trace("Testing HTMLDocument (hlink)...\n");
init_test(LD_DOLOAD);
+ ipsex = TRUE;
hres = create_document(&unk);
if(FAILED(hres))