Index: extensions/browser/content_hash_reader.cc |
diff --git a/extensions/browser/content_hash_reader.cc b/extensions/browser/content_hash_reader.cc |
index 06c8ef0ab791916f005085c9e5bc78886f7ff933..467fc3fa914d655f1a93745388bbe6e967e1e8a0 100644 |
--- a/extensions/browser/content_hash_reader.cc |
+++ b/extensions/browser/content_hash_reader.cc |
@@ -33,6 +33,8 @@ ContentHashReader::ContentHashReader(const std::string& extension_id, |
relative_path_(relative_path), |
key_(key), |
status_(NOT_INITIALIZED), |
+ have_verified_contents_(false), |
+ have_computed_hashes_(false), |
block_size_(0) { |
} |
@@ -52,10 +54,10 @@ bool ContentHashReader::Init() { |
if (!verified_contents_->InitFrom(verified_contents_path, false) || |
!verified_contents_->valid_signature() || |
!verified_contents_->version().Equals(extension_version_) || |
- verified_contents_->extension_id() != extension_id_) { |
- base::DeleteFile(verified_contents_path, false /* recursive */); |
+ verified_contents_->extension_id() != extension_id_) |
return false; |
- } |
+ |
+ have_verified_contents_ = true; |
base::FilePath computed_hashes_path = |
file_util::GetComputedHashesPath(extension_root_); |
@@ -63,21 +65,24 @@ bool ContentHashReader::Init() { |
return false; |
ComputedHashes::Reader reader; |
- if (!reader.InitFromFile(computed_hashes_path) || |
- !reader.GetHashes(relative_path_, &block_size_, &hashes_) || |
- block_size_ % crypto::kSHA256Length != 0) { |
- base::DeleteFile(computed_hashes_path, false /* recursive */); |
+ if (!reader.InitFromFile(computed_hashes_path)) |
+ return false; |
+ |
+ have_computed_hashes_ = true; |
+ |
+ if (!reader.GetHashes(relative_path_, &block_size_, &hashes_) || |
+ block_size_ % crypto::kSHA256Length != 0) |
+ return false; |
+ |
+ const std::string* expected_root = |
+ verified_contents_->GetTreeHashRoot(relative_path_); |
+ if (!expected_root) |
return false; |
- } |
std::string root = |
ComputeTreeHashRoot(hashes_, block_size_ / crypto::kSHA256Length); |
- const std::string* expected_root = NULL; |
- expected_root = verified_contents_->GetTreeHashRoot(relative_path_); |
- if (expected_root && *expected_root != root) { |
- base::DeleteFile(computed_hashes_path, false /* recursive */); |
+ if (*expected_root != root) |
return false; |
- } |
status_ = SUCCESS; |
return true; |