| 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;
|
|
|