| Index: chrome/browser/extensions/crx_installer.cc
|
| diff --git a/chrome/browser/extensions/crx_installer.cc b/chrome/browser/extensions/crx_installer.cc
|
| index e51b225e73cc7387a1d99a46ae2642909fd82dcb..baf3ee418eb3795edf9b671b6e5784ee980e6d8e 100644
|
| --- a/chrome/browser/extensions/crx_installer.cc
|
| +++ b/chrome/browser/extensions/crx_installer.cc
|
| @@ -21,6 +21,7 @@
|
| #include "base/utf_string_conversions.h"
|
| #include "base/version.h"
|
| #include "chrome/browser/browser_process.h"
|
| +#include "chrome/browser/extensions/app_host_installer.h"
|
| #include "chrome/browser/extensions/convert_user_script.h"
|
| #include "chrome/browser/extensions/convert_web_app.h"
|
| #include "chrome/browser/extensions/default_apps_trial.h"
|
| @@ -457,7 +458,7 @@ void CrxInstaller::ConfirmInstall() {
|
| } else {
|
| if (!BrowserThread::PostTask(
|
| BrowserThread::FILE, FROM_HERE,
|
| - base::Bind(&CrxInstaller::CompleteInstall, this)))
|
| + base::Bind(&CrxInstaller::BeginInstall, this)))
|
| NOTREACHED();
|
| }
|
| return;
|
| @@ -466,7 +467,7 @@ void CrxInstaller::ConfirmInstall() {
|
| void CrxInstaller::InstallUIProceed() {
|
| if (!BrowserThread::PostTask(
|
| BrowserThread::FILE, FROM_HERE,
|
| - base::Bind(&CrxInstaller::CompleteInstall, this)))
|
| + base::Bind(&CrxInstaller::BeginInstall, this)))
|
| NOTREACHED();
|
|
|
| Release(); // balanced in ConfirmInstall().
|
| @@ -494,9 +495,8 @@ void CrxInstaller::InstallUIAbort(bool user_initiated) {
|
| // should go to zero and we die. The destructor will clean up the temp dir.
|
| }
|
|
|
| -void CrxInstaller::CompleteInstall() {
|
| +void CrxInstaller::BeginInstall() {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
|
| -
|
| if (!current_version_.empty()) {
|
| Version current_version(current_version_);
|
| if (current_version.CompareTo(*(extension_->version())) > 0) {
|
| @@ -509,6 +509,25 @@ void CrxInstaller::CompleteInstall() {
|
| }
|
| }
|
|
|
| + app_host_installer::InstallAppHostIfNecessary(*extension_,
|
| + base::Bind(&CrxInstaller::OnAppHostInstallationComplete, this));
|
| +}
|
| +
|
| +void CrxInstaller::OnAppHostInstallationComplete(bool success) {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
|
| + if (!success) {
|
| + ReportFailureFromFileThread(
|
| + CrxInstallerError(
|
| + l10n_util::GetStringUTF16(
|
| + IDS_EXTENSION_APP_HOST_INSTALL_ERROR)));
|
| + return;
|
| + }
|
| +
|
| + CompleteInstall();
|
| +}
|
| +
|
| +void CrxInstaller::CompleteInstall() {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
|
| // See how long extension install paths are. This is important on
|
| // windows, because file operations may fail if the path to a file
|
| // exceeds a small constant. See crbug.com/69693 .
|
|
|