Index: content/renderer/indexed_db/renderer_webidbcursor_impl.cc |
diff --git a/content/renderer/indexed_db/renderer_webidbcursor_impl.cc b/content/renderer/indexed_db/renderer_webidbcursor_impl.cc |
deleted file mode 100644 |
index 52eaf575d4874216526082fe669964ef3a572627..0000000000000000000000000000000000000000 |
--- a/content/renderer/indexed_db/renderer_webidbcursor_impl.cc |
+++ /dev/null |
@@ -1,181 +0,0 @@ |
-// Copyright (c) 2011 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/renderer/indexed_db/renderer_webidbcursor_impl.h" |
- |
-#include "content/common/indexed_db/indexed_db_messages.h" |
-#include "content/renderer/indexed_db/indexed_db_dispatcher.h" |
-#include "content/renderer/render_thread_impl.h" |
- |
-using WebKit::WebExceptionCode; |
-using WebKit::WebIDBCallbacks; |
-using WebKit::WebIDBKey; |
-using WebKit::WebSerializedScriptValue; |
- |
-RendererWebIDBCursorImpl::RendererWebIDBCursorImpl(int32 idb_cursor_id) |
- : idb_cursor_id_(idb_cursor_id), |
- continue_count_(0), |
- used_prefetches_(0), |
- pending_onsuccess_callbacks_(0), |
- prefetch_amount_(kMinPrefetchAmount) { |
-} |
- |
-RendererWebIDBCursorImpl::~RendererWebIDBCursorImpl() { |
- // It's not possible for there to be pending callbacks that address this |
- // object since inside WebKit, they hold a reference to the object wich owns |
- // this object. But, if that ever changed, then we'd need to invalidate |
- // any such pointers. |
- ChildThread::current()->Send(new IndexedDBHostMsg_CursorDestroyed( |
- idb_cursor_id_)); |
- IndexedDBDispatcher* dispatcher = |
- IndexedDBDispatcher::ThreadSpecificInstance(); |
- dispatcher->CursorDestroyed(idb_cursor_id_); |
-} |
- |
-unsigned short RendererWebIDBCursorImpl::direction() const { |
- int direction; |
- ChildThread::current()->Send( |
- new IndexedDBHostMsg_CursorDirection(idb_cursor_id_, &direction)); |
- return direction; |
-} |
- |
-WebIDBKey RendererWebIDBCursorImpl::key() const { |
- return key_; |
-} |
- |
-WebIDBKey RendererWebIDBCursorImpl::primaryKey() const { |
- return primary_key_; |
-} |
- |
-WebSerializedScriptValue RendererWebIDBCursorImpl::value() const { |
- return value_; |
-} |
- |
-void RendererWebIDBCursorImpl::update(const WebSerializedScriptValue& value, |
- WebIDBCallbacks* callbacks, |
- WebExceptionCode& ec) { |
- IndexedDBDispatcher* dispatcher = |
- IndexedDBDispatcher::ThreadSpecificInstance(); |
- dispatcher->RequestIDBCursorUpdate( |
- content::SerializedScriptValue(value), callbacks, idb_cursor_id_, &ec); |
-} |
- |
-void RendererWebIDBCursorImpl::continueFunction(const WebIDBKey& key, |
- WebIDBCallbacks* callbacks, |
- WebExceptionCode& ec) { |
- IndexedDBDispatcher* dispatcher = |
- IndexedDBDispatcher::ThreadSpecificInstance(); |
- |
- if (key.type() == WebIDBKey::InvalidType) { |
- // No key, so this would qualify for a prefetch. |
- ++continue_count_; |
- |
- if (!prefetch_keys_.empty()) { |
- // We have a prefetch cache, so serve the result from that. |
- CachedContinue(callbacks); |
- return; |
- } |
- |
- if (continue_count_ > kPrefetchContinueThreshold) { |
- // Request pre-fetch. |
- dispatcher->RequestIDBCursorPrefetch(prefetch_amount_, callbacks, |
- idb_cursor_id_, &ec); |
- |
- // Increase prefetch_amount_ exponentially. |
- prefetch_amount_ *= 2; |
- if (prefetch_amount_ > kMaxPrefetchAmount) |
- prefetch_amount_ = kMaxPrefetchAmount; |
- |
- return; |
- } |
- } else { |
- // Key argument supplied. We couldn't prefetch this. |
- ResetPrefetchCache(); |
- } |
- |
- dispatcher->RequestIDBCursorContinue(IndexedDBKey(key), callbacks, |
- idb_cursor_id_, &ec); |
-} |
- |
-void RendererWebIDBCursorImpl::deleteFunction(WebIDBCallbacks* callbacks, |
- WebExceptionCode& ec) { |
- IndexedDBDispatcher* dispatcher = |
- IndexedDBDispatcher::ThreadSpecificInstance(); |
- dispatcher->RequestIDBCursorDelete(callbacks, idb_cursor_id_, &ec); |
-} |
- |
-void RendererWebIDBCursorImpl::postSuccessHandlerCallback() |
-{ |
- pending_onsuccess_callbacks_--; |
- |
- // If the onsuccess callback called continue() on the cursor again, |
- // and that continue was served by the prefetch cache, then |
- // pending_onsuccess_callbacks_ would be incremented. |
- // If not, it means the callback did something else, or nothing at all, |
- // in which case we need to reset the cache. |
- |
- if (pending_onsuccess_callbacks_ == 0) |
- ResetPrefetchCache(); |
-} |
- |
-void RendererWebIDBCursorImpl::SetKeyAndValue( |
- const IndexedDBKey& key, |
- const IndexedDBKey& primary_key, |
- const content::SerializedScriptValue& value) { |
- key_ = key; |
- primary_key_ = primary_key; |
- value_ = value; |
-} |
- |
-void RendererWebIDBCursorImpl::SetPrefetchData( |
- const std::vector<IndexedDBKey>& keys, |
- const std::vector<IndexedDBKey>& primary_keys, |
- const std::vector<content::SerializedScriptValue>& values) { |
- prefetch_keys_.assign(keys.begin(), keys.end()); |
- prefetch_primary_keys_.assign(primary_keys.begin(), primary_keys.end()); |
- prefetch_values_.assign(values.begin(), values.end()); |
- |
- used_prefetches_ = 0; |
- pending_onsuccess_callbacks_ = 0; |
-} |
- |
-void RendererWebIDBCursorImpl::CachedContinue( |
- WebKit::WebIDBCallbacks* callbacks) { |
- DCHECK(prefetch_keys_.size() > 0); |
- DCHECK(prefetch_primary_keys_.size() == prefetch_keys_.size()); |
- DCHECK(prefetch_values_.size() == prefetch_keys_.size()); |
- |
- key_ = prefetch_keys_.front(); |
- primary_key_ = prefetch_primary_keys_.front(); |
- value_ = prefetch_values_.front(); |
- |
- prefetch_keys_.pop_front(); |
- prefetch_primary_keys_.pop_front(); |
- prefetch_values_.pop_front(); |
- used_prefetches_++; |
- |
- pending_onsuccess_callbacks_++; |
- callbacks->onSuccessWithContinuation(); |
-} |
- |
-void RendererWebIDBCursorImpl::ResetPrefetchCache() { |
- continue_count_ = 0; |
- prefetch_amount_ = kMinPrefetchAmount; |
- |
- if (!prefetch_keys_.size()) { |
- // No prefetch cache, so no need to reset the cursor in the back-end. |
- return; |
- } |
- |
- IndexedDBDispatcher* dispatcher = |
- IndexedDBDispatcher::ThreadSpecificInstance(); |
- dispatcher->RequestIDBCursorPrefetchReset(used_prefetches_, |
- prefetch_keys_.size(), |
- idb_cursor_id_); |
- prefetch_keys_.clear(); |
- prefetch_primary_keys_.clear(); |
- prefetch_values_.clear(); |
- |
- pending_onsuccess_callbacks_ = 0; |
-} |