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

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

Issue 1549113002: Switch to standard integer types in content/browser/. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 years, 11 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 #include <limits> 8 #include <limits>
9 #include <set> 9 #include <set>
10 10
11 #include "base/auto_reset.h" 11 #include "base/auto_reset.h"
12 #include "base/logging.h" 12 #include "base/logging.h"
13 #include "base/macros.h"
13 #include "base/memory/scoped_ptr.h" 14 #include "base/memory/scoped_ptr.h"
14 #include "base/memory/scoped_vector.h" 15 #include "base/memory/scoped_vector.h"
15 #include "base/metrics/histogram_macros.h" 16 #include "base/metrics/histogram_macros.h"
16 #include "base/stl_util.h" 17 #include "base/stl_util.h"
17 #include "base/strings/string_number_conversions.h" 18 #include "base/strings/string_number_conversions.h"
18 #include "base/strings/utf_string_conversions.h" 19 #include "base/strings/utf_string_conversions.h"
19 #include "content/browser/indexed_db/indexed_db_blob_info.h" 20 #include "content/browser/indexed_db/indexed_db_blob_info.h"
20 #include "content/browser/indexed_db/indexed_db_class_factory.h" 21 #include "content/browser/indexed_db/indexed_db_class_factory.h"
21 #include "content/browser/indexed_db/indexed_db_connection.h" 22 #include "content/browser/indexed_db/indexed_db_connection.h"
22 #include "content/browser/indexed_db/indexed_db_context_impl.h" 23 #include "content/browser/indexed_db/indexed_db_context_impl.h"
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 } 69 }
69 70
70 } // namespace 71 } // namespace
71 72
72 // PendingUpgradeCall has a scoped_ptr<IndexedDBConnection> because it owns the 73 // PendingUpgradeCall has a scoped_ptr<IndexedDBConnection> because it owns the
73 // in-progress connection. 74 // in-progress connection.
74 class IndexedDBDatabase::PendingUpgradeCall { 75 class IndexedDBDatabase::PendingUpgradeCall {
75 public: 76 public:
76 PendingUpgradeCall(scoped_refptr<IndexedDBCallbacks> callbacks, 77 PendingUpgradeCall(scoped_refptr<IndexedDBCallbacks> callbacks,
77 scoped_ptr<IndexedDBConnection> connection, 78 scoped_ptr<IndexedDBConnection> connection,
78 int64 transaction_id, 79 int64_t transaction_id,
79 int64 version) 80 int64_t version)
80 : callbacks_(callbacks), 81 : callbacks_(callbacks),
81 connection_(connection.Pass()), 82 connection_(connection.Pass()),
82 version_(version), 83 version_(version),
83 transaction_id_(transaction_id) {} 84 transaction_id_(transaction_id) {}
84 scoped_refptr<IndexedDBCallbacks> callbacks() const { return callbacks_; } 85 scoped_refptr<IndexedDBCallbacks> callbacks() const { return callbacks_; }
85 // Takes ownership of the connection object. 86 // Takes ownership of the connection object.
86 scoped_ptr<IndexedDBConnection> ReleaseConnection() WARN_UNUSED_RESULT { 87 scoped_ptr<IndexedDBConnection> ReleaseConnection() WARN_UNUSED_RESULT {
87 return connection_.Pass(); 88 return connection_.Pass();
88 } 89 }
89 int64 version() const { return version_; } 90 int64_t version() const { return version_; }
90 int64 transaction_id() const { return transaction_id_; } 91 int64_t transaction_id() const { return transaction_id_; }
91 92
92 private: 93 private:
93 scoped_refptr<IndexedDBCallbacks> callbacks_; 94 scoped_refptr<IndexedDBCallbacks> callbacks_;
94 scoped_ptr<IndexedDBConnection> connection_; 95 scoped_ptr<IndexedDBConnection> connection_;
95 int64 version_; 96 int64_t version_;
96 const int64 transaction_id_; 97 const int64_t transaction_id_;
97 }; 98 };
98 99
99 // PendingSuccessCall has a IndexedDBConnection* because the connection is now 100 // PendingSuccessCall has a IndexedDBConnection* because the connection is now
100 // owned elsewhere, but we need to cancel the success call if that connection 101 // owned elsewhere, but we need to cancel the success call if that connection
101 // closes before it is sent. 102 // closes before it is sent.
102 class IndexedDBDatabase::PendingSuccessCall { 103 class IndexedDBDatabase::PendingSuccessCall {
103 public: 104 public:
104 PendingSuccessCall(scoped_refptr<IndexedDBCallbacks> callbacks, 105 PendingSuccessCall(scoped_refptr<IndexedDBCallbacks> callbacks,
105 IndexedDBConnection* connection, 106 IndexedDBConnection* connection,
106 int64 version) 107 int64_t version)
107 : callbacks_(callbacks), connection_(connection), version_(version) {} 108 : callbacks_(callbacks), connection_(connection), version_(version) {}
108 scoped_refptr<IndexedDBCallbacks> callbacks() const { return callbacks_; } 109 scoped_refptr<IndexedDBCallbacks> callbacks() const { return callbacks_; }
109 IndexedDBConnection* connection() const { return connection_; } 110 IndexedDBConnection* connection() const { return connection_; }
110 int64 version() const { return version_; } 111 int64_t version() const { return version_; }
111 112
112 private: 113 private:
113 scoped_refptr<IndexedDBCallbacks> callbacks_; 114 scoped_refptr<IndexedDBCallbacks> callbacks_;
114 IndexedDBConnection* connection_; 115 IndexedDBConnection* connection_;
115 int64 version_; 116 int64_t version_;
116 }; 117 };
117 118
118 class IndexedDBDatabase::PendingDeleteCall { 119 class IndexedDBDatabase::PendingDeleteCall {
119 public: 120 public:
120 explicit PendingDeleteCall(scoped_refptr<IndexedDBCallbacks> callbacks) 121 explicit PendingDeleteCall(scoped_refptr<IndexedDBCallbacks> callbacks)
121 : callbacks_(callbacks) {} 122 : callbacks_(callbacks) {}
122 scoped_refptr<IndexedDBCallbacks> callbacks() const { return callbacks_; } 123 scoped_refptr<IndexedDBCallbacks> callbacks() const { return callbacks_; }
123 124
124 private: 125 private:
125 scoped_refptr<IndexedDBCallbacks> callbacks_; 126 scoped_refptr<IndexedDBCallbacks> callbacks_;
(...skipping 29 matching lines...) Expand all
155 kNoStringVersion, 156 kNoStringVersion,
156 IndexedDBDatabaseMetadata::NO_INT_VERSION, 157 IndexedDBDatabaseMetadata::NO_INT_VERSION,
157 kInvalidId), 158 kInvalidId),
158 identifier_(unique_identifier), 159 identifier_(unique_identifier),
159 factory_(factory) { 160 factory_(factory) {
160 DCHECK(factory != NULL); 161 DCHECK(factory != NULL);
161 } 162 }
162 163
163 void IndexedDBDatabase::AddObjectStore( 164 void IndexedDBDatabase::AddObjectStore(
164 const IndexedDBObjectStoreMetadata& object_store, 165 const IndexedDBObjectStoreMetadata& object_store,
165 int64 new_max_object_store_id) { 166 int64_t new_max_object_store_id) {
166 DCHECK(metadata_.object_stores.find(object_store.id) == 167 DCHECK(metadata_.object_stores.find(object_store.id) ==
167 metadata_.object_stores.end()); 168 metadata_.object_stores.end());
168 if (new_max_object_store_id != IndexedDBObjectStoreMetadata::kInvalidId) { 169 if (new_max_object_store_id != IndexedDBObjectStoreMetadata::kInvalidId) {
169 DCHECK_LT(metadata_.max_object_store_id, new_max_object_store_id); 170 DCHECK_LT(metadata_.max_object_store_id, new_max_object_store_id);
170 metadata_.max_object_store_id = new_max_object_store_id; 171 metadata_.max_object_store_id = new_max_object_store_id;
171 } 172 }
172 metadata_.object_stores[object_store.id] = object_store; 173 metadata_.object_stores[object_store.id] = object_store;
173 } 174 }
174 175
175 void IndexedDBDatabase::RemoveObjectStore(int64 object_store_id) { 176 void IndexedDBDatabase::RemoveObjectStore(int64_t object_store_id) {
176 DCHECK(metadata_.object_stores.find(object_store_id) != 177 DCHECK(metadata_.object_stores.find(object_store_id) !=
177 metadata_.object_stores.end()); 178 metadata_.object_stores.end());
178 metadata_.object_stores.erase(object_store_id); 179 metadata_.object_stores.erase(object_store_id);
179 } 180 }
180 181
181 void IndexedDBDatabase::AddIndex(int64 object_store_id, 182 void IndexedDBDatabase::AddIndex(int64_t object_store_id,
182 const IndexedDBIndexMetadata& index, 183 const IndexedDBIndexMetadata& index,
183 int64 new_max_index_id) { 184 int64_t new_max_index_id) {
184 DCHECK(metadata_.object_stores.find(object_store_id) != 185 DCHECK(metadata_.object_stores.find(object_store_id) !=
185 metadata_.object_stores.end()); 186 metadata_.object_stores.end());
186 IndexedDBObjectStoreMetadata object_store = 187 IndexedDBObjectStoreMetadata object_store =
187 metadata_.object_stores[object_store_id]; 188 metadata_.object_stores[object_store_id];
188 189
189 DCHECK(object_store.indexes.find(index.id) == object_store.indexes.end()); 190 DCHECK(object_store.indexes.find(index.id) == object_store.indexes.end());
190 object_store.indexes[index.id] = index; 191 object_store.indexes[index.id] = index;
191 if (new_max_index_id != IndexedDBIndexMetadata::kInvalidId) { 192 if (new_max_index_id != IndexedDBIndexMetadata::kInvalidId) {
192 DCHECK_LT(object_store.max_index_id, new_max_index_id); 193 DCHECK_LT(object_store.max_index_id, new_max_index_id);
193 object_store.max_index_id = new_max_index_id; 194 object_store.max_index_id = new_max_index_id;
194 } 195 }
195 metadata_.object_stores[object_store_id] = object_store; 196 metadata_.object_stores[object_store_id] = object_store;
196 } 197 }
197 198
198 void IndexedDBDatabase::RemoveIndex(int64 object_store_id, int64 index_id) { 199 void IndexedDBDatabase::RemoveIndex(int64_t object_store_id, int64_t index_id) {
199 DCHECK(metadata_.object_stores.find(object_store_id) != 200 DCHECK(metadata_.object_stores.find(object_store_id) !=
200 metadata_.object_stores.end()); 201 metadata_.object_stores.end());
201 IndexedDBObjectStoreMetadata object_store = 202 IndexedDBObjectStoreMetadata object_store =
202 metadata_.object_stores[object_store_id]; 203 metadata_.object_stores[object_store_id];
203 204
204 DCHECK(object_store.indexes.find(index_id) != object_store.indexes.end()); 205 DCHECK(object_store.indexes.find(index_id) != object_store.indexes.end());
205 object_store.indexes.erase(index_id); 206 object_store.indexes.erase(index_id);
206 metadata_.object_stores[object_store_id] = object_store; 207 metadata_.object_stores[object_store_id] = object_store;
207 } 208 }
208 209
(...skipping 27 matching lines...) Expand all
236 scoped_refptr<IndexedDBDatabaseCallbacks> database_callbacks, 237 scoped_refptr<IndexedDBDatabaseCallbacks> database_callbacks,
237 int child_process_id) { 238 int child_process_id) {
238 scoped_ptr<IndexedDBConnection> connection( 239 scoped_ptr<IndexedDBConnection> connection(
239 new IndexedDBConnection(this, database_callbacks)); 240 new IndexedDBConnection(this, database_callbacks));
240 connections_.insert(connection.get()); 241 connections_.insert(connection.get());
241 backing_store_->GrantChildProcessPermissions(child_process_id); 242 backing_store_->GrantChildProcessPermissions(child_process_id);
242 return connection.Pass(); 243 return connection.Pass();
243 } 244 }
244 245
245 IndexedDBTransaction* IndexedDBDatabase::GetTransaction( 246 IndexedDBTransaction* IndexedDBDatabase::GetTransaction(
246 int64 transaction_id) const { 247 int64_t transaction_id) const {
247 TransactionMap::const_iterator trans_iterator = 248 TransactionMap::const_iterator trans_iterator =
248 transactions_.find(transaction_id); 249 transactions_.find(transaction_id);
249 if (trans_iterator == transactions_.end()) 250 if (trans_iterator == transactions_.end())
250 return NULL; 251 return NULL;
251 return trans_iterator->second; 252 return trans_iterator->second;
252 } 253 }
253 254
254 bool IndexedDBDatabase::ValidateObjectStoreId(int64 object_store_id) const { 255 bool IndexedDBDatabase::ValidateObjectStoreId(int64_t object_store_id) const {
255 if (!ContainsKey(metadata_.object_stores, object_store_id)) { 256 if (!ContainsKey(metadata_.object_stores, object_store_id)) {
256 DLOG(ERROR) << "Invalid object_store_id"; 257 DLOG(ERROR) << "Invalid object_store_id";
257 return false; 258 return false;
258 } 259 }
259 return true; 260 return true;
260 } 261 }
261 262
262 bool IndexedDBDatabase::ValidateObjectStoreIdAndIndexId(int64 object_store_id, 263 bool IndexedDBDatabase::ValidateObjectStoreIdAndIndexId(
263 int64 index_id) const { 264 int64_t object_store_id,
265 int64_t index_id) const {
264 if (!ValidateObjectStoreId(object_store_id)) 266 if (!ValidateObjectStoreId(object_store_id))
265 return false; 267 return false;
266 const IndexedDBObjectStoreMetadata& object_store_metadata = 268 const IndexedDBObjectStoreMetadata& object_store_metadata =
267 metadata_.object_stores.find(object_store_id)->second; 269 metadata_.object_stores.find(object_store_id)->second;
268 if (!ContainsKey(object_store_metadata.indexes, index_id)) { 270 if (!ContainsKey(object_store_metadata.indexes, index_id)) {
269 DLOG(ERROR) << "Invalid index_id"; 271 DLOG(ERROR) << "Invalid index_id";
270 return false; 272 return false;
271 } 273 }
272 return true; 274 return true;
273 } 275 }
274 276
275 bool IndexedDBDatabase::ValidateObjectStoreIdAndOptionalIndexId( 277 bool IndexedDBDatabase::ValidateObjectStoreIdAndOptionalIndexId(
276 int64 object_store_id, 278 int64_t object_store_id,
277 int64 index_id) const { 279 int64_t index_id) const {
278 if (!ValidateObjectStoreId(object_store_id)) 280 if (!ValidateObjectStoreId(object_store_id))
279 return false; 281 return false;
280 const IndexedDBObjectStoreMetadata& object_store_metadata = 282 const IndexedDBObjectStoreMetadata& object_store_metadata =
281 metadata_.object_stores.find(object_store_id)->second; 283 metadata_.object_stores.find(object_store_id)->second;
282 if (index_id != IndexedDBIndexMetadata::kInvalidId && 284 if (index_id != IndexedDBIndexMetadata::kInvalidId &&
283 !ContainsKey(object_store_metadata.indexes, index_id)) { 285 !ContainsKey(object_store_metadata.indexes, index_id)) {
284 DLOG(ERROR) << "Invalid index_id"; 286 DLOG(ERROR) << "Invalid index_id";
285 return false; 287 return false;
286 } 288 }
287 return true; 289 return true;
288 } 290 }
289 291
290 bool IndexedDBDatabase::ValidateObjectStoreIdAndNewIndexId( 292 bool IndexedDBDatabase::ValidateObjectStoreIdAndNewIndexId(
291 int64 object_store_id, 293 int64_t object_store_id,
292 int64 index_id) const { 294 int64_t index_id) const {
293 if (!ValidateObjectStoreId(object_store_id)) 295 if (!ValidateObjectStoreId(object_store_id))
294 return false; 296 return false;
295 const IndexedDBObjectStoreMetadata& object_store_metadata = 297 const IndexedDBObjectStoreMetadata& object_store_metadata =
296 metadata_.object_stores.find(object_store_id)->second; 298 metadata_.object_stores.find(object_store_id)->second;
297 if (ContainsKey(object_store_metadata.indexes, index_id)) { 299 if (ContainsKey(object_store_metadata.indexes, index_id)) {
298 DLOG(ERROR) << "Invalid index_id"; 300 DLOG(ERROR) << "Invalid index_id";
299 return false; 301 return false;
300 } 302 }
301 return true; 303 return true;
302 } 304 }
303 305
304 void IndexedDBDatabase::CreateObjectStore(int64 transaction_id, 306 void IndexedDBDatabase::CreateObjectStore(int64_t transaction_id,
305 int64 object_store_id, 307 int64_t object_store_id,
306 const base::string16& name, 308 const base::string16& name,
307 const IndexedDBKeyPath& key_path, 309 const IndexedDBKeyPath& key_path,
308 bool auto_increment) { 310 bool auto_increment) {
309 IDB_TRACE1("IndexedDBDatabase::CreateObjectStore", "txn.id", transaction_id); 311 IDB_TRACE1("IndexedDBDatabase::CreateObjectStore", "txn.id", transaction_id);
310 IndexedDBTransaction* transaction = GetTransaction(transaction_id); 312 IndexedDBTransaction* transaction = GetTransaction(transaction_id);
311 if (!transaction) 313 if (!transaction)
312 return; 314 return;
313 DCHECK_EQ(transaction->mode(), blink::WebIDBTransactionModeVersionChange); 315 DCHECK_EQ(transaction->mode(), blink::WebIDBTransactionModeVersionChange);
314 316
315 if (ContainsKey(metadata_.object_stores, object_store_id)) { 317 if (ContainsKey(metadata_.object_stores, object_store_id)) {
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
351 return; 353 return;
352 } 354 }
353 355
354 AddObjectStore(object_store_metadata, object_store_id); 356 AddObjectStore(object_store_metadata, object_store_id);
355 transaction->ScheduleAbortTask( 357 transaction->ScheduleAbortTask(
356 base::Bind(&IndexedDBDatabase::CreateObjectStoreAbortOperation, 358 base::Bind(&IndexedDBDatabase::CreateObjectStoreAbortOperation,
357 this, 359 this,
358 object_store_id)); 360 object_store_id));
359 } 361 }
360 362
361 void IndexedDBDatabase::DeleteObjectStore(int64 transaction_id, 363 void IndexedDBDatabase::DeleteObjectStore(int64_t transaction_id,
362 int64 object_store_id) { 364 int64_t object_store_id) {
363 IDB_TRACE1("IndexedDBDatabase::DeleteObjectStore", "txn.id", transaction_id); 365 IDB_TRACE1("IndexedDBDatabase::DeleteObjectStore", "txn.id", transaction_id);
364 IndexedDBTransaction* transaction = GetTransaction(transaction_id); 366 IndexedDBTransaction* transaction = GetTransaction(transaction_id);
365 if (!transaction) 367 if (!transaction)
366 return; 368 return;
367 DCHECK_EQ(transaction->mode(), blink::WebIDBTransactionModeVersionChange); 369 DCHECK_EQ(transaction->mode(), blink::WebIDBTransactionModeVersionChange);
368 370
369 if (!ValidateObjectStoreId(object_store_id)) 371 if (!ValidateObjectStoreId(object_store_id))
370 return; 372 return;
371 373
372 transaction->ScheduleTask( 374 transaction->ScheduleTask(
373 base::Bind(&IndexedDBDatabase::DeleteObjectStoreOperation, 375 base::Bind(&IndexedDBDatabase::DeleteObjectStoreOperation,
374 this, 376 this,
375 object_store_id)); 377 object_store_id));
376 } 378 }
377 379
378 void IndexedDBDatabase::CreateIndex(int64 transaction_id, 380 void IndexedDBDatabase::CreateIndex(int64_t transaction_id,
379 int64 object_store_id, 381 int64_t object_store_id,
380 int64 index_id, 382 int64_t index_id,
381 const base::string16& name, 383 const base::string16& name,
382 const IndexedDBKeyPath& key_path, 384 const IndexedDBKeyPath& key_path,
383 bool unique, 385 bool unique,
384 bool multi_entry) { 386 bool multi_entry) {
385 IDB_TRACE1("IndexedDBDatabase::CreateIndex", "txn.id", transaction_id); 387 IDB_TRACE1("IndexedDBDatabase::CreateIndex", "txn.id", transaction_id);
386 IndexedDBTransaction* transaction = GetTransaction(transaction_id); 388 IndexedDBTransaction* transaction = GetTransaction(transaction_id);
387 if (!transaction) 389 if (!transaction)
388 return; 390 return;
389 DCHECK_EQ(transaction->mode(), blink::WebIDBTransactionModeVersionChange); 391 DCHECK_EQ(transaction->mode(), blink::WebIDBTransactionModeVersionChange);
390 392
(...skipping 29 matching lines...) Expand all
420 422
421 AddIndex(object_store_id, index_metadata, index_id); 423 AddIndex(object_store_id, index_metadata, index_id);
422 transaction->ScheduleAbortTask( 424 transaction->ScheduleAbortTask(
423 base::Bind(&IndexedDBDatabase::CreateIndexAbortOperation, 425 base::Bind(&IndexedDBDatabase::CreateIndexAbortOperation,
424 this, 426 this,
425 object_store_id, 427 object_store_id,
426 index_id)); 428 index_id));
427 } 429 }
428 430
429 void IndexedDBDatabase::CreateIndexAbortOperation( 431 void IndexedDBDatabase::CreateIndexAbortOperation(
430 int64 object_store_id, 432 int64_t object_store_id,
431 int64 index_id, 433 int64_t index_id,
432 IndexedDBTransaction* transaction) { 434 IndexedDBTransaction* transaction) {
433 DCHECK(!transaction); 435 DCHECK(!transaction);
434 IDB_TRACE("IndexedDBDatabase::CreateIndexAbortOperation"); 436 IDB_TRACE("IndexedDBDatabase::CreateIndexAbortOperation");
435 RemoveIndex(object_store_id, index_id); 437 RemoveIndex(object_store_id, index_id);
436 } 438 }
437 439
438 void IndexedDBDatabase::DeleteIndex(int64 transaction_id, 440 void IndexedDBDatabase::DeleteIndex(int64_t transaction_id,
439 int64 object_store_id, 441 int64_t object_store_id,
440 int64 index_id) { 442 int64_t index_id) {
441 IDB_TRACE1("IndexedDBDatabase::DeleteIndex", "txn.id", transaction_id); 443 IDB_TRACE1("IndexedDBDatabase::DeleteIndex", "txn.id", transaction_id);
442 IndexedDBTransaction* transaction = GetTransaction(transaction_id); 444 IndexedDBTransaction* transaction = GetTransaction(transaction_id);
443 if (!transaction) 445 if (!transaction)
444 return; 446 return;
445 DCHECK_EQ(transaction->mode(), blink::WebIDBTransactionModeVersionChange); 447 DCHECK_EQ(transaction->mode(), blink::WebIDBTransactionModeVersionChange);
446 448
447 if (!ValidateObjectStoreIdAndIndexId(object_store_id, index_id)) 449 if (!ValidateObjectStoreIdAndIndexId(object_store_id, index_id))
448 return; 450 return;
449 451
450 transaction->ScheduleTask( 452 transaction->ScheduleTask(
451 base::Bind(&IndexedDBDatabase::DeleteIndexOperation, 453 base::Bind(&IndexedDBDatabase::DeleteIndexOperation,
452 this, 454 this,
453 object_store_id, 455 object_store_id,
454 index_id)); 456 index_id));
455 } 457 }
456 458
457 void IndexedDBDatabase::DeleteIndexOperation( 459 void IndexedDBDatabase::DeleteIndexOperation(
458 int64 object_store_id, 460 int64_t object_store_id,
459 int64 index_id, 461 int64_t index_id,
460 IndexedDBTransaction* transaction) { 462 IndexedDBTransaction* transaction) {
461 IDB_TRACE1( 463 IDB_TRACE1(
462 "IndexedDBDatabase::DeleteIndexOperation", "txn.id", transaction->id()); 464 "IndexedDBDatabase::DeleteIndexOperation", "txn.id", transaction->id());
463 465
464 const IndexedDBIndexMetadata index_metadata = 466 const IndexedDBIndexMetadata index_metadata =
465 metadata_.object_stores[object_store_id].indexes[index_id]; 467 metadata_.object_stores[object_store_id].indexes[index_id];
466 468
467 leveldb::Status s = 469 leveldb::Status s =
468 backing_store_->DeleteIndex(transaction->BackingStoreTransaction(), 470 backing_store_->DeleteIndex(transaction->BackingStoreTransaction(),
469 transaction->database()->id(), 471 transaction->database()->id(),
(...skipping 14 matching lines...) Expand all
484 486
485 RemoveIndex(object_store_id, index_id); 487 RemoveIndex(object_store_id, index_id);
486 transaction->ScheduleAbortTask( 488 transaction->ScheduleAbortTask(
487 base::Bind(&IndexedDBDatabase::DeleteIndexAbortOperation, 489 base::Bind(&IndexedDBDatabase::DeleteIndexAbortOperation,
488 this, 490 this,
489 object_store_id, 491 object_store_id,
490 index_metadata)); 492 index_metadata));
491 } 493 }
492 494
493 void IndexedDBDatabase::DeleteIndexAbortOperation( 495 void IndexedDBDatabase::DeleteIndexAbortOperation(
494 int64 object_store_id, 496 int64_t object_store_id,
495 const IndexedDBIndexMetadata& index_metadata, 497 const IndexedDBIndexMetadata& index_metadata,
496 IndexedDBTransaction* transaction) { 498 IndexedDBTransaction* transaction) {
497 DCHECK(!transaction); 499 DCHECK(!transaction);
498 IDB_TRACE("IndexedDBDatabase::DeleteIndexAbortOperation"); 500 IDB_TRACE("IndexedDBDatabase::DeleteIndexAbortOperation");
499 AddIndex(object_store_id, index_metadata, IndexedDBIndexMetadata::kInvalidId); 501 AddIndex(object_store_id, index_metadata, IndexedDBIndexMetadata::kInvalidId);
500 } 502 }
501 503
502 void IndexedDBDatabase::Commit(int64 transaction_id) { 504 void IndexedDBDatabase::Commit(int64_t transaction_id) {
503 // The frontend suggests that we commit, but we may have previously initiated 505 // The frontend suggests that we commit, but we may have previously initiated
504 // an abort, and so have disposed of the transaction. on_abort has already 506 // an abort, and so have disposed of the transaction. on_abort has already
505 // been dispatched to the frontend, so it will find out about that 507 // been dispatched to the frontend, so it will find out about that
506 // asynchronously. 508 // asynchronously.
507 IndexedDBTransaction* transaction = GetTransaction(transaction_id); 509 IndexedDBTransaction* transaction = GetTransaction(transaction_id);
508 if (transaction) { 510 if (transaction) {
509 scoped_refptr<IndexedDBFactory> factory = factory_; 511 scoped_refptr<IndexedDBFactory> factory = factory_;
510 leveldb::Status s = transaction->Commit(); 512 leveldb::Status s = transaction->Commit();
511 if (s.IsCorruption()) { 513 if (s.IsCorruption()) {
512 IndexedDBDatabaseError error(blink::WebIDBDatabaseExceptionUnknownError, 514 IndexedDBDatabaseError error(blink::WebIDBDatabaseExceptionUnknownError,
513 "Internal error committing transaction."); 515 "Internal error committing transaction.");
514 factory->HandleBackingStoreCorruption(identifier_.first, error); 516 factory->HandleBackingStoreCorruption(identifier_.first, error);
515 } 517 }
516 } 518 }
517 } 519 }
518 520
519 void IndexedDBDatabase::Abort(int64 transaction_id) { 521 void IndexedDBDatabase::Abort(int64_t transaction_id) {
520 // If the transaction is unknown, then it has already been aborted by the 522 // If the transaction is unknown, then it has already been aborted by the
521 // backend before this call so it is safe to ignore it. 523 // backend before this call so it is safe to ignore it.
522 IDB_TRACE1("IndexedDBDatabase::Abort", "txn.id", transaction_id); 524 IDB_TRACE1("IndexedDBDatabase::Abort", "txn.id", transaction_id);
523 IndexedDBTransaction* transaction = GetTransaction(transaction_id); 525 IndexedDBTransaction* transaction = GetTransaction(transaction_id);
524 if (transaction) 526 if (transaction)
525 transaction->Abort(); 527 transaction->Abort();
526 } 528 }
527 529
528 void IndexedDBDatabase::Abort(int64 transaction_id, 530 void IndexedDBDatabase::Abort(int64_t transaction_id,
529 const IndexedDBDatabaseError& error) { 531 const IndexedDBDatabaseError& error) {
530 IDB_TRACE1("IndexedDBDatabase::Abort(error)", "txn.id", transaction_id); 532 IDB_TRACE1("IndexedDBDatabase::Abort(error)", "txn.id", transaction_id);
531 // If the transaction is unknown, then it has already been aborted by the 533 // If the transaction is unknown, then it has already been aborted by the
532 // backend before this call so it is safe to ignore it. 534 // backend before this call so it is safe to ignore it.
533 IndexedDBTransaction* transaction = GetTransaction(transaction_id); 535 IndexedDBTransaction* transaction = GetTransaction(transaction_id);
534 if (transaction) 536 if (transaction)
535 transaction->Abort(error); 537 transaction->Abort(error);
536 } 538 }
537 539
538 void IndexedDBDatabase::GetAll(int64 transaction_id, 540 void IndexedDBDatabase::GetAll(int64_t transaction_id,
539 int64 object_store_id, 541 int64_t object_store_id,
540 int64 index_id, 542 int64_t index_id,
541 scoped_ptr<IndexedDBKeyRange> key_range, 543 scoped_ptr<IndexedDBKeyRange> key_range,
542 bool key_only, 544 bool key_only,
543 int64 max_count, 545 int64_t max_count,
544 scoped_refptr<IndexedDBCallbacks> callbacks) { 546 scoped_refptr<IndexedDBCallbacks> callbacks) {
545 IDB_TRACE1("IndexedDBDatabase::GetAll", "txn.id", transaction_id); 547 IDB_TRACE1("IndexedDBDatabase::GetAll", "txn.id", transaction_id);
546 IndexedDBTransaction* transaction = GetTransaction(transaction_id); 548 IndexedDBTransaction* transaction = GetTransaction(transaction_id);
547 if (!transaction) 549 if (!transaction)
548 return; 550 return;
549 551
550 if (!ValidateObjectStoreId(object_store_id)) 552 if (!ValidateObjectStoreId(object_store_id))
551 return; 553 return;
552 554
553 transaction->ScheduleTask(base::Bind( 555 transaction->ScheduleTask(base::Bind(
554 &IndexedDBDatabase::GetAllOperation, this, object_store_id, index_id, 556 &IndexedDBDatabase::GetAllOperation, this, object_store_id, index_id,
555 base::Passed(&key_range), 557 base::Passed(&key_range),
556 key_only ? indexed_db::CURSOR_KEY_ONLY : indexed_db::CURSOR_KEY_AND_VALUE, 558 key_only ? indexed_db::CURSOR_KEY_ONLY : indexed_db::CURSOR_KEY_AND_VALUE,
557 max_count, callbacks)); 559 max_count, callbacks));
558 } 560 }
559 561
560 void IndexedDBDatabase::Get(int64 transaction_id, 562 void IndexedDBDatabase::Get(int64_t transaction_id,
561 int64 object_store_id, 563 int64_t object_store_id,
562 int64 index_id, 564 int64_t index_id,
563 scoped_ptr<IndexedDBKeyRange> key_range, 565 scoped_ptr<IndexedDBKeyRange> key_range,
564 bool key_only, 566 bool key_only,
565 scoped_refptr<IndexedDBCallbacks> callbacks) { 567 scoped_refptr<IndexedDBCallbacks> callbacks) {
566 IDB_TRACE1("IndexedDBDatabase::Get", "txn.id", transaction_id); 568 IDB_TRACE1("IndexedDBDatabase::Get", "txn.id", transaction_id);
567 IndexedDBTransaction* transaction = GetTransaction(transaction_id); 569 IndexedDBTransaction* transaction = GetTransaction(transaction_id);
568 if (!transaction) 570 if (!transaction)
569 return; 571 return;
570 572
571 if (!ValidateObjectStoreIdAndOptionalIndexId(object_store_id, index_id)) 573 if (!ValidateObjectStoreIdAndOptionalIndexId(object_store_id, index_id))
572 return; 574 return;
573 575
574 transaction->ScheduleTask(base::Bind( 576 transaction->ScheduleTask(base::Bind(
575 &IndexedDBDatabase::GetOperation, this, object_store_id, index_id, 577 &IndexedDBDatabase::GetOperation, this, object_store_id, index_id,
576 base::Passed(&key_range), 578 base::Passed(&key_range),
577 key_only ? indexed_db::CURSOR_KEY_ONLY : indexed_db::CURSOR_KEY_AND_VALUE, 579 key_only ? indexed_db::CURSOR_KEY_ONLY : indexed_db::CURSOR_KEY_AND_VALUE,
578 callbacks)); 580 callbacks));
579 } 581 }
580 582
581 void IndexedDBDatabase::GetOperation( 583 void IndexedDBDatabase::GetOperation(
582 int64 object_store_id, 584 int64_t object_store_id,
583 int64 index_id, 585 int64_t index_id,
584 scoped_ptr<IndexedDBKeyRange> key_range, 586 scoped_ptr<IndexedDBKeyRange> key_range,
585 indexed_db::CursorType cursor_type, 587 indexed_db::CursorType cursor_type,
586 scoped_refptr<IndexedDBCallbacks> callbacks, 588 scoped_refptr<IndexedDBCallbacks> callbacks,
587 IndexedDBTransaction* transaction) { 589 IndexedDBTransaction* transaction) {
588 IDB_TRACE1("IndexedDBDatabase::GetOperation", "txn.id", transaction->id()); 590 IDB_TRACE1("IndexedDBDatabase::GetOperation", "txn.id", transaction->id());
589 591
590 DCHECK(metadata_.object_stores.find(object_store_id) != 592 DCHECK(metadata_.object_stores.find(object_store_id) !=
591 metadata_.object_stores.end()); 593 metadata_.object_stores.end());
592 const IndexedDBObjectStoreMetadata& object_store_metadata = 594 const IndexedDBObjectStoreMetadata& object_store_metadata =
593 metadata_.object_stores[object_store_id]; 595 metadata_.object_stores[object_store_id];
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
734 } 736 }
735 if (object_store_metadata.auto_increment && 737 if (object_store_metadata.auto_increment &&
736 !object_store_metadata.key_path.IsNull()) { 738 !object_store_metadata.key_path.IsNull()) {
737 value.primary_key = *primary_key; 739 value.primary_key = *primary_key;
738 value.key_path = object_store_metadata.key_path; 740 value.key_path = object_store_metadata.key_path;
739 } 741 }
740 callbacks->OnSuccess(&value); 742 callbacks->OnSuccess(&value);
741 } 743 }
742 744
743 void IndexedDBDatabase::GetAllOperation( 745 void IndexedDBDatabase::GetAllOperation(
744 int64 object_store_id, 746 int64_t object_store_id,
745 int64 index_id, 747 int64_t index_id,
746 scoped_ptr<IndexedDBKeyRange> key_range, 748 scoped_ptr<IndexedDBKeyRange> key_range,
747 indexed_db::CursorType cursor_type, 749 indexed_db::CursorType cursor_type,
748 int64 max_count, 750 int64_t max_count,
749 scoped_refptr<IndexedDBCallbacks> callbacks, 751 scoped_refptr<IndexedDBCallbacks> callbacks,
750 IndexedDBTransaction* transaction) { 752 IndexedDBTransaction* transaction) {
751 IDB_TRACE1("IndexedDBDatabase::GetAllOperation", "txn.id", transaction->id()); 753 IDB_TRACE1("IndexedDBDatabase::GetAllOperation", "txn.id", transaction->id());
752 754
753 DCHECK_GT(max_count, 0); 755 DCHECK_GT(max_count, 0);
754 756
755 DCHECK(metadata_.object_stores.find(object_store_id) != 757 DCHECK(metadata_.object_stores.find(object_store_id) !=
756 metadata_.object_stores.end()); 758 metadata_.object_stores.end());
757 const IndexedDBObjectStoreMetadata& object_store_metadata = 759 const IndexedDBObjectStoreMetadata& object_store_metadata =
758 metadata_.object_stores[object_store_id]; 760 metadata_.object_stores[object_store_id];
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
808 // hits JavaScript. 810 // hits JavaScript.
809 callbacks->OnSuccessArray(&found_values, object_store_metadata.key_path); 811 callbacks->OnSuccessArray(&found_values, object_store_metadata.key_path);
810 return; 812 return;
811 } 813 }
812 814
813 bool did_first_seek = false; 815 bool did_first_seek = false;
814 bool generated_key = object_store_metadata.auto_increment && 816 bool generated_key = object_store_metadata.auto_increment &&
815 !object_store_metadata.key_path.IsNull(); 817 !object_store_metadata.key_path.IsNull();
816 818
817 size_t response_size = kMaxIDBMessageOverhead; 819 size_t response_size = kMaxIDBMessageOverhead;
818 int64 num_found_items = 0; 820 int64_t num_found_items = 0;
819 while (num_found_items++ < max_count) { 821 while (num_found_items++ < max_count) {
820 bool cursor_valid; 822 bool cursor_valid;
821 if (did_first_seek) { 823 if (did_first_seek) {
822 cursor_valid = cursor->Continue(&s); 824 cursor_valid = cursor->Continue(&s);
823 } else { 825 } else {
824 cursor_valid = cursor->FirstSeek(&s); 826 cursor_valid = cursor->FirstSeek(&s);
825 did_first_seek = true; 827 did_first_seek = true;
826 } 828 }
827 if (!s.ok()) { 829 if (!s.ok()) {
828 IndexedDBDatabaseError error(blink::WebIDBDatabaseExceptionUnknownError, 830 IndexedDBDatabaseError error(blink::WebIDBDatabaseExceptionUnknownError,
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
873 // to return an array of keys - no need to create our own array of keys. 875 // to return an array of keys - no need to create our own array of keys.
874 callbacks->OnSuccess(IndexedDBKey(found_keys)); 876 callbacks->OnSuccess(IndexedDBKey(found_keys));
875 } else { 877 } else {
876 callbacks->OnSuccessArray(&found_values, object_store_metadata.key_path); 878 callbacks->OnSuccessArray(&found_values, object_store_metadata.key_path);
877 } 879 }
878 } 880 }
879 881
880 static scoped_ptr<IndexedDBKey> GenerateKey( 882 static scoped_ptr<IndexedDBKey> GenerateKey(
881 IndexedDBBackingStore* backing_store, 883 IndexedDBBackingStore* backing_store,
882 IndexedDBTransaction* transaction, 884 IndexedDBTransaction* transaction,
883 int64 database_id, 885 int64_t database_id,
884 int64 object_store_id) { 886 int64_t object_store_id) {
885 const int64 max_generator_value = 887 const int64_t max_generator_value =
886 9007199254740992LL; // Maximum integer storable as ECMAScript number. 888 9007199254740992LL; // Maximum integer storable as ECMAScript number.
887 int64 current_number; 889 int64_t current_number;
888 leveldb::Status s = backing_store->GetKeyGeneratorCurrentNumber( 890 leveldb::Status s = backing_store->GetKeyGeneratorCurrentNumber(
889 transaction->BackingStoreTransaction(), 891 transaction->BackingStoreTransaction(),
890 database_id, 892 database_id,
891 object_store_id, 893 object_store_id,
892 &current_number); 894 &current_number);
893 if (!s.ok()) { 895 if (!s.ok()) {
894 LOG(ERROR) << "Failed to GetKeyGeneratorCurrentNumber"; 896 LOG(ERROR) << "Failed to GetKeyGeneratorCurrentNumber";
895 return make_scoped_ptr(new IndexedDBKey()); 897 return make_scoped_ptr(new IndexedDBKey());
896 } 898 }
897 if (current_number < 0 || current_number > max_generator_value) 899 if (current_number < 0 || current_number > max_generator_value)
898 return make_scoped_ptr(new IndexedDBKey()); 900 return make_scoped_ptr(new IndexedDBKey());
899 901
900 return make_scoped_ptr(new IndexedDBKey(current_number, WebIDBKeyTypeNumber)); 902 return make_scoped_ptr(new IndexedDBKey(current_number, WebIDBKeyTypeNumber));
901 } 903 }
902 904
903 static leveldb::Status UpdateKeyGenerator(IndexedDBBackingStore* backing_store, 905 static leveldb::Status UpdateKeyGenerator(IndexedDBBackingStore* backing_store,
904 IndexedDBTransaction* transaction, 906 IndexedDBTransaction* transaction,
905 int64 database_id, 907 int64_t database_id,
906 int64 object_store_id, 908 int64_t object_store_id,
907 const IndexedDBKey& key, 909 const IndexedDBKey& key,
908 bool check_current) { 910 bool check_current) {
909 DCHECK_EQ(WebIDBKeyTypeNumber, key.type()); 911 DCHECK_EQ(WebIDBKeyTypeNumber, key.type());
910 return backing_store->MaybeUpdateKeyGeneratorCurrentNumber( 912 return backing_store->MaybeUpdateKeyGeneratorCurrentNumber(
911 transaction->BackingStoreTransaction(), 913 transaction->BackingStoreTransaction(), database_id, object_store_id,
912 database_id, 914 static_cast<int64_t>(floor(key.number())) + 1, check_current);
913 object_store_id,
914 static_cast<int64>(floor(key.number())) + 1,
915 check_current);
916 } 915 }
917 916
918 struct IndexedDBDatabase::PutOperationParams { 917 struct IndexedDBDatabase::PutOperationParams {
919 PutOperationParams() {} 918 PutOperationParams() {}
920 int64 object_store_id; 919 int64_t object_store_id;
921 IndexedDBValue value; 920 IndexedDBValue value;
922 ScopedVector<storage::BlobDataHandle> handles; 921 ScopedVector<storage::BlobDataHandle> handles;
923 scoped_ptr<IndexedDBKey> key; 922 scoped_ptr<IndexedDBKey> key;
924 blink::WebIDBPutMode put_mode; 923 blink::WebIDBPutMode put_mode;
925 scoped_refptr<IndexedDBCallbacks> callbacks; 924 scoped_refptr<IndexedDBCallbacks> callbacks;
926 std::vector<IndexKeys> index_keys; 925 std::vector<IndexKeys> index_keys;
927 926
928 private: 927 private:
929 DISALLOW_COPY_AND_ASSIGN(PutOperationParams); 928 DISALLOW_COPY_AND_ASSIGN(PutOperationParams);
930 }; 929 };
931 930
932 void IndexedDBDatabase::Put(int64 transaction_id, 931 void IndexedDBDatabase::Put(int64_t transaction_id,
933 int64 object_store_id, 932 int64_t object_store_id,
934 IndexedDBValue* value, 933 IndexedDBValue* value,
935 ScopedVector<storage::BlobDataHandle>* handles, 934 ScopedVector<storage::BlobDataHandle>* handles,
936 scoped_ptr<IndexedDBKey> key, 935 scoped_ptr<IndexedDBKey> key,
937 blink::WebIDBPutMode put_mode, 936 blink::WebIDBPutMode put_mode,
938 scoped_refptr<IndexedDBCallbacks> callbacks, 937 scoped_refptr<IndexedDBCallbacks> callbacks,
939 const std::vector<IndexKeys>& index_keys) { 938 const std::vector<IndexKeys>& index_keys) {
940 IDB_TRACE1("IndexedDBDatabase::Put", "txn.id", transaction_id); 939 IDB_TRACE1("IndexedDBDatabase::Put", "txn.id", transaction_id);
941 IndexedDBTransaction* transaction = GetTransaction(transaction_id); 940 IndexedDBTransaction* transaction = GetTransaction(transaction_id);
942 if (!transaction) 941 if (!transaction)
943 return; 942 return;
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
1095 return; 1094 return;
1096 } 1095 }
1097 } 1096 }
1098 { 1097 {
1099 IDB_TRACE1("IndexedDBDatabase::PutOperation.Callbacks", "txn.id", 1098 IDB_TRACE1("IndexedDBDatabase::PutOperation.Callbacks", "txn.id",
1100 transaction->id()); 1099 transaction->id());
1101 params->callbacks->OnSuccess(*key); 1100 params->callbacks->OnSuccess(*key);
1102 } 1101 }
1103 } 1102 }
1104 1103
1105 void IndexedDBDatabase::SetIndexKeys(int64 transaction_id, 1104 void IndexedDBDatabase::SetIndexKeys(int64_t transaction_id,
1106 int64 object_store_id, 1105 int64_t object_store_id,
1107 scoped_ptr<IndexedDBKey> primary_key, 1106 scoped_ptr<IndexedDBKey> primary_key,
1108 const std::vector<IndexKeys>& index_keys) { 1107 const std::vector<IndexKeys>& index_keys) {
1109 IDB_TRACE1("IndexedDBDatabase::SetIndexKeys", "txn.id", transaction_id); 1108 IDB_TRACE1("IndexedDBDatabase::SetIndexKeys", "txn.id", transaction_id);
1110 IndexedDBTransaction* transaction = GetTransaction(transaction_id); 1109 IndexedDBTransaction* transaction = GetTransaction(transaction_id);
1111 if (!transaction) 1110 if (!transaction)
1112 return; 1111 return;
1113 DCHECK_EQ(transaction->mode(), blink::WebIDBTransactionModeVersionChange); 1112 DCHECK_EQ(transaction->mode(), blink::WebIDBTransactionModeVersionChange);
1114 1113
1115 // TODO(alecflett): This method could be asynchronous, but we need to 1114 // TODO(alecflett): This method could be asynchronous, but we need to
1116 // evaluate if it's worth the extra complexity. 1115 // evaluate if it's worth the extra complexity.
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
1171 for (size_t i = 0; i < index_writers.size(); ++i) { 1170 for (size_t i = 0; i < index_writers.size(); ++i) {
1172 IndexWriter* index_writer = index_writers[i]; 1171 IndexWriter* index_writer = index_writers[i];
1173 index_writer->WriteIndexKeys(record_identifier, 1172 index_writer->WriteIndexKeys(record_identifier,
1174 backing_store_.get(), 1173 backing_store_.get(),
1175 transaction->BackingStoreTransaction(), 1174 transaction->BackingStoreTransaction(),
1176 id(), 1175 id(),
1177 object_store_id); 1176 object_store_id);
1178 } 1177 }
1179 } 1178 }
1180 1179
1181 void IndexedDBDatabase::SetIndexesReady(int64 transaction_id, 1180 void IndexedDBDatabase::SetIndexesReady(int64_t transaction_id,
1182 int64, 1181 int64_t,
1183 const std::vector<int64>& index_ids) { 1182 const std::vector<int64_t>& index_ids) {
1184 IndexedDBTransaction* transaction = GetTransaction(transaction_id); 1183 IndexedDBTransaction* transaction = GetTransaction(transaction_id);
1185 if (!transaction) 1184 if (!transaction)
1186 return; 1185 return;
1187 DCHECK_EQ(transaction->mode(), blink::WebIDBTransactionModeVersionChange); 1186 DCHECK_EQ(transaction->mode(), blink::WebIDBTransactionModeVersionChange);
1188 1187
1189 transaction->ScheduleTask( 1188 transaction->ScheduleTask(
1190 blink::WebIDBTaskTypePreemptive, 1189 blink::WebIDBTaskTypePreemptive,
1191 base::Bind(&IndexedDBDatabase::SetIndexesReadyOperation, 1190 base::Bind(&IndexedDBDatabase::SetIndexesReadyOperation,
1192 this, 1191 this,
1193 index_ids.size())); 1192 index_ids.size()));
1194 } 1193 }
1195 1194
1196 void IndexedDBDatabase::SetIndexesReadyOperation( 1195 void IndexedDBDatabase::SetIndexesReadyOperation(
1197 size_t index_count, 1196 size_t index_count,
1198 IndexedDBTransaction* transaction) { 1197 IndexedDBTransaction* transaction) {
1199 for (size_t i = 0; i < index_count; ++i) 1198 for (size_t i = 0; i < index_count; ++i)
1200 transaction->DidCompletePreemptiveEvent(); 1199 transaction->DidCompletePreemptiveEvent();
1201 } 1200 }
1202 1201
1203 struct IndexedDBDatabase::OpenCursorOperationParams { 1202 struct IndexedDBDatabase::OpenCursorOperationParams {
1204 OpenCursorOperationParams() {} 1203 OpenCursorOperationParams() {}
1205 int64 object_store_id; 1204 int64_t object_store_id;
1206 int64 index_id; 1205 int64_t index_id;
1207 scoped_ptr<IndexedDBKeyRange> key_range; 1206 scoped_ptr<IndexedDBKeyRange> key_range;
1208 blink::WebIDBCursorDirection direction; 1207 blink::WebIDBCursorDirection direction;
1209 indexed_db::CursorType cursor_type; 1208 indexed_db::CursorType cursor_type;
1210 blink::WebIDBTaskType task_type; 1209 blink::WebIDBTaskType task_type;
1211 scoped_refptr<IndexedDBCallbacks> callbacks; 1210 scoped_refptr<IndexedDBCallbacks> callbacks;
1212 1211
1213 private: 1212 private:
1214 DISALLOW_COPY_AND_ASSIGN(OpenCursorOperationParams); 1213 DISALLOW_COPY_AND_ASSIGN(OpenCursorOperationParams);
1215 }; 1214 };
1216 1215
1217 void IndexedDBDatabase::OpenCursor( 1216 void IndexedDBDatabase::OpenCursor(
1218 int64 transaction_id, 1217 int64_t transaction_id,
1219 int64 object_store_id, 1218 int64_t object_store_id,
1220 int64 index_id, 1219 int64_t index_id,
1221 scoped_ptr<IndexedDBKeyRange> key_range, 1220 scoped_ptr<IndexedDBKeyRange> key_range,
1222 blink::WebIDBCursorDirection direction, 1221 blink::WebIDBCursorDirection direction,
1223 bool key_only, 1222 bool key_only,
1224 blink::WebIDBTaskType task_type, 1223 blink::WebIDBTaskType task_type,
1225 scoped_refptr<IndexedDBCallbacks> callbacks) { 1224 scoped_refptr<IndexedDBCallbacks> callbacks) {
1226 IDB_TRACE1("IndexedDBDatabase::OpenCursor", "txn.id", transaction_id); 1225 IDB_TRACE1("IndexedDBDatabase::OpenCursor", "txn.id", transaction_id);
1227 IndexedDBTransaction* transaction = GetTransaction(transaction_id); 1226 IndexedDBTransaction* transaction = GetTransaction(transaction_id);
1228 if (!transaction) 1227 if (!transaction)
1229 return; 1228 return;
1230 1229
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
1319 1318
1320 scoped_refptr<IndexedDBCursor> cursor = 1319 scoped_refptr<IndexedDBCursor> cursor =
1321 new IndexedDBCursor(backing_store_cursor.Pass(), 1320 new IndexedDBCursor(backing_store_cursor.Pass(),
1322 params->cursor_type, 1321 params->cursor_type,
1323 params->task_type, 1322 params->task_type,
1324 transaction); 1323 transaction);
1325 params->callbacks->OnSuccess( 1324 params->callbacks->OnSuccess(
1326 cursor, cursor->key(), cursor->primary_key(), cursor->Value()); 1325 cursor, cursor->key(), cursor->primary_key(), cursor->Value());
1327 } 1326 }
1328 1327
1329 void IndexedDBDatabase::Count(int64 transaction_id, 1328 void IndexedDBDatabase::Count(int64_t transaction_id,
1330 int64 object_store_id, 1329 int64_t object_store_id,
1331 int64 index_id, 1330 int64_t index_id,
1332 scoped_ptr<IndexedDBKeyRange> key_range, 1331 scoped_ptr<IndexedDBKeyRange> key_range,
1333 scoped_refptr<IndexedDBCallbacks> callbacks) { 1332 scoped_refptr<IndexedDBCallbacks> callbacks) {
1334 IDB_TRACE1("IndexedDBDatabase::Count", "txn.id", transaction_id); 1333 IDB_TRACE1("IndexedDBDatabase::Count", "txn.id", transaction_id);
1335 IndexedDBTransaction* transaction = GetTransaction(transaction_id); 1334 IndexedDBTransaction* transaction = GetTransaction(transaction_id);
1336 if (!transaction) 1335 if (!transaction)
1337 return; 1336 return;
1338 1337
1339 if (!ValidateObjectStoreIdAndOptionalIndexId(object_store_id, index_id)) 1338 if (!ValidateObjectStoreIdAndOptionalIndexId(object_store_id, index_id))
1340 return; 1339 return;
1341 1340
1342 transaction->ScheduleTask(base::Bind(&IndexedDBDatabase::CountOperation, 1341 transaction->ScheduleTask(base::Bind(&IndexedDBDatabase::CountOperation,
1343 this, 1342 this,
1344 object_store_id, 1343 object_store_id,
1345 index_id, 1344 index_id,
1346 base::Passed(&key_range), 1345 base::Passed(&key_range),
1347 callbacks)); 1346 callbacks));
1348 } 1347 }
1349 1348
1350 void IndexedDBDatabase::CountOperation( 1349 void IndexedDBDatabase::CountOperation(
1351 int64 object_store_id, 1350 int64_t object_store_id,
1352 int64 index_id, 1351 int64_t index_id,
1353 scoped_ptr<IndexedDBKeyRange> key_range, 1352 scoped_ptr<IndexedDBKeyRange> key_range,
1354 scoped_refptr<IndexedDBCallbacks> callbacks, 1353 scoped_refptr<IndexedDBCallbacks> callbacks,
1355 IndexedDBTransaction* transaction) { 1354 IndexedDBTransaction* transaction) {
1356 IDB_TRACE1("IndexedDBDatabase::CountOperation", "txn.id", transaction->id()); 1355 IDB_TRACE1("IndexedDBDatabase::CountOperation", "txn.id", transaction->id());
1357 uint32 count = 0; 1356 uint32_t count = 0;
1358 scoped_ptr<IndexedDBBackingStore::Cursor> backing_store_cursor; 1357 scoped_ptr<IndexedDBBackingStore::Cursor> backing_store_cursor;
1359 1358
1360 leveldb::Status s; 1359 leveldb::Status s;
1361 if (index_id == IndexedDBIndexMetadata::kInvalidId) { 1360 if (index_id == IndexedDBIndexMetadata::kInvalidId) {
1362 backing_store_cursor = backing_store_->OpenObjectStoreKeyCursor( 1361 backing_store_cursor = backing_store_->OpenObjectStoreKeyCursor(
1363 transaction->BackingStoreTransaction(), 1362 transaction->BackingStoreTransaction(),
1364 id(), 1363 id(),
1365 object_store_id, 1364 object_store_id,
1366 *key_range, 1365 *key_range,
1367 blink::WebIDBCursorDirectionNext, 1366 blink::WebIDBCursorDirectionNext,
(...skipping 25 matching lines...) Expand all
1393 do { 1392 do {
1394 ++count; 1393 ++count;
1395 } while (backing_store_cursor->Continue(&s)); 1394 } while (backing_store_cursor->Continue(&s));
1396 1395
1397 // TODO(cmumford): Check for database corruption. 1396 // TODO(cmumford): Check for database corruption.
1398 1397
1399 callbacks->OnSuccess(count); 1398 callbacks->OnSuccess(count);
1400 } 1399 }
1401 1400
1402 void IndexedDBDatabase::DeleteRange( 1401 void IndexedDBDatabase::DeleteRange(
1403 int64 transaction_id, 1402 int64_t transaction_id,
1404 int64 object_store_id, 1403 int64_t object_store_id,
1405 scoped_ptr<IndexedDBKeyRange> key_range, 1404 scoped_ptr<IndexedDBKeyRange> key_range,
1406 scoped_refptr<IndexedDBCallbacks> callbacks) { 1405 scoped_refptr<IndexedDBCallbacks> callbacks) {
1407 IDB_TRACE1("IndexedDBDatabase::DeleteRange", "txn.id", transaction_id); 1406 IDB_TRACE1("IndexedDBDatabase::DeleteRange", "txn.id", transaction_id);
1408 IndexedDBTransaction* transaction = GetTransaction(transaction_id); 1407 IndexedDBTransaction* transaction = GetTransaction(transaction_id);
1409 if (!transaction) 1408 if (!transaction)
1410 return; 1409 return;
1411 DCHECK_NE(transaction->mode(), blink::WebIDBTransactionModeReadOnly); 1410 DCHECK_NE(transaction->mode(), blink::WebIDBTransactionModeReadOnly);
1412 1411
1413 if (!ValidateObjectStoreId(object_store_id)) 1412 if (!ValidateObjectStoreId(object_store_id))
1414 return; 1413 return;
1415 1414
1416 transaction->ScheduleTask(base::Bind(&IndexedDBDatabase::DeleteRangeOperation, 1415 transaction->ScheduleTask(base::Bind(&IndexedDBDatabase::DeleteRangeOperation,
1417 this, 1416 this,
1418 object_store_id, 1417 object_store_id,
1419 base::Passed(&key_range), 1418 base::Passed(&key_range),
1420 callbacks)); 1419 callbacks));
1421 } 1420 }
1422 1421
1423 void IndexedDBDatabase::DeleteRangeOperation( 1422 void IndexedDBDatabase::DeleteRangeOperation(
1424 int64 object_store_id, 1423 int64_t object_store_id,
1425 scoped_ptr<IndexedDBKeyRange> key_range, 1424 scoped_ptr<IndexedDBKeyRange> key_range,
1426 scoped_refptr<IndexedDBCallbacks> callbacks, 1425 scoped_refptr<IndexedDBCallbacks> callbacks,
1427 IndexedDBTransaction* transaction) { 1426 IndexedDBTransaction* transaction) {
1428 IDB_TRACE1( 1427 IDB_TRACE1(
1429 "IndexedDBDatabase::DeleteRangeOperation", "txn.id", transaction->id()); 1428 "IndexedDBDatabase::DeleteRangeOperation", "txn.id", transaction->id());
1430 leveldb::Status s = 1429 leveldb::Status s =
1431 backing_store_->DeleteRange(transaction->BackingStoreTransaction(), 1430 backing_store_->DeleteRange(transaction->BackingStoreTransaction(),
1432 id(), 1431 id(),
1433 object_store_id, 1432 object_store_id,
1434 *key_range); 1433 *key_range);
1435 if (!s.ok()) { 1434 if (!s.ok()) {
1436 base::string16 error_string = 1435 base::string16 error_string =
1437 ASCIIToUTF16("Internal error deleting data in range"); 1436 ASCIIToUTF16("Internal error deleting data in range");
1438 IndexedDBDatabaseError error(blink::WebIDBDatabaseExceptionUnknownError, 1437 IndexedDBDatabaseError error(blink::WebIDBDatabaseExceptionUnknownError,
1439 error_string); 1438 error_string);
1440 transaction->Abort(error); 1439 transaction->Abort(error);
1441 if (s.IsCorruption()) { 1440 if (s.IsCorruption()) {
1442 factory_->HandleBackingStoreCorruption(backing_store_->origin_url(), 1441 factory_->HandleBackingStoreCorruption(backing_store_->origin_url(),
1443 error); 1442 error);
1444 } 1443 }
1445 return; 1444 return;
1446 } 1445 }
1447 callbacks->OnSuccess(); 1446 callbacks->OnSuccess();
1448 } 1447 }
1449 1448
1450 void IndexedDBDatabase::Clear(int64 transaction_id, 1449 void IndexedDBDatabase::Clear(int64_t transaction_id,
1451 int64 object_store_id, 1450 int64_t object_store_id,
1452 scoped_refptr<IndexedDBCallbacks> callbacks) { 1451 scoped_refptr<IndexedDBCallbacks> callbacks) {
1453 IDB_TRACE1("IndexedDBDatabase::Clear", "txn.id", transaction_id); 1452 IDB_TRACE1("IndexedDBDatabase::Clear", "txn.id", transaction_id);
1454 IndexedDBTransaction* transaction = GetTransaction(transaction_id); 1453 IndexedDBTransaction* transaction = GetTransaction(transaction_id);
1455 if (!transaction) 1454 if (!transaction)
1456 return; 1455 return;
1457 DCHECK_NE(transaction->mode(), blink::WebIDBTransactionModeReadOnly); 1456 DCHECK_NE(transaction->mode(), blink::WebIDBTransactionModeReadOnly);
1458 1457
1459 if (!ValidateObjectStoreId(object_store_id)) 1458 if (!ValidateObjectStoreId(object_store_id))
1460 return; 1459 return;
1461 1460
1462 transaction->ScheduleTask(base::Bind( 1461 transaction->ScheduleTask(base::Bind(
1463 &IndexedDBDatabase::ClearOperation, this, object_store_id, callbacks)); 1462 &IndexedDBDatabase::ClearOperation, this, object_store_id, callbacks));
1464 } 1463 }
1465 1464
1466 void IndexedDBDatabase::ClearOperation( 1465 void IndexedDBDatabase::ClearOperation(
1467 int64 object_store_id, 1466 int64_t object_store_id,
1468 scoped_refptr<IndexedDBCallbacks> callbacks, 1467 scoped_refptr<IndexedDBCallbacks> callbacks,
1469 IndexedDBTransaction* transaction) { 1468 IndexedDBTransaction* transaction) {
1470 IDB_TRACE1("IndexedDBDatabase::ClearOperation", "txn.id", transaction->id()); 1469 IDB_TRACE1("IndexedDBDatabase::ClearOperation", "txn.id", transaction->id());
1471 leveldb::Status s = backing_store_->ClearObjectStore( 1470 leveldb::Status s = backing_store_->ClearObjectStore(
1472 transaction->BackingStoreTransaction(), id(), object_store_id); 1471 transaction->BackingStoreTransaction(), id(), object_store_id);
1473 if (!s.ok()) { 1472 if (!s.ok()) {
1474 IndexedDBDatabaseError error(blink::WebIDBDatabaseExceptionUnknownError, 1473 IndexedDBDatabaseError error(blink::WebIDBDatabaseExceptionUnknownError,
1475 "Internal error clearing object store"); 1474 "Internal error clearing object store");
1476 callbacks->OnError(error); 1475 callbacks->OnError(error);
1477 if (s.IsCorruption()) { 1476 if (s.IsCorruption()) {
1478 factory_->HandleBackingStoreCorruption(backing_store_->origin_url(), 1477 factory_->HandleBackingStoreCorruption(backing_store_->origin_url(),
1479 error); 1478 error);
1480 } 1479 }
1481 return; 1480 return;
1482 } 1481 }
1483 callbacks->OnSuccess(); 1482 callbacks->OnSuccess();
1484 } 1483 }
1485 1484
1486 void IndexedDBDatabase::DeleteObjectStoreOperation( 1485 void IndexedDBDatabase::DeleteObjectStoreOperation(
1487 int64 object_store_id, 1486 int64_t object_store_id,
1488 IndexedDBTransaction* transaction) { 1487 IndexedDBTransaction* transaction) {
1489 IDB_TRACE1("IndexedDBDatabase::DeleteObjectStoreOperation", 1488 IDB_TRACE1("IndexedDBDatabase::DeleteObjectStoreOperation",
1490 "txn.id", 1489 "txn.id",
1491 transaction->id()); 1490 transaction->id());
1492 1491
1493 const IndexedDBObjectStoreMetadata object_store_metadata = 1492 const IndexedDBObjectStoreMetadata object_store_metadata =
1494 metadata_.object_stores[object_store_id]; 1493 metadata_.object_stores[object_store_id];
1495 leveldb::Status s = 1494 leveldb::Status s =
1496 backing_store_->DeleteObjectStore(transaction->BackingStoreTransaction(), 1495 backing_store_->DeleteObjectStore(transaction->BackingStoreTransaction(),
1497 transaction->database()->id(), 1496 transaction->database()->id(),
(...skipping 12 matching lines...) Expand all
1510 } 1509 }
1511 1510
1512 RemoveObjectStore(object_store_id); 1511 RemoveObjectStore(object_store_id);
1513 transaction->ScheduleAbortTask( 1512 transaction->ScheduleAbortTask(
1514 base::Bind(&IndexedDBDatabase::DeleteObjectStoreAbortOperation, 1513 base::Bind(&IndexedDBDatabase::DeleteObjectStoreAbortOperation,
1515 this, 1514 this,
1516 object_store_metadata)); 1515 object_store_metadata));
1517 } 1516 }
1518 1517
1519 void IndexedDBDatabase::VersionChangeOperation( 1518 void IndexedDBDatabase::VersionChangeOperation(
1520 int64 version, 1519 int64_t version,
1521 scoped_refptr<IndexedDBCallbacks> callbacks, 1520 scoped_refptr<IndexedDBCallbacks> callbacks,
1522 scoped_ptr<IndexedDBConnection> connection, 1521 scoped_ptr<IndexedDBConnection> connection,
1523 IndexedDBTransaction* transaction) { 1522 IndexedDBTransaction* transaction) {
1524 IDB_TRACE1( 1523 IDB_TRACE1(
1525 "IndexedDBDatabase::VersionChangeOperation", "txn.id", transaction->id()); 1524 "IndexedDBDatabase::VersionChangeOperation", "txn.id", transaction->id());
1526 int64 old_version = metadata_.int_version; 1525 int64_t old_version = metadata_.int_version;
1527 DCHECK_GT(version, old_version); 1526 DCHECK_GT(version, old_version);
1528 1527
1529 if (!backing_store_->UpdateIDBDatabaseIntVersion( 1528 if (!backing_store_->UpdateIDBDatabaseIntVersion(
1530 transaction->BackingStoreTransaction(), id(), version)) { 1529 transaction->BackingStoreTransaction(), id(), version)) {
1531 IndexedDBDatabaseError error( 1530 IndexedDBDatabaseError error(
1532 blink::WebIDBDatabaseExceptionUnknownError, 1531 blink::WebIDBDatabaseExceptionUnknownError,
1533 ASCIIToUTF16( 1532 ASCIIToUTF16(
1534 "Internal error writing data to stable storage when " 1533 "Internal error writing data to stable storage when "
1535 "updating version.")); 1534 "updating version."));
1536 callbacks->OnError(error); 1535 callbacks->OnError(error);
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
1653 PendingOpenCallList pending_open_calls; 1652 PendingOpenCallList pending_open_calls;
1654 pending_open_calls_.swap(pending_open_calls); 1653 pending_open_calls_.swap(pending_open_calls);
1655 while (!pending_open_calls.empty()) { 1654 while (!pending_open_calls.empty()) {
1656 OpenConnection(pending_open_calls.front()); 1655 OpenConnection(pending_open_calls.front());
1657 pending_open_calls.pop_front(); 1656 pending_open_calls.pop_front();
1658 } 1657 }
1659 } 1658 }
1660 } 1659 }
1661 1660
1662 void IndexedDBDatabase::CreateTransaction( 1661 void IndexedDBDatabase::CreateTransaction(
1663 int64 transaction_id, 1662 int64_t transaction_id,
1664 IndexedDBConnection* connection, 1663 IndexedDBConnection* connection,
1665 const std::vector<int64>& object_store_ids, 1664 const std::vector<int64_t>& object_store_ids,
1666 blink::WebIDBTransactionMode mode) { 1665 blink::WebIDBTransactionMode mode) {
1667 IDB_TRACE1("IndexedDBDatabase::CreateTransaction", "txn.id", transaction_id); 1666 IDB_TRACE1("IndexedDBDatabase::CreateTransaction", "txn.id", transaction_id);
1668 DCHECK(connections_.count(connection)); 1667 DCHECK(connections_.count(connection));
1669 DCHECK(transactions_.find(transaction_id) == transactions_.end()); 1668 DCHECK(transactions_.find(transaction_id) == transactions_.end());
1670 if (transactions_.find(transaction_id) != transactions_.end()) 1669 if (transactions_.find(transaction_id) != transactions_.end())
1671 return; 1670 return;
1672 1671
1673 UMA_HISTOGRAM_COUNTS_1000( 1672 UMA_HISTOGRAM_COUNTS_1000(
1674 "WebCore.IndexedDB.Database.OutstandingTransactionCount", 1673 "WebCore.IndexedDB.Database.OutstandingTransactionCount",
1675 transactions_.size()); 1674 transactions_.size());
1676 1675
1677 // Throttle transaction creation so that a renderer in a tight loop can't 1676 // Throttle transaction creation so that a renderer in a tight loop can't
1678 // cause browser memory to grow unbounded by creating transactions faster 1677 // cause browser memory to grow unbounded by creating transactions faster
1679 // than they can be processed. 1678 // than they can be processed.
1680 const size_t kMaxTransactionCount = 256; 1679 const size_t kMaxTransactionCount = 256;
1681 if (transactions_.size() >= kMaxTransactionCount) { 1680 if (transactions_.size() >= kMaxTransactionCount) {
1682 connection->callbacks()->OnAbort( 1681 connection->callbacks()->OnAbort(
1683 transaction_id, IndexedDBDatabaseError( 1682 transaction_id, IndexedDBDatabaseError(
1684 blink::WebIDBDatabaseExceptionUnknownError, 1683 blink::WebIDBDatabaseExceptionUnknownError,
1685 "Internal error: Too many transactions queued.")); 1684 "Internal error: Too many transactions queued."));
1686 return; 1685 return;
1687 } 1686 }
1688 1687
1689 // The transaction will add itself to this database's coordinator, which 1688 // The transaction will add itself to this database's coordinator, which
1690 // manages the lifetime of the object. 1689 // manages the lifetime of the object.
1691 TransactionCreated(IndexedDBClassFactory::Get()->CreateIndexedDBTransaction( 1690 TransactionCreated(IndexedDBClassFactory::Get()->CreateIndexedDBTransaction(
1692 transaction_id, connection->callbacks(), 1691 transaction_id, connection->callbacks(),
1693 std::set<int64>(object_store_ids.begin(), object_store_ids.end()), mode, 1692 std::set<int64_t>(object_store_ids.begin(), object_store_ids.end()), mode,
1694 this, new IndexedDBBackingStore::Transaction(backing_store_.get()))); 1693 this, new IndexedDBBackingStore::Transaction(backing_store_.get())));
1695 } 1694 }
1696 1695
1697 void IndexedDBDatabase::TransactionCreated(IndexedDBTransaction* transaction) { 1696 void IndexedDBDatabase::TransactionCreated(IndexedDBTransaction* transaction) {
1698 transactions_[transaction->id()] = transaction; 1697 transactions_[transaction->id()] = transaction;
1699 } 1698 }
1700 1699
1701 bool IndexedDBDatabase::IsOpenConnectionBlocked() const { 1700 bool IndexedDBDatabase::IsOpenConnectionBlocked() const {
1702 return !pending_delete_calls_.empty() || 1701 return !pending_delete_calls_.empty() ||
1703 transaction_coordinator_.IsRunningVersionChangeTransaction() || 1702 transaction_coordinator_.IsRunningVersionChangeTransaction() ||
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
1753 // TODO(jsbell): DCHECK that not in unit tests. 1752 // TODO(jsbell): DCHECK that not in unit tests.
1754 DCHECK(is_new_database); 1753 DCHECK(is_new_database);
1755 connection.callbacks->OnSuccess( 1754 connection.callbacks->OnSuccess(
1756 CreateConnection(connection.database_callbacks, 1755 CreateConnection(connection.database_callbacks,
1757 connection.child_process_id), 1756 connection.child_process_id),
1758 this->metadata()); 1757 this->metadata());
1759 return; 1758 return;
1760 } 1759 }
1761 1760
1762 // We may need to change the version. 1761 // We may need to change the version.
1763 int64 local_version = connection.version; 1762 int64_t local_version = connection.version;
1764 if (local_version == IndexedDBDatabaseMetadata::NO_INT_VERSION) { 1763 if (local_version == IndexedDBDatabaseMetadata::NO_INT_VERSION) {
1765 if (!is_new_database) { 1764 if (!is_new_database) {
1766 connection.callbacks->OnSuccess( 1765 connection.callbacks->OnSuccess(
1767 CreateConnection(connection.database_callbacks, 1766 CreateConnection(connection.database_callbacks,
1768 connection.child_process_id), 1767 connection.child_process_id),
1769 this->metadata()); 1768 this->metadata());
1770 return; 1769 return;
1771 } 1770 }
1772 // Spec says: If no version is specified and no database exists, set 1771 // Spec says: If no version is specified and no database exists, set
1773 // database version to 1. 1772 // database version to 1.
(...skipping 20 matching lines...) Expand all
1794 DCHECK_EQ(local_version, metadata_.int_version); 1793 DCHECK_EQ(local_version, metadata_.int_version);
1795 connection.callbacks->OnSuccess( 1794 connection.callbacks->OnSuccess(
1796 CreateConnection(connection.database_callbacks, 1795 CreateConnection(connection.database_callbacks,
1797 connection.child_process_id), 1796 connection.child_process_id),
1798 this->metadata()); 1797 this->metadata());
1799 } 1798 }
1800 1799
1801 void IndexedDBDatabase::RunVersionChangeTransaction( 1800 void IndexedDBDatabase::RunVersionChangeTransaction(
1802 scoped_refptr<IndexedDBCallbacks> callbacks, 1801 scoped_refptr<IndexedDBCallbacks> callbacks,
1803 scoped_ptr<IndexedDBConnection> connection, 1802 scoped_ptr<IndexedDBConnection> connection,
1804 int64 transaction_id, 1803 int64_t transaction_id,
1805 int64 requested_version) { 1804 int64_t requested_version) {
1806 DCHECK(callbacks.get()); 1805 DCHECK(callbacks.get());
1807 DCHECK(connections_.count(connection.get())); 1806 DCHECK(connections_.count(connection.get()));
1808 if (ConnectionCount() > 1) { 1807 if (ConnectionCount() > 1) {
1809 DCHECK_NE(blink::WebIDBDataLossTotal, callbacks->data_loss()); 1808 DCHECK_NE(blink::WebIDBDataLossTotal, callbacks->data_loss());
1810 // Front end ensures the event is not fired at connections that have 1809 // Front end ensures the event is not fired at connections that have
1811 // close_pending set. 1810 // close_pending set.
1812 for (const auto* iter : connections_) { 1811 for (const auto* iter : connections_) {
1813 if (iter != connection.get()) { 1812 if (iter != connection.get()) {
1814 iter->callbacks()->OnVersionChange(metadata_.int_version, 1813 iter->callbacks()->OnVersionChange(metadata_.int_version,
1815 requested_version); 1814 requested_version);
1816 } 1815 }
1817 } 1816 }
1818 // OnBlocked will be fired at the request when one of the other 1817 // OnBlocked will be fired at the request when one of the other
1819 // connections acks that the OnVersionChange was ignored. 1818 // connections acks that the OnVersionChange was ignored.
1820 1819
1821 DCHECK(!pending_run_version_change_transaction_call_); 1820 DCHECK(!pending_run_version_change_transaction_call_);
1822 pending_run_version_change_transaction_call_.reset(new PendingUpgradeCall( 1821 pending_run_version_change_transaction_call_.reset(new PendingUpgradeCall(
1823 callbacks, connection.Pass(), transaction_id, requested_version)); 1822 callbacks, connection.Pass(), transaction_id, requested_version));
1824 return; 1823 return;
1825 } 1824 }
1826 RunVersionChangeTransactionFinal( 1825 RunVersionChangeTransactionFinal(
1827 callbacks, connection.Pass(), transaction_id, requested_version); 1826 callbacks, connection.Pass(), transaction_id, requested_version);
1828 } 1827 }
1829 1828
1830 void IndexedDBDatabase::RunVersionChangeTransactionFinal( 1829 void IndexedDBDatabase::RunVersionChangeTransactionFinal(
1831 scoped_refptr<IndexedDBCallbacks> callbacks, 1830 scoped_refptr<IndexedDBCallbacks> callbacks,
1832 scoped_ptr<IndexedDBConnection> connection, 1831 scoped_ptr<IndexedDBConnection> connection,
1833 int64 transaction_id, 1832 int64_t transaction_id,
1834 int64 requested_version) { 1833 int64_t requested_version) {
1835 1834 std::vector<int64_t> object_store_ids;
1836 std::vector<int64> object_store_ids;
1837 CreateTransaction(transaction_id, 1835 CreateTransaction(transaction_id,
1838 connection.get(), 1836 connection.get(),
1839 object_store_ids, 1837 object_store_ids,
1840 blink::WebIDBTransactionModeVersionChange); 1838 blink::WebIDBTransactionModeVersionChange);
1841 1839
1842 transactions_[transaction_id]->ScheduleTask( 1840 transactions_[transaction_id]->ScheduleTask(
1843 base::Bind(&IndexedDBDatabase::VersionChangeOperation, 1841 base::Bind(&IndexedDBDatabase::VersionChangeOperation,
1844 this, 1842 this,
1845 requested_version, 1843 requested_version,
1846 callbacks, 1844 callbacks,
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1880 IndexedDBDatabaseError error(blink::WebIDBDatabaseExceptionUnknownError, 1878 IndexedDBDatabaseError error(blink::WebIDBDatabaseExceptionUnknownError,
1881 "Internal error deleting database."); 1879 "Internal error deleting database.");
1882 callbacks->OnError(error); 1880 callbacks->OnError(error);
1883 if (s.IsCorruption()) { 1881 if (s.IsCorruption()) {
1884 GURL origin_url = backing_store_->origin_url(); 1882 GURL origin_url = backing_store_->origin_url();
1885 backing_store_ = NULL; 1883 backing_store_ = NULL;
1886 factory_->HandleBackingStoreCorruption(origin_url, error); 1884 factory_->HandleBackingStoreCorruption(origin_url, error);
1887 } 1885 }
1888 return; 1886 return;
1889 } 1887 }
1890 int64 old_version = metadata_.int_version; 1888 int64_t old_version = metadata_.int_version;
1891 metadata_.version = kNoStringVersion; 1889 metadata_.version = kNoStringVersion;
1892 metadata_.id = kInvalidId; 1890 metadata_.id = kInvalidId;
1893 metadata_.int_version = IndexedDBDatabaseMetadata::NO_INT_VERSION; 1891 metadata_.int_version = IndexedDBDatabaseMetadata::NO_INT_VERSION;
1894 metadata_.object_stores.clear(); 1892 metadata_.object_stores.clear();
1895 callbacks->OnSuccess(old_version); 1893 callbacks->OnSuccess(old_version);
1896 factory_->DatabaseDeleted(identifier_); 1894 factory_->DatabaseDeleted(identifier_);
1897 } 1895 }
1898 1896
1899 void IndexedDBDatabase::ForceClose() { 1897 void IndexedDBDatabase::ForceClose() {
1900 // IndexedDBConnection::ForceClose() may delete this database, so hold ref. 1898 // IndexedDBConnection::ForceClose() may delete this database, so hold ref.
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
1956 DCHECK(transactions_.empty()); 1954 DCHECK(transactions_.empty());
1957 1955
1958 const GURL origin_url = backing_store_->origin_url(); 1956 const GURL origin_url = backing_store_->origin_url();
1959 backing_store_ = NULL; 1957 backing_store_ = NULL;
1960 1958
1961 factory_->ReleaseDatabase(identifier_, forced); 1959 factory_->ReleaseDatabase(identifier_, forced);
1962 } 1960 }
1963 } 1961 }
1964 1962
1965 void IndexedDBDatabase::CreateObjectStoreAbortOperation( 1963 void IndexedDBDatabase::CreateObjectStoreAbortOperation(
1966 int64 object_store_id, 1964 int64_t object_store_id,
1967 IndexedDBTransaction* transaction) { 1965 IndexedDBTransaction* transaction) {
1968 DCHECK(!transaction); 1966 DCHECK(!transaction);
1969 IDB_TRACE("IndexedDBDatabase::CreateObjectStoreAbortOperation"); 1967 IDB_TRACE("IndexedDBDatabase::CreateObjectStoreAbortOperation");
1970 RemoveObjectStore(object_store_id); 1968 RemoveObjectStore(object_store_id);
1971 } 1969 }
1972 1970
1973 void IndexedDBDatabase::DeleteObjectStoreAbortOperation( 1971 void IndexedDBDatabase::DeleteObjectStoreAbortOperation(
1974 const IndexedDBObjectStoreMetadata& object_store_metadata, 1972 const IndexedDBObjectStoreMetadata& object_store_metadata,
1975 IndexedDBTransaction* transaction) { 1973 IndexedDBTransaction* transaction) {
1976 DCHECK(!transaction); 1974 DCHECK(!transaction);
1977 IDB_TRACE("IndexedDBDatabase::DeleteObjectStoreAbortOperation"); 1975 IDB_TRACE("IndexedDBDatabase::DeleteObjectStoreAbortOperation");
1978 AddObjectStore(object_store_metadata, 1976 AddObjectStore(object_store_metadata,
1979 IndexedDBObjectStoreMetadata::kInvalidId); 1977 IndexedDBObjectStoreMetadata::kInvalidId);
1980 } 1978 }
1981 1979
1982 void IndexedDBDatabase::VersionChangeAbortOperation( 1980 void IndexedDBDatabase::VersionChangeAbortOperation(
1983 const base::string16& previous_version, 1981 const base::string16& previous_version,
1984 int64 previous_int_version, 1982 int64_t previous_int_version,
1985 IndexedDBTransaction* transaction) { 1983 IndexedDBTransaction* transaction) {
1986 DCHECK(!transaction); 1984 DCHECK(!transaction);
1987 IDB_TRACE("IndexedDBDatabase::VersionChangeAbortOperation"); 1985 IDB_TRACE("IndexedDBDatabase::VersionChangeAbortOperation");
1988 metadata_.version = previous_version; 1986 metadata_.version = previous_version;
1989 metadata_.int_version = previous_int_version; 1987 metadata_.int_version = previous_int_version;
1990 } 1988 }
1991 1989
1992 } // namespace content 1990 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/indexed_db/indexed_db_database.h ('k') | content/browser/indexed_db/indexed_db_database_callbacks.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698