OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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/browser/indexed_db/indexed_db_transaction.h" | 5 #include "content/browser/indexed_db/indexed_db_transaction.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/location.h" | 8 #include "base/location.h" |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/memory/ptr_util.h" | 10 #include "base/memory/ptr_util.h" |
| 11 #include "base/metrics/histogram_macros.h" |
11 #include "base/single_thread_task_runner.h" | 12 #include "base/single_thread_task_runner.h" |
12 #include "base/stl_util.h" | 13 #include "base/stl_util.h" |
13 #include "base/strings/utf_string_conversions.h" | 14 #include "base/strings/utf_string_conversions.h" |
14 #include "base/threading/thread_task_runner_handle.h" | 15 #include "base/threading/thread_task_runner_handle.h" |
15 #include "content/browser/indexed_db/indexed_db_backing_store.h" | 16 #include "content/browser/indexed_db/indexed_db_backing_store.h" |
16 #include "content/browser/indexed_db/indexed_db_cursor.h" | 17 #include "content/browser/indexed_db/indexed_db_cursor.h" |
17 #include "content/browser/indexed_db/indexed_db_database.h" | 18 #include "content/browser/indexed_db/indexed_db_database.h" |
18 #include "content/browser/indexed_db/indexed_db_database_callbacks.h" | 19 #include "content/browser/indexed_db/indexed_db_database_callbacks.h" |
19 #include "content/browser/indexed_db/indexed_db_tracing.h" | 20 #include "content/browser/indexed_db/indexed_db_tracing.h" |
20 #include "content/browser/indexed_db/indexed_db_transaction_coordinator.h" | 21 #include "content/browser/indexed_db/indexed_db_transaction_coordinator.h" |
21 #include "third_party/WebKit/public/platform/modules/indexeddb/WebIDBDatabaseExc
eption.h" | 22 #include "third_party/WebKit/public/platform/modules/indexeddb/WebIDBDatabaseExc
eption.h" |
22 #include "third_party/leveldatabase/env_chromium.h" | 23 #include "third_party/leveldatabase/env_chromium.h" |
23 | 24 |
24 namespace content { | 25 namespace content { |
25 | 26 |
26 namespace { | 27 namespace { |
27 | 28 |
28 const int64_t kInactivityTimeoutPeriodSeconds = 60; | 29 const int64_t kInactivityTimeoutPeriodSeconds = 60; |
29 | 30 |
30 // Helper for posting a task to call IndexedDBTransaction::Commit when we know | 31 // Helper for posting a task to call IndexedDBTransaction::Commit when we know |
31 // the transaction had no requests and therefore the commit must succeed. | 32 // the transaction had no requests and therefore the commit must succeed. |
32 void CommitUnused(base::WeakPtr<IndexedDBTransaction> transaction) { | 33 void CommitUnused(base::WeakPtr<IndexedDBTransaction> transaction) { |
33 if (!transaction) | 34 if (!transaction) |
34 return; | 35 return; |
35 leveldb::Status status = transaction->Commit(); | 36 leveldb::Status status = transaction->Commit(); |
36 DCHECK(status.ok()); | 37 DCHECK(status.ok()); |
37 } | 38 } |
38 | 39 |
| 40 // Used for UMA metrics - do not change values. |
| 41 enum UmaIDBException { |
| 42 UmaIDBExceptionUnknownError = 0, |
| 43 UmaIDBExceptionConstraintError = 1, |
| 44 UmaIDBExceptionDataError = 2, |
| 45 UmaIDBExceptionVersionError = 3, |
| 46 UmaIDBExceptionAbortError = 4, |
| 47 UmaIDBExceptionQuotaError = 5, |
| 48 UmaIDBExceptionTimeoutError = 6, |
| 49 UmaIDBExceptionExclusiveMaxValue = 7 |
| 50 }; |
| 51 |
| 52 // Used for UMA metrics - do not change mappings. |
| 53 UmaIDBException ExceptionCodeToUmaEnum(uint16_t code) { |
| 54 switch (code) { |
| 55 case blink::kWebIDBDatabaseExceptionUnknownError: |
| 56 return UmaIDBExceptionUnknownError; |
| 57 case blink::kWebIDBDatabaseExceptionConstraintError: |
| 58 return UmaIDBExceptionConstraintError; |
| 59 case blink::kWebIDBDatabaseExceptionDataError: |
| 60 return UmaIDBExceptionDataError; |
| 61 case blink::kWebIDBDatabaseExceptionVersionError: |
| 62 return UmaIDBExceptionVersionError; |
| 63 case blink::kWebIDBDatabaseExceptionAbortError: |
| 64 return UmaIDBExceptionAbortError; |
| 65 case blink::kWebIDBDatabaseExceptionQuotaError: |
| 66 return UmaIDBExceptionQuotaError; |
| 67 case blink::kWebIDBDatabaseExceptionTimeoutError: |
| 68 return UmaIDBExceptionTimeoutError; |
| 69 default: |
| 70 NOTREACHED(); |
| 71 } |
| 72 return UmaIDBExceptionUnknownError; |
| 73 } |
| 74 |
39 } // namespace | 75 } // namespace |
40 | 76 |
41 IndexedDBTransaction::TaskQueue::TaskQueue() {} | 77 IndexedDBTransaction::TaskQueue::TaskQueue() {} |
42 IndexedDBTransaction::TaskQueue::~TaskQueue() { clear(); } | 78 IndexedDBTransaction::TaskQueue::~TaskQueue() { clear(); } |
43 | 79 |
44 void IndexedDBTransaction::TaskQueue::clear() { | 80 void IndexedDBTransaction::TaskQueue::clear() { |
45 while (!queue_.empty()) | 81 while (!queue_.empty()) |
46 queue_.pop(); | 82 queue_.pop(); |
47 } | 83 } |
48 | 84 |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
145 Abort(IndexedDBDatabaseError(blink::kWebIDBDatabaseExceptionUnknownError, | 181 Abort(IndexedDBDatabaseError(blink::kWebIDBDatabaseExceptionUnknownError, |
146 "Internal error (unknown cause)")); | 182 "Internal error (unknown cause)")); |
147 } | 183 } |
148 | 184 |
149 void IndexedDBTransaction::Abort(const IndexedDBDatabaseError& error) { | 185 void IndexedDBTransaction::Abort(const IndexedDBDatabaseError& error) { |
150 IDB_TRACE1("IndexedDBTransaction::Abort", "txn.id", id()); | 186 IDB_TRACE1("IndexedDBTransaction::Abort", "txn.id", id()); |
151 DCHECK(!processing_event_queue_); | 187 DCHECK(!processing_event_queue_); |
152 if (state_ == FINISHED) | 188 if (state_ == FINISHED) |
153 return; | 189 return; |
154 | 190 |
| 191 UMA_HISTOGRAM_ENUMERATION("WebCore.IndexedDB.TransactionAbortReason", |
| 192 ExceptionCodeToUmaEnum(error.code()), |
| 193 UmaIDBExceptionExclusiveMaxValue); |
| 194 |
155 timeout_timer_.Stop(); | 195 timeout_timer_.Stop(); |
156 | 196 |
157 state_ = FINISHED; | 197 state_ = FINISHED; |
158 should_process_queue_ = false; | 198 should_process_queue_ = false; |
159 | 199 |
160 if (backing_store_transaction_begun_) | 200 if (backing_store_transaction_begun_) |
161 transaction_->Rollback(); | 201 transaction_->Rollback(); |
162 | 202 |
163 // Run the abort tasks, if any. | 203 // Run the abort tasks, if any. |
164 while (!abort_task_stack_.empty()) | 204 while (!abort_task_stack_.empty()) |
(...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
520 | 560 |
521 ::indexed_db::mojom::ObserverChangesPtr* | 561 ::indexed_db::mojom::ObserverChangesPtr* |
522 IndexedDBTransaction::GetPendingChangesForConnection(int32_t connection_id) { | 562 IndexedDBTransaction::GetPendingChangesForConnection(int32_t connection_id) { |
523 auto it = connection_changes_map_.find(connection_id); | 563 auto it = connection_changes_map_.find(connection_id); |
524 if (it != connection_changes_map_.end()) | 564 if (it != connection_changes_map_.end()) |
525 return &it->second; | 565 return &it->second; |
526 return nullptr; | 566 return nullptr; |
527 } | 567 } |
528 | 568 |
529 } // namespace content | 569 } // namespace content |
OLD | NEW |