summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/WebKit/Source/modules/webdatabase/DatabaseSync.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/WebKit/Source/modules/webdatabase/DatabaseSync.h')
-rw-r--r--chromium/third_party/WebKit/Source/modules/webdatabase/DatabaseSync.h36
1 files changed, 26 insertions, 10 deletions
diff --git a/chromium/third_party/WebKit/Source/modules/webdatabase/DatabaseSync.h b/chromium/third_party/WebKit/Source/modules/webdatabase/DatabaseSync.h
index 64551d24df6..663c4154cc6 100644
--- a/chromium/third_party/WebKit/Source/modules/webdatabase/DatabaseSync.h
+++ b/chromium/third_party/WebKit/Source/modules/webdatabase/DatabaseSync.h
@@ -35,6 +35,7 @@
#include "modules/webdatabase/DatabaseBackendSync.h"
#include "modules/webdatabase/DatabaseBase.h"
#include "modules/webdatabase/DatabaseBasicTypes.h"
+#include "platform/heap/Handle.h"
#include "wtf/Forward.h"
#include "wtf/text/WTFString.h"
@@ -51,35 +52,50 @@ class SQLTransactionSyncCallback;
class SecurityOrigin;
// Instances of this class should be created and used only on the worker's context thread.
-class DatabaseSync : public DatabaseBase, public DatabaseBackendSync, public ScriptWrappable {
+class DatabaseSync FINAL : public DatabaseBackendSync, public DatabaseBase, public ScriptWrappable {
public:
virtual ~DatabaseSync();
+ virtual void trace(Visitor*) OVERRIDE;
void changeVersion(const String& oldVersion, const String& newVersion, PassOwnPtr<SQLTransactionSyncCallback>, ExceptionState&);
void transaction(PassOwnPtr<SQLTransactionSyncCallback>, ExceptionState&);
void readTransaction(PassOwnPtr<SQLTransactionSyncCallback>, ExceptionState&);
- virtual void closeImmediately();
+ virtual void closeImmediately() OVERRIDE;
+ void observeTransaction(SQLTransactionSync&);
const String& lastErrorMessage() const { return m_lastErrorMessage; }
void setLastErrorMessage(const String& message) { m_lastErrorMessage = message; }
- void setLastErrorMessage(const char* message, int sqliteCode)
- {
- setLastErrorMessage(String::format("%s (%d)", message, sqliteCode));
- }
void setLastErrorMessage(const char* message, int sqliteCode, const char* sqliteMessage)
{
setLastErrorMessage(String::format("%s (%d, %s)", message, sqliteCode, sqliteMessage));
}
private:
- DatabaseSync(PassRefPtr<DatabaseContext>, const String& name,
+ DatabaseSync(DatabaseContext*, const String& name,
const String& expectedVersion, const String& displayName, unsigned long estimatedSize);
- PassRefPtr<DatabaseBackendSync> backend();
- static PassRefPtr<DatabaseSync> create(ExecutionContext*, PassRefPtr<DatabaseBackendBase>);
+ static PassRefPtrWillBeRawPtr<DatabaseSync> create(ExecutionContext*, PassRefPtrWillBeRawPtr<DatabaseBackendBase>);
void runTransaction(PassOwnPtr<SQLTransactionSyncCallback>, bool readOnly, ExceptionState&);
- void rollbackTransaction(PassRefPtr<SQLTransactionSync>);
+ void rollbackTransaction(SQLTransactionSync&);
+#if ENABLE(OILPAN)
+ class TransactionObserver {
+ public:
+ explicit TransactionObserver(SQLTransactionSync& transaction) : m_transaction(transaction) { }
+ ~TransactionObserver();
+
+ private:
+ SQLTransactionSync& m_transaction;
+ };
+
+ // Need a Persistent field because a HeapHashMap entry should be removed
+ // just after a SQLTransactionSync becomes untraceable. If this field was a
+ // Member<>, we could not assume the destruction order of DatabaseSync,
+ // SQLTransactionSync, and the field. We can not make the field static
+ // because multiple worker threads create SQLTransactionSync.
+ GC_PLUGIN_IGNORE("http://crbug.com/353083")
+ PersistentHeapHashMap<WeakMember<SQLTransactionSync>, OwnPtr<TransactionObserver> > m_observers;
+#endif
String m_lastErrorMessage;