RegistrationDatabase.h [plain text]
#pragma once
#if ENABLE(SERVICE_WORKER)
#include "SecurityOrigin.h"
#include <pal/SessionID.h>
#include <wtf/ThreadSafeRefCounted.h>
#include <wtf/WeakPtr.h>
#include <wtf/WorkQueue.h>
#include <wtf/text/WTFString.h>
namespace WebCore {
class RegistrationStore;
class SQLiteDatabase;
struct ServiceWorkerContextData;
WEBCORE_EXPORT String serviceWorkerRegistrationDatabaseFilename(const String& databaseDirectory);
class RegistrationDatabase : public ThreadSafeRefCounted<RegistrationDatabase, WTF::DestructionThread::Main> {
WTF_MAKE_FAST_ALLOCATED;
public:
static Ref<RegistrationDatabase> create(RegistrationStore& store, String&& databaseDirectory)
{
return adoptRef(*new RegistrationDatabase(store, WTFMove(databaseDirectory)));
}
~RegistrationDatabase();
bool isClosed() const { return !m_database; }
void pushChanges(Vector<ServiceWorkerContextData>&&, CompletionHandler<void()>&&);
void clearAll(CompletionHandler<void()>&&);
private:
RegistrationDatabase(RegistrationStore&, String&& databaseDirectory);
void postTaskToWorkQueue(Function<void()>&&);
void openSQLiteDatabase(const String& fullFilename);
String ensureValidRecordsTable();
String importRecords();
void importRecordsIfNecessary();
void doPushChanges(Vector<ServiceWorkerContextData>&&);
void doClearOrigin(const SecurityOrigin&);
void addRegistrationToStore(ServiceWorkerContextData&&);
void databaseFailedToOpen();
void databaseOpenedAndRecordsImported();
Ref<WorkQueue> m_workQueue;
WeakPtr<RegistrationStore> m_store;
PAL::SessionID m_sessionID;
String m_databaseDirectory;
String m_databaseFilePath;
std::unique_ptr<SQLiteDatabase> m_database;
};
}
#endif // ENABLE(SERVICE_WORKER)