From: Andrey Turkin andrey.turkin@gmail.com
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=12457 Signed-off-by: Gijs Vermeulen gijsvrm@gmail.com --- dlls/ieframe/tests/webbrowser.c | 15 +++++++++++++++ dlls/ieframe/webbrowser.c | 20 ++++++++++++++++++-- 2 files changed, 33 insertions(+), 2 deletions(-)
diff --git a/dlls/ieframe/tests/webbrowser.c b/dlls/ieframe/tests/webbrowser.c index ab0345b79b5..864a8baf27f 100644 --- a/dlls/ieframe/tests/webbrowser.c +++ b/dlls/ieframe/tests/webbrowser.c @@ -263,6 +263,19 @@ static void _test_LocationURL(unsigned line, IWebBrowser2 *wb, const WCHAR *exur } }
+#define test_LocationName(a,b) _test_LocationName(__LINE__,a,b) +static void _test_LocationName(unsigned line, IWebBrowser2 *wb, const WCHAR *exname) +{ + BSTR name = (void*)0xdeadbeef; + HRESULT hres; + + hres = IWebBrowser2_get_LocationName(wb, &name); + ok_(__FILE__,line) (hres == (*exname ? S_OK : S_FALSE), "get_LocationName failed: %08x\n", hres); + ok_(__FILE__,line) (!lstrcmpW(name, exname) || broken(is_http && !lstrcmpW(name, current_url)) /* Win10 2004 */, + "expected %s, got %s\n", wine_dbgstr_w(exname), wine_dbgstr_w(name)); + SysFreeString(name); +} + #define test_ready_state(a,b) _test_ready_state(__LINE__,a,b) static void _test_ready_state(unsigned line, READYSTATE exstate, VARIANT_BOOL expect_busy) { @@ -2800,11 +2813,13 @@ static void test_ConnectionPoint(IWebBrowser2 *unk, BOOL init)
static void test_Navigate2(IWebBrowser2 *webbrowser, const WCHAR *nav_url) { + const WCHAR *title = L"WineHQ - Run Windows applications on Linux, BSD, Solaris and Mac OS X"; VARIANT url; BOOL is_file; HRESULT hres;
test_LocationURL(webbrowser, is_first_load ? L"" : current_url); + test_LocationName(webbrowser, is_first_load ? L"" : (is_http ? title : current_url)); test_ready_state(is_first_load ? READYSTATE_UNINITIALIZED : READYSTATE_COMPLETE, VARIANT_FALSE);
is_http = !memcmp(nav_url, "http:", 5); diff --git a/dlls/ieframe/webbrowser.c b/dlls/ieframe/webbrowser.c index 87b74b8e01f..3a4ed0bb604 100644 --- a/dlls/ieframe/webbrowser.c +++ b/dlls/ieframe/webbrowser.c @@ -539,8 +539,24 @@ static HRESULT WINAPI WebBrowser_put_Height(IWebBrowser2 *iface, LONG Height) static HRESULT WINAPI WebBrowser_get_LocationName(IWebBrowser2 *iface, BSTR *LocationName) { WebBrowser *This = impl_from_IWebBrowser2(iface); - FIXME("(%p)->(%p)\n", This, LocationName); - return E_NOTIMPL; + IHTMLDocument2 *doc; + HRESULT hres; + + TRACE("(%p)->(%p)\n", This, LocationName); + + if(This->doc_host.url && wcsncmp(This->doc_host.url, L"http", 4) != 0) { + *LocationName = SysAllocString(This->doc_host.url); + hres = S_OK; + } else if(This->doc_host.document && + SUCCEEDED(IUnknown_QueryInterface(This->doc_host.document, &IID_IHTMLDocument2, (void **)&doc))) { + hres = IHTMLDocument2_get_title(doc, LocationName); + IHTMLDocument2_Release(doc); + } else { + *LocationName = SysAllocString(L""); + hres = S_FALSE; + } + + return hres; }
static HRESULT WINAPI WebBrowser_get_LocationURL(IWebBrowser2 *iface, BSTR *LocationURL)
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=88908
Your paranoid android.
=== w8adm (32 bit report) ===
ieframe: webbrowser.c:1055: Test failed: unexpected dispIdMember 271 webbrowser.c:1683: Test failed: unexpected call TranslateUrl webbrowser.c:478: Test failed: unexpected nCmdID 14 webbrowser.c:1697: Test failed: unexpected call GetOverridesKeyPath webbrowser: Timeout
On 4/17/21 3:45 PM, Gijs Vermeulen wrote:
- if(This->doc_host.url && wcsncmp(This->doc_host.url, L"http", 4) != 0) {
*LocationName = SysAllocString(This->doc_host.url);
hres = S_OK;
Should we really special-case http for some reason? My guess is that what we observe in test could be achieved by always trying to get a title and falling back to current URL if it's not available.
Thanks, Jacek