Index: chrome/browser/extensions/crx_installer.cc |
diff --git a/chrome/browser/extensions/crx_installer.cc b/chrome/browser/extensions/crx_installer.cc |
index bab5ac73d5b0fbab0af0f34042e8f51ab1d5c4e9..53a9677c6eee1b2956629a77663dc52d4fbce80a 100644 |
--- a/chrome/browser/extensions/crx_installer.cc |
+++ b/chrome/browser/extensions/crx_installer.cc |
@@ -27,6 +27,7 @@ |
#include "chrome/browser/extensions/convert_web_app.h" |
#include "chrome/browser/extensions/extension_assets_manager.h" |
#include "chrome/browser/extensions/extension_error_reporter.h" |
+#include "chrome/browser/extensions/extension_install_checker.h" |
#include "chrome/browser/extensions/extension_service.h" |
#include "chrome/browser/extensions/install_tracker.h" |
#include "chrome/browser/extensions/install_tracker_factory.h" |
@@ -108,7 +109,8 @@ scoped_refptr<CrxInstaller> CrxInstaller::Create( |
CrxInstaller::CrxInstaller(base::WeakPtr<ExtensionService> service_weak, |
std::unique_ptr<ExtensionInstallPrompt> client, |
const WebstoreInstaller::Approval* approval) |
- : install_directory_(service_weak->install_directory()), |
+ : profile_(service_weak->profile()), |
+ install_directory_(service_weak->install_directory()), |
install_source_(Manifest::INTERNAL), |
approved_(false), |
hash_check_failed_(false), |
@@ -130,8 +132,7 @@ CrxInstaller::CrxInstaller(base::WeakPtr<ExtensionService> service_weak, |
did_handle_successfully_(true), |
error_on_unsupported_requirements_(false), |
update_from_settings_page_(false), |
- install_flags_(kInstallFlagNone), |
- install_checker_(service_weak->profile()) { |
+ install_flags_(kInstallFlagNone) { |
installer_task_runner_ = service_weak->GetFileTaskRunner(); |
if (!approval) |
return; |
@@ -355,7 +356,7 @@ CrxInstallError CrxInstaller::AllowInstall(const Extension* extension) { |
} |
} |
- if (install_checker_.extension()->is_app()) { |
+ if (extension_->is_app()) { |
// If the app was downloaded, apps_require_extension_mime_type_ |
// will be set. In this case, check that it was served with the |
// right mime type. Make an exception for file URLs, which come |
@@ -388,7 +389,7 @@ CrxInstallError CrxInstaller::AllowInstall(const Extension* extension) { |
pattern.SetHost(download_url_.host()); |
pattern.SetMatchSubdomains(true); |
- URLPatternSet patterns = install_checker_.extension()->web_extent(); |
+ URLPatternSet patterns = extension_->web_extent(); |
for (URLPatternSet::const_iterator i = patterns.begin(); |
i != patterns.end(); ++i) { |
if (!pattern.MatchesHost(i->host())) { |
@@ -431,7 +432,7 @@ void CrxInstaller::OnUnpackSuccess( |
install_cause(), |
extension_misc::NUM_INSTALL_CAUSES); |
- install_checker_.set_extension(extension); |
+ extension_ = extension; |
temp_dir_ = temp_dir; |
if (!install_icon.empty()) |
install_icon_.reset(new SkBitmap(install_icon)); |
@@ -510,11 +511,12 @@ void CrxInstaller::CheckInstall() { |
// Run the policy, requirements and blacklist checks in parallel. Skip the |
// checks if the extension is a bookmark app. |
if (extension()->from_bookmark()) { |
- CrxInstaller::OnInstallChecksComplete(0); |
+ ConfirmInstall(); |
} else { |
- install_checker_.Start( |
- ExtensionInstallChecker::CHECK_ALL, |
- false /* fail fast */, |
+ install_checker_ = base::MakeUnique<ExtensionInstallChecker>( |
+ profile_, extension_, ExtensionInstallChecker::CHECK_ALL, |
+ false /* fail fast */); |
+ install_checker_->Start( |
base::Bind(&CrxInstaller::OnInstallChecksComplete, this)); |
} |
} |
@@ -525,24 +527,24 @@ void CrxInstaller::OnInstallChecksComplete(int failed_checks) { |
return; |
// Check for requirement errors. |
- if (!install_checker_.requirement_errors().empty()) { |
+ if (!install_checker_->requirement_errors().empty()) { |
if (error_on_unsupported_requirements_) { |
ReportFailureFromUIThread( |
CrxInstallError(CrxInstallError::ERROR_DECLINED, |
base::UTF8ToUTF16(base::JoinString( |
- install_checker_.requirement_errors(), " ")))); |
+ install_checker_->requirement_errors(), " ")))); |
return; |
} |
install_flags_ |= kInstallFlagHasRequirementErrors; |
} |
// Check the blacklist state. |
- if (install_checker_.blacklist_state() == BLACKLISTED_MALWARE) { |
+ if (install_checker_->blacklist_state() == BLACKLISTED_MALWARE) { |
install_flags_ |= kInstallFlagIsBlacklistedForMalware; |
} |
- if ((install_checker_.blacklist_state() == BLACKLISTED_MALWARE || |
- install_checker_.blacklist_state() == BLACKLISTED_UNKNOWN) && |
+ if ((install_checker_->blacklist_state() == BLACKLISTED_MALWARE || |
+ install_checker_->blacklist_state() == BLACKLISTED_UNKNOWN) && |
!allow_silent_install_) { |
// User tried to install a blacklisted extension. Show an error and |
// refuse to install it. |
@@ -561,7 +563,7 @@ void CrxInstaller::OnInstallChecksComplete(int failed_checks) { |
// deal with it. |
// Check for policy errors. |
- if (!install_checker_.policy_error().empty()) { |
+ if (!install_checker_->policy_error().empty()) { |
// We don't want to show the error infobar for installs from the WebStore, |
// because the WebStore already shows an error dialog itself. |
// Note: |client_| can be NULL in unit_tests! |
@@ -569,7 +571,7 @@ void CrxInstaller::OnInstallChecksComplete(int failed_checks) { |
client_->install_ui()->SetSkipPostInstallUI(true); |
ReportFailureFromUIThread( |
CrxInstallError(CrxInstallError::ERROR_DECLINED, |
- base::UTF8ToUTF16(install_checker_.policy_error()))); |
+ base::UTF8ToUTF16(install_checker_->policy_error()))); |
return; |
} |
@@ -582,7 +584,7 @@ void CrxInstaller::ConfirmInstall() { |
if (!service || service->browser_terminating()) |
return; |
- if (KioskModeInfo::IsKioskOnly(install_checker_.extension().get())) { |
+ if (KioskModeInfo::IsKioskOnly(extension())) { |
bool in_kiosk_mode = false; |
#if defined(OS_CHROMEOS) |
user_manager::UserManager* user_manager = user_manager::UserManager::Get(); |
@@ -721,13 +723,10 @@ void CrxInstaller::ReloadExtensionAfterInstall( |
// with base::string16 |
std::string extension_id = extension()->id(); |
std::string error; |
- install_checker_.set_extension( |
- file_util::LoadExtension( |
- version_dir, |
- install_source_, |
- // Note: modified by UpdateCreationFlagsAndCompleteInstall. |
- creation_flags_, |
- &error).get()); |
+ extension_ = file_util::LoadExtension( |
+ version_dir, install_source_, |
+ // Note: modified by UpdateCreationFlagsAndCompleteInstall. |
+ creation_flags_, &error); |
if (extension()) { |
ReportSuccessFromFileThread(); |