DatabaseServer.cpp [plain text]
#include "config.h"
#include "DatabaseServer.h"
#include "Database.h"
#include "DatabaseBackend.h"
#include "DatabaseContext.h"
#include "DatabaseTracker.h"
namespace WebCore {
void DatabaseServer::initialize(const String& databasePath)
{
DatabaseTracker::initializeTracker(databasePath);
}
void DatabaseServer::setClient(DatabaseManagerClient* client)
{
DatabaseTracker::tracker().setClient(client);
}
String DatabaseServer::databaseDirectoryPath() const
{
return DatabaseTracker::tracker().databaseDirectoryPath();
}
void DatabaseServer::setDatabaseDirectoryPath(const String& path)
{
DatabaseTracker::tracker().setDatabaseDirectoryPath(path);
}
String DatabaseServer::fullPathForDatabase(SecurityOrigin* origin, const String& name, bool createIfDoesNotExist)
{
return DatabaseTracker::tracker().fullPathForDatabase(origin, name, createIfDoesNotExist);
}
bool DatabaseServer::hasEntryForOrigin(SecurityOrigin* origin)
{
return DatabaseTracker::tracker().hasEntryForOrigin(origin);
}
void DatabaseServer::origins(Vector<RefPtr<SecurityOrigin>>& result)
{
DatabaseTracker::tracker().origins(result);
}
bool DatabaseServer::databaseNamesForOrigin(SecurityOrigin* origin, Vector<String>& result)
{
return DatabaseTracker::tracker().databaseNamesForOrigin(origin, result);
}
DatabaseDetails DatabaseServer::detailsForNameAndOrigin(const String& name, SecurityOrigin* origin)
{
return DatabaseTracker::tracker().detailsForNameAndOrigin(name, origin);
}
unsigned long long DatabaseServer::usageForOrigin(SecurityOrigin* origin)
{
return DatabaseTracker::tracker().usageForOrigin(origin);
}
unsigned long long DatabaseServer::quotaForOrigin(SecurityOrigin* origin)
{
return DatabaseTracker::tracker().quotaForOrigin(origin);
}
void DatabaseServer::setQuota(SecurityOrigin* origin, unsigned long long quotaSize)
{
DatabaseTracker::tracker().setQuota(origin, quotaSize);
}
void DatabaseServer::deleteAllDatabases()
{
DatabaseTracker::tracker().deleteAllDatabases();
}
bool DatabaseServer::deleteOrigin(SecurityOrigin* origin)
{
return DatabaseTracker::tracker().deleteOrigin(origin);
}
bool DatabaseServer::deleteDatabase(SecurityOrigin* origin, const String& name)
{
return DatabaseTracker::tracker().deleteDatabase(origin, name);
}
void DatabaseServer::closeAllDatabases()
{
DatabaseTracker::tracker().closeAllDatabases();
}
void DatabaseServer::interruptAllDatabasesForContext(const DatabaseContext* context)
{
DatabaseTracker::tracker().interruptAllDatabasesForContext(context);
}
RefPtr<DatabaseBackendBase> DatabaseServer::openDatabase(RefPtr<DatabaseContext>& backendContext, const String& name, const String& expectedVersion, const String& displayName, unsigned long estimatedSize, bool setVersionInNewDatabase, DatabaseError &error, String& errorMessage,
OpenAttempt attempt)
{
RefPtr<DatabaseBackendBase> database;
bool success = false;
switch (attempt) {
case FirstTryToOpenDatabase:
success = DatabaseTracker::tracker().canEstablishDatabase(backendContext.get(), name, estimatedSize, error);
break;
case RetryOpenDatabase:
success = DatabaseTracker::tracker().retryCanEstablishDatabase(backendContext.get(), name, estimatedSize, error);
}
if (success)
database = createDatabase(backendContext, name, expectedVersion, displayName, estimatedSize, setVersionInNewDatabase, error, errorMessage);
return database;
}
RefPtr<DatabaseBackendBase> DatabaseServer::createDatabase(RefPtr<DatabaseContext>& backendContext, const String& name, const String& expectedVersion, const String& displayName, unsigned long estimatedSize, bool setVersionInNewDatabase, DatabaseError& error, String& errorMessage)
{
RefPtr<Database> database = adoptRef(new Database(backendContext, name, expectedVersion, displayName, estimatedSize));
if (!database->openAndVerifyVersion(setVersionInNewDatabase, error, errorMessage))
return nullptr;
DatabaseTracker::tracker().setDatabaseDetails(backendContext->securityOrigin(), name, displayName, estimatedSize);
return database;
}
}