Index: chrome/browser/extensions/crx_installer.cc |
diff --git a/chrome/browser/extensions/crx_installer.cc b/chrome/browser/extensions/crx_installer.cc |
index da319ae72ec403e8b03df51f5e67b72e0ba74d87..1c0cfb99d1911938b814f8a3792e3ce172c60f57 100644 |
--- a/chrome/browser/extensions/crx_installer.cc |
+++ b/chrome/browser/extensions/crx_installer.cc |
@@ -16,6 +16,7 @@ |
#include "base/scoped_temp_dir.h" |
#include "base/stl_util.h" |
#include "base/stringprintf.h" |
+#include "base/string_util.h" |
#include "base/threading/thread_restrictions.h" |
#include "base/time.h" |
#include "base/utf_string_conversions.h" |
@@ -29,6 +30,7 @@ |
#include "chrome/browser/extensions/extension_service.h" |
#include "chrome/browser/extensions/extension_system.h" |
#include "chrome/browser/extensions/permissions_updater.h" |
+#include "chrome/browser/extensions/requirements_checker.h" |
#include "chrome/browser/extensions/webstore_installer.h" |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/browser/shell_integration.h" |
@@ -101,7 +103,10 @@ CrxInstaller::CrxInstaller( |
creation_flags_(Extension::NO_FLAGS), |
off_store_install_allow_reason_(OffStoreInstallDisallowed), |
did_handle_successfully_(true), |
- record_oauth2_grant_(false) { |
+ record_oauth2_grant_(false), |
+ error_on_unsupported_requirements_(false), |
+ requirements_checker_(new extensions::RequirementsChecker()), |
+ has_requirement_errors_(false) { |
if (!approval) |
return; |
@@ -385,11 +390,33 @@ void CrxInstaller::OnUnpackSuccess(const FilePath& temp_dir, |
} |
if (!BrowserThread::PostTask( |
- BrowserThread::UI, FROM_HERE, |
- base::Bind(&CrxInstaller::ConfirmInstall, this))) |
+ BrowserThread::UI, FROM_HERE, |
+ base::Bind(&CrxInstaller::CheckRequirements, this))) |
NOTREACHED(); |
} |
+void CrxInstaller::CheckRequirements() { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ requirements_checker_->Check(extension_, |
+ base::Bind(&CrxInstaller::RequirementsChecked, |
+ this)); |
+} |
+ |
+void CrxInstaller::RequirementsChecked(std::vector<std::string> errors) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ |
+ if (!errors.empty()) { |
+ if (error_on_unsupported_requirements_) { |
+ ReportFailureFromUIThread(CrxInstallerError( |
+ UTF8ToUTF16(JoinString(errors, ' ')))); |
+ return; |
+ } |
+ has_requirement_errors_ = true; |
+ } |
+ |
+ ConfirmInstall(); |
+} |
+ |
void CrxInstaller::ConfirmInstall() { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
if (!frontend_weak_.get()) |
@@ -602,8 +629,10 @@ void CrxInstaller::ReportSuccessFromUIThread() { |
// Tell the frontend about the installation and hand off ownership of |
// extension_ to it. |
- frontend_weak_->OnExtensionInstalled(extension_, is_gallery_install(), |
- page_ordinal_); |
+ frontend_weak_->OnExtensionInstalled(extension_, |
+ is_gallery_install(), |
+ page_ordinal_, |
+ has_requirement_errors_); |
NotifyCrxInstallComplete(extension_.get()); |