Chromium Code Reviews| Index: chrome/browser/extensions/api/developer_private/developer_private_api.cc |
| diff --git a/chrome/browser/extensions/api/developer_private/developer_private_api.cc b/chrome/browser/extensions/api/developer_private/developer_private_api.cc |
| index f2b455a41118817bc33a49a150372e93107a9182..c6c7d3f9079a1b8d6dfb7dd23ce3d4c62194582e 100644 |
| --- a/chrome/browser/extensions/api/developer_private/developer_private_api.cc |
| +++ b/chrome/browser/extensions/api/developer_private/developer_private_api.cc |
| @@ -60,6 +60,7 @@ |
| #include "extensions/browser/api/file_handlers/app_file_handler_util.h" |
| #include "extensions/browser/app_window/app_window.h" |
| #include "extensions/browser/app_window/app_window_registry.h" |
| +#include "extensions/browser/content_verifier.h" |
| #include "extensions/browser/error_map.h" |
| #include "extensions/browser/extension_error.h" |
| #include "extensions/browser/extension_prefs.h" |
| @@ -75,6 +76,7 @@ |
| #include "extensions/common/install_warning.h" |
| #include "extensions/common/manifest.h" |
| #include "extensions/common/manifest_handlers/options_page_info.h" |
| +#include "extensions/common/manifest_url_handlers.h" |
| #include "extensions/common/permissions/permissions_data.h" |
| #include "extensions/grit/extensions_browser_resources.h" |
| #include "storage/browser/fileapi/external_mount_points.h" |
| @@ -109,6 +111,9 @@ const char kCannotUpdateSupervisedProfileSettingsError[] = |
| "Cannot change settings for a supervised profile."; |
| const char kNoOptionsPageForExtensionError[] = |
| "Extension does not have an options page."; |
| +const char kCannotRepairNotCorruptedExtension[] = |
| + "Cannot repair a not corrupted extension."; |
|
Devlin
2017/04/06 21:01:32
"not corrupted" sounds a bit funny to me. "valid"
lazyboy
2017/04/06 22:32:56
Done.
|
| +const char kCannotRepairPolicyExtension[] = "Cannot repair a policy extension."; |
|
Devlin
2017/04/06 21:01:32
nit: s/policy/policy-installed
lazyboy
2017/04/06 22:32:56
Done.
|
| const char kUnpackedAppsFolder[] = "apps_target"; |
| const char kManifestFile[] = "manifest.json"; |
| @@ -1461,6 +1466,21 @@ DeveloperPrivateRepairExtensionFunction::Run() { |
| if (!extension) |
| return RespondNow(Error(kNoSuchExtensionError)); |
| + if (!ExtensionPrefs::Get(browser_context()) |
| + ->HasDisableReason(extension->id(), Extension::DISABLE_CORRUPTED)) { |
| + return RespondNow(Error(kCannotRepairNotCorruptedExtension)); |
| + } |
| + |
| + ManagementPolicy* management_policy = |
| + ExtensionSystem::Get(browser_context())->management_policy(); |
| + // If content verifier would repair this extension independently, then don't |
| + // allow repair from here. This applies to policy extensions. |
| + // Also note that if we let |reinstaller| continue with the repair, this would |
| + // have uninstalled the extension but then we would have failed to reinstall |
| + // it for policy check (see PolicyCheck::Start()). |
| + if (ContentVerifier::ShouldRepairIfCorrupted(management_policy, extension)) |
| + return RespondNow(Error(kCannotRepairPolicyExtension)); |
| + |
| content::WebContents* web_contents = GetSenderWebContents(); |
| if (!web_contents) |
| return RespondNow(Error(kCouldNotFindWebContentsError)); |