| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "chrome/browser/extensions/updater/local_extension_cache.h" | 5 #include "chrome/browser/extensions/updater/local_extension_cache.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/files/file_enumerator.h" | 8 #include "base/files/file_enumerator.h" |
| 9 #include "base/files/file_util.h" | 9 #include "base/files/file_util.h" |
| 10 #include "base/sequenced_task_runner.h" | 10 #include "base/sequenced_task_runner.h" |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 126 return false; | 126 return false; |
| 127 | 127 |
| 128 return (!expected_hash.empty() && it->second.expected_hash.empty()); | 128 return (!expected_hash.empty() && it->second.expected_hash.empty()); |
| 129 } | 129 } |
| 130 | 130 |
| 131 // static | 131 // static |
| 132 bool LocalExtensionCache::NewerOrSame(const CacheMap::iterator& entry, | 132 bool LocalExtensionCache::NewerOrSame(const CacheMap::iterator& entry, |
| 133 const std::string& version, | 133 const std::string& version, |
| 134 const std::string& expected_hash, | 134 const std::string& expected_hash, |
| 135 int* compare) { | 135 int* compare) { |
| 136 Version new_version(version); | 136 base::Version new_version(version); |
| 137 Version prev_version(entry->second.version); | 137 base::Version prev_version(entry->second.version); |
| 138 int cmp = new_version.CompareTo(prev_version); | 138 int cmp = new_version.CompareTo(prev_version); |
| 139 | 139 |
| 140 if (compare) | 140 if (compare) |
| 141 *compare = cmp; | 141 *compare = cmp; |
| 142 | 142 |
| 143 // Cache entry is newer if its version is greater or same, and in the latter | 143 // Cache entry is newer if its version is greater or same, and in the latter |
| 144 // case we will prefer the existing one if we are trying to add an | 144 // case we will prefer the existing one if we are trying to add an |
| 145 // unhashed file, or we already have a hashed file in cache. | 145 // unhashed file, or we already have a hashed file in cache. |
| 146 return (cmp < 0 || (cmp == 0 && (expected_hash.empty() || | 146 return (cmp < 0 || (cmp == 0 && (expected_hash.empty() || |
| 147 !entry->second.expected_hash.empty()))); | 147 !entry->second.expected_hash.empty()))); |
| 148 } | 148 } |
| 149 | 149 |
| 150 void LocalExtensionCache::PutExtension(const std::string& id, | 150 void LocalExtensionCache::PutExtension(const std::string& id, |
| 151 const std::string& expected_hash, | 151 const std::string& expected_hash, |
| 152 const base::FilePath& file_path, | 152 const base::FilePath& file_path, |
| 153 const std::string& version, | 153 const std::string& version, |
| 154 const PutExtensionCallback& callback) { | 154 const PutExtensionCallback& callback) { |
| 155 if (state_ != kReady) { | 155 if (state_ != kReady) { |
| 156 callback.Run(file_path, true); | 156 callback.Run(file_path, true); |
| 157 return; | 157 return; |
| 158 } | 158 } |
| 159 | 159 |
| 160 Version version_validator(version); | 160 base::Version version_validator(version); |
| 161 if (!version_validator.IsValid()) { | 161 if (!version_validator.IsValid()) { |
| 162 LOG(ERROR) << "Extension " << id << " has bad version " << version; | 162 LOG(ERROR) << "Extension " << id << " has bad version " << version; |
| 163 callback.Run(file_path, true); | 163 callback.Run(file_path, true); |
| 164 return; | 164 return; |
| 165 } | 165 } |
| 166 | 166 |
| 167 CacheMap::iterator it = FindExtension(cached_extensions_, id, expected_hash); | 167 CacheMap::iterator it = FindExtension(cached_extensions_, id, expected_hash); |
| 168 if (it != cached_extensions_.end() && | 168 if (it != cached_extensions_.end() && |
| 169 NewerOrSame(it, version, expected_hash, NULL)) { | 169 NewerOrSame(it, version, expected_hash, NULL)) { |
| 170 LOG(WARNING) << "Cache contains newer or the same version " | 170 LOG(WARNING) << "Cache contains newer or the same version " |
| (...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 436 } | 436 } |
| 437 } | 437 } |
| 438 | 438 |
| 439 // Enforce a lower-case id. | 439 // Enforce a lower-case id. |
| 440 id = base::ToLowerASCII(id); | 440 id = base::ToLowerASCII(id); |
| 441 if (!crx_file::id_util::IdIsValid(id)) { | 441 if (!crx_file::id_util::IdIsValid(id)) { |
| 442 LOG(ERROR) << "Bad extension id in cache: " << id; | 442 LOG(ERROR) << "Bad extension id in cache: " << id; |
| 443 id.clear(); | 443 id.clear(); |
| 444 } | 444 } |
| 445 | 445 |
| 446 if (!Version(version).IsValid()) { | 446 if (!base::Version(version).IsValid()) { |
| 447 LOG(ERROR) << "Bad extension version in cache: " << version; | 447 LOG(ERROR) << "Bad extension version in cache: " << version; |
| 448 version.clear(); | 448 version.clear(); |
| 449 } | 449 } |
| 450 | 450 |
| 451 if (id.empty() || version.empty()) { | 451 if (id.empty() || version.empty()) { |
| 452 LOG(ERROR) << "Invalid file in cache, erasing: " << basename; | 452 LOG(ERROR) << "Invalid file in cache, erasing: " << basename; |
| 453 base::DeleteFile(path, true /* recursive */); | 453 base::DeleteFile(path, true /* recursive */); |
| 454 continue; | 454 continue; |
| 455 } | 455 } |
| 456 | 456 |
| (...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 615 expected_hash(base::ToLowerASCII(expected_hash)), | 615 expected_hash(base::ToLowerASCII(expected_hash)), |
| 616 last_used(last_used), | 616 last_used(last_used), |
| 617 size(size), | 617 size(size), |
| 618 file_path(file_path) { | 618 file_path(file_path) { |
| 619 } | 619 } |
| 620 | 620 |
| 621 LocalExtensionCache::CacheItemInfo::~CacheItemInfo() { | 621 LocalExtensionCache::CacheItemInfo::~CacheItemInfo() { |
| 622 } | 622 } |
| 623 | 623 |
| 624 } // namespace extensions | 624 } // namespace extensions |
| OLD | NEW |