#ifndef CookieManager_h
#define CookieManager_h
#include "CookieMap.h"
#include "ParsedCookie.h"
#include "PlatformString.h"
#include "Timer.h"
#include <BlackBerryPlatformGuardedPointer.h>
#include <wtf/HashMap.h>
namespace WTF {
class String;
}
namespace WebCore {
class CookieDatabaseBackingStore;
class KURL;
enum BackingStoreRemovalPolicy {
RemoveFromBackingStore,
BackingStoreCookieEntry,
DoNotRemoveFromBackingStore
};
enum CookieFilter {
NoHttpOnlyCookie,
WithHttpOnlyCookies,
};
enum CookieStorageAcceptPolicy {
CookieStorageAcceptPolicyAlways,
CookieStorageAcceptPolicyNever,
CookieStorageAcceptPolicyOnlyFromMainDocumentDomain
};
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);
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; }
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(const bool);
String generateHtmlFragmentForCookies();
String getCookie(const KURL& requestURL, CookieFilter) const;
void getRawCookies(Vector<ParsedCookie*>& stackOfCookies, const KURL& requestURL, CookieFilter = WithHttpOnlyCookies) const;
void flushCookiesToBackingStore();
private:
friend CookieManager& cookieManager();
CookieManager();
virtual ~CookieManager();
void checkAndTreatCookie(ParsedCookie*, BackingStoreRemovalPolicy);
bool shouldRejectForSecurityReason(const ParsedCookie*, const KURL&);
void addCookieToMap(CookieMap* targetMap, ParsedCookie* candidateCookie, BackingStoreRemovalPolicy postToBackingStore);
CookieMap* findOrCreateCookieMap(CookieMap* protocolMap, const String& domain, bool findOnly);
void initiateCookieLimitCleanUp();
void cookieLimitCleanUp(Timer<CookieManager>*);
HashMap<String, CookieMap*> m_managerMap;
unsigned short m_count;
bool m_privateMode;
bool m_shouldDumpAllCookies;
String m_cookieJarFileName;
void getBackingStoreCookies();
static const unsigned s_maxCookieLength = 4096;
CookieStorageAcceptPolicy m_policy;
CookieDatabaseBackingStore* m_cookieBackingStore;
Timer<CookieManager> m_limitTimer;
};
CookieManager& cookieManager();
}
#endif // CookieManager_h