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);
 }