Index: chrome/browser/extensions/extension_service.cc |
diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc |
index 5463968d73ac7c4bfa1f3389b1db804bd027f7b5..cc5815b6e65e6e409a35fd059958ce2e90771d90 100644 |
--- a/chrome/browser/extensions/extension_service.cc |
+++ b/chrome/browser/extensions/extension_service.cc |
@@ -595,7 +595,7 @@ bool ExtensionService::UpdateExtension(const std::string& id, |
return true; |
} |
-void ExtensionService::ReloadExtension(const std::string extension_id) { |
+void ExtensionService::ReloadExtension(const std::string& extension_id) { |
CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
// If the extension is already reloading, don't reload again. |
@@ -604,6 +604,13 @@ void ExtensionService::ReloadExtension(const std::string extension_id) { |
return; |
} |
+ // Ignore attempts to reload a blacklisted extension. Sometimes this can |
+ // happen in a convoluted reload sequence triggered by the termination of a |
+ // blacklisted extension and a naive attempt to reload it. For an example see |
+ // http://crbug.com/373842. |
+ if (registry_->blacklisted_extensions().Contains(extension_id)) |
+ return; |
+ |
base::FilePath path; |
const Extension* current_extension = GetExtensionById(extension_id, false); |