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

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: adress comments 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..6f24801965e4b47e64c3b05d7f3c9b7dcba4f972 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,10 @@ const char kCannotUpdateSupervisedProfileSettingsError[] =
"Cannot change settings for a supervised profile.";
const char kNoOptionsPageForExtensionError[] =
"Extension does not have an options page.";
+const char kCannotRepairHealthyExtension[] =
+ "Cannot repair a healthy extension.";
+const char kCannotRepairPolicyExtension[] =
+ "Cannot repair a policy-installed extension.";
const char kUnpackedAppsFolder[] = "apps_target";
const char kManifestFile[] = "manifest.json";
@@ -151,8 +157,8 @@ void PerformVerificationCheck(content::BrowserContext* context) {
bool should_do_verification_check = false;
for (const scoped_refptr<const Extension>& extension : *extensions) {
if (ui_util::ShouldDisplayInExtensionSettings(extension.get(), context) &&
- ((prefs->GetDisableReasons(extension->id()) &
- Extension::DISABLE_NOT_VERIFIED) != 0)) {
+ prefs->HasDisableReason(extension->id(),
lazyboy 2017/04/06 22:32:56 Note: unrelated to this CL
+ Extension::DISABLE_NOT_VERIFIED)) {
should_do_verification_check = true;
break;
}
@@ -1461,6 +1467,21 @@ DeveloperPrivateRepairExtensionFunction::Run() {
if (!extension)
return RespondNow(Error(kNoSuchExtensionError));
+ if (!ExtensionPrefs::Get(browser_context())
+ ->HasDisableReason(extension->id(), Extension::DISABLE_CORRUPTED)) {
+ return RespondNow(Error(kCannotRepairHealthyExtension));
+ }
+
+ 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