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

Side by Side Diff: content/browser/indexed_db/indexed_db_callbacks.cc

Issue 2472213003: [IndexedDB] Refactoring to remove ref ptrs and host transaction ids. (Closed)
Patch Set: rebase Created 4 years 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
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/browser/indexed_db/indexed_db_callbacks.h" 5 #include "content/browser/indexed_db/indexed_db_callbacks.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <utility> 10 #include <utility>
11 11
12 #include "base/metrics/histogram_macros.h" 12 #include "base/metrics/histogram_macros.h"
13 #include "base/strings/utf_string_conversions.h" 13 #include "base/strings/utf_string_conversions.h"
14 #include "base/time/time.h" 14 #include "base/time/time.h"
15 #include "content/browser/child_process_security_policy_impl.h" 15 #include "content/browser/child_process_security_policy_impl.h"
16 #include "content/browser/fileapi/fileapi_message_filter.h" 16 #include "content/browser/fileapi/fileapi_message_filter.h"
17 #include "content/browser/indexed_db/cursor_impl.h" 17 #include "content/browser/indexed_db/cursor_impl.h"
18 #include "content/browser/indexed_db/database_impl.h" 18 #include "content/browser/indexed_db/database_impl.h"
19 #include "content/browser/indexed_db/indexed_db_blob_info.h" 19 #include "content/browser/indexed_db/indexed_db_blob_info.h"
20 #include "content/browser/indexed_db/indexed_db_connection.h" 20 #include "content/browser/indexed_db/indexed_db_connection.h"
21 #include "content/browser/indexed_db/indexed_db_context_impl.h" 21 #include "content/browser/indexed_db/indexed_db_context_impl.h"
22 #include "content/browser/indexed_db/indexed_db_cursor.h" 22 #include "content/browser/indexed_db/indexed_db_cursor.h"
23 #include "content/browser/indexed_db/indexed_db_database_error.h" 23 #include "content/browser/indexed_db/indexed_db_database_error.h"
24 #include "content/browser/indexed_db/indexed_db_return_value.h" 24 #include "content/browser/indexed_db/indexed_db_return_value.h"
25 #include "content/browser/indexed_db/indexed_db_tracing.h" 25 #include "content/browser/indexed_db/indexed_db_tracing.h"
26 #include "content/browser/indexed_db/indexed_db_transaction.h"
26 #include "content/browser/indexed_db/indexed_db_value.h" 27 #include "content/browser/indexed_db/indexed_db_value.h"
27 #include "content/common/indexed_db/indexed_db_constants.h" 28 #include "content/common/indexed_db/indexed_db_constants.h"
28 #include "content/common/indexed_db/indexed_db_metadata.h" 29 #include "content/common/indexed_db/indexed_db_metadata.h"
29 #include "mojo/public/cpp/bindings/strong_associated_binding.h" 30 #include "mojo/public/cpp/bindings/strong_associated_binding.h"
30 #include "storage/browser/blob/blob_storage_context.h" 31 #include "storage/browser/blob/blob_storage_context.h"
31 #include "storage/browser/blob/shareable_file_reference.h" 32 #include "storage/browser/blob/shareable_file_reference.h"
32 #include "storage/browser/quota/quota_manager.h" 33 #include "storage/browser/quota/quota_manager.h"
33 34
34 using indexed_db::mojom::CallbacksAssociatedPtrInfo; 35 using indexed_db::mojom::CallbacksAssociatedPtrInfo;
35 using std::swap; 36 using std::swap;
36 using storage::ShareableFileReference; 37 using storage::ShareableFileReference;
37 38
38 namespace content { 39 namespace content {
39 40
40 namespace { 41 namespace {
41 const int64_t kNoTransaction = -1;
42 42
43 void ConvertBlobInfo( 43 void ConvertBlobInfo(
44 const std::vector<IndexedDBBlobInfo>& blob_info, 44 const std::vector<IndexedDBBlobInfo>& blob_info,
45 std::vector<::indexed_db::mojom::BlobInfoPtr>* blob_or_file_info) { 45 std::vector<::indexed_db::mojom::BlobInfoPtr>* blob_or_file_info) {
46 blob_or_file_info->reserve(blob_info.size()); 46 blob_or_file_info->reserve(blob_info.size());
47 for (const auto& iter : blob_info) { 47 for (const auto& iter : blob_info) {
48 if (!iter.mark_used_callback().is_null()) 48 if (!iter.mark_used_callback().is_null())
49 iter.mark_used_callback().Run(); 49 iter.mark_used_callback().Run();
50 50
51 auto info = ::indexed_db::mojom::BlobInfo::New(); 51 auto info = ::indexed_db::mojom::BlobInfo::New();
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 ::indexed_db::mojom::CallbacksAssociatedPtr callbacks_; 137 ::indexed_db::mojom::CallbacksAssociatedPtr callbacks_;
138 138
139 DISALLOW_COPY_AND_ASSIGN(IOThreadHelper); 139 DISALLOW_COPY_AND_ASSIGN(IOThreadHelper);
140 }; 140 };
141 141
142 IndexedDBCallbacks::IndexedDBCallbacks( 142 IndexedDBCallbacks::IndexedDBCallbacks(
143 scoped_refptr<IndexedDBDispatcherHost> dispatcher_host, 143 scoped_refptr<IndexedDBDispatcherHost> dispatcher_host,
144 const url::Origin& origin, 144 const url::Origin& origin,
145 ::indexed_db::mojom::CallbacksAssociatedPtrInfo callbacks_info) 145 ::indexed_db::mojom::CallbacksAssociatedPtrInfo callbacks_info)
146 : dispatcher_host_(std::move(dispatcher_host)), 146 : dispatcher_host_(std::move(dispatcher_host)),
147 host_transaction_id_(kNoTransaction),
148 origin_(origin), 147 origin_(origin),
149 data_loss_(blink::WebIDBDataLossNone), 148 data_loss_(blink::WebIDBDataLossNone),
150 sent_blocked_(false), 149 sent_blocked_(false),
151 io_helper_( 150 io_helper_(
152 new IOThreadHelper(std::move(callbacks_info), dispatcher_host_)) { 151 new IOThreadHelper(std::move(callbacks_info), dispatcher_host_)) {
153 DCHECK_CURRENTLY_ON(BrowserThread::IO); 152 DCHECK_CURRENTLY_ON(BrowserThread::IO);
154 thread_checker_.DetachFromThread(); 153 thread_checker_.DetachFromThread();
155 } 154 }
156 155
157 IndexedDBCallbacks::~IndexedDBCallbacks() { 156 IndexedDBCallbacks::~IndexedDBCallbacks() {
(...skipping 15 matching lines...) Expand all
173 "WebCore.IndexedDB.OpenTime.Error", 172 "WebCore.IndexedDB.OpenTime.Error",
174 base::TimeTicks::Now() - connection_open_start_time_); 173 base::TimeTicks::Now() - connection_open_start_time_);
175 connection_open_start_time_ = base::TimeTicks(); 174 connection_open_start_time_ = base::TimeTicks();
176 } 175 }
177 } 176 }
178 177
179 void IndexedDBCallbacks::OnSuccess(const std::vector<base::string16>& value) { 178 void IndexedDBCallbacks::OnSuccess(const std::vector<base::string16>& value) {
180 DCHECK(thread_checker_.CalledOnValidThread()); 179 DCHECK(thread_checker_.CalledOnValidThread());
181 DCHECK(dispatcher_host_); 180 DCHECK(dispatcher_host_);
182 DCHECK(io_helper_); 181 DCHECK(io_helper_);
183 DCHECK_EQ(kNoTransaction, host_transaction_id_);
184 182
185 BrowserThread::PostTask( 183 BrowserThread::PostTask(
186 BrowserThread::IO, FROM_HERE, 184 BrowserThread::IO, FROM_HERE,
187 base::Bind(&IOThreadHelper::SendSuccessStringList, 185 base::Bind(&IOThreadHelper::SendSuccessStringList,
188 base::Unretained(io_helper_.get()), value)); 186 base::Unretained(io_helper_.get()), value));
189 dispatcher_host_ = nullptr; 187 dispatcher_host_ = nullptr;
190 } 188 }
191 189
192 void IndexedDBCallbacks::OnBlocked(int64_t existing_version) { 190 void IndexedDBCallbacks::OnBlocked(int64_t existing_version) {
193 DCHECK(thread_checker_.CalledOnValidThread()); 191 DCHECK(thread_checker_.CalledOnValidThread());
(...skipping 14 matching lines...) Expand all
208 UMA_HISTOGRAM_MEDIUM_TIMES( 206 UMA_HISTOGRAM_MEDIUM_TIMES(
209 "WebCore.IndexedDB.OpenTime.Blocked", 207 "WebCore.IndexedDB.OpenTime.Blocked",
210 base::TimeTicks::Now() - connection_open_start_time_); 208 base::TimeTicks::Now() - connection_open_start_time_);
211 connection_open_start_time_ = base::TimeTicks(); 209 connection_open_start_time_ = base::TimeTicks();
212 } 210 }
213 } 211 }
214 212
215 void IndexedDBCallbacks::OnUpgradeNeeded( 213 void IndexedDBCallbacks::OnUpgradeNeeded(
216 int64_t old_version, 214 int64_t old_version,
217 std::unique_ptr<IndexedDBConnection> connection, 215 std::unique_ptr<IndexedDBConnection> connection,
216 IndexedDBTransaction* transaction,
cmumford 2016/12/01 19:14:51 transaction unused in this function.
dmurph 2016/12/01 21:12:23 Done.
218 const IndexedDBDatabaseMetadata& metadata, 217 const IndexedDBDatabaseMetadata& metadata,
219 const IndexedDBDataLossInfo& data_loss_info) { 218 const IndexedDBDataLossInfo& data_loss_info) {
220 DCHECK(thread_checker_.CalledOnValidThread()); 219 DCHECK(thread_checker_.CalledOnValidThread());
221 DCHECK(dispatcher_host_); 220 DCHECK(dispatcher_host_);
222 DCHECK(io_helper_); 221 DCHECK(io_helper_);
223 222
224 DCHECK_NE(kNoTransaction, host_transaction_id_);
225 DCHECK(!database_sent_); 223 DCHECK(!database_sent_);
226 224
227 data_loss_ = data_loss_info.status; 225 data_loss_ = data_loss_info.status;
228 dispatcher_host_->RegisterTransactionId(host_transaction_id_, origin_);
229 database_sent_ = true; 226 database_sent_ = true;
230 auto database = base::MakeUnique<DatabaseImpl>(std::move(connection), origin_, 227 auto database = base::MakeUnique<DatabaseImpl>(std::move(connection), origin_,
231 dispatcher_host_); 228 dispatcher_host_);
232 229
233 BrowserThread::PostTask( 230 BrowserThread::PostTask(
234 BrowserThread::IO, FROM_HERE, 231 BrowserThread::IO, FROM_HERE,
235 base::Bind(&IOThreadHelper::SendUpgradeNeeded, 232 base::Bind(&IOThreadHelper::SendUpgradeNeeded,
236 base::Unretained(io_helper_.get()), base::Passed(&database), 233 base::Unretained(io_helper_.get()), base::Passed(&database),
237 old_version, data_loss_info.status, data_loss_info.message, 234 old_version, data_loss_info.status, data_loss_info.message,
238 metadata)); 235 metadata));
239 236
240 if (!connection_open_start_time_.is_null()) { 237 if (!connection_open_start_time_.is_null()) {
241 UMA_HISTOGRAM_MEDIUM_TIMES( 238 UMA_HISTOGRAM_MEDIUM_TIMES(
242 "WebCore.IndexedDB.OpenTime.UpgradeNeeded", 239 "WebCore.IndexedDB.OpenTime.UpgradeNeeded",
243 base::TimeTicks::Now() - connection_open_start_time_); 240 base::TimeTicks::Now() - connection_open_start_time_);
244 connection_open_start_time_ = base::TimeTicks(); 241 connection_open_start_time_ = base::TimeTicks();
245 } 242 }
246 } 243 }
247 244
248 void IndexedDBCallbacks::OnSuccess( 245 void IndexedDBCallbacks::OnSuccess(
249 std::unique_ptr<IndexedDBConnection> connection, 246 std::unique_ptr<IndexedDBConnection> connection,
250 const IndexedDBDatabaseMetadata& metadata) { 247 const IndexedDBDatabaseMetadata& metadata) {
251 DCHECK(thread_checker_.CalledOnValidThread()); 248 DCHECK(thread_checker_.CalledOnValidThread());
252 DCHECK(dispatcher_host_); 249 DCHECK(dispatcher_host_);
253 DCHECK(io_helper_); 250 DCHECK(io_helper_);
254 251
255 DCHECK_NE(kNoTransaction, host_transaction_id_);
256 DCHECK_EQ(database_sent_, !connection); 252 DCHECK_EQ(database_sent_, !connection);
257 253
258 scoped_refptr<IndexedDBCallbacks> self(this); 254 scoped_refptr<IndexedDBCallbacks> self(this);
259 255
260 // Only send a new Database if the connection was not previously sent in 256 // Only send a new Database if the connection was not previously sent in
261 // OnUpgradeNeeded. 257 // OnUpgradeNeeded.
262 std::unique_ptr<DatabaseImpl> database; 258 std::unique_ptr<DatabaseImpl> database;
263 if (!database_sent_) 259 if (!database_sent_)
264 database.reset( 260 database.reset(
265 new DatabaseImpl(std::move(connection), origin_, dispatcher_host_)); 261 new DatabaseImpl(std::move(connection), origin_, dispatcher_host_));
266 262
267 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, 263 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
268 base::Bind(&IOThreadHelper::SendSuccessDatabase, 264 base::Bind(&IOThreadHelper::SendSuccessDatabase,
269 base::Unretained(io_helper_.get()), 265 base::Unretained(io_helper_.get()),
270 base::Passed(&database), metadata)); 266 base::Passed(&database), metadata));
271 dispatcher_host_ = nullptr; 267 dispatcher_host_ = nullptr;
272 268
273 if (!connection_open_start_time_.is_null()) { 269 if (!connection_open_start_time_.is_null()) {
274 UMA_HISTOGRAM_MEDIUM_TIMES( 270 UMA_HISTOGRAM_MEDIUM_TIMES(
275 "WebCore.IndexedDB.OpenTime.Success", 271 "WebCore.IndexedDB.OpenTime.Success",
276 base::TimeTicks::Now() - connection_open_start_time_); 272 base::TimeTicks::Now() - connection_open_start_time_);
277 connection_open_start_time_ = base::TimeTicks(); 273 connection_open_start_time_ = base::TimeTicks();
278 } 274 }
279 } 275 }
280 276
281 void IndexedDBCallbacks::OnSuccess(scoped_refptr<IndexedDBCursor> cursor, 277 void IndexedDBCallbacks::OnSuccess(std::unique_ptr<IndexedDBCursor> cursor,
282 const IndexedDBKey& key, 278 const IndexedDBKey& key,
283 const IndexedDBKey& primary_key, 279 const IndexedDBKey& primary_key,
284 IndexedDBValue* value) { 280 IndexedDBValue* value) {
285 DCHECK(thread_checker_.CalledOnValidThread()); 281 DCHECK(thread_checker_.CalledOnValidThread());
286 DCHECK(dispatcher_host_); 282 DCHECK(dispatcher_host_);
287 DCHECK(io_helper_); 283 DCHECK(io_helper_);
288 284
289 DCHECK_EQ(kNoTransaction, host_transaction_id_);
290 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); 285 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_);
291 286
292 auto cursor_impl = 287 auto cursor_impl = base::MakeUnique<CursorImpl>(std::move(cursor), origin_,
293 base::MakeUnique<CursorImpl>(cursor, origin_, dispatcher_host_); 288 dispatcher_host_);
294 289
295 ::indexed_db::mojom::ValuePtr mojo_value; 290 ::indexed_db::mojom::ValuePtr mojo_value;
296 std::vector<IndexedDBBlobInfo> blob_info; 291 std::vector<IndexedDBBlobInfo> blob_info;
297 if (value) { 292 if (value) {
298 mojo_value = ConvertValue(value); 293 mojo_value = ConvertValue(value);
299 blob_info.swap(value->blob_info); 294 blob_info.swap(value->blob_info);
300 } 295 }
301 296
302 BrowserThread::PostTask( 297 BrowserThread::PostTask(
303 BrowserThread::IO, FROM_HERE, 298 BrowserThread::IO, FROM_HERE,
304 base::Bind(&IOThreadHelper::SendSuccessCursor, 299 base::Bind(&IOThreadHelper::SendSuccessCursor,
305 base::Unretained(io_helper_.get()), base::Passed(&cursor_impl), 300 base::Unretained(io_helper_.get()), base::Passed(&cursor_impl),
306 key, primary_key, base::Passed(&mojo_value), 301 key, primary_key, base::Passed(&mojo_value),
307 base::Passed(&blob_info))); 302 base::Passed(&blob_info)));
308 dispatcher_host_ = nullptr; 303 dispatcher_host_ = nullptr;
309 } 304 }
310 305
311 void IndexedDBCallbacks::OnSuccess(const IndexedDBKey& key, 306 void IndexedDBCallbacks::OnSuccess(const IndexedDBKey& key,
312 const IndexedDBKey& primary_key, 307 const IndexedDBKey& primary_key,
313 IndexedDBValue* value) { 308 IndexedDBValue* value) {
314 DCHECK(thread_checker_.CalledOnValidThread()); 309 DCHECK(thread_checker_.CalledOnValidThread());
315 DCHECK(dispatcher_host_); 310 DCHECK(dispatcher_host_);
316 DCHECK(io_helper_); 311 DCHECK(io_helper_);
317 312
318 DCHECK_EQ(kNoTransaction, host_transaction_id_);
319 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); 313 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_);
320 314
321 ::indexed_db::mojom::ValuePtr mojo_value; 315 ::indexed_db::mojom::ValuePtr mojo_value;
322 std::vector<IndexedDBBlobInfo> blob_info; 316 std::vector<IndexedDBBlobInfo> blob_info;
323 if (value) { 317 if (value) {
324 mojo_value = ConvertValue(value); 318 mojo_value = ConvertValue(value);
325 blob_info.swap(value->blob_info); 319 blob_info.swap(value->blob_info);
326 } 320 }
327 321
328 BrowserThread::PostTask( 322 BrowserThread::PostTask(
329 BrowserThread::IO, FROM_HERE, 323 BrowserThread::IO, FROM_HERE,
330 base::Bind(&IOThreadHelper::SendSuccessCursorContinue, 324 base::Bind(&IOThreadHelper::SendSuccessCursorContinue,
331 base::Unretained(io_helper_.get()), key, primary_key, 325 base::Unretained(io_helper_.get()), key, primary_key,
332 base::Passed(&mojo_value), base::Passed(&blob_info))); 326 base::Passed(&mojo_value), base::Passed(&blob_info)));
333 dispatcher_host_ = nullptr; 327 dispatcher_host_ = nullptr;
334 } 328 }
335 329
336 void IndexedDBCallbacks::OnSuccessWithPrefetch( 330 void IndexedDBCallbacks::OnSuccessWithPrefetch(
337 const std::vector<IndexedDBKey>& keys, 331 const std::vector<IndexedDBKey>& keys,
338 const std::vector<IndexedDBKey>& primary_keys, 332 const std::vector<IndexedDBKey>& primary_keys,
339 std::vector<IndexedDBValue>* values) { 333 std::vector<IndexedDBValue>* values) {
340 DCHECK(thread_checker_.CalledOnValidThread()); 334 DCHECK(thread_checker_.CalledOnValidThread());
341 DCHECK(dispatcher_host_); 335 DCHECK(dispatcher_host_);
342 DCHECK(io_helper_); 336 DCHECK(io_helper_);
343 DCHECK_EQ(keys.size(), primary_keys.size()); 337 DCHECK_EQ(keys.size(), primary_keys.size());
344 DCHECK_EQ(keys.size(), values->size()); 338 DCHECK_EQ(keys.size(), values->size());
345 339
346 DCHECK_EQ(kNoTransaction, host_transaction_id_);
347 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); 340 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_);
348 341
349 std::vector<::indexed_db::mojom::ValuePtr> mojo_values; 342 std::vector<::indexed_db::mojom::ValuePtr> mojo_values;
350 mojo_values.reserve(values->size()); 343 mojo_values.reserve(values->size());
351 for (size_t i = 0; i < values->size(); ++i) 344 for (size_t i = 0; i < values->size(); ++i)
352 mojo_values.push_back(ConvertValue(&(*values)[i])); 345 mojo_values.push_back(ConvertValue(&(*values)[i]));
353 346
354 BrowserThread::PostTask( 347 BrowserThread::PostTask(
355 BrowserThread::IO, FROM_HERE, 348 BrowserThread::IO, FROM_HERE,
356 base::Bind(&IOThreadHelper::SendSuccessCursorPrefetch, 349 base::Bind(&IOThreadHelper::SendSuccessCursorPrefetch,
357 base::Unretained(io_helper_.get()), keys, primary_keys, 350 base::Unretained(io_helper_.get()), keys, primary_keys,
358 base::Passed(&mojo_values), *values)); 351 base::Passed(&mojo_values), *values));
359 dispatcher_host_ = nullptr; 352 dispatcher_host_ = nullptr;
360 } 353 }
361 354
362 void IndexedDBCallbacks::OnSuccess(IndexedDBReturnValue* value) { 355 void IndexedDBCallbacks::OnSuccess(IndexedDBReturnValue* value) {
363 DCHECK(thread_checker_.CalledOnValidThread()); 356 DCHECK(thread_checker_.CalledOnValidThread());
364 DCHECK(dispatcher_host_); 357 DCHECK(dispatcher_host_);
365 358
366 DCHECK_EQ(kNoTransaction, host_transaction_id_);
367 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); 359 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_);
368 360
369 ::indexed_db::mojom::ReturnValuePtr mojo_value; 361 ::indexed_db::mojom::ReturnValuePtr mojo_value;
370 std::vector<IndexedDBBlobInfo> blob_info; 362 std::vector<IndexedDBBlobInfo> blob_info;
371 if (value) { 363 if (value) {
372 mojo_value = ConvertReturnValue(value); 364 mojo_value = ConvertReturnValue(value);
373 blob_info = value->blob_info; 365 blob_info = value->blob_info;
374 } 366 }
375 367
376 BrowserThread::PostTask( 368 BrowserThread::PostTask(
377 BrowserThread::IO, FROM_HERE, 369 BrowserThread::IO, FROM_HERE,
378 base::Bind(&IOThreadHelper::SendSuccessValue, 370 base::Bind(&IOThreadHelper::SendSuccessValue,
379 base::Unretained(io_helper_.get()), base::Passed(&mojo_value), 371 base::Unretained(io_helper_.get()), base::Passed(&mojo_value),
380 base::Passed(&blob_info))); 372 base::Passed(&blob_info)));
381 dispatcher_host_ = nullptr; 373 dispatcher_host_ = nullptr;
382 } 374 }
383 375
384 void IndexedDBCallbacks::OnSuccessArray( 376 void IndexedDBCallbacks::OnSuccessArray(
385 std::vector<IndexedDBReturnValue>* values) { 377 std::vector<IndexedDBReturnValue>* values) {
386 DCHECK(thread_checker_.CalledOnValidThread()); 378 DCHECK(thread_checker_.CalledOnValidThread());
387 DCHECK(dispatcher_host_); 379 DCHECK(dispatcher_host_);
388 DCHECK(io_helper_); 380 DCHECK(io_helper_);
389 381
390 DCHECK_EQ(kNoTransaction, host_transaction_id_);
391 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); 382 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_);
392 383
393 std::vector<::indexed_db::mojom::ReturnValuePtr> mojo_values; 384 std::vector<::indexed_db::mojom::ReturnValuePtr> mojo_values;
394 mojo_values.reserve(values->size()); 385 mojo_values.reserve(values->size());
395 for (size_t i = 0; i < values->size(); ++i) 386 for (size_t i = 0; i < values->size(); ++i)
396 mojo_values.push_back(ConvertReturnValue(&(*values)[i])); 387 mojo_values.push_back(ConvertReturnValue(&(*values)[i]));
397 388
398 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, 389 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
399 base::Bind(&IOThreadHelper::SendSuccessArray, 390 base::Bind(&IOThreadHelper::SendSuccessArray,
400 base::Unretained(io_helper_.get()), 391 base::Unretained(io_helper_.get()),
401 base::Passed(&mojo_values), *values)); 392 base::Passed(&mojo_values), *values));
402 dispatcher_host_ = nullptr; 393 dispatcher_host_ = nullptr;
403 } 394 }
404 395
405 void IndexedDBCallbacks::OnSuccess(const IndexedDBKey& value) { 396 void IndexedDBCallbacks::OnSuccess(const IndexedDBKey& value) {
406 DCHECK(thread_checker_.CalledOnValidThread()); 397 DCHECK(thread_checker_.CalledOnValidThread());
407 DCHECK(dispatcher_host_); 398 DCHECK(dispatcher_host_);
408 DCHECK(io_helper_); 399 DCHECK(io_helper_);
409 400
410 DCHECK_EQ(kNoTransaction, host_transaction_id_);
411 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); 401 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_);
412 402
413 BrowserThread::PostTask( 403 BrowserThread::PostTask(
414 BrowserThread::IO, FROM_HERE, 404 BrowserThread::IO, FROM_HERE,
415 base::Bind(&IOThreadHelper::SendSuccessKey, 405 base::Bind(&IOThreadHelper::SendSuccessKey,
416 base::Unretained(io_helper_.get()), value)); 406 base::Unretained(io_helper_.get()), value));
417 dispatcher_host_ = nullptr; 407 dispatcher_host_ = nullptr;
418 } 408 }
419 409
420 void IndexedDBCallbacks::OnSuccess(int64_t value) { 410 void IndexedDBCallbacks::OnSuccess(int64_t value) {
421 DCHECK(thread_checker_.CalledOnValidThread()); 411 DCHECK(thread_checker_.CalledOnValidThread());
422 DCHECK(dispatcher_host_); 412 DCHECK(dispatcher_host_);
423 413
424 BrowserThread::PostTask( 414 BrowserThread::PostTask(
425 BrowserThread::IO, FROM_HERE, 415 BrowserThread::IO, FROM_HERE,
426 base::Bind(&IOThreadHelper::SendSuccessInteger, 416 base::Bind(&IOThreadHelper::SendSuccessInteger,
427 base::Unretained(io_helper_.get()), value)); 417 base::Unretained(io_helper_.get()), value));
428 dispatcher_host_ = nullptr; 418 dispatcher_host_ = nullptr;
429 } 419 }
430 420
431 void IndexedDBCallbacks::OnSuccess() { 421 void IndexedDBCallbacks::OnSuccess() {
432 DCHECK(thread_checker_.CalledOnValidThread()); 422 DCHECK(thread_checker_.CalledOnValidThread());
433 DCHECK(dispatcher_host_); 423 DCHECK(dispatcher_host_);
434 DCHECK(io_helper_); 424 DCHECK(io_helper_);
435 425
436 DCHECK_EQ(kNoTransaction, host_transaction_id_);
437 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); 426 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_);
438 427
439 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, 428 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
440 base::Bind(&IOThreadHelper::SendSuccess, 429 base::Bind(&IOThreadHelper::SendSuccess,
441 base::Unretained(io_helper_.get()))); 430 base::Unretained(io_helper_.get())));
442 dispatcher_host_ = nullptr; 431 dispatcher_host_ = nullptr;
443 } 432 }
444 433
445 bool IndexedDBCallbacks::IsValid() const { 434 bool IndexedDBCallbacks::IsValid() const {
446 DCHECK(dispatcher_host_.get()); 435 DCHECK(dispatcher_host_.get());
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
607 IDB_TRACE("IndexedDBCallbacks::CreateAllBlobs"); 596 IDB_TRACE("IndexedDBCallbacks::CreateAllBlobs");
608 DCHECK_EQ(blob_info.size(), blob_or_file_info->size()); 597 DCHECK_EQ(blob_info.size(), blob_or_file_info->size());
609 if (!dispatcher_host_->blob_storage_context()) 598 if (!dispatcher_host_->blob_storage_context())
610 return false; 599 return false;
611 for (size_t i = 0; i < blob_info.size(); ++i) 600 for (size_t i = 0; i < blob_info.size(); ++i)
612 (*blob_or_file_info)[i]->uuid = CreateBlobData(blob_info[i]); 601 (*blob_or_file_info)[i]->uuid = CreateBlobData(blob_info[i]);
613 return true; 602 return true;
614 } 603 }
615 604
616 } // namespace content 605 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698