diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
commit | 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch) | |
tree | 46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/Modules/webdatabase/DatabaseTask.h | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/WebCore/Modules/webdatabase/DatabaseTask.h')
-rw-r--r-- | Source/WebCore/Modules/webdatabase/DatabaseTask.h | 127 |
1 files changed, 40 insertions, 87 deletions
diff --git a/Source/WebCore/Modules/webdatabase/DatabaseTask.h b/Source/WebCore/Modules/webdatabase/DatabaseTask.h index 1edaf8661..fe49bcdc1 100644 --- a/Source/WebCore/Modules/webdatabase/DatabaseTask.h +++ b/Source/WebCore/Modules/webdatabase/DatabaseTask.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007, 2008, 2013 Apple Inc. All rights reserved. + * Copyright (C) 2007, 2008, 2013, 2015 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -10,7 +10,7 @@ * 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. - * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of + * 3. Neither the name of Apple Inc. ("Apple") nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * @@ -25,21 +25,14 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#ifndef DatabaseTask_h -#define DatabaseTask_h -#if ENABLE(SQL_DATABASE) +#pragma once -#include "DatabaseBackend.h" -#include "DatabaseBasicTypes.h" -#include "DatabaseError.h" +#include "ExceptionOr.h" #include "SQLTransactionBackend.h" -#include <wtf/OwnPtr.h> -#include <wtf/PassOwnPtr.h> -#include <wtf/PassRefPtr.h> -#include <wtf/Threading.h> +#include <wtf/Condition.h> +#include <wtf/Lock.h> #include <wtf/Vector.h> -#include <wtf/text/WTFString.h> namespace WebCore { @@ -62,143 +55,103 @@ public: #endif private: - bool m_taskCompleted; - Mutex m_synchronousMutex; - ThreadCondition m_synchronousCondition; + bool m_taskCompleted { false }; + Lock m_synchronousMutex; + Condition m_synchronousCondition; #ifndef NDEBUG - bool m_hasCheckedForTermination; + bool m_hasCheckedForTermination { false }; #endif }; class DatabaseTask { - WTF_MAKE_NONCOPYABLE(DatabaseTask); WTF_MAKE_FAST_ALLOCATED; + WTF_MAKE_FAST_ALLOCATED; public: virtual ~DatabaseTask(); -#if PLATFORM(IOS) - virtual bool shouldPerformWhilePaused() const = 0; -#endif - void performTask(); - DatabaseBackend* database() const { return m_database; } -#ifndef NDEBUG + Database& database() const { return m_database; } + +#if !ASSERT_DISABLED bool hasSynchronizer() const { return m_synchronizer; } bool hasCheckedForTermination() const { return m_synchronizer->hasCheckedForTermination(); } #endif protected: - DatabaseTask(DatabaseBackend*, DatabaseTaskSynchronizer*); + DatabaseTask(Database&, DatabaseTaskSynchronizer*); private: virtual void doPerformTask() = 0; - DatabaseBackend* m_database; + Database& m_database; DatabaseTaskSynchronizer* m_synchronizer; #if !LOG_DISABLED virtual const char* debugTaskName() const = 0; - bool m_complete; +#endif + +#if !ASSERT_DISABLED + bool m_complete { false }; #endif }; -class DatabaseBackend::DatabaseOpenTask : public DatabaseTask { +class DatabaseOpenTask final : public DatabaseTask { public: - static std::unique_ptr<DatabaseOpenTask> create(DatabaseBackend* db, bool setVersionInNewDatabase, DatabaseTaskSynchronizer* synchronizer, DatabaseError& error, String& errorMessage, bool& success) - { - return std::unique_ptr<DatabaseOpenTask>(new DatabaseOpenTask(db, setVersionInNewDatabase, synchronizer, error, errorMessage, success)); - } - -#if PLATFORM(IOS) - virtual bool shouldPerformWhilePaused() const override { return true; } -#endif + DatabaseOpenTask(Database&, bool setVersionInNewDatabase, DatabaseTaskSynchronizer&, ExceptionOr<void>& result); private: - DatabaseOpenTask(DatabaseBackend*, bool setVersionInNewDatabase, DatabaseTaskSynchronizer*, DatabaseError&, String& errorMessage, bool& success); + void doPerformTask() final; - virtual void doPerformTask(); #if !LOG_DISABLED - virtual const char* debugTaskName() const; + const char* debugTaskName() const final; #endif bool m_setVersionInNewDatabase; - DatabaseError& m_error; - String& m_errorMessage; - bool& m_success; + ExceptionOr<void>& m_result; }; -class DatabaseBackend::DatabaseCloseTask : public DatabaseTask { +class DatabaseCloseTask final : public DatabaseTask { public: - static std::unique_ptr<DatabaseCloseTask> create(DatabaseBackend* db, DatabaseTaskSynchronizer* synchronizer) - { - return std::unique_ptr<DatabaseCloseTask>(new DatabaseCloseTask(db, synchronizer)); - } - -#if PLATFORM(IOS) - virtual bool shouldPerformWhilePaused() const override { return true; } -#endif + DatabaseCloseTask(Database&, DatabaseTaskSynchronizer&); private: - DatabaseCloseTask(DatabaseBackend*, DatabaseTaskSynchronizer*); + void doPerformTask() final; - virtual void doPerformTask(); #if !LOG_DISABLED - virtual const char* debugTaskName() const; + const char* debugTaskName() const final; #endif }; -class DatabaseBackend::DatabaseTransactionTask : public DatabaseTask { +class DatabaseTransactionTask final : public DatabaseTask { public: + explicit DatabaseTransactionTask(RefPtr<SQLTransaction>&&); virtual ~DatabaseTransactionTask(); - // Transaction task is never synchronous, so no 'synchronizer' parameter. - static std::unique_ptr<DatabaseTransactionTask> create(PassRefPtr<SQLTransactionBackend> transaction) - { - return std::unique_ptr<DatabaseTransactionTask>(new DatabaseTransactionTask(transaction)); - } - -#if PLATFORM(IOS) - virtual bool shouldPerformWhilePaused() const override; -#endif - - SQLTransactionBackend* transaction() const { return m_transaction.get(); } + SQLTransaction* transaction() const { return m_transaction.get(); } private: - explicit DatabaseTransactionTask(PassRefPtr<SQLTransactionBackend>); + void doPerformTask() final; - virtual void doPerformTask(); #if !LOG_DISABLED - virtual const char* debugTaskName() const; + const char* debugTaskName() const final; #endif - RefPtr<SQLTransactionBackend> m_transaction; + RefPtr<SQLTransaction> m_transaction; bool m_didPerformTask; }; -class DatabaseBackend::DatabaseTableNamesTask : public DatabaseTask { +class DatabaseTableNamesTask final : public DatabaseTask { public: - static std::unique_ptr<DatabaseTableNamesTask> create(DatabaseBackend* db, DatabaseTaskSynchronizer* synchronizer, Vector<String>& names) - { - return std::unique_ptr<DatabaseTableNamesTask>(new DatabaseTableNamesTask(db, synchronizer, names)); - } - -#if PLATFORM(IOS) - virtual bool shouldPerformWhilePaused() const override { return true; } -#endif + DatabaseTableNamesTask(Database&, DatabaseTaskSynchronizer&, Vector<String>& result); private: - DatabaseTableNamesTask(DatabaseBackend*, DatabaseTaskSynchronizer*, Vector<String>& names); + void doPerformTask() final; - virtual void doPerformTask(); #if !LOG_DISABLED - virtual const char* debugTaskName() const; + const char* debugTaskName() const override; #endif - Vector<String>& m_tableNames; + Vector<String>& m_result; }; } // namespace WebCore - -#endif // ENABLE(SQL_DATABASE) - -#endif // DatabaseTask_h |