Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1119)

Unified Diff: chrome/browser/extensions/crx_installer.cc

Issue 12211029: Sanity tweaks to the extension blacklist: check all extensions at once on (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: mpcomplete Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/crx_installer.cc
diff --git a/chrome/browser/extensions/crx_installer.cc b/chrome/browser/extensions/crx_installer.cc
index dd54f0637ba46f167bb5e360d560ebf2a5ef9c1e..e9797abadb4d52b6e55a93570d2f56f4fb5db90e 100644
--- a/chrome/browser/extensions/crx_installer.cc
+++ b/chrome/browser/extensions/crx_installer.cc
@@ -16,9 +16,9 @@
#include "base/sequenced_task_runner.h"
#include "base/string_util.h"
#include "base/stringprintf.h"
+#include "base/threading/sequenced_worker_pool.h"
#include "base/threading/thread_restrictions.h"
#include "base/time.h"
-#include "base/threading/sequenced_worker_pool.h"
#include "base/utf_string_conversions.h"
#include "base/version.h"
#include "chrome/browser/browser_process.h"
@@ -26,6 +26,7 @@
#include "chrome/browser/extensions/convert_web_app.h"
#include "chrome/browser/extensions/extension_error_reporter.h"
#include "chrome/browser/extensions/extension_install_ui.h"
+#include "chrome/browser/extensions/extension_install_ui_default.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/extensions/extension_system.h"
#include "chrome/browser/extensions/management_policy.h"
@@ -485,7 +486,7 @@ void CrxInstaller::InstallUIAbort(bool user_initiated) {
content::Source<CrxInstaller>(this),
content::NotificationService::NoDetails());
- NotifyCrxInstallComplete(NULL);
+ NotifyCrxInstallComplete(false);
Release(); // balanced in ConfirmInstall().
@@ -581,7 +582,7 @@ void CrxInstaller::ReportFailureFromUIThread(const CrxInstallerError& error) {
if (client_)
client_->OnInstallFailure(error);
- NotifyCrxInstallComplete(NULL);
+ NotifyCrxInstallComplete(false);
// Delete temporary files.
CleanupTempFiles();
@@ -625,22 +626,34 @@ void CrxInstaller::ReportSuccessFromUIThread() {
perms_updater.GrantActivePermissions(extension_, record_oauth2_grant_);
}
- // Tell the frontend about the installation and hand off ownership of
- // extension_ to it.
- frontend_weak_->OnExtensionInstalled(extension_,
- page_ordinal_,
- has_requirement_errors_,
- install_wait_for_idle_);
-
- NotifyCrxInstallComplete(extension_.get());
-
- extension_ = NULL;
+ // Install the extension if it's not blacklisted, but notify either way.
+ ExtensionSystem::Get(profile_)->blacklist()->IsBlacklisted(
+ extension_->id(),
+ base::Bind(&CrxInstaller::HandleIsBlacklistedResponse,
+ this,
+ base::Bind(&ExtensionService::OnExtensionInstalled,
+ frontend_weak_,
+ extension_,
+ page_ordinal_,
+ has_requirement_errors_,
+ install_wait_for_idle_)));
+}
- // We're done. We don't post any more tasks to ourselves so we are deleted
- // soon.
+void CrxInstaller::HandleIsBlacklistedResponse(
+ const base::Closure& on_success,
+ bool is_blacklisted) {
+ if (is_blacklisted) {
+ ExtensionInstallUIDefault(profile()).OnInstallFailure(
+ extensions::CrxInstallerError(
+ l10n_util::GetStringFUTF16(IDS_EXTENSION_IS_BLACKLISTED,
+ UTF8ToUTF16(extension_->name()))));
+ } else {
+ on_success.Run();
+ }
+ NotifyCrxInstallComplete(!is_blacklisted);
}
-void CrxInstaller::NotifyCrxInstallComplete(const Extension* extension) {
+void CrxInstaller::NotifyCrxInstallComplete(bool success) {
// Some users (such as the download shelf) need to know when a
// CRXInstaller is done. Listening for the EXTENSION_* events
// is problematic because they don't know anything about the
@@ -649,7 +662,11 @@ void CrxInstaller::NotifyCrxInstallComplete(const Extension* extension) {
content::NotificationService::current()->Notify(
chrome::NOTIFICATION_CRX_INSTALLER_DONE,
content::Source<CrxInstaller>(this),
- content::Details<const Extension>(extension));
+ content::Details<const Extension>(success ? extension_.get() : NULL));
+
+ // We're done. We don't post any more tasks to ourselves so we are deleted
+ // soon.
+ extension_ = NULL;
}
void CrxInstaller::CleanupTempFiles() {

Powered by Google App Engine
This is Rietveld 408576698