Chromium Code Reviews| Index: chrome/browser/extensions/api/management/management_api.cc |
| diff --git a/chrome/browser/extensions/api/management/management_api.cc b/chrome/browser/extensions/api/management/management_api.cc |
| index e6ef0a9cddc0b1e63006eccc4aca13ef9819980f..bfe42aebb2960408182bbee525440d1a851ce0f8 100644 |
| --- a/chrome/browser/extensions/api/management/management_api.cc |
| +++ b/chrome/browser/extensions/api/management/management_api.cc |
| @@ -447,13 +447,27 @@ bool SetEnabledFunction::RunImpl() { |
| extension_id_ = params->id; |
| - const Extension* extension = service()->GetExtensionById(extension_id_, true); |
| + const Extension* extension = service()->GetInstalledExtension(extension_id_); |
| if (!extension) { |
| error_ = ExtensionErrorUtils::FormatErrorMessage( |
| keys::kNoExtensionError, extension_id_); |
| return false; |
| } |
| + // The extension may have been unloaded due to a crash. |
|
Aaron Boodman
2012/09/04 22:47:19
Does not seem right that this code is before polic
|
| + if (service()->GetTerminatedExtension(extension_id_)) { |
| + if (params->enabled) { |
| + service()->ReloadExtension(extension_id_); |
|
Aaron Boodman
2012/09/04 22:47:19
Why this special case? Just make this extension af
mitchellwrosen
2012/09/04 23:00:08
Isn't it a special case, though? Terminated extens
|
| + } else { |
| + // Treat setEnabled(false) when the extension has crashed as a no-op. |
| + BrowserThread::PostTask( |
| + BrowserThread::UI, |
| + FROM_HERE, |
| + base::Bind(&SetEnabledFunction::SendResponse, this, true)); |
| + return true; |
| + } |
| + } |
| + |
| const extensions::ManagementPolicy* policy = extensions::ExtensionSystem::Get( |
| profile())->management_policy(); |
| if (!policy->UserMayModifySettings(extension, NULL)) { |