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

Unified Diff: content/browser/in_process_webkit/indexed_db_dispatcher_host.cc

Issue 11567029: Proxy new objectstore/index methods through IPC (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Fix nits, use faster copies Created 7 years, 12 months 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/browser/in_process_webkit/indexed_db_dispatcher_host.cc
diff --git a/content/browser/in_process_webkit/indexed_db_dispatcher_host.cc b/content/browser/in_process_webkit/indexed_db_dispatcher_host.cc
index 3f46966c2b36c15e7d7d16f288e364a65a3cba00..5d791afd600ccce243877f25f7ef5b1e75e95e43 100644
--- a/content/browser/in_process_webkit/indexed_db_dispatcher_host.cc
+++ b/content/browser/in_process_webkit/indexed_db_dispatcher_host.cc
@@ -210,7 +210,7 @@ int64 IndexedDBDispatcherHost::HostTransactionId(int64 transaction_id) {
COMPILE_ASSERT(sizeof(base::ProcessId) <= sizeof(int32),
Process_ID_must_fit_in_32_bits);
- return transaction_id |= (static_cast<uint64>(pid) << 32);
+ return transaction_id | (static_cast<uint64>(pid) << 32);
}
WebIDBCursor* IndexedDBDispatcherHost::GetCursorFromId(int32 ipc_cursor_id) {
@@ -361,6 +361,16 @@ bool IndexedDBDispatcherHost::DatabaseDispatcherHost::OnMessageReceived(
OnCreateTransaction)
IPC_MESSAGE_HANDLER(IndexedDBHostMsg_DatabaseClose, OnClose)
IPC_MESSAGE_HANDLER(IndexedDBHostMsg_DatabaseDestroyed, OnDestroyed)
+ IPC_MESSAGE_HANDLER(IndexedDBHostMsg_DatabaseGet, OnGet)
+ IPC_MESSAGE_HANDLER(IndexedDBHostMsg_DatabasePut, OnPut)
+ IPC_MESSAGE_HANDLER(IndexedDBHostMsg_DatabaseSetIndexKeys,
+ OnSetIndexKeys)
+ IPC_MESSAGE_HANDLER(IndexedDBHostMsg_DatabaseSetIndexesReady,
+ OnSetIndexesReady)
+ IPC_MESSAGE_HANDLER(IndexedDBHostMsg_DatabaseOpenCursor, OnOpenCursor)
+ IPC_MESSAGE_HANDLER(IndexedDBHostMsg_DatabaseCount, OnCount)
+ IPC_MESSAGE_HANDLER(IndexedDBHostMsg_DatabaseDeleteRange, OnDeleteRange)
+ IPC_MESSAGE_HANDLER(IndexedDBHostMsg_DatabaseClear, OnClear)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
return handled;
@@ -491,6 +501,154 @@ void IndexedDBDispatcherHost::DatabaseDispatcherHost::OnDestroyed(
parent_->DestroyObject(&map_, ipc_object_id);
}
+void IndexedDBDispatcherHost::DatabaseDispatcherHost::OnGet(
+ const IndexedDBHostMsg_DatabaseGet_Params& params) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::WEBKIT_DEPRECATED));
+ WebIDBDatabase* database = parent_->GetOrTerminateProcess(
+ &map_, params.ipc_database_id);
+ if (!database)
+ return;
+
+ scoped_ptr<WebIDBCallbacks> callbacks(
+ new IndexedDBCallbacks<WebSerializedScriptValue>(
+ parent_, params.ipc_thread_id,
+ params.ipc_response_id));
+ database->get(parent_->HostTransactionId(params.transaction_id),
+ params.object_store_id,
+ params.index_id,
+ params.key_range, params.key_only, callbacks.release());
+}
+
+void IndexedDBDispatcherHost::DatabaseDispatcherHost::OnPut(
+ const IndexedDBHostMsg_DatabasePut_Params& params) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::WEBKIT_DEPRECATED));
+
+ WebIDBDatabase* database = parent_->GetOrTerminateProcess(
+ &map_, params.ipc_database_id);
+ if (!database)
+ return;
+ scoped_ptr<WebIDBCallbacks> callbacks(
+ new IndexedDBCallbacks<WebIDBKey>(parent_, params.ipc_thread_id,
+ params.ipc_response_id));
+
+ WebVector<unsigned char> value(params.value);
+ database->put(parent_->HostTransactionId(params.transaction_id),
+ params.object_store_id,
+ &value, params.key,
+ params.put_mode, callbacks.release(),
+ params.index_ids,
+ params.index_keys);
+ WebIDBTransactionIDToSizeMap* map =
+ &parent_->database_dispatcher_host_->transaction_size_map_;
+ // Size can't be big enough to overflow because it represents the
+ // actual bytes passed through IPC.
+ int64 transaction_id = parent_->HostTransactionId(params.transaction_id);
+ (*map)[transaction_id] += params.value.size();
+}
+
+void IndexedDBDispatcherHost::DatabaseDispatcherHost::OnSetIndexKeys(
+ const IndexedDBHostMsg_DatabaseSetIndexKeys_Params& params) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::WEBKIT_DEPRECATED));
+ WebIDBDatabase* database = parent_->GetOrTerminateProcess(
+ &map_, params.ipc_database_id);
+ if (!database)
+ return;
+
+ database->setIndexKeys(parent_->HostTransactionId(params.transaction_id),
+ params.object_store_id,
+ params.primary_key, params.index_ids,
+ params.index_keys);
+}
+
+void IndexedDBDispatcherHost::DatabaseDispatcherHost::OnSetIndexesReady(
+ int32 ipc_database_id,
+ int64 transaction_id,
+ int64 object_store_id,
+ const std::vector<int64>& index_ids) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::WEBKIT_DEPRECATED));
+ WebIDBDatabase* database = parent_->GetOrTerminateProcess(
+ &map_, ipc_database_id);
+ if (!database)
+ return;
+
+ database->setIndexesReady(parent_->HostTransactionId(transaction_id),
+ object_store_id,
+ WebVector<long long>(index_ids));
+}
+
+void IndexedDBDispatcherHost::DatabaseDispatcherHost::OnOpenCursor(
+ const IndexedDBHostMsg_DatabaseOpenCursor_Params& params) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::WEBKIT_DEPRECATED));
+ WebIDBDatabase* database = parent_->GetOrTerminateProcess(
+ &map_, params.ipc_database_id);
+ if (!database)
+ return;
+
+ scoped_ptr<WebIDBCallbacks> callbacks(
+ new IndexedDBCallbacks<WebIDBCursor>(parent_, params.ipc_thread_id,
+ params.ipc_response_id, -1));
+ database->openCursor(
+ parent_->HostTransactionId(params.transaction_id),
+ params.object_store_id, params.index_id,
+ params.key_range, params.direction, params.key_only, params.task_type,
+ callbacks.release());
+}
+
+void IndexedDBDispatcherHost::DatabaseDispatcherHost::OnCount(
+ const IndexedDBHostMsg_DatabaseCount_Params& params) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::WEBKIT_DEPRECATED));
+ WebIDBDatabase* database = parent_->GetOrTerminateProcess(
+ &map_, params.ipc_database_id);
+ if (!database)
+ return;
+
+ scoped_ptr<WebIDBCallbacks> callbacks(
+ new IndexedDBCallbacks<WebSerializedScriptValue>(
+ parent_, params.ipc_thread_id,
+ params.ipc_response_id));
+ database->count(
+ parent_->HostTransactionId(params.transaction_id),
+ params.object_store_id, params.index_id,
+ params.key_range, callbacks.release());
+}
+
+void IndexedDBDispatcherHost::DatabaseDispatcherHost::OnDeleteRange(
+ const IndexedDBHostMsg_DatabaseDeleteRange_Params& params) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::WEBKIT_DEPRECATED));
+ WebIDBDatabase* database = parent_->GetOrTerminateProcess(
+ &map_, params.ipc_database_id);
+ if (!database)
+ return;
+
+ scoped_ptr<WebIDBCallbacks> callbacks(
+ new IndexedDBCallbacks<WebSerializedScriptValue>(
+ parent_, params.ipc_thread_id,
+ params.ipc_response_id));
+ database->deleteRange(parent_->HostTransactionId(params.transaction_id),
+ params.object_store_id,
+ params.key_range, callbacks.release());
+}
+
+void IndexedDBDispatcherHost::DatabaseDispatcherHost::OnClear(
+ int32 ipc_thread_id,
+ int32 ipc_response_id,
+ int32 ipc_database_id,
+ int64 transaction_id,
+ int64 object_store_id) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::WEBKIT_DEPRECATED));
+ WebIDBDatabase* database = parent_->GetOrTerminateProcess(
+ &map_, ipc_database_id);
+ if (!database)
+ return;
+
+ scoped_ptr<WebIDBCallbacks> callbacks(
+ new IndexedDBCallbacks<WebSerializedScriptValue>(
+ parent_, ipc_thread_id,
+ ipc_response_id));
+
+ database->clear(parent_->HostTransactionId(transaction_id),
+ object_store_id, callbacks.release());
+}
//////////////////////////////////////////////////////////////////////
// IndexedDBDispatcherHost::IndexDispatcherHost
@@ -719,8 +877,8 @@ void IndexedDBDispatcherHost::ObjectStoreDispatcherHost::OnPut(
*idb_transaction, params.index_ids,
params.index_keys);
int64 size = UTF16ToUTF8(params.serialized_value.data()).size();
- WebIDBTransactionIDToSizeMap* map =
- &parent_->transaction_dispatcher_host_->transaction_size_map_;
+ WebIDBTransactionIPCIDToSizeMap* map =
+ &parent_->transaction_dispatcher_host_->transaction_ipc_size_map_;
(*map)[params.ipc_transaction_id] += size;
}
@@ -1083,7 +1241,7 @@ void IndexedDBDispatcherHost::TransactionDispatcherHost::OnCommit(
// http://crbug.com/113118
if (parent_->Context()->WouldBeOverQuota(
transaction_url_map_[ipc_transaction_id],
- transaction_size_map_[ipc_transaction_id])) {
+ transaction_ipc_size_map_[ipc_transaction_id])) {
idb_transaction->abort();
return;
}
@@ -1129,7 +1287,7 @@ void IndexedDBDispatcherHost::TransactionDispatcherHost::OnDestroyed(
int32 ipc_object_id) {
// TODO(dgrogan): This doesn't seem to be happening with some version change
// transactions. Possibly introduced with integer version support.
- transaction_size_map_.erase(ipc_object_id);
+ transaction_ipc_size_map_.erase(ipc_object_id);
transaction_url_map_.erase(ipc_object_id);
parent_->DestroyObject(&map_, ipc_object_id);
}
« no previous file with comments | « content/browser/in_process_webkit/indexed_db_dispatcher_host.h ('k') | content/common/indexed_db/indexed_db_dispatcher.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698