Index: chrome/browser/component_updater/component_unpacker.cc |
diff --git a/chrome/browser/component_updater/component_unpacker.cc b/chrome/browser/component_updater/component_unpacker.cc |
index f179262ea2987f4ef3dca707ab59b7a5be1eff93..4134b3e1beae9e9bb6cb9c4919ca74d4acba21c3 100644 |
--- a/chrome/browser/component_updater/component_unpacker.cc |
+++ b/chrome/browser/component_updater/component_unpacker.cc |
@@ -98,17 +98,18 @@ |
const std::vector<uint8>& pk_hash, |
const base::FilePath& path, |
const std::string& fingerprint, |
+ ComponentPatcher* patcher, |
ComponentInstaller* installer, |
- bool in_process, |
scoped_refptr<base::SequencedTaskRunner> task_runner) |
: pk_hash_(pk_hash), |
path_(path), |
is_delta_(false), |
fingerprint_(fingerprint), |
+ patcher_(patcher), |
installer_(installer), |
- in_process_(in_process), |
error_(kNone), |
extended_error_(0), |
+ ptr_factory_(this), |
task_runner_(task_runner) { |
} |
@@ -136,7 +137,8 @@ |
return Verify() && Unzip() && BeginPatching(); |
} |
-void ComponentUnpacker::Unpack(const Callback& callback) { |
+void ComponentUnpacker::Unpack( |
+ const base::Callback<void(Error, int)>& callback) { |
callback_ = callback; |
if (!UnpackInternal()) |
Finish(); |
@@ -200,23 +202,20 @@ |
error_ = kUnzipPathError; |
return false; |
} |
- patcher_ = new ComponentPatcher(unpack_diff_path_, |
- unpack_path_, |
- installer_, |
- in_process_, |
- task_runner_); |
task_runner_->PostTask( |
- FROM_HERE, |
- base::Bind(&ComponentPatcher::Start, |
- patcher_, |
- base::Bind(&ComponentUnpacker::EndPatching, |
- scoped_refptr<ComponentUnpacker>(this)))); |
+ FROM_HERE, base::Bind(&DifferentialUpdatePatch, |
+ unpack_diff_path_, |
+ unpack_path_, |
+ patcher_, |
+ installer_, |
+ base::Bind(&ComponentUnpacker::EndPatching, |
+ GetWeakPtr()))); |
} else { |
- task_runner_->PostTask(FROM_HERE, |
- base::Bind(&ComponentUnpacker::EndPatching, |
- scoped_refptr<ComponentUnpacker>(this), |
- kNone, |
- 0)); |
+ task_runner_->PostTask( |
+ FROM_HERE, base::Bind(&ComponentUnpacker::EndPatching, |
+ GetWeakPtr(), |
+ kNone, |
+ 0)); |
} |
return true; |
} |
@@ -224,7 +223,6 @@ |
void ComponentUnpacker::EndPatching(Error error, int extended_error) { |
error_ = error; |
extended_error_ = extended_error; |
- patcher_ = NULL; |
if (error_ != kNone) { |
Finish(); |
return; |
@@ -269,6 +267,10 @@ |
callback_.Run(error_, extended_error_); |
} |
+base::WeakPtr<ComponentUnpacker> ComponentUnpacker::GetWeakPtr() { |
+ return ptr_factory_.GetWeakPtr(); |
+} |
+ |
ComponentUnpacker::~ComponentUnpacker() { |
} |