| Index: chrome/browser/in_process_webkit/indexed_db_dispatcher_host.cc
|
| diff --git a/chrome/browser/in_process_webkit/indexed_db_dispatcher_host.cc b/chrome/browser/in_process_webkit/indexed_db_dispatcher_host.cc
|
| index 960353059f33da301a0f740c2e4a6ed5a5c90c5d..d0af866717515b2e9ae3a6c681f1f5c41fe9ab98 100644
|
| --- a/chrome/browser/in_process_webkit/indexed_db_dispatcher_host.cc
|
| +++ b/chrome/browser/in_process_webkit/indexed_db_dispatcher_host.cc
|
| @@ -20,7 +20,9 @@
|
| #include "third_party/WebKit/WebKit/chromium/public/WebIDBIndex.h"
|
| #include "third_party/WebKit/WebKit/chromium/public/WebIDBFactory.h"
|
| #include "third_party/WebKit/WebKit/chromium/public/WebIDBObjectStore.h"
|
| +#include "third_party/WebKit/WebKit/chromium/public/WebIDBTransaction.h"
|
| #include "third_party/WebKit/WebKit/chromium/public/WebSecurityOrigin.h"
|
| +#include "third_party/WebKit/WebKit/chromium/public/WebVector.h"
|
|
|
| using WebKit::WebDOMStringList;
|
| using WebKit::WebIDBCursor;
|
| @@ -30,8 +32,10 @@ using WebKit::WebIDBIndex;
|
| using WebKit::WebIDBKey;
|
| using WebKit::WebIDBKeyRange;
|
| using WebKit::WebIDBObjectStore;
|
| +using WebKit::WebIDBTransaction;
|
| using WebKit::WebSecurityOrigin;
|
| using WebKit::WebSerializedScriptValue;
|
| +using WebKit::WebVector;
|
|
|
| IndexedDBDispatcherHost::IndexedDBDispatcherHost(
|
| IPC::Message::Sender* sender, WebKitContext* webkit_context)
|
| @@ -45,6 +49,8 @@ IndexedDBDispatcherHost::IndexedDBDispatcherHost(
|
| new ObjectStoreDispatcherHost(this))),
|
| ALLOW_THIS_IN_INITIALIZER_LIST(cursor_dispatcher_host_(
|
| new CursorDispatcherHost(this))),
|
| + ALLOW_THIS_IN_INITIALIZER_LIST(transaction_dispatcher_host_(
|
| + new TransactionDispatcherHost(this))),
|
| process_handle_(0) {
|
| DCHECK(sender_);
|
| DCHECK(webkit_context_.get());
|
| @@ -92,6 +98,7 @@ bool IndexedDBDispatcherHost::OnMessageReceived(const IPC::Message& message) {
|
| case ViewHostMsg_IDBCursorKey::ID:
|
| case ViewHostMsg_IDBCursorValue::ID:
|
| case ViewHostMsg_IDBFactoryOpen::ID:
|
| + case ViewHostMsg_IDBFactoryAbortPendingTransactions::ID:
|
| case ViewHostMsg_IDBDatabaseName::ID:
|
| case ViewHostMsg_IDBDatabaseDescription::ID:
|
| case ViewHostMsg_IDBDatabaseVersion::ID:
|
| @@ -99,6 +106,7 @@ bool IndexedDBDispatcherHost::OnMessageReceived(const IPC::Message& message) {
|
| case ViewHostMsg_IDBDatabaseCreateObjectStore::ID:
|
| case ViewHostMsg_IDBDatabaseObjectStore::ID:
|
| case ViewHostMsg_IDBDatabaseRemoveObjectStore::ID:
|
| + case ViewHostMsg_IDBDatabaseTransaction::ID:
|
| case ViewHostMsg_IDBDatabaseDestroyed::ID:
|
| case ViewHostMsg_IDBIndexName::ID:
|
| case ViewHostMsg_IDBIndexKeyPath::ID:
|
| @@ -115,6 +123,7 @@ bool IndexedDBDispatcherHost::OnMessageReceived(const IPC::Message& message) {
|
| case ViewHostMsg_IDBObjectStoreIndex::ID:
|
| case ViewHostMsg_IDBObjectStoreRemoveIndex::ID:
|
| case ViewHostMsg_IDBObjectStoreDestroyed::ID:
|
| + case ViewHostMsg_IDBTransactionDestroyed::ID:
|
| break;
|
| default:
|
| return false;
|
| @@ -159,7 +168,8 @@ void IndexedDBDispatcherHost::OnMessageReceivedWebKit(
|
| database_dispatcher_host_->OnMessageReceived(message, &msg_is_ok) ||
|
| index_dispatcher_host_->OnMessageReceived(message, &msg_is_ok) ||
|
| object_store_dispatcher_host_->OnMessageReceived(message, &msg_is_ok) ||
|
| - cursor_dispatcher_host_->OnMessageReceived(message, &msg_is_ok);
|
| + cursor_dispatcher_host_->OnMessageReceived(message, &msg_is_ok) ||
|
| + transaction_dispatcher_host_->OnMessageReceived(message, &msg_is_ok);
|
|
|
| if (!handled) {
|
| handled = true;
|
| @@ -167,6 +177,8 @@ void IndexedDBDispatcherHost::OnMessageReceivedWebKit(
|
| IPC_BEGIN_MESSAGE_MAP_EX(IndexedDBDispatcherHost, message, msg_is_ok)
|
| IPC_MESSAGE_HANDLER(ViewHostMsg_IDBFactoryOpen,
|
| OnIDBFactoryOpen)
|
| + IPC_MESSAGE_HANDLER(ViewHostMsg_IDBFactoryAbortPendingTransactions,
|
| + OnIDBFactoryAbortPendingTransactions)
|
| IPC_MESSAGE_UNHANDLED(handled = false)
|
| IPC_END_MESSAGE_MAP()
|
| }
|
| @@ -194,6 +206,11 @@ int32 IndexedDBDispatcherHost::Add(WebIDBObjectStore* idb_object_store) {
|
| return object_store_dispatcher_host_->map_.Add(idb_object_store);
|
| }
|
|
|
| +void IndexedDBDispatcherHost::Add(WebIDBTransaction* idb_transaction) {
|
| + transaction_dispatcher_host_->map_.AddWithID(
|
| + idb_transaction, idb_transaction->id());
|
| +}
|
| +
|
| void IndexedDBDispatcherHost::OnIDBFactoryOpen(
|
| const ViewHostMsg_IDBFactoryOpen_Params& params) {
|
| // TODO(jorlow): Check the content settings map and use params.routing_id_
|
| @@ -206,6 +223,14 @@ void IndexedDBDispatcherHost::OnIDBFactoryOpen(
|
| WebSecurityOrigin::createFromDatabaseIdentifier(params.origin_), NULL);
|
| }
|
|
|
| +void IndexedDBDispatcherHost::OnIDBFactoryAbortPendingTransactions(
|
| + const std::vector<int32>& ids) {
|
| + DCHECK(ChromeThread::CurrentlyOn(ChromeThread::WEBKIT));
|
| +
|
| + WebVector<int32> pendingIDs = ids;
|
| + Context()->GetIDBFactory()->abortPendingTransactions(pendingIDs);
|
| +}
|
| +
|
| //////////////////////////////////////////////////////////////////////
|
| // Helper templates.
|
| //
|
| @@ -277,6 +302,8 @@ bool IndexedDBDispatcherHost::DatabaseDispatcherHost::OnMessageReceived(
|
| OnObjectStore)
|
| IPC_MESSAGE_HANDLER(ViewHostMsg_IDBDatabaseRemoveObjectStore,
|
| OnRemoveObjectStore)
|
| + IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_IDBDatabaseTransaction,
|
| + OnTransaction)
|
| IPC_MESSAGE_HANDLER(ViewHostMsg_IDBDatabaseDestroyed, OnDestroyed)
|
| IPC_MESSAGE_UNHANDLED(handled = false)
|
| IPC_END_MESSAGE_MAP()
|
| @@ -368,6 +395,31 @@ void IndexedDBDispatcherHost::DatabaseDispatcherHost::OnRemoveObjectStore(
|
| name, new IndexedDBCallbacks<WebIDBObjectStore>(parent_, response_id));
|
| }
|
|
|
| +void IndexedDBDispatcherHost::DatabaseDispatcherHost::OnTransaction(
|
| + int32 idb_database_id, const std::vector<string16>& names,
|
| + int32 mode, int32 timeout, IPC::Message* reply_msg) {
|
| + WebIDBDatabase* database = parent_->GetOrTerminateProcess(
|
| + &map_, idb_database_id, reply_msg,
|
| + ViewHostMsg_IDBDatabaseTransaction::ID);
|
| + if (!database)
|
| + return;
|
| +
|
| + WebDOMStringList object_stores;
|
| + for (std::vector<string16>::const_iterator it = names.begin();
|
| + it != names.end(); ++it) {
|
| + object_stores.append(*it);
|
| + }
|
| +
|
| + WebIDBTransaction* transaction = database->transaction(
|
| + object_stores, mode, timeout);
|
| + transaction->setCallbacks(
|
| + new IndexedDBTransactionCallbacks(parent_, transaction->id()));
|
| + parent_->Add(transaction);
|
| + ViewHostMsg_IDBDatabaseTransaction::WriteReplyParams(
|
| + reply_msg, transaction->id());
|
| + parent_->Send(reply_msg);
|
| +}
|
| +
|
| void IndexedDBDispatcherHost::DatabaseDispatcherHost::OnDestroyed(
|
| int32 object_id) {
|
| parent_->DestroyObject(&map_, object_id,
|
| @@ -615,6 +667,7 @@ bool IndexedDBDispatcherHost::CursorDispatcherHost::OnMessageReceived(
|
| return handled;
|
| }
|
|
|
| +
|
| void IndexedDBDispatcherHost::CursorDispatcherHost::Send(
|
| IPC::Message* message) {
|
| // The macro magic in OnMessageReceived requires this to link, but it should
|
| @@ -682,3 +735,41 @@ void IndexedDBDispatcherHost::CursorDispatcherHost::OnDestroyed(
|
| parent_->DestroyObject(
|
| &map_, object_id, ViewHostMsg_IDBCursorDestroyed::ID);
|
| }
|
| +
|
| +//////////////////////////////////////////////////////////////////////
|
| +// IndexedDBDispatcherHost::TransactionDispatcherHost
|
| +//
|
| +
|
| +IndexedDBDispatcherHost::TransactionDispatcherHost::TransactionDispatcherHost(
|
| + IndexedDBDispatcherHost* parent)
|
| + : parent_(parent) {
|
| +}
|
| +
|
| +IndexedDBDispatcherHost::
|
| + TransactionDispatcherHost::~TransactionDispatcherHost() {
|
| +}
|
| +
|
| +bool IndexedDBDispatcherHost::TransactionDispatcherHost::OnMessageReceived(
|
| + const IPC::Message& message, bool* msg_is_ok) {
|
| + bool handled = true;
|
| + IPC_BEGIN_MESSAGE_MAP_EX(IndexedDBDispatcherHost::TransactionDispatcherHost,
|
| + message, *msg_is_ok)
|
| + IPC_MESSAGE_HANDLER(ViewHostMsg_IDBTransactionDestroyed, OnDestroyed)
|
| + IPC_MESSAGE_UNHANDLED(handled = false)
|
| + IPC_END_MESSAGE_MAP()
|
| + return handled;
|
| +}
|
| +
|
| +void IndexedDBDispatcherHost::TransactionDispatcherHost::Send(
|
| + IPC::Message* message) {
|
| + // The macro magic in OnMessageReceived requires this to link, but it should
|
| + // never actually be called.
|
| + NOTREACHED();
|
| + parent_->Send(message);
|
| +}
|
| +
|
| +void IndexedDBDispatcherHost::TransactionDispatcherHost::OnDestroyed(
|
| + int32 object_id) {
|
| + parent_->DestroyObject(
|
| + &map_, object_id, ViewHostMsg_IDBTransactionDestroyed::ID);
|
| +}
|
|
|