blob: d334e67fd27814f625180db362c3f6b88bdc36d2 [file] [log] [blame]
/*
* Copyright (C) 2008, 2009 Julien Chaffraix <julien.chaffraix@gmail.com>
* Copyright (C) 2010, 2012 Research In Motion Limited. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef CookieManager_h
#define CookieManager_h
#include "CookieMap.h"
#include "ParsedCookie.h"
#include "Timer.h"
#include <BlackBerryPlatformGuardedPointer.h>
#include <wtf/HashMap.h>
#include <wtf/text/WTFString.h>
namespace WebCore {
class CookieDatabaseBackingStore;
class KURL;
enum BackingStoreRemovalPolicy {
RemoveFromBackingStore,
BackingStoreCookieEntry,
DoNotRemoveFromBackingStore
};
enum CookieStorageAcceptPolicy {
CookieStorageAcceptPolicyAlways,
CookieStorageAcceptPolicyNever,
CookieStorageAcceptPolicyOnlyFromMainDocumentDomain
};
/*
* The CookieManager class is a singleton class that handles and selectively persists
* incoming cookies. This class contains a tree of domains for quicker
* cookie domain lookup. The top of the tree represents a null value for a null domain.
* The null domain contains references to top level domains and each node below
* represents a sub-section of a domain, delimited by "."
*
* If a cookie has a domain "a.b.com", it will be stored in the node named "a" in this tree.
* in the branch ""->"com"->"b"->"a"
*
* Cookie specs follow the RFC 6265 spec sheet.
* http://tools.ietf.org/html/rfc6265
*/
class CookieManager: public BlackBerry::Platform::GuardedPointerBase {
public:
bool canLocalAccessAllCookies() const { return m_shouldDumpAllCookies; }
void setCanLocalAccessAllCookies(bool enabled) { m_shouldDumpAllCookies = enabled; }
void setCookies(const KURL&, const String& value, CookieFilter = WithHttpOnlyCookies);
void setCookies(const KURL&, const Vector<String>& cookies, CookieFilter);
void removeAllCookies(BackingStoreRemovalPolicy);
void removeCookieWithName(const KURL&, const String& cookieName);
unsigned short cookiesCount() const { return m_count; }
void setCookieJar(const char*);
const String& cookieJar() const { return m_cookieJarFileName; }
// Count update method
void removedCookie()
{
ASSERT(m_count > 0);
--m_count;
}
void addedCookie() { ++m_count; }
static unsigned maxCookieLength() { return s_maxCookieLength; }
void setCookiePolicy(CookieStorageAcceptPolicy policy) { m_policy = policy; }
CookieStorageAcceptPolicy cookiePolicy() const { return m_policy; }
void setPrivateMode(bool);
String generateHtmlFragmentForCookies();
String getCookie(const KURL& requestURL, CookieFilter) const;
// Returns all cookies that are associated with the specified URL as raw cookies.
void getRawCookies(Vector<ParsedCookie*>& stackOfCookies, const KURL& requestURL, CookieFilter = WithHttpOnlyCookies) const;
private:
friend CookieManager& cookieManager();
CookieManager();
virtual ~CookieManager();
void checkAndTreatCookie(ParsedCookie*, BackingStoreRemovalPolicy, CookieFilter = WithHttpOnlyCookies);
void addCookieToMap(CookieMap* targetMap, ParsedCookie* candidateCookie, BackingStoreRemovalPolicy postToBackingStore, CookieFilter = WithHttpOnlyCookies);
CookieMap* findOrCreateCookieMap(CookieMap* protocolMap, const ParsedCookie& candidateCookie);
void initiateCookieLimitCleanUp();
void cookieLimitCleanUp(Timer<CookieManager>*);
HashMap<String, CookieMap*> m_managerMap;
unsigned short m_count;
bool m_privateMode;
bool m_shouldDumpAllCookies;
String m_cookieJarFileName;
// FIXME: This method should be removed.
void getBackingStoreCookies();
// Cookie size limit of 4kB as advised per RFC2109
static const unsigned s_maxCookieLength = 4096;
CookieStorageAcceptPolicy m_policy;
CookieDatabaseBackingStore* m_cookieBackingStore;
Timer<CookieManager> m_limitTimer;
};
// Get the global instance.
CookieManager& cookieManager();
} // namespace WebCore
#endif // CookieManager_h