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

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

Issue 2255853003: IndexedDB: ScopedVector<T> -> vector<unique_ptr<T>> (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Review feedback Created 4 years, 4 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 (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_database.h" 5 #include "content/browser/indexed_db/indexed_db_database.h"
6 6
7 #include <math.h> 7 #include <math.h>
8 8
9 #include <limits> 9 #include <limits>
10 #include <memory>
11 #include <set> 10 #include <set>
12 #include <utility>
13 11
14 #include "base/auto_reset.h" 12 #include "base/auto_reset.h"
15 #include "base/command_line.h" 13 #include "base/command_line.h"
16 #include "base/logging.h" 14 #include "base/logging.h"
17 #include "base/macros.h" 15 #include "base/macros.h"
18 #include "base/memory/ptr_util.h" 16 #include "base/memory/ptr_util.h"
19 #include "base/memory/scoped_vector.h"
20 #include "base/metrics/histogram_macros.h" 17 #include "base/metrics/histogram_macros.h"
21 #include "base/numerics/safe_conversions.h" 18 #include "base/numerics/safe_conversions.h"
22 #include "base/stl_util.h" 19 #include "base/stl_util.h"
23 #include "base/strings/string_number_conversions.h" 20 #include "base/strings/string_number_conversions.h"
24 #include "base/strings/utf_string_conversions.h" 21 #include "base/strings/utf_string_conversions.h"
25 #include "content/browser/indexed_db/indexed_db_blob_info.h" 22 #include "content/browser/indexed_db/indexed_db_blob_info.h"
26 #include "content/browser/indexed_db/indexed_db_class_factory.h" 23 #include "content/browser/indexed_db/indexed_db_class_factory.h"
27 #include "content/browser/indexed_db/indexed_db_connection.h" 24 #include "content/browser/indexed_db/indexed_db_connection.h"
28 #include "content/browser/indexed_db/indexed_db_context_impl.h" 25 #include "content/browser/indexed_db/indexed_db_context_impl.h"
29 #include "content/browser/indexed_db/indexed_db_cursor.h" 26 #include "content/browser/indexed_db/indexed_db_cursor.h"
(...skipping 1159 matching lines...) Expand 10 before | Expand all | Expand 10 after
1189 DCHECK_EQ(WebIDBKeyTypeNumber, key.type()); 1186 DCHECK_EQ(WebIDBKeyTypeNumber, key.type());
1190 return backing_store->MaybeUpdateKeyGeneratorCurrentNumber( 1187 return backing_store->MaybeUpdateKeyGeneratorCurrentNumber(
1191 transaction->BackingStoreTransaction(), database_id, object_store_id, 1188 transaction->BackingStoreTransaction(), database_id, object_store_id,
1192 static_cast<int64_t>(floor(key.number())) + 1, check_current); 1189 static_cast<int64_t>(floor(key.number())) + 1, check_current);
1193 } 1190 }
1194 1191
1195 struct IndexedDBDatabase::PutOperationParams { 1192 struct IndexedDBDatabase::PutOperationParams {
1196 PutOperationParams() {} 1193 PutOperationParams() {}
1197 int64_t object_store_id; 1194 int64_t object_store_id;
1198 IndexedDBValue value; 1195 IndexedDBValue value;
1199 ScopedVector<storage::BlobDataHandle> handles; 1196 std::vector<std::unique_ptr<storage::BlobDataHandle>> handles;
1200 std::unique_ptr<IndexedDBKey> key; 1197 std::unique_ptr<IndexedDBKey> key;
1201 blink::WebIDBPutMode put_mode; 1198 blink::WebIDBPutMode put_mode;
1202 scoped_refptr<IndexedDBCallbacks> callbacks; 1199 scoped_refptr<IndexedDBCallbacks> callbacks;
1203 std::vector<IndexKeys> index_keys; 1200 std::vector<IndexKeys> index_keys;
1204 1201
1205 private: 1202 private:
1206 DISALLOW_COPY_AND_ASSIGN(PutOperationParams); 1203 DISALLOW_COPY_AND_ASSIGN(PutOperationParams);
1207 }; 1204 };
1208 1205
1209 void IndexedDBDatabase::Put(int64_t transaction_id, 1206 void IndexedDBDatabase::Put(
1210 int64_t object_store_id, 1207 int64_t transaction_id,
1211 IndexedDBValue* value, 1208 int64_t object_store_id,
1212 ScopedVector<storage::BlobDataHandle>* handles, 1209 IndexedDBValue* value,
1213 std::unique_ptr<IndexedDBKey> key, 1210 std::vector<std::unique_ptr<storage::BlobDataHandle>>* handles,
1214 blink::WebIDBPutMode put_mode, 1211 std::unique_ptr<IndexedDBKey> key,
1215 scoped_refptr<IndexedDBCallbacks> callbacks, 1212 blink::WebIDBPutMode put_mode,
1216 const std::vector<IndexKeys>& index_keys) { 1213 scoped_refptr<IndexedDBCallbacks> callbacks,
1214 const std::vector<IndexKeys>& index_keys) {
1217 IDB_TRACE1("IndexedDBDatabase::Put", "txn.id", transaction_id); 1215 IDB_TRACE1("IndexedDBDatabase::Put", "txn.id", transaction_id);
1218 IndexedDBTransaction* transaction = GetTransaction(transaction_id); 1216 IndexedDBTransaction* transaction = GetTransaction(transaction_id);
1219 if (!transaction) 1217 if (!transaction)
1220 return; 1218 return;
1221 DCHECK_NE(transaction->mode(), blink::WebIDBTransactionModeReadOnly); 1219 DCHECK_NE(transaction->mode(), blink::WebIDBTransactionModeReadOnly);
1222 1220
1223 if (!ValidateObjectStoreId(object_store_id)) 1221 if (!ValidateObjectStoreId(object_store_id))
1224 return; 1222 return;
1225 1223
1226 DCHECK(key); 1224 DCHECK(key);
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
1288 return; 1286 return;
1289 } 1287 }
1290 if (found) { 1288 if (found) {
1291 params->callbacks->OnError( 1289 params->callbacks->OnError(
1292 IndexedDBDatabaseError(blink::WebIDBDatabaseExceptionConstraintError, 1290 IndexedDBDatabaseError(blink::WebIDBDatabaseExceptionConstraintError,
1293 "Key already exists in the object store.")); 1291 "Key already exists in the object store."));
1294 return; 1292 return;
1295 } 1293 }
1296 } 1294 }
1297 1295
1298 ScopedVector<IndexWriter> index_writers; 1296 std::vector<std::unique_ptr<IndexWriter>> index_writers;
1299 base::string16 error_message; 1297 base::string16 error_message;
1300 bool obeys_constraints = false; 1298 bool obeys_constraints = false;
1301 bool backing_store_success = MakeIndexWriters(transaction, 1299 bool backing_store_success = MakeIndexWriters(transaction,
1302 backing_store_.get(), 1300 backing_store_.get(),
1303 id(), 1301 id(),
1304 object_store, 1302 object_store,
1305 *key, 1303 *key,
1306 key_was_generated, 1304 key_was_generated,
1307 params->index_keys, 1305 params->index_keys,
1308 &index_writers, 1306 &index_writers,
(...skipping 26 matching lines...) Expand all
1335 blink::WebIDBDatabaseExceptionUnknownError, 1333 blink::WebIDBDatabaseExceptionUnknownError,
1336 "Internal error: backing store error performing put/add."); 1334 "Internal error: backing store error performing put/add.");
1337 params->callbacks->OnError(error); 1335 params->callbacks->OnError(error);
1338 if (s.IsCorruption()) 1336 if (s.IsCorruption())
1339 factory_->HandleBackingStoreCorruption(backing_store_->origin(), error); 1337 factory_->HandleBackingStoreCorruption(backing_store_->origin(), error);
1340 return; 1338 return;
1341 } 1339 }
1342 { 1340 {
1343 IDB_TRACE1("IndexedDBDatabase::PutOperation.UpdateIndexes", "txn.id", 1341 IDB_TRACE1("IndexedDBDatabase::PutOperation.UpdateIndexes", "txn.id",
1344 transaction->id()); 1342 transaction->id());
1345 for (size_t i = 0; i < index_writers.size(); ++i) { 1343 for (const auto& writer : index_writers) {
1346 IndexWriter* index_writer = index_writers[i]; 1344 writer->WriteIndexKeys(record_identifier, backing_store_.get(),
1347 index_writer->WriteIndexKeys(record_identifier, backing_store_.get(), 1345 transaction->BackingStoreTransaction(), id(),
1348 transaction->BackingStoreTransaction(), id(), 1346 params->object_store_id);
1349 params->object_store_id);
1350 } 1347 }
1351 } 1348 }
1352 1349
1353 if (object_store.auto_increment && 1350 if (object_store.auto_increment &&
1354 params->put_mode != blink::WebIDBPutModeCursorUpdate && 1351 params->put_mode != blink::WebIDBPutModeCursorUpdate &&
1355 key->type() == WebIDBKeyTypeNumber) { 1352 key->type() == WebIDBKeyTypeNumber) {
1356 IDB_TRACE1("IndexedDBDatabase::PutOperation.AutoIncrement", "txn.id", 1353 IDB_TRACE1("IndexedDBDatabase::PutOperation.AutoIncrement", "txn.id",
1357 transaction->id()); 1354 transaction->id());
1358 leveldb::Status s = UpdateKeyGenerator(backing_store_.get(), 1355 leveldb::Status s = UpdateKeyGenerator(backing_store_.get(),
1359 transaction, 1356 transaction,
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
1411 factory_->HandleBackingStoreCorruption(backing_store_->origin(), error); 1408 factory_->HandleBackingStoreCorruption(backing_store_->origin(), error);
1412 return; 1409 return;
1413 } 1410 }
1414 if (!found) { 1411 if (!found) {
1415 transaction->Abort(IndexedDBDatabaseError( 1412 transaction->Abort(IndexedDBDatabaseError(
1416 blink::WebIDBDatabaseExceptionUnknownError, 1413 blink::WebIDBDatabaseExceptionUnknownError,
1417 "Internal error setting index keys for object store.")); 1414 "Internal error setting index keys for object store."));
1418 return; 1415 return;
1419 } 1416 }
1420 1417
1421 ScopedVector<IndexWriter> index_writers; 1418 std::vector<std::unique_ptr<IndexWriter>> index_writers;
1422 base::string16 error_message; 1419 base::string16 error_message;
1423 bool obeys_constraints = false; 1420 bool obeys_constraints = false;
1424 DCHECK(metadata_.object_stores.find(object_store_id) != 1421 DCHECK(metadata_.object_stores.find(object_store_id) !=
1425 metadata_.object_stores.end()); 1422 metadata_.object_stores.end());
1426 const IndexedDBObjectStoreMetadata& object_store_metadata = 1423 const IndexedDBObjectStoreMetadata& object_store_metadata =
1427 metadata_.object_stores[object_store_id]; 1424 metadata_.object_stores[object_store_id];
1428 bool backing_store_success = MakeIndexWriters(transaction, 1425 bool backing_store_success = MakeIndexWriters(transaction,
1429 backing_store_.get(), 1426 backing_store_.get(),
1430 id(), 1427 id(),
1431 object_store_metadata, 1428 object_store_metadata,
1432 *primary_key, 1429 *primary_key,
1433 false, 1430 false,
1434 index_keys, 1431 index_keys,
1435 &index_writers, 1432 &index_writers,
1436 &error_message, 1433 &error_message,
1437 &obeys_constraints); 1434 &obeys_constraints);
1438 if (!backing_store_success) { 1435 if (!backing_store_success) {
1439 transaction->Abort(IndexedDBDatabaseError( 1436 transaction->Abort(IndexedDBDatabaseError(
1440 blink::WebIDBDatabaseExceptionUnknownError, 1437 blink::WebIDBDatabaseExceptionUnknownError,
1441 "Internal error: backing store error updating index keys.")); 1438 "Internal error: backing store error updating index keys."));
1442 return; 1439 return;
1443 } 1440 }
1444 if (!obeys_constraints) { 1441 if (!obeys_constraints) {
1445 transaction->Abort(IndexedDBDatabaseError( 1442 transaction->Abort(IndexedDBDatabaseError(
1446 blink::WebIDBDatabaseExceptionConstraintError, error_message)); 1443 blink::WebIDBDatabaseExceptionConstraintError, error_message));
1447 return; 1444 return;
1448 } 1445 }
1449 1446
1450 for (size_t i = 0; i < index_writers.size(); ++i) { 1447 for (const auto& writer : index_writers) {
1451 IndexWriter* index_writer = index_writers[i]; 1448 writer->WriteIndexKeys(record_identifier, backing_store_.get(),
1452 index_writer->WriteIndexKeys(record_identifier, 1449 transaction->BackingStoreTransaction(), id(),
1453 backing_store_.get(), 1450 object_store_id);
1454 transaction->BackingStoreTransaction(),
1455 id(),
1456 object_store_id);
1457 } 1451 }
1458 } 1452 }
1459 1453
1460 void IndexedDBDatabase::SetIndexesReady(int64_t transaction_id, 1454 void IndexedDBDatabase::SetIndexesReady(int64_t transaction_id,
1461 int64_t, 1455 int64_t,
1462 const std::vector<int64_t>& index_ids) { 1456 const std::vector<int64_t>& index_ids) {
1463 IndexedDBTransaction* transaction = GetTransaction(transaction_id); 1457 IndexedDBTransaction* transaction = GetTransaction(transaction_id);
1464 if (!transaction) 1458 if (!transaction)
1465 return; 1459 return;
1466 DCHECK_EQ(transaction->mode(), blink::WebIDBTransactionModeVersionChange); 1460 DCHECK_EQ(transaction->mode(), blink::WebIDBTransactionModeVersionChange);
(...skipping 537 matching lines...) Expand 10 before | Expand all | Expand 10 after
2004 1998
2005 void IndexedDBDatabase::VersionChangeAbortOperation( 1999 void IndexedDBDatabase::VersionChangeAbortOperation(
2006 int64_t previous_version, 2000 int64_t previous_version,
2007 IndexedDBTransaction* transaction) { 2001 IndexedDBTransaction* transaction) {
2008 DCHECK(!transaction); 2002 DCHECK(!transaction);
2009 IDB_TRACE("IndexedDBDatabase::VersionChangeAbortOperation"); 2003 IDB_TRACE("IndexedDBDatabase::VersionChangeAbortOperation");
2010 metadata_.version = previous_version; 2004 metadata_.version = previous_version;
2011 } 2005 }
2012 2006
2013 } // namespace content 2007 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/indexed_db/indexed_db_database.h ('k') | content/browser/indexed_db/indexed_db_database_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698