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

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

Issue 2727733004: [IndexedDB] Closing mojo connections when renderer quits (Closed)
Patch Set: comments Created 3 years, 8 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
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/database_impl.h" 5 #include "content/browser/indexed_db/database_impl.h"
6 6
7 #include "base/memory/ptr_util.h" 7 #include "base/memory/ptr_util.h"
8 #include "base/metrics/histogram_macros.h" 8 #include "base/metrics/histogram_macros.h"
9 #include "base/sequenced_task_runner.h"
10 #include "base/threading/thread_checker.h"
9 #include "base/threading/thread_task_runner_handle.h" 11 #include "base/threading/thread_task_runner_handle.h"
10 #include "content/browser/bad_message.h" 12 #include "content/browser/bad_message.h"
11 #include "content/browser/child_process_security_policy_impl.h" 13 #include "content/browser/child_process_security_policy_impl.h"
12 #include "content/browser/indexed_db/indexed_db_connection.h" 14 #include "content/browser/indexed_db/indexed_db_connection.h"
13 #include "content/browser/indexed_db/indexed_db_context_impl.h" 15 #include "content/browser/indexed_db/indexed_db_context_impl.h"
14 #include "content/browser/indexed_db/indexed_db_dispatcher_host.h" 16 #include "content/browser/indexed_db/indexed_db_dispatcher_host.h"
15 #include "content/browser/indexed_db/indexed_db_transaction.h" 17 #include "content/browser/indexed_db/indexed_db_transaction.h"
16 #include "content/browser/indexed_db/indexed_db_value.h" 18 #include "content/browser/indexed_db/indexed_db_value.h"
17 #include "storage/browser/blob/blob_storage_context.h" 19 #include "storage/browser/blob/blob_storage_context.h"
18 #include "storage/browser/quota/quota_manager_proxy.h" 20 #include "storage/browser/quota/quota_manager_proxy.h"
19 #include "third_party/WebKit/public/platform/modules/indexeddb/WebIDBDatabaseExc eption.h" 21 #include "third_party/WebKit/public/platform/modules/indexeddb/WebIDBDatabaseExc eption.h"
20 22
21 using std::swap; 23 using std::swap;
22 24
23 namespace content { 25 namespace content {
24 class IndexedDBDatabaseError; 26 class IndexedDBDatabaseError;
25 27
26 namespace { 28 namespace {
27 const char kInvalidBlobUuid[] = "Blob does not exist"; 29 const char kInvalidBlobUuid[] = "Blob does not exist";
28 const char kInvalidBlobFilePath[] = "Blob file path is invalid"; 30 const char kInvalidBlobFilePath[] = "Blob file path is invalid";
29 } // namespace 31 } // namespace
30 32
33 // Expect to be created on IO thread, and called/destroyed on IDB thread.
31 class DatabaseImpl::IDBThreadHelper { 34 class DatabaseImpl::IDBThreadHelper {
32 public: 35 public:
33 IDBThreadHelper(std::unique_ptr<IndexedDBConnection> connection, 36 IDBThreadHelper(std::unique_ptr<IndexedDBConnection> connection,
34 const url::Origin& origin, 37 const url::Origin& origin,
35 scoped_refptr<IndexedDBDispatcherHost> dispatcher_host); 38 scoped_refptr<IndexedDBContextImpl> indexed_db_context);
36 ~IDBThreadHelper(); 39 ~IDBThreadHelper();
37 40
41 void ConnectionOpened();
42
38 void CreateObjectStore(int64_t transaction_id, 43 void CreateObjectStore(int64_t transaction_id,
39 int64_t object_store_id, 44 int64_t object_store_id,
40 const base::string16& name, 45 const base::string16& name,
41 const IndexedDBKeyPath& key_path, 46 const IndexedDBKeyPath& key_path,
42 bool auto_increment); 47 bool auto_increment);
43 void DeleteObjectStore(int64_t transaction_id, int64_t object_store_id); 48 void DeleteObjectStore(int64_t transaction_id, int64_t object_store_id);
44 void RenameObjectStore(int64_t transaction_id, 49 void RenameObjectStore(int64_t transaction_id,
45 int64_t object_store_id, 50 int64_t object_store_id,
46 const base::string16& new_name); 51 const base::string16& new_name);
47 void CreateTransaction(int64_t transaction_id, 52 void CreateTransaction(int64_t transaction_id,
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 void AbortWithError(int64_t transaction_id, 128 void AbortWithError(int64_t transaction_id,
124 const IndexedDBDatabaseError& error); 129 const IndexedDBDatabaseError& error);
125 void Commit(int64_t transaction_id); 130 void Commit(int64_t transaction_id);
126 void OnGotUsageAndQuotaForCommit(int64_t transaction_id, 131 void OnGotUsageAndQuotaForCommit(int64_t transaction_id,
127 storage::QuotaStatusCode status, 132 storage::QuotaStatusCode status,
128 int64_t usage, 133 int64_t usage,
129 int64_t quota); 134 int64_t quota);
130 void AckReceivedBlobs(const std::vector<std::string>& uuids); 135 void AckReceivedBlobs(const std::vector<std::string>& uuids);
131 136
132 private: 137 private:
133 scoped_refptr<IndexedDBDispatcherHost> dispatcher_host_; 138 scoped_refptr<IndexedDBContextImpl> indexed_db_context_;
134 std::unique_ptr<IndexedDBConnection> connection_; 139 std::unique_ptr<IndexedDBConnection> connection_;
135 const url::Origin origin_; 140 const url::Origin origin_;
141 base::ThreadChecker idb_thread_checker_;
136 base::WeakPtrFactory<IDBThreadHelper> weak_factory_; 142 base::WeakPtrFactory<IDBThreadHelper> weak_factory_;
137 }; 143 };
138 144
139 DatabaseImpl::DatabaseImpl( 145 DatabaseImpl::DatabaseImpl(std::unique_ptr<IndexedDBConnection> connection,
140 std::unique_ptr<IndexedDBConnection> connection, 146 const url::Origin& origin,
141 const url::Origin& origin, 147 IndexedDBDispatcherHost* dispatcher_host,
142 scoped_refptr<IndexedDBDispatcherHost> dispatcher_host) 148 scoped_refptr<base::SequencedTaskRunner> idb_runner)
143 : dispatcher_host_(dispatcher_host), 149 : dispatcher_host_(dispatcher_host),
144 origin_(origin), 150 origin_(origin),
145 idb_runner_(base::ThreadTaskRunnerHandle::Get()) { 151 idb_runner_(std::move(idb_runner)) {
152 DCHECK(connection);
146 helper_ = new IDBThreadHelper(std::move(connection), origin, 153 helper_ = new IDBThreadHelper(std::move(connection), origin,
147 std::move(dispatcher_host)); 154 dispatcher_host->context());
155 idb_runner_->PostTask(FROM_HERE,
156 base::Bind(&IDBThreadHelper::ConnectionOpened,
157 base::Unretained(helper_)));
148 } 158 }
149 159
150 DatabaseImpl::~DatabaseImpl() { 160 DatabaseImpl::~DatabaseImpl() {
151 idb_runner_->DeleteSoon(FROM_HERE, helper_); 161 idb_runner_->DeleteSoon(FROM_HERE, helper_);
152 } 162 }
153 163
154 void DatabaseImpl::CreateObjectStore(int64_t transaction_id, 164 void DatabaseImpl::CreateObjectStore(int64_t transaction_id,
155 int64_t object_store_id, 165 int64_t object_store_id,
156 const base::string16& name, 166 const base::string16& name,
157 const IndexedDBKeyPath& key_path, 167 const IndexedDBKeyPath& key_path,
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 base::Unretained(helper_), observers)); 229 base::Unretained(helper_), observers));
220 } 230 }
221 231
222 void DatabaseImpl::Get( 232 void DatabaseImpl::Get(
223 int64_t transaction_id, 233 int64_t transaction_id,
224 int64_t object_store_id, 234 int64_t object_store_id,
225 int64_t index_id, 235 int64_t index_id,
226 const IndexedDBKeyRange& key_range, 236 const IndexedDBKeyRange& key_range,
227 bool key_only, 237 bool key_only,
228 ::indexed_db::mojom::CallbacksAssociatedPtrInfo callbacks_info) { 238 ::indexed_db::mojom::CallbacksAssociatedPtrInfo callbacks_info) {
229 scoped_refptr<IndexedDBCallbacks> callbacks(new IndexedDBCallbacks( 239 scoped_refptr<IndexedDBCallbacks> callbacks(
230 dispatcher_host_.get(), origin_, std::move(callbacks_info))); 240 new IndexedDBCallbacks(dispatcher_host_->AsWeakPtr(), origin_,
241 std::move(callbacks_info), idb_runner_));
231 idb_runner_->PostTask( 242 idb_runner_->PostTask(
232 FROM_HERE, base::Bind(&IDBThreadHelper::Get, base::Unretained(helper_), 243 FROM_HERE, base::Bind(&IDBThreadHelper::Get, base::Unretained(helper_),
233 transaction_id, object_store_id, index_id, 244 transaction_id, object_store_id, index_id,
234 key_range, key_only, base::Passed(&callbacks))); 245 key_range, key_only, base::Passed(&callbacks)));
235 } 246 }
236 247
237 void DatabaseImpl::GetAll( 248 void DatabaseImpl::GetAll(
238 int64_t transaction_id, 249 int64_t transaction_id,
239 int64_t object_store_id, 250 int64_t object_store_id,
240 int64_t index_id, 251 int64_t index_id,
241 const IndexedDBKeyRange& key_range, 252 const IndexedDBKeyRange& key_range,
242 bool key_only, 253 bool key_only,
243 int64_t max_count, 254 int64_t max_count,
244 ::indexed_db::mojom::CallbacksAssociatedPtrInfo callbacks_info) { 255 ::indexed_db::mojom::CallbacksAssociatedPtrInfo callbacks_info) {
245 scoped_refptr<IndexedDBCallbacks> callbacks(new IndexedDBCallbacks( 256 scoped_refptr<IndexedDBCallbacks> callbacks(
246 dispatcher_host_.get(), origin_, std::move(callbacks_info))); 257 new IndexedDBCallbacks(dispatcher_host_->AsWeakPtr(), origin_,
258 std::move(callbacks_info), idb_runner_));
247 idb_runner_->PostTask( 259 idb_runner_->PostTask(
248 FROM_HERE, 260 FROM_HERE,
249 base::Bind(&IDBThreadHelper::GetAll, base::Unretained(helper_), 261 base::Bind(&IDBThreadHelper::GetAll, base::Unretained(helper_),
250 transaction_id, object_store_id, index_id, key_range, key_only, 262 transaction_id, object_store_id, index_id, key_range, key_only,
251 max_count, base::Passed(&callbacks))); 263 max_count, base::Passed(&callbacks)));
252 } 264 }
253 265
254 void DatabaseImpl::Put( 266 void DatabaseImpl::Put(
255 int64_t transaction_id, 267 int64_t transaction_id,
256 int64_t object_store_id, 268 int64_t object_store_id,
257 ::indexed_db::mojom::ValuePtr value, 269 ::indexed_db::mojom::ValuePtr value,
258 const IndexedDBKey& key, 270 const IndexedDBKey& key,
259 blink::WebIDBPutMode mode, 271 blink::WebIDBPutMode mode,
260 const std::vector<IndexedDBIndexKeys>& index_keys, 272 const std::vector<IndexedDBIndexKeys>& index_keys,
261 ::indexed_db::mojom::CallbacksAssociatedPtrInfo callbacks_info) { 273 ::indexed_db::mojom::CallbacksAssociatedPtrInfo callbacks_info) {
262 ChildProcessSecurityPolicyImpl* policy = 274 ChildProcessSecurityPolicyImpl* policy =
263 ChildProcessSecurityPolicyImpl::GetInstance(); 275 ChildProcessSecurityPolicyImpl::GetInstance();
264 276
265 scoped_refptr<IndexedDBCallbacks> callbacks(new IndexedDBCallbacks( 277 scoped_refptr<IndexedDBCallbacks> callbacks(
266 dispatcher_host_.get(), origin_, std::move(callbacks_info))); 278 new IndexedDBCallbacks(dispatcher_host_->AsWeakPtr(), origin_,
279 std::move(callbacks_info), idb_runner_));
267 280
268 std::vector<std::unique_ptr<storage::BlobDataHandle>> handles( 281 std::vector<std::unique_ptr<storage::BlobDataHandle>> handles(
269 value->blob_or_file_info.size()); 282 value->blob_or_file_info.size());
270 std::vector<IndexedDBBlobInfo> blob_info(value->blob_or_file_info.size()); 283 std::vector<IndexedDBBlobInfo> blob_info(value->blob_or_file_info.size());
271 for (size_t i = 0; i < value->blob_or_file_info.size(); ++i) { 284 for (size_t i = 0; i < value->blob_or_file_info.size(); ++i) {
272 ::indexed_db::mojom::BlobInfoPtr& info = value->blob_or_file_info[i]; 285 ::indexed_db::mojom::BlobInfoPtr& info = value->blob_or_file_info[i];
273 286
274 std::unique_ptr<storage::BlobDataHandle> handle = 287 std::unique_ptr<storage::BlobDataHandle> handle =
275 dispatcher_host_->blob_storage_context()->GetBlobDataFromUUID( 288 dispatcher_host_->blob_storage_context()->GetBlobDataFromUUID(
276 info->uuid); 289 info->uuid);
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
344 357
345 void DatabaseImpl::OpenCursor( 358 void DatabaseImpl::OpenCursor(
346 int64_t transaction_id, 359 int64_t transaction_id,
347 int64_t object_store_id, 360 int64_t object_store_id,
348 int64_t index_id, 361 int64_t index_id,
349 const IndexedDBKeyRange& key_range, 362 const IndexedDBKeyRange& key_range,
350 blink::WebIDBCursorDirection direction, 363 blink::WebIDBCursorDirection direction,
351 bool key_only, 364 bool key_only,
352 blink::WebIDBTaskType task_type, 365 blink::WebIDBTaskType task_type,
353 ::indexed_db::mojom::CallbacksAssociatedPtrInfo callbacks_info) { 366 ::indexed_db::mojom::CallbacksAssociatedPtrInfo callbacks_info) {
354 scoped_refptr<IndexedDBCallbacks> callbacks(new IndexedDBCallbacks( 367 scoped_refptr<IndexedDBCallbacks> callbacks(
355 dispatcher_host_.get(), origin_, std::move(callbacks_info))); 368 new IndexedDBCallbacks(dispatcher_host_->AsWeakPtr(), origin_,
369 std::move(callbacks_info), idb_runner_));
356 idb_runner_->PostTask( 370 idb_runner_->PostTask(
357 FROM_HERE, 371 FROM_HERE,
358 base::Bind(&IDBThreadHelper::OpenCursor, base::Unretained(helper_), 372 base::Bind(&IDBThreadHelper::OpenCursor, base::Unretained(helper_),
359 transaction_id, object_store_id, index_id, key_range, 373 transaction_id, object_store_id, index_id, key_range,
360 direction, key_only, task_type, base::Passed(&callbacks))); 374 direction, key_only, task_type, base::Passed(&callbacks)));
361 } 375 }
362 376
363 void DatabaseImpl::Count( 377 void DatabaseImpl::Count(
364 int64_t transaction_id, 378 int64_t transaction_id,
365 int64_t object_store_id, 379 int64_t object_store_id,
366 int64_t index_id, 380 int64_t index_id,
367 const IndexedDBKeyRange& key_range, 381 const IndexedDBKeyRange& key_range,
368 ::indexed_db::mojom::CallbacksAssociatedPtrInfo callbacks_info) { 382 ::indexed_db::mojom::CallbacksAssociatedPtrInfo callbacks_info) {
369 scoped_refptr<IndexedDBCallbacks> callbacks(new IndexedDBCallbacks( 383 scoped_refptr<IndexedDBCallbacks> callbacks(
370 dispatcher_host_.get(), origin_, std::move(callbacks_info))); 384 new IndexedDBCallbacks(dispatcher_host_->AsWeakPtr(), origin_,
385 std::move(callbacks_info), idb_runner_));
371 idb_runner_->PostTask( 386 idb_runner_->PostTask(
372 FROM_HERE, base::Bind(&IDBThreadHelper::Count, base::Unretained(helper_), 387 FROM_HERE, base::Bind(&IDBThreadHelper::Count, base::Unretained(helper_),
373 transaction_id, object_store_id, index_id, 388 transaction_id, object_store_id, index_id,
374 key_range, base::Passed(&callbacks))); 389 key_range, base::Passed(&callbacks)));
375 } 390 }
376 391
377 void DatabaseImpl::DeleteRange( 392 void DatabaseImpl::DeleteRange(
378 int64_t transaction_id, 393 int64_t transaction_id,
379 int64_t object_store_id, 394 int64_t object_store_id,
380 const IndexedDBKeyRange& key_range, 395 const IndexedDBKeyRange& key_range,
381 ::indexed_db::mojom::CallbacksAssociatedPtrInfo callbacks_info) { 396 ::indexed_db::mojom::CallbacksAssociatedPtrInfo callbacks_info) {
382 scoped_refptr<IndexedDBCallbacks> callbacks(new IndexedDBCallbacks( 397 scoped_refptr<IndexedDBCallbacks> callbacks(
383 dispatcher_host_.get(), origin_, std::move(callbacks_info))); 398 new IndexedDBCallbacks(dispatcher_host_->AsWeakPtr(), origin_,
399 std::move(callbacks_info), idb_runner_));
384 idb_runner_->PostTask( 400 idb_runner_->PostTask(
385 FROM_HERE, 401 FROM_HERE,
386 base::Bind(&IDBThreadHelper::DeleteRange, base::Unretained(helper_), 402 base::Bind(&IDBThreadHelper::DeleteRange, base::Unretained(helper_),
387 transaction_id, object_store_id, key_range, 403 transaction_id, object_store_id, key_range,
388 base::Passed(&callbacks))); 404 base::Passed(&callbacks)));
389 } 405 }
390 406
391 void DatabaseImpl::Clear( 407 void DatabaseImpl::Clear(
392 int64_t transaction_id, 408 int64_t transaction_id,
393 int64_t object_store_id, 409 int64_t object_store_id,
394 ::indexed_db::mojom::CallbacksAssociatedPtrInfo callbacks_info) { 410 ::indexed_db::mojom::CallbacksAssociatedPtrInfo callbacks_info) {
395 scoped_refptr<IndexedDBCallbacks> callbacks(new IndexedDBCallbacks( 411 scoped_refptr<IndexedDBCallbacks> callbacks(
396 dispatcher_host_.get(), origin_, std::move(callbacks_info))); 412 new IndexedDBCallbacks(dispatcher_host_->AsWeakPtr(), origin_,
413 std::move(callbacks_info), idb_runner_));
397 idb_runner_->PostTask( 414 idb_runner_->PostTask(
398 FROM_HERE, 415 FROM_HERE,
399 base::Bind(&IDBThreadHelper::Clear, base::Unretained(helper_), 416 base::Bind(&IDBThreadHelper::Clear, base::Unretained(helper_),
400 transaction_id, object_store_id, base::Passed(&callbacks))); 417 transaction_id, object_store_id, base::Passed(&callbacks)));
401 } 418 }
402 419
403 void DatabaseImpl::CreateIndex(int64_t transaction_id, 420 void DatabaseImpl::CreateIndex(int64_t transaction_id,
404 int64_t object_store_id, 421 int64_t object_store_id,
405 int64_t index_id, 422 int64_t index_id,
406 const base::string16& name, 423 const base::string16& name,
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
446 } 463 }
447 464
448 void DatabaseImpl::AckReceivedBlobs(const std::vector<std::string>& uuids) { 465 void DatabaseImpl::AckReceivedBlobs(const std::vector<std::string>& uuids) {
449 for (const auto& uuid : uuids) 466 for (const auto& uuid : uuids)
450 dispatcher_host_->DropBlobData(uuid); 467 dispatcher_host_->DropBlobData(uuid);
451 } 468 }
452 469
453 DatabaseImpl::IDBThreadHelper::IDBThreadHelper( 470 DatabaseImpl::IDBThreadHelper::IDBThreadHelper(
454 std::unique_ptr<IndexedDBConnection> connection, 471 std::unique_ptr<IndexedDBConnection> connection,
455 const url::Origin& origin, 472 const url::Origin& origin,
456 scoped_refptr<IndexedDBDispatcherHost> dispatcher_host) 473 scoped_refptr<IndexedDBContextImpl> indexed_db_context)
457 : dispatcher_host_(std::move(dispatcher_host)), 474 : indexed_db_context_(indexed_db_context),
458 connection_(std::move(connection)), 475 connection_(std::move(connection)),
459 origin_(origin), 476 origin_(origin),
460 weak_factory_(this) { 477 weak_factory_(this) {
461 dispatcher_host_->context()->ConnectionOpened(origin_, connection.get()); 478 DCHECK_CURRENTLY_ON(BrowserThread::IO);
479 idb_thread_checker_.DetachFromThread();
462 } 480 }
463 481
464 DatabaseImpl::IDBThreadHelper::~IDBThreadHelper() { 482 DatabaseImpl::IDBThreadHelper::~IDBThreadHelper() {
483 DCHECK(idb_thread_checker_.CalledOnValidThread());
465 if (connection_->IsConnected()) 484 if (connection_->IsConnected())
466 connection_->Close(); 485 connection_->Close();
467 dispatcher_host_->context()->ConnectionClosed(origin_, connection_.get()); 486 indexed_db_context_->ConnectionClosed(origin_, connection_.get());
487 }
488
489 void DatabaseImpl::IDBThreadHelper::ConnectionOpened() {
490 DCHECK(idb_thread_checker_.CalledOnValidThread());
491 indexed_db_context_->ConnectionOpened(origin_, connection_.get());
468 } 492 }
469 493
470 void DatabaseImpl::IDBThreadHelper::CreateObjectStore( 494 void DatabaseImpl::IDBThreadHelper::CreateObjectStore(
471 int64_t transaction_id, 495 int64_t transaction_id,
472 int64_t object_store_id, 496 int64_t object_store_id,
473 const base::string16& name, 497 const base::string16& name,
474 const IndexedDBKeyPath& key_path, 498 const IndexedDBKeyPath& key_path,
475 bool auto_increment) { 499 bool auto_increment) {
500 DCHECK(idb_thread_checker_.CalledOnValidThread());
476 if (!connection_->IsConnected()) 501 if (!connection_->IsConnected())
477 return; 502 return;
478 503
479 IndexedDBTransaction* transaction = 504 IndexedDBTransaction* transaction =
480 connection_->GetTransaction(transaction_id); 505 connection_->GetTransaction(transaction_id);
481 if (!transaction) 506 if (!transaction)
482 return; 507 return;
483 508
484 connection_->database()->CreateObjectStore(transaction, object_store_id, name, 509 connection_->database()->CreateObjectStore(transaction, object_store_id, name,
485 key_path, auto_increment); 510 key_path, auto_increment);
486 } 511 }
487 512
488 void DatabaseImpl::IDBThreadHelper::DeleteObjectStore(int64_t transaction_id, 513 void DatabaseImpl::IDBThreadHelper::DeleteObjectStore(int64_t transaction_id,
489 int64_t object_store_id) { 514 int64_t object_store_id) {
515 DCHECK(idb_thread_checker_.CalledOnValidThread());
490 if (!connection_->IsConnected()) 516 if (!connection_->IsConnected())
491 return; 517 return;
492 518
493 IndexedDBTransaction* transaction = 519 IndexedDBTransaction* transaction =
494 connection_->GetTransaction(transaction_id); 520 connection_->GetTransaction(transaction_id);
495 if (!transaction) 521 if (!transaction)
496 return; 522 return;
497 523
498 connection_->database()->DeleteObjectStore(transaction, object_store_id); 524 connection_->database()->DeleteObjectStore(transaction, object_store_id);
499 } 525 }
500 526
501 void DatabaseImpl::IDBThreadHelper::RenameObjectStore( 527 void DatabaseImpl::IDBThreadHelper::RenameObjectStore(
502 int64_t transaction_id, 528 int64_t transaction_id,
503 int64_t object_store_id, 529 int64_t object_store_id,
504 const base::string16& new_name) { 530 const base::string16& new_name) {
531 DCHECK(idb_thread_checker_.CalledOnValidThread());
505 if (!connection_->IsConnected()) 532 if (!connection_->IsConnected())
506 return; 533 return;
507 534
508 IndexedDBTransaction* transaction = 535 IndexedDBTransaction* transaction =
509 connection_->GetTransaction(transaction_id); 536 connection_->GetTransaction(transaction_id);
510 if (!transaction) 537 if (!transaction)
511 return; 538 return;
512 539
513 connection_->database()->RenameObjectStore(transaction, object_store_id, 540 connection_->database()->RenameObjectStore(transaction, object_store_id,
514 new_name); 541 new_name);
515 } 542 }
516 543
517 void DatabaseImpl::IDBThreadHelper::CreateTransaction( 544 void DatabaseImpl::IDBThreadHelper::CreateTransaction(
518 int64_t transaction_id, 545 int64_t transaction_id,
519 const std::vector<int64_t>& object_store_ids, 546 const std::vector<int64_t>& object_store_ids,
520 blink::WebIDBTransactionMode mode) { 547 blink::WebIDBTransactionMode mode) {
548 DCHECK(idb_thread_checker_.CalledOnValidThread());
521 if (!connection_->IsConnected()) 549 if (!connection_->IsConnected())
522 return; 550 return;
523 551
524 connection_->database()->CreateTransaction(transaction_id, connection_.get(), 552 connection_->database()->CreateTransaction(transaction_id, connection_.get(),
525 object_store_ids, mode); 553 object_store_ids, mode);
526 } 554 }
527 555
528 void DatabaseImpl::IDBThreadHelper::Close() { 556 void DatabaseImpl::IDBThreadHelper::Close() {
557 DCHECK(idb_thread_checker_.CalledOnValidThread());
529 if (!connection_->IsConnected()) 558 if (!connection_->IsConnected())
530 return; 559 return;
531 560
532 connection_->Close(); 561 connection_->Close();
533 } 562 }
534 563
535 void DatabaseImpl::IDBThreadHelper::VersionChangeIgnored() { 564 void DatabaseImpl::IDBThreadHelper::VersionChangeIgnored() {
565 DCHECK(idb_thread_checker_.CalledOnValidThread());
536 if (!connection_->IsConnected()) 566 if (!connection_->IsConnected())
537 return; 567 return;
538 568
539 connection_->VersionChangeIgnored(); 569 connection_->VersionChangeIgnored();
540 } 570 }
541 571
542 void DatabaseImpl::IDBThreadHelper::AddObserver(int64_t transaction_id, 572 void DatabaseImpl::IDBThreadHelper::AddObserver(int64_t transaction_id,
543 int32_t observer_id, 573 int32_t observer_id,
544 bool include_transaction, 574 bool include_transaction,
545 bool no_records, 575 bool no_records,
546 bool values, 576 bool values,
547 uint16_t operation_types) { 577 uint16_t operation_types) {
578 DCHECK(idb_thread_checker_.CalledOnValidThread());
548 if (!connection_->IsConnected()) 579 if (!connection_->IsConnected())
549 return; 580 return;
550 581
551 IndexedDBTransaction* transaction = 582 IndexedDBTransaction* transaction =
552 connection_->GetTransaction(transaction_id); 583 connection_->GetTransaction(transaction_id);
553 if (!transaction) 584 if (!transaction)
554 return; 585 return;
555 586
556 IndexedDBObserver::Options options(include_transaction, no_records, values, 587 IndexedDBObserver::Options options(include_transaction, no_records, values,
557 operation_types); 588 operation_types);
558 connection_->database()->AddPendingObserver(transaction, observer_id, 589 connection_->database()->AddPendingObserver(transaction, observer_id,
559 options); 590 options);
560 } 591 }
561 592
562 void DatabaseImpl::IDBThreadHelper::RemoveObservers( 593 void DatabaseImpl::IDBThreadHelper::RemoveObservers(
563 const std::vector<int32_t>& observers) { 594 const std::vector<int32_t>& observers) {
595 DCHECK(idb_thread_checker_.CalledOnValidThread());
564 if (!connection_->IsConnected()) 596 if (!connection_->IsConnected())
565 return; 597 return;
566 598
567 connection_->RemoveObservers(observers); 599 connection_->RemoveObservers(observers);
568 } 600 }
569 601
570 void DatabaseImpl::IDBThreadHelper::Get( 602 void DatabaseImpl::IDBThreadHelper::Get(
571 int64_t transaction_id, 603 int64_t transaction_id,
572 int64_t object_store_id, 604 int64_t object_store_id,
573 int64_t index_id, 605 int64_t index_id,
574 const IndexedDBKeyRange& key_range, 606 const IndexedDBKeyRange& key_range,
575 bool key_only, 607 bool key_only,
576 scoped_refptr<IndexedDBCallbacks> callbacks) { 608 scoped_refptr<IndexedDBCallbacks> callbacks) {
609 DCHECK(idb_thread_checker_.CalledOnValidThread());
577 if (!connection_->IsConnected()) 610 if (!connection_->IsConnected())
578 return; 611 return;
579 612
580 IndexedDBTransaction* transaction = 613 IndexedDBTransaction* transaction =
581 connection_->GetTransaction(transaction_id); 614 connection_->GetTransaction(transaction_id);
582 if (!transaction) 615 if (!transaction)
583 return; 616 return;
584 617
585 connection_->database()->Get(transaction, object_store_id, index_id, 618 connection_->database()->Get(transaction, object_store_id, index_id,
586 base::MakeUnique<IndexedDBKeyRange>(key_range), 619 base::MakeUnique<IndexedDBKeyRange>(key_range),
587 key_only, callbacks); 620 key_only, callbacks);
588 } 621 }
589 622
590 void DatabaseImpl::IDBThreadHelper::GetAll( 623 void DatabaseImpl::IDBThreadHelper::GetAll(
591 int64_t transaction_id, 624 int64_t transaction_id,
592 int64_t object_store_id, 625 int64_t object_store_id,
593 int64_t index_id, 626 int64_t index_id,
594 const IndexedDBKeyRange& key_range, 627 const IndexedDBKeyRange& key_range,
595 bool key_only, 628 bool key_only,
596 int64_t max_count, 629 int64_t max_count,
597 scoped_refptr<IndexedDBCallbacks> callbacks) { 630 scoped_refptr<IndexedDBCallbacks> callbacks) {
631 DCHECK(idb_thread_checker_.CalledOnValidThread());
598 if (!connection_->IsConnected()) 632 if (!connection_->IsConnected())
599 return; 633 return;
600 634
601 IndexedDBTransaction* transaction = 635 IndexedDBTransaction* transaction =
602 connection_->GetTransaction(transaction_id); 636 connection_->GetTransaction(transaction_id);
603 if (!transaction) 637 if (!transaction)
604 return; 638 return;
605 639
606 connection_->database()->GetAll( 640 connection_->database()->GetAll(
607 transaction, object_store_id, index_id, 641 transaction, object_store_id, index_id,
608 base::MakeUnique<IndexedDBKeyRange>(key_range), key_only, max_count, 642 base::MakeUnique<IndexedDBKeyRange>(key_range), key_only, max_count,
609 std::move(callbacks)); 643 std::move(callbacks));
610 } 644 }
611 645
612 void DatabaseImpl::IDBThreadHelper::Put( 646 void DatabaseImpl::IDBThreadHelper::Put(
613 int64_t transaction_id, 647 int64_t transaction_id,
614 int64_t object_store_id, 648 int64_t object_store_id,
615 ::indexed_db::mojom::ValuePtr mojo_value, 649 ::indexed_db::mojom::ValuePtr mojo_value,
616 std::vector<std::unique_ptr<storage::BlobDataHandle>> handles, 650 std::vector<std::unique_ptr<storage::BlobDataHandle>> handles,
617 std::vector<IndexedDBBlobInfo> blob_info, 651 std::vector<IndexedDBBlobInfo> blob_info,
618 const IndexedDBKey& key, 652 const IndexedDBKey& key,
619 blink::WebIDBPutMode mode, 653 blink::WebIDBPutMode mode,
620 const std::vector<IndexedDBIndexKeys>& index_keys, 654 const std::vector<IndexedDBIndexKeys>& index_keys,
621 scoped_refptr<IndexedDBCallbacks> callbacks) { 655 scoped_refptr<IndexedDBCallbacks> callbacks) {
656 DCHECK(idb_thread_checker_.CalledOnValidThread());
622 if (!connection_->IsConnected()) 657 if (!connection_->IsConnected())
623 return; 658 return;
624 659
625 IndexedDBTransaction* transaction = 660 IndexedDBTransaction* transaction =
626 connection_->GetTransaction(transaction_id); 661 connection_->GetTransaction(transaction_id);
627 if (!transaction) 662 if (!transaction)
628 return; 663 return;
629 664
630 uint64_t commit_size = mojo_value->bits.size(); 665 uint64_t commit_size = mojo_value->bits.size();
631 IndexedDBValue value; 666 IndexedDBValue value;
632 swap(value.bits, mojo_value->bits); 667 swap(value.bits, mojo_value->bits);
633 swap(value.blob_info, blob_info); 668 swap(value.blob_info, blob_info);
634 connection_->database()->Put(transaction, object_store_id, &value, &handles, 669 connection_->database()->Put(transaction, object_store_id, &value, &handles,
635 base::MakeUnique<IndexedDBKey>(key), mode, 670 base::MakeUnique<IndexedDBKey>(key), mode,
636 std::move(callbacks), index_keys); 671 std::move(callbacks), index_keys);
637 672
638 // Size can't be big enough to overflow because it represents the 673 // Size can't be big enough to overflow because it represents the
639 // actual bytes passed through IPC. 674 // actual bytes passed through IPC.
640 transaction->set_size(transaction->size() + commit_size); 675 transaction->set_size(transaction->size() + commit_size);
641 } 676 }
642 677
643 void DatabaseImpl::IDBThreadHelper::SetIndexKeys( 678 void DatabaseImpl::IDBThreadHelper::SetIndexKeys(
644 int64_t transaction_id, 679 int64_t transaction_id,
645 int64_t object_store_id, 680 int64_t object_store_id,
646 const IndexedDBKey& primary_key, 681 const IndexedDBKey& primary_key,
647 const std::vector<IndexedDBIndexKeys>& index_keys) { 682 const std::vector<IndexedDBIndexKeys>& index_keys) {
683 DCHECK(idb_thread_checker_.CalledOnValidThread());
648 if (!connection_->IsConnected()) 684 if (!connection_->IsConnected())
649 return; 685 return;
650 686
651 IndexedDBTransaction* transaction = 687 IndexedDBTransaction* transaction =
652 connection_->GetTransaction(transaction_id); 688 connection_->GetTransaction(transaction_id);
653 if (!transaction) 689 if (!transaction)
654 return; 690 return;
655 691
656 connection_->database()->SetIndexKeys( 692 connection_->database()->SetIndexKeys(
657 transaction, object_store_id, base::MakeUnique<IndexedDBKey>(primary_key), 693 transaction, object_store_id, base::MakeUnique<IndexedDBKey>(primary_key),
658 index_keys); 694 index_keys);
659 } 695 }
660 696
661 void DatabaseImpl::IDBThreadHelper::SetIndexesReady( 697 void DatabaseImpl::IDBThreadHelper::SetIndexesReady(
662 int64_t transaction_id, 698 int64_t transaction_id,
663 int64_t object_store_id, 699 int64_t object_store_id,
664 const std::vector<int64_t>& index_ids) { 700 const std::vector<int64_t>& index_ids) {
701 DCHECK(idb_thread_checker_.CalledOnValidThread());
665 if (!connection_->IsConnected()) 702 if (!connection_->IsConnected())
666 return; 703 return;
667 704
668 IndexedDBTransaction* transaction = 705 IndexedDBTransaction* transaction =
669 connection_->GetTransaction(transaction_id); 706 connection_->GetTransaction(transaction_id);
670 if (!transaction) 707 if (!transaction)
671 return; 708 return;
672 709
673 connection_->database()->SetIndexesReady(transaction, object_store_id, 710 connection_->database()->SetIndexesReady(transaction, object_store_id,
674 index_ids); 711 index_ids);
675 } 712 }
676 713
677 void DatabaseImpl::IDBThreadHelper::OpenCursor( 714 void DatabaseImpl::IDBThreadHelper::OpenCursor(
678 int64_t transaction_id, 715 int64_t transaction_id,
679 int64_t object_store_id, 716 int64_t object_store_id,
680 int64_t index_id, 717 int64_t index_id,
681 const IndexedDBKeyRange& key_range, 718 const IndexedDBKeyRange& key_range,
682 blink::WebIDBCursorDirection direction, 719 blink::WebIDBCursorDirection direction,
683 bool key_only, 720 bool key_only,
684 blink::WebIDBTaskType task_type, 721 blink::WebIDBTaskType task_type,
685 scoped_refptr<IndexedDBCallbacks> callbacks) { 722 scoped_refptr<IndexedDBCallbacks> callbacks) {
723 DCHECK(idb_thread_checker_.CalledOnValidThread());
686 if (!connection_->IsConnected()) 724 if (!connection_->IsConnected())
687 return; 725 return;
688 726
689 IndexedDBTransaction* transaction = 727 IndexedDBTransaction* transaction =
690 connection_->GetTransaction(transaction_id); 728 connection_->GetTransaction(transaction_id);
691 if (!transaction) 729 if (!transaction)
692 return; 730 return;
693 731
694 connection_->database()->OpenCursor( 732 connection_->database()->OpenCursor(
695 transaction, object_store_id, index_id, 733 transaction, object_store_id, index_id,
696 base::MakeUnique<IndexedDBKeyRange>(key_range), direction, key_only, 734 base::MakeUnique<IndexedDBKeyRange>(key_range), direction, key_only,
697 task_type, std::move(callbacks)); 735 task_type, std::move(callbacks));
698 } 736 }
699 737
700 void DatabaseImpl::IDBThreadHelper::Count( 738 void DatabaseImpl::IDBThreadHelper::Count(
701 int64_t transaction_id, 739 int64_t transaction_id,
702 int64_t object_store_id, 740 int64_t object_store_id,
703 int64_t index_id, 741 int64_t index_id,
704 const IndexedDBKeyRange& key_range, 742 const IndexedDBKeyRange& key_range,
705 scoped_refptr<IndexedDBCallbacks> callbacks) { 743 scoped_refptr<IndexedDBCallbacks> callbacks) {
744 DCHECK(idb_thread_checker_.CalledOnValidThread());
706 if (!connection_->IsConnected()) 745 if (!connection_->IsConnected())
707 return; 746 return;
708 747
709 IndexedDBTransaction* transaction = 748 IndexedDBTransaction* transaction =
710 connection_->GetTransaction(transaction_id); 749 connection_->GetTransaction(transaction_id);
711 if (!transaction) 750 if (!transaction)
712 return; 751 return;
713 752
714 connection_->database()->Count(transaction, object_store_id, index_id, 753 connection_->database()->Count(transaction, object_store_id, index_id,
715 base::MakeUnique<IndexedDBKeyRange>(key_range), 754 base::MakeUnique<IndexedDBKeyRange>(key_range),
(...skipping 15 matching lines...) Expand all
731 770
732 connection_->database()->DeleteRange( 771 connection_->database()->DeleteRange(
733 transaction, object_store_id, 772 transaction, object_store_id,
734 base::MakeUnique<IndexedDBKeyRange>(key_range), std::move(callbacks)); 773 base::MakeUnique<IndexedDBKeyRange>(key_range), std::move(callbacks));
735 } 774 }
736 775
737 void DatabaseImpl::IDBThreadHelper::Clear( 776 void DatabaseImpl::IDBThreadHelper::Clear(
738 int64_t transaction_id, 777 int64_t transaction_id,
739 int64_t object_store_id, 778 int64_t object_store_id,
740 scoped_refptr<IndexedDBCallbacks> callbacks) { 779 scoped_refptr<IndexedDBCallbacks> callbacks) {
780 DCHECK(idb_thread_checker_.CalledOnValidThread());
741 if (!connection_->IsConnected()) 781 if (!connection_->IsConnected())
742 return; 782 return;
743 783
744 IndexedDBTransaction* transaction = 784 IndexedDBTransaction* transaction =
745 connection_->GetTransaction(transaction_id); 785 connection_->GetTransaction(transaction_id);
746 if (!transaction) 786 if (!transaction)
747 return; 787 return;
748 788
749 connection_->database()->Clear(transaction, object_store_id, callbacks); 789 connection_->database()->Clear(transaction, object_store_id, callbacks);
750 } 790 }
751 791
752 void DatabaseImpl::IDBThreadHelper::CreateIndex( 792 void DatabaseImpl::IDBThreadHelper::CreateIndex(
753 int64_t transaction_id, 793 int64_t transaction_id,
754 int64_t object_store_id, 794 int64_t object_store_id,
755 int64_t index_id, 795 int64_t index_id,
756 const base::string16& name, 796 const base::string16& name,
757 const IndexedDBKeyPath& key_path, 797 const IndexedDBKeyPath& key_path,
758 bool unique, 798 bool unique,
759 bool multi_entry) { 799 bool multi_entry) {
800 DCHECK(idb_thread_checker_.CalledOnValidThread());
760 if (!connection_->IsConnected()) 801 if (!connection_->IsConnected())
761 return; 802 return;
762 803
763 IndexedDBTransaction* transaction = 804 IndexedDBTransaction* transaction =
764 connection_->GetTransaction(transaction_id); 805 connection_->GetTransaction(transaction_id);
765 if (!transaction) 806 if (!transaction)
766 return; 807 return;
767 808
768 connection_->database()->CreateIndex(transaction, object_store_id, index_id, 809 connection_->database()->CreateIndex(transaction, object_store_id, index_id,
769 name, key_path, unique, multi_entry); 810 name, key_path, unique, multi_entry);
770 } 811 }
771 812
772 void DatabaseImpl::IDBThreadHelper::DeleteIndex(int64_t transaction_id, 813 void DatabaseImpl::IDBThreadHelper::DeleteIndex(int64_t transaction_id,
773 int64_t object_store_id, 814 int64_t object_store_id,
774 int64_t index_id) { 815 int64_t index_id) {
816 DCHECK(idb_thread_checker_.CalledOnValidThread());
775 if (!connection_->IsConnected()) 817 if (!connection_->IsConnected())
776 return; 818 return;
777 819
778 IndexedDBTransaction* transaction = 820 IndexedDBTransaction* transaction =
779 connection_->GetTransaction(transaction_id); 821 connection_->GetTransaction(transaction_id);
780 if (!transaction) 822 if (!transaction)
781 return; 823 return;
782 824
783 connection_->database()->DeleteIndex(transaction, object_store_id, index_id); 825 connection_->database()->DeleteIndex(transaction, object_store_id, index_id);
784 } 826 }
785 827
786 void DatabaseImpl::IDBThreadHelper::RenameIndex( 828 void DatabaseImpl::IDBThreadHelper::RenameIndex(
787 int64_t transaction_id, 829 int64_t transaction_id,
788 int64_t object_store_id, 830 int64_t object_store_id,
789 int64_t index_id, 831 int64_t index_id,
790 const base::string16& new_name) { 832 const base::string16& new_name) {
833 DCHECK(idb_thread_checker_.CalledOnValidThread());
791 if (!connection_->IsConnected()) 834 if (!connection_->IsConnected())
792 return; 835 return;
793 836
794 IndexedDBTransaction* transaction = 837 IndexedDBTransaction* transaction =
795 connection_->GetTransaction(transaction_id); 838 connection_->GetTransaction(transaction_id);
796 if (!transaction) 839 if (!transaction)
797 return; 840 return;
798 841
799 connection_->database()->RenameIndex(transaction, object_store_id, index_id, 842 connection_->database()->RenameIndex(transaction, object_store_id, index_id,
800 new_name); 843 new_name);
801 } 844 }
802 845
803 void DatabaseImpl::IDBThreadHelper::Abort(int64_t transaction_id) { 846 void DatabaseImpl::IDBThreadHelper::Abort(int64_t transaction_id) {
847 DCHECK(idb_thread_checker_.CalledOnValidThread());
804 if (!connection_->IsConnected()) 848 if (!connection_->IsConnected())
805 return; 849 return;
806 850
807 IndexedDBTransaction* transaction = 851 IndexedDBTransaction* transaction =
808 connection_->GetTransaction(transaction_id); 852 connection_->GetTransaction(transaction_id);
809 if (!transaction) 853 if (!transaction)
810 return; 854 return;
811 855
812 connection_->AbortTransaction(transaction); 856 connection_->AbortTransaction(transaction);
813 } 857 }
814 858
815 void DatabaseImpl::IDBThreadHelper::AbortWithError( 859 void DatabaseImpl::IDBThreadHelper::AbortWithError(
816 int64_t transaction_id, 860 int64_t transaction_id,
817 const IndexedDBDatabaseError& error) { 861 const IndexedDBDatabaseError& error) {
862 DCHECK(idb_thread_checker_.CalledOnValidThread());
818 if (!connection_->IsConnected()) 863 if (!connection_->IsConnected())
819 return; 864 return;
820 865
821 IndexedDBTransaction* transaction = 866 IndexedDBTransaction* transaction =
822 connection_->GetTransaction(transaction_id); 867 connection_->GetTransaction(transaction_id);
823 if (!transaction) 868 if (!transaction)
824 return; 869 return;
825 870
826 connection_->AbortTransaction(transaction, error); 871 connection_->AbortTransaction(transaction, error);
827 } 872 }
828 873
829 void DatabaseImpl::IDBThreadHelper::Commit(int64_t transaction_id) { 874 void DatabaseImpl::IDBThreadHelper::Commit(int64_t transaction_id) {
875 DCHECK(idb_thread_checker_.CalledOnValidThread());
830 if (!connection_->IsConnected()) 876 if (!connection_->IsConnected())
831 return; 877 return;
832 878
833 IndexedDBTransaction* transaction = 879 IndexedDBTransaction* transaction =
834 connection_->GetTransaction(transaction_id); 880 connection_->GetTransaction(transaction_id);
835 if (!transaction) 881 if (!transaction)
836 return; 882 return;
837 883
838 // Always allow empty or delete-only transactions. 884 // Always allow empty or delete-only transactions.
839 if (transaction->size() == 0) { 885 if (transaction->size() == 0) {
840 connection_->database()->Commit(transaction); 886 connection_->database()->Commit(transaction);
841 return; 887 return;
842 } 888 }
843 889
844 dispatcher_host_->context()->quota_manager_proxy()->GetUsageAndQuota( 890 indexed_db_context_->quota_manager_proxy()->GetUsageAndQuota(
845 dispatcher_host_->context()->TaskRunner(), origin_.GetURL(), 891 indexed_db_context_->TaskRunner(), origin_.GetURL(),
846 storage::kStorageTypeTemporary, 892 storage::kStorageTypeTemporary,
847 base::Bind(&IDBThreadHelper::OnGotUsageAndQuotaForCommit, 893 base::Bind(&IDBThreadHelper::OnGotUsageAndQuotaForCommit,
848 weak_factory_.GetWeakPtr(), transaction_id)); 894 weak_factory_.GetWeakPtr(), transaction_id));
849 } 895 }
850 896
851 void DatabaseImpl::IDBThreadHelper::OnGotUsageAndQuotaForCommit( 897 void DatabaseImpl::IDBThreadHelper::OnGotUsageAndQuotaForCommit(
852 int64_t transaction_id, 898 int64_t transaction_id,
853 storage::QuotaStatusCode status, 899 storage::QuotaStatusCode status,
854 int64_t usage, 900 int64_t usage,
855 int64_t quota) { 901 int64_t quota) {
902 DCHECK(idb_thread_checker_.CalledOnValidThread());
856 // May have disconnected while quota check was pending. 903 // May have disconnected while quota check was pending.
857 if (!connection_->IsConnected()) 904 if (!connection_->IsConnected())
858 return; 905 return;
859 906
860 IndexedDBTransaction* transaction = 907 IndexedDBTransaction* transaction =
861 connection_->GetTransaction(transaction_id); 908 connection_->GetTransaction(transaction_id);
862 if (!transaction) 909 if (!transaction)
863 return; 910 return;
864 911
865 if (status == storage::kQuotaStatusOk && 912 if (status == storage::kQuotaStatusOk &&
866 usage + transaction->size() <= quota) { 913 usage + transaction->size() <= quota) {
867 connection_->database()->Commit(transaction); 914 connection_->database()->Commit(transaction);
868 } else { 915 } else {
869 connection_->AbortTransaction( 916 connection_->AbortTransaction(
870 transaction, 917 transaction,
871 IndexedDBDatabaseError(blink::kWebIDBDatabaseExceptionQuotaError)); 918 IndexedDBDatabaseError(blink::kWebIDBDatabaseExceptionQuotaError));
872 } 919 }
873 } 920 }
874 921
875 } // namespace content 922 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/indexed_db/database_impl.h ('k') | content/browser/indexed_db/indexed_db_callbacks.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698