Fix app_shell shutdown crash due to BrowserContextKeyedServices

* Create ExtensionSystem and register its dependencies from the ExtensionsBrowserClient interface.
* Create and tear down BrowserContextKeyedServices using the dependency manager like you're supposed to do it.
* Don't register AppLoaderServiceFactory - we don't use it anymore.
* Remove the "custom instance" code to ExtensionSystem::Get() - it was kind of hacky.

BUG=none
TEST=Launch app_shell then close the window. No crash.

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

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@244013 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/extensions/chrome_extensions_browser_client.cc b/chrome/browser/extensions/chrome_extensions_browser_client.cc
index f6b1292..da56988 100644
--- a/chrome/browser/extensions/chrome_extensions_browser_client.cc
+++ b/chrome/browser/extensions/chrome_extensions_browser_client.cc
@@ -10,6 +10,8 @@
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/extensions/chrome_app_sorting.h"
 #include "chrome/browser/extensions/extension_prefs.h"
+#include "chrome/browser/extensions/extension_system.h"
+#include "chrome/browser/extensions/extension_system_factory.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/browser/ui/app_modal_dialogs/javascript_dialog_manager.h"
@@ -154,4 +156,16 @@
   return GetJavaScriptDialogManagerInstance();
 }
 
+std::vector<BrowserContextKeyedServiceFactory*>
+ChromeExtensionsBrowserClient::GetExtensionSystemDependencies() {
+  std::vector<BrowserContextKeyedServiceFactory*> dependencies;
+  dependencies.push_back(ExtensionSystemSharedFactory::GetInstance());
+  return dependencies;
+}
+
+ExtensionSystem* ChromeExtensionsBrowserClient::CreateExtensionSystem(
+    content::BrowserContext* context) {
+  return new ExtensionSystemImpl(static_cast<Profile*>(context));
+}
+
 }  // namespace extensions