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

Side by Side Diff: content/common/indexed_db/proxy_webidbcursor_impl.cc

Issue 12326023: Proxy new WebData-based onSuccess() calls. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 10 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/common/indexed_db/proxy_webidbcursor_impl.h" 5 #include "content/common/indexed_db/proxy_webidbcursor_impl.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "content/common/child_thread.h" 9 #include "content/common/child_thread.h"
10 #include "content/common/indexed_db/indexed_db_messages.h" 10 #include "content/common/indexed_db/indexed_db_messages.h"
11 #include "content/common/indexed_db/indexed_db_dispatcher.h" 11 #include "content/common/indexed_db/indexed_db_dispatcher.h"
12 #include "third_party/WebKit/Source/WebKit/chromium/public/WebSerializedScriptVa lue.h"
12 13
13 using WebKit::WebExceptionCode; 14 using WebKit::WebExceptionCode;
14 using WebKit::WebIDBCallbacks; 15 using WebKit::WebIDBCallbacks;
15 using WebKit::WebIDBKey; 16 using WebKit::WebIDBKey;
16 using WebKit::WebSerializedScriptValue; 17 using WebKit::WebSerializedScriptValue;
17 18
18 namespace content { 19 namespace content {
19 20
20 RendererWebIDBCursorImpl::RendererWebIDBCursorImpl(int32 ipc_cursor_id) 21 RendererWebIDBCursorImpl::RendererWebIDBCursorImpl(int32 ipc_cursor_id)
21 : ipc_cursor_id_(ipc_cursor_id), 22 : ipc_cursor_id_(ipc_cursor_id),
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 // If the onsuccess callback called continue() on the cursor again, 102 // If the onsuccess callback called continue() on the cursor again,
102 // and that continue was served by the prefetch cache, then 103 // and that continue was served by the prefetch cache, then
103 // pending_onsuccess_callbacks_ would be incremented. 104 // pending_onsuccess_callbacks_ would be incremented.
104 // If not, it means the callback did something else, or nothing at all, 105 // If not, it means the callback did something else, or nothing at all,
105 // in which case we need to reset the cache. 106 // in which case we need to reset the cache.
106 107
107 if (pending_onsuccess_callbacks_ == 0) 108 if (pending_onsuccess_callbacks_ == 0)
108 ResetPrefetchCache(); 109 ResetPrefetchCache();
109 } 110 }
110 111
112 void RendererWebIDBCursorImpl::SetPrefetchDataOld(
113 const std::vector<IndexedDBKey>& keys,
114 const std::vector<IndexedDBKey>& primary_keys,
115 const std::vector<SerializedScriptValue>& values) {
116 prefetch_keys_.assign(keys.begin(), keys.end());
117 prefetch_primary_keys_.assign(primary_keys.begin(), primary_keys.end());
118 for (size_t i = 0; i < values.size(); ++i) {
119 // These casts are temporary as part of a refactoring.
120 // See https://code.google.com/p/chromium/issues/detail?id=156247
121 const char* data = reinterpret_cast<const char*>(values[i].data().data());
122 size_t size = values[i].data().length() / sizeof(string16::value_type);
123
124 prefetch_values_.push_back(std::vector<char>(data, data + size));
125 }
126
127 used_prefetches_ = 0;
128 pending_onsuccess_callbacks_ = 0;
129 }
130
111 void RendererWebIDBCursorImpl::SetPrefetchData( 131 void RendererWebIDBCursorImpl::SetPrefetchData(
112 const std::vector<IndexedDBKey>& keys, 132 const std::vector<IndexedDBKey>& keys,
113 const std::vector<IndexedDBKey>& primary_keys, 133 const std::vector<IndexedDBKey>& primary_keys,
114 const std::vector<SerializedScriptValue>& values) { 134 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.
115 prefetch_keys_.assign(keys.begin(), keys.end()); 135 prefetch_keys_.assign(keys.begin(), keys.end());
116 prefetch_primary_keys_.assign(primary_keys.begin(), primary_keys.end()); 136 prefetch_primary_keys_.assign(primary_keys.begin(), primary_keys.end());
117 prefetch_values_.assign(values.begin(), values.end()); 137 prefetch_values_.assign(values.begin(), values.end());
118 138
119 used_prefetches_ = 0; 139 used_prefetches_ = 0;
120 pending_onsuccess_callbacks_ = 0; 140 pending_onsuccess_callbacks_ = 0;
121 } 141 }
122 142
123 void RendererWebIDBCursorImpl::CachedContinue( 143 void RendererWebIDBCursorImpl::CachedContinueOld(
124 WebKit::WebIDBCallbacks* callbacks) { 144 WebKit::WebIDBCallbacks* callbacks) {
125 DCHECK_GT(prefetch_keys_.size(), 0ul); 145 DCHECK_GT(prefetch_keys_.size(), 0ul);
126 DCHECK(prefetch_primary_keys_.size() == prefetch_keys_.size()); 146 DCHECK(prefetch_primary_keys_.size() == prefetch_keys_.size());
127 DCHECK(prefetch_values_.size() == prefetch_keys_.size()); 147 DCHECK(prefetch_values_.size() == prefetch_keys_.size());
128 148
129 IndexedDBKey key = prefetch_keys_.front(); 149 IndexedDBKey key = prefetch_keys_.front();
130 IndexedDBKey primary_key = prefetch_primary_keys_.front(); 150 IndexedDBKey primary_key = prefetch_primary_keys_.front();
131 SerializedScriptValue value = prefetch_values_.front(); 151 // These casts are temporary as part of a refactoring.
152 // See https://code.google.com/p/chromium/issues/detail?id=156247
153 WebKit::WebData prefetch_value = prefetch_values_.front();
154 string16 prefetch_string(
155 reinterpret_cast<string16::const_pointer>(prefetch_value.data()),
156 reinterpret_cast<string16::const_pointer>(prefetch_value.data() +
157 prefetch_value.size()));
158 SerializedScriptValue value; value.set_data(prefetch_string);
132 159
133 prefetch_keys_.pop_front(); 160 prefetch_keys_.pop_front();
134 prefetch_primary_keys_.pop_front(); 161 prefetch_primary_keys_.pop_front();
135 prefetch_values_.pop_front(); 162 prefetch_values_.pop_front();
136 used_prefetches_++; 163 used_prefetches_++;
137 164
138 pending_onsuccess_callbacks_++; 165 pending_onsuccess_callbacks_++;
139 166
140 callbacks->onSuccess(key, primary_key, 167 callbacks->onSuccess(key, primary_key,
141 WebSerializedScriptValue(value)); 168 WebSerializedScriptValue(value));
142 } 169 }
143 170
171 void RendererWebIDBCursorImpl::CachedContinue(
172 WebKit::WebIDBCallbacks* callbacks) {
173 DCHECK_GT(prefetch_keys_.size(), 0ul);
174 DCHECK(prefetch_primary_keys_.size() == prefetch_keys_.size());
175 DCHECK(prefetch_values_.size() == prefetch_keys_.size());
176
177 IndexedDBKey key = prefetch_keys_.front();
178 IndexedDBKey primary_key = prefetch_primary_keys_.front();
179 // this could be a real problem.. we need 2 CachedContinues
180 WebKit::WebData value = prefetch_values_.front();
181
182 prefetch_keys_.pop_front();
183 prefetch_primary_keys_.pop_front();
184 prefetch_values_.pop_front();
185 used_prefetches_++;
186
187 pending_onsuccess_callbacks_++;
188
189 callbacks->onSuccess(key, primary_key, value);
190 }
191
144 void RendererWebIDBCursorImpl::ResetPrefetchCache() { 192 void RendererWebIDBCursorImpl::ResetPrefetchCache() {
145 continue_count_ = 0; 193 continue_count_ = 0;
146 prefetch_amount_ = kMinPrefetchAmount; 194 prefetch_amount_ = kMinPrefetchAmount;
147 195
148 if (!prefetch_keys_.size()) { 196 if (!prefetch_keys_.size()) {
149 // No prefetch cache, so no need to reset the cursor in the back-end. 197 // No prefetch cache, so no need to reset the cursor in the back-end.
150 return; 198 return;
151 } 199 }
152 200
153 IndexedDBDispatcher* dispatcher = 201 IndexedDBDispatcher* dispatcher =
154 IndexedDBDispatcher::ThreadSpecificInstance(); 202 IndexedDBDispatcher::ThreadSpecificInstance();
155 dispatcher->RequestIDBCursorPrefetchReset(used_prefetches_, 203 dispatcher->RequestIDBCursorPrefetchReset(used_prefetches_,
156 prefetch_keys_.size(), 204 prefetch_keys_.size(),
157 ipc_cursor_id_); 205 ipc_cursor_id_);
158 prefetch_keys_.clear(); 206 prefetch_keys_.clear();
159 prefetch_primary_keys_.clear(); 207 prefetch_primary_keys_.clear();
160 prefetch_values_.clear(); 208 prefetch_values_.clear();
161 209
162 pending_onsuccess_callbacks_ = 0; 210 pending_onsuccess_callbacks_ = 0;
163 } 211 }
164 212
165 } // namespace content 213 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698