diff --git a/modules/juce_gui_extra/misc/juce_WebBrowserComponent.h b/modules/juce_gui_extra/misc/juce_WebBrowserComponent.h index 40cf25217e..c4b1edc4a5 100644 --- a/modules/juce_gui_extra/misc/juce_WebBrowserComponent.h +++ b/modules/juce_gui_extra/misc/juce_WebBrowserComponent.h @@ -79,6 +79,9 @@ public: /** Refreshes the browser. */ void refresh(); + /** Clear cookies that the OS has stored for the WebComponents of this application */ + static void clearCookies(); + //============================================================================== /** This callback is called when the browser is about to navigate to a new location. diff --git a/modules/juce_gui_extra/native/juce_android_WebBrowserComponent.cpp b/modules/juce_gui_extra/native/juce_android_WebBrowserComponent.cpp index e6bec05eea..eed279af91 100644 --- a/modules/juce_gui_extra/native/juce_android_WebBrowserComponent.cpp +++ b/modules/juce_gui_extra/native/juce_android_WebBrowserComponent.cpp @@ -115,3 +115,7 @@ void WebBrowserComponent::visibilityChanged() void WebBrowserComponent::focusGained (FocusChangeType) { } + +void WebBrowserComponent::clearCookies() +{ +} diff --git a/modules/juce_gui_extra/native/juce_linux_X11_WebBrowserComponent.cpp b/modules/juce_gui_extra/native/juce_linux_X11_WebBrowserComponent.cpp index 91a171d82f..eb08abeed4 100644 --- a/modules/juce_gui_extra/native/juce_linux_X11_WebBrowserComponent.cpp +++ b/modules/juce_gui_extra/native/juce_linux_X11_WebBrowserComponent.cpp @@ -729,3 +729,10 @@ void WebBrowserComponent::visibilityChanged() void WebBrowserComponent::focusGained (FocusChangeType) { } + +void WebBrowserComponent::clearCookies() +{ + // Currently not implemented on linux as WebBrowserComponent currently does not + // store cookies on linux + jassertfalse; +} diff --git a/modules/juce_gui_extra/native/juce_mac_WebBrowserComponent.mm b/modules/juce_gui_extra/native/juce_mac_WebBrowserComponent.mm index 610ad4792b..6f71c3ac0e 100644 --- a/modules/juce_gui_extra/native/juce_mac_WebBrowserComponent.mm +++ b/modules/juce_gui_extra/native/juce_mac_WebBrowserComponent.mm @@ -421,3 +421,18 @@ void WebBrowserComponent::visibilityChanged() void WebBrowserComponent::focusGained (FocusChangeType) { } + +void WebBrowserComponent::clearCookies() +{ + NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; + + if (NSArray* cookies = [storage cookies]) + { + const NSUInteger n = [cookies count]; + + for (NSUInteger i = 0; i < n; ++i) + [storage deleteCookie:[cookies objectAtIndex:i]]; + } + + [[NSUserDefaults standardUserDefaults] synchronize]; +} diff --git a/modules/juce_gui_extra/native/juce_win32_WebBrowserComponent.cpp b/modules/juce_gui_extra/native/juce_win32_WebBrowserComponent.cpp index 5cccd6c543..34e537f4d7 100644 --- a/modules/juce_gui_extra/native/juce_win32_WebBrowserComponent.cpp +++ b/modules/juce_gui_extra/native/juce_win32_WebBrowserComponent.cpp @@ -364,3 +364,35 @@ void WebBrowserComponent::focusGained (FocusChangeType) oleObject->Release(); } } + +void WebBrowserComponent::clearCookies() +{ + HeapBlock<::INTERNET_CACHE_ENTRY_INFO> entry; + ::DWORD entrySize = sizeof (::INTERNET_CACHE_ENTRY_INFO); + ::HANDLE urlCacheHandle = ::FindFirstUrlCacheEntry (TEXT ("cookie:"), entry.getData(), &entrySize); + + if (urlCacheHandle == nullptr && GetLastError() == ERROR_INSUFFICIENT_BUFFER) + { + entry.realloc (1, entrySize); + urlCacheHandle = ::FindFirstUrlCacheEntry (TEXT ("cookie:"), entry.getData(), &entrySize); + } + + if (urlCacheHandle != nullptr) + { + while (true) + { + ::DeleteUrlCacheEntry (entry.getData()->lpszSourceUrlName); + + if (::FindNextUrlCacheEntry (urlCacheHandle, entry.getData(), &entrySize) == 0 + && GetLastError() == ERROR_INSUFFICIENT_BUFFER) + { + entry.realloc (1, entrySize); + + if (::FindNextUrlCacheEntry (urlCacheHandle, entry.getData(), &entrySize) == 0) + break; + } + } + + FindCloseUrlCache (urlCacheHandle); + } +}