Index: chrome/browser/component_updater/component_updater_service.cc |
diff --git a/chrome/browser/component_updater/component_updater_service.cc b/chrome/browser/component_updater/component_updater_service.cc |
index a4829d213a2f7abf5667e559a23c5b8d532f6e6d..61e797e3fb65ddcc233de39acf8580e5c57dce5e 100644 |
--- a/chrome/browser/component_updater/component_updater_service.cc |
+++ b/chrome/browser/component_updater/component_updater_service.cc |
@@ -349,8 +349,13 @@ class CrxUpdateService : public ComponentUpdateService { |
void Install(const CRXContext* context, const base::FilePath& crx_path); |
+ void DoneUnpacking(const std::string& component_id, |
+ const base::FilePath& crx_path, |
+ component_updater::Error error, |
+ int extended_error); |
+ |
void DoneInstalling(const std::string& component_id, |
- ComponentUnpacker::Error error, |
+ component_updater::Error error, |
int extended_error); |
size_t ChangeItemStatus(CrxUpdateItem::Status from, |
@@ -922,36 +927,47 @@ void CrxUpdateService::Install(const CRXContext* context, |
const base::FilePath& crx_path) { |
// This function owns the |crx_path| and the |context| object. |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
- ComponentUnpacker unpacker(context->pk_hash, |
- crx_path, |
- context->fingerprint, |
- component_patcher_.get(), |
- context->installer); |
+ component_updater::Unpack(context->pk_hash, |
+ crx_path, |
+ context->fingerprint, |
+ component_patcher_.get(), |
+ context->installer, |
+ base::Bind(&CrxUpdateService::DoneUnpacking, |
+ base::Unretained(this), |
+ context->id, |
+ crx_path)); |
+ delete context; |
+} |
+ |
+// Do some cleanup before we skip back to the UI thread. |
+void CrxUpdateService::DoneUnpacking(const std::string& component_id, |
+ const base::FilePath& crx_path, |
+ component_updater::Error error, |
+ int extended_error) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
if (!base::DeleteFile(crx_path, false)) |
NOTREACHED() << crx_path.value(); |
- // Why unretained? See comment at top of file. |
BrowserThread::PostDelayedTask( |
BrowserThread::UI, |
FROM_HERE, |
base::Bind(&CrxUpdateService::DoneInstalling, base::Unretained(this), |
- context->id, unpacker.error(), unpacker.extended_error()), |
+ component_id, error, extended_error), |
base::TimeDelta::FromMilliseconds(config_->StepDelay())); |
- delete context; |
} |
// Installation has been completed. Adjust the component status and |
// schedule the next check. Schedule a short delay before trying the full |
// update when the differential update failed. |
void CrxUpdateService::DoneInstalling(const std::string& component_id, |
- ComponentUnpacker::Error error, |
+ component_updater::Error error, |
int extra_code) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
ErrorCategory error_category = kErrorNone; |
switch (error) { |
- case ComponentUnpacker::kNone: |
+ case component_updater::kNone: |
break; |
- case ComponentUnpacker::kInstallerError: |
+ case component_updater::kInstallerError: |
error_category = kInstallError; |
break; |
default: |
@@ -959,7 +975,7 @@ void CrxUpdateService::DoneInstalling(const std::string& component_id, |
break; |
} |
- const bool is_success = error == ComponentUnpacker::kNone; |
+ const bool is_success = error == component_updater::kNone; |
CrxUpdateItem* item = FindUpdateItemById(component_id); |
if (item->status == CrxUpdateItem::kUpdatingDiff && !is_success) { |