OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/child/indexed_db/proxy_webidbcursor_impl.h" | 5 #include "content/child/indexed_db/proxy_webidbcursor_impl.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "content/child/thread_safe_sender.h" | 9 #include "content/child/thread_safe_sender.h" |
10 #include "content/child/indexed_db/indexed_db_dispatcher.h" | 10 #include "content/child/indexed_db/indexed_db_dispatcher.h" |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
101 // If not, it means the callback did something else, or nothing at all, | 101 // If not, it means the callback did something else, or nothing at all, |
102 // in which case we need to reset the cache. | 102 // in which case we need to reset the cache. |
103 | 103 |
104 if (pending_onsuccess_callbacks_ == 0) | 104 if (pending_onsuccess_callbacks_ == 0) |
105 ResetPrefetchCache(); | 105 ResetPrefetchCache(); |
106 } | 106 } |
107 | 107 |
108 void RendererWebIDBCursorImpl::SetPrefetchData( | 108 void RendererWebIDBCursorImpl::SetPrefetchData( |
109 const std::vector<IndexedDBKey>& keys, | 109 const std::vector<IndexedDBKey>& keys, |
110 const std::vector<IndexedDBKey>& primary_keys, | 110 const std::vector<IndexedDBKey>& primary_keys, |
111 const std::vector<WebData>& values) { | 111 const std::vector<WebData>& values, |
| 112 const std::vector<WebKit::WebVector<WebKit::WebBlobInfo> >& blob_info) { |
112 prefetch_keys_.assign(keys.begin(), keys.end()); | 113 prefetch_keys_.assign(keys.begin(), keys.end()); |
113 prefetch_primary_keys_.assign(primary_keys.begin(), primary_keys.end()); | 114 prefetch_primary_keys_.assign(primary_keys.begin(), primary_keys.end()); |
114 prefetch_values_.assign(values.begin(), values.end()); | 115 prefetch_values_.assign(values.begin(), values.end()); |
| 116 prefetch_blob_info_.assign(blob_info.begin(), blob_info.end()); |
115 | 117 |
116 used_prefetches_ = 0; | 118 used_prefetches_ = 0; |
117 pending_onsuccess_callbacks_ = 0; | 119 pending_onsuccess_callbacks_ = 0; |
118 } | 120 } |
119 | 121 |
120 void RendererWebIDBCursorImpl::CachedContinue(WebIDBCallbacks* callbacks) { | 122 void RendererWebIDBCursorImpl::CachedContinue(WebIDBCallbacks* callbacks) { |
121 DCHECK_GT(prefetch_keys_.size(), 0ul); | 123 DCHECK_GT(prefetch_keys_.size(), 0ul); |
122 DCHECK(prefetch_primary_keys_.size() == prefetch_keys_.size()); | 124 DCHECK(prefetch_primary_keys_.size() == prefetch_keys_.size()); |
123 DCHECK(prefetch_values_.size() == prefetch_keys_.size()); | 125 DCHECK(prefetch_values_.size() == prefetch_keys_.size()); |
| 126 DCHECK(prefetch_blob_info_.size() == prefetch_keys_.size()); |
124 | 127 |
125 IndexedDBKey key = prefetch_keys_.front(); | 128 IndexedDBKey key = prefetch_keys_.front(); |
126 IndexedDBKey primary_key = prefetch_primary_keys_.front(); | 129 IndexedDBKey primary_key = prefetch_primary_keys_.front(); |
127 // this could be a real problem.. we need 2 CachedContinues | 130 // this could be a real problem.. we need 2 CachedContinues |
128 WebData value = prefetch_values_.front(); | 131 WebData value = prefetch_values_.front(); |
| 132 WebKit::WebVector<WebKit::WebBlobInfo> blob_info = |
| 133 prefetch_blob_info_.front(); |
129 | 134 |
130 prefetch_keys_.pop_front(); | 135 prefetch_keys_.pop_front(); |
131 prefetch_primary_keys_.pop_front(); | 136 prefetch_primary_keys_.pop_front(); |
132 prefetch_values_.pop_front(); | 137 prefetch_values_.pop_front(); |
| 138 prefetch_blob_info_.pop_front(); |
133 used_prefetches_++; | 139 used_prefetches_++; |
134 | 140 |
135 pending_onsuccess_callbacks_++; | 141 pending_onsuccess_callbacks_++; |
136 | 142 |
137 callbacks->onSuccess(WebIDBKeyBuilder::Build(key), | 143 callbacks->onSuccess(WebIDBKeyBuilder::Build(key), |
138 WebIDBKeyBuilder::Build(primary_key), value); | 144 WebIDBKeyBuilder::Build(primary_key), value, blob_info); |
139 } | 145 } |
140 | 146 |
141 void RendererWebIDBCursorImpl::ResetPrefetchCache() { | 147 void RendererWebIDBCursorImpl::ResetPrefetchCache() { |
142 continue_count_ = 0; | 148 continue_count_ = 0; |
143 prefetch_amount_ = kMinPrefetchAmount; | 149 prefetch_amount_ = kMinPrefetchAmount; |
144 | 150 |
145 if (!prefetch_keys_.size()) { | 151 if (!prefetch_keys_.size()) { |
146 // No prefetch cache, so no need to reset the cursor in the back-end. | 152 // No prefetch cache, so no need to reset the cursor in the back-end. |
147 return; | 153 return; |
148 } | 154 } |
149 | 155 |
150 IndexedDBDispatcher* dispatcher = | 156 IndexedDBDispatcher* dispatcher = |
151 IndexedDBDispatcher::ThreadSpecificInstance(thread_safe_sender_.get()); | 157 IndexedDBDispatcher::ThreadSpecificInstance(thread_safe_sender_.get()); |
152 dispatcher->RequestIDBCursorPrefetchReset( | 158 dispatcher->RequestIDBCursorPrefetchReset( |
153 used_prefetches_, prefetch_keys_.size(), ipc_cursor_id_); | 159 used_prefetches_, prefetch_keys_.size(), ipc_cursor_id_); |
154 prefetch_keys_.clear(); | 160 prefetch_keys_.clear(); |
155 prefetch_primary_keys_.clear(); | 161 prefetch_primary_keys_.clear(); |
156 prefetch_values_.clear(); | 162 prefetch_values_.clear(); |
| 163 prefetch_blob_info_.clear(); |
157 | 164 |
158 pending_onsuccess_callbacks_ = 0; | 165 pending_onsuccess_callbacks_ = 0; |
159 } | 166 } |
160 | 167 |
161 } // namespace content | 168 } // namespace content |
OLD | NEW |