Moved ExtensionInfoMap and ExtensionsQuotaService to extensions/

In the move these classes became extensions::InfoMap and
extensions::QuotaService.

TBR=sky
BUG=162530

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

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@234131 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/apps/app_url_redirector.cc b/chrome/browser/apps/app_url_redirector.cc
index d973fdd..b50eea5 100644
--- a/chrome/browser/apps/app_url_redirector.cc
+++ b/chrome/browser/apps/app_url_redirector.cc
@@ -7,7 +7,6 @@
 #include "apps/launcher.h"
 #include "base/bind.h"
 #include "base/logging.h"
-#include "chrome/browser/extensions/extension_info_map.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_io_data.h"
 #include "chrome/common/extensions/api/url_handlers/url_handlers_parser.h"
@@ -20,6 +19,7 @@
 #include "content/public/browser/render_view_host.h"
 #include "content/public/browser/resource_throttle.h"
 #include "content/public/browser/web_contents.h"
+#include "extensions/browser/info_map.h"
 #include "net/url_request/url_request.h"
 
 using content::BrowserThread;
diff --git a/chrome/browser/apps/ephemeral_app_throttle.cc b/chrome/browser/apps/ephemeral_app_throttle.cc
index f74cfa4a..9787b1b 100644
--- a/chrome/browser/apps/ephemeral_app_throttle.cc
+++ b/chrome/browser/apps/ephemeral_app_throttle.cc
@@ -5,7 +5,6 @@
 #include "chrome/browser/apps/ephemeral_app_throttle.h"
 
 #include "base/command_line.h"
-#include "chrome/browser/extensions/extension_info_map.h"
 #include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/extensions/extension_system.h"
 #include "chrome/browser/extensions/webstore_ephemeral_installer.h"
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
index 3eca2254..4f1ee2f4 100644
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -35,7 +35,6 @@
 #include "chrome/browser/extensions/api/web_request/web_request_api.h"
 #include "chrome/browser/extensions/browser_permissions_policy_delegate.h"
 #include "chrome/browser/extensions/extension_host.h"
-#include "chrome/browser/extensions/extension_info_map.h"
 #include "chrome/browser/extensions/extension_process_manager.h"
 #include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/extensions/extension_system.h"
@@ -127,6 +126,7 @@
 #include "content/public/common/child_process_host.h"
 #include "content/public/common/content_descriptors.h"
 #include "content/public/common/url_utils.h"
+#include "extensions/browser/info_map.h"
 #include "extensions/browser/view_type_utils.h"
 #include "extensions/common/constants.h"
 #include "extensions/common/manifest_handlers/background_info.h"
@@ -251,6 +251,7 @@
 using content::WebContents;
 using extensions::APIPermission;
 using extensions::Extension;
+using extensions::InfoMap;
 using extensions::Manifest;
 using message_center::NotifierId;
 
@@ -1267,8 +1268,9 @@
     if (signin_manager)
       signin_manager->SetSigninProcess(site_instance->GetProcess()->GetID());
     BrowserThread::PostTask(
-        BrowserThread::IO, FROM_HERE,
-        base::Bind(&ExtensionInfoMap::SetSigninProcess,
+        BrowserThread::IO,
+        FROM_HERE,
+        base::Bind(&InfoMap::SetSigninProcess,
                    extensions::ExtensionSystem::Get(profile)->info_map(),
                    site_instance->GetProcess()->GetID()));
   }
