Move URL from WebCore to WTF
[WebKit-https.git] / Source / WebCore / platform / network / curl / NetworkStorageSessionCurl.cpp
index 176ae9f..247a527 100644 (file)
 #if USE(CURL)
 
 #include "Cookie.h"
+#include "CookieJarCurl.h"
+#include "CookieJarDB.h"
+#include "CookieRequestHeaderFieldProxy.h"
+#include "CurlContext.h"
+#include "FileSystem.h"
 #include "NetworkingContext.h"
 #include "ResourceHandle.h"
 
 #include <wtf/MainThread.h>
 #include <wtf/NeverDestroyed.h>
+#include <wtf/URL.h>
+#include <wtf/text/WTFString.h>
 
 namespace WebCore {
 
+static String defaultCookieJarPath()
+{
+    static const char* defaultFileName = "cookie.jar.db";
+    char* cookieJarPath = getenv("CURL_COOKIE_JAR_PATH");
+    if (cookieJarPath)
+        return cookieJarPath;
+
+    return FileSystem::pathByAppendingComponent(FileSystem::localUserSpecificStorageDirectory(), defaultFileName);
+}
+
 NetworkStorageSession::NetworkStorageSession(PAL::SessionID sessionID, NetworkingContext* context)
     : m_sessionID(sessionID)
     , m_context(context)
+    , m_cookieStorage(makeUniqueRef<CookieJarCurl>())
+    , m_cookieDatabase(makeUniqueRef<CookieJarDB>(defaultCookieJarPath()))
 {
 }
 
@@ -52,10 +71,21 @@ NetworkingContext* NetworkStorageSession::context() const
     return m_context.get();
 }
 
+void NetworkStorageSession::setCookieDatabase(UniqueRef<CookieJarDB>&& cookieDatabase)
+{
+    m_cookieDatabase = WTFMove(cookieDatabase);
+}
+
+CookieJarDB& NetworkStorageSession::cookieDatabase() const
+{
+    m_cookieDatabase->open();
+    return m_cookieDatabase;
+}
+
 static std::unique_ptr<NetworkStorageSession>& defaultSession()
 {
     ASSERT(isMainThread());
-    static NeverDestroyed<std::unique_ptr<NetworkStorageSession>> session;
+    static std::unique_ptr<NetworkStorageSession> session;
     return session;
 }
 
@@ -76,6 +106,21 @@ void NetworkStorageSession::switchToNewTestingSession()
     // FIXME: Implement for WebKit to use.
 }
 
+void NetworkStorageSession::setCookiesFromDOM(const URL& firstParty, const SameSiteInfo& sameSiteInfo, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, const String& value) const
+{
+    cookieStorage().setCookiesFromDOM(*this, firstParty, sameSiteInfo, url, frameID, pageID, value);
+}
+
+bool NetworkStorageSession::cookiesEnabled() const
+{
+    return cookieStorage().cookiesEnabled(*this);
+}
+
+std::pair<String, bool> NetworkStorageSession::cookiesForDOM(const URL& firstParty, const SameSiteInfo& sameSiteInfo, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, IncludeSecureCookies includeSecureCookies) const
+{
+    return cookieStorage().cookiesForDOM(*this, firstParty, sameSiteInfo, url, frameID, pageID, includeSecureCookies);
+}
+
 void NetworkStorageSession::setCookies(const Vector<Cookie>&, const URL&, const URL&)
 {
     // FIXME: Implement for WebKit to use.
@@ -91,23 +136,68 @@ void NetworkStorageSession::deleteCookie(const Cookie&)
     // FIXME: Implement for WebKit to use.
 }
 
+void NetworkStorageSession::deleteCookie(const URL& url, const String& cookie) const
+{
+    cookieStorage().deleteCookie(*this, url, cookie);
+}
+
+void NetworkStorageSession::deleteAllCookies()
+{
+    cookieStorage().deleteAllCookies(*this);
+}
+
+void NetworkStorageSession::deleteAllCookiesModifiedSince(WallTime since)
+{
+    cookieStorage().deleteAllCookiesModifiedSince(*this, since);
+}
+
+void NetworkStorageSession::deleteCookiesForHostnames(const Vector<String>& cookieHostNames)
+{
+    cookieStorage().deleteCookiesForHostnames(*this, cookieHostNames);
+}
+
 Vector<Cookie> NetworkStorageSession::getAllCookies()
 {
     // FIXME: Implement for WebKit to use.
     return { };
 }
 
+void NetworkStorageSession::getHostnamesWithCookies(HashSet<String>& hostnames)
+{
+    cookieStorage().getHostnamesWithCookies(*this, hostnames);
+}
+
 Vector<Cookie> NetworkStorageSession::getCookies(const URL&)
 {
     // FIXME: Implement for WebKit to use.
     return { };
 }
 
+bool NetworkStorageSession::getRawCookies(const URL& firstParty, const SameSiteInfo& sameSiteInfo, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, Vector<Cookie>& rawCookies) const
+{
+    return cookieStorage().getRawCookies(*this, firstParty, sameSiteInfo, url, frameID, pageID, rawCookies);
+}
+
 void NetworkStorageSession::flushCookieStore()
 {
     // FIXME: Implement for WebKit to use.
 }
 
+std::pair<String, bool> NetworkStorageSession::cookieRequestHeaderFieldValue(const URL& firstParty, const SameSiteInfo& sameSiteInfo, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, IncludeSecureCookies includeSecureCookies) const
+{
+    return cookieStorage().cookieRequestHeaderFieldValue(*this, firstParty, sameSiteInfo, url, frameID, pageID, includeSecureCookies);
+}
+
+std::pair<String, bool> NetworkStorageSession::cookieRequestHeaderFieldValue(const CookieRequestHeaderFieldProxy& headerFieldProxy) const
+{
+    return cookieStorage().cookieRequestHeaderFieldValue(*this, headerFieldProxy.firstParty, headerFieldProxy.sameSiteInfo, headerFieldProxy.url, headerFieldProxy.frameID, headerFieldProxy.pageID, headerFieldProxy.includeSecureCookies);
+}
+
+void NetworkStorageSession::setProxySettings(CurlProxySettings&& proxySettings)
+{
+    CurlContext::singleton().setProxySettings(WTFMove(proxySettings));
+}
+
 } // namespace WebCore
 
 #endif // USE(CURL)