Index: content/common_child/indexed_db/indexed_db_dispatcher.cc |
diff --git a/content/common_child/indexed_db/indexed_db_dispatcher.cc b/content/common_child/indexed_db/indexed_db_dispatcher.cc |
deleted file mode 100644 |
index f06f19e4a9abf134557db627d5c94f33371e3056..0000000000000000000000000000000000000000 |
--- a/content/common_child/indexed_db/indexed_db_dispatcher.cc |
+++ /dev/null |
@@ -1,713 +0,0 @@ |
-// Copyright (c) 2012 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. |
- |
-#include "content/common_child/indexed_db/indexed_db_dispatcher.h" |
- |
-#include "base/format_macros.h" |
-#include "base/lazy_instance.h" |
-#include "base/stringprintf.h" |
-#include "base/threading/thread_local.h" |
-#include "content/common/child_thread.h" |
-#include "content/common/indexed_db/indexed_db_messages.h" |
-#include "content/common_child/indexed_db/proxy_webidbcursor_impl.h" |
-#include "content/common_child/indexed_db/proxy_webidbdatabase_impl.h" |
-#include "ipc/ipc_channel.h" |
-#include "third_party/WebKit/public/platform/WebIDBDatabaseCallbacks.h" |
-#include "third_party/WebKit/public/platform/WebIDBDatabaseError.h" |
-#include "third_party/WebKit/public/platform/WebIDBDatabaseException.h" |
-#include "third_party/WebKit/public/platform/WebIDBKeyRange.h" |
- |
-using WebKit::WebData; |
-using WebKit::WebIDBCallbacks; |
-using WebKit::WebIDBDatabase; |
-using WebKit::WebIDBDatabaseCallbacks; |
-using WebKit::WebIDBDatabaseError; |
-using WebKit::WebIDBKey; |
-using WebKit::WebIDBKeyRange; |
-using WebKit::WebIDBMetadata; |
-using WebKit::WebString; |
-using WebKit::WebVector; |
-using base::ThreadLocalPointer; |
-using webkit_glue::WorkerTaskRunner; |
- |
-namespace content { |
-static base::LazyInstance<ThreadLocalPointer<IndexedDBDispatcher> >::Leaky |
- g_idb_dispatcher_tls = LAZY_INSTANCE_INITIALIZER; |
- |
-namespace { |
- |
-IndexedDBDispatcher* const kHasBeenDeleted = |
- reinterpret_cast<IndexedDBDispatcher*>(0x1); |
- |
-int32 CurrentWorkerId() { |
- return WorkerTaskRunner::Instance()->CurrentWorkerId(); |
-} |
-} // unnamed namespace |
- |
-const size_t kMaxIDBValueSizeInBytes = 64 * 1024 * 1024; |
- |
-IndexedDBDispatcher::IndexedDBDispatcher() { |
- g_idb_dispatcher_tls.Pointer()->Set(this); |
-} |
- |
-IndexedDBDispatcher::~IndexedDBDispatcher() { |
- // Clear any pending callbacks - which may result in dispatch requests - |
- // before marking the dispatcher as deleted. |
- pending_callbacks_.Clear(); |
- pending_database_callbacks_.Clear(); |
- |
- DCHECK(pending_callbacks_.IsEmpty()); |
- DCHECK(pending_database_callbacks_.IsEmpty()); |
- |
- g_idb_dispatcher_tls.Pointer()->Set(kHasBeenDeleted); |
-} |
- |
-IndexedDBDispatcher* IndexedDBDispatcher::ThreadSpecificInstance() { |
- if (g_idb_dispatcher_tls.Pointer()->Get() == kHasBeenDeleted) { |
- NOTREACHED() << "Re-instantiating TLS IndexedDBDispatcher."; |
- g_idb_dispatcher_tls.Pointer()->Set(NULL); |
- } |
- if (g_idb_dispatcher_tls.Pointer()->Get()) |
- return g_idb_dispatcher_tls.Pointer()->Get(); |
- |
- IndexedDBDispatcher* dispatcher = new IndexedDBDispatcher; |
- if (WorkerTaskRunner::Instance()->CurrentWorkerId()) |
- webkit_glue::WorkerTaskRunner::Instance()->AddStopObserver(dispatcher); |
- return dispatcher; |
-} |
- |
-void IndexedDBDispatcher::OnWorkerRunLoopStopped() { delete this; } |
- |
-WebIDBMetadata IndexedDBDispatcher::ConvertMetadata( |
- const IndexedDBDatabaseMetadata& idb_metadata) { |
- WebIDBMetadata web_metadata; |
- web_metadata.id = idb_metadata.id; |
- web_metadata.name = idb_metadata.name; |
- web_metadata.version = idb_metadata.version; |
- web_metadata.intVersion = idb_metadata.int_version; |
- web_metadata.maxObjectStoreId = idb_metadata.max_object_store_id; |
- web_metadata.objectStores = |
- WebVector<WebIDBMetadata::ObjectStore>(idb_metadata.object_stores.size()); |
- |
- for (size_t i = 0; i < idb_metadata.object_stores.size(); ++i) { |
- const IndexedDBObjectStoreMetadata& idb_store_metadata = |
- idb_metadata.object_stores[i]; |
- WebIDBMetadata::ObjectStore& web_store_metadata = |
- web_metadata.objectStores[i]; |
- |
- web_store_metadata.id = idb_store_metadata.id; |
- web_store_metadata.name = idb_store_metadata.name; |
- web_store_metadata.keyPath = idb_store_metadata.keyPath; |
- web_store_metadata.autoIncrement = idb_store_metadata.autoIncrement; |
- web_store_metadata.maxIndexId = idb_store_metadata.max_index_id; |
- web_store_metadata.indexes = |
- WebVector<WebIDBMetadata::Index>(idb_store_metadata.indexes.size()); |
- |
- for (size_t j = 0; j < idb_store_metadata.indexes.size(); ++j) { |
- const IndexedDBIndexMetadata& idb_index_metadata = |
- idb_store_metadata.indexes[j]; |
- WebIDBMetadata::Index& web_index_metadata = web_store_metadata.indexes[j]; |
- |
- web_index_metadata.id = idb_index_metadata.id; |
- web_index_metadata.name = idb_index_metadata.name; |
- web_index_metadata.keyPath = idb_index_metadata.keyPath; |
- web_index_metadata.unique = idb_index_metadata.unique; |
- web_index_metadata.multiEntry = idb_index_metadata.multiEntry; |
- } |
- } |
- |
- return web_metadata; |
-} |
- |
-void IndexedDBDispatcher::OnMessageReceived(const IPC::Message& msg) { |
- bool handled = true; |
- IPC_BEGIN_MESSAGE_MAP(IndexedDBDispatcher, msg) |
- IPC_MESSAGE_HANDLER(IndexedDBMsg_CallbacksSuccessIDBCursor, |
- OnSuccessOpenCursor) |
- IPC_MESSAGE_HANDLER(IndexedDBMsg_CallbacksSuccessCursorAdvance, |
- OnSuccessCursorContinue) |
- IPC_MESSAGE_HANDLER(IndexedDBMsg_CallbacksSuccessCursorContinue, |
- OnSuccessCursorContinue) |
- IPC_MESSAGE_HANDLER(IndexedDBMsg_CallbacksSuccessCursorPrefetch, |
- OnSuccessCursorPrefetch) |
- IPC_MESSAGE_HANDLER(IndexedDBMsg_CallbacksSuccessIDBDatabase, |
- OnSuccessIDBDatabase) |
- IPC_MESSAGE_HANDLER(IndexedDBMsg_CallbacksSuccessIndexedDBKey, |
- OnSuccessIndexedDBKey) |
- IPC_MESSAGE_HANDLER(IndexedDBMsg_CallbacksSuccessStringList, |
- OnSuccessStringList) |
- IPC_MESSAGE_HANDLER(IndexedDBMsg_CallbacksSuccessValue, OnSuccessValue) |
- IPC_MESSAGE_HANDLER(IndexedDBMsg_CallbacksSuccessValueWithKey, |
- OnSuccessValueWithKey) |
- IPC_MESSAGE_HANDLER(IndexedDBMsg_CallbacksSuccessInteger, OnSuccessInteger) |
- IPC_MESSAGE_HANDLER(IndexedDBMsg_CallbacksSuccessUndefined, |
- OnSuccessUndefined) |
- IPC_MESSAGE_HANDLER(IndexedDBMsg_CallbacksError, OnError) |
- IPC_MESSAGE_HANDLER(IndexedDBMsg_CallbacksIntBlocked, OnIntBlocked) |
- IPC_MESSAGE_HANDLER(IndexedDBMsg_CallbacksUpgradeNeeded, OnUpgradeNeeded) |
- IPC_MESSAGE_HANDLER(IndexedDBMsg_DatabaseCallbacksForcedClose, |
- OnForcedClose) |
- IPC_MESSAGE_HANDLER(IndexedDBMsg_DatabaseCallbacksIntVersionChange, |
- OnIntVersionChange) |
- IPC_MESSAGE_HANDLER(IndexedDBMsg_DatabaseCallbacksAbort, OnAbort) |
- IPC_MESSAGE_HANDLER(IndexedDBMsg_DatabaseCallbacksComplete, OnComplete) |
- IPC_MESSAGE_UNHANDLED(handled = false) |
- IPC_END_MESSAGE_MAP() |
- // If a message gets here, IndexedDBMessageFilter already determined that it |
- // is an IndexedDB message. |
- DCHECK(handled) << "Didn't handle a message defined at line " |
- << IPC_MESSAGE_ID_LINE(msg.type()); |
-} |
- |
-bool IndexedDBDispatcher::Send(IPC::Message* msg) { |
- if (!ChildThread::current()) { |
- // Unexpected - this may be happening during shutdown. |
- NOTREACHED(); |
- return false; |
- } |
- if (CurrentWorkerId()) { |
- scoped_refptr<IPC::SyncMessageFilter> filter( |
- ChildThread::current()->sync_message_filter()); |
- return filter->Send(msg); |
- } |
- return ChildThread::current()->Send(msg); |
-} |
- |
-void IndexedDBDispatcher::RequestIDBCursorAdvance( |
- unsigned long count, |
- WebIDBCallbacks* callbacks_ptr, |
- int32 ipc_cursor_id) { |
- // Reset all cursor prefetch caches except for this cursor. |
- ResetCursorPrefetchCaches(ipc_cursor_id); |
- |
- scoped_ptr<WebIDBCallbacks> callbacks(callbacks_ptr); |
- |
- int32 ipc_callbacks_id = pending_callbacks_.Add(callbacks.release()); |
- Send(new IndexedDBHostMsg_CursorAdvance( |
- ipc_cursor_id, CurrentWorkerId(), ipc_callbacks_id, count)); |
-} |
- |
-void IndexedDBDispatcher::RequestIDBCursorContinue( |
- const IndexedDBKey& key, |
- WebIDBCallbacks* callbacks_ptr, |
- int32 ipc_cursor_id) { |
- // Reset all cursor prefetch caches except for this cursor. |
- ResetCursorPrefetchCaches(ipc_cursor_id); |
- |
- scoped_ptr<WebIDBCallbacks> callbacks(callbacks_ptr); |
- |
- int32 ipc_callbacks_id = pending_callbacks_.Add(callbacks.release()); |
- Send(new IndexedDBHostMsg_CursorContinue( |
- ipc_cursor_id, CurrentWorkerId(), ipc_callbacks_id, key)); |
-} |
- |
-void IndexedDBDispatcher::RequestIDBCursorPrefetch( |
- int n, |
- WebIDBCallbacks* callbacks_ptr, |
- int32 ipc_cursor_id) { |
- scoped_ptr<WebIDBCallbacks> callbacks(callbacks_ptr); |
- |
- int32 ipc_callbacks_id = pending_callbacks_.Add(callbacks.release()); |
- Send(new IndexedDBHostMsg_CursorPrefetch( |
- ipc_cursor_id, CurrentWorkerId(), ipc_callbacks_id, n)); |
-} |
- |
-void IndexedDBDispatcher::RequestIDBCursorPrefetchReset(int used_prefetches, |
- int unused_prefetches, |
- int32 ipc_cursor_id) { |
- Send(new IndexedDBHostMsg_CursorPrefetchReset( |
- ipc_cursor_id, used_prefetches, unused_prefetches)); |
-} |
- |
-void IndexedDBDispatcher::RequestIDBFactoryOpen( |
- const string16& name, |
- int64 version, |
- int64 transaction_id, |
- WebIDBCallbacks* callbacks_ptr, |
- WebIDBDatabaseCallbacks* database_callbacks_ptr, |
- const string16& database_identifier) { |
- ResetCursorPrefetchCaches(); |
- scoped_ptr<WebIDBCallbacks> callbacks(callbacks_ptr); |
- scoped_ptr<WebIDBDatabaseCallbacks> database_callbacks( |
- database_callbacks_ptr); |
- |
- IndexedDBHostMsg_FactoryOpen_Params params; |
- params.ipc_thread_id = CurrentWorkerId(); |
- params.ipc_callbacks_id = pending_callbacks_.Add(callbacks.release()); |
- params.ipc_database_callbacks_id = |
- pending_database_callbacks_.Add(database_callbacks.release()); |
- params.database_identifier = database_identifier; |
- params.name = name; |
- params.transaction_id = transaction_id; |
- params.version = version; |
- Send(new IndexedDBHostMsg_FactoryOpen(params)); |
-} |
- |
-void IndexedDBDispatcher::RequestIDBFactoryGetDatabaseNames( |
- WebIDBCallbacks* callbacks_ptr, |
- const string16& database_identifier) { |
- ResetCursorPrefetchCaches(); |
- scoped_ptr<WebIDBCallbacks> callbacks(callbacks_ptr); |
- |
- IndexedDBHostMsg_FactoryGetDatabaseNames_Params params; |
- params.ipc_thread_id = CurrentWorkerId(); |
- params.ipc_callbacks_id = pending_callbacks_.Add(callbacks.release()); |
- params.database_identifier = database_identifier; |
- Send(new IndexedDBHostMsg_FactoryGetDatabaseNames(params)); |
-} |
- |
-void IndexedDBDispatcher::RequestIDBFactoryDeleteDatabase( |
- const string16& name, |
- WebIDBCallbacks* callbacks_ptr, |
- const string16& database_identifier) { |
- ResetCursorPrefetchCaches(); |
- scoped_ptr<WebIDBCallbacks> callbacks(callbacks_ptr); |
- |
- IndexedDBHostMsg_FactoryDeleteDatabase_Params params; |
- params.ipc_thread_id = CurrentWorkerId(); |
- params.ipc_callbacks_id = pending_callbacks_.Add(callbacks.release()); |
- params.database_identifier = database_identifier; |
- params.name = name; |
- Send(new IndexedDBHostMsg_FactoryDeleteDatabase(params)); |
-} |
- |
-void IndexedDBDispatcher::RequestIDBDatabaseClose( |
- int32 ipc_database_id, |
- int32 ipc_database_callbacks_id) { |
- ResetCursorPrefetchCaches(); |
- Send(new IndexedDBHostMsg_DatabaseClose(ipc_database_id)); |
- // There won't be pending database callbacks if the transaction was aborted in |
- // the initial upgradeneeded event handler. |
- if (pending_database_callbacks_.Lookup(ipc_database_callbacks_id)) |
- pending_database_callbacks_.Remove(ipc_database_callbacks_id); |
-} |
- |
-void IndexedDBDispatcher::RequestIDBDatabaseCreateTransaction( |
- int32 ipc_database_id, |
- int64 transaction_id, |
- WebIDBDatabaseCallbacks* database_callbacks_ptr, |
- WebKit::WebVector<long long> object_store_ids, |
- unsigned short mode) { |
- scoped_ptr<WebIDBDatabaseCallbacks> database_callbacks( |
- database_callbacks_ptr); |
- IndexedDBHostMsg_DatabaseCreateTransaction_Params params; |
- params.ipc_thread_id = CurrentWorkerId(); |
- params.ipc_database_id = ipc_database_id; |
- params.transaction_id = transaction_id; |
- params.ipc_database_callbacks_id = |
- pending_database_callbacks_.Add(database_callbacks.release()); |
- params.object_store_ids |
- .assign(object_store_ids.data(), |
- object_store_ids.data() + object_store_ids.size()); |
- params.mode = mode; |
- |
- Send(new IndexedDBHostMsg_DatabaseCreateTransaction(params)); |
-} |
- |
-void IndexedDBDispatcher::RequestIDBDatabaseGet( |
- int32 ipc_database_id, |
- int64 transaction_id, |
- int64 object_store_id, |
- int64 index_id, |
- const IndexedDBKeyRange& key_range, |
- bool key_only, |
- WebIDBCallbacks* callbacks) { |
- ResetCursorPrefetchCaches(); |
- IndexedDBHostMsg_DatabaseGet_Params params; |
- init_params(params, callbacks); |
- params.ipc_database_id = ipc_database_id; |
- params.transaction_id = transaction_id; |
- params.object_store_id = object_store_id; |
- params.index_id = index_id; |
- params.key_range = key_range; |
- params.key_only = key_only; |
- Send(new IndexedDBHostMsg_DatabaseGet(params)); |
-} |
- |
-void IndexedDBDispatcher::RequestIDBDatabasePut( |
- int32 ipc_database_id, |
- int64 transaction_id, |
- int64 object_store_id, |
- const WebData& value, |
- const IndexedDBKey& key, |
- WebIDBDatabase::PutMode put_mode, |
- WebIDBCallbacks* callbacks, |
- const WebVector<long long>& index_ids, |
- const WebVector<WebKit::WebVector<WebIDBKey> >& index_keys) { |
- |
- if (value.size() > kMaxIDBValueSizeInBytes) { |
- callbacks->onError(WebIDBDatabaseError( |
- WebKit::WebIDBDatabaseExceptionUnknownError, |
- WebString::fromUTF8(base::StringPrintf( |
- "The serialized value is too large" |
- " (size=%" PRIuS " bytes, max=%" PRIuS " bytes).", |
- value.size(), |
- kMaxIDBValueSizeInBytes).c_str()))); |
- return; |
- } |
- |
- ResetCursorPrefetchCaches(); |
- IndexedDBHostMsg_DatabasePut_Params params; |
- init_params(params, callbacks); |
- params.ipc_database_id = ipc_database_id; |
- params.transaction_id = transaction_id; |
- params.object_store_id = object_store_id; |
- |
- params.value.assign(value.data(), value.data() + value.size()); |
- params.key = key; |
- params.put_mode = put_mode; |
- |
- COMPILE_ASSERT(sizeof(params.index_ids[0]) == sizeof(index_ids[0]), |
- Cant_copy); |
- params.index_ids |
- .assign(index_ids.data(), index_ids.data() + index_ids.size()); |
- |
- params.index_keys.resize(index_keys.size()); |
- for (size_t i = 0; i < index_keys.size(); ++i) { |
- params.index_keys[i].resize(index_keys[i].size()); |
- for (size_t j = 0; j < index_keys[i].size(); ++j) { |
- params.index_keys[i][j] = IndexedDBKey(index_keys[i][j]); |
- } |
- } |
- Send(new IndexedDBHostMsg_DatabasePut(params)); |
-} |
- |
-void IndexedDBDispatcher::RequestIDBDatabaseOpenCursor( |
- int32 ipc_database_id, |
- int64 transaction_id, |
- int64 object_store_id, |
- int64 index_id, |
- const IndexedDBKeyRange& key_range, |
- unsigned short direction, |
- bool key_only, |
- WebKit::WebIDBDatabase::TaskType task_type, |
- WebIDBCallbacks* callbacks) { |
- ResetCursorPrefetchCaches(); |
- IndexedDBHostMsg_DatabaseOpenCursor_Params params; |
- init_params(params, callbacks); |
- params.ipc_database_id = ipc_database_id; |
- params.transaction_id = transaction_id; |
- params.object_store_id = object_store_id; |
- params.index_id = index_id; |
- params.key_range = IndexedDBKeyRange(key_range); |
- params.direction = direction; |
- params.key_only = key_only; |
- params.task_type = task_type; |
- Send(new IndexedDBHostMsg_DatabaseOpenCursor(params)); |
-} |
- |
-void IndexedDBDispatcher::RequestIDBDatabaseCount( |
- int32 ipc_database_id, |
- int64 transaction_id, |
- int64 object_store_id, |
- int64 index_id, |
- const IndexedDBKeyRange& key_range, |
- WebKit::WebIDBCallbacks* callbacks) { |
- ResetCursorPrefetchCaches(); |
- IndexedDBHostMsg_DatabaseCount_Params params; |
- init_params(params, callbacks); |
- params.ipc_database_id = ipc_database_id; |
- params.transaction_id = transaction_id; |
- params.object_store_id = object_store_id; |
- params.index_id = index_id; |
- params.key_range = IndexedDBKeyRange(key_range); |
- Send(new IndexedDBHostMsg_DatabaseCount(params)); |
-} |
- |
-void IndexedDBDispatcher::RequestIDBDatabaseDeleteRange( |
- int32 ipc_database_id, |
- int64 transaction_id, |
- int64 object_store_id, |
- const IndexedDBKeyRange& key_range, |
- WebKit::WebIDBCallbacks* callbacks) { |
- ResetCursorPrefetchCaches(); |
- IndexedDBHostMsg_DatabaseDeleteRange_Params params; |
- init_params(params, callbacks); |
- params.ipc_database_id = ipc_database_id; |
- params.transaction_id = transaction_id; |
- params.object_store_id = object_store_id; |
- params.key_range = key_range; |
- Send(new IndexedDBHostMsg_DatabaseDeleteRange(params)); |
-} |
- |
-void IndexedDBDispatcher::RequestIDBDatabaseClear( |
- int32 ipc_database_id, |
- int64 transaction_id, |
- int64 object_store_id, |
- WebKit::WebIDBCallbacks* callbacks_ptr) { |
- scoped_ptr<WebIDBCallbacks> callbacks(callbacks_ptr); |
- int32 ipc_callbacks_id = pending_callbacks_.Add(callbacks.release()); |
- Send(new IndexedDBHostMsg_DatabaseClear(CurrentWorkerId(), |
- ipc_callbacks_id, |
- ipc_database_id, |
- transaction_id, |
- object_store_id)); |
-} |
- |
-void IndexedDBDispatcher::CursorDestroyed(int32 ipc_cursor_id) { |
- cursors_.erase(ipc_cursor_id); |
-} |
- |
-void IndexedDBDispatcher::DatabaseDestroyed(int32 ipc_database_id) { |
- DCHECK_EQ(databases_.count(ipc_database_id), 1u); |
- databases_.erase(ipc_database_id); |
-} |
- |
-void IndexedDBDispatcher::OnSuccessIDBDatabase( |
- int32 ipc_thread_id, |
- int32 ipc_callbacks_id, |
- int32 ipc_database_callbacks_id, |
- int32 ipc_object_id, |
- const IndexedDBDatabaseMetadata& idb_metadata) { |
- DCHECK_EQ(ipc_thread_id, CurrentWorkerId()); |
- WebIDBCallbacks* callbacks = pending_callbacks_.Lookup(ipc_callbacks_id); |
- if (!callbacks) |
- return; |
- WebIDBMetadata metadata(ConvertMetadata(idb_metadata)); |
- // If an upgrade was performed, count will be non-zero. |
- if (!databases_.count(ipc_object_id)) |
- databases_[ipc_object_id] = new RendererWebIDBDatabaseImpl( |
- ipc_object_id, ipc_database_callbacks_id); |
- DCHECK_EQ(databases_.count(ipc_object_id), 1u); |
- callbacks->onSuccess(databases_[ipc_object_id], metadata); |
- pending_callbacks_.Remove(ipc_callbacks_id); |
-} |
- |
-void IndexedDBDispatcher::OnSuccessIndexedDBKey(int32 ipc_thread_id, |
- int32 ipc_callbacks_id, |
- const IndexedDBKey& key) { |
- DCHECK_EQ(ipc_thread_id, CurrentWorkerId()); |
- WebIDBCallbacks* callbacks = pending_callbacks_.Lookup(ipc_callbacks_id); |
- if (!callbacks) |
- return; |
- callbacks->onSuccess(WebIDBKey(key)); |
- pending_callbacks_.Remove(ipc_callbacks_id); |
-} |
- |
-void IndexedDBDispatcher::OnSuccessStringList( |
- int32 ipc_thread_id, |
- int32 ipc_callbacks_id, |
- const std::vector<string16>& value) { |
- DCHECK_EQ(ipc_thread_id, CurrentWorkerId()); |
- WebIDBCallbacks* callbacks = pending_callbacks_.Lookup(ipc_callbacks_id); |
- if (!callbacks) |
- return; |
- callbacks->onSuccess(WebVector<WebString>(value)); |
- pending_callbacks_.Remove(ipc_callbacks_id); |
-} |
- |
-void IndexedDBDispatcher::OnSuccessValue(int32 ipc_thread_id, |
- int32 ipc_callbacks_id, |
- const std::vector<char>& value) { |
- DCHECK_EQ(ipc_thread_id, CurrentWorkerId()); |
- WebIDBCallbacks* callbacks = pending_callbacks_.Lookup(ipc_callbacks_id); |
- if (!callbacks) |
- return; |
- WebData web_value; |
- if (value.size()) |
- web_value.assign(&value.front(), value.size()); |
- callbacks->onSuccess(web_value); |
- pending_callbacks_.Remove(ipc_callbacks_id); |
-} |
- |
-void IndexedDBDispatcher::OnSuccessValueWithKey( |
- int32 ipc_thread_id, |
- int32 ipc_callbacks_id, |
- const std::vector<char>& value, |
- const IndexedDBKey& primary_key, |
- const IndexedDBKeyPath& key_path) { |
- DCHECK_EQ(ipc_thread_id, CurrentWorkerId()); |
- WebIDBCallbacks* callbacks = pending_callbacks_.Lookup(ipc_callbacks_id); |
- if (!callbacks) |
- return; |
- WebData web_value; |
- if (value.size()) |
- web_value.assign(&value.front(), value.size()); |
- callbacks->onSuccess(web_value, primary_key, key_path); |
- pending_callbacks_.Remove(ipc_callbacks_id); |
-} |
- |
-void IndexedDBDispatcher::OnSuccessInteger(int32 ipc_thread_id, |
- int32 ipc_callbacks_id, |
- int64 value) { |
- DCHECK_EQ(ipc_thread_id, CurrentWorkerId()); |
- WebIDBCallbacks* callbacks = pending_callbacks_.Lookup(ipc_callbacks_id); |
- if (!callbacks) |
- return; |
- callbacks->onSuccess(value); |
- pending_callbacks_.Remove(ipc_callbacks_id); |
-} |
- |
-void IndexedDBDispatcher::OnSuccessUndefined(int32 ipc_thread_id, |
- int32 ipc_callbacks_id) { |
- DCHECK_EQ(ipc_thread_id, CurrentWorkerId()); |
- WebIDBCallbacks* callbacks = pending_callbacks_.Lookup(ipc_callbacks_id); |
- if (!callbacks) |
- return; |
- callbacks->onSuccess(); |
- pending_callbacks_.Remove(ipc_callbacks_id); |
-} |
- |
-void IndexedDBDispatcher::OnSuccessOpenCursor( |
- const IndexedDBMsg_CallbacksSuccessIDBCursor_Params& p) { |
- DCHECK_EQ(p.ipc_thread_id, CurrentWorkerId()); |
- int32 ipc_callbacks_id = p.ipc_callbacks_id; |
- int32 ipc_object_id = p.ipc_cursor_id; |
- const IndexedDBKey& key = p.key; |
- const IndexedDBKey& primary_key = p.primary_key; |
- WebData web_value; |
- if (p.value.size()) |
- web_value.assign(&p.value.front(), p.value.size()); |
- |
- WebIDBCallbacks* callbacks = pending_callbacks_.Lookup(ipc_callbacks_id); |
- if (!callbacks) |
- return; |
- |
- RendererWebIDBCursorImpl* cursor = |
- new RendererWebIDBCursorImpl(ipc_object_id); |
- cursors_[ipc_object_id] = cursor; |
- callbacks->onSuccess(cursor, key, primary_key, web_value); |
- |
- pending_callbacks_.Remove(ipc_callbacks_id); |
-} |
- |
-void IndexedDBDispatcher::OnSuccessCursorContinue( |
- const IndexedDBMsg_CallbacksSuccessCursorContinue_Params& p) { |
- DCHECK_EQ(p.ipc_thread_id, CurrentWorkerId()); |
- int32 ipc_callbacks_id = p.ipc_callbacks_id; |
- int32 ipc_cursor_id = p.ipc_cursor_id; |
- const IndexedDBKey& key = p.key; |
- const IndexedDBKey& primary_key = p.primary_key; |
- const std::vector<char>& value = p.value; |
- |
- RendererWebIDBCursorImpl* cursor = cursors_[ipc_cursor_id]; |
- DCHECK(cursor); |
- |
- WebIDBCallbacks* callbacks = pending_callbacks_.Lookup(ipc_callbacks_id); |
- if (!callbacks) |
- return; |
- |
- WebData web_value; |
- if (value.size()) |
- web_value.assign(&value.front(), value.size()); |
- callbacks->onSuccess(key, primary_key, web_value); |
- |
- pending_callbacks_.Remove(ipc_callbacks_id); |
-} |
- |
-void IndexedDBDispatcher::OnSuccessCursorPrefetch( |
- const IndexedDBMsg_CallbacksSuccessCursorPrefetch_Params& p) { |
- DCHECK_EQ(p.ipc_thread_id, CurrentWorkerId()); |
- int32 ipc_callbacks_id = p.ipc_callbacks_id; |
- int32 ipc_cursor_id = p.ipc_cursor_id; |
- const std::vector<IndexedDBKey>& keys = p.keys; |
- const std::vector<IndexedDBKey>& primary_keys = p.primary_keys; |
- std::vector<WebData> values(p.values.size()); |
- for (size_t i = 0; i < p.values.size(); ++i) { |
- if (p.values[i].size()) |
- values[i].assign(&p.values[i].front(), p.values[i].size()); |
- } |
- RendererWebIDBCursorImpl* cursor = cursors_[ipc_cursor_id]; |
- DCHECK(cursor); |
- cursor->SetPrefetchData(keys, primary_keys, values); |
- |
- WebIDBCallbacks* callbacks = pending_callbacks_.Lookup(ipc_callbacks_id); |
- DCHECK(callbacks); |
- cursor->CachedContinue(callbacks); |
- pending_callbacks_.Remove(ipc_callbacks_id); |
-} |
- |
-void IndexedDBDispatcher::OnIntBlocked(int32 ipc_thread_id, |
- int32 ipc_callbacks_id, |
- int64 existing_version) { |
- DCHECK_EQ(ipc_thread_id, CurrentWorkerId()); |
- WebIDBCallbacks* callbacks = pending_callbacks_.Lookup(ipc_callbacks_id); |
- DCHECK(callbacks); |
- callbacks->onBlocked(existing_version); |
-} |
- |
-void IndexedDBDispatcher::OnUpgradeNeeded( |
- const IndexedDBMsg_CallbacksUpgradeNeeded_Params& p) { |
- DCHECK_EQ(p.ipc_thread_id, CurrentWorkerId()); |
- WebIDBCallbacks* callbacks = pending_callbacks_.Lookup(p.ipc_callbacks_id); |
- DCHECK(callbacks); |
- WebIDBMetadata metadata(ConvertMetadata(p.idb_metadata)); |
- DCHECK(!databases_.count(p.ipc_database_id)); |
- databases_[p.ipc_database_id] = new RendererWebIDBDatabaseImpl( |
- p.ipc_database_id, p.ipc_database_callbacks_id); |
- callbacks->onUpgradeNeeded( |
- p.old_version, databases_[p.ipc_database_id], metadata); |
-} |
- |
-void IndexedDBDispatcher::OnError(int32 ipc_thread_id, |
- int32 ipc_callbacks_id, |
- int code, |
- const string16& message) { |
- DCHECK_EQ(ipc_thread_id, CurrentWorkerId()); |
- WebIDBCallbacks* callbacks = pending_callbacks_.Lookup(ipc_callbacks_id); |
- if (!callbacks) |
- return; |
- callbacks->onError(WebIDBDatabaseError(code, message)); |
- pending_callbacks_.Remove(ipc_callbacks_id); |
-} |
- |
-void IndexedDBDispatcher::OnAbort(int32 ipc_thread_id, |
- int32 ipc_database_callbacks_id, |
- int64 transaction_id, |
- int code, |
- const string16& message) { |
- DCHECK_EQ(ipc_thread_id, CurrentWorkerId()); |
- WebIDBDatabaseCallbacks* callbacks = |
- pending_database_callbacks_.Lookup(ipc_database_callbacks_id); |
- if (!callbacks) |
- return; |
- callbacks->onAbort(transaction_id, WebIDBDatabaseError(code, message)); |
-} |
- |
-void IndexedDBDispatcher::OnComplete(int32 ipc_thread_id, |
- int32 ipc_database_callbacks_id, |
- int64 transaction_id) { |
- DCHECK_EQ(ipc_thread_id, CurrentWorkerId()); |
- WebIDBDatabaseCallbacks* callbacks = |
- pending_database_callbacks_.Lookup(ipc_database_callbacks_id); |
- if (!callbacks) |
- return; |
- callbacks->onComplete(transaction_id); |
-} |
- |
-void IndexedDBDispatcher::OnForcedClose(int32 ipc_thread_id, |
- int32 ipc_database_callbacks_id) { |
- DCHECK_EQ(ipc_thread_id, CurrentWorkerId()); |
- WebIDBDatabaseCallbacks* callbacks = |
- pending_database_callbacks_.Lookup(ipc_database_callbacks_id); |
- if (!callbacks) |
- return; |
- callbacks->onForcedClose(); |
-} |
- |
-void IndexedDBDispatcher::OnIntVersionChange(int32 ipc_thread_id, |
- int32 ipc_database_callbacks_id, |
- int64 old_version, |
- int64 new_version) { |
- DCHECK_EQ(ipc_thread_id, CurrentWorkerId()); |
- WebIDBDatabaseCallbacks* callbacks = |
- pending_database_callbacks_.Lookup(ipc_database_callbacks_id); |
- // callbacks would be NULL if a versionchange event is received after close |
- // has been called. |
- if (!callbacks) |
- return; |
- callbacks->onVersionChange(old_version, new_version); |
-} |
- |
-void IndexedDBDispatcher::ResetCursorPrefetchCaches( |
- int32 ipc_exception_cursor_id) { |
- typedef std::map<int32, RendererWebIDBCursorImpl*>::iterator Iterator; |
- for (Iterator i = cursors_.begin(); i != cursors_.end(); ++i) { |
- if (i->first == ipc_exception_cursor_id) |
- continue; |
- i->second->ResetPrefetchCache(); |
- } |
-} |
- |
-} // namespace content |