@@ -1288,8 +1290,9 @@
                                  site_instance->GetProcess()->GetID(),
                                  site_instance->GetId());
   BrowserThread::PostTask(
-      BrowserThread::IO, FROM_HERE,
-      base::Bind(&ExtensionInfoMap::RegisterExtensionProcess,
+      BrowserThread::IO,
+      FROM_HERE,
+      base::Bind(&InfoMap::RegisterExtensionProcess,
                  extensions::ExtensionSystem::Get(profile)->info_map(),
                  extension->id(),
                  site_instance->GetProcess()->GetID(),
@@ -1317,8 +1320,9 @@
                                  site_instance->GetProcess()->GetID(),
                                  site_instance->GetId());
   BrowserThread::PostTask(
-      BrowserThread::IO, FROM_HERE,
-      base::Bind(&ExtensionInfoMap::UnregisterExtensionProcess,
+      BrowserThread::IO,
+      FROM_HERE,
+      base::Bind(&InfoMap::UnregisterExtensionProcess,
                  extensions::ExtensionSystem::Get(profile)->info_map(),
                  extension->id(),
                  site_instance->GetProcess()->GetID(),
@@ -1893,7 +1897,7 @@
   // extension has the 'notify' permission. (If the extension does not have the
   // permission, the user will still be prompted.)
   Profile* profile = Profile::FromBrowserContext(contents->GetBrowserContext());
-  ExtensionInfoMap* extension_info_map =
+  InfoMap* extension_info_map =
       extensions::ExtensionSystem::Get(profile)->info_map();
   DesktopNotificationService* notification_service =
       DesktopNotificationServiceFactory::GetForProfile(profile);
@@ -1945,7 +1949,7 @@
   DesktopNotificationService* notification_service =
       io_data->GetNotificationService();
   if (notification_service) {
-    ExtensionInfoMap* extension_info_map = io_data->GetExtensionInfoMap();
+    InfoMap* extension_info_map = io_data->GetExtensionInfoMap();
     ExtensionSet extensions;
     extension_info_map->GetExtensionsWithAPIPermissionForSecurityOrigin(
         source_origin, render_process_id,
@@ -2036,7 +2040,7 @@
   *no_javascript_access = false;
 
   ProfileIOData* io_data = ProfileIOData::FromResourceContext(context);
-  ExtensionInfoMap* map = io_data->GetExtensionInfoMap();
+  InfoMap* map = io_data->GetExtensionInfoMap();
 
   // If the opener is trying to create a background window but doesn't have
   // the appropriate permission, fail the attempt.
diff --git a/chrome/browser/extensions/api/bookmarks/bookmarks_api.cc b/chrome/browser/extensions/api/bookmarks/bookmarks_api.cc
index 25a5d7f5..f946556 100644
--- a/chrome/browser/extensions/api/bookmarks/bookmarks_api.cc
+++ b/chrome/browser/extensions/api/bookmarks/bookmarks_api.cc
@@ -30,7 +30,6 @@
 #include "chrome/browser/extensions/event_router.h"
 #include "chrome/browser/extensions/extension_function_dispatcher.h"
 #include "chrome/browser/extensions/extension_system.h"
-#include "chrome/browser/extensions/extensions_quota_service.h"
 #include "chrome/browser/importer/external_process_importer_host.h"
 #include "chrome/browser/importer/importer_uma.h"
 #include "chrome/browser/platform_util.h"
@@ -45,6 +44,7 @@
 #include "content/public/browser/notification_service.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/browser/web_contents_view.h"
+#include "extensions/browser/quota_service.h"
 #include "grit/generated_resources.h"
 #include "ui/base/l10n/l10n_util.h"
 
@@ -65,8 +65,8 @@
 typedef QuotaLimitHeuristic::Bucket Bucket;
 typedef QuotaLimitHeuristic::Config Config;
 typedef QuotaLimitHeuristic::BucketList BucketList;
-typedef ExtensionsQuotaService::TimedLimit TimedLimit;
-typedef ExtensionsQuotaService::SustainedLimit SustainedLimit;
+typedef QuotaService::TimedLimit TimedLimit;
+typedef QuotaService::SustainedLimit SustainedLimit;
 typedef QuotaLimitHeuristic::BucketMapper BucketMapper;
 
 namespace {
diff --git a/chrome/browser/extensions/api/declarative/rules_cache_delegate.cc b/chrome/browser/extensions/api/declarative/rules_cache_delegate.cc
index 0022d78..6254a411 100644
--- a/chrome/browser/extensions/api/declarative/rules_cache_delegate.cc
+++ b/chrome/browser/extensions/api/declarative/rules_cache_delegate.cc
@@ -6,7 +6,6 @@
 
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/extensions/api/declarative/rules_registry.h"
-#include "chrome/browser/extensions/extension_info_map.h"
 #include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/extensions/extension_system.h"
 #include "chrome/browser/extensions/extension_util.h"
@@ -14,6 +13,7 @@
 #include "chrome/browser/profiles/profile.h"
 #include "content/public/browser/notification_details.h"
 #include "content/public/browser/notification_source.h"
+#include "extensions/browser/info_map.h"
 
 namespace {
 
@@ -127,8 +127,7 @@
   // declarative rules, not just webRequest.
   if (extension->HasAPIPermission(APIPermission::kDeclarativeContent) ||
       extension->HasAPIPermission(APIPermission::kDeclarativeWebRequest)) {
-    ExtensionInfoMap* extension_info_map =
-        ExtensionSystem::Get(profile_)->info_map();
+    InfoMap* extension_info_map = ExtensionSystem::Get(profile_)->info_map();
     if (profile_->IsOffTheRecord() &&
         !extension_info_map->IsIncognitoEnabled(extension->id())) {
       // Ignore this extension.
diff --git a/chrome/browser/extensions/api/declarative/rules_registry.cc b/chrome/browser/extensions/api/declarative/rules_registry.cc
index 12f1d3c..2f6c2fb 100644
--- a/chrome/browser/extensions/api/declarative/rules_registry.cc
+++ b/chrome/browser/extensions/api/declarative/rules_registry.cc
@@ -13,7 +13,6 @@
 #include "base/values.h"
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/extensions/api/declarative/rules_cache_delegate.h"
-#include "chrome/browser/extensions/extension_info_map.h"
 #include "chrome/browser/extensions/extension_prefs.h"
 #include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/extensions/extension_system.h"
diff --git a/chrome/browser/extensions/api/declarative_content/content_rules_registry.h b/chrome/browser/extensions/api/declarative_content/content_rules_registry.h
index c3f62f2..c752ebba 100644
--- a/chrome/browser/extensions/api/declarative_content/content_rules_registry.h
+++ b/chrome/browser/extensions/api/declarative_content/content_rules_registry.h
@@ -18,9 +18,9 @@
 #include "chrome/browser/extensions/api/declarative/rules_registry.h"
 #include "chrome/browser/extensions/api/declarative_content/content_action.h"
 #include "chrome/browser/extensions/api/declarative_content/content_condition.h"
-#include "chrome/browser/extensions/extension_info_map.h"
 #include "content/public/browser/notification_observer.h"
 #include "content/public/browser/notification_registrar.h"
+#include "extensions/browser/info_map.h"
 #include "extensions/common/matcher/url_matcher.h"
 
 class Profile;
@@ -139,7 +139,7 @@
   // Manages our notification registrations.
   content::NotificationRegistrar registrar_;
 
-  scoped_refptr<ExtensionInfoMap> extension_info_map_;
+  scoped_refptr<InfoMap> extension_info_map_;
 
   DISALLOW_COPY_AND_ASSIGN(ContentRulesRegistry);
 };
diff --git a/chrome/browser/extensions/api/declarative_webrequest/webrequest_action.cc b/chrome/browser/extensions/api/declarative_webrequest/webrequest_action.cc
index 4da726e..14c2c8e 100644
--- a/chrome/browser/extensions/api/declarative_webrequest/webrequest_action.cc
+++ b/chrome/browser/extensions/api/declarative_webrequest/webrequest_action.cc
@@ -17,9 +17,9 @@
 #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_constants.h"
 #include "chrome/browser/extensions/api/web_request/web_request_api_helpers.h"
 #include "chrome/browser/extensions/api/web_request/web_request_permissions.h"
-#include "chrome/browser/extensions/extension_info_map.h"
 #include "chrome/common/extensions/extension.h"
 #include "content/public/common/url_constants.h"
+#include "extensions/browser/info_map.h"
 #include "net/base/registry_controlled_domains/registry_controlled_domain.h"
 #include "net/url_request/url_request.h"
 #include "third_party/re2/re2/re2.h"
@@ -436,7 +436,7 @@
   return type() == other->type();
 }
 
-bool WebRequestAction::HasPermission(const ExtensionInfoMap* extension_info_map,
+bool WebRequestAction::HasPermission(const InfoMap* extension_info_map,
                                      const std::string& extension_id,
                                      const net::URLRequest* request,
                                      bool crosses_incognito) const {
diff --git a/chrome/browser/extensions/api/declarative_webrequest/webrequest_action.h b/chrome/browser/extensions/api/declarative_webrequest/webrequest_action.h
index 07fa95c8..5deef02a 100644
--- a/chrome/browser/extensions/api/declarative_webrequest/webrequest_action.h
+++ b/chrome/browser/extensions/api/declarative_webrequest/webrequest_action.h
@@ -18,7 +18,6 @@
 #include "chrome/common/extensions/api/events.h"
 #include "url/gurl.h"
 
-class ExtensionInfoMap;
 class WebRequestPermission;
 
 namespace base {
@@ -33,6 +32,7 @@
 
 namespace extensions {
 class Extension;
+class InfoMap;
 struct WebRequestData;
 }
 
@@ -83,7 +83,7 @@
   // Information necessary to decide how to apply a WebRequestAction
   // inside a matching rule.
   struct ApplyInfo {
-    const ExtensionInfoMap* extension_info_map;
+    const InfoMap* extension_info_map;
     const WebRequestData& request_data;
     bool crosses_incognito;
     // Modified by each applied action:
@@ -122,7 +122,7 @@
   // host permissions are ignored. |crosses_incognito| specifies
   // whether the request comes from a different profile than |extension_id|
   // but was processed because the extension is in spanning mode.
-  virtual bool HasPermission(const ExtensionInfoMap* extension_info_map,
+  virtual bool HasPermission(const InfoMap* extension_info_map,
                              const std::string& extension_id,
                              const net::URLRequest* request,
                              bool crosses_incognito) const;
diff --git a/chrome/browser/extensions/api/declarative_webrequest/webrequest_action_unittest.cc b/chrome/browser/extensions/api/declarative_webrequest/webrequest_action_unittest.cc
index d54053b..ab6ec9a 100644
--- a/chrome/browser/extensions/api/declarative_webrequest/webrequest_action_unittest.cc
+++ b/chrome/browser/extensions/api/declarative_webrequest/webrequest_action_unittest.cc
@@ -17,12 +17,12 @@
 #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_condition.h"
 #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_constants.h"
 #include "chrome/browser/extensions/api/web_request/web_request_api_helpers.h"
-#include "chrome/browser/extensions/extension_info_map.h"
 #include "chrome/common/chrome_paths.h"
 #include "chrome/common/extensions/extension.h"
 #include "chrome/common/extensions/extension_constants.h"
 #include "chrome/common/extensions/extension_test_util.h"
 #include "content/public/test/test_browser_thread_bundle.h"
+#include "extensions/browser/info_map.h"
 #include "net/base/request_priority.h"
 #include "net/http/http_response_headers.h"
 #include "net/url_request/url_request_test_util.h"
@@ -97,7 +97,7 @@
   scoped_refptr<Extension> extension_;
   // An extension with host permissions for all URLs and the DWR permission.
   scoped_refptr<Extension> extension_all_urls_;
-  scoped_refptr<ExtensionInfoMap> extension_info_map_;
+  scoped_refptr<InfoMap> extension_info_map_;
 
  private:
   content::TestBrowserThreadBundle thread_bundle_;
@@ -122,7 +122,7 @@
                             "ext_id_2",
                             &error);
   ASSERT_TRUE(extension_all_urls_.get()) << error;
-  extension_info_map_ = new ExtensionInfoMap;
+  extension_info_map_ = new InfoMap;
   ASSERT_TRUE(extension_info_map_.get());
   extension_info_map_->AddExtension(
       extension_.get(), base::Time::Now(), false /*incognito_enabled*/);
diff --git a/chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_registry.cc b/chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_registry.cc
index be0010b..d9a9407 100644
--- a/chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_registry.cc
+++ b/chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_registry.cc
@@ -73,7 +73,7 @@
 }
 
 std::list<LinkedPtrEventResponseDelta> WebRequestRulesRegistry::CreateDeltas(
-    const ExtensionInfoMap* extension_info_map,
+    const InfoMap* extension_info_map,
     const WebRequestData& request_data,
     bool crosses_incognito) {
   if (webrequest_rules_.empty())
diff --git a/chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_registry.h b/chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_registry.h
index 7c8f3b1..336c4845 100644
--- a/chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_registry.h
+++ b/chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_registry.h
@@ -21,7 +21,7 @@
 #include "chrome/browser/extensions/api/declarative_webrequest/request_stage.h"
 #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_action.h"
 #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_condition.h"
-#include "chrome/browser/extensions/extension_info_map.h"
+#include "extensions/browser/info_map.h"
 #include "extensions/common/matcher/url_matcher.h"
 
 class Profile;
@@ -86,7 +86,7 @@
   // Returns which modifications should be executed on the network request
   // according to the rules registered in this registry.
   std::list<LinkedPtrEventResponseDelta> CreateDeltas(
-      const ExtensionInfoMap* extension_info_map,
+      const InfoMap* extension_info_map,
       const WebRequestData& request_data,
       bool crosses_incognito);
 
@@ -112,7 +112,7 @@
   virtual void ClearCacheOnNavigation();
 
   void SetExtensionInfoMapForTesting(
-      scoped_refptr<ExtensionInfoMap> extension_info_map) {
+      scoped_refptr<InfoMap> extension_info_map) {
     extension_info_map_ = extension_info_map;
   }
 
@@ -182,7 +182,7 @@
   URLMatcher url_matcher_;
 
   void* profile_id_;
-  scoped_refptr<ExtensionInfoMap> extension_info_map_;
+  scoped_refptr<InfoMap> extension_info_map_;
 
   DISALLOW_COPY_AND_ASSIGN(WebRequestRulesRegistry);
 };
diff --git a/chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_registry_unittest.cc b/chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_registry_unittest.cc
index f36d1f9..31f5b1f 100644
--- a/chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_registry_unittest.cc
+++ b/chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_registry_unittest.cc
@@ -49,7 +49,7 @@
 class TestWebRequestRulesRegistry : public WebRequestRulesRegistry {
  public:
   explicit TestWebRequestRulesRegistry(
-      scoped_refptr<ExtensionInfoMap> extension_info_map)
+      scoped_refptr<InfoMap> extension_info_map)
       : WebRequestRulesRegistry(NULL /*profile*/, NULL /* cache_delegate */),
         num_clear_cache_calls_(0) {
     SetExtensionInfoMapForTesting(extension_info_map);
@@ -229,7 +229,7 @@
   // |extension2_|.
   scoped_refptr<Extension> extension_;
   scoped_refptr<Extension> extension2_;
-  scoped_refptr<ExtensionInfoMap> extension_info_map_;
+  scoped_refptr<InfoMap> extension_info_map_;
 };
 
 void WebRequestRulesRegistryTest::SetUp() {
@@ -250,7 +250,7 @@
                                       kExtensionId2,
                                       &error);
   ASSERT_TRUE(extension2_.get()) << error;
-  extension_info_map_ = new ExtensionInfoMap;
+  extension_info_map_ = new InfoMap;
   ASSERT_TRUE(extension_info_map_.get());
   extension_info_map_->AddExtension(extension_.get(),
                                     base::Time() + base::TimeDelta::FromDays(1),
diff --git a/chrome/browser/extensions/api/downloads/downloads_api.cc b/chrome/browser/extensions/api/downloads/downloads_api.cc
index 4544f58..53837be 100644
--- a/chrome/browser/extensions/api/downloads/downloads_api.cc
+++ b/chrome/browser/extensions/api/downloads/downloads_api.cc
@@ -40,7 +40,6 @@
 #include "chrome/browser/download/drag_download_item.h"
 #include "chrome/browser/extensions/event_router.h"
 #include "chrome/browser/extensions/extension_function_dispatcher.h"
-#include "chrome/browser/extensions/extension_info_map.h"
 #include "chrome/browser/extensions/extension_prefs.h"
 #include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/extensions/extension_system.h"
diff --git a/chrome/browser/extensions/api/storage/storage_api.cc b/chrome/browser/extensions/api/storage/storage_api.cc
index e562d91..1d6b3611 100644
--- a/chrome/browser/extensions/api/storage/storage_api.cc
+++ b/chrome/browser/extensions/api/storage/storage_api.cc
@@ -12,10 +12,10 @@
 #include "base/values.h"
 #include "chrome/browser/extensions/api/storage/settings_frontend.h"
 #include "chrome/browser/extensions/extension_service.h"
-#include "chrome/browser/extensions/extensions_quota_service.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/common/extensions/api/storage.h"
 #include "content/public/browser/browser_thread.h"
+#include "extensions/browser/quota_service.h"
 
 namespace extensions {
 
@@ -135,11 +135,10 @@
     api::storage::sync::MAX_WRITE_OPERATIONS_PER_HOUR,
     base::TimeDelta::FromHours(1)
   };
-  heuristics->push_back(
-      new ExtensionsQuotaService::TimedLimit(
-          longLimitConfig,
-          new QuotaLimitHeuristic::SingletonBucketMapper(),
-          "MAX_WRITE_OPERATIONS_PER_HOUR"));
+  heuristics->push_back(new QuotaService::TimedLimit(
+      longLimitConfig,
+      new QuotaLimitHeuristic::SingletonBucketMapper(),
+      "MAX_WRITE_OPERATIONS_PER_HOUR"));
 
   // A max of 10 operations per minute, sustained over 10 minutes.
   QuotaLimitHeuristic::Config shortLimitConfig = {
@@ -147,12 +146,11 @@
     api::storage::sync::MAX_SUSTAINED_WRITE_OPERATIONS_PER_MINUTE,
     base::TimeDelta::FromMinutes(1)
   };
-  heuristics->push_back(
-      new ExtensionsQuotaService::SustainedLimit(
-          base::TimeDelta::FromMinutes(10),
-          shortLimitConfig,
-          new QuotaLimitHeuristic::SingletonBucketMapper(),
-          "MAX_SUSTAINED_WRITE_OPERATIONS_PER_MINUTE"));
+  heuristics->push_back(new QuotaService::SustainedLimit(
+      base::TimeDelta::FromMinutes(10),
+      shortLimitConfig,
+      new QuotaLimitHeuristic::SingletonBucketMapper(),
+      "MAX_SUSTAINED_WRITE_OPERATIONS_PER_MINUTE"));
 };
 
 }  // namespace
diff --git a/chrome/browser/extensions/api/streams_private/streams_private_apitest.cc b/chrome/browser/extensions/api/streams_private/streams_private_apitest.cc
index 0e99edc..723793a 100644
--- a/chrome/browser/extensions/api/streams_private/streams_private_apitest.cc
+++ b/chrome/browser/extensions/api/streams_private/streams_private_apitest.cc
@@ -8,7 +8,6 @@
 #include "chrome/browser/download/download_prefs.h"
 #include "chrome/browser/extensions/event_router.h"
 #include "chrome/browser/extensions/extension_apitest.h"
-#include "chrome/browser/extensions/extension_info_map.h"
 #include "chrome/browser/extensions/extension_system.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/browser.h"
diff --git a/chrome/browser/extensions/api/test/test_api.cc b/chrome/browser/extensions/api/test/test_api.cc
index 5a4f485..fb76002 100644
--- a/chrome/browser/extensions/api/test/test_api.cc
+++ b/chrome/browser/extensions/api/test/test_api.cc
@@ -9,14 +9,14 @@
 #include "base/command_line.h"
 #include "base/memory/singleton.h"
 #include "chrome/browser/chrome_notification_types.h"
-#include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/extensions/extension_function_dispatcher.h"
-#include "chrome/browser/extensions/extensions_quota_service.h"
+#include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/browser_commands.h"
 #include "chrome/common/chrome_switches.h"
 #include "chrome/common/extensions/api/test.h"
 #include "content/public/browser/notification_service.h"
+#include "extensions/browser/quota_service.h"
 
 namespace {
 
@@ -84,7 +84,7 @@
 
 bool TestResetQuotaFunction::RunImpl() {
   ExtensionService* service = GetProfile()->GetExtensionService();
-  ExtensionsQuotaService* quota = service->quota_service();
+  QuotaService* quota = service->quota_service();
   quota->Purge();
   quota->violation_errors_.clear();
   return true;
diff --git a/chrome/browser/extensions/api/web_request/web_request_api.cc b/chrome/browser/extensions/api/web_request/web_request_api.cc
index d10d681..4d74cfe 100644
--- a/chrome/browser/extensions/api/web_request/web_request_api.cc
+++ b/chrome/browser/extensions/api/web_request/web_request_api.cc
@@ -30,7 +30,6 @@
 #include "chrome/browser/extensions/api/web_request/web_request_api_helpers.h"
 #include "chrome/browser/extensions/api/web_request/web_request_time_tracker.h"
 #include "chrome/browser/extensions/event_router.h"
-#include "chrome/browser/extensions/extension_info_map.h"
 #include "chrome/browser/extensions/extension_prefs.h"
 #include "chrome/browser/extensions/extension_renderer_state.h"
 #include "chrome/browser/extensions/extension_service.h"
@@ -51,6 +50,7 @@
 #include "content/public/browser/render_process_host.h"
 #include "content/public/browser/resource_request_info.h"
 #include "content/public/browser/user_metrics.h"
+#include "extensions/browser/info_map.h"
 #include "extensions/common/error_utils.h"
 #include "extensions/common/event_filtering_info.h"
 #include "extensions/common/features/feature.h"
@@ -76,6 +76,7 @@
 using extensions::ExtensionWarning;
 using extensions::ExtensionWarningService;
 using extensions::ExtensionWarningSet;
+using extensions::InfoMap;
 using extensions::Feature;
 using extensions::web_navigation_api_helpers::GetFrameId;
 
@@ -144,7 +145,7 @@
 // Returns whether |request| has been triggered by an extension in
 // |extension_info_map|.
 bool IsRequestFromExtension(const net::URLRequest* request,
-                            const ExtensionInfoMap* extension_info_map) {
+                            const InfoMap* extension_info_map) {
   // |extension_info_map| is NULL for system-level requests.
   if (!extension_info_map)
     return false;
@@ -469,7 +470,7 @@
 
   // Provider of meta data about extensions, only used and non-NULL for events
   // that are delayed until the rules registry is ready.
-  ExtensionInfoMap* extension_info_map;
+  InfoMap* extension_info_map;
 
   BlockedRequest()
       : request(NULL),
@@ -608,7 +609,7 @@
 
 int ExtensionWebRequestEventRouter::OnBeforeRequest(
     void* profile,
-    ExtensionInfoMap* extension_info_map,
+    InfoMap* extension_info_map,
     net::URLRequest* request,
     const net::CompletionCallback& callback,
     GURL* new_url) {
@@ -674,7 +675,7 @@
 
 int ExtensionWebRequestEventRouter::OnBeforeSendHeaders(
     void* profile,
-    ExtensionInfoMap* extension_info_map,
+    InfoMap* extension_info_map,
     net::URLRequest* request,
     const net::CompletionCallback& callback,
     net::HttpRequestHeaders* headers) {
@@ -731,7 +732,7 @@
 
 void ExtensionWebRequestEventRouter::OnSendHeaders(
     void* profile,
-    ExtensionInfoMap* extension_info_map,
+    InfoMap* extension_info_map,
     net::URLRequest* request,
     const net::HttpRequestHeaders& headers) {
   // We hide events from the system context as well as sensitive requests.
@@ -764,7 +765,7 @@
 
 int ExtensionWebRequestEventRouter::OnHeadersReceived(
     void* profile,
-    ExtensionInfoMap* extension_info_map,
+    InfoMap* extension_info_map,
     net::URLRequest* request,
     const net::CompletionCallback& callback,
     const net::HttpResponseHeaders* original_response_headers,
@@ -832,7 +833,7 @@
 net::NetworkDelegate::AuthRequiredResponse
 ExtensionWebRequestEventRouter::OnAuthRequired(
     void* profile,
-    ExtensionInfoMap* extension_info_map,
+    InfoMap* extension_info_map,
     net::URLRequest* request,
     const net::AuthChallengeInfo& auth_info,
     const net::NetworkDelegate::AuthCallback& callback,
@@ -885,7 +886,7 @@
 
 void ExtensionWebRequestEventRouter::OnBeforeRedirect(
     void* profile,
-    ExtensionInfoMap* extension_info_map,
+    InfoMap* extension_info_map,
     net::URLRequest* request,
     const GURL& new_location) {
   // We hide events from the system context as well as sensitive requests.
@@ -933,7 +934,7 @@
 
 void ExtensionWebRequestEventRouter::OnResponseStarted(
     void* profile,
-    ExtensionInfoMap* extension_info_map,
+    InfoMap* extension_info_map,
     net::URLRequest* request) {
   // We hide events from the system context as well as sensitive requests.
   if (!profile ||
@@ -976,10 +977,9 @@
   DispatchEvent(profile, request, listeners, args);
 }
 
-void ExtensionWebRequestEventRouter::OnCompleted(
-    void* profile,
-    ExtensionInfoMap* extension_info_map,
-    net::URLRequest* request) {
+void ExtensionWebRequestEventRouter::OnCompleted(void* profile,
+                                                 InfoMap* extension_info_map,
+                                                 net::URLRequest* request) {
   // We hide events from the system context as well as sensitive requests.
   // However, if the request first became sensitive after redirecting we have
   // already signaled it and thus we have to signal the end of it. This is
@@ -1031,7 +1031,7 @@
 
 void ExtensionWebRequestEventRouter::OnErrorOccurred(
     void* profile,
-    ExtensionInfoMap* extension_info_map,
+    InfoMap* extension_info_map,
     net::URLRequest* request,
     bool started) {
   // We hide events from the system context as well as sensitive requests.
@@ -1344,7 +1344,7 @@
 
 void ExtensionWebRequestEventRouter::GetMatchingListenersImpl(
     void* profile,
-    ExtensionInfoMap* extension_info_map,
+    InfoMap* extension_info_map,
     bool crosses_incognito,
     const std::string& event_name,
     const GURL& url,
@@ -1421,7 +1421,7 @@
 std::vector<const ExtensionWebRequestEventRouter::EventListener*>
 ExtensionWebRequestEventRouter::GetMatchingListeners(
     void* profile,
-    ExtensionInfoMap* extension_info_map,
+    InfoMap* extension_info_map,
     const std::string& event_name,
     net::URLRequest* request,
     int* extra_info_spec) {
@@ -1849,7 +1849,7 @@
 
 bool ExtensionWebRequestEventRouter::ProcessDeclarativeRules(
     void* profile,
-    ExtensionInfoMap* extension_info_map,
+    InfoMap* extension_info_map,
     const std::string& event_name,
     net::URLRequest* request,
     extensions::RequestStage request_stage,
@@ -1999,7 +1999,7 @@
 // webRequest.handlerBehaviorChanged() should trigger a quota violation at the
 // time it is called. Instead we only decrement the bucket counter at the time
 // when the cache is cleared (when page loads happen).
-class ClearCacheQuotaHeuristic : public QuotaLimitHeuristic {
+class ClearCacheQuotaHeuristic : public extensions::QuotaLimitHeuristic {
  public:
   ClearCacheQuotaHeuristic(const Config& config, BucketMapper* map)
       : QuotaLimitHeuristic(
@@ -2245,14 +2245,13 @@
 }
 
 void WebRequestHandlerBehaviorChangedFunction::GetQuotaLimitHeuristics(
-    QuotaLimitHeuristics* heuristics) const {
-  QuotaLimitHeuristic::Config config = {
-    // See web_request.json for current value.
-    web_request::MAX_HANDLER_BEHAVIOR_CHANGED_CALLS_PER_10_MINUTES,
-    base::TimeDelta::FromMinutes(10)
-  };
-  QuotaLimitHeuristic::BucketMapper* bucket_mapper =
-      new QuotaLimitHeuristic::SingletonBucketMapper();
+    extensions::QuotaLimitHeuristics* heuristics) const {
+  extensions::QuotaLimitHeuristic::Config config = {
+      // See web_request.json for current value.
+      web_request::MAX_HANDLER_BEHAVIOR_CHANGED_CALLS_PER_10_MINUTES,
+      base::TimeDelta::FromMinutes(10)};
+  extensions::QuotaLimitHeuristic::BucketMapper* bucket_mapper =
+      new extensions::QuotaLimitHeuristic::SingletonBucketMapper();
   ClearCacheQuotaHeuristic* heuristic =
       new ClearCacheQuotaHeuristic(config, bucket_mapper);
   heuristics->push_back(heuristic);
diff --git a/chrome/browser/extensions/api/web_request/web_request_api.h b/chrome/browser/extensions/api/web_request/web_request_api.h
index 15c985b..a68e0fb 100644
--- a/chrome/browser/extensions/api/web_request/web_request_api.h
+++ b/chrome/browser/extensions/api/web_request/web_request_api.h
@@ -27,7 +27,6 @@
 #include "net/http/http_request_headers.h"
 #include "webkit/common/resource_type.h"
 
-class ExtensionInfoMap;
 class ExtensionWebRequestTimeTracker;
 class GURL;
 
@@ -42,6 +41,7 @@
 }
 
 namespace extensions {
+class InfoMap;
 class WebRequestRulesRegistry;
 }
 
@@ -145,7 +145,7 @@
   // the given request. Returns net::ERR_IO_PENDING if an extension is
   // intercepting the request, OK otherwise.
   int OnBeforeRequest(void* profile,
-                      ExtensionInfoMap* extension_info_map,
+                      extensions::InfoMap* extension_info_map,
                       net::URLRequest* request,
                       const net::CompletionCallback& callback,
                       GURL* new_url);
@@ -155,7 +155,7 @@
   // Returns net::ERR_IO_PENDING if an extension is intercepting the request, OK
   // otherwise.
   int OnBeforeSendHeaders(void* profile,
-                          ExtensionInfoMap* extension_info_map,
+                          extensions::InfoMap* extension_info_map,
                           net::URLRequest* request,
                           const net::CompletionCallback& callback,
                           net::HttpRequestHeaders* headers);
@@ -163,7 +163,7 @@
   // Dispatches the onSendHeaders event. This is fired for HTTP(s) requests
   // only.
   void OnSendHeaders(void* profile,
-                     ExtensionInfoMap* extension_info_map,
+                     extensions::InfoMap* extension_info_map,
                      net::URLRequest* request,
                      const net::HttpRequestHeaders& headers);
 
@@ -178,7 +178,7 @@
   // into |override_response_headers|.
   int OnHeadersReceived(
       void* profile,
-      ExtensionInfoMap* extension_info_map,
+      extensions::InfoMap* extension_info_map,
       net::URLRequest* request,
       const net::CompletionCallback& callback,
       const net::HttpResponseHeaders* original_response_headers,
@@ -190,36 +190,36 @@
   // AUTH_REQUIRED_RESPONSE_IO_PENDING is returned and |callback| will be
   // invoked later.
   net::NetworkDelegate::AuthRequiredResponse OnAuthRequired(
-                     void* profile,
-                     ExtensionInfoMap* extension_info_map,
-                     net::URLRequest* request,
-                     const net::AuthChallengeInfo& auth_info,
-                     const net::NetworkDelegate::AuthCallback& callback,
-                     net::AuthCredentials* credentials);
+      void* profile,
+      extensions::InfoMap* extension_info_map,
+      net::URLRequest* request,
+      const net::AuthChallengeInfo& auth_info,
+      const net::NetworkDelegate::AuthCallback& callback,
+      net::AuthCredentials* credentials);
 
   // Dispatches the onBeforeRedirect event. This is fired for HTTP(s) requests
   // only.
   void OnBeforeRedirect(void* profile,
-                        ExtensionInfoMap* extension_info_map,
+                        extensions::InfoMap* extension_info_map,
                         net::URLRequest* request,
                         const GURL& new_location);
 
   // Dispatches the onResponseStarted event indicating that the first bytes of
   // the response have arrived.
   void OnResponseStarted(void* profile,
-                         ExtensionInfoMap* extension_info_map,
+                         extensions::InfoMap* extension_info_map,
                          net::URLRequest* request);
 
   // Dispatches the onComplete event.
   void OnCompleted(void* profile,
-                   ExtensionInfoMap* extension_info_map,
+                   extensions::InfoMap* extension_info_map,
                    net::URLRequest* request);
 
   // Dispatches an onErrorOccurred event.
   void OnErrorOccurred(void* profile,
-                      ExtensionInfoMap* extension_info_map,
-                      net::URLRequest* request,
-                      bool started);
+                       extensions::InfoMap* extension_info_map,
+                       net::URLRequest* request,
+                       bool started);
 
   // Notifications when objects are going away.
   void OnURLRequestDestroyed(void* profile, net::URLRequest* request);
@@ -304,7 +304,7 @@
   // set of extra_info_spec flags that every matching listener asked for.
   std::vector<const EventListener*> GetMatchingListeners(
       void* profile,
-      ExtensionInfoMap* extension_info_map,
+      extensions::InfoMap* extension_info_map,
       const std::string& event_name,
       net::URLRequest* request,
       int* extra_info_spec);
@@ -314,7 +314,7 @@
   // profile if the event is originally for the normal profile, or vice versa).
   void GetMatchingListenersImpl(
       void* profile,
-      ExtensionInfoMap* extension_info_map,
+      extensions::InfoMap* extension_info_map,
       bool crosses_incognito,
       const std::string& event_name,
       const GURL& url,
@@ -356,7 +356,7 @@
   // deltas were generated.
   bool ProcessDeclarativeRules(
       void* profile,
-      ExtensionInfoMap* extension_info_map,
+      extensions::InfoMap* extension_info_map,
       const std::string& event_name,
       net::URLRequest* request,
       extensions::RequestStage request_stage,
@@ -464,7 +464,7 @@
 
   // ExtensionFunction:
   virtual void GetQuotaLimitHeuristics(
-      QuotaLimitHeuristics* heuristics) const OVERRIDE;
+      extensions::QuotaLimitHeuristics* heuristics) const OVERRIDE;
   // Handle quota exceeded gracefully: Only warn the user but still execute the
   // function.
   virtual void OnQuotaExceeded(const std::string& error) OVERRIDE;
diff --git a/chrome/browser/extensions/api/web_request/web_request_api_unittest.cc b/chrome/browser/extensions/api/web_request/web_request_api_unittest.cc
index b563564..cb672ba 100644
--- a/chrome/browser/extensions/api/web_request/web_request_api_unittest.cc
+++ b/chrome/browser/extensions/api/web_request/web_request_api_unittest.cc
@@ -64,7 +64,6 @@
 using base::TimeDelta;
 using base::Value;
 using chrome::VersionInfo;
-using extensions::Feature;
 using helpers::CalculateOnAuthRequiredDelta;
 using helpers::CalculateOnBeforeRequestDelta;
 using helpers::CalculateOnBeforeSendHeadersDelta;
@@ -209,7 +208,7 @@
   BooleanPrefMember enable_referrers_;
   TestIPCSender ipc_sender_;
   scoped_refptr<EventRouterForwarder> event_router_;
-  scoped_refptr<ExtensionInfoMap> extension_info_map_;
+  scoped_refptr<InfoMap> extension_info_map_;
   scoped_ptr<ChromeNetworkDelegate> network_delegate_;
   scoped_ptr<net::TestURLRequestContext> context_;
 };
@@ -803,7 +802,7 @@
   BooleanPrefMember enable_referrers_;
   TestIPCSender ipc_sender_;
   scoped_refptr<EventRouterForwarder> event_router_;
-  scoped_refptr<ExtensionInfoMap> extension_info_map_;
+  scoped_refptr<InfoMap> extension_info_map_;
   scoped_ptr<ChromeNetworkDelegate> network_delegate_;
   scoped_ptr<net::MockHostResolver> host_resolver_;
   scoped_ptr<net::TestURLRequestContext> context_;
diff --git a/chrome/browser/extensions/api/web_request/web_request_permissions.cc b/chrome/browser/extensions/api/web_request/web_request_permissions.cc
index d483ce5..93430fb 100644
--- a/chrome/browser/extensions/api/web_request/web_request_permissions.cc
+++ b/chrome/browser/extensions/api/web_request/web_request_permissions.cc
@@ -6,13 +6,13 @@
 
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
-#include "chrome/browser/extensions/extension_info_map.h"
 #include "chrome/browser/extensions/extension_renderer_state.h"
 #include "chrome/common/extensions/extension.h"
 #include "chrome/common/extensions/extension_constants.h"
 #include "chrome/common/extensions/permissions/permissions_data.h"
 #include "chrome/common/url_constants.h"
 #include "content/public/browser/resource_request_info.h"
+#include "extensions/browser/info_map.h"
 #include "extensions/common/constants.h"
 #include "net/url_request/url_request.h"
 #include "url/gurl.h"
@@ -79,7 +79,7 @@
 
 // static
 bool WebRequestPermissions::HideRequest(
-    const ExtensionInfoMap* extension_info_map,
+    const extensions::InfoMap* extension_info_map,
     const net::URLRequest* request) {
   // Hide requests from the Chrome WebStore App or signin process.
   const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request);
@@ -106,7 +106,7 @@
 
 // static
 bool WebRequestPermissions::CanExtensionAccessURL(
-    const ExtensionInfoMap* extension_info_map,
+    const extensions::InfoMap* extension_info_map,
     const std::string& extension_id,
     const GURL& url,
     bool crosses_incognito,
diff --git a/chrome/browser/extensions/api/web_request/web_request_permissions.h b/chrome/browser/extensions/api/web_request/web_request_permissions.h
index 6ff0f431..367a3c0 100644
--- a/chrome/browser/extensions/api/web_request/web_request_permissions.h
+++ b/chrome/browser/extensions/api/web_request/web_request_permissions.h
@@ -10,9 +10,12 @@
 
 #include "base/basictypes.h"
 
-class ExtensionInfoMap;
 class GURL;
 
+namespace extensions {
+class InfoMap;
+}
+
 namespace net {
 class URLRequest;
 }
@@ -28,13 +31,13 @@
   };
 
   // Returns true if the request shall not be reported to extensions.
-  static bool HideRequest(const ExtensionInfoMap* extension_info_map,
+  static bool HideRequest(const extensions::InfoMap* extension_info_map,
                           const net::URLRequest* request);
 
   // |host_permission_check| controls how permissions are checked with regard to
   // |url|.
   static bool CanExtensionAccessURL(
-      const ExtensionInfoMap* extension_info_map,
+      const extensions::InfoMap* extension_info_map,
       const std::string& extension_id,
       const GURL& url,
       bool crosses_incognito,
diff --git a/chrome/browser/extensions/api/web_request/web_request_permissions_unittest.cc b/chrome/browser/extensions/api/web_request/web_request_permissions_unittest.cc
index a0eb5e7d..1157807c 100644
--- a/chrome/browser/extensions/api/web_request/web_request_permissions_unittest.cc
+++ b/chrome/browser/extensions/api/web_request/web_request_permissions_unittest.cc
@@ -5,12 +5,12 @@
 #include "chrome/browser/extensions/api/web_request/web_request_permissions.h"
 
 #include "base/message_loop/message_loop.h"
-#include "chrome/browser/extensions/extension_info_map.h"
 #include "chrome/common/extensions/extension_constants.h"
 #include "chrome/common/extensions/extension_test_util.h"
 #include "chrome/test/base/testing_profile.h"
 #include "content/public/browser/resource_request_info.h"
 #include "content/public/test/test_browser_thread_bundle.h"
+#include "extensions/browser/info_map.h"
 #include "net/base/request_priority.h"
 #include "net/url_request/url_request_test_util.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -35,7 +35,7 @@
   scoped_refptr<Extension> permissionless_extension_;
   // This extension has Web Request permissions, and *.com a host permission.
   scoped_refptr<Extension> com_extension_;
-  scoped_refptr<ExtensionInfoMap> extension_info_map_;
+  scoped_refptr<extensions::InfoMap> extension_info_map_;
 
  private:
   content::TestBrowserThreadBundle thread_bundle_;
@@ -60,7 +60,7 @@
                             "ext_id_2",
                             &error);
   ASSERT_TRUE(com_extension_.get()) << error;
-  extension_info_map_ = new ExtensionInfoMap;
+  extension_info_map_ = new extensions::InfoMap;
   extension_info_map_->AddExtension(permissionless_extension_.get(),
                                     base::Time::Now(),
                                     false /*incognito_enabled*/);
diff --git a/chrome/browser/extensions/extension_function.h b/chrome/browser/extensions/extension_function.h
index 2834823..d461c63 100644
--- a/chrome/browser/extensions/extension_function.h
+++ b/chrome/browser/extensions/extension_function.h
@@ -16,10 +16,10 @@
 #include "base/process/process.h"
 #include "base/sequenced_task_runner_helpers.h"
 #include "chrome/browser/extensions/extension_function_histogram_value.h"
-#include "chrome/browser/extensions/extension_info_map.h"
 #include "chrome/common/extensions/extension.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/common/console_message_level.h"
+#include "extensions/browser/info_map.h"
 #include "ipc/ipc_message.h"
 
 class ChromeRenderMessageFilter;
@@ -27,7 +27,6 @@
 class ExtensionFunctionDispatcher;
 class UIThreadExtensionFunction;
 class IOThreadExtensionFunction;
-class QuotaLimitHeuristic;
 
 namespace base {
 class ListValue;
@@ -40,6 +39,10 @@
 class WebContents;
 }
 
+namespace extensions {
+class QuotaLimitHeuristic;
+}
+
 #ifdef NDEBUG
 #define EXTENSION_FUNCTION_VALIDATE(test) do { \
     if (!(test)) { \
@@ -127,9 +130,9 @@
   // instances is passed to the owner of |heuristics|.
   // No quota limiting by default.
   //
-  // Only called once per lifetime of the ExtensionsQuotaService.
+  // Only called once per lifetime of the QuotaService.
   virtual void GetQuotaLimitHeuristics(
-      QuotaLimitHeuristics* heuristics) const {}
+      extensions::QuotaLimitHeuristics* heuristics) const {}
 
   // Called when the quota limit has been exceeded. The default implementation
   // returns an error.
@@ -367,10 +370,10 @@
 
   int routing_id() const { return routing_id_; }
 
-  void set_extension_info_map(const ExtensionInfoMap* extension_info_map) {
+  void set_extension_info_map(const extensions::InfoMap* extension_info_map) {
     extension_info_map_ = extension_info_map;
   }
-  const ExtensionInfoMap* extension_info_map() const {
+  const extensions::InfoMap* extension_info_map() const {
     return extension_info_map_.get();
   }
 
@@ -389,7 +392,7 @@
   base::WeakPtr<ChromeRenderMessageFilter> ipc_sender_;
   int routing_id_;
 
-  scoped_refptr<const ExtensionInfoMap> extension_info_map_;
+  scoped_refptr<const extensions::InfoMap> extension_info_map_;
 };
 
 // Base class for an extension function that runs asynchronously *relative to
diff --git a/chrome/browser/extensions/extension_function_dispatcher.cc b/chrome/browser/extensions/extension_function_dispatcher.cc
index 9fc3be3a..9b5bded 100644
--- a/chrome/browser/extensions/extension_function_dispatcher.cc
+++ b/chrome/browser/extensions/extension_function_dispatcher.cc
@@ -20,7 +20,6 @@
 #include "chrome/browser/extensions/extension_system.h"
 #include "chrome/browser/extensions/extension_util.h"
 #include "chrome/browser/extensions/extension_web_ui.h"
-#include "chrome/browser/extensions/extensions_quota_service.h"
 #include "chrome/browser/extensions/process_map.h"
 #include "chrome/browser/external_protocol/external_protocol_handler.h"
 #include "chrome/browser/profiles/profile.h"
@@ -35,6 +34,7 @@
 #include "content/public/browser/web_contents.h"
 #include "content/public/browser/web_contents_observer.h"
 #include "content/public/common/result_codes.h"
+#include "extensions/browser/quota_service.h"
 #include "extensions/common/extension_api.h"
 #include "ipc/ipc_message.h"
 #include "ipc/ipc_message_macros.h"
@@ -234,7 +234,7 @@
 
 // static
 void ExtensionFunctionDispatcher::DispatchOnIOThread(
-    ExtensionInfoMap* extension_info_map,
+    extensions::InfoMap* extension_info_map,
     void* profile,
     int render_process_id,
     base::WeakPtr<ChromeRenderMessageFilter> ipc_sender,
@@ -272,7 +272,7 @@
   if (!CheckPermissions(function.get(), extension, params, callback))
     return;
 
-  ExtensionsQuotaService* quota = extension_info_map->GetQuotaService();
+  extensions::QuotaService* quota = extension_info_map->GetQuotaService();
   std::string violation_error = quota->Assess(extension->id(),
                                               function.get(),
                                               &params.arguments,
@@ -359,7 +359,7 @@
   if (!CheckPermissions(function.get(), extension, params, callback))
     return;
 
-  ExtensionsQuotaService* quota = service->quota_service();
+  extensions::QuotaService* quota = service->quota_service();
   std::string violation_error = quota->Assess(extension->id(),
                                               function.get(),
                                               &params.arguments,
diff --git a/chrome/browser/extensions/extension_function_dispatcher.h b/chrome/browser/extensions/extension_function_dispatcher.h
index 27af9e1..2bd9192 100644
--- a/chrome/browser/extensions/extension_function_dispatcher.h
+++ b/chrome/browser/extensions/extension_function_dispatcher.h
@@ -15,7 +15,6 @@
 #include "url/gurl.h"
 
 class ChromeRenderMessageFilter;
-class ExtensionInfoMap;
 class Profile;
 struct ExtensionHostMsg_Request_Params;
 
@@ -27,6 +26,7 @@
 namespace extensions {
 class Extension;
 class ExtensionAPI;
+class InfoMap;
 class ProcessMap;
 class WindowController;
 }
@@ -85,7 +85,7 @@
   // Dispatches an IO-thread extension function. Only used for specific
   // functions that must be handled on the IO-thread.
   static void DispatchOnIOThread(
-      ExtensionInfoMap* extension_info_map,
+      extensions::InfoMap* extension_info_map,
       void* profile,
       int render_process_id,
       base::WeakPtr<ChromeRenderMessageFilter> ipc_sender,
diff --git a/chrome/browser/extensions/extension_info_map.cc b/chrome/browser/extensions/extension_info_map.cc
deleted file mode 100644
index 4d4fb22..0000000
--- a/chrome/browser/extensions/extension_info_map.cc
+++ /dev/null
@@ -1,185 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/extensions/extension_info_map.h"
-
-#include "chrome/common/extensions/extension.h"
-#include "chrome/common/extensions/extension_set.h"
-#include "chrome/common/url_constants.h"
-#include "content/public/browser/browser_thread.h"
-#include "extensions/common/constants.h"
-#include "extensions/common/manifest_handlers/incognito_info.h"
-
-using content::BrowserThread;
-using extensions::Extension;
-using extensions::UnloadedExtensionInfo;
-
-namespace {
-
-void CheckOnValidThread() {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
-}
-
-}  // namespace
-
-struct ExtensionInfoMap::ExtraData {
-  // When the extension was installed.
-  base::Time install_time;
-
-  // True if the user has allowed this extension to run in incognito mode.
-  bool incognito_enabled;
-
-  ExtraData();
-  ~ExtraData();
-};
-
-ExtensionInfoMap::ExtraData::ExtraData() : incognito_enabled(false) {}
-
-ExtensionInfoMap::ExtraData::~ExtraData() {}
-
-ExtensionInfoMap::ExtensionInfoMap() : signin_process_id_(-1) {}
-
-const extensions::ProcessMap& ExtensionInfoMap::process_map() const {
-  return process_map_;
-}
-
-void ExtensionInfoMap::AddExtension(const Extension* extension,
-                                    base::Time install_time,
-                                    bool incognito_enabled) {
-  CheckOnValidThread();
-  extensions_.Insert(extension);
-  disabled_extensions_.Remove(extension->id());
-
-  extra_data_[extension->id()].install_time = install_time;
-  extra_data_[extension->id()].incognito_enabled = incognito_enabled;
-}
-
-void ExtensionInfoMap::RemoveExtension(
-    const std::string& extension_id,
-    const UnloadedExtensionInfo::Reason reason) {
-  CheckOnValidThread();
-  const Extension* extension = extensions_.GetByID(extension_id);
-  extra_data_.erase(extension_id);  // we don't care about disabled extra data
-  bool was_uninstalled = (reason != UnloadedExtensionInfo::REASON_DISABLE &&
-                          reason != UnloadedExtensionInfo::REASON_TERMINATE);
-  if (extension) {
-    if (!was_uninstalled)
-      disabled_extensions_.Insert(extension);
-    extensions_.Remove(extension_id);
-  } else if (was_uninstalled) {
-    // If the extension was uninstalled, make sure it's removed from the map of
-    // disabled extensions.
-    disabled_extensions_.Remove(extension_id);
-  } else {
-    // NOTE: This can currently happen if we receive multiple unload
-    // notifications, e.g. setting incognito-enabled state for a
-    // disabled extension (e.g., via sync).  See
-    // http://code.google.com/p/chromium/issues/detail?id=50582 .
-    NOTREACHED() << extension_id;
-  }
-}
-
-base::Time ExtensionInfoMap::GetInstallTime(
-    const std::string& extension_id) const {
-  ExtraDataMap::const_iterator iter = extra_data_.find(extension_id);
-  if (iter != extra_data_.end())
-    return iter->second.install_time;
-  return base::Time();
-}
-
-bool ExtensionInfoMap::IsIncognitoEnabled(
-    const std::string& extension_id) const {
-  // Keep in sync with duplicate in extension_process_manager.cc.
-  ExtraDataMap::const_iterator iter = extra_data_.find(extension_id);
-  if (iter != extra_data_.end())
-    return iter->second.incognito_enabled;
-  return false;
-}
-
-bool ExtensionInfoMap::CanCrossIncognito(const Extension* extension) const {
-  // This is duplicated from ExtensionService :(.
-  return IsIncognitoEnabled(extension->id()) &&
-      !extensions::IncognitoInfo::IsSplitMode(extension);
-}
-
-void ExtensionInfoMap::RegisterExtensionProcess(const std::string& extension_id,
-                                                int process_id,
-                                                int site_instance_id) {
-  if (!process_map_.Insert(extension_id, process_id, site_instance_id)) {
-    NOTREACHED() << "Duplicate extension process registration for: "
-                 << extension_id << "," << process_id << ".";
-  }
-}
-
-void ExtensionInfoMap::UnregisterExtensionProcess(
-    const std::string& extension_id,
-    int process_id,
-    int site_instance_id) {
-  if (!process_map_.Remove(extension_id, process_id, site_instance_id)) {
-    NOTREACHED() << "Unknown extension process registration for: "
-                 << extension_id << "," << process_id << ".";
-  }
-}
-
-void ExtensionInfoMap::UnregisterAllExtensionsInProcess(int process_id) {
-  process_map_.RemoveAllFromProcess(process_id);
-}
-
-void ExtensionInfoMap::GetExtensionsWithAPIPermissionForSecurityOrigin(
-    const GURL& origin,
-    int process_id,
-    extensions::APIPermission::ID permission,
-    ExtensionSet* extensions) const {
-  DCHECK(extensions);
-
-  if (origin.SchemeIs(extensions::kExtensionScheme)) {
-    const std::string& id = origin.host();
-    const Extension* extension = extensions_.GetByID(id);
-    if (extension && extension->HasAPIPermission(permission) &&
-        process_map_.Contains(id, process_id)) {
-      extensions->Insert(extension);
-    }
-    return;
-  }
-
-  ExtensionSet::const_iterator i = extensions_.begin();
-  for (; i != extensions_.end(); ++i) {
-    if ((*i)->web_extent().MatchesSecurityOrigin(origin) &&
-        process_map_.Contains((*i)->id(), process_id) &&
-        (*i)->HasAPIPermission(permission)) {
-      extensions->Insert(*i);
-    }
-  }
-}
-
-bool ExtensionInfoMap::SecurityOriginHasAPIPermission(
-    const GURL& origin, int process_id,
-    extensions::APIPermission::ID permission) const {
-  ExtensionSet extensions;
-  GetExtensionsWithAPIPermissionForSecurityOrigin(
-      origin, process_id, permission, &extensions);
-  return !extensions.is_empty();
-}
-
-ExtensionsQuotaService* ExtensionInfoMap::GetQuotaService() {
-  CheckOnValidThread();
-  if (!quota_service_)
-    quota_service_.reset(new ExtensionsQuotaService());
-  return quota_service_.get();
-}
-
-void ExtensionInfoMap::SetSigninProcess(int process_id) {
-  signin_process_id_ = process_id;
-}
-
-bool ExtensionInfoMap::IsSigninProcess(int process_id) const {
-  return process_id == signin_process_id_;
-}
-
-ExtensionInfoMap::~ExtensionInfoMap() {
-  if (quota_service_) {
-    BrowserThread::DeleteSoon(BrowserThread::IO, FROM_HERE,
-                              quota_service_.release());
-  }
-}
diff --git a/chrome/browser/extensions/extension_info_map.h b/chrome/browser/extensions/extension_info_map.h
deleted file mode 100644
index 53c04f5..0000000
--- a/chrome/browser/extensions/extension_info_map.h
+++ /dev/null
@@ -1,115 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_INFO_MAP_H_
-#define CHROME_BROWSER_EXTENSIONS_EXTENSION_INFO_MAP_H_
-
-#include <string>
-
-#include "base/basictypes.h"
-#include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/time/time.h"
-#include "chrome/browser/extensions/extensions_quota_service.h"
-#include "chrome/browser/extensions/process_map.h"
-#include "chrome/common/extensions/extension_set.h"
-
-namespace extensions {
-class Extension;
-}
-
-// Contains extension data that needs to be accessed on the IO thread. It can
-// be created/destroyed on any thread, but all other methods must be called on
-// the IO thread.
-class ExtensionInfoMap : public base::RefCountedThreadSafe<ExtensionInfoMap> {
- public:
-  ExtensionInfoMap();
-
-  const ExtensionSet& extensions() const { return extensions_; }
-  const ExtensionSet& disabled_extensions() const {
-    return disabled_extensions_;
-  }
-
-  const extensions::ProcessMap& process_map() const;
-
-  // Callback for when new extensions are loaded.
-  void AddExtension(const extensions::Extension* extension,
-                    base::Time install_time,
-                    bool incognito_enabled);
-
-  // Callback for when an extension is unloaded.
-  void RemoveExtension(const std::string& extension_id,
-                       const extensions::UnloadedExtensionInfo::Reason reason);
-
-  // Returns the time the extension was installed, or base::Time() if not found.
-  base::Time GetInstallTime(const std::string& extension_id) const;
-
-  // Returns true if the user has allowed this extension to run in incognito
-  // mode.
-  bool IsIncognitoEnabled(const std::string& extension_id) const;
-
-  // Returns true if the given extension can see events and data from another
-  // sub-profile (incognito to original profile, or vice versa).
-  bool CanCrossIncognito(const extensions::Extension* extension) const;
-
-  // Adds an entry to process_map_.
-  void RegisterExtensionProcess(const std::string& extension_id,
-                                int process_id,
-                                int site_instance_id);
-
-  // Removes an entry from process_map_.
-  void UnregisterExtensionProcess(const std::string& extension_id,
-                                  int process_id,
-                                  int site_instance_id);
-  void UnregisterAllExtensionsInProcess(int process_id);
-
-  // Returns the subset of extensions which has the same |origin| in
-  // |process_id| with the specified |permission|.
-  void GetExtensionsWithAPIPermissionForSecurityOrigin(
-      const GURL& origin,
-      int process_id,
-      extensions::APIPermission::ID permission,
-      ExtensionSet* extensions) const;
-
-  // Returns true if there is exists an extension with the same origin as
-  // |origin| in |process_id| with |permission|.
-  bool SecurityOriginHasAPIPermission(
-      const GURL& origin, int process_id,
-      extensions::APIPermission::ID permission) const;
-
-  ExtensionsQuotaService* GetQuotaService();
-
-  // Keep track of the signin process, so we can restrict extension access to
-  // it.
-  void SetSigninProcess(int process_id);
-  bool IsSigninProcess(int process_id) const;
-
- private:
-  friend class base::RefCountedThreadSafe<ExtensionInfoMap>;
-
-  // Extra dynamic data related to an extension.
-  struct ExtraData;
-  // Map of extension_id to ExtraData.
-  typedef std::map<std::string, ExtraData> ExtraDataMap;
-
-  ~ExtensionInfoMap();
-
-  ExtensionSet extensions_;
-  ExtensionSet disabled_extensions_;
-
-  // Extra data associated with enabled extensions.
-  ExtraDataMap extra_data_;
-
-  // Used by dispatchers to limit API quota for individual extensions.
-  // The ExtensionQutoaService is not thread safe. We need to create and destroy
-  // it on the IO thread.
-  scoped_ptr<ExtensionsQuotaService> quota_service_;
-
-  // Assignment of extensions to processes.
-  extensions::ProcessMap process_map_;
-
-  int signin_process_id_;
-};
-
-#endif  // CHROME_BROWSER_EXTENSIONS_EXTENSION_INFO_MAP_H_
diff --git a/chrome/browser/extensions/extension_info_map_unittest.cc b/chrome/browser/extensions/extension_info_map_unittest.cc
deleted file mode 100644
index dac4e0aa..0000000
--- a/chrome/browser/extensions/extension_info_map_unittest.cc
+++ /dev/null
@@ -1,170 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "base/json/json_file_value_serializer.h"
-#include "base/message_loop/message_loop.h"
-#include "base/path_service.h"
-#include "chrome/browser/extensions/extension_info_map.h"
-#include "chrome/common/chrome_paths.h"
-#include "chrome/common/extensions/extension.h"
-#include "content/public/test/test_browser_thread.h"
-#include "extensions/common/manifest_constants.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-using content::BrowserThread;
-using extensions::APIPermission;
-using extensions::Extension;
-using extensions::Manifest;
-
-namespace keys = extensions::manifest_keys;
-
-namespace {
-
-class ExtensionInfoMapTest : public testing::Test {
- public:
-  ExtensionInfoMapTest()
-      : ui_thread_(BrowserThread::UI, &message_loop_),
-        io_thread_(BrowserThread::IO, &message_loop_) {
-  }
-
- private:
-  base::MessageLoop message_loop_;
-  content::TestBrowserThread ui_thread_;
-  content::TestBrowserThread io_thread_;
-};
-
-// Returns a barebones test Extension object with the given name.
-static scoped_refptr<Extension> CreateExtension(const std::string& name) {
-#if defined(OS_WIN)
-  base::FilePath path(FILE_PATH_LITERAL("c:\\foo"));
-#elif defined(OS_POSIX)
-  base::FilePath path(FILE_PATH_LITERAL("/foo"));
-#endif
-
-  DictionaryValue manifest;
-  manifest.SetString(keys::kVersion, "1.0.0.0");
-  manifest.SetString(keys::kName, name);
-
-  std::string error;
-  scoped_refptr<Extension> extension = Extension::Create(
-      path.AppendASCII(name), Manifest::INVALID_LOCATION, manifest,
-      Extension::NO_FLAGS, &error);
-  EXPECT_TRUE(extension.get()) << error;
-
-  return extension;
-}
-
-static scoped_refptr<Extension> LoadManifest(const std::string& dir,
-                                             const std::string& test_file) {
-  base::FilePath path;
-  PathService::Get(chrome::DIR_TEST_DATA, &path);
-  path = path.AppendASCII("extensions")
-             .AppendASCII(dir)
-             .AppendASCII(test_file);
-
-  JSONFileValueSerializer serializer(path);
-  scoped_ptr<Value> result(serializer.Deserialize(NULL, NULL));
-  if (!result)
-    return NULL;
-
-  std::string error;
-  scoped_refptr<Extension> extension = Extension::Create(
-      path, Manifest::INVALID_LOCATION,
-      *static_cast<DictionaryValue*>(result.get()),
-      Extension::NO_FLAGS, &error);
-  EXPECT_TRUE(extension.get()) << error;
-
-  return extension;
-}
-
-// Test that the ExtensionInfoMap handles refcounting properly.
-TEST_F(ExtensionInfoMapTest, RefCounting) {
-  scoped_refptr<ExtensionInfoMap> info_map(new ExtensionInfoMap());
-
-  // New extensions should have a single reference holding onto them.
-  scoped_refptr<Extension> extension1(CreateExtension("extension1"));
-  scoped_refptr<Extension> extension2(CreateExtension("extension2"));
-  scoped_refptr<Extension> extension3(CreateExtension("extension3"));
-  EXPECT_TRUE(extension1->HasOneRef());
-  EXPECT_TRUE(extension2->HasOneRef());
-  EXPECT_TRUE(extension3->HasOneRef());
-
-  // Add a ref to each extension and give it to the info map.
-  info_map->AddExtension(extension1.get(), base::Time(), false);
-  info_map->AddExtension(extension2.get(), base::Time(), false);
-  info_map->AddExtension(extension3.get(), base::Time(), false);
-
-  // Release extension1, and the info map should have the only ref.
-  const Extension* weak_extension1 = extension1.get();
-  extension1 = NULL;
-  EXPECT_TRUE(weak_extension1->HasOneRef());
-
-  // Remove extension2, and the extension2 object should have the only ref.
-  info_map->RemoveExtension(
-      extension2->id(), extensions::UnloadedExtensionInfo::REASON_UNINSTALL);
-  EXPECT_TRUE(extension2->HasOneRef());
-
-  // Delete the info map, and the extension3 object should have the only ref.
-  info_map = NULL;
-  EXPECT_TRUE(extension3->HasOneRef());
-}
-
-// Tests that we can query a few extension properties from the ExtensionInfoMap.
-TEST_F(ExtensionInfoMapTest, Properties) {
-  scoped_refptr<ExtensionInfoMap> info_map(new ExtensionInfoMap());
-
-  scoped_refptr<Extension> extension1(CreateExtension("extension1"));
-  scoped_refptr<Extension> extension2(CreateExtension("extension2"));
-
-  info_map->AddExtension(extension1.get(), base::Time(), false);
-  info_map->AddExtension(extension2.get(), base::Time(), false);
-
-  EXPECT_EQ(2u, info_map->extensions().size());
-  EXPECT_EQ(extension1.get(), info_map->extensions().GetByID(extension1->id()));
-  EXPECT_EQ(extension2.get(), info_map->extensions().GetByID(extension2->id()));
-}
-
-// Tests CheckURLAccessToExtensionPermission given both extension and app URLs.
-TEST_F(ExtensionInfoMapTest, CheckPermissions) {
-  scoped_refptr<ExtensionInfoMap> info_map(new ExtensionInfoMap());
-
-  scoped_refptr<Extension> app(LoadManifest("manifest_tests",
-                                            "valid_app.json"));
-  scoped_refptr<Extension> extension(LoadManifest("manifest_tests",
-                                                  "tabs_extension.json"));
-
-  GURL app_url("http://www.google.com/mail/foo.html");
-  ASSERT_TRUE(app->is_app());
-  ASSERT_TRUE(app->web_extent().MatchesURL(app_url));
-
-  info_map->AddExtension(app.get(), base::Time(), false);
-  info_map->AddExtension(extension.get(), base::Time(), false);
-
-  // The app should have the notifications permission, either from a
-  // chrome-extension URL or from its web extent.
-  const Extension* match = info_map->extensions().GetExtensionOrAppByURL(
-      app->GetResourceURL("a.html"));
-  EXPECT_TRUE(match &&
-      match->HasAPIPermission(APIPermission::kNotification));
-  match = info_map->extensions().GetExtensionOrAppByURL(app_url);
-  EXPECT_TRUE(match &&
-      match->HasAPIPermission(APIPermission::kNotification));
-  EXPECT_FALSE(match &&
-      match->HasAPIPermission(APIPermission::kTab));
-
-  // The extension should have the tabs permission.
-  match = info_map->extensions().GetExtensionOrAppByURL(
-      extension->GetResourceURL("a.html"));
-  EXPECT_TRUE(match &&
-      match->HasAPIPermission(APIPermission::kTab));
-  EXPECT_FALSE(match &&
-      match->HasAPIPermission(APIPermission::kNotification));
-
-  // Random URL should not have any permissions.
-  GURL evil_url("http://evil.com/a.html");
-  match = info_map->extensions().GetExtensionOrAppByURL(evil_url);
-  EXPECT_FALSE(match);
-}
-
-}  // namespace
diff --git a/chrome/browser/extensions/extension_protocols.cc b/chrome/browser/extensions/extension_protocols.cc
index c638672e..13824e4d 100644
--- a/chrome/browser/extensions/extension_protocols.cc
+++ b/chrome/browser/extensions/extension_protocols.cc
@@ -23,7 +23,6 @@
 #include "base/threading/sequenced_worker_pool.h"
 #include "base/threading/thread_restrictions.h"
 #include "build/build_config.h"
-#include "chrome/browser/extensions/extension_info_map.h"
 #include "chrome/browser/extensions/extension_renderer_state.h"
 #include "chrome/browser/extensions/image_loader.h"
 #include "chrome/common/chrome_paths.h"
@@ -37,6 +36,7 @@
 #include "chrome/common/url_constants.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/resource_request_info.h"
+#include "extensions/browser/info_map.h"
 #include "extensions/common/constants.h"
 #include "extensions/common/extension_resource.h"
 #include "extensions/common/file_util.h"
@@ -314,7 +314,7 @@
 
 bool ExtensionCanLoadInIncognito(const ResourceRequestInfo* info,
                                  const std::string& extension_id,
-                                 ExtensionInfoMap* extension_info_map) {
+                                 extensions::InfoMap* extension_info_map) {
   if (!extension_info_map->IsIncognitoEnabled(extension_id))
     return false;
 
@@ -336,7 +336,7 @@
 bool AllowExtensionResourceLoad(net::URLRequest* request,
                                 bool is_incognito,
                                 const Extension* extension,
-                                ExtensionInfoMap* extension_info_map) {
+                                extensions::InfoMap* extension_info_map) {
   const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request);
 
   // We have seen crashes where info is NULL: crbug.com/52374.
@@ -452,9 +452,8 @@
     : public net::URLRequestJobFactory::ProtocolHandler {
  public:
   ExtensionProtocolHandler(bool is_incognito,
-                           ExtensionInfoMap* extension_info_map)
-      : is_incognito_(is_incognito),
-        extension_info_map_(extension_info_map) {}
+                           extensions::InfoMap* extension_info_map)
+      : is_incognito_(is_incognito), extension_info_map_(extension_info_map) {}
 
   virtual ~ExtensionProtocolHandler() {}
 
@@ -464,7 +463,7 @@
 
  private:
   const bool is_incognito_;
-  ExtensionInfoMap* const extension_info_map_;
+  extensions::InfoMap* const extension_info_map_;
   DISALLOW_COPY_AND_ASSIGN(ExtensionProtocolHandler);
 };
 
@@ -599,6 +598,6 @@
 
 net::URLRequestJobFactory::ProtocolHandler* CreateExtensionProtocolHandler(
     bool is_incognito,
-    ExtensionInfoMap* extension_info_map) {
+    extensions::InfoMap* extension_info_map) {
   return new ExtensionProtocolHandler(is_incognito, extension_info_map);
 }
diff --git a/chrome/browser/extensions/extension_protocols.h b/chrome/browser/extensions/extension_protocols.h
index 2e74e8a..1cc8f1c3 100644
--- a/chrome/browser/extensions/extension_protocols.h
+++ b/chrome/browser/extensions/extension_protocols.h
@@ -7,11 +7,13 @@
 
 #include "net/url_request/url_request_job_factory.h"
 
-class ExtensionInfoMap;
+namespace extensions {
+class InfoMap;
+}
 
 // Creates the handlers for the chrome-extension:// scheme.
 net::URLRequestJobFactory::ProtocolHandler* CreateExtensionProtocolHandler(
     bool is_incognito,
-    ExtensionInfoMap* extension_info_map);
+    extensions::InfoMap* extension_info_map);
 
 #endif  // CHROME_BROWSER_EXTENSIONS_EXTENSION_PROTOCOLS_H_
diff --git a/chrome/browser/extensions/extension_protocols_unittest.cc b/chrome/browser/extensions/extension_protocols_unittest.cc
index 6be3ea3..ede181d 100644
--- a/chrome/browser/extensions/extension_protocols_unittest.cc
+++ b/chrome/browser/extensions/extension_protocols_unittest.cc
@@ -9,7 +9,6 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
 #include "base/values.h"
-#include "chrome/browser/extensions/extension_info_map.h"
 #include "chrome/browser/extensions/extension_protocols.h"
 #include "chrome/common/chrome_paths.h"
 #include "chrome/common/extensions/extension.h"
@@ -17,6 +16,7 @@
 #include "content/public/browser/resource_request_info.h"
 #include "content/public/test/mock_resource_context.h"
 #include "content/public/test/test_browser_thread_bundle.h"
+#include "extensions/browser/info_map.h"
 #include "extensions/common/constants.h"
 #include "net/base/request_priority.h"
 #include "net/url_request/url_request.h"
@@ -94,7 +94,7 @@
 
   virtual void SetUp() OVERRIDE {
     testing::Test::SetUp();
-    extension_info_map_ = new ExtensionInfoMap();
+    extension_info_map_ = new InfoMap();
     net::URLRequestContext* request_context =
         resource_context_.GetRequestContext();
     old_factory_ = request_context->job_factory();
@@ -129,7 +129,7 @@
 
  protected:
   content::TestBrowserThreadBundle thread_bundle_;
-  scoped_refptr<ExtensionInfoMap> extension_info_map_;
+  scoped_refptr<InfoMap> extension_info_map_;
   net::URLRequestJobFactoryImpl job_factory_;
   const net::URLRequestJobFactory* old_factory_;
   net::TestDelegate test_delegate_;
diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc
index 5dbc562b..51954a7e 100644
--- a/chrome/browser/extensions/extension_service.cc
+++ b/chrome/browser/extensions/extension_service.cc
@@ -2547,8 +2547,9 @@
 
       process_map_.RemoveAllFromProcess(process->GetID());
       BrowserThread::PostTask(
-          BrowserThread::IO, FROM_HERE,
-          base::Bind(&ExtensionInfoMap::UnregisterAllExtensionsInProcess,
+          BrowserThread::IO,
+          FROM_HERE,
+          base::Bind(&extensions::InfoMap::UnregisterAllExtensionsInProcess,
                      system_->info_map(),
                      process->GetID()));
       break;
diff --git a/chrome/browser/extensions/extension_service.h b/chrome/browser/extensions/extension_service.h
index 86276c0..6b9cb99 100644
--- a/chrome/browser/extensions/extension_service.h
+++ b/chrome/browser/extensions/extension_service.h
@@ -24,7 +24,6 @@
 #include "chrome/browser/extensions/extension_prefs.h"
 #include "chrome/browser/extensions/extension_process_manager.h"
 #include "chrome/browser/extensions/extension_sync_service.h"
-#include "chrome/browser/extensions/extensions_quota_service.h"
 #include "chrome/browser/extensions/external_provider_interface.h"
 #include "chrome/browser/extensions/management_policy.h"
 #include "chrome/browser/extensions/menu_manager.h"
@@ -39,6 +38,7 @@
 #include "content/public/browser/devtools_agent_host.h"
 #include "content/public/browser/notification_observer.h"
 #include "content/public/browser/notification_registrar.h"
+#include "extensions/browser/quota_service.h"
 #include "extensions/common/manifest.h"
 #include "extensions/common/one_shot_event.h"
 
@@ -454,7 +454,7 @@
   // Note that this may return NULL if autoupdate is not turned on.
   extensions::ExtensionUpdater* updater();
 
-  ExtensionsQuotaService* quota_service() { return &quota_service_; }
+  extensions::QuotaService* quota_service() { return &quota_service_; }
 
   extensions::MenuManager* menu_manager() { return &menu_manager_; }
 
@@ -767,7 +767,7 @@
   bool install_updates_when_idle_;
 
   // Used by dispatchers to limit API quota for individual extensions.
-  ExtensionsQuotaService quota_service_;
+  extensions::QuotaService quota_service_;
 
   // Signaled when all extensions are loaded.
   extensions::OneShotEvent* const ready_;
diff --git a/chrome/browser/extensions/extension_system.cc b/chrome/browser/extensions/extension_system.cc
index b7099d28..a38232f 100644
--- a/chrome/browser/extensions/extension_system.cc
+++ b/chrome/browser/extensions/extension_system.cc
@@ -16,7 +16,6 @@
 #include "chrome/browser/extensions/error_console/error_console.h"
 #include "chrome/browser/extensions/event_router.h"
 #include "chrome/browser/extensions/extension_error_reporter.h"
-#include "chrome/browser/extensions/extension_info_map.h"
 #include "chrome/browser/extensions/extension_pref_store.h"
 #include "chrome/browser/extensions/extension_pref_value_map.h"
 #include "chrome/browser/extensions/extension_pref_value_map_factory.h"
@@ -42,6 +41,7 @@
 #include "chrome/common/extensions/features/feature_channel.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/url_data_source.h"
+#include "extensions/browser/info_map.h"
 #include "extensions/browser/lazy_background_task_queue.h"
 #include "extensions/common/constants.h"
 #include "extensions/common/manifest.h"
@@ -271,9 +271,9 @@
   return user_script_master_.get();
 }
 
-ExtensionInfoMap* ExtensionSystemImpl::Shared::info_map() {
+InfoMap* ExtensionSystemImpl::Shared::info_map() {
   if (!extension_info_map_.get())
-    extension_info_map_ = new ExtensionInfoMap();
+    extension_info_map_ = new InfoMap();
   return extension_info_map_.get();
 }
 
@@ -327,7 +327,7 @@
   if (user_script_master() || extension_service())
     return;  // Already initialized.
 
-  // The ExtensionInfoMap needs to be created before the
+  // The InfoMap needs to be created before the
   // ExtensionProcessManager.
   shared_->info_map();
 
@@ -363,9 +363,7 @@
   return shared_->rules_store();
 }
 
-ExtensionInfoMap* ExtensionSystemImpl::info_map() {
-  return shared_->info_map();
-}
+InfoMap* ExtensionSystemImpl::info_map() { return shared_->info_map(); }
 
 LazyBackgroundTaskQueue* ExtensionSystemImpl::lazy_background_task_queue() {
   return shared_->lazy_background_task_queue();
@@ -400,20 +398,22 @@
   }
   bool incognito_enabled =
       extension_util::IsIncognitoEnabled(extension->id(), extension_service());
-  BrowserThread::PostTask(
-      BrowserThread::IO, FROM_HERE,
-      base::Bind(&ExtensionInfoMap::AddExtension, info_map(),
-                 make_scoped_refptr(extension), install_time,
-                 incognito_enabled));
+  BrowserThread::PostTask(BrowserThread::IO,
+                          FROM_HERE,
+                          base::Bind(&InfoMap::AddExtension,
+                                     info_map(),
+                                     make_scoped_refptr(extension),
+                                     install_time,
+                                     incognito_enabled));
 }
 
 void ExtensionSystemImpl::UnregisterExtensionWithRequestContexts(
     const std::string& extension_id,
     const UnloadedExtensionInfo::Reason reason) {
   BrowserThread::PostTask(
-      BrowserThread::IO, FROM_HERE,
-      base::Bind(&ExtensionInfoMap::RemoveExtension, info_map(),
-                 extension_id, reason));
+      BrowserThread::IO,
+      FROM_HERE,
+      base::Bind(&InfoMap::RemoveExtension, info_map(), extension_id, reason));
 }
 
 }  // namespace extensions
diff --git a/chrome/browser/extensions/extension_system.h b/chrome/browser/extensions/extension_system.h
index 663c176..addf210 100644
--- a/chrome/browser/extensions/extension_system.h
+++ b/chrome/browser/extensions/extension_system.h
@@ -13,7 +13,6 @@
 #include "components/browser_context_keyed_service/browser_context_keyed_service.h"
 #include "extensions/common/one_shot_event.h"
 
-class ExtensionInfoMap;
 class ExtensionProcessManager;
 class ExtensionService;
 class Profile;
@@ -36,6 +35,7 @@
 class ExtensionSystemSharedFactory;
 class ExtensionWarningBadgeService;
 class ExtensionWarningService;
+class InfoMap;
 class LazyBackgroundTaskQueue;
 class ManagementPolicy;
 class NavigationObserver;
@@ -94,7 +94,7 @@
   virtual StateStore* rules_store() = 0;
 
   // Returns the IO-thread-accessible extension data.
-  virtual ExtensionInfoMap* info_map() = 0;
+  virtual InfoMap* info_map() = 0;
 
   // The LazyBackgroundTaskQueue is created at startup.
   virtual LazyBackgroundTaskQueue* lazy_background_task_queue() = 0;
@@ -154,7 +154,7 @@
   virtual StateStore* rules_store() OVERRIDE;  // shared
   virtual LazyBackgroundTaskQueue* lazy_background_task_queue()
       OVERRIDE;  // shared
-  virtual ExtensionInfoMap* info_map() OVERRIDE;  // shared
+  virtual InfoMap* info_map() OVERRIDE; // shared
   virtual EventRouter* event_router() OVERRIDE;  // shared
   virtual ExtensionWarningService* warning_service() OVERRIDE;
   virtual Blacklist* blacklist() OVERRIDE;  // shared
@@ -194,7 +194,7 @@
     ManagementPolicy* management_policy();
     UserScriptMaster* user_script_master();
     Blacklist* blacklist();
-    ExtensionInfoMap* info_map();
+    InfoMap* info_map();
     LazyBackgroundTaskQueue* lazy_background_task_queue();
     EventRouter* event_router();
     ExtensionWarningService* warning_service();
@@ -222,7 +222,7 @@
     scoped_ptr<ExtensionService> extension_service_;
     scoped_ptr<ManagementPolicy> management_policy_;
     // extension_info_map_ needs to outlive extension_process_manager_.
-    scoped_refptr<ExtensionInfoMap> extension_info_map_;
+    scoped_refptr<InfoMap> extension_info_map_;
     scoped_ptr<ExtensionWarningService> extension_warning_service_;
     scoped_ptr<ExtensionWarningBadgeService> extension_warning_badge_service_;
     scoped_ptr<ErrorConsole> error_console_;
diff --git a/chrome/browser/extensions/extensions_quota_service.cc b/chrome/browser/extensions/extensions_quota_service.cc
deleted file mode 100644
index 830c93a..0000000
--- a/chrome/browser/extensions/extensions_quota_service.cc
+++ /dev/null
@@ -1,191 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/extensions/extensions_quota_service.h"
-
-#include "base/message_loop/message_loop.h"
-#include "base/stl_util.h"
-#include "chrome/browser/extensions/extension_function.h"
-#include "extensions/common/error_utils.h"
-
-namespace {
-
-// If the browser stays open long enough, we reset state once a day.
-// Whatever this value is, it should be an order of magnitude longer than
-// the longest interval in any of the QuotaLimitHeuristics in use.
-const int kPurgeIntervalInDays = 1;
-
-const char kOverQuotaError[] = "This request exceeds the * quota.";
-
-}  // namespace
-
-ExtensionsQuotaService::ExtensionsQuotaService() {
-  if (base::MessageLoop::current() != NULL) {  // Null in unit tests.
-    purge_timer_.Start(FROM_HERE,
-                       base::TimeDelta::FromDays(kPurgeIntervalInDays),
-                       this, &ExtensionsQuotaService::Purge);
-  }
-}
-
-ExtensionsQuotaService::~ExtensionsQuotaService() {
-  DCHECK(CalledOnValidThread());
-  purge_timer_.Stop();
-  Purge();
-}
-
-std::string ExtensionsQuotaService::Assess(
-    const std::string& extension_id,
-    ExtensionFunction* function,
-    const base::ListValue* args,
-    const base::TimeTicks& event_time) {
-  DCHECK(CalledOnValidThread());
-
-  if (function->ShouldSkipQuotaLimiting())
-    return std::string();
-
-  // Lookup function list for extension.
-  FunctionHeuristicsMap& functions = function_heuristics_[extension_id];
-
-  // Lookup heuristics for function, create if necessary.
-  QuotaLimitHeuristics& heuristics = functions[function->name()];
-  if (heuristics.empty())
-    function->GetQuotaLimitHeuristics(&heuristics);
-
-  if (heuristics.empty())
-    return std::string();  // No heuristic implies no limit.
-
-  ViolationErrorMap::iterator violation_error =
-      violation_errors_.find(extension_id);
-  if (violation_error != violation_errors_.end())
-    return violation_error->second;  // Repeat offender.
-
-  QuotaLimitHeuristic* failed_heuristic = NULL;
-  for (QuotaLimitHeuristics::iterator heuristic = heuristics.begin();
-       heuristic != heuristics.end(); ++heuristic) {
-    // Apply heuristic to each item (bucket).
-    if (!(*heuristic)->ApplyToArgs(args, event_time)) {
-      failed_heuristic = *heuristic;
-      break;
-    }
-  }
-
-  if (!failed_heuristic)
-    return std::string();
-
-  std::string error = failed_heuristic->GetError();
-  DCHECK_GT(error.length(), 0u);
-
-  PurgeFunctionHeuristicsMap(&functions);
-  function_heuristics_.erase(extension_id);
-  violation_errors_[extension_id] = error;
-  return error;
-}
-
-void ExtensionsQuotaService::PurgeFunctionHeuristicsMap(
-    FunctionHeuristicsMap* map) {
-  FunctionHeuristicsMap::iterator heuristics = map->begin();
-  while (heuristics != map->end()) {
-    STLDeleteElements(&heuristics->second);
-    map->erase(heuristics++);
-  }
-}
-
-void ExtensionsQuotaService::Purge() {
-  DCHECK(CalledOnValidThread());
-  std::map<std::string, FunctionHeuristicsMap>::iterator it =
-      function_heuristics_.begin();
-  for (; it != function_heuristics_.end(); function_heuristics_.erase(it++))
-    PurgeFunctionHeuristicsMap(&it->second);
-}
-
-void QuotaLimitHeuristic::Bucket::Reset(const Config& config,
-    const base::TimeTicks& start) {
-  num_tokens_ = config.refill_token_count;
-  expiration_ = start + config.refill_interval;
-}
-
-void QuotaLimitHeuristic::SingletonBucketMapper::GetBucketsForArgs(
-    const base::ListValue* args,
-    BucketList* buckets) {
-  buckets->push_back(&bucket_);
-}
-
-QuotaLimitHeuristic::QuotaLimitHeuristic(const Config& config,
-                                         BucketMapper* map,
-                                         const std::string& name)
-    : config_(config), bucket_mapper_(map), name_(name) {
-}
-
-QuotaLimitHeuristic::~QuotaLimitHeuristic() {}
-
-bool QuotaLimitHeuristic::ApplyToArgs(const base::ListValue* args,
-    const base::TimeTicks& event_time) {
-  BucketList buckets;
-  bucket_mapper_->GetBucketsForArgs(args, &buckets);
-  for (BucketList::iterator i = buckets.begin(); i != buckets.end(); ++i) {
-    if ((*i)->expiration().is_null())  // A brand new bucket.
-      (*i)->Reset(config_, event_time);
-    if (!Apply(*i, event_time))
-      return false;  // It only takes one to spoil it for everyone.
-  }
-  return true;
-}
-
-std::string QuotaLimitHeuristic::GetError() const {
-  return extensions::ErrorUtils::FormatErrorMessage(kOverQuotaError, name_);
-}
-
-ExtensionsQuotaService::SustainedLimit::SustainedLimit(
-    const base::TimeDelta& sustain,
-    const Config& config,
-    BucketMapper* map,
-    const std::string& name)
-    : QuotaLimitHeuristic(config, map, name),
-      repeat_exhaustion_allowance_(sustain.InSeconds() /
-                                   config.refill_interval.InSeconds()),
-      num_available_repeat_exhaustions_(repeat_exhaustion_allowance_) {
-}
-
-bool ExtensionsQuotaService::TimedLimit::Apply(Bucket* bucket,
-    const base::TimeTicks& event_time) {
-  if (event_time > bucket->expiration())
-    bucket->Reset(config(), event_time);
-
-  return bucket->DeductToken();
-}
-
-bool ExtensionsQuotaService::SustainedLimit::Apply(Bucket* bucket,
-    const base::TimeTicks& event_time) {
-  if (event_time > bucket->expiration()) {
-    // We reset state for this item and start over again if this request breaks
-    // the bad cycle that was previously being tracked.  This occurs if the
-    // state in the bucket expired recently (it has been long enough since the
-    // event that we don't care about the last event), but the bucket still has
-    // tokens (so pressure was not sustained over that time), OR we are more
-    // than 1 full refill interval away from the last event (so even if we used
-    // up all the tokens in the last bucket, nothing happened in the entire
-    // next refill interval, so it doesn't matter).
-    if (bucket->has_tokens() || event_time > bucket->expiration() +
-        config().refill_interval) {
-      bucket->Reset(config(), event_time);
-      num_available_repeat_exhaustions_ = repeat_exhaustion_allowance_;
-    } else if (--num_available_repeat_exhaustions_ > 0) {
-      // The last interval was saturated with requests, and this is the first
-      // event in the next interval. If this happens
-      // repeat_exhaustion_allowance_ times, it's a violation. Reset the bucket
-      // state to start timing from the end of the last interval (and we'll
-      // deduct the token below) so we can detect this each time it happens.
-      bucket->Reset(config(), bucket->expiration());
-    } else {
-      // No allowances left; this request is a violation.
-      return false;
-    }
-  }
-
-  // We can go negative since we check has_tokens when we get to *next* bucket,
-  // and for the small interval all that matters is whether we used up all the
-  // tokens (which is true if num_tokens_ <= 0).
-  bucket->DeductToken();
-  return true;
-}
diff --git a/chrome/browser/extensions/extensions_quota_service.h b/chrome/browser/extensions/extensions_quota_service.h
deleted file mode 100644
index 5644397..0000000
--- a/chrome/browser/extensions/extensions_quota_service.h
+++ /dev/null
@@ -1,238 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// The ExtensionsQuotaService uses heuristics to limit abusive requests
-// made by extensions.  In this model 'items' (e.g individual bookmarks) are
-// represented by a 'Bucket' that holds state for that item for one single
-// interval of time.  The interval of time is defined as 'how long we need to
-// watch an item (for a particular heuristic) before making a decision about
-// quota violations'.  A heuristic is two functions: one mapping input
-// arguments to a unique Bucket (the BucketMapper), and another to determine
-// if a new request involving such an item at a given time is a violation.
-
-#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSIONS_QUOTA_SERVICE_H_
-#define CHROME_BROWSER_EXTENSIONS_EXTENSIONS_QUOTA_SERVICE_H_
-
-#include <list>
-#include <map>
-#include <string>
-
-#include "base/compiler_specific.h"
-#include "base/containers/hash_tables.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/threading/non_thread_safe.h"
-#include "base/time/time.h"
-#include "base/timer/timer.h"
-#include "base/values.h"
-
-class ExtensionFunction;
-class QuotaLimitHeuristic;
-typedef std::list<QuotaLimitHeuristic*> QuotaLimitHeuristics;
-
-namespace extensions {
-class TestResetQuotaFunction;
-}
-
-// The ExtensionsQuotaService takes care that calls to certain extension
-// functions do not exceed predefined quotas.
-//
-// The ExtensionsQuotaService needs to live entirely on one thread, i.e.
-// be created, called and destroyed on the same thread, due to its use
-// of a RepeatingTimer.
-class ExtensionsQuotaService : public base::NonThreadSafe {
- public:
-  // Some concrete heuristics (declared below) that ExtensionFunctions can
-  // use to help the service make decisions about quota violations.
-  class TimedLimit;
-  class SustainedLimit;
-
-  ExtensionsQuotaService();
-  virtual ~ExtensionsQuotaService();
-
-  // Decide whether the invocation of |function| with argument |args| by the
-  // extension specified by |extension_id| results in a quota limit violation.
-  // Returns an error message representing the failure if quota was exceeded,
-  // or empty-string if the request is fine and can proceed.
-  std::string Assess(const std::string& extension_id,
-                     ExtensionFunction* function,
-                     const base::ListValue* args,
-                     const base::TimeTicks& event_time);
-
- private:
-  friend class extensions::TestResetQuotaFunction;
-  typedef std::string ExtensionId;
-  typedef std::string FunctionName;
-  // All QuotaLimitHeuristic instances in this map are owned by us.
-  typedef std::map<FunctionName, QuotaLimitHeuristics> FunctionHeuristicsMap;
-
-  // Purge resets all accumulated data (except |violation_errors_|) as if the
-  // service was just created. Called periodically so we don't consume an
-  // unbounded amount of memory while tracking quota.  Yes, this could mean an
-  // extension gets away with murder if it is timed right, but the extensions
-  // we are trying to limit are ones that consistently violate, so we'll
-  // converge to the correct set.
-  void Purge();
-  void PurgeFunctionHeuristicsMap(FunctionHeuristicsMap* map);
-  base::RepeatingTimer<ExtensionsQuotaService> purge_timer_;
-
-  // Our quota tracking state for extensions that have invoked quota limited
-  // functions.  Each extension is treated separately, so extension ids are the
-  // key for the mapping.  As an extension invokes functions, the map keeps
-  // track of which functions it has invoked and the heuristics for each one.
-  // Each heuristic will be evaluated and ANDed together to get a final answer.
-  std::map<ExtensionId, FunctionHeuristicsMap> function_heuristics_;
-
-  // For now, as soon as an extension violates quota, we don't allow it to
-  // make any more requests to quota limited functions.  This provides a quick
-  // lookup for these extensions that is only stored in memory.
-  typedef std::map<std::string, std::string> ViolationErrorMap;
-  ViolationErrorMap violation_errors_;
-
-  DISALLOW_COPY_AND_ASSIGN(ExtensionsQuotaService);
-};
-
-// A QuotaLimitHeuristic is two things: 1, A heuristic to map extension
-// function arguments to corresponding Buckets for each input arg, and 2) a
-// heuristic for determining if a new event involving a particular item
-// (represented by its Bucket) constitutes a quota violation.
-class QuotaLimitHeuristic {
- public:
-  // Parameters to configure the amount of tokens allotted to individual
-  // Bucket objects (see Below) and how often they are replenished.
-  struct Config {
-    // The maximum number of tokens a bucket can contain, and is refilled to
-    // every epoch.
-    int64 refill_token_count;
-
-    // Specifies how frequently the bucket is logically refilled with tokens.
-    base::TimeDelta refill_interval;
-  };
-
-  // A Bucket is how the heuristic portrays an individual item (since quota
-  // limits are per item) and all associated state for an item that needs to
-  // carry through multiple calls to Apply.  It "holds" tokens, which are
-  // debited and credited in response to new events involving the item being
-  // being represented.  For convenience, instead of actually periodically
-  // refilling buckets they are just 'Reset' on-demand (e.g. when new events
-  // come in). So, a bucket has an expiration to denote it has becomes stale.
-  class Bucket {
-   public:
-    Bucket() : num_tokens_(0) {}
-    // Removes a token from this bucket, and returns true if the bucket had
-    // any tokens in the first place.
-    bool DeductToken() { return num_tokens_-- > 0; }
-
-    // Returns true if this bucket has tokens to deduct.
-    bool has_tokens() const { return num_tokens_ > 0; }
-
-    // Reset this bucket to specification (from internal configuration), to be
-    // valid from |start| until the first refill interval elapses and it needs
-    // to be reset again.
-    void Reset(const Config& config, const base::TimeTicks& start);
-
-    // The time at which the token count and next expiration should be reset,
-    // via a call to Reset.
-    const base::TimeTicks& expiration() { return expiration_; }
-   private:
-    base::TimeTicks expiration_;
-    int64 num_tokens_;
-    DISALLOW_COPY_AND_ASSIGN(Bucket);
-  };
-  typedef std::list<Bucket*> BucketList;
-
-  // A helper interface to retrieve the bucket corresponding to |args| from
-  // the set of buckets (which is typically stored in the BucketMapper itself)
-  // for this QuotaLimitHeuristic.
-  class BucketMapper {
-   public:
-    virtual ~BucketMapper() {}
-    // In most cases, this should simply extract item IDs from the arguments
-    // (e.g for bookmark operations involving an existing item). If a problem
-    // occurs while parsing |args|, the function aborts - buckets may be non-
-    // empty). The expectation is that invalid args and associated errors are
-    // handled by the ExtensionFunction itself so we don't concern ourselves.
-    virtual void GetBucketsForArgs(const base::ListValue* args,
-                                   BucketList* buckets) = 0;
-  };
-
-  // Maps all calls to the same bucket, regardless of |args|, for this
-  // QuotaLimitHeuristic.
-  class SingletonBucketMapper : public BucketMapper {
-   public:
-    SingletonBucketMapper() {}
-    virtual ~SingletonBucketMapper() {}
-    virtual void GetBucketsForArgs(const base::ListValue* args,
-                                   BucketList* buckets) OVERRIDE;
-
-   private:
-    Bucket bucket_;
-    DISALLOW_COPY_AND_ASSIGN(SingletonBucketMapper);
-  };
-
-  // Ownership of |map| is given to the new QuotaLimitHeuristic.
-  QuotaLimitHeuristic(const Config& config,
-                      BucketMapper* map,
-                      const std::string& name);
-  virtual ~QuotaLimitHeuristic();
-
-  // Determines if sufficient quota exists (according to the Apply
-  // implementation of a derived class) to perform an operation with |args|,
-  // based on the history of similar operations with similar arguments (which
-  // is retrieved using the BucketMapper).
-  bool ApplyToArgs(const base::ListValue* args,
-                   const base::TimeTicks& event_time);
-
-  // Returns an error formatted according to this heuristic.
-  std::string GetError() const;
-
- protected:
-  const Config& config() { return config_; }
-
-  // Determine if the new event occurring at |event_time| involving |bucket|
-  // constitutes a quota violation according to this heuristic.
-  virtual bool Apply(Bucket* bucket, const base::TimeTicks& event_time) = 0;
-
- private:
-  friend class QuotaLimitHeuristicTest;
-
-  const Config config_;
-
-  // The mapper used in Map. Cannot be NULL.
-  scoped_ptr<BucketMapper> bucket_mapper_;
-
-  // The name of the heuristic for formatting error messages.
-  std::string name_;
-
-  DISALLOW_COPY_AND_ASSIGN(QuotaLimitHeuristic);
-};
-
-// A simple per-item heuristic to limit the number of events that can occur in
-// a given period of time; e.g "no more than 100 events in an hour".
-class ExtensionsQuotaService::TimedLimit : public QuotaLimitHeuristic {
- public:
-  TimedLimit(const Config& config, BucketMapper* map, const std::string& name)
-      : QuotaLimitHeuristic(config, map, name) {}
-  virtual bool Apply(Bucket* bucket,
-                     const base::TimeTicks& event_time) OVERRIDE;
-};
-
-// A per-item heuristic to limit the number of events that can occur in a
-// period of time over a sustained longer interval. E.g "no more than two
-// events per minute, sustained over 10 minutes".
-class ExtensionsQuotaService::SustainedLimit : public QuotaLimitHeuristic {
- public:
-  SustainedLimit(const base::TimeDelta& sustain,
-                 const Config& config,
-                 BucketMapper* map,
-                 const std::string& name);
-  virtual bool Apply(Bucket* bucket,
-                     const base::TimeTicks& event_time) OVERRIDE;
- private:
-  // Specifies how long exhaustion of buckets is allowed to continue before
-  // denying requests.
-  const int64 repeat_exhaustion_allowance_;
-  int64 num_available_repeat_exhaustions_;
-};
-
-#endif  // CHROME_BROWSER_EXTENSIONS_EXTENSIONS_QUOTA_SERVICE_H_
diff --git a/chrome/browser/extensions/extensions_quota_service_unittest.cc b/chrome/browser/extensions/extensions_quota_service_unittest.cc
deleted file mode 100644
index a0438ff3..0000000
--- a/chrome/browser/extensions/extensions_quota_service_unittest.cc
+++ /dev/null
@@ -1,415 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "base/message_loop/message_loop.h"
-#include "base/process/process.h"
-#include "base/stl_util.h"
-#include "base/strings/string_util.h"
-#include "chrome/browser/extensions/extension_function.h"
-#include "chrome/browser/extensions/extensions_quota_service.h"
-#include "content/public/test/test_browser_thread.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-using base::TimeDelta;
-using base::TimeTicks;
-using content::BrowserThread;
-
-typedef QuotaLimitHeuristic::Bucket Bucket;
-typedef QuotaLimitHeuristic::Config Config;
-typedef QuotaLimitHeuristic::BucketList BucketList;
-typedef ExtensionsQuotaService::TimedLimit TimedLimit;
-typedef ExtensionsQuotaService::SustainedLimit SustainedLimit;
-
-namespace {
-
-const char kGenericName[] = "name";
-const Config kFrozenConfig = { 0, TimeDelta::FromDays(0) };
-const Config k2PerMinute = { 2, TimeDelta::FromMinutes(1) };
-const Config k20PerHour = { 20, TimeDelta::FromHours(1) };
-const TimeTicks kStartTime = TimeTicks();
-const TimeTicks k1MinuteAfterStart = kStartTime + TimeDelta::FromMinutes(1);
-
-class Mapper : public QuotaLimitHeuristic::BucketMapper {
- public:
-  Mapper() {}
-  virtual ~Mapper() { STLDeleteValues(&buckets_); }
-  virtual void GetBucketsForArgs(const base::ListValue* args,
-                                 BucketList* buckets) OVERRIDE {
-    for (size_t i = 0; i < args->GetSize(); i++) {
-      int id;
-      ASSERT_TRUE(args->GetInteger(i, &id));
-      if (buckets_.find(id) == buckets_.end())
-        buckets_[id] = new Bucket();
-      buckets->push_back(buckets_[id]);
-    }
-  }
- private:
-  typedef std::map<int, Bucket*> BucketMap;
-  BucketMap buckets_;
-  DISALLOW_COPY_AND_ASSIGN(Mapper);
-};
-
-class MockMapper : public QuotaLimitHeuristic::BucketMapper {
- public:
-  virtual void GetBucketsForArgs(const base::ListValue* args,
-                                 BucketList* buckets) OVERRIDE {
-  }
-};
-
-class MockFunction : public ExtensionFunction {
- public:
-  explicit MockFunction(const std::string& name) { set_name(name); }
-
-  virtual void SetArgs(const base::ListValue* args) OVERRIDE {}
-  virtual const std::string GetError() OVERRIDE { return std::string(); }
-  virtual void SetError(const std::string& error) OVERRIDE {}
-  virtual void Run() OVERRIDE {}
-  virtual void Destruct() const OVERRIDE { delete this; }
-  virtual bool RunImpl() OVERRIDE { return true; }
-  virtual void SendResponse(bool) OVERRIDE { }
-
- protected:
-  virtual ~MockFunction() {}
-};
-
-class TimedLimitMockFunction : public MockFunction {
- public:
-  explicit TimedLimitMockFunction(const std::string& name)
-      : MockFunction(name) {}
-  virtual void GetQuotaLimitHeuristics(
-      QuotaLimitHeuristics* heuristics) const OVERRIDE {
-    heuristics->push_back(
-        new TimedLimit(k2PerMinute, new Mapper(), kGenericName));
-  }
-
- private:
-  virtual ~TimedLimitMockFunction() {}
-};
-
-class ChainedLimitsMockFunction : public MockFunction {
- public:
-  explicit ChainedLimitsMockFunction(const std::string& name)
-      : MockFunction(name) {}
-  virtual void GetQuotaLimitHeuristics(
-      QuotaLimitHeuristics* heuristics) const OVERRIDE {
-    // No more than 2 per minute sustained over 5 minutes.
-    heuristics->push_back(new SustainedLimit(
-        TimeDelta::FromMinutes(5), k2PerMinute, new Mapper(), kGenericName));
-    // No more than 20 per hour.
-    heuristics->push_back(
-        new TimedLimit(k20PerHour, new Mapper(), kGenericName));
-  }
-
- private:
-  virtual ~ChainedLimitsMockFunction() {}
-};
-
-class FrozenMockFunction : public MockFunction {
- public:
-  explicit FrozenMockFunction(const std::string& name) : MockFunction(name) {}
-  virtual void GetQuotaLimitHeuristics(
-      QuotaLimitHeuristics* heuristics) const OVERRIDE {
-    heuristics->push_back(
-        new TimedLimit(kFrozenConfig, new Mapper(), kGenericName));
-  }
-
- private:
-  virtual ~FrozenMockFunction() {}
-};
-}  // namespace
-
-class ExtensionsQuotaServiceTest : public testing::Test {
- public:
-  ExtensionsQuotaServiceTest()
-      : extension_a_("a"),
-        extension_b_("b"),
-        extension_c_("c"),
-        loop_(),
-        ui_thread_(BrowserThread::UI, &loop_) {
-  }
-  virtual void SetUp() {
-    service_.reset(new ExtensionsQuotaService());
-  }
-  virtual void TearDown() {
-    loop_.RunUntilIdle();
-    service_.reset();
-  }
- protected:
-  std::string extension_a_;
-  std::string extension_b_;
-  std::string extension_c_;
-  scoped_ptr<ExtensionsQuotaService> service_;
-  base::MessageLoop loop_;
-  content::TestBrowserThread ui_thread_;
-};
-
-class QuotaLimitHeuristicTest : public testing::Test {
- public:
-  static void DoMoreThan2PerMinuteFor5Minutes(const TimeTicks& start_time,
-                                              QuotaLimitHeuristic* lim,
-                                              Bucket* b,
-                                              int an_unexhausted_minute) {
-    for (int i = 0; i < 5; i++) {
-      // Perform one operation in each minute.
-      int m = i * 60;
-      EXPECT_TRUE(lim->Apply(b, start_time + TimeDelta::FromSeconds(10 + m)));
-      EXPECT_TRUE(b->has_tokens());
-
-      if (i == an_unexhausted_minute)
-        continue;  // Don't exhaust all tokens this minute.
-
-      EXPECT_TRUE(lim->Apply(b, start_time + TimeDelta::FromSeconds(15 + m)));
-      EXPECT_FALSE(b->has_tokens());
-
-      // These are OK because we haven't exhausted all buckets.
-      EXPECT_TRUE(lim->Apply(b, start_time + TimeDelta::FromSeconds(20 + m)));
-      EXPECT_FALSE(b->has_tokens());
-      EXPECT_TRUE(lim->Apply(b, start_time + TimeDelta::FromSeconds(50 + m)));
-      EXPECT_FALSE(b->has_tokens());
-    }
-  }
-};
-
-TEST_F(QuotaLimitHeuristicTest, Timed) {
-  TimedLimit lim(k2PerMinute, new MockMapper(), kGenericName);
-  Bucket b;
-
-  b.Reset(k2PerMinute, kStartTime);
-  EXPECT_TRUE(lim.Apply(&b, kStartTime));
-  EXPECT_TRUE(b.has_tokens());
-  EXPECT_TRUE(lim.Apply(&b, kStartTime + TimeDelta::FromSeconds(30)));
-  EXPECT_FALSE(b.has_tokens());
-  EXPECT_FALSE(lim.Apply(&b,  k1MinuteAfterStart));
-
-  b.Reset(k2PerMinute, kStartTime);
-  EXPECT_TRUE(lim.Apply(&b, k1MinuteAfterStart - TimeDelta::FromSeconds(1)));
-  EXPECT_TRUE(lim.Apply(&b, k1MinuteAfterStart));
-  EXPECT_TRUE(lim.Apply(&b, k1MinuteAfterStart + TimeDelta::FromSeconds(1)));
-  EXPECT_TRUE(lim.Apply(&b, k1MinuteAfterStart + TimeDelta::FromSeconds(2)));
-  EXPECT_FALSE(lim.Apply(&b, k1MinuteAfterStart + TimeDelta::FromSeconds(3)));
-}
-
-TEST_F(QuotaLimitHeuristicTest, Sustained) {
-  SustainedLimit lim(
-      TimeDelta::FromMinutes(5), k2PerMinute, new MockMapper(), kGenericName);
-  Bucket bucket;
-
-  bucket.Reset(k2PerMinute, kStartTime);
-  DoMoreThan2PerMinuteFor5Minutes(kStartTime, &lim, &bucket, -1);
-  // This straw breaks the camel's back.
-  EXPECT_FALSE(lim.Apply(&bucket, kStartTime + TimeDelta::FromMinutes(6)));
-
-  // The heuristic resets itself on a safe request.
-  EXPECT_TRUE(lim.Apply(&bucket, kStartTime + TimeDelta::FromDays(1)));
-
-  // Do the same as above except don't exhaust final bucket.
-  bucket.Reset(k2PerMinute, kStartTime);
-  DoMoreThan2PerMinuteFor5Minutes(kStartTime, &lim, &bucket, -1);
-  EXPECT_TRUE(lim.Apply(&bucket, kStartTime + TimeDelta::FromMinutes(7)));
-
-  // Do the same as above except don't exhaust the 3rd (w.l.o.g) bucket.
-  bucket.Reset(k2PerMinute, kStartTime);
-  DoMoreThan2PerMinuteFor5Minutes(kStartTime, &lim, &bucket, 3);
-  // If the 3rd bucket were exhausted, this would fail (see first test).
-  EXPECT_TRUE(lim.Apply(&bucket, kStartTime + TimeDelta::FromMinutes(6)));
-}
-
-TEST_F(ExtensionsQuotaServiceTest, NoHeuristic) {
-  scoped_refptr<MockFunction> f(new MockFunction("foo"));
-  base::ListValue args;
-  EXPECT_EQ("", service_->Assess(extension_a_, f.get(), &args, kStartTime));
-}
-
-TEST_F(ExtensionsQuotaServiceTest, FrozenHeuristic) {
-  scoped_refptr<MockFunction> f(new FrozenMockFunction("foo"));
-  base::ListValue args;
-  args.Append(new base::FundamentalValue(1));
-  EXPECT_NE("", service_->Assess(extension_a_, f.get(), &args, kStartTime));
-}
-
-TEST_F(ExtensionsQuotaServiceTest, SingleHeuristic) {
-  scoped_refptr<MockFunction> f(new TimedLimitMockFunction("foo"));
-  base::ListValue args;
-  args.Append(new base::FundamentalValue(1));
-  EXPECT_EQ("", service_->Assess(extension_a_, f.get(), &args, kStartTime));
-  EXPECT_EQ("",
-            service_->Assess(extension_a_,
-                             f.get(),
-                             &args,
-                             kStartTime + TimeDelta::FromSeconds(10)));
-  EXPECT_NE("",
-            service_->Assess(extension_a_,
-                             f.get(),
-                             &args,
-                             kStartTime + TimeDelta::FromSeconds(15)));
-
-  base::ListValue args2;
-  args2.Append(new base::FundamentalValue(1));
-  args2.Append(new base::FundamentalValue(2));
-  EXPECT_EQ("", service_->Assess(extension_b_, f.get(), &args2, kStartTime));
-  EXPECT_EQ("",
-            service_->Assess(extension_b_,
-                             f.get(),
-                             &args2,
-                             kStartTime + TimeDelta::FromSeconds(10)));
-
-  TimeDelta peace = TimeDelta::FromMinutes(30);
-  EXPECT_EQ("",
-            service_->Assess(extension_b_, f.get(), &args, kStartTime + peace));
-  EXPECT_EQ("",
-            service_->Assess(extension_b_,
-                             f.get(),
-                             &args,
-                             kStartTime + peace + TimeDelta::FromSeconds(10)));
-  EXPECT_NE("",
-            service_->Assess(extension_b_,
-                             f.get(),
-                             &args2,
-                             kStartTime + peace + TimeDelta::FromSeconds(15)));
-
-  // Test that items are independent.
-  base::ListValue args3;
-  args3.Append(new base::FundamentalValue(3));
-  EXPECT_EQ("", service_->Assess(extension_c_, f.get(), &args, kStartTime));
-  EXPECT_EQ("",
-            service_->Assess(extension_c_,
-                             f.get(),
-                             &args3,
-                             kStartTime + TimeDelta::FromSeconds(10)));
-  EXPECT_EQ("",
-            service_->Assess(extension_c_,
-                             f.get(),
-                             &args,
-                             kStartTime + TimeDelta::FromSeconds(15)));
-  EXPECT_EQ("",
-            service_->Assess(extension_c_,
-                             f.get(),
-                             &args3,
-                             kStartTime + TimeDelta::FromSeconds(20)));
-  EXPECT_NE("",
-            service_->Assess(extension_c_,
-                             f.get(),
-                             &args,
-                             kStartTime + TimeDelta::FromSeconds(25)));
-  EXPECT_NE("",
-            service_->Assess(extension_c_,
-                             f.get(),
-                             &args3,
-                             kStartTime + TimeDelta::FromSeconds(30)));
-}
-
-TEST_F(ExtensionsQuotaServiceTest, ChainedHeuristics) {
-  scoped_refptr<MockFunction> f(new ChainedLimitsMockFunction("foo"));
-  base::ListValue args;
-  args.Append(new base::FundamentalValue(1));
-
-  // First, test that the low limit can be avoided but the higher one is hit.
-  // One event per minute for 20 minutes comes in under the sustained limit,
-  // but is equal to the timed limit.
-  for (int i = 0; i < 20; i++) {
-    EXPECT_EQ(
-        "",
-        service_->Assess(extension_a_,
-                         f.get(),
-                         &args,
-                         kStartTime + TimeDelta::FromSeconds(10 + i * 60)));
-  }
-
-  // This will bring us to 21 events in an hour, which is a violation.
-  EXPECT_NE("",
-            service_->Assess(extension_a_,
-                             f.get(),
-                             &args,
-                             kStartTime + TimeDelta::FromMinutes(30)));
-
-  // Now, check that we can still hit the lower limit.
-  for (int i = 0; i < 5; i++) {
-    EXPECT_EQ(
-        "",
-        service_->Assess(extension_b_,
-                         f.get(),
-                         &args,
-                         kStartTime + TimeDelta::FromSeconds(10 + i * 60)));
-    EXPECT_EQ(
-        "",
-        service_->Assess(extension_b_,
-                         f.get(),
-                         &args,
-                         kStartTime + TimeDelta::FromSeconds(15 + i * 60)));
-    EXPECT_EQ(
-        "",
-        service_->Assess(extension_b_,
-                         f.get(),
-                         &args,
-                         kStartTime + TimeDelta::FromSeconds(20 + i * 60)));
-  }
-
-  EXPECT_NE("",
-            service_->Assess(extension_b_,
-                             f.get(),
-                             &args,
-                             kStartTime + TimeDelta::FromMinutes(6)));
-}
-
-TEST_F(ExtensionsQuotaServiceTest, MultipleFunctionsDontInterfere) {
-  scoped_refptr<MockFunction> f(new TimedLimitMockFunction("foo"));
-  scoped_refptr<MockFunction> g(new TimedLimitMockFunction("bar"));
-
-  base::ListValue args_f;
-  base::ListValue args_g;
-  args_f.Append(new base::FundamentalValue(1));
-  args_g.Append(new base::FundamentalValue(2));
-
-  EXPECT_EQ("", service_->Assess(extension_a_, f.get(), &args_f, kStartTime));
-  EXPECT_EQ("", service_->Assess(extension_a_, g.get(), &args_g, kStartTime));
-  EXPECT_EQ("",
-            service_->Assess(extension_a_,
-                             f.get(),
-                             &args_f,
-                             kStartTime + TimeDelta::FromSeconds(10)));
-  EXPECT_EQ("",
-            service_->Assess(extension_a_,
-                             g.get(),
-                             &args_g,
-                             kStartTime + TimeDelta::FromSeconds(10)));
-  EXPECT_NE("",
-            service_->Assess(extension_a_,
-                             f.get(),
-                             &args_f,
-                             kStartTime + TimeDelta::FromSeconds(15)));
-  EXPECT_NE("",
-            service_->Assess(extension_a_,
-                             g.get(),
-                             &args_g,
-                             kStartTime + TimeDelta::FromSeconds(15)));
-}
-
-TEST_F(ExtensionsQuotaServiceTest, ViolatorsWillBeViolators) {
-  scoped_refptr<MockFunction> f(new TimedLimitMockFunction("foo"));
-  scoped_refptr<MockFunction> g(new TimedLimitMockFunction("bar"));
-  base::ListValue arg;
-  arg.Append(new base::FundamentalValue(1));
-  EXPECT_EQ("", service_->Assess(extension_a_, f.get(), &arg, kStartTime));
-  EXPECT_EQ("",
-            service_->Assess(extension_a_,
-                             f.get(),
-                             &arg,
-                             kStartTime + TimeDelta::FromSeconds(10)));
-  EXPECT_NE("",
-            service_->Assess(extension_a_,
-                             f.get(),
-                             &arg,
-                             kStartTime + TimeDelta::FromSeconds(15)));
-
-  // We don't allow this extension to use quota limited functions even if they
-  // wait a while.
-  EXPECT_NE(
-      "",
-      service_->Assess(
-          extension_a_, f.get(), &arg, kStartTime + TimeDelta::FromDays(1)));
-  EXPECT_NE(
-      "",
-      service_->Assess(
-          extension_a_, g.get(), &arg, kStartTime + TimeDelta::FromDays(1)));
-}
diff --git a/chrome/browser/extensions/test_extension_system.cc b/chrome/browser/extensions/test_extension_system.cc
index a628a9f..24d57b8 100644
--- a/chrome/browser/extensions/test_extension_system.cc
+++ b/chrome/browser/extensions/test_extension_system.cc
@@ -9,7 +9,6 @@
 #include "chrome/browser/extensions/blacklist.h"
 #include "chrome/browser/extensions/error_console/error_console.h"
 #include "chrome/browser/extensions/event_router.h"
-#include "chrome/browser/extensions/extension_info_map.h"
 #include "chrome/browser/extensions/extension_pref_value_map.h"
 #include "chrome/browser/extensions/extension_pref_value_map_factory.h"
 #include "chrome/browser/extensions/extension_prefs.h"
@@ -25,6 +24,7 @@
 #include "chrome/browser/value_store/testing_value_store.h"
 #include "chrome/common/chrome_switches.h"
 #include "content/public/browser/browser_thread.h"
+#include "extensions/browser/info_map.h"
 
 using content::BrowserThread;
 
@@ -33,9 +33,8 @@
 TestExtensionSystem::TestExtensionSystem(Profile* profile)
     : profile_(profile),
       value_store_(NULL),
-      info_map_(new ExtensionInfoMap()),
-      error_console_(new ErrorConsole(profile, NULL)) {
-}
+      info_map_(new InfoMap()),
+      error_console_(new ErrorConsole(profile, NULL)) {}
 
 TestExtensionSystem::~TestExtensionSystem() {
 }
@@ -133,9 +132,7 @@
   return state_store_.get();
 }
 
-ExtensionInfoMap* TestExtensionSystem::info_map() {
-  return info_map_.get();
-}
+InfoMap* TestExtensionSystem::info_map() { return info_map_.get(); }
 
 LazyBackgroundTaskQueue*
 TestExtensionSystem::lazy_background_task_queue() {
diff --git a/chrome/browser/extensions/test_extension_system.h b/chrome/browser/extensions/test_extension_system.h
index cab117bc..6ae064c7 100644
--- a/chrome/browser/extensions/test_extension_system.h
+++ b/chrome/browser/extensions/test_extension_system.h
@@ -64,7 +64,7 @@
   virtual StateStore* state_store() OVERRIDE;
   virtual StateStore* rules_store() OVERRIDE;
   TestingValueStore* value_store() { return value_store_; }
-  virtual ExtensionInfoMap* info_map() OVERRIDE;
+  virtual InfoMap* info_map() OVERRIDE;
   virtual LazyBackgroundTaskQueue* lazy_background_task_queue() OVERRIDE;
   virtual EventRouter* event_router() OVERRIDE;
   virtual ExtensionWarningService* warning_service() OVERRIDE;
@@ -93,7 +93,7 @@
   scoped_ptr<ManagementPolicy> management_policy_;
   scoped_ptr<ExtensionService> extension_service_;
   scoped_ptr<ExtensionProcessManager> extension_process_manager_;
-  scoped_refptr<ExtensionInfoMap> info_map_;
+  scoped_refptr<InfoMap> info_map_;
   scoped_ptr<ErrorConsole> error_console_;
   OneShotEvent ready_;
 };
diff --git a/chrome/browser/extensions/user_script_master.h b/chrome/browser/extensions/user_script_master.h
index 44aeb93..76f01fd6 100644
--- a/chrome/browser/extensions/user_script_master.h
+++ b/chrome/browser/extensions/user_script_master.h
@@ -14,7 +14,6 @@
 #include "base/memory/scoped_ptr.h"
 #include "base/memory/shared_memory.h"
 #include "base/strings/string_piece.h"
-#include "chrome/browser/extensions/extension_info_map.h"
 #include "chrome/common/extensions/extension_messages.h"
 #include "chrome/common/extensions/extension_set.h"
 #include "content/public/browser/browser_thread.h"
diff --git a/chrome/browser/nacl_host/nacl_browser_delegate_impl.cc b/chrome/browser/nacl_host/nacl_browser_delegate_impl.cc
index 342e05a..7f160177 100644
--- a/chrome/browser/nacl_host/nacl_browser_delegate_impl.cc
+++ b/chrome/browser/nacl_host/nacl_browser_delegate_impl.cc
@@ -9,7 +9,6 @@
 #include "base/strings/string_util.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/component_updater/pnacl/pnacl_component_installer.h"
-#include "chrome/browser/extensions/extension_info_map.h"
 #include "chrome/browser/extensions/extension_system.h"
 #include "chrome/browser/nacl_host/nacl_infobar_delegate.h"
 #include "chrome/browser/renderer_host/pepper/chrome_browser_pepper_host_factory.h"
@@ -20,6 +19,7 @@
 #include "chrome/common/extensions/manifest_handlers/shared_module_info.h"
 #include "chrome/common/logging_chrome.h"
 #include "content/public/browser/browser_thread.h"
+#include "extensions/browser/info_map.h"
 #include "extensions/common/constants.h"
 #include "extensions/common/url_pattern.h"
 #include "ppapi/c/private/ppb_nacl_private.h"
@@ -27,10 +27,8 @@
 using extensions::SharedModuleInfo;
 
 NaClBrowserDelegateImpl::NaClBrowserDelegateImpl(
-    ExtensionInfoMap* extension_info_map)
-    : extension_info_map_(extension_info_map),
-      inverse_debug_patterns_(false) {
-}
+    extensions::InfoMap* extension_info_map)
+    : extension_info_map_(extension_info_map), inverse_debug_patterns_(false) {}
 
 NaClBrowserDelegateImpl::~NaClBrowserDelegateImpl() {
 }
diff --git a/chrome/browser/nacl_host/nacl_browser_delegate_impl.h b/chrome/browser/nacl_host/nacl_browser_delegate_impl.h
index de75b82..b93b7590 100644
--- a/chrome/browser/nacl_host/nacl_browser_delegate_impl.h
+++ b/chrome/browser/nacl_host/nacl_browser_delegate_impl.h
@@ -6,12 +6,12 @@
 #define CHROME_BROWSER_NACL_HOST_NACL_BROWSER_DELEGATE_IMPL_H_
 
 #include "base/compiler_specific.h"
-#include "chrome/browser/extensions/extension_info_map.h"
 #include "components/nacl/common/nacl_browser_delegate.h"
+#include "extensions/browser/info_map.h"
 
 class NaClBrowserDelegateImpl : public NaClBrowserDelegate {
  public:
-  explicit NaClBrowserDelegateImpl(ExtensionInfoMap* extension_info_map);
+  explicit NaClBrowserDelegateImpl(extensions::InfoMap* extension_info_map);
   virtual ~NaClBrowserDelegateImpl();
 
   virtual void ShowNaClInfobar(int render_process_id, int render_view_id,
@@ -31,7 +31,7 @@
   virtual bool URLMatchesDebugPatterns(const GURL& manifest_url) OVERRIDE;
 
  private:
-  scoped_refptr<ExtensionInfoMap> extension_info_map_;
+  scoped_refptr<extensions::InfoMap> extension_info_map_;
   std::vector<URLPattern> debug_patterns_;
   bool inverse_debug_patterns_;
   DISALLOW_COPY_AND_ASSIGN(NaClBrowserDelegateImpl);
diff --git a/chrome/browser/nacl_host/nacl_process_host.h b/chrome/browser/nacl_host/nacl_process_host.h
index 6db00bc3..82a4f73 100644
--- a/chrome/browser/nacl_host/nacl_process_host.h
+++ b/chrome/browser/nacl_host/nacl_process_host.h
@@ -22,7 +22,6 @@
 #include "url/gurl.h"
 
 class CommandLine;
-class ExtensionInfoMap;
 class NaClHostMessageFilter;
 
 namespace content {
diff --git a/chrome/browser/net/chrome_network_delegate.cc b/chrome/browser/net/chrome_network_delegate.cc
index ffb7959..959d2ab8 100644
--- a/chrome/browser/net/chrome_network_delegate.cc
+++ b/chrome/browser/net/chrome_network_delegate.cc
@@ -25,7 +25,6 @@
 #include "chrome/browser/extensions/api/proxy/proxy_api.h"
 #include "chrome/browser/extensions/api/web_request/web_request_api.h"
 #include "chrome/browser/extensions/event_router_forwarder.h"
-#include "chrome/browser/extensions/extension_info_map.h"
 #include "chrome/browser/extensions/extension_process_manager.h"
 #include "chrome/browser/extensions/extension_system.h"
 #include "chrome/browser/google/google_util.h"
@@ -41,6 +40,7 @@
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/render_view_host.h"
 #include "content/public/browser/resource_request_info.h"
+#include "extensions/browser/info_map.h"
 #include "extensions/common/constants.h"
 #include "net/base/host_port_pair.h"
 #include "net/base/net_errors.h"
@@ -320,7 +320,7 @@
 ChromeNetworkDelegate::~ChromeNetworkDelegate() {}
 
 void ChromeNetworkDelegate::set_extension_info_map(
-    ExtensionInfoMap* extension_info_map) {
+    extensions::InfoMap* extension_info_map) {
   extension_info_map_ = extension_info_map;
 }
 
diff --git a/chrome/browser/net/chrome_network_delegate.h b/chrome/browser/net/chrome_network_delegate.h
index 469d0b6..2aa2c45 100644
--- a/chrome/browser/net/chrome_network_delegate.h
+++ b/chrome/browser/net/chrome_network_delegate.h
@@ -17,7 +17,6 @@
 
 class ClientHints;
 class CookieSettings;
-class ExtensionInfoMap;
 class PrefService;
 template<class T> class PrefMember;
 
@@ -35,6 +34,7 @@
 
 namespace extensions {
 class EventRouterForwarder;
+class InfoMap;
 }
 
 namespace net {
@@ -58,7 +58,7 @@
 
   // Not inlined because we assign a scoped_refptr, which requires us to include
   // the header file.
-  void set_extension_info_map(ExtensionInfoMap* extension_info_map);
+  void set_extension_info_map(extensions::InfoMap* extension_info_map);
 
   void set_url_blacklist_manager(
       const policy::URLBlacklistManager* url_blacklist_manager) {
@@ -188,7 +188,7 @@
   base::FilePath profile_path_;
   scoped_refptr<CookieSettings> cookie_settings_;
 
-  scoped_refptr<ExtensionInfoMap> extension_info_map_;
+  scoped_refptr<extensions::InfoMap> extension_info_map_;
 
   scoped_ptr<chrome_browser_net::ConnectInterceptor> connect_interceptor_;
 
diff --git a/chrome/browser/notifications/desktop_notification_service.cc b/chrome/browser/notifications/desktop_notification_service.cc
index 5c21338a..6fbaa2a6 100644
--- a/chrome/browser/notifications/desktop_notification_service.cc
+++ b/chrome/browser/notifications/desktop_notification_service.cc
@@ -15,7 +15,6 @@
 #include "chrome/browser/content_settings/host_content_settings_map.h"
 #include "chrome/browser/extensions/api/notifications/notifications_api.h"
 #include "chrome/browser/extensions/event_router.h"
-#include "chrome/browser/extensions/extension_info_map.h"
 #include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/extensions/extension_system.h"
 #include "chrome/browser/infobars/confirm_infobar_delegate.h"
@@ -38,6 +37,7 @@
 #include "content/public/browser/render_view_host.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/common/show_desktop_notification_params.h"
+#include "extensions/browser/info_map.h"
 #include "extensions/common/constants.h"
 #include "grit/browser_resources.h"
 #include "grit/chromium_strings.h"
@@ -516,7 +516,7 @@
   // is allowed by an extension.
   if (NotificationUIManager::DelegatesToMessageCenter() ||
       origin.SchemeIs(extensions::kExtensionScheme)) {
-    ExtensionInfoMap* extension_info_map =
+    extensions::InfoMap* extension_info_map =
         extensions::ExtensionSystem::Get(profile_)->info_map();
     if (extension_info_map) {
       ExtensionSet extensions;
diff --git a/chrome/browser/notifications/message_center_notification_manager.cc b/chrome/browser/notifications/message_center_notification_manager.cc
index d404890..192a203 100644
--- a/chrome/browser/notifications/message_center_notification_manager.cc
+++ b/chrome/browser/notifications/message_center_notification_manager.cc
@@ -8,7 +8,6 @@
 #include "base/memory/scoped_ptr.h"
 #include "base/prefs/pref_service.h"
 #include "chrome/browser/chrome_notification_types.h"
-#include "chrome/browser/extensions/extension_info_map.h"
 #include "chrome/browser/extensions/extension_system.h"
 #include "chrome/browser/notifications/desktop_notification_service.h"
 #include "chrome/browser/notifications/desktop_notification_service_factory.h"
@@ -25,6 +24,7 @@
 #include "content/public/browser/notification_service.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/common/url_constants.h"
+#include "extensions/browser/info_map.h"
 #include "ui/gfx/image/image_skia.h"
 #include "ui/message_center/message_center_style.h"
 #include "ui/message_center/message_center_tray.h"
@@ -420,7 +420,7 @@
 
 std::string
     MessageCenterNotificationManager::ProfileNotification::GetExtensionId() {
-  ExtensionInfoMap* extension_info_map =
+  extensions::InfoMap* extension_info_map =
       extensions::ExtensionSystem::Get(profile())->info_map();
   ExtensionSet extensions;
   extension_info_map->GetExtensionsWithAPIPermissionForSecurityOrigin(
diff --git a/chrome/browser/profiles/off_the_record_profile_impl.cc b/chrome/browser/profiles/off_the_record_profile_impl.cc
index e858a2b..a84232e 100644
--- a/chrome/browser/profiles/off_the_record_profile_impl.cc
+++ b/chrome/browser/profiles/off_the_record_profile_impl.cc
@@ -21,7 +21,6 @@
 #include "chrome/browser/download/download_service.h"
 #include "chrome/browser/download/download_service_factory.h"
 #include "chrome/browser/extensions/api/web_request/web_request_api.h"
-#include "chrome/browser/extensions/extension_info_map.h"
 #include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/extensions/extension_special_storage_policy.h"
 #include "chrome/browser/extensions/extension_system.h"
diff --git a/chrome/browser/profiles/profile_io_data.cc b/chrome/browser/profiles/profile_io_data.cc
index 759a641..a5b848e 100644
--- a/chrome/browser/profiles/profile_io_data.cc
+++ b/chrome/browser/profiles/profile_io_data.cc
@@ -30,7 +30,6 @@
 #include "chrome/browser/custom_handlers/protocol_handler_registry_factory.h"
 #include "chrome/browser/download/download_service.h"
 #include "chrome/browser/download/download_service_factory.h"
-#include "chrome/browser/extensions/extension_info_map.h"
 #include "chrome/browser/extensions/extension_protocols.h"
 #include "chrome/browser/extensions/extension_resource_protocols.h"
 #include "chrome/browser/extensions/extension_system.h"
@@ -62,6 +61,7 @@
 #include "content/public/browser/host_zoom_map.h"
 #include "content/public/browser/notification_service.h"
 #include "content/public/browser/resource_context.h"
+#include "extensions/browser/info_map.h"
 #include "extensions/common/constants.h"
 #include "net/cert/cert_verifier.h"
 #include "net/cookies/canonical_cookie.h"
@@ -627,7 +627,7 @@
   return context;
 }
 
-ExtensionInfoMap* ProfileIOData::GetExtensionInfoMap() const {
+extensions::InfoMap* ProfileIOData::GetExtensionInfoMap() const {
   DCHECK(initialized_) << "ExtensionSystem not initialized";
   return extension_info_map_.get();
 }
diff --git a/chrome/browser/profiles/profile_io_data.h b/chrome/browser/profiles/profile_io_data.h
index fcdf2a9f..92813c6 100644
--- a/chrome/browser/profiles/profile_io_data.h
+++ b/chrome/browser/profiles/profile_io_data.h
@@ -30,7 +30,6 @@
 class ChromeNetworkDelegate;
 class CookieSettings;
 class DesktopNotificationService;
-class ExtensionInfoMap;
 class HostContentSettingsMap;
 class ManagedModeURLFilter;
 class Profile;
@@ -43,6 +42,10 @@
 class ResourcePrefetchPredictorObserver;
 }
 
+namespace extensions {
+class InfoMap;
+}
+
 namespace net {
 class CertVerifier;
 class CookieStore;
@@ -113,7 +116,7 @@
   // These are useful when the Chrome layer is called from the content layer
   // with a content::ResourceContext, and they want access to Chrome data for
   // that profile.
-  ExtensionInfoMap* GetExtensionInfoMap() const;
+  extensions::InfoMap* GetExtensionInfoMap() const;
   CookieSettings* GetCookieSettings() const;
   HostContentSettingsMap* GetHostContentSettingsMap() const;
 
@@ -250,7 +253,7 @@
     scoped_refptr<HostContentSettingsMap> host_content_settings_map;
     scoped_refptr<net::SSLConfigService> ssl_config_service;
     scoped_refptr<net::CookieMonster::Delegate> cookie_monster_delegate;
-    scoped_refptr<ExtensionInfoMap> extension_info_map;
+    scoped_refptr<extensions::InfoMap> extension_info_map;
     scoped_ptr<chrome_browser_net::ResourcePrefetchPredictorObserver>
         resource_prefetch_predictor_observer_;
 
@@ -488,7 +491,7 @@
   mutable scoped_ptr<policy::URLBlacklistManager> url_blacklist_manager_;
 
   // Pointed to by URLRequestContext.
-  mutable scoped_refptr<ExtensionInfoMap> extension_info_map_;
+  mutable scoped_refptr<extensions::InfoMap> extension_info_map_;
   mutable scoped_ptr<net::ServerBoundCertService> server_bound_cert_service_;
   mutable scoped_ptr<ChromeNetworkDelegate> network_delegate_;
   mutable scoped_ptr<net::FraudulentCertificateReporter>
diff --git a/chrome/browser/renderer_host/chrome_render_message_filter.h b/chrome/browser/renderer_host/chrome_render_message_filter.h
index d683fbb1..b1f32982 100644
--- a/chrome/browser/renderer_host/chrome_render_message_filter.h
+++ b/chrome/browser/renderer_host/chrome_render_message_filter.h
@@ -21,9 +21,12 @@
 struct ExtensionHostMsg_DOMAction_Params;
 struct ExtensionHostMsg_Request_Params;
 struct ExtensionMsg_ExternalConnectionInfo;
-class ExtensionInfoMap;
 class GURL;
 
+namespace extensions {
+class InfoMap;
+}
+
 namespace net {
 class HostResolver;
 class URLRequestContextGetter;
@@ -199,7 +202,7 @@
   // used on the IO thread.
   chrome_browser_net::Predictor* predictor_;
   scoped_refptr<net::URLRequestContextGetter> request_context_;
-  scoped_refptr<ExtensionInfoMap> extension_info_map_;
+  scoped_refptr<extensions::InfoMap> extension_info_map_;
   // Used to look up permissions at database creation time.
   scoped_refptr<CookieSettings> cookie_settings_;
 
diff --git a/chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate.cc b/chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate.cc
index 13b1308..a69d0427 100644
--- a/chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate.cc
+++ b/chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate.cc
@@ -16,7 +16,6 @@
 #include "chrome/browser/download/download_request_limiter.h"
 #include "chrome/browser/download/download_resource_throttle.h"
 #include "chrome/browser/extensions/api/streams_private/streams_private_api.h"
-#include "chrome/browser/extensions/extension_info_map.h"
 #include "chrome/browser/extensions/extension_renderer_state.h"
 #include "chrome/browser/extensions/user_script_listener.h"
 #include "chrome/browser/external_protocol/external_protocol_handler.h"
@@ -48,6 +47,7 @@
 #include "content/public/browser/resource_request_info.h"
 #include "content/public/browser/stream_handle.h"
 #include "content/public/common/resource_response.h"
+#include "extensions/browser/info_map.h"
 #include "extensions/common/constants.h"
 #include "extensions/common/user_script.h"
 #include "net/base/load_flags.h"
@@ -589,7 +589,7 @@
   ProfileIOData* io_data =
       ProfileIOData::FromResourceContext(resource_context);
   bool profile_is_incognito = io_data->is_incognito();
-  const scoped_refptr<const ExtensionInfoMap> extension_info_map(
+  const scoped_refptr<const extensions::InfoMap> extension_info_map(
       io_data->GetExtensionInfoMap());
   std::vector<std::string> whitelist = MimeTypesHandler::GetMIMETypeWhitelist();
   // Go through the white-listed extensions and try to use them to intercept