Part 2 of removing PlatformString.h, remove PlatformString.h
[WebKit-https.git] / Source / WebCore / platform / blackberry / CookieManager.h
1 /*
2  * Copyright (C) 2008, 2009 Julien Chaffraix <julien.chaffraix@gmail.com>
3  * Copyright (C) 2010, 2012 Research In Motion Limited. All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
15  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
18  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25  */
26
27 #ifndef CookieManager_h
28 #define CookieManager_h
29
30 #include "CookieMap.h"
31 #include "ParsedCookie.h"
32 #include "Timer.h"
33 #include <BlackBerryPlatformGuardedPointer.h>
34 #include <wtf/HashMap.h>
35 #include <wtf/text/WTFString.h>
36
37 namespace WebCore {
38
39 class CookieDatabaseBackingStore;
40 class KURL;
41
42 enum BackingStoreRemovalPolicy {
43     RemoveFromBackingStore,
44     BackingStoreCookieEntry,
45     DoNotRemoveFromBackingStore
46 };
47
48 enum CookieStorageAcceptPolicy {
49     CookieStorageAcceptPolicyAlways,
50     CookieStorageAcceptPolicyNever,
51     CookieStorageAcceptPolicyOnlyFromMainDocumentDomain
52 };
53
54 /*
55   * The CookieManager class is a singleton class that handles and selectively persists
56   * incoming cookies. This class contains a tree of domains for quicker
57   * cookie domain lookup. The top of the tree represents a null value for a null domain.
58   * The null domain contains references to top level domains and each node below
59   * represents a sub-section of a domain, delimited by "."
60   *
61   * If a cookie has a domain "a.b.com", it will be stored in the node named "a" in this tree.
62   * in the branch ""->"com"->"b"->"a"
63   *
64   * Cookie specs follow the RFC 6265 spec sheet.
65   * http://tools.ietf.org/html/rfc6265
66   */
67
68 class CookieManager: public BlackBerry::Platform::GuardedPointerBase {
69 public:
70     bool canLocalAccessAllCookies() const { return m_shouldDumpAllCookies; }
71     void setCanLocalAccessAllCookies(bool enabled) { m_shouldDumpAllCookies = enabled; }
72
73     void setCookies(const KURL&, const String& value, CookieFilter = WithHttpOnlyCookies);
74
75     void removeAllCookies(BackingStoreRemovalPolicy);
76     void removeCookieWithName(const KURL&, const String& cookieName);
77
78     unsigned short cookiesCount() const { return m_count; }
79
80     void setCookieJar(const char*);
81     const String& cookieJar() const { return m_cookieJarFileName; }
82
83     // Count update method
84     void removedCookie()
85     {
86         ASSERT(m_count > 0);
87         --m_count;
88     }
89     void addedCookie() { ++m_count; }
90
91     static unsigned maxCookieLength() { return s_maxCookieLength; }
92
93     void setCookiePolicy(CookieStorageAcceptPolicy policy) { m_policy = policy; }
94     CookieStorageAcceptPolicy cookiePolicy() const { return m_policy; }
95     void setPrivateMode(bool);
96
97     String generateHtmlFragmentForCookies();
98     String getCookie(const KURL& requestURL, CookieFilter) const;
99
100     // Returns all cookies that are associated with the specified URL as raw cookies.
101     void getRawCookies(Vector<ParsedCookie*>& stackOfCookies, const KURL& requestURL, CookieFilter = WithHttpOnlyCookies) const;
102
103 private:
104     friend CookieManager& cookieManager();
105
106     CookieManager();
107     virtual ~CookieManager();
108
109     void checkAndTreatCookie(ParsedCookie*, BackingStoreRemovalPolicy, CookieFilter = WithHttpOnlyCookies);
110
111     void addCookieToMap(CookieMap* targetMap, ParsedCookie* candidateCookie, BackingStoreRemovalPolicy postToBackingStore, CookieFilter = WithHttpOnlyCookies);
112
113     CookieMap* findOrCreateCookieMap(CookieMap* protocolMap, const ParsedCookie& candidateCookie);
114
115     void initiateCookieLimitCleanUp();
116     void cookieLimitCleanUp(Timer<CookieManager>*);
117
118     HashMap<String, CookieMap*> m_managerMap;
119
120     unsigned short m_count;
121
122     bool m_privateMode;
123     bool m_shouldDumpAllCookies;
124
125     String m_cookieJarFileName;
126
127     // FIXME: This method should be removed.
128     void getBackingStoreCookies();
129
130     // Cookie size limit of 4kB as advised per RFC2109
131     static const unsigned s_maxCookieLength = 4096;
132
133     CookieStorageAcceptPolicy m_policy;
134
135     CookieDatabaseBackingStore* m_cookieBackingStore;
136     Timer<CookieManager> m_limitTimer;
137
138 };
139
140 // Get the global instance.
141 CookieManager& cookieManager();
142
143 } // namespace WebCore
144
145 #endif // CookieManager_h