2009-03-25 Gustavo Noronha Silva <gns@gnome.org>
[WebKit-https.git] / WebCore / platform / network / soup / CookieJarSoup.cpp
index 4ae90e5..e3064e1 100644 (file)
@@ -1,5 +1,7 @@
 /*
  *  Copyright (C) 2008 Xan Lopez <xan@gnome.org>
+ *  Copyright (C) 2009 Igalia S.L.
+ *  Copyright (C) 2008 Apple Inc. All rights reserved.
  *
  *  This library is free software; you can redistribute it and/or
  *  modify it under the terms of the GNU Lesser General Public
  */
 
 #include "config.h"
-#include "CString.h"
-#include "CookieJar.h"
+#include "CookieJarSoup.h"
 
+#include "CString.h"
 #include "KURL.h"
-#include "PlatformString.h"
-#include "StringHash.h"
-
-#include <libsoup/soup.h>
 
 namespace WebCore {
 
-SoupCookieJar* getCookieJar()
+static bool cookiesInitialized;
+static SoupCookieJar* cookieJar;
+
+SoupCookieJar* defaultCookieJar()
 {
-    static SoupCookieJar* jar = NULL;
+    if (!cookiesInitialized) {
+        cookiesInitialized = true;
+        setDefaultCookieJar(soup_cookie_jar_new());
+    }
 
-    if (!jar)
-        jar = soup_cookie_jar_new();
+    return cookieJar;
+}
+
+void setDefaultCookieJar(SoupCookieJar* jar)
+{
+    cookiesInitialized = true;
+
+    if (cookieJar)
+        g_object_unref(cookieJar);
+
+    cookieJar = jar;
 
-    return jar;
+    if (cookieJar)
+        g_object_ref(cookieJar);
 }
 
 void setCookies(Document* /*document*/, const KURL& url, const KURL& /*policyURL*/, const String& value)
 {
-    SoupCookieJar* jar = getCookieJar();
+    SoupCookieJar* jar = defaultCookieJar();
     if (!jar)
         return;
 
@@ -52,7 +66,7 @@ void setCookies(Document* /*document*/, const KURL& url, const KURL& /*policyURL
 
 String cookies(const Document* /*document*/, const KURL& url)
 {
-    SoupCookieJar* jar = getCookieJar();
+    SoupCookieJar* jar = defaultCookieJar();
     if (!jar)
         return String();
 
@@ -60,7 +74,7 @@ String cookies(const Document* /*document*/, const KURL& url)
     char* cookies = soup_cookie_jar_get_cookies(jar, uri, FALSE);
     soup_uri_free(uri);
 
-    String result(cookies);
+    String result(String::fromUTF8(cookies));
     g_free(cookies);
 
     return result;
@@ -68,7 +82,7 @@ String cookies(const Document* /*document*/, const KURL& url)
 
 bool cookiesEnabled(const Document* /*document*/)
 {
-    return getCookieJar();
+    return defaultCookieJar();
 }
 
 }