summaryrefslogtreecommitdiffstats
path: root/webkit/database/database_connections.h
diff options
context:
space:
mode:
authormichaeln@google.com <michaeln@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-01 20:40:35 +0000
committermichaeln@google.com <michaeln@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-01 20:40:35 +0000
commit1d4dbdeaa23f3459fb710c8b2fe4d444266d952a (patch)
tree94064bd57faaba18d1ee7a9fe514628f58a6be55 /webkit/database/database_connections.h
parent228d0659a51d0581c743b5b81921d43c7fd81e35 (diff)
downloadchromium_src-1d4dbdeaa23f3459fb710c8b2fe4d444266d952a.zip
chromium_src-1d4dbdeaa23f3459fb710c8b2fe4d444266d952a.tar.gz
chromium_src-1d4dbdeaa23f3459fb710c8b2fe4d444266d952a.tar.bz2
Changes to WebDatabaseObserverImpl and SimpleDatabaseSystem required to have a chance of working properly with v8 isolates. With isolates the database related interfaces will be called on multiple threads and the previous impl was not put together with that in mind.
BUG=none TEST=existing tests pass (no way to test with isolates yet) Review URL: http://codereview.chromium.org/6677088 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@80218 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/database/database_connections.h')
-rw-r--r--webkit/database/database_connections.h36
1 files changed, 35 insertions, 1 deletions
diff --git a/webkit/database/database_connections.h b/webkit/database/database_connections.h
index 433bb3f..6a594b2 100644
--- a/webkit/database/database_connections.h
+++ b/webkit/database/database_connections.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -8,7 +8,13 @@
#include <map>
#include <vector>
+#include "base/memory/ref_counted.h"
#include "base/string16.h"
+#include "base/synchronization/lock.h"
+
+namespace base {
+class MessageLoopProxy;
+}
namespace webkit_database {
@@ -40,6 +46,34 @@ class DatabaseConnections {
int num_connections);
};
+// A wrapper class that provides thread-safety and the
+// ability to wait until all connections have closed.
+// Intended for use in renderer processes.
+class DatabaseConnectionsWrapper
+ : public base::RefCountedThreadSafe<DatabaseConnectionsWrapper> {
+ public:
+ DatabaseConnectionsWrapper();
+
+ // The Wait and Has methods should only be called on the
+ // main thread (the thread on which the wrapper is constructed).
+ void WaitForAllDatabasesToClose();
+ bool HasOpenConnections();
+
+ // Add and Remove may be called on any thread.
+ void AddOpenConnection(const string16& origin_identifier,
+ const string16& database_name);
+ void RemoveOpenConnection(const string16& origin_identifier,
+ const string16& database_name);
+ private:
+ ~DatabaseConnectionsWrapper();
+ friend class base::RefCountedThreadSafe<DatabaseConnectionsWrapper>;
+
+ bool waiting_for_dbs_to_close_;
+ base::Lock open_connections_lock_;
+ DatabaseConnections open_connections_;
+ scoped_refptr<base::MessageLoopProxy> main_thread_;
+};
+
} // namespace webkit_database
#endif // WEBKIT_DATABASE_DATABASE_CONNECTIONS_H_