Base support for verifying extension installs
This code is the start of providing a mechanism for verifying that
extensions are installed from the webstore or via enterprise policy,
and not force-installed by malicious third-parties.
BUG=318479
Review URL: https://codereview.chromium.org/70103003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@234970 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc
index 9fdefc0..2b39df1 100644
--- a/chrome/browser/extensions/extension_service.cc
+++ b/chrome/browser/extensions/extension_service.cc
@@ -52,6 +52,7 @@
#include "chrome/browser/extensions/external_install_ui.h"
#include "chrome/browser/extensions/external_provider_impl.h"
#include "chrome/browser/extensions/external_provider_interface.h"
+#include "chrome/browser/extensions/install_verifier.h"
#include "chrome/browser/extensions/installed_loader.h"
#include "chrome/browser/extensions/management_policy.h"
#include "chrome/browser/extensions/pending_extension_manager.h"
@@ -120,6 +121,7 @@
using extensions::ExtensionIdSet;
using extensions::ExtensionInfo;
using extensions::FeatureSwitch;
+using extensions::InstallVerifier;
using extensions::ManagementPolicy;
using extensions::Manifest;
using extensions::PermissionMessage;
@@ -774,6 +776,9 @@
extension.get(), is_ready());
}
+ extensions::ExtensionSystem::Get(profile_)->install_verifier()->Remove(
+ extension->id());
+
if (IsUnacknowledgedExternalExtension(extension.get())) {
UMA_HISTOGRAM_ENUMERATION("Extensions.ExternalExtensionEvent",
EXTERNAL_EXTENSION_UNINSTALLED,
@@ -2175,6 +2180,10 @@
blacklisted_for_malware,
page_ordinal);
delayed_installs_.Remove(extension->id());
+ if (extensions::ManifestURL::UpdatesFromGallery(extension)) {
+ extensions::ExtensionSystem::Get(profile_)->install_verifier()->Add(
+ extension->id(), InstallVerifier::AddResultCallback());
+ }
FinishInstallation(extension);
}