diff --git a/dlls/wininet/internet.c b/dlls/wininet/internet.c index d3d6a38657b..19cf470562e 100644 --- a/dlls/wininet/internet.c +++ b/dlls/wininet/internet.c @@ -2805,7 +2805,8 @@ BOOL WINAPI InternetSetOptionW(HINTERNET hInternet, DWORD dwOption, FIXME("Option INTERNET_OPTION_RESET_URLCACHE_SESSION: STUB\n"); break; case INTERNET_OPTION_END_BROWSER_SESSION: - FIXME("Option INTERNET_OPTION_END_BROWSER_SESSION: STUB\n"); + FIXME("Option INTERNET_OPTION_END_BROWSER_SESSION: semi-stub\n"); + free_cookie(); break; case INTERNET_OPTION_CONNECTED_STATE: FIXME("Option INTERNET_OPTION_CONNECTED_STATE: STUB\n"); diff --git a/dlls/wininet/tests/internet.c b/dlls/wininet/tests/internet.c index ac8e9b3c410..5408af83ad6 100644 --- a/dlls/wininet/tests/internet.c +++ b/dlls/wininet/tests/internet.c @@ -1173,6 +1173,28 @@ static void test_InternetSetOption(void) ok(ret == TRUE, "InternetCloseHandle failed: 0x%08x\n", GetLastError()); } +static void test_end_browser_session(void) +{ + DWORD len; + BOOL ret; + + ret = InternetSetCookieA("http://www.example.com/test_end", NULL, "A=B"); + ok(ret == TRUE, "InternetSetCookie failed\n"); + + len = 1024; + ret = InternetGetCookieA("http://www.example.com/test_end", NULL, NULL, &len); + ok(ret == TRUE,"InternetGetCookie failed\n"); + ok(len != 0, "len = 0\n"); + + ret = InternetSetOptionA(NULL, INTERNET_OPTION_END_BROWSER_SESSION, NULL, 0); + ok(ret, "InternetSetOptio(INTERNET_OPTION_END_BROWSER_SESSION) failed: %u\n", GetLastError()); + + len = 1024; + ret = InternetGetCookieA("http://www.example.com/test_end", NULL, NULL, &len); + ok(!ret && GetLastError() == ERROR_NO_MORE_ITEMS, "InternetGetCookie returned %x (%u)\n", ret, GetLastError()); + ok(!len, "len = %u\n", len); +} + #define verifyProxyEnable(e) r_verifyProxyEnable(__LINE__, e) static void r_verifyProxyEnable(LONG l, DWORD exp) { @@ -1805,4 +1827,5 @@ START_TEST(internet) win_skip("Privacy[SG]etZonePreferenceW are not available\n"); test_InternetSetOption(); + test_end_browser_session(); }