Hi Gabriel, On 4/8/22 16:35, Gabriel Ivăncescu wrote:
@@ -748,6 +750,44 @@ HRESULT WINAPI ObtainUserAgentString(DWORD option, char *ret, DWORD *ret_size) return hres; }
+/*********************************************************************** + * MapBrowserEmulationModeToUserAgent (URLMON.445) + * Undocumented, added in IE8 + */ +HRESULT WINAPI MapBrowserEmulationModeToUserAgent(const void *arg, WCHAR **ret) +{ + DWORD size, version; + const WCHAR *ua; + WCHAR buf[1024]; + + FIXME("%p %p\n", arg, ret);
I think that TRACE() would be fine here with your implementation. If you'd like to point out that it's not complete, you may add something like "semi-stub" in the message itself.
+static void test_MapBrowserEmulationModeToUserAgent(BOOL custom_ua) +{ + /* Undocumented structure of unknown size, crashes if it's too small (with random values from stack) */ + struct + { + DWORD version; + char unknown[252]; + } arg; + static char test_str[] = "test"; + const char *custom_ua_msg = ""; + HRESULT hres; + unsigned i; + WCHAR *ua; + + if(!pMapBrowserEmulationModeToUserAgent) { + win_skip("MapBrowserEmulationModeToUserAgent not available\n"); + return; + } + memset(&arg, 0, sizeof(arg)); + + if(custom_ua) { + hres = UrlMkSetSessionOption(URLMON_OPTION_USERAGENT, test_str, sizeof(test_str), 0); + ok(hres == S_OK, "UrlMkSetSessionOption failed: %08lx\n", hres); + custom_ua_msg = " (with custom ua)"; + } + + for(i = 0; i < 12; i++) { + arg.version = i; + ua = (WCHAR*)0xdeadbeef; + hres = pMapBrowserEmulationModeToUserAgent(&arg, &ua); + ok(hres == (i == 5 || i >= 7 || custom_ua ? S_OK : E_FAIL), + "[%d] MapBrowserEmulationModeToUserAgent%s returned %08lx\n", i, custom_ua_msg, hres); + if(hres != S_OK) + ok(ua == NULL, "[%d] ua%s = %p\n", i, custom_ua_msg, ua); + else { + char buf[1024]; + DWORD size = sizeof(buf); + WCHAR *ua2; + + hres = pObtainUserAgentString(custom_ua ? 0 : i, buf, &size); + ok(hres == S_OK, "[%d] ObtainUserAgentString%s failed: %08lx\n", i, custom_ua_msg, hres); + ua2 = a2co(buf); + ok(!lstrcmpW(ua, ua2), "[%d] ua%s = %s, expected %s\n", i, custom_ua_msg, wine_dbgstr_w(ua), wine_dbgstr_w(ua2)); + CoTaskMemFree(ua2); + CoTaskMemFree(ua); + }
In custom_ua case, you could just compare the result of MapBrowserEmulationModeToUserAgent directly to custom_ua_msg. I think it would make it easier to see what you're testing. Thanks, Jacek