Index: Source/modules/webdatabase/DatabaseTask.h |
diff --git a/Source/modules/webdatabase/DatabaseTask.h b/Source/modules/webdatabase/DatabaseTask.h |
index 91866d7d0c9fb069e5cb251818fb360355a63130..cc9efafd0f0eefc65fe3d6f71b745d4e5c1047c1 100644 |
--- a/Source/modules/webdatabase/DatabaseTask.h |
+++ b/Source/modules/webdatabase/DatabaseTask.h |
@@ -25,7 +25,6 @@ |
* (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 |
@@ -35,7 +34,6 @@ |
#include "modules/webdatabase/DatabaseError.h" |
#include "modules/webdatabase/SQLTransactionBackend.h" |
#include "platform/Task.h" |
-#include "platform/TaskSynchronizer.h" |
#include "wtf/OwnPtr.h" |
#include "wtf/PassOwnPtr.h" |
#include "wtf/PassRefPtr.h" |
@@ -46,6 +44,33 @@ |
namespace WebCore { |
+// Can be used to wait until DatabaseTask is completed. |
+// Has to be passed into DatabaseTask::create to be associated with the task. |
+class DatabaseTaskSynchronizer { |
+ WTF_MAKE_NONCOPYABLE(DatabaseTaskSynchronizer); |
+public: |
+ DatabaseTaskSynchronizer(); |
+ |
+ // Called from main thread to wait until task is completed. |
+ void waitForTaskCompletion(); |
+ |
+ // Called by the task. |
+ void taskCompleted(); |
+ |
+#ifndef NDEBUG |
+ bool hasCheckedForTermination() const { return m_hasCheckedForTermination; } |
+ void setHasCheckedForTermination() { m_hasCheckedForTermination = true; } |
+#endif |
+ |
+private: |
+ bool m_taskCompleted; |
+ Mutex m_synchronousMutex; |
+ ThreadCondition m_synchronousCondition; |
+#ifndef NDEBUG |
+ bool m_hasCheckedForTermination; |
+#endif |
+}; |
+ |
class DatabaseTask : public blink::WebThread::Task { |
WTF_MAKE_NONCOPYABLE(DatabaseTask); WTF_MAKE_FAST_ALLOCATED; |
public: |
@@ -60,14 +85,14 @@ public: |
#endif |
protected: |
- DatabaseTask(DatabaseBackend*, TaskSynchronizer*); |
+ DatabaseTask(DatabaseBackend*, DatabaseTaskSynchronizer*); |
private: |
virtual void doPerformTask() = 0; |
virtual void taskCancelled() { } |
RefPtrWillBeCrossThreadPersistent<DatabaseBackend> m_database; |
- TaskSynchronizer* m_synchronizer; |
+ DatabaseTaskSynchronizer* m_synchronizer; |
#if !LOG_DISABLED |
virtual const char* debugTaskName() const = 0; |
@@ -77,13 +102,13 @@ private: |
class DatabaseBackend::DatabaseOpenTask FINAL : public DatabaseTask { |
public: |
- static PassOwnPtr<DatabaseOpenTask> create(DatabaseBackend* db, bool setVersionInNewDatabase, TaskSynchronizer* synchronizer, DatabaseError& error, String& errorMessage, bool& success) |
+ static PassOwnPtr<DatabaseOpenTask> create(DatabaseBackend* db, bool setVersionInNewDatabase, DatabaseTaskSynchronizer* synchronizer, DatabaseError& error, String& errorMessage, bool& success) |
{ |
return adoptPtr(new DatabaseOpenTask(db, setVersionInNewDatabase, synchronizer, error, errorMessage, success)); |
} |
private: |
- DatabaseOpenTask(DatabaseBackend*, bool setVersionInNewDatabase, TaskSynchronizer*, DatabaseError&, String& errorMessage, bool& success); |
+ DatabaseOpenTask(DatabaseBackend*, bool setVersionInNewDatabase, DatabaseTaskSynchronizer*, DatabaseError&, String& errorMessage, bool& success); |
virtual void doPerformTask() OVERRIDE; |
#if !LOG_DISABLED |
@@ -98,13 +123,13 @@ private: |
class DatabaseBackend::DatabaseCloseTask FINAL : public DatabaseTask { |
public: |
- static PassOwnPtr<DatabaseCloseTask> create(DatabaseBackend* db, TaskSynchronizer* synchronizer) |
+ static PassOwnPtr<DatabaseCloseTask> create(DatabaseBackend* db, DatabaseTaskSynchronizer* synchronizer) |
{ |
return adoptPtr(new DatabaseCloseTask(db, synchronizer)); |
} |
private: |
- DatabaseCloseTask(DatabaseBackend*, TaskSynchronizer*); |
+ DatabaseCloseTask(DatabaseBackend*, DatabaseTaskSynchronizer*); |
virtual void doPerformTask() OVERRIDE; |
#if !LOG_DISABLED |
@@ -138,13 +163,13 @@ private: |
class DatabaseBackend::DatabaseTableNamesTask FINAL : public DatabaseTask { |
public: |
- static PassOwnPtr<DatabaseTableNamesTask> create(DatabaseBackend* db, TaskSynchronizer* synchronizer, Vector<String>& names) |
+ static PassOwnPtr<DatabaseTableNamesTask> create(DatabaseBackend* db, DatabaseTaskSynchronizer* synchronizer, Vector<String>& names) |
{ |
return adoptPtr(new DatabaseTableNamesTask(db, synchronizer, names)); |
} |
private: |
- DatabaseTableNamesTask(DatabaseBackend*, TaskSynchronizer*, Vector<String>& names); |
+ DatabaseTableNamesTask(DatabaseBackend*, DatabaseTaskSynchronizer*, Vector<String>& names); |
virtual void doPerformTask() OVERRIDE; |
#if !LOG_DISABLED |