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

Side by Side Diff: content/browser/indexed_db/leveldb/leveldb_database.cc

Issue 237143006: Make iterating over a corrupted IndexedDB fail. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added Status checks. Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (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/leveldb/leveldb_database.h" 5 #include "content/browser/indexed_db/leveldb/leveldb_database.h"
6 6
7 #include <cerrno> 7 #include <cerrno>
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/files/file.h" 10 #include "base/files/file.h"
(...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after
371 } 371 }
372 return s; 372 return s;
373 } 373 }
374 374
375 namespace { 375 namespace {
376 class IteratorImpl : public LevelDBIterator { 376 class IteratorImpl : public LevelDBIterator {
377 public: 377 public:
378 virtual ~IteratorImpl() {} 378 virtual ~IteratorImpl() {}
379 379
380 virtual bool IsValid() const OVERRIDE; 380 virtual bool IsValid() const OVERRIDE;
381 virtual void SeekToLast() OVERRIDE; 381 virtual leveldb::Status SeekToLast() OVERRIDE;
382 virtual void Seek(const StringPiece& target) OVERRIDE; 382 virtual leveldb::Status Seek(const StringPiece& target) OVERRIDE;
383 virtual void Next() OVERRIDE; 383 virtual leveldb::Status Next() OVERRIDE;
384 virtual void Prev() OVERRIDE; 384 virtual leveldb::Status Prev() OVERRIDE;
385 virtual StringPiece Key() const OVERRIDE; 385 virtual StringPiece Key() const OVERRIDE;
386 virtual StringPiece Value() const OVERRIDE; 386 virtual StringPiece Value() const OVERRIDE;
387 387
388 private: 388 private:
389 friend class content::LevelDBDatabase; 389 friend class content::LevelDBDatabase;
390 explicit IteratorImpl(scoped_ptr<leveldb::Iterator> iterator); 390 explicit IteratorImpl(scoped_ptr<leveldb::Iterator> iterator);
391 void CheckStatus(); 391 void CheckStatus();
392 392
393 scoped_ptr<leveldb::Iterator> iterator_; 393 scoped_ptr<leveldb::Iterator> iterator_;
394 }; 394 };
395 } 395 }
396 396
397 IteratorImpl::IteratorImpl(scoped_ptr<leveldb::Iterator> it) 397 IteratorImpl::IteratorImpl(scoped_ptr<leveldb::Iterator> it)
398 : iterator_(it.Pass()) {} 398 : iterator_(it.Pass()) {}
399 399
400 void IteratorImpl::CheckStatus() { 400 void IteratorImpl::CheckStatus() {
401 const leveldb::Status s = iterator_->status(); 401 const leveldb::Status& s = iterator_->status();
402 if (!s.ok()) 402 if (!s.ok())
403 LOG(ERROR) << "LevelDB iterator error: " << s.ToString(); 403 LOG(ERROR) << "LevelDB iterator error: " << s.ToString();
404 } 404 }
405 405
406 bool IteratorImpl::IsValid() const { return iterator_->Valid(); } 406 bool IteratorImpl::IsValid() const { return iterator_->Valid(); }
407 407
408 void IteratorImpl::SeekToLast() { 408 leveldb::Status IteratorImpl::SeekToLast() {
409 iterator_->SeekToLast(); 409 iterator_->SeekToLast();
410 CheckStatus(); 410 CheckStatus();
411 return iterator_->status();
411 } 412 }
412 413
413 void IteratorImpl::Seek(const StringPiece& target) { 414 leveldb::Status IteratorImpl::Seek(const StringPiece& target) {
414 iterator_->Seek(MakeSlice(target)); 415 iterator_->Seek(MakeSlice(target));
415 CheckStatus(); 416 CheckStatus();
417 return iterator_->status();
416 } 418 }
417 419
418 void IteratorImpl::Next() { 420 leveldb::Status IteratorImpl::Next() {
419 DCHECK(IsValid()); 421 DCHECK(IsValid());
420 iterator_->Next(); 422 iterator_->Next();
421 CheckStatus(); 423 CheckStatus();
424 return iterator_->status();
422 } 425 }
423 426
424 void IteratorImpl::Prev() { 427 leveldb::Status IteratorImpl::Prev() {
425 DCHECK(IsValid()); 428 DCHECK(IsValid());
426 iterator_->Prev(); 429 iterator_->Prev();
427 CheckStatus(); 430 CheckStatus();
431 return iterator_->status();
428 } 432 }
429 433
430 StringPiece IteratorImpl::Key() const { 434 StringPiece IteratorImpl::Key() const {
431 DCHECK(IsValid()); 435 DCHECK(IsValid());
432 return MakeStringPiece(iterator_->key()); 436 return MakeStringPiece(iterator_->key());
433 } 437 }
434 438
435 StringPiece IteratorImpl::Value() const { 439 StringPiece IteratorImpl::Value() const {
436 DCHECK(IsValid()); 440 DCHECK(IsValid());
437 return MakeStringPiece(iterator_->value()); 441 return MakeStringPiece(iterator_->value());
(...skipping 17 matching lines...) Expand all
455 void LevelDBDatabase::Compact(const base::StringPiece& start, 459 void LevelDBDatabase::Compact(const base::StringPiece& start,
456 const base::StringPiece& stop) { 460 const base::StringPiece& stop) {
457 const leveldb::Slice start_slice = MakeSlice(start); 461 const leveldb::Slice start_slice = MakeSlice(start);
458 const leveldb::Slice stop_slice = MakeSlice(stop); 462 const leveldb::Slice stop_slice = MakeSlice(stop);
459 db_->CompactRange(&start_slice, &stop_slice); 463 db_->CompactRange(&start_slice, &stop_slice);
460 } 464 }
461 465
462 void LevelDBDatabase::CompactAll() { db_->CompactRange(NULL, NULL); } 466 void LevelDBDatabase::CompactAll() { db_->CompactRange(NULL, NULL); }
463 467
464 } // namespace content 468 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698