Module: wine Branch: master Commit: 608872012b1a379b6a08ea29f884931ce082ca24 URL: https://gitlab.winehq.org/wine/wine/-/commit/608872012b1a379b6a08ea29f884931...
Author: Gabriel Ivăncescu gabrielopcode@gmail.com Date: Wed Apr 12 18:34:58 2023 +0300
mshtml: Tell wine-gecko about the IE compat document mode.
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com
---
dlls/mshtml/mshtml_private.h | 1 + dlls/mshtml/mutation.c | 28 +++++++++++++++++++++++++++- dlls/mshtml/omnavigator.c | 26 ++------------------------ 3 files changed, 30 insertions(+), 25 deletions(-)
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index d04d4b2b2c2..270f09b1f30 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -1023,6 +1023,7 @@ void ConnectionPointContainer_Destroy(ConnectionPointContainer*) DECLSPEC_HIDDEN HRESULT create_gecko_browser(HTMLDocumentObj*,GeckoBrowser**) DECLSPEC_HIDDEN; void detach_gecko_browser(GeckoBrowser*) DECLSPEC_HIDDEN;
+DWORD get_compat_mode_version(compat_mode_t compat_mode) DECLSPEC_HIDDEN; compat_mode_t lock_document_mode(HTMLDocumentNode*) DECLSPEC_HIDDEN;
void init_mutation(nsIComponentManager*) DECLSPEC_HIDDEN; diff --git a/dlls/mshtml/mutation.c b/dlls/mshtml/mutation.c index 7f2d92b4bcc..83ab623aea8 100644 --- a/dlls/mshtml/mutation.c +++ b/dlls/mshtml/mutation.c @@ -388,6 +388,26 @@ static nsresult run_insert_script(HTMLDocumentNode *doc, nsISupports *script_ifa return NS_OK; }
+DWORD get_compat_mode_version(compat_mode_t compat_mode) +{ + switch(compat_mode) { + case COMPAT_MODE_QUIRKS: + case COMPAT_MODE_IE5: + case COMPAT_MODE_IE7: + return 7; + case COMPAT_MODE_IE8: + return 8; + case COMPAT_MODE_IE9: + return 9; + case COMPAT_MODE_IE10: + return 10; + case COMPAT_MODE_IE11: + return 11; + DEFAULT_UNREACHABLE; + } + return 0; +} + /* * We may change document mode only in early stage of document lifetime. * Later attempts will not have an effect. @@ -396,7 +416,13 @@ compat_mode_t lock_document_mode(HTMLDocumentNode *doc) { TRACE("%p: %d\n", doc, doc->document_mode);
- doc->document_mode_locked = TRUE; + if(!doc->document_mode_locked) { + doc->document_mode_locked = TRUE; + + if(doc->html_document) + nsIDOMHTMLDocument_SetIECompatMode(doc->html_document, get_compat_mode_version(doc->document_mode)); + } + return doc->document_mode; }
diff --git a/dlls/mshtml/omnavigator.c b/dlls/mshtml/omnavigator.c index aa9f33567c2..c2a580ceeb3 100644 --- a/dlls/mshtml/omnavigator.c +++ b/dlls/mshtml/omnavigator.c @@ -1170,30 +1170,8 @@ extern HRESULT WINAPI MapBrowserEmulationModeToUserAgent(const void*,WCHAR**); /* Retrieves allocated user agent via CoTaskMemAlloc */ static HRESULT get_user_agent(OmNavigator *navigator, WCHAR **user_agent) { - DWORD version; - - switch(dispex_compat_mode(&navigator->dispex)) { - case COMPAT_MODE_QUIRKS: - case COMPAT_MODE_IE5: - case COMPAT_MODE_IE7: - version = 7; - break; - case COMPAT_MODE_IE8: - version = 8; - break; - case COMPAT_MODE_IE9: - version = 9; - break; - case COMPAT_MODE_IE10: - version = 10; - break; - case COMPAT_MODE_IE11: - version = 11; - break; - default: - assert(0); - return E_FAIL; - } + DWORD version = get_compat_mode_version(dispex_compat_mode(&navigator->dispex)); + return MapBrowserEmulationModeToUserAgent(&version, user_agent); }