WorkerGlobalScopeIndexedDatabase.cpp [plain text]
#include "config.h"
#if ENABLE(INDEXED_DATABASE_IN_WORKERS)
#include "WorkerGlobalScopeIndexedDatabase.h"
#include "IDBFactory.h"
#include "IDBFactoryBackendInterface.h"
#include "ScriptExecutionContext.h"
#include "SecurityOrigin.h"
namespace WebCore {
WorkerGlobalScopeIndexedDatabase::WorkerGlobalScopeIndexedDatabase(const String& databaseDirectoryIdentifier)
: m_databaseDirectoryIdentifier(databaseDirectoryIdentifier)
{
}
WorkerGlobalScopeIndexedDatabase::~WorkerGlobalScopeIndexedDatabase()
{
}
const char* WorkerGlobalScopeIndexedDatabase::supplementName()
{
return "WorkerGlobalScopeIndexedDatabase";
}
WorkerGlobalScopeIndexedDatabase* WorkerGlobalScopeIndexedDatabase::from(ScriptExecutionContext* context)
{
WorkerGlobalScopeIndexedDatabase* supplement = static_cast<WorkerGlobalScopeIndexedDatabase*>(Supplement<ScriptExecutionContext>::from(context, supplementName()));
if (!supplement) {
String databaseDirectoryIdentifier;
const GroupSettings* groupSettings = toWorkerGlobalScope(context)->groupSettings();
if (groupSettings)
databaseDirectoryIdentifier = groupSettings->indexedDBDatabasePath();
auto newSupplement = std::make_unique<WorkerGlobalScopeIndexedDatabase>(databaseDirectoryIdentifier);
supplement = newSupplement.get();
provideTo(context, supplementName(), WTF::move(newSupplement));
}
return supplement;
}
IDBFactory* WorkerGlobalScopeIndexedDatabase::indexedDB(ScriptExecutionContext* context)
{
return from(context)->indexedDB();
}
IDBFactory* WorkerGlobalScopeIndexedDatabase::indexedDB()
{
if (!m_factoryBackend)
m_factoryBackend = IDBFactoryBackendInterface::create(m_databaseDirectoryIdentifier);
if (!m_idbFactory)
m_idbFactory = IDBFactory::create(m_factoryBackend.get());
return m_idbFactory.get();
}
}
#endif // ENABLE(INDEXED_DATABASE)