Use process-per-app-instance for hosted apps without background permission.
Also update ExtensionProcessManager to map SiteInstances to extensions,
rather than extensions to processes.

BUG=87644
TEST=AppApiTest.AppProcessInstances

Review URL: http://codereview.chromium.org/7328029

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@92099 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc
index 5748626..8449ce37 100644
--- a/chrome/browser/extensions/extension_service.cc
+++ b/chrome/browser/extensions/extension_service.cc
@@ -2171,12 +2171,16 @@
 }
 
 bool ExtensionService::ExtensionBindingsAllowed(const GURL& url) {
-  // Allow bindings for all packaged extension.
-  if (GetExtensionByURL(url))
+  // Allow bindings for all packaged extensions.
+  // Note that GetExtensionByURL may return an Extension for hosted apps
+  // if the URL came from GetEffectiveURL.
+  const Extension* extension = GetExtensionByURL(url);
+  if (extension && extension->GetType() != Extension::TYPE_HOSTED_APP)
     return true;
 
   // Allow bindings for all component, hosted apps.
-  const Extension* extension = GetExtensionByWebExtent(url);
+  if (!extension)
+    extension = GetExtensionByWebExtent(url);
   return (extension && extension->location() == Extension::COMPONENT);
 }