blob: 8696344d91d8257f0bdf6a0cda81b0eb30a2f65e [file] [log] [blame]
/*
* Copyright (C) 2012 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "config.h"
#include "DatabaseServer.h"
#include "Database.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::deleteAllDatabasesImmediately()
{
DatabaseTracker::tracker().deleteAllDatabasesImmediately();
}
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();
}
RefPtr<Database> 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<Database> database;
bool success = false; // Make some older compilers happy.
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<Database> 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.copyRef(), name, expectedVersion, displayName, estimatedSize));
if (!database->openAndVerifyVersion(setVersionInNewDatabase, error, errorMessage))
return nullptr;
DatabaseTracker::tracker().setDatabaseDetails(backendContext->securityOrigin(), name, displayName, estimatedSize);
return database;
}
} // namespace WebCore