diff options
Diffstat (limited to 'webkit/database/database_connections.h')
-rw-r--r-- | webkit/database/database_connections.h | 36 |
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_ |