CookieDatabaseBackingStore.h [plain text]
#ifndef CookieDatabaseBackingStore_h
#define CookieDatabaseBackingStore_h
#include "PlatformString.h"
#include "SQLiteDatabase.h"
#include "Timer.h"
#include <BlackBerryPlatformMessageClient.h>
#include <BlackBerryPlatformTimer.h>
#include <GenericTimerClient.h>
#include <ThreadTimerClient.h>
#include <wtf/ThreadingPrimitives.h>
#include <wtf/Vector.h>
#include <wtf/text/StringHash.h>
namespace WebCore {
class ParsedCookie;
class CookieDatabaseBackingStore : public BlackBerry::Platform::MessageClient
, public BlackBerry::Platform::ThreadTimerClient {
public:
static CookieDatabaseBackingStore* create() { return new CookieDatabaseBackingStore; }
void open(const String& cookieJar);
void insert(const ParsedCookie*);
void update(const ParsedCookie*);
void remove(const ParsedCookie*);
void removeAll();
void getCookiesFromDatabase(Vector<ParsedCookie*>& stackOfCookies, unsigned int limit = 0);
void sendChangesToDatabaseSynchronously();
virtual bool willFireTimer() { return true; }
virtual int getPulseCode() const { return pulseCode(); }
virtual int getConnectionId() const { return connectionId(); }
virtual int defaultTimerPriority() const { return threadPriority(); }
private:
enum UpdateParameter {
Insert,
Update,
Delete,
};
CookieDatabaseBackingStore();
~CookieDatabaseBackingStore();
void addToChangeQueue(const ParsedCookie* changedCookie, UpdateParameter actionParam);
void sendChangesToDatabase(int interval);
void sendChangesToDatabaseTimerFired();
void upgradeTableIfNeeded(const String& databaseSchema, const String& primarykeyFields);
void invokeOpen(const String& cookieJar);
void invokeRemoveAll();
Vector<ParsedCookie*>* invokeGetCookiesWithLimit(unsigned int limit);
void invokeSendChangesToDatabase();
void close();
typedef pair<const ParsedCookie, UpdateParameter> CookieAction;
Vector<CookieAction> m_changedCookies;
Mutex m_mutex;
String m_tableName;
BlackBerry::Platform::Timer<CookieDatabaseBackingStore> m_dbTimer;
BlackBerry::Platform::GenericTimerClient* m_dbTimerClient;
SQLiteDatabase m_db;
SQLiteStatement *m_insertStatement;
SQLiteStatement *m_updateStatement;
SQLiteStatement *m_deleteStatement;
};
CookieDatabaseBackingStore& cookieBackingStore();
}
#endif // CookieDatabaseBackingStore_h