Module: wine Branch: master Commit: 6f9e33083860fc64fded56a71e09a98994aa7ecd URL: http://source.winehq.org/git/wine.git/?a=commit;h=6f9e33083860fc64fded56a71e...
Author: Jacek Caban jacek@codeweavers.com Date: Fri Apr 6 12:34:12 2012 +0200
urlmon: Build more appropriate user agent string.
The registry value we used previously seems to be ignored by recent IEs.
---
dlls/urlmon/session.c | 45 ++++++++++++++++++++++++++------------------- 1 files changed, 26 insertions(+), 19 deletions(-)
diff --git a/dlls/urlmon/session.c b/dlls/urlmon/session.c index 5da194b..ce6ab4e 100644 --- a/dlls/urlmon/session.c +++ b/dlls/urlmon/session.c @@ -532,31 +532,38 @@ static LPWSTR user_agent;
static void ensure_useragent(void) { - DWORD size = sizeof(DWORD), res, type; - HKEY hkey; - - static const WCHAR user_agentW[] = {'U','s','e','r',' ','A','g','e','n','t',0}; + OSVERSIONINFOW info = {sizeof(info)}; + const WCHAR *os_type, *is_nt; + WCHAR buf[512]; + BOOL is_wow; + + static const WCHAR formatW[] = + {'M','o','z','i','l','l','a','/','4','.','0', + ' ','(','c','o','m','p','a','t','i','b','l','e',';', + ' ','M','S','I','E',' ','8','.','0',';', + ' ','W','i','n','d','o','w','s',' ','%','s','%','d','.','%','d',';', + ' ','%','s',';',' ','T','r','i','d','e','n','t','/','5','.','0',')',0}; + static const WCHAR ntW[] = {'N','T',' ',0}; + static const WCHAR win32W[] = {'W','i','n','3','2',0}; + static const WCHAR win64W[] = {'W','i','n','6','4',0}; + static const WCHAR wow64W[] = {'W','O','W','6','4',0}; + static const WCHAR emptyW[] = {0};
if(user_agent) return;
- res = RegOpenKeyW(HKEY_CURRENT_USER, internet_settings_keyW, &hkey); - if(res != ERROR_SUCCESS) - return; + GetVersionExW(&info); + is_nt = info.dwPlatformId == VER_PLATFORM_WIN32_NT ? ntW : emptyW;
- res = RegQueryValueExW(hkey, user_agentW, NULL, &type, NULL, &size); - if(res == ERROR_SUCCESS && type == REG_SZ) { - user_agent = heap_alloc(size); - res = RegQueryValueExW(hkey, user_agentW, NULL, &type, (LPBYTE)user_agent, &size); - if(res != ERROR_SUCCESS) { - heap_free(user_agent); - user_agent = NULL; - } - }else { - WARN("Could not find User Agent value: %u\n", res); - } + if(sizeof(void*) == 8) + os_type = win64W; + else if(IsWow64Process(GetCurrentProcess(), &is_wow) && is_wow) + os_type = wow64W; + else + os_type = win32W;
- RegCloseKey(hkey); + sprintfW(buf, formatW, is_nt, info.dwMajorVersion, info.dwMinorVersion, os_type); + user_agent = heap_strdupW(buf); }
LPWSTR get_useragent(void)