Avi Drissman | 4e1b7bc3 | 2022-09-15 14:03:50 | [diff] [blame] | 1 | // Copyright 2012 The Chromium Authors |
[email protected] | 29ffc1d3 | 2011-03-03 00:10:16 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
3 | // found in the LICENSE file. | ||||
4 | |||||
Evan Stade | 1a8d9d4 | 2024-09-10 19:37:19 | [diff] [blame] | 5 | #include "content/browser/indexed_db/instance/database_callbacks.h" |
[email protected] | 29ffc1d3 | 2011-03-03 00:10:16 | [diff] [blame] | 6 | |
Joshua Bell | 98475ae | 2019-08-15 01:43:36 | [diff] [blame] | 7 | #include <utility> |
8 | |||||
Avi Drissman | adac2199 | 2023-01-11 23:46:39 | [diff] [blame] | 9 | #include "base/functional/bind.h" |
Sean Maher | 52fa5a7 | 2022-11-14 15:53:25 | [diff] [blame] | 10 | #include "base/task/sequenced_task_runner.h" |
[email protected] | affe4c6 | 2013-06-28 01:03:25 | [diff] [blame] | 11 | #include "content/browser/indexed_db/indexed_db_database_error.h" |
Evan Stade | 1a8d9d4 | 2024-09-10 19:37:19 | [diff] [blame] | 12 | #include "content/browser/indexed_db/instance/transaction.h" |
Ari Chivukula | 13eb743 | 2021-06-10 23:12:22 | [diff] [blame] | 13 | #include "third_party/blink/public/common/storage_key/storage_key.h" |
[email protected] | 29ffc1d3 | 2011-03-03 00:10:16 | [diff] [blame] | 14 | |
Evan Stade | cbb1e00 | 2024-09-13 20:06:57 | [diff] [blame] | 15 | namespace content::indexed_db { |
[email protected] | 95e8108 | 2012-10-29 02:43:20 | [diff] [blame] | 16 | |
Evan Stade | cbb1e00 | 2024-09-13 20:06:57 | [diff] [blame] | 17 | DatabaseCallbacks::DatabaseCallbacks( |
Mario Sanchez Prada | 9acc6da4 | 2019-08-30 12:19:17 | [diff] [blame] | 18 | mojo::PendingAssociatedRemote<blink::mojom::IDBDatabaseCallbacks> |
Evan Stade | 1c0fbe67 | 2023-11-01 18:20:04 | [diff] [blame] | 19 | callbacks_remote) { |
Evan Stade | 1a8d9d4 | 2024-09-10 19:37:19 | [diff] [blame] | 20 | if (!callbacks_remote.is_valid()) { |
Chase Phillips | 76be86e | 2019-03-14 17:08:02 | [diff] [blame] | 21 | return; |
Evan Stade | 1a8d9d4 | 2024-09-10 19:37:19 | [diff] [blame] | 22 | } |
Mario Sanchez Prada | 7e8fde8 | 2019-08-30 12:38:32 | [diff] [blame] | 23 | callbacks_.Bind(std::move(callbacks_remote)); |
reillyg | a7233873f | 2016-10-20 20:33:14 | [diff] [blame] | 24 | } |
[email protected] | 29ffc1d3 | 2011-03-03 00:10:16 | [diff] [blame] | 25 | |
Evan Stade | cbb1e00 | 2024-09-13 20:06:57 | [diff] [blame] | 26 | DatabaseCallbacks::~DatabaseCallbacks() {} |
[email protected] | 29ffc1d3 | 2011-03-03 00:10:16 | [diff] [blame] | 27 | |
Evan Stade | cbb1e00 | 2024-09-13 20:06:57 | [diff] [blame] | 28 | void DatabaseCallbacks::OnForcedClose() { |
Evan Stade | 1a8d9d4 | 2024-09-10 19:37:19 | [diff] [blame] | 29 | if (complete_) { |
[email protected] | e67c0cc | 2013-07-01 20:21:18 | [diff] [blame] | 30 | return; |
Evan Stade | 1a8d9d4 | 2024-09-10 19:37:19 | [diff] [blame] | 31 | } |
[email protected] | e67c0cc | 2013-07-01 20:21:18 | [diff] [blame] | 32 | |
Evan Stade | 1a8d9d4 | 2024-09-10 19:37:19 | [diff] [blame] | 33 | if (callbacks_) { |
Chase Phillips | 76be86e | 2019-03-14 17:08:02 | [diff] [blame] | 34 | callbacks_->ForcedClose(); |
Evan Stade | 1a8d9d4 | 2024-09-10 19:37:19 | [diff] [blame] | 35 | } |
dmurph | 1f18ca9 | 2017-04-11 21:51:08 | [diff] [blame] | 36 | complete_ = true; |
[email protected] | 2f014b0 | 2012-09-06 00:42:37 | [diff] [blame] | 37 | } |
38 | |||||
Evan Stade | cbb1e00 | 2024-09-13 20:06:57 | [diff] [blame] | 39 | void DatabaseCallbacks::OnVersionChange(int64_t old_version, |
40 | int64_t new_version) { | ||||
Evan Stade | 1a8d9d4 | 2024-09-10 19:37:19 | [diff] [blame] | 41 | if (complete_) { |
[email protected] | e67c0cc | 2013-07-01 20:21:18 | [diff] [blame] | 42 | return; |
Evan Stade | 1a8d9d4 | 2024-09-10 19:37:19 | [diff] [blame] | 43 | } |
[email protected] | e67c0cc | 2013-07-01 20:21:18 | [diff] [blame] | 44 | |
Evan Stade | 1a8d9d4 | 2024-09-10 19:37:19 | [diff] [blame] | 45 | if (callbacks_) { |
Chase Phillips | 76be86e | 2019-03-14 17:08:02 | [diff] [blame] | 46 | callbacks_->VersionChange(old_version, new_version); |
Evan Stade | 1a8d9d4 | 2024-09-10 19:37:19 | [diff] [blame] | 47 | } |
[email protected] | 0563ebe4 | 2012-07-27 00:21:02 | [diff] [blame] | 48 | } |
49 | |||||
Evan Stade | cbb1e00 | 2024-09-13 20:06:57 | [diff] [blame] | 50 | void DatabaseCallbacks::OnAbort(const Transaction& transaction, |
51 | const DatabaseError& error) { | ||||
Evan Stade | 1a8d9d4 | 2024-09-10 19:37:19 | [diff] [blame] | 52 | if (complete_) { |
[email protected] | e67c0cc | 2013-07-01 20:21:18 | [diff] [blame] | 53 | return; |
Evan Stade | 1a8d9d4 | 2024-09-10 19:37:19 | [diff] [blame] | 54 | } |
[email protected] | e67c0cc | 2013-07-01 20:21:18 | [diff] [blame] | 55 | |
Evan Stade | 1a8d9d4 | 2024-09-10 19:37:19 | [diff] [blame] | 56 | if (callbacks_) { |
Chase Phillips | 76be86e | 2019-03-14 17:08:02 | [diff] [blame] | 57 | callbacks_->Abort(transaction.id(), error.code(), error.message()); |
Evan Stade | 1a8d9d4 | 2024-09-10 19:37:19 | [diff] [blame] | 58 | } |
[email protected] | c7b6f61 | 2013-01-18 21:47:26 | [diff] [blame] | 59 | } |
60 | |||||
Evan Stade | cbb1e00 | 2024-09-13 20:06:57 | [diff] [blame] | 61 | void DatabaseCallbacks::OnComplete(const Transaction& transaction) { |
Evan Stade | 1a8d9d4 | 2024-09-10 19:37:19 | [diff] [blame] | 62 | if (complete_) { |
[email protected] | e67c0cc | 2013-07-01 20:21:18 | [diff] [blame] | 63 | return; |
Evan Stade | 1a8d9d4 | 2024-09-10 19:37:19 | [diff] [blame] | 64 | } |
[email protected] | e67c0cc | 2013-07-01 20:21:18 | [diff] [blame] | 65 | |
Evan Stade | 1a8d9d4 | 2024-09-10 19:37:19 | [diff] [blame] | 66 | if (callbacks_) { |
Chase Phillips | 76be86e | 2019-03-14 17:08:02 | [diff] [blame] | 67 | callbacks_->Complete(transaction.id()); |
Evan Stade | 1a8d9d4 | 2024-09-10 19:37:19 | [diff] [blame] | 68 | } |
[email protected] | c7b6f61 | 2013-01-18 21:47:26 | [diff] [blame] | 69 | } |
70 | |||||
Evan Stade | cbb1e00 | 2024-09-13 20:06:57 | [diff] [blame] | 71 | } // namespace content::indexed_db |