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

Unified Diff: content/common_child/indexed_db/indexed_db_dispatcher.cc

Issue 16325022: move content/common_child to content/child (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 7 years, 7 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/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

Powered by Google App Engine
This is Rietveld 408576698