diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog index fae75a10c324..6b8ce16c2141 100644 --- a/Source/WebCore/ChangeLog +++ b/Source/WebCore/ChangeLog @@ -1,3 +1,25 @@ +2017-10-02 Tomas Popela + + [SOUP] Default kerberos authentication credentials are used in ephemeral (private) mode + https://bugs.webkit.org/show_bug.cgi?id=177738 + + Reviewed by Carlos Garcia Campos. + + If the session is ephemeral then don't enable the Negotiate support in + our SoupSession. + + * platform/network/soup/NetworkStorageSessionSoup.cpp: Pass the + session ID if it's known to the SoupNetworkSession. + (WebCore::NetworkStorageSession::ensurePrivateBrowsingSession): + (WebCore::NetworkStorageSession::getOrCreateSoupNetworkSession const): + * platform/network/soup/SoupNetworkSession.cpp: + (WebCore::SoupNetworkSession::SoupNetworkSession): If the session is + ephemeral (based on given session ID) then don't activate the + Negotiate support in SoupSession. + * platform/network/soup/SoupNetworkSession.h: + Change the constructor to accept the PAL::SessionID with the default + value set to PAL::SessionID::emptySessionID. + 2017-10-02 Joanmarie Diggs REGRESSION(r222640) [GTK] Build broken with ATK 2.14 diff --git a/Source/WebCore/platform/network/soup/NetworkStorageSessionSoup.cpp b/Source/WebCore/platform/network/soup/NetworkStorageSessionSoup.cpp index 5c5fd75413dc..1e1a37f21ef1 100644 --- a/Source/WebCore/platform/network/soup/NetworkStorageSessionSoup.cpp +++ b/Source/WebCore/platform/network/soup/NetworkStorageSessionSoup.cpp @@ -83,7 +83,7 @@ void NetworkStorageSession::ensurePrivateBrowsingSession(SessionID sessionID, co { ASSERT(sessionID != SessionID::defaultSessionID()); ASSERT(!globalSessionMap().contains(sessionID)); - globalSessionMap().add(sessionID, std::make_unique(sessionID, std::make_unique())); + globalSessionMap().add(sessionID, std::make_unique(sessionID, std::make_unique(sessionID))); } void NetworkStorageSession::ensureSession(SessionID, const String&) @@ -99,7 +99,7 @@ void NetworkStorageSession::switchToNewTestingSession() SoupNetworkSession& NetworkStorageSession::getOrCreateSoupNetworkSession() const { if (!m_session) - m_session = std::make_unique(m_cookieStorage.get()); + m_session = std::make_unique(m_sessionID, m_cookieStorage.get()); return *m_session; } diff --git a/Source/WebCore/platform/network/soup/SoupNetworkSession.cpp b/Source/WebCore/platform/network/soup/SoupNetworkSession.cpp index 5e3d25f62ef6..dadb03f59f17 100644 --- a/Source/WebCore/platform/network/soup/SoupNetworkSession.cpp +++ b/Source/WebCore/platform/network/soup/SoupNetworkSession.cpp @@ -113,7 +113,7 @@ static void requestStartedCallback(SoupSession*, SoupMessage* soupMessage, SoupS } #endif -SoupNetworkSession::SoupNetworkSession(SoupCookieJar* cookieJar) +SoupNetworkSession::SoupNetworkSession(SessionID sessionID, SoupCookieJar* cookieJar) : m_soupSession(adoptGRef(soup_session_async_new())) { // Values taken from http://www.browserscope.org/ following @@ -147,7 +147,7 @@ SoupNetworkSession::SoupNetworkSession(SoupCookieJar* cookieJar) setAcceptLanguages(gInitialAcceptLanguages); #if SOUP_CHECK_VERSION(2, 53, 92) - if (soup_auth_negotiate_supported()) { + if (soup_auth_negotiate_supported() && !sessionID.isEphemeral()) { g_object_set(m_soupSession.get(), SOUP_SESSION_ADD_FEATURE_BY_TYPE, SOUP_TYPE_AUTH_NEGOTIATE, nullptr); diff --git a/Source/WebCore/platform/network/soup/SoupNetworkSession.h b/Source/WebCore/platform/network/soup/SoupNetworkSession.h index 9e0c26f6111c..3c04df99c7f5 100644 --- a/Source/WebCore/platform/network/soup/SoupNetworkSession.h +++ b/Source/WebCore/platform/network/soup/SoupNetworkSession.h @@ -26,6 +26,7 @@ #ifndef SoupNetworkSession_h #define SoupNetworkSession_h +#include "SessionID.h" #include #include #include @@ -47,7 +48,7 @@ struct SoupNetworkProxySettings; class SoupNetworkSession { WTF_MAKE_NONCOPYABLE(SoupNetworkSession); WTF_MAKE_FAST_ALLOCATED; public: - explicit SoupNetworkSession(SoupCookieJar* = nullptr); + explicit SoupNetworkSession(SessionID = SessionID::defaultSessionID(), SoupCookieJar* = nullptr); ~SoupNetworkSession(); SoupSession* soupSession() const { return m_soupSession.get(); }