From: Dmitry Timoshkov Subject: [PATCH] ieframe/tests: Add some tests for Shell Embedding resizing. Message-Id: <20200622173448.012d613f01b261178d069e93@baikal.ru> Date: Mon, 22 Jun 2020 17:34:48 +0800 Signed-off-by: Dmitry Timoshkov --- dlls/ieframe/tests/webbrowser.c | 84 ++++++++++++++++++++++++++++++--- 1 file changed, 78 insertions(+), 6 deletions(-) diff --git a/dlls/ieframe/tests/webbrowser.c b/dlls/ieframe/tests/webbrowser.c index 95d5fc4988..9d8a4fc63d 100644 --- a/dlls/ieframe/tests/webbrowser.c +++ b/dlls/ieframe/tests/webbrowser.c @@ -1832,7 +1832,9 @@ static HWND create_container_window(void) static void test_DoVerb(IWebBrowser2 *unk) { IOleObject *oleobj; - RECT rect = {0,0,1000,1000}; + IOleWindow *olewin; + HWND hwnd; + RECT rect; HRESULT hres; hres = IWebBrowser2_QueryInterface(unk, &IID_IOleObject, (void**)&oleobj); @@ -1840,6 +1842,12 @@ static void test_DoVerb(IWebBrowser2 *unk) if(FAILED(hres)) return; + hres = IOleObject_QueryInterface(oleobj, &IID_IOleWindow, (void**)&olewin); + ok(hres == S_OK, "Could not get IOleInPlaceSite: %08x\n", hres); + + hres = IOleWindow_GetWindow(olewin, &hwnd); + ok(hres == S_OK, "GetWindow failed: %08x\n", hres); + SET_EXPECT(CanInPlaceActivate); SET_EXPECT(Site_GetWindow); SET_EXPECT(OnInPlaceActivate); @@ -1853,10 +1861,16 @@ static void test_DoVerb(IWebBrowser2 *unk) SET_EXPECT(SetMenu); SET_EXPECT(OnFocus_TRUE); + SetRect(&rect, 0, 0, 500, 500); hres = IOleObject_DoVerb(oleobj, OLEIVERB_SHOW, NULL, &ClientSite, 0, (HWND)0xdeadbeef, &rect); ok(hres == S_OK, "DoVerb failed: %08x\n", hres); + SetRectEmpty(&rect); + GetWindowRect(hwnd, &rect); + ok(rect.right - rect.left == 1000 && rect.bottom - rect.top == 900, "window size = {%d %d}\n", + rect.right - rect.left, rect.bottom - rect.top); + CHECK_CALLED(CanInPlaceActivate); CHECK_CALLED(Site_GetWindow); CHECK_CALLED(OnInPlaceActivate); @@ -1870,10 +1884,27 @@ static void test_DoVerb(IWebBrowser2 *unk) CHECK_CALLED(SetMenu); CHECK_CALLED(OnFocus_TRUE); + SetRect(&rect, 0, 0, 600, 600); hres = IOleObject_DoVerb(oleobj, OLEIVERB_SHOW, NULL, &ClientSite, 0, (HWND)0xdeadbeef, &rect); ok(hres == S_OK, "DoVerb failed: %08x\n", hres); + SetRectEmpty(&rect); + GetWindowRect(hwnd, &rect); + ok(rect.right - rect.left == 1000 && rect.bottom - rect.top == 900, "window size = {%d %d}\n", + rect.right - rect.left, rect.bottom - rect.top); + + SetRect(&rect, 0, 0, 700, 700); + hres = IOleObject_DoVerb(oleobj, OLEIVERB_UIACTIVATE, NULL, &ClientSite, + 0, (HWND)0xdeadbeef, &rect); + ok(hres == S_OK, "DoVerb failed: %08x\n", hres); + + SetRectEmpty(&rect); + GetWindowRect(hwnd, &rect); + ok(rect.right - rect.left == 1000 && rect.bottom - rect.top == 900, "window size = {%d %d}\n", + rect.right - rect.left, rect.bottom - rect.top); + + IOleWindow_Release(olewin); IOleObject_Release(oleobj); } @@ -2649,14 +2680,18 @@ static void test_GetControlInfo(IWebBrowser2 *unk) IOleControl_Release(control); } -static void test_Extent(IWebBrowser2 *unk) +static void test_Extent(IWebBrowser2 *unk, BOOL activated) { IOleObject *oleobj; + IOleWindow *olewin; SIZE size, expected; + RECT rc; HRESULT hres; DWORD dpi_x; DWORD dpi_y; HDC hdc; + HWND hwnd; + char buf[256]; /* default aspect ratio is 96dpi / 96dpi */ hdc = GetDC(0); @@ -2671,15 +2706,41 @@ static void test_Extent(IWebBrowser2 *unk) if(FAILED(hres)) return; + hres = IOleObject_QueryInterface(oleobj, &IID_IOleWindow, (void**)&olewin); + ok(hres == S_OK, "Could not get IOleInPlaceSite: %08x\n", hres); + + hres = IOleWindow_GetWindow(olewin, &hwnd); + ok(hres == S_OK, "GetWindow failed: %08x\n", hres); + + buf[0] = 0; + GetClassNameA(hwnd, buf, sizeof(buf)); + ok(!strcmp(buf, "Shell Embedding"), "got %s\n", buf); + size.cx = size.cy = 0xdeadbeef; hres = IOleObject_GetExtent(oleobj, DVASPECT_CONTENT, &size); ok(hres == S_OK, "GetExtent failed: %08x\n", hres); - /* Default size is 50x20 pixels, in himetric units */ - expected.cx = MulDiv( 50, 2540, dpi_x ); - expected.cy = MulDiv( 20, 2540, dpi_y ); + if(activated) { + /* FIXME: what is 300x150 coming from? */ + expected.cx = MulDiv( 300, 2540, dpi_x ); + expected.cy = MulDiv( 150, 2540, dpi_y ); + }else { + /* Default size is 50x20 pixels, in himetric units */ + expected.cx = MulDiv( 50, 2540, dpi_x ); + expected.cy = MulDiv( 20, 2540, dpi_y ); + } +todo_wine_if(activated) ok(size.cx == expected.cx && size.cy == expected.cy, "size = {%d %d} (expected %d %d)\n", size.cx, size.cy, expected.cx, expected.cy ); + SetRectEmpty(&rc); + GetWindowRect(hwnd, &rc); + if(activated) + /* window size should match what was set by last ::SetExtent() before activation */ + ok(rc.right - rc.left == 1000 && rc.bottom - rc.top == 900, "window size = {%d %d}\n", + rc.right - rc.left, rc.bottom - rc.top); + else + ok(IsRectEmpty(&rc), "window size = {%d %d}\n", rc.right - rc.left, rc.bottom - rc.top); + size.cx = 800; size.cy = 700; hres = IOleObject_SetExtent(oleobj, DVASPECT_CONTENT, &size); @@ -2695,6 +2756,15 @@ static void test_Extent(IWebBrowser2 *unk) ok(hres == S_OK, "GetExtent failed: %08x\n", hres); ok(size.cx == 800 && size.cy == 700, "size = {%d %d}\n", size.cx, size.cy); + SetRectEmpty(&rc); + GetWindowRect(hwnd, &rc); + if(activated) + /* window size should match what was set by last ::SetExtent() before activation */ + ok(rc.right - rc.left == 1000 && rc.bottom - rc.top == 900, "window size = {%d %d}\n", + rc.right - rc.left, rc.bottom - rc.top); + else + ok(IsRectEmpty(&rc), "window size = {%d %d}\n", rc.right - rc.left, rc.bottom - rc.top); + size.cx = 900; size.cy = 800; hres = IOleObject_SetExtent(oleobj, 0, &size); @@ -2725,6 +2795,7 @@ static void test_Extent(IWebBrowser2 *unk) ok(hres == S_OK, "GetExtent failed: %08x\n", hres); ok(size.cx == 1000 && size.cy == 900, "size = {%d %d}\n", size.cx, size.cy); + IOleWindow_Release(olewin); IOleObject_Release(oleobj); } @@ -3754,9 +3825,10 @@ static void test_WebBrowser(DWORD flags, BOOL do_close) test_LocationURL(webbrowser, L""); test_ConnectionPoint(webbrowser, TRUE); test_ClientSite(webbrowser, &ClientSite, !do_download); - test_Extent(webbrowser); + test_Extent(webbrowser, FALSE); test_wb_funcs(webbrowser, TRUE); test_DoVerb(webbrowser); + test_Extent(webbrowser, TRUE); test_olecmd(webbrowser, FALSE); test_Navigate2(webbrowser, L"about:blank"); test_QueryStatusWB(webbrowser, TRUE); -- 2.26.2