Module: wine Branch: master Commit: 76b198000f3df8e32c63174dc728d88f625e85f7 URL: https://gitlab.winehq.org/wine/wine/-/commit/76b198000f3df8e32c63174dc728d88...
Author: Gabriel Ivăncescu gabrielopcode@gmail.com Date: Thu Oct 5 18:57:46 2023 +0300
ieframe: Use the original URL for error pages' address bar.
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com
---
dlls/ieframe/ieframe.h | 1 + dlls/ieframe/iexplore.c | 4 ++++ dlls/ieframe/shellbrowser.c | 18 ++++++++++++++++++ 3 files changed, 23 insertions(+)
diff --git a/dlls/ieframe/ieframe.h b/dlls/ieframe/ieframe.h index b03fe6e8e83..602bb1c5d36 100644 --- a/dlls/ieframe/ieframe.h +++ b/dlls/ieframe/ieframe.h @@ -281,6 +281,7 @@ HRESULT get_window(DocHost*,IHTMLWindow2**); HRESULT get_location_url(DocHost*,BSTR*); HRESULT set_dochost_url(DocHost*,const WCHAR*); void handle_navigation_error(DocHost*,HRESULT,BSTR,IHTMLWindow2*); +const WCHAR *error_url_frag(const WCHAR*); HRESULT dochost_object_available(DocHost*,IUnknown*); void set_doc_state(DocHost*,READYSTATE); void activate_document(DocHost*); diff --git a/dlls/ieframe/iexplore.c b/dlls/ieframe/iexplore.c index acf7a18e3f3..43ecf5ee3f1 100644 --- a/dlls/ieframe/iexplore.c +++ b/dlls/ieframe/iexplore.c @@ -783,6 +783,10 @@ static void DocHostContainer_on_command_state_change(DocHost *iface, LONG comman static void DocHostContainer_set_url(DocHost* iface, const WCHAR *url) { InternetExplorer *This = impl_from_DocHost(iface); + const WCHAR *orig_url = error_url_frag(url); + + if(orig_url) + url = orig_url;
This->nohome = FALSE; SendMessageW(This->frame_hwnd, WM_UPDATEADDRBAR, 0, (LPARAM)url); diff --git a/dlls/ieframe/shellbrowser.c b/dlls/ieframe/shellbrowser.c index a5666fd761b..d3f8c6f8ddb 100644 --- a/dlls/ieframe/shellbrowser.c +++ b/dlls/ieframe/shellbrowser.c @@ -29,6 +29,24 @@
WINE_DEFAULT_DEBUG_CHANNEL(ieframe);
+const WCHAR *error_url_frag(const WCHAR *url) +{ + if(!wcsncmp(url, L"res://", ARRAY_SIZE(L"res://")-1)) { + WCHAR buf[MAX_PATH]; + UINT len = GetSystemDirectoryW(buf, ARRAY_SIZE(buf)); + + if(len && !wcsncmp(url + ARRAY_SIZE(L"res://")-1, buf, len)) { + len += ARRAY_SIZE(L"res://")-1; + if(!wcsncmp(url + len, L"\shdoclc.dll/ERROR.HTM", ARRAY_SIZE(L"\shdoclc.dll/ERROR.HTM")-1)) { + len += ARRAY_SIZE(L"\shdoclc.dll/ERROR.HTM")-1; + url = wcschr(url + len, '#'); + return url ? url + 1 : NULL; + } + } + } + return NULL; +} + static inline ShellBrowser *impl_from_IShellBrowser(IShellBrowser *iface) { return CONTAINING_RECORD(iface, ShellBrowser, IShellBrowser_iface);