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

Unified Diff: chrome/browser/extensions/api/developer_private/developer_private_api.cc

Issue 2801583003: developerPrivate.repair: Skip not-corrupted and policy extensions (Closed)
Patch Set: change Created 3 years, 8 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/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));

Powered by Google App Engine
This is Rietveld 408576698