Index: content/common/indexed_db/proxy_webidbcursor_impl.cc |
diff --git a/content/common/indexed_db/proxy_webidbcursor_impl.cc b/content/common/indexed_db/proxy_webidbcursor_impl.cc |
index eda56fc40fea8040aa9ce9a0420b717094d6fde6..e209ba07ce14b744850185ef630d69e196ce7286 100644 |
--- a/content/common/indexed_db/proxy_webidbcursor_impl.cc |
+++ b/content/common/indexed_db/proxy_webidbcursor_impl.cc |
@@ -9,6 +9,7 @@ |
#include "content/common/child_thread.h" |
#include "content/common/indexed_db/indexed_db_messages.h" |
#include "content/common/indexed_db/indexed_db_dispatcher.h" |
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebSerializedScriptValue.h" |
using WebKit::WebExceptionCode; |
using WebKit::WebIDBCallbacks; |
@@ -108,19 +109,38 @@ void RendererWebIDBCursorImpl::postSuccessHandlerCallback() { |
ResetPrefetchCache(); |
} |
-void RendererWebIDBCursorImpl::SetPrefetchData( |
+void RendererWebIDBCursorImpl::SetPrefetchDataOld( |
const std::vector<IndexedDBKey>& keys, |
const std::vector<IndexedDBKey>& primary_keys, |
const std::vector<SerializedScriptValue>& values) { |
prefetch_keys_.assign(keys.begin(), keys.end()); |
prefetch_primary_keys_.assign(primary_keys.begin(), primary_keys.end()); |
+ for (size_t i = 0; i < values.size(); ++i) { |
+ // These casts are temporary as part of a refactoring. |
+ // See https://code.google.com/p/chromium/issues/detail?id=156247 |
+ const char* data = reinterpret_cast<const char*>(values[i].data().data()); |
+ size_t size = values[i].data().length() / sizeof(string16::value_type); |
+ |
+ prefetch_values_.push_back(std::vector<char>(data, data + size)); |
+ } |
+ |
+ used_prefetches_ = 0; |
+ pending_onsuccess_callbacks_ = 0; |
+} |
+ |
+void RendererWebIDBCursorImpl::SetPrefetchData( |
+ const std::vector<IndexedDBKey>& keys, |
+ const std::vector<IndexedDBKey>& primary_keys, |
+ const std::vector<WebKit::WebData>& values) { |
jsbell
2013/02/20 23:52:08
Add a using WebKit::WebData declaration up top to
alecflett
2013/02/21 00:14:16
Done.
|
+ 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( |
+void RendererWebIDBCursorImpl::CachedContinueOld( |
WebKit::WebIDBCallbacks* callbacks) { |
DCHECK_GT(prefetch_keys_.size(), 0ul); |
DCHECK(prefetch_primary_keys_.size() == prefetch_keys_.size()); |
@@ -128,7 +148,14 @@ void RendererWebIDBCursorImpl::CachedContinue( |
IndexedDBKey key = prefetch_keys_.front(); |
IndexedDBKey primary_key = prefetch_primary_keys_.front(); |
- SerializedScriptValue value = prefetch_values_.front(); |
+ // These casts are temporary as part of a refactoring. |
+ // See https://code.google.com/p/chromium/issues/detail?id=156247 |
+ WebKit::WebData prefetch_value = prefetch_values_.front(); |
+ string16 prefetch_string( |
+ reinterpret_cast<string16::const_pointer>(prefetch_value.data()), |
+ reinterpret_cast<string16::const_pointer>(prefetch_value.data() + |
+ prefetch_value.size())); |
+ SerializedScriptValue value; value.set_data(prefetch_string); |
prefetch_keys_.pop_front(); |
prefetch_primary_keys_.pop_front(); |
@@ -141,6 +168,27 @@ void RendererWebIDBCursorImpl::CachedContinue( |
WebSerializedScriptValue(value)); |
} |
+void RendererWebIDBCursorImpl::CachedContinue( |
+ WebKit::WebIDBCallbacks* callbacks) { |
+ DCHECK_GT(prefetch_keys_.size(), 0ul); |
+ DCHECK(prefetch_primary_keys_.size() == prefetch_keys_.size()); |
+ DCHECK(prefetch_values_.size() == prefetch_keys_.size()); |
+ |
+ IndexedDBKey key = prefetch_keys_.front(); |
+ IndexedDBKey primary_key = prefetch_primary_keys_.front(); |
+ // this could be a real problem.. we need 2 CachedContinues |
+ WebKit::WebData value = prefetch_values_.front(); |
+ |
+ prefetch_keys_.pop_front(); |
+ prefetch_primary_keys_.pop_front(); |
+ prefetch_values_.pop_front(); |
+ used_prefetches_++; |
+ |
+ pending_onsuccess_callbacks_++; |
+ |
+ callbacks->onSuccess(key, primary_key, value); |
+} |
+ |
void RendererWebIDBCursorImpl::ResetPrefetchCache() { |
continue_count_ = 0; |
prefetch_amount_ = kMinPrefetchAmount; |