Resubmit: Refactor external_install_ui

Third time's the charm.

Previous: https://codereview.chromium.org/309643007/

---------------------------

Refactors ExternalInstallUI to have determinate lifetimes.
This is likely the first of multiple patches targeting this area of code; the
next one will concentrate on pulling the related logic out of ExtensionService.
Adds unittests for accepting/declining external installs.

BUG=378042

Review URL: https://codereview.chromium.org/315903004

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@280067 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/extensions/extension_service.h b/chrome/browser/extensions/extension_service.h
index 33a0e366..8e5b875 100644
--- a/chrome/browser/extensions/extension_service.h
+++ b/chrome/browser/extensions/extension_service.h
@@ -53,6 +53,7 @@
 class ExtensionSystem;
 class ExtensionUpdater;
 class OneShotEvent;
+class ExternalInstallManager;
 class SharedModuleService;
 class UpdateObserver;
 }  // namespace extensions
@@ -386,6 +387,10 @@
     return shared_module_service_.get();
   }
 
+  extensions::ExternalInstallManager* external_install_manager() {
+    return external_install_manager_.get();
+  }
+
   //////////////////////////////////////////////////////////////////////////////
   // For Testing
 
@@ -670,6 +675,10 @@
   // extensions.
   scoped_ptr<extensions::ExtensionErrorController> error_controller_;
 
+  // The manager for extensions that were externally installed that is
+  // responsible for prompting the user about suspicious extensions.
+  scoped_ptr<extensions::ExternalInstallManager> external_install_manager_;
+
   // Sequenced task runner for extension related file operations.
   scoped_refptr<base::SequencedTaskRunner> file_task_runner_;