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

Unified Diff: trunk/src/chrome/browser/component_updater/component_unpacker.cc

Issue 17551004: Revert 207805 "Differential updates for components. We are addin..." (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: Created 7 years, 6 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 side-by-side diff with in-line comments
Download patch
Index: trunk/src/chrome/browser/component_updater/component_unpacker.cc
===================================================================
--- trunk/src/chrome/browser/component_updater/component_unpacker.cc (revision 207822)
+++ trunk/src/chrome/browser/component_updater/component_unpacker.cc (working copy)
@@ -12,7 +12,6 @@
#include "base/memory/scoped_handle.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/stringprintf.h"
-#include "chrome/browser/component_updater/component_patcher.h"
#include "chrome/browser/component_updater/component_updater_service.h"
#include "chrome/common/extensions/extension_constants.h"
#include "crypto/secure_hash.h"
@@ -23,12 +22,11 @@
using crypto::SecureHash;
namespace {
-
// This class makes sure that the CRX digital signature is valid
// and well formed.
class CRXValidator {
public:
- explicit CRXValidator(FILE* crx_file) : valid_(false), delta_(false) {
+ explicit CRXValidator(FILE* crx_file) : valid_(false) {
extensions::CrxFile::Header header;
size_t len = fread(&header, 1, sizeof(header), crx_file);
if (len < sizeof(header))
@@ -39,7 +37,6 @@
extensions::CrxFile::Parse(header, &error));
if (!crx.get())
return;
- delta_ = extensions::CrxFile::HeaderIsDelta(header);
std::vector<uint8> key(header.key_size);
len = fread(&key[0], sizeof(uint8), header.key_size, crx_file);
@@ -75,13 +72,10 @@
bool valid() const { return valid_; }
- bool delta() const { return delta_; }
-
const std::vector<uint8>& public_key() const { return public_key_; }
private:
bool valid_;
- bool delta_;
std::vector<uint8> public_key_;
};
@@ -104,29 +98,12 @@
return static_cast<base::DictionaryValue*>(root.release());
}
-// Deletes a path if it exists, and then creates a directory there.
-// Returns true if and only if these operations were successful.
-// This method doesn't take any special steps to prevent files from
-// being inserted into the target directory by another process or thread.
-bool MakeEmptyDirectory(const base::FilePath& path) {
- if (file_util::PathExists(path)) {
- if (!file_util::Delete(path, true))
- return false;
- }
- if (!file_util::CreateDirectory(path))
- return false;
- return true;
-}
-
} // namespace.
ComponentUnpacker::ComponentUnpacker(const std::vector<uint8>& pk_hash,
const base::FilePath& path,
- const std::string& fingerprint,
- ComponentPatcher* patcher,
ComponentInstaller* installer)
- : error_(kNone),
- extended_error_(0) {
+ : error_(kNone) {
if (pk_hash.empty() || path.empty()) {
error_ = kInvalidParams;
return;
@@ -158,61 +135,31 @@
return;
}
// We want the temporary directory to be unique and yet predictable, so
- // we can easily find the package in an end user machine.
- const std::string dir(
+ // we can easily find the package in a end user machine.
+ std::string dir(
base::StringPrintf("CRX_%s", base::HexEncode(hash, 6).c_str()));
unpack_path_ = path.DirName().AppendASCII(dir.c_str());
- if (!MakeEmptyDirectory(unpack_path_)) {
+ if (file_util::DirectoryExists(unpack_path_)) {
+ if (!file_util::Delete(unpack_path_, true)) {
+ unpack_path_.clear();
+ error_ = kUzipPathError;
+ return;
+ }
+ }
+ if (!file_util::CreateDirectory(unpack_path_)) {
unpack_path_.clear();
- error_ = kUnzipPathError;
+ error_ = kUzipPathError;
return;
}
- if (validator.delta()) { // Package is a diff package.
- // We want a different temp directory for the delta files; we'll put the
- // patch output into unpack_path_.
- std::string dir(
- base::StringPrintf("CRX_%s_diff", base::HexEncode(hash, 6).c_str()));
- base::FilePath unpack_diff_path = path.DirName().AppendASCII(dir.c_str());
- if (!MakeEmptyDirectory(unpack_diff_path)) {
- error_ = kUnzipPathError;
- return;
- }
- if (!zip::Unzip(path, unpack_diff_path)) {
- error_ = kUnzipFailed;
- return;
- }
- ComponentUnpacker::Error result = DifferentialUpdatePatch(unpack_diff_path,
- unpack_path_,
- patcher,
- installer,
- &extended_error_);
- file_util::Delete(unpack_diff_path, true);
- unpack_diff_path.clear();
- error_ = result;
- if (error_ != kNone) {
- return;
- }
- } else {
- // Package is a normal update/install; unzip it into unpack_path_ directly.
- if (!zip::Unzip(path, unpack_path_)) {
- error_ = kUnzipFailed;
- return;
- }
+ if (!zip::Unzip(path, unpack_path_)) {
+ error_ = kUnzipFailed;
+ return;
}
scoped_ptr<base::DictionaryValue> manifest(ReadManifest(unpack_path_));
if (!manifest.get()) {
error_ = kBadManifest;
return;
}
- // Write the fingerprint to disk.
- if (static_cast<int>(fingerprint.size()) !=
- file_util::WriteFile(
- unpack_path_.Append(FILE_PATH_LITERAL("manifest.fingerprint")),
- fingerprint.c_str(),
- fingerprint.size())) {
- error_ = kFingerprintWriteFailed;
- return;
- }
if (!installer->Install(*manifest, unpack_path_)) {
error_ = kInstallerError;
return;
@@ -222,6 +169,7 @@
}
ComponentUnpacker::~ComponentUnpacker() {
- if (!unpack_path_.empty())
+ if (!unpack_path_.empty()) {
file_util::Delete(unpack_path_, true);
+ }
}

Powered by Google App Engine
This is Rietveld 408576698