1/*
2 * Copyright (C) 2011 Samsung Electronics.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 *    notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 *    notice, this list of conditions and the following disclaimer in the
11 *    documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23 * THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26#include "config.h"
27#include "WebCookieManager.h"
28
29#include "ChildProcess.h"
30#include "WebKitSoupCookieJarSqlite.h"
31#include <WebCore/CookieJarSoup.h>
32#include <WebCore/ResourceHandle.h>
33#include <libsoup/soup.h>
34#include <wtf/gobject/GRefPtr.h>
35#include <wtf/text/CString.h>
36
37using namespace WebCore;
38
39namespace WebKit {
40
41void WebCookieManager::platformSetHTTPCookieAcceptPolicy(HTTPCookieAcceptPolicy policy)
42{
43    SoupCookieJar* cookieJar = WebCore::soupCookieJar();
44    SoupCookieJarAcceptPolicy soupPolicy;
45
46    soupPolicy = SOUP_COOKIE_JAR_ACCEPT_ALWAYS;
47    switch (policy) {
48    case HTTPCookieAcceptPolicyAlways:
49        soupPolicy = SOUP_COOKIE_JAR_ACCEPT_ALWAYS;
50        break;
51    case HTTPCookieAcceptPolicyNever:
52        soupPolicy = SOUP_COOKIE_JAR_ACCEPT_NEVER;
53        break;
54    case HTTPCookieAcceptPolicyOnlyFromMainDocumentDomain:
55        soupPolicy = SOUP_COOKIE_JAR_ACCEPT_NO_THIRD_PARTY;
56        break;
57    }
58    soup_cookie_jar_set_accept_policy(cookieJar, soupPolicy);
59}
60
61HTTPCookieAcceptPolicy WebCookieManager::platformGetHTTPCookieAcceptPolicy()
62{
63    SoupCookieJar* cookieJar = WebCore::soupCookieJar();
64    SoupCookieJarAcceptPolicy soupPolicy;
65
66    HTTPCookieAcceptPolicy policy;
67
68    soupPolicy = soup_cookie_jar_get_accept_policy(cookieJar);
69    switch (soupPolicy) {
70    case SOUP_COOKIE_JAR_ACCEPT_ALWAYS:
71        policy = HTTPCookieAcceptPolicyAlways;
72        break;
73    case SOUP_COOKIE_JAR_ACCEPT_NEVER:
74        policy = HTTPCookieAcceptPolicyNever;
75        break;
76    case SOUP_COOKIE_JAR_ACCEPT_NO_THIRD_PARTY:
77        policy = HTTPCookieAcceptPolicyOnlyFromMainDocumentDomain;
78        break;
79    default:
80        policy = HTTPCookieAcceptPolicyAlways;
81    }
82    return policy;
83}
84
85void WebCookieManager::setCookiePersistentStorage(const String& storagePath, uint32_t storageType)
86{
87    GRefPtr<SoupCookieJar> jar;
88    switch (storageType) {
89    case SoupCookiePersistentStorageText:
90        jar = adoptGRef(soup_cookie_jar_text_new(storagePath.utf8().data(), FALSE));
91        break;
92    case SoupCookiePersistentStorageSQLite:
93        jar = adoptGRef(webkitSoupCookieJarSqliteNew(storagePath));
94        break;
95    default:
96        ASSERT_NOT_REACHED();
97    }
98
99    SoupCookieJar* currentJar = WebCore::soupCookieJar();
100    soup_cookie_jar_set_accept_policy(jar.get(), soup_cookie_jar_get_accept_policy(currentJar));
101    SoupSession* session = ResourceHandle::defaultSession();
102    soup_session_remove_feature(session, SOUP_SESSION_FEATURE(currentJar));
103    soup_session_add_feature(session, SOUP_SESSION_FEATURE(jar.get()));
104
105    WebCore::setSoupCookieJar(jar.get());
106}
107
108} // namespace WebKit
109