Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(911)

Unified Diff: content/renderer/indexed_db_dispatcher.h

Issue 8747002: Dispatch IndexedDB IPC messages to worker threads (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/renderer/indexed_db_dispatcher.h
diff --git a/content/renderer/indexed_db_dispatcher.h b/content/renderer/indexed_db_dispatcher.h
index 28071580c195e2ce2c271bc67bf566306b97c46a..870d4536c6a7de5bc7a4aa78de97b052725ea9d2 100644
--- a/content/renderer/indexed_db_dispatcher.h
+++ b/content/renderer/indexed_db_dispatcher.h
@@ -11,6 +11,8 @@
#include "base/id_map.h"
#include "base/nullable_string16.h"
+#include "content/common/child_thread.h"
+#include "content/renderer/indexed_db_message_filter.h"
#include "ipc/ipc_channel.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebExceptionCode.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBCallbacks.h"
@@ -32,13 +34,14 @@ class SerializedScriptValue;
}
// Handle the indexed db related communication for this entire renderer.
-class IndexedDBDispatcher : public IPC::Channel::Listener {
+class IndexedDBDispatcher :
+ public base::RefCountedThreadSafe<IndexedDBDispatcher> {
public:
- IndexedDBDispatcher();
+ IndexedDBDispatcher(IndexedDBMessageFilter*);
virtual ~IndexedDBDispatcher();
- // IPC::Channel::Listener implementation.
- virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE;
+ void OnMessageReceived(const IPC::Message& msg);
+ void Send(IPC::Message* msg);
void RequestIDBFactoryGetDatabaseNames(
WebKit::WebIDBCallbacks* callbacks,
@@ -184,13 +187,47 @@ class IndexedDBDispatcher : public IPC::Channel::Listener {
void OnComplete(int32 transaction_id);
void OnVersionChange(int32 database_id, const string16& newVersion);
+ // This class facilitates mapping incoming ids to threads. It:
+ // * Gets process-unique ids for each stored IDBCallbacks.
+ // * Registers incoming transaction and database ids that are created in
+ // the browser process. We'll need to revisit this scheme if the browser
+ // stops generating unique ids.
+ // * Ensures, through IDMap, that it is only called on a single thread.
hans 2011/11/30 15:05:40 mabye point out in the comments that this map is i
dgrogan 2011/11/30 21:34:35 You're right. Updated the comments and name to re
michaeln 2011/11/30 21:48:14 "ThreadSafe" usually means safe to call from multi
dgrogan 2011/11/30 23:25:18 You're right. I renamed it CallbacksIDMap in a la
+ template<class T>
+ class ThreadSafeIDMap
hans 2011/11/30 15:05:40 ultra nit: curly brace on same line
dgrogan 2011/11/30 21:34:35 Done.
+ {
+ public:
+ ThreadSafeIDMap(IndexedDBMessageFilter* filter) {
+ filter_ = filter;
hans 2011/11/30 15:05:40 nit: maybe use constructor initializer list?
dgrogan 2011/11/30 21:34:35 Done.
+ }
+ void AddWithID(T* callbacks, int32 id) {
+ filter_->NotifyAddWithIDForType(id, callbacks);
+ map_.AddWithID(callbacks, id);
+ }
+ int32 Add(T* callbacks) {
+ int id = filter_->GetUniqueID();
+ map_.AddWithID(callbacks, id);
+ return id;
+ }
+ void Remove(int32 id) {
+ filter_->RemoveForType(id, (T*)NULL);
+ map_.Remove(id);
+ }
+ T* Lookup(int32 id) {
+ return map_.Lookup(id);
+ }
+ private:
+ // The filter is alive for the life of the process, nothing deletes it.
+ IndexedDBMessageFilter* filter_;
+ IDMap<T, IDMapOwnPointer> map_;
+ };
+
// Careful! WebIDBCallbacks wraps non-threadsafe data types. It must be
// destroyed and used on the same thread it was created on.
- IDMap<WebKit::WebIDBCallbacks, IDMapOwnPointer> pending_callbacks_;
- IDMap<WebKit::WebIDBTransactionCallbacks, IDMapOwnPointer>
+ ThreadSafeIDMap<WebKit::WebIDBCallbacks> pending_callbacks_;
+ ThreadSafeIDMap<WebKit::WebIDBTransactionCallbacks>
pending_transaction_callbacks_;
- IDMap<WebKit::WebIDBDatabaseCallbacks, IDMapOwnPointer>
- pending_database_callbacks_;
+ ThreadSafeIDMap<WebKit::WebIDBDatabaseCallbacks> pending_database_callbacks_;
// Map from cursor id to RendererWebIDBCursorImpl.
std::map<int32, RendererWebIDBCursorImpl*> cursors_;

Powered by Google App Engine
This is Rietveld 408576698