summaryrefslogtreecommitdiff
path: root/Source/WebCore/Modules/webdatabase/DatabaseBackend.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/Modules/webdatabase/DatabaseBackend.cpp')
-rw-r--r--Source/WebCore/Modules/webdatabase/DatabaseBackend.cpp177
1 files changed, 0 insertions, 177 deletions
diff --git a/Source/WebCore/Modules/webdatabase/DatabaseBackend.cpp b/Source/WebCore/Modules/webdatabase/DatabaseBackend.cpp
deleted file mode 100644
index 495e86a48..000000000
--- a/Source/WebCore/Modules/webdatabase/DatabaseBackend.cpp
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * Copyright (C) 2013 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 "DatabaseBackend.h"
-
-#if ENABLE(SQL_DATABASE)
-
-#include "ChangeVersionData.h"
-#include "ChangeVersionWrapper.h"
-#include "DatabaseBackendContext.h"
-#include "DatabaseTask.h"
-#include "DatabaseThread.h"
-#include "DatabaseTracker.h"
-#include "Logging.h"
-#include "SQLTransaction.h"
-#include "SQLTransactionBackend.h"
-#include "SQLTransactionClient.h"
-#include "SQLTransactionCoordinator.h"
-
-namespace WebCore {
-
-DatabaseBackend::DatabaseBackend(PassRefPtr<DatabaseBackendContext> databaseContext, const String& name, const String& expectedVersion, const String& displayName, unsigned long estimatedSize)
- : DatabaseBackendBase(databaseContext, name, expectedVersion, displayName, estimatedSize, DatabaseType::Async)
- , m_transactionInProgress(false)
- , m_isTransactionQueueEnabled(true)
-{
-}
-
-bool DatabaseBackend::openAndVerifyVersion(bool setVersionInNewDatabase, DatabaseError& error, String& errorMessage)
-{
- DatabaseTaskSynchronizer synchronizer;
- if (!databaseContext()->databaseThread() || databaseContext()->databaseThread()->terminationRequested(&synchronizer))
- return false;
-
- bool success = false;
- auto task = DatabaseOpenTask::create(this, setVersionInNewDatabase, &synchronizer, error, errorMessage, success);
- databaseContext()->databaseThread()->scheduleImmediateTask(std::move(task));
- synchronizer.waitForTaskCompletion();
-
- return success;
-}
-
-bool DatabaseBackend::performOpenAndVerify(bool setVersionInNewDatabase, DatabaseError& error, String& errorMessage)
-{
- if (DatabaseBackendBase::performOpenAndVerify(setVersionInNewDatabase, error, errorMessage)) {
- if (databaseContext()->databaseThread())
- databaseContext()->databaseThread()->recordDatabaseOpen(this);
-
- return true;
- }
-
- return false;
-}
-
-void DatabaseBackend::close()
-{
- ASSERT(databaseContext()->databaseThread());
- ASSERT(currentThread() == databaseContext()->databaseThread()->getThreadID());
-
- {
- MutexLocker locker(m_transactionInProgressMutex);
-
- // Clean up transactions that have not been scheduled yet:
- // Transaction phase 1 cleanup. See comment on "What happens if a
- // transaction is interrupted?" at the top of SQLTransactionBackend.cpp.
- RefPtr<SQLTransactionBackend> transaction;
- while (!m_transactionQueue.isEmpty()) {
- transaction = m_transactionQueue.takeFirst();
- transaction->notifyDatabaseThreadIsShuttingDown();
- }
-
- m_isTransactionQueueEnabled = false;
- m_transactionInProgress = false;
- }
-
- closeDatabase();
-
- // DatabaseThread keeps databases alive by referencing them in its
- // m_openDatabaseSet. DatabaseThread::recordDatabaseClose() will remove
- // this database from that set (which effectively deref's it). We hold on
- // to it with a local pointer here for a liitle longer, so that we can
- // unschedule any DatabaseTasks that refer to it before the database gets
- // deleted.
- Ref<DatabaseBackend> protect(*this);
- databaseContext()->databaseThread()->recordDatabaseClosed(this);
- databaseContext()->databaseThread()->unscheduleDatabaseTasks(this);
-}
-
-PassRefPtr<SQLTransactionBackend> DatabaseBackend::runTransaction(PassRefPtr<SQLTransaction> transaction,
- bool readOnly, const ChangeVersionData* data)
-{
- MutexLocker locker(m_transactionInProgressMutex);
- if (!m_isTransactionQueueEnabled)
- return 0;
-
- RefPtr<SQLTransactionWrapper> wrapper;
- if (data)
- wrapper = ChangeVersionWrapper::create(data->oldVersion(), data->newVersion());
-
- RefPtr<SQLTransactionBackend> transactionBackend = SQLTransactionBackend::create(this, transaction, wrapper, readOnly);
- m_transactionQueue.append(transactionBackend);
- if (!m_transactionInProgress)
- scheduleTransaction();
-
- return transactionBackend;
-}
-
-void DatabaseBackend::inProgressTransactionCompleted()
-{
- MutexLocker locker(m_transactionInProgressMutex);
- m_transactionInProgress = false;
- scheduleTransaction();
-}
-
-void DatabaseBackend::scheduleTransaction()
-{
- ASSERT(!m_transactionInProgressMutex.tryLock()); // Locked by caller.
- RefPtr<SQLTransactionBackend> transaction;
-
- if (m_isTransactionQueueEnabled && !m_transactionQueue.isEmpty())
- transaction = m_transactionQueue.takeFirst();
-
- if (transaction && databaseContext()->databaseThread()) {
- auto task = DatabaseTransactionTask::create(transaction);
- LOG(StorageAPI, "Scheduling DatabaseTransactionTask %p for transaction %p\n", task.get(), task->transaction());
- m_transactionInProgress = true;
- databaseContext()->databaseThread()->scheduleTask(std::move(task));
- } else
- m_transactionInProgress = false;
-}
-
-void DatabaseBackend::scheduleTransactionStep(SQLTransactionBackend* transaction)
-{
- if (!databaseContext()->databaseThread())
- return;
-
- auto task = DatabaseTransactionTask::create(transaction);
- LOG(StorageAPI, "Scheduling DatabaseTransactionTask %p for the transaction step\n", task.get());
- databaseContext()->databaseThread()->scheduleTask(std::move(task));
-}
-
-SQLTransactionClient* DatabaseBackend::transactionClient() const
-{
- return databaseContext()->databaseThread()->transactionClient();
-}
-
-SQLTransactionCoordinator* DatabaseBackend::transactionCoordinator() const
-{
- return databaseContext()->databaseThread()->transactionCoordinator();
-}
-
-} // namespace WebCore
-
-#endif // ENABLE(SQL_DATABASE)