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

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

Issue 565023002: IndexedDB: Switched two Iterator::Seek calls to Transaction::Get. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_backing_store.h" 5 #include "content/browser/indexed_db/indexed_db_backing_store.h"
6 6
7 #include "base/file_util.h" 7 #include "base/file_util.h"
8 #include "base/files/file_path.h" 8 #include "base/files/file_path.h"
9 #include "base/format_macros.h" 9 #include "base/format_macros.h"
10 #include "base/json/json_reader.h" 10 #include "base/json/json_reader.h"
(...skipping 2660 matching lines...) Expand 10 before | Expand all | Expand 10 after
2671 return leveldb::Status::OK(); 2671 return leveldb::Status::OK();
2672 } 2672 }
2673 2673
2674 BlobEntryKey blob_entry_key; 2674 BlobEntryKey blob_entry_key;
2675 StringPiece leveldb_key_piece(object_store_data_key); 2675 StringPiece leveldb_key_piece(object_store_data_key);
2676 if (!BlobEntryKey::FromObjectStoreDataKey(&leveldb_key_piece, 2676 if (!BlobEntryKey::FromObjectStoreDataKey(&leveldb_key_piece,
2677 &blob_entry_key)) { 2677 &blob_entry_key)) {
2678 NOTREACHED(); 2678 NOTREACHED();
2679 return InternalInconsistencyStatus(); 2679 return InternalInconsistencyStatus();
2680 } 2680 }
2681 scoped_ptr<LevelDBIterator> it = transaction()->CreateIterator();
2682 std::string encoded_key = blob_entry_key.Encode(); 2681 std::string encoded_key = blob_entry_key.Encode();
2683 leveldb::Status s = it->Seek(encoded_key); 2682 bool found;
2683 std::string encoded_value;
2684 leveldb::Status s = transaction()->Get(encoded_key, &encoded_value, &found);
2684 if (!s.ok()) 2685 if (!s.ok())
2685 return s; 2686 return s;
2686 if (it->IsValid() && CompareKeys(it->Key(), encoded_key) == 0) { 2687 if (found) {
2687 if (!DecodeBlobData(it->Value().as_string(), &value->blob_info)) { 2688 if (!DecodeBlobData(encoded_value, &value->blob_info)) {
2688 INTERNAL_READ_ERROR(GET_BLOB_INFO_FOR_RECORD); 2689 INTERNAL_READ_ERROR(GET_BLOB_INFO_FOR_RECORD);
2689 return InternalInconsistencyStatus(); 2690 return InternalInconsistencyStatus();
2690 } 2691 }
2691 std::vector<IndexedDBBlobInfo>::iterator iter; 2692 std::vector<IndexedDBBlobInfo>::iterator iter;
2692 for (iter = value->blob_info.begin(); iter != value->blob_info.end(); 2693 for (iter = value->blob_info.begin(); iter != value->blob_info.end();
2693 ++iter) { 2694 ++iter) {
2694 iter->set_file_path( 2695 iter->set_file_path(
2695 backing_store_->GetBlobFileName(database_id, iter->key())); 2696 backing_store_->GetBlobFileName(database_id, iter->key()));
2696 iter->set_mark_used_callback( 2697 iter->set_mark_used_callback(
2697 backing_store_->active_blob_registry()->GetAddBlobRefCallback( 2698 backing_store_->active_blob_registry()->GetAddBlobRefCallback(
(...skipping 1276 matching lines...) Expand 10 before | Expand all | Expand 10 after
3974 } 3975 }
3975 3976
3976 bool IndexedDBBackingStore::Transaction::CollectBlobFilesToRemove() { 3977 bool IndexedDBBackingStore::Transaction::CollectBlobFilesToRemove() {
3977 if (backing_store_->is_incognito()) 3978 if (backing_store_->is_incognito())
3978 return true; 3979 return true;
3979 3980
3980 BlobChangeMap::const_iterator iter = blob_change_map_.begin(); 3981 BlobChangeMap::const_iterator iter = blob_change_map_.begin();
3981 // Look up all old files to remove as part of the transaction, store their 3982 // Look up all old files to remove as part of the transaction, store their
3982 // names in blobs_to_remove_, and remove their old blob data entries. 3983 // names in blobs_to_remove_, and remove their old blob data entries.
3983 if (iter != blob_change_map_.end()) { 3984 if (iter != blob_change_map_.end()) {
3984 scoped_ptr<LevelDBIterator> db_iter = transaction_->CreateIterator();
3985 for (; iter != blob_change_map_.end(); ++iter) { 3985 for (; iter != blob_change_map_.end(); ++iter) {
3986 BlobEntryKey blob_entry_key; 3986 BlobEntryKey blob_entry_key;
3987 StringPiece key_piece(iter->second->key()); 3987 StringPiece key_piece(iter->second->key());
3988 if (!BlobEntryKey::FromObjectStoreDataKey(&key_piece, &blob_entry_key)) { 3988 if (!BlobEntryKey::FromObjectStoreDataKey(&key_piece, &blob_entry_key)) {
3989 NOTREACHED(); 3989 NOTREACHED();
3990 INTERNAL_WRITE_ERROR_UNTESTED(TRANSACTION_COMMIT_METHOD); 3990 INTERNAL_WRITE_ERROR_UNTESTED(TRANSACTION_COMMIT_METHOD);
3991 transaction_ = NULL; 3991 transaction_ = NULL;
3992 return false; 3992 return false;
3993 } 3993 }
3994 if (database_id_ < 0) 3994 if (database_id_ < 0)
3995 database_id_ = blob_entry_key.database_id(); 3995 database_id_ = blob_entry_key.database_id();
3996 else 3996 else
3997 DCHECK_EQ(database_id_, blob_entry_key.database_id()); 3997 DCHECK_EQ(database_id_, blob_entry_key.database_id());
3998 std::string blob_entry_key_bytes = blob_entry_key.Encode(); 3998 std::string blob_entry_key_bytes = blob_entry_key.Encode();
3999 db_iter->Seek(blob_entry_key_bytes); 3999 bool found;
4000 if (db_iter->IsValid() && 4000 std::string blob_entry_value_bytes;
4001 !CompareKeys(db_iter->Key(), blob_entry_key_bytes)) { 4001 leveldb::Status s = transaction_->Get(
4002 blob_entry_key_bytes, &blob_entry_value_bytes, &found);
4003 if (s.ok() && found) {
4002 std::vector<IndexedDBBlobInfo> blob_info; 4004 std::vector<IndexedDBBlobInfo> blob_info;
4003 if (!DecodeBlobData(db_iter->Value().as_string(), &blob_info)) { 4005 if (!DecodeBlobData(blob_entry_value_bytes, &blob_info)) {
4004 INTERNAL_READ_ERROR_UNTESTED(TRANSACTION_COMMIT_METHOD); 4006 INTERNAL_READ_ERROR_UNTESTED(TRANSACTION_COMMIT_METHOD);
4005 transaction_ = NULL; 4007 transaction_ = NULL;
4006 return false; 4008 return false;
4007 } 4009 }
4008 std::vector<IndexedDBBlobInfo>::iterator blob_info_iter; 4010 std::vector<IndexedDBBlobInfo>::iterator blob_info_iter;
4009 for (blob_info_iter = blob_info.begin(); 4011 for (blob_info_iter = blob_info.begin();
4010 blob_info_iter != blob_info.end(); 4012 blob_info_iter != blob_info.end();
4011 ++blob_info_iter) 4013 ++blob_info_iter)
4012 blobs_to_remove_.push_back( 4014 blobs_to_remove_.push_back(
4013 std::make_pair(database_id_, blob_info_iter->key())); 4015 std::make_pair(database_id_, blob_info_iter->key()));
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after
4294 int64_t size, 4296 int64_t size,
4295 base::Time last_modified) 4297 base::Time last_modified)
4296 : is_file_(true), 4298 : is_file_(true),
4297 file_path_(file_path), 4299 file_path_(file_path),
4298 key_(key), 4300 key_(key),
4299 size_(size), 4301 size_(size),
4300 last_modified_(last_modified) { 4302 last_modified_(last_modified) {
4301 } 4303 }
4302 4304
4303 } // namespace content 4305 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698