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

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: remove some includes Created 9 years 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 6f7deef941d45ae01d482dbef49e5eb88dc3d2d3..d08bd9adb13a83be63d657b2fe318f21d2dbbbc2 100644
--- a/content/renderer/indexed_db_dispatcher.h
+++ b/content/renderer/indexed_db_dispatcher.h
@@ -11,16 +11,25 @@
#include "base/id_map.h"
#include "base/nullable_string16.h"
-#include "ipc/ipc_channel.h"
+#include "base/threading/thread_local.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebExceptionCode.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBCallbacks.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBDatabase.h"
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBDatabaseCallbacks.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBObjectStore.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBTransactionCallbacks.h"
+#include "webkit/glue/worker_task_runner.h"
class IndexedDBKey;
+struct IndexedDBMsg_CallbacksSuccessCursorContinue_Params;
+struct IndexedDBMsg_CallbacksSuccessCursorPrefetch_Params;
+struct IndexedDBMsg_CallbacksSuccessIDBCursor_Params;
class RendererWebIDBCursorImpl;
+namespace IPC {
+class Message;
+}
+
namespace WebKit {
class WebFrame;
class WebIDBKeyRange;
@@ -32,13 +41,18 @@ class SerializedScriptValue;
}
// Handle the indexed db related communication for this entire renderer.
michaeln 2011/12/14 02:15:53 comment might be misleading now that there are thr
dgrogan 2011/12/15 02:47:44 Updated.
-class IndexedDBDispatcher : public IPC::Channel::Listener {
+class IndexedDBDispatcher : public webkit_glue::WorkerTaskRunner::Observer {
public:
- IndexedDBDispatcher();
virtual ~IndexedDBDispatcher();
+ static void Init();
+ // This returns the dispatcher associated with the current WebWorkerRunLoop,
michaeln 2011/12/14 02:15:53 The comment is a little misleading since it will a
dgrogan 2011/12/15 02:47:44 Renaming Instance to ThreadSpecificInstance should
+ // if being run from a worker.
+ static IndexedDBDispatcher* Instance();
michaeln 2011/12/14 02:15:53 maybe name this as ThreadSpecificInstance() for cl
dgrogan 2011/12/15 02:47:44 Done.
+
+ // webkit_glue::WorkerTaskRunner::Observer implementation.
+ virtual void OnWorkerRunLoopStopped();
- // 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(
@@ -169,36 +183,41 @@ class IndexedDBDispatcher : public IPC::Channel::Listener {
static int32 TransactionId(const WebKit::WebIDBTransaction& transaction);
private:
+ IndexedDBDispatcher();
// IDBCallback message handlers.
void OnSuccessNull(int32 response_id);
- void OnSuccessIDBDatabase(int32 response_id, int32 object_id);
- void OnSuccessIndexedDBKey(int32 response_id, const IndexedDBKey& key);
- void OnSuccessIDBTransaction(int32 response_id, int32 object_id);
- void OnSuccessOpenCursor(int32 response_id, int32 object_id,
- const IndexedDBKey& key,
- const IndexedDBKey& primary_key,
- const content::SerializedScriptValue& value);
- void OnSuccessCursorContinue(int32 response_id,
- int32 cursor_id,
- const IndexedDBKey& key,
- const IndexedDBKey& primary_key,
- const content::SerializedScriptValue& value);
+ void OnSuccessIDBDatabase(int32 thread_id,
+ int32 response_id,
+ int32 object_id);
+ void OnSuccessIndexedDBKey(int32 thread_id,
+ int32 response_id,
+ const IndexedDBKey& key);
+ void OnSuccessIDBTransaction(int32 thread_id,
+ int32 response_id,
+ int32 object_id);
+ void OnSuccessOpenCursor(
+ const IndexedDBMsg_CallbacksSuccessIDBCursor_Params& p);
+ void OnSuccessCursorContinue(
+ const IndexedDBMsg_CallbacksSuccessCursorContinue_Params& p);
void OnSuccessCursorPrefetch(
- int32 response_id,
- int32 cursor_id,
- const std::vector<IndexedDBKey>& keys,
- const std::vector<IndexedDBKey>& primary_keys,
- const std::vector<content::SerializedScriptValue>& values);
- void OnSuccessStringList(int32 response_id,
+ const IndexedDBMsg_CallbacksSuccessCursorPrefetch_Params& p);
+ void OnSuccessStringList(int32 thread_id,
+ int32 response_id,
const std::vector<string16>& value);
void OnSuccessSerializedScriptValue(
+ int32 thread_id,
int32 response_id,
const content::SerializedScriptValue& value);
- void OnError(int32 response_id, int code, const string16& message);
- void OnBlocked(int32 response_id);
- void OnAbort(int32 transaction_id);
- void OnComplete(int32 transaction_id);
- void OnVersionChange(int32 database_id, const string16& newVersion);
+ void OnError(int32 thread_id,
+ int32 response_id,
+ int code,
+ const string16& message);
+ void OnBlocked(int32 thread_id, int32 response_id);
+ void OnAbort(int32 thread_id, int32 transaction_id);
+ void OnComplete(int32 thread_id, int32 transaction_id);
+ void OnVersionChange(int32 thread_id,
+ int32 database_id,
+ const string16& newVersion);
// Reset cursor prefetch caches for all cursors except exception_cursor_id.
void ResetCursorPrefetchCaches(int32 exception_cursor_id = -1);
@@ -214,6 +233,8 @@ class IndexedDBDispatcher : public IPC::Channel::Listener {
// Map from cursor id to RendererWebIDBCursorImpl.
std::map<int32, RendererWebIDBCursorImpl*> cursors_;
+ static base::ThreadLocalPointer<IndexedDBDispatcher>* idb_dispatcher_tls_;
+
DISALLOW_COPY_AND_ASSIGN(IndexedDBDispatcher);
};

Powered by Google App Engine
This is Rietveld 408576698