Chromium Code Reviews| 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; |