Remove ExtensionService::extension_prefs()

Callers use ExtensionPrefs::Get instead of depending on
ExtensionService for access. Where appropriate, other
nearby, unnecessary references to ExtensionService have
also been removed.

BUG=341181
[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected]

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

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@251958 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/apps/app_browsertest.cc b/chrome/browser/apps/app_browsertest.cc
index 8ac50ed..5fb2f87 100644
--- a/chrome/browser/apps/app_browsertest.cc
+++ b/chrome/browser/apps/app_browsertest.cc
@@ -1009,9 +1009,7 @@
   ASSERT_FALSE(should_not_install.seen());
 
   // Simulate a "downgrade" from version 2 in the test manifest.json to 1.
-  ExtensionPrefs* extension_prefs =
-      extensions::ExtensionSystem::Get(browser()->profile())->
-      extension_service()->extension_prefs();
+  ExtensionPrefs* extension_prefs = ExtensionPrefs::Get(browser()->profile());
 
   // Clear the registered events to ensure they are updated.
   extensions::ExtensionSystem::Get(browser()->profile())->event_router()->
diff --git a/chrome/browser/apps/ephemeral_app_service.cc b/chrome/browser/apps/ephemeral_app_service.cc
index c658f292..8418e35 100644
--- a/chrome/browser/apps/ephemeral_app_service.cc
+++ b/chrome/browser/apps/ephemeral_app_service.cc
@@ -152,7 +152,7 @@
   DCHECK(system);
   ExtensionService* service = system->extension_service();
   DCHECK(service);
-  ExtensionPrefs* prefs = service->extension_prefs();
+  ExtensionPrefs* prefs = ExtensionPrefs::Get(profile_);
   scoped_ptr<ExtensionSet> extensions =
       service->GenerateInstalledExtensionsSet();
 
diff --git a/chrome/browser/download/download_crx_util.cc b/chrome/browser/download/download_crx_util.cc
index 9ba1ffd..bea0aaa 100644
--- a/chrome/browser/download/download_crx_util.cc
+++ b/chrome/browser/download/download_crx_util.cc
@@ -9,7 +9,6 @@
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/extensions/crx_installer.h"
 #include "chrome/browser/extensions/extension_install_prompt.h"
-#include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/extensions/webstore_installer.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/browser_finder.h"
@@ -17,6 +16,7 @@
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "content/public/browser/download_item.h"
 #include "content/public/browser/notification_service.h"
+#include "extensions/browser/extension_prefs.h"
 #include "extensions/browser/extension_system.h"
 #include "extensions/common/user_script.h"
 
@@ -128,12 +128,7 @@
 }
 
 bool OffStoreInstallAllowedByPrefs(Profile* profile, const DownloadItem& item) {
-  ExtensionService* service = extensions::ExtensionSystem::Get(
-      profile)->extension_service();
-  if (!service)
-    return false;
-
-  extensions::ExtensionPrefs* prefs = service->extension_prefs();
+  extensions::ExtensionPrefs* prefs = extensions::ExtensionPrefs::Get(profile);
   CHECK(prefs);
 
   extensions::URLPatternSet url_patterns = prefs->GetAllowedInstallSites();
diff --git a/chrome/browser/extensions/api/app_runtime/app_runtime_api.cc b/chrome/browser/extensions/api/app_runtime/app_runtime_api.cc
index ca684f3..124748d0 100644
--- a/chrome/browser/extensions/api/app_runtime/app_runtime_api.cc
+++ b/chrome/browser/extensions/api/app_runtime/app_runtime_api.cc
@@ -11,7 +11,6 @@
 #include "base/time/time.h"
 #include "base/values.h"
 #include "chrome/browser/extensions/api/file_handlers/app_file_handler_util.h"
-#include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/common/extensions/api/app_runtime.h"
 #include "content/public/browser/web_contents.h"
@@ -50,8 +49,8 @@
   event->can_load_ephemeral_apps = true;
   system->event_router()->DispatchEventWithLazyListener(extension_id,
                                                         event.Pass());
-  system->extension_service()->extension_prefs()->SetLastLaunchTime(
-      extension_id, base::Time::Now());
+  ExtensionPrefs::Get(profile)
+      ->SetLastLaunchTime(extension_id, base::Time::Now());
 }
 
 }  // anonymous namespace
diff --git a/chrome/browser/extensions/api/commands/command_service.cc b/chrome/browser/extensions/api/commands/command_service.cc
index 9b8ee618..70b29f8 100644
--- a/chrome/browser/extensions/api/commands/command_service.cc
+++ b/chrome/browser/extensions/api/commands/command_service.cc
@@ -17,7 +17,6 @@
 #include "chrome/browser/extensions/extension_commands_global_registry.h"
 #include "chrome/browser/extensions/extension_function_registry.h"
 #include "chrome/browser/extensions/extension_keybinding_registry.h"
-#include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/accelerator_utils.h"
 #include "chrome/common/extensions/api/commands/commands_handler.h"
@@ -26,6 +25,8 @@
 #include "components/user_prefs/pref_registry_syncable.h"
 #include "content/public/browser/notification_details.h"
 #include "content/public/browser/notification_service.h"
+#include "extensions/browser/extension_prefs.h"
+#include "extensions/browser/extension_registry.h"
 #include "extensions/browser/extension_system.h"
 #include "extensions/common/feature_switch.h"
 #include "extensions/common/manifest_constants.h"
@@ -208,12 +209,9 @@
                                       QueryType type,
                                       CommandScope scope,
                                       extensions::CommandMap* command_map) {
-  ExtensionService* extension_service =
-      ExtensionSystem::Get(profile_)->extension_service();
-  if (!extension_service)
-    return false;  // Can occur during testing.
-  const ExtensionSet* extensions = extension_service->extensions();
-  const Extension* extension = extensions->GetByID(extension_id);
+  const ExtensionSet& extensions =
+      ExtensionRegistry::Get(profile_)->enabled_extensions();
+  const Extension* extension = extensions.GetByID(extension_id);
   CHECK(extension);
 
   command_map->clear();
@@ -393,9 +391,7 @@
   if (!commands)
     return;
 
-  ExtensionService* extension_service =
-      ExtensionSystem::Get(profile_)->extension_service();
-  ExtensionPrefs* extension_prefs = extension_service->extension_prefs();
+  ExtensionPrefs* extension_prefs = ExtensionPrefs::Get(profile_);
   if (InitialBindingsHaveBeenAssigned(extension_prefs, extension->id()))
     return;
   SetInitialBindingsHaveBeenAssigned(extension_prefs, extension->id());
@@ -502,12 +498,9 @@
     extensions::Command* command,
     bool* active,
     ExtensionActionType action_type) {
-  ExtensionService* service =
-      ExtensionSystem::Get(profile_)->extension_service();
-  if (!service)
-    return false;  // Can happen in tests.
-  const ExtensionSet* extensions = service->extensions();
-  const Extension* extension = extensions->GetByID(extension_id);
+  const ExtensionSet& extensions =
+      ExtensionRegistry::Get(profile_)->enabled_extensions();
+  const Extension* extension = extensions.GetByID(extension_id);
   CHECK(extension);
 
   if (active)
diff --git a/chrome/browser/extensions/api/developer_private/developer_private_api.cc b/chrome/browser/extensions/api/developer_private/developer_private_api.cc
index aff6ec18d..de3b111 100644
--- a/chrome/browser/extensions/api/developer_private/developer_private_api.cc
+++ b/chrome/browser/extensions/api/developer_private/developer_private_api.cc
@@ -51,6 +51,7 @@
 #include "content/public/browser/storage_partition.h"
 #include "content/public/browser/web_contents.h"
 #include "extensions/browser/extension_error.h"
+#include "extensions/browser/extension_prefs.h"
 #include "extensions/browser/extension_registry.h"
 #include "extensions/browser/extension_system.h"
 #include "extensions/browser/management_policy.h"
@@ -782,7 +783,7 @@
   }
 
   if (enable) {
-    ExtensionPrefs* prefs = service->extension_prefs();
+    ExtensionPrefs* prefs = ExtensionPrefs::Get(GetProfile());
     if (prefs->DidExtensionEscalatePermissions(extension_id)) {
       AppWindowRegistry* registry = AppWindowRegistry::Get(GetProfile());
       CHECK(registry);
diff --git a/chrome/browser/extensions/api/downloads/downloads_api.cc b/chrome/browser/extensions/api/downloads/downloads_api.cc
index 0e063ebc..59f2ac78 100644
--- a/chrome/browser/extensions/api/downloads/downloads_api.cc
+++ b/chrome/browser/extensions/api/downloads/downloads_api.cc
@@ -900,9 +900,8 @@
     const extensions::Extension* extension,
     base::ListValue* event_args) {
   *any_determiners = true;
-  base::Time installed = extensions::ExtensionSystem::Get(
-      context)->extension_service()->extension_prefs()->
-    GetInstallTime(extension->id());
+  base::Time installed =
+      extensions::ExtensionPrefs::Get(context)->GetInstallTime(extension->id());
   data->AddPendingDeterminer(extension->id(), installed);
 }
 
diff --git a/chrome/browser/extensions/api/extension_action/browser_action_apitest.cc b/chrome/browser/extensions/api/extension_action/browser_action_apitest.cc
index 3d63e47..dc1bcaa5 100644
--- a/chrome/browser/extensions/api/extension_action/browser_action_apitest.cc
+++ b/chrome/browser/extensions/api/extension_action/browser_action_apitest.cc
@@ -484,8 +484,8 @@
   // Now enable the extension in incognito mode, and test that the browser
   // action shows up. Note that we don't update the existing window at the
   // moment, so we just create a new one.
-  extensions::ExtensionSystem::Get(browser()->profile())->extension_service()->
-      extension_prefs()->SetIsIncognitoEnabled(extension->id(), true);
+  extensions::ExtensionPrefs::Get(browser()->profile())
+      ->SetIsIncognitoEnabled(extension->id(), true);
 
   chrome::CloseWindow(incognito_browser);
   incognito_browser =
@@ -525,8 +525,10 @@
 
   // Now enable 2 of the extensions in incognito mode, and test that the browser
   // actions show up.
-  service->extension_prefs()->SetIsIncognitoEnabled(extension_a->id(), true);
-  service->extension_prefs()->SetIsIncognitoEnabled(extension_c->id(), true);
+  extensions::ExtensionPrefs* prefs =
+      extensions::ExtensionPrefs::Get(browser()->profile());
+  prefs->SetIsIncognitoEnabled(extension_a->id(), true);
+  prefs->SetIsIncognitoEnabled(extension_c->id(), true);
 
   Profile* incognito_profile = browser()->profile()->GetOffTheRecordProfile();
   Browser* incognito_browser =
diff --git a/chrome/browser/extensions/api/management/management_api.cc b/chrome/browser/extensions/api/management/management_api.cc
index da1e529f..45ab89cf 100644
--- a/chrome/browser/extensions/api/management/management_api.cc
+++ b/chrome/browser/extensions/api/management/management_api.cc
@@ -125,7 +125,7 @@
   if (info->enabled) {
     info->disabled_reason = management::ExtensionInfo::DISABLED_REASON_NONE;
   } else {
-    ExtensionPrefs* prefs = service->extension_prefs();
+    ExtensionPrefs* prefs = ExtensionPrefs::Get(service->profile());
     if (prefs->DidExtensionEscalatePermissions(extension.id())) {
       info->disabled_reason =
           management::ExtensionInfo::DISABLED_REASON_PERMISSIONS_INCREASE;
@@ -439,7 +439,7 @@
   // If the user has not set a preference, the default launch value will be
   // returned.
   LaunchContainer launch_container =
-      GetLaunchContainer(service()->extension_prefs(), extension);
+      GetLaunchContainer(ExtensionPrefs::Get(GetProfile()), extension);
   OpenApplication(AppLaunchParams(
       GetProfile(), extension, launch_container, NEW_FOREGROUND_TAB));
 #if !defined(OS_ANDROID)
@@ -484,7 +484,7 @@
   bool currently_enabled = service()->IsExtensionEnabled(extension_id_);
 
   if (!currently_enabled && params->enabled) {
-    ExtensionPrefs* prefs = service()->extension_prefs();
+    ExtensionPrefs* prefs = ExtensionPrefs::Get(GetProfile());
     if (prefs->DidExtensionEscalatePermissions(extension_id_)) {
       if (!user_gesture()) {
         error_ = keys::kGestureNeededForEscalationError;
diff --git a/chrome/browser/extensions/api/management/management_api_browsertest.cc b/chrome/browser/extensions/api/management/management_api_browsertest.cc
index ff0c7fc..9cdad5af3 100644
--- a/chrome/browser/extensions/api/management/management_api_browsertest.cc
+++ b/chrome/browser/extensions/api/management/management_api_browsertest.cc
@@ -206,8 +206,8 @@
     EXPECT_FALSE(UpdateExtension(kId, path_v2, -1));
     EXPECT_TRUE(service->GetExtensionById(kId, false) == NULL);
     EXPECT_TRUE(service->GetExtensionById(kId, true) != NULL);
-    EXPECT_TRUE(
-        service->extension_prefs()->DidExtensionEscalatePermissions(kId));
+    EXPECT_TRUE(ExtensionPrefs::Get(browser()->profile())
+                    ->DidExtensionEscalatePermissions(kId));
   }
 
   void SetEnabled(bool enabled, bool user_gesture,
diff --git a/chrome/browser/extensions/api/management/management_browsertest.cc b/chrome/browser/extensions/api/management/management_browsertest.cc
index 1407b57..754db10 100644
--- a/chrome/browser/extensions/api/management/management_browsertest.cc
+++ b/chrome/browser/extensions/api/management/management_browsertest.cc
@@ -441,7 +441,8 @@
 
   UninstallExtension(kExtensionId);
 
-  extensions::ExtensionPrefs* extension_prefs = service->extension_prefs();
+  extensions::ExtensionPrefs* extension_prefs =
+      extensions::ExtensionPrefs::Get(browser()->profile());
   EXPECT_TRUE(extension_prefs->IsExternalExtensionUninstalled(kExtensionId))
       << "Uninstalling should set kill bit on externaly installed extension.";
 
diff --git a/chrome/browser/extensions/api/omnibox/omnibox_api.cc b/chrome/browser/extensions/api/omnibox/omnibox_api.cc
index 961637a..b512397 100644
--- a/chrome/browser/extensions/api/omnibox/omnibox_api.cc
+++ b/chrome/browser/extensions/api/omnibox/omnibox_api.cc
@@ -11,7 +11,6 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/values.h"
 #include "chrome/browser/chrome_notification_types.h"
-#include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/extensions/tab_helper.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/search_engines/template_url.h"
@@ -23,6 +22,8 @@
 #include "content/public/browser/notification_service.h"
 #include "extensions/browser/event_router.h"
 #include "extensions/browser/extension_prefs.h"
+#include "extensions/browser/extension_prefs_factory.h"
+#include "extensions/browser/extension_registry.h"
 #include "extensions/browser/extension_system.h"
 #include "extensions/browser/extension_system_provider.h"
 #include "extensions/browser/extensions_browser_client.h"
@@ -59,8 +60,7 @@
 scoped_ptr<omnibox::SuggestResult> GetOmniboxDefaultSuggestion(
     Profile* profile,
     const std::string& extension_id) {
-  ExtensionPrefs* prefs =
-      ExtensionSystem::Get(profile)->extension_service()->extension_prefs();
+  ExtensionPrefs* prefs = ExtensionPrefs::Get(profile);
 
   scoped_ptr<omnibox::SuggestResult> suggestion;
   const base::DictionaryValue* dict = NULL;
@@ -79,8 +79,7 @@
     Profile* profile,
     const std::string& extension_id,
     const omnibox::DefaultSuggestResult& suggestion) {
-  ExtensionPrefs* prefs =
-      ExtensionSystem::Get(profile)->extension_service()->extension_prefs();
+  ExtensionPrefs* prefs = ExtensionPrefs::Get(profile);
   if (!prefs)
     return false;
 
@@ -112,9 +111,8 @@
 bool ExtensionOmniboxEventRouter::OnInputChanged(
     Profile* profile, const std::string& extension_id,
     const std::string& input, int suggest_id) {
-  if (!extensions::ExtensionSystem::Get(profile)->event_router()->
-          ExtensionHasEventListener(extension_id,
-                                    omnibox::OnInputChanged::kEventName))
+  if (!ExtensionSystem::Get(profile)->event_router()->ExtensionHasEventListener(
+           extension_id, omnibox::OnInputChanged::kEventName))
     return false;
 
   scoped_ptr<base::ListValue> args(new base::ListValue());
@@ -139,8 +137,8 @@
       Profile::FromBrowserContext(web_contents->GetBrowserContext());
 
   const Extension* extension =
-      ExtensionSystem::Get(profile)->extension_service()->extensions()->
-          GetByID(extension_id);
+      ExtensionRegistry::Get(profile)->enabled_extensions().GetByID(
+          extension_id);
   CHECK(extension);
   extensions::TabHelper::FromWebContents(web_contents)->
       active_tab_permission_granter()->GrantIfRequested(extension);
@@ -281,6 +279,7 @@
 template <>
 void ProfileKeyedAPIFactory<OmniboxAPI>::DeclareFactoryDependencies() {
   DependsOn(ExtensionsBrowserClient::Get()->GetExtensionSystemFactory());
+  DependsOn(ExtensionPrefsFactory::GetInstance());
   DependsOn(TemplateURLServiceFactory::GetInstance());
 }
 
diff --git a/chrome/browser/extensions/api/permissions/permissions_apitest.cc b/chrome/browser/extensions/api/permissions/permissions_apitest.cc
index a2cacb79..b1fdcca 100644
--- a/chrome/browser/extensions/api/permissions/permissions_apitest.cc
+++ b/chrome/browser/extensions/api/permissions/permissions_apitest.cc
@@ -4,7 +4,6 @@
 
 #include "chrome/browser/extensions/api/permissions/permissions_api.h"
 #include "chrome/browser/extensions/extension_apitest.h"
-#include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/browser.h"
 #include "extensions/browser/extension_prefs.h"
@@ -79,8 +78,7 @@
       new PermissionSet(apis, manifest_permissions,
                         explicit_hosts, URLPatternSet());
 
-  ExtensionPrefs* prefs =
-      browser()->profile()->GetExtensionService()->extension_prefs();
+  ExtensionPrefs* prefs = ExtensionPrefs::Get(browser()->profile());
   prefs->AddGrantedPermissions("kjmkgkdkpedkejedfhmfcenooemhbpbo",
                                granted_permissions.get());
 
@@ -126,8 +124,7 @@
   PermissionsRequestFunction::SetAutoConfirmForTests(false);
   PermissionsRequestFunction::SetIgnoreUserGestureForTests(true);
 
-  ExtensionPrefs* prefs =
-      browser()->profile()->GetExtensionService()->extension_prefs();
+  ExtensionPrefs* prefs = ExtensionPrefs::Get(browser()->profile());
 
   EXPECT_TRUE(
       RunExtensionTestNoFileAccess("permissions/file_access_no")) << message_;
diff --git a/chrome/browser/extensions/browser_action_apitest.cc b/chrome/browser/extensions/browser_action_apitest.cc
index 930162d..2387b96f 100644
--- a/chrome/browser/extensions/browser_action_apitest.cc
+++ b/chrome/browser/extensions/browser_action_apitest.cc
@@ -4,20 +4,20 @@
 
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
-#include "extensions/browser/extension_system.h"
+#include "extensions/browser/extension_registry.h"
 
 // Tests that tooltips of a browser action icon can be specified using UTF8.
 // See http://crbug.com/25349.
 IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest, TitleLocalizationBrowserAction) {
-  ExtensionService* service = extensions::ExtensionSystem::Get(
-      browser()->profile())->extension_service();
-  const size_t size_before = service->extensions()->size();
+  extension::ExtensionRegistry* registry =
+      extensions::ExtensionRegistry::Get(browser()->profile());
+  const size_t size_before = registry->enabled_extensions().size();
   base::FilePath extension_path(test_data_dir_.AppendASCII("browsertest")
                                         .AppendASCII("title_localized"));
   const Extension* extension = LoadExtension(extension_path);
   ASSERT_TRUE(extension);
 
-  ASSERT_EQ(size_before + 1, service->extensions()->size());
+  ASSERT_EQ(size_before + 1, registry->enabled_extensions().size());
 
   EXPECT_STREQ(base::WideToUTF8(
                    L"Hreggvi\u00F0ur: l10n browser action").c_str(),
diff --git a/chrome/browser/extensions/crx_installer.cc b/chrome/browser/extensions/crx_installer.cc
index dbaba4e..cdf1c950 100644
--- a/chrome/browser/extensions/crx_installer.cc
+++ b/chrome/browser/extensions/crx_installer.cc
@@ -595,8 +595,8 @@
     return;
   }
 
-  current_version_ =
-      service->extension_prefs()->GetVersionString(extension()->id());
+  current_version_ = ExtensionPrefs::Get(service->profile())
+                         ->GetVersionString(extension()->id());
 
   if (client_ &&
       (!allow_silent_install_ || !approved_) &&
@@ -863,7 +863,7 @@
   if (!update_from_settings_page_)
     return;
 
-  ExtensionPrefs* prefs = service->extension_prefs();
+  ExtensionPrefs* prefs = ExtensionPrefs::Get(service->profile());
   if (!prefs->DidExtensionEscalatePermissions(extension()->id()))
     return;
 
diff --git a/chrome/browser/extensions/crx_installer_browsertest.cc b/chrome/browser/extensions/crx_installer_browsertest.cc
index acf5f14..84510d8 100644
--- a/chrome/browser/extensions/crx_installer_browsertest.cc
+++ b/chrome/browser/extensions/crx_installer_browsertest.cc
@@ -197,9 +197,6 @@
     CommandLine::ForCurrentProcess()->AppendSwitch(
         switches::kEnableExperimentalExtensionApis);
 
-    ExtensionService* service = extensions::ExtensionSystem::Get(
-        browser()->profile())->extension_service();
-
     scoped_refptr<MockPromptProxy> mock_prompt =
         CreateMockPromptProxyForBrowser(browser());
 
@@ -207,8 +204,8 @@
     InstallWithPrompt("browsertest/scopes", std::string(), mock_prompt);
 
     scoped_refptr<PermissionSet> permissions =
-        service->extension_prefs()->GetGrantedPermissions(
-            mock_prompt->extension_id());
+        ExtensionPrefs::Get(browser()->profile())
+            ->GetGrantedPermissions(mock_prompt->extension_id());
     ASSERT_TRUE(permissions.get());
   }
 };
diff --git a/chrome/browser/extensions/data_deleter.cc b/chrome/browser/extensions/data_deleter.cc
index 983182e..77e7ec1 100644
--- a/chrome/browser/extensions/data_deleter.cc
+++ b/chrome/browser/extensions/data_deleter.cc
@@ -14,6 +14,7 @@
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/site_instance.h"
 #include "content/public/browser/storage_partition.h"
+#include "extensions/browser/extension_prefs.h"
 #include "extensions/common/constants.h"
 #include "extensions/common/extension.h"
 #include "net/url_request/url_request_context_getter.h"
@@ -65,7 +66,8 @@
 void OnNeedsToGarbageCollectIsolatedStorage(WeakPtr<ExtensionService> es) {
   if (!es)
     return;
-  es->extension_prefs()->SetNeedsStorageGarbageCollection(true);
+  extensions::ExtensionPrefs::Get(es->profile())
+      ->SetNeedsStorageGarbageCollection(true);
 }
 
 } // namespace
diff --git a/chrome/browser/extensions/extension_browsertest.cc b/chrome/browser/extensions/extension_browsertest.cc
index ca731b3..4cfe0ed 100644
--- a/chrome/browser/extensions/extension_browsertest.cc
+++ b/chrome/browser/extensions/extension_browsertest.cc
@@ -41,6 +41,7 @@
 #include "content/public/browser/notification_service.h"
 #include "content/public/browser/render_view_host.h"
 #include "content/public/test/browser_test_utils.h"
+#include "extensions/browser/extension_prefs.h"
 #include "extensions/browser/extension_system.h"
 #include "extensions/common/constants.h"
 #include "extensions/common/extension_set.h"
@@ -170,11 +171,11 @@
 
   // The call to OnExtensionInstalled ensures the other extension prefs
   // are set up with the defaults.
-  service->extension_prefs()->OnExtensionInstalled(
-      extension,
-      Extension::ENABLED,
-      false,
-      syncer::StringOrdinal::CreateInitialOrdinal());
+  extensions::ExtensionPrefs::Get(profile())
+      ->OnExtensionInstalled(extension,
+                             Extension::ENABLED,
+                             false,
+                             syncer::StringOrdinal::CreateInitialOrdinal());
 
   // Toggling incognito or file access will reload the extension, so wait for
   // the reload and grab the new extension instance. The default state is
diff --git a/chrome/browser/extensions/extension_context_menu_model.cc b/chrome/browser/extensions/extension_context_menu_model.cc
index 0fde704e..b3df5fc 100644
--- a/chrome/browser/extensions/extension_context_menu_model.cc
+++ b/chrome/browser/extensions/extension_context_menu_model.cc
@@ -20,6 +20,7 @@
 #include "chrome/common/pref_names.h"
 #include "chrome/common/url_constants.h"
 #include "content/public/browser/web_contents.h"
+#include "extensions/browser/extension_prefs.h"
 #include "extensions/browser/extension_system.h"
 #include "extensions/browser/management_policy.h"
 #include "extensions/common/extension.h"
@@ -116,10 +117,7 @@
       break;
     case HIDE: {
       extensions::ExtensionActionAPI::SetBrowserActionVisibility(
-          extensions::ExtensionSystem::Get(profile_)->
-              extension_service()->extension_prefs(),
-          extension->id(),
-          false);
+          extensions::ExtensionPrefs::Get(profile_), extension->id(), false);
       break;
     }
     case UNINSTALL: {
diff --git a/chrome/browser/extensions/extension_disabled_ui_browsertest.cc b/chrome/browser/extensions/extension_disabled_ui_browsertest.cc
index d273d3a..b6f58fd 100644
--- a/chrome/browser/extensions/extension_disabled_ui_browsertest.cc
+++ b/chrome/browser/extensions/extension_disabled_ui_browsertest.cc
@@ -27,6 +27,7 @@
 
 using extensions::Extension;
 using extensions::ExtensionRegistry;
+using extensions::ExtensionPrefs;
 
 class ExtensionDisabledGlobalErrorTest : public ExtensionBrowserTest {
  protected:
@@ -154,7 +155,8 @@
   const Extension* extension = InstallIncreasingPermissionExtensionV1();
   DisableExtension(extension->id());
   // Clear disable reason to simulate legacy disables.
-  service_->extension_prefs()->ClearDisableReasons(extension->id());
+  ExtensionPrefs::Get(browser()->profile())
+      ->ClearDisableReasons(extension->id());
   // Upgrade to version 2. Infer from version 1 having the same permissions
   // granted by the user that it was disabled by the user.
   extension = UpdateIncreasingPermissionExtension(extension, path_v2_, 0);
@@ -168,7 +170,8 @@
                        UnknownReasonHigherPermissions) {
   const Extension* extension = InstallAndUpdateIncreasingPermissionsExtension();
   // Clear disable reason to simulate legacy disables.
-  service_->extension_prefs()->ClearDisableReasons(extension->id());
+  ExtensionPrefs::Get(service_->profile())
+      ->ClearDisableReasons(extension->id());
   // We now have version 2 but only accepted permissions for version 1.
   GlobalError* error = GetExtensionDisabledGlobalError();
   ASSERT_TRUE(error);
@@ -227,6 +230,7 @@
   EXPECT_EQ("2", extension->VersionString());
   EXPECT_EQ(1u, registry_->disabled_extensions().size());
   EXPECT_EQ(Extension::DISABLE_PERMISSIONS_INCREASE,
-            service_->extension_prefs()->GetDisableReasons(extension_id));
+            ExtensionPrefs::Get(service_->profile())
+                ->GetDisableReasons(extension_id));
   EXPECT_TRUE(GetExtensionDisabledGlobalError());
 }
diff --git a/chrome/browser/extensions/extension_install_ui_browsertest.cc b/chrome/browser/extensions/extension_install_ui_browsertest.cc
index d91cf30..f25e19a7 100644
--- a/chrome/browser/extensions/extension_install_ui_browsertest.cc
+++ b/chrome/browser/extensions/extension_install_ui_browsertest.cc
@@ -25,6 +25,7 @@
 #include "content/public/browser/web_contents.h"
 #include "content/public/test/browser_test_utils.h"
 #include "extensions/browser/app_sorting.h"
+#include "extensions/browser/extension_prefs.h"
 #include "extensions/common/id_util.h"
 
 using content::WebContents;
@@ -227,7 +228,8 @@
   const extensions::Extension* webstore_extension =
       service->GetInstalledExtension(extension_misc::kWebStoreAppId);
   EXPECT_TRUE(webstore_extension);
-  AppSorting* sorting = service->extension_prefs()->app_sorting();
+  AppSorting* sorting =
+      extensions::ExtensionPrefs::Get(browser()->profile())->app_sorting();
 
   // Register for notifications in the same way as AppLauncherHandler.
   registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LAUNCHER_REORDERED,
diff --git a/chrome/browser/extensions/extension_message_bubble_controller_unittest.cc b/chrome/browser/extensions/extension_message_bubble_controller_unittest.cc
index cf7d4c8..656ae77 100644
--- a/chrome/browser/extensions/extension_message_bubble_controller_unittest.cc
+++ b/chrome/browser/extensions/extension_message_bubble_controller_unittest.cc
@@ -255,7 +255,7 @@
       FakeExtensionMessageBubble::BUBBLE_ACTION_CLICK_DISMISS_BUTTON);
 
   // Validate that we don't have a suppress value for the extensions.
-  ExtensionPrefs* prefs = service_->extension_prefs();
+  ExtensionPrefs* prefs = ExtensionPrefs::Get(profile());
   EXPECT_FALSE(prefs->HasWipeoutBeenAcknowledged(extension_id1_));
   EXPECT_FALSE(prefs->HasWipeoutBeenAcknowledged(extension_id2_));
 
diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc
index 06ab993..56388a1 100644
--- a/chrome/browser/extensions/extension_service.cc
+++ b/chrome/browser/extensions/extension_service.cc
@@ -1262,20 +1262,12 @@
   return profile_;
 }
 
-extensions::ExtensionPrefs* ExtensionService::extension_prefs() {
-  return extension_prefs_;
-}
-
-const extensions::ExtensionPrefs* ExtensionService::extension_prefs() const {
-  return extension_prefs_;
-}
-
 extensions::SettingsFrontend* ExtensionService::settings_frontend() {
   return settings_frontend_.get();
 }
 
 extensions::ContentSettingsStore* ExtensionService::GetContentSettingsStore() {
-  return extension_prefs()->content_settings_store();
+  return extension_prefs_->content_settings_store();
 }
 
 bool ExtensionService::is_ready() {
@@ -1882,7 +1874,7 @@
   // custom set of active permissions defined in the extension prefs. Here,
   // we update the extension's active permissions based on the prefs.
   scoped_refptr<PermissionSet> active_permissions =
-      extension_prefs()->GetActivePermissions(extension->id());
+      extension_prefs_->GetActivePermissions(extension->id());
 
   if (active_permissions.get()) {
     // We restrict the active permissions to be within the bounds defined in the
@@ -2182,7 +2174,7 @@
     // load it (see AddExtension). Usually it should be the job of callers to
     // incercept blacklisted extension earlier (e.g. CrxInstaller, before even
     // showing the install dialogue).
-    extension_prefs()->AcknowledgeBlacklistedExtension(id);
+    extension_prefs_->AcknowledgeBlacklistedExtension(id);
     UMA_HISTOGRAM_ENUMERATION("ExtensionBlacklist.SilentInstall",
                               extension->location(),
                               Manifest::NUM_LOCATIONS);
diff --git a/chrome/browser/extensions/extension_service.h b/chrome/browser/extensions/extension_service.h
index e6c5215..ec8943a 100644
--- a/chrome/browser/extensions/extension_service.h
+++ b/chrome/browser/extensions/extension_service.h
@@ -418,11 +418,6 @@
   // Returns profile_ as a BrowserContext.
   content::BrowserContext* GetBrowserContext() const;
 
-  // TODO(skerner): Change to const ExtensionPrefs& extension_prefs() const,
-  // ExtensionPrefs* mutable_extension_prefs().
-  extensions::ExtensionPrefs* extension_prefs();
-  const extensions::ExtensionPrefs* extension_prefs() const;
-
   extensions::SettingsFrontend* settings_frontend();
 
   void set_extension_sync_service(
diff --git a/chrome/browser/extensions/extension_service_unittest.cc b/chrome/browser/extensions/extension_service_unittest.cc
index 3a6ba90..6d4ee8f 100644
--- a/chrome/browser/extensions/extension_service_unittest.cc
+++ b/chrome/browser/extensions/extension_service_unittest.cc
@@ -605,7 +605,7 @@
 
 void ExtensionServiceTestBase::InitializeExtensionSyncService() {
   extension_sync_service_.reset(new ExtensionSyncService(
-      profile_.get(), service_->extension_prefs(), service_));
+      profile_.get(), ExtensionPrefs::Get(profile_.get()), service_));
 }
 
 // static
@@ -1566,7 +1566,7 @@
       "hpiknbiabeeppbpihjehijgoemciehgk/3")));
 
   // Make sure update information got deleted.
-  ExtensionPrefs* prefs = service_->extension_prefs();
+  ExtensionPrefs* prefs = ExtensionPrefs::Get(profile_.get());
   EXPECT_FALSE(
       prefs->GetDelayedInstallInfo("bjafgdebaacbbbecmhlhpofkepfkgcpa"));
 }
@@ -1599,7 +1599,7 @@
 
   // Each of these extensions should have been rejected because of dependencies
   // that cannot be satisfied.
-  ExtensionPrefs* prefs = service_->extension_prefs();
+  ExtensionPrefs* prefs = ExtensionPrefs::Get(profile_.get());
   EXPECT_FALSE(
       prefs->GetDelayedInstallInfo("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"));
   EXPECT_FALSE(
@@ -2017,7 +2017,7 @@
   ASSERT_TRUE(base::PathExists(pem_path));
   ASSERT_TRUE(base::PathExists(path));
 
-  ExtensionPrefs* prefs = service_->extension_prefs();
+  ExtensionPrefs* prefs = ExtensionPrefs::Get(profile_.get());
 
   APIPermissionSet expected_api_perms;
   URLPatternSet expected_host_perms;
@@ -2065,7 +2065,7 @@
   ASSERT_TRUE(base::PathExists(pem_path));
   ASSERT_TRUE(base::PathExists(path));
 
-  ExtensionPrefs* prefs = service_->extension_prefs();
+  ExtensionPrefs* prefs = ExtensionPrefs::Get(profile_.get());
 
   APIPermissionSet expected_api_perms;
   URLPatternSet expected_host_perms;
@@ -2107,7 +2107,7 @@
   const Extension* extension = PackAndInstallCRX(good1_path(), INSTALL_NEW);
   EXPECT_EQ(0u, GetErrors().size());
   EXPECT_EQ(1u, registry_->enabled_extensions().size());
-  ExtensionPrefs* prefs = service_->extension_prefs();
+  ExtensionPrefs* prefs = ExtensionPrefs::Get(profile_.get());
 
   scoped_refptr<PermissionSet> permissions(
       prefs->GetGrantedPermissions(extension->id()));
@@ -2139,7 +2139,7 @@
   EXPECT_EQ(1u, registry_->enabled_extensions().size());
   std::string extension_id = extension->id();
 
-  ExtensionPrefs* prefs = service_->extension_prefs();
+  ExtensionPrefs* prefs = ExtensionPrefs::Get(profile_.get());
 
   APIPermissionSet expected_api_permissions;
   URLPatternSet expected_host_permissions;
@@ -2635,7 +2635,8 @@
                         INSTALL_NEW);
   EXPECT_EQ(0u, GetErrors().size());
   EXPECT_EQ(1u, registry_->enabled_extensions().size());
-  EXPECT_FALSE(service_->extension_prefs()->AllowFileAccess(extension->id()));
+  EXPECT_FALSE(
+      ExtensionPrefs::Get(profile_.get())->AllowFileAccess(extension->id()));
 }
 
 TEST_F(ExtensionServiceTest, UpdateApps) {
@@ -2660,7 +2661,7 @@
 // Verifies that the NTP page and launch ordinals are kept when updating apps.
 TEST_F(ExtensionServiceTest, UpdateAppsRetainOrdinals) {
   InitializeEmptyExtensionService();
-  AppSorting* sorting = service_->extension_prefs()->app_sorting();
+  AppSorting* sorting = ExtensionPrefs::Get(profile_.get())->app_sorting();
   base::FilePath extensions_path = data_dir_.AppendASCII("app_update");
 
   // First install v1 of a hosted app.
@@ -2696,7 +2697,7 @@
       IDR_WEBSTORE_MANIFEST, base::FilePath(FILE_PATH_LITERAL("web_store")));
   service_->Init();
 
-  AppSorting* sorting = service_->extension_prefs()->app_sorting();
+  AppSorting* sorting = ExtensionPrefs::Get(profile_.get())->app_sorting();
   EXPECT_TRUE(
       sorting->GetPageOrdinal(extension_misc::kWebStoreAppId).IsValid());
   EXPECT_TRUE(
@@ -2976,7 +2977,8 @@
   // over to the updated version.
   service_->DisableExtension(good->id(), Extension::DISABLE_USER_ACTION);
   extensions::util::SetIsIncognitoEnabled(good->id(), profile_.get(), true);
-  service_->extension_prefs()->SetDidExtensionEscalatePermissions(good, true);
+  ExtensionPrefs::Get(profile_.get())
+      ->SetDidExtensionEscalatePermissions(good, true);
 
   path = data_dir_.AppendASCII("good2.crx");
   UpdateExtension(good_crx, path, INSTALLED);
@@ -2985,8 +2987,8 @@
   ASSERT_EQ("1.0.0.1", good2->version()->GetString());
   EXPECT_TRUE(extensions::util::IsIncognitoEnabled(
       good2->id(), profile_.get()));
-  EXPECT_TRUE(service_->extension_prefs()->DidExtensionEscalatePermissions(
-      good2->id()));
+  EXPECT_TRUE(ExtensionPrefs::Get(profile_.get())
+                  ->DidExtensionEscalatePermissions(good2->id()));
 }
 
 // Tests that updating preserves extension location.
@@ -3109,7 +3111,7 @@
 
   // Make sure the granted permissions have been setup.
   scoped_refptr<PermissionSet> permissions(
-      service_->extension_prefs()->GetGrantedPermissions(good1));
+      ExtensionPrefs::Get(profile_.get())->GetGrantedPermissions(good1));
   EXPECT_FALSE(permissions->IsEmpty());
   EXPECT_TRUE(permissions->HasEffectiveFullAccess());
   EXPECT_FALSE(permissions->apis().empty());
@@ -3205,8 +3207,8 @@
   const Extension* extension = service_->GetExtensionById(theme_crx, true);
   ASSERT_TRUE(extension);
 
-  EXPECT_FALSE(
-      service_->extension_prefs()->IsExtensionDisabled(extension->id()));
+  EXPECT_FALSE(ExtensionPrefs::Get(profile_.get())
+                   ->IsExtensionDisabled(extension->id()));
   EXPECT_TRUE(service_->IsExtensionEnabled(theme_crx));
 }
 
@@ -3235,8 +3237,8 @@
   const Extension* extension = service_->GetExtensionById(theme_crx, true);
   ASSERT_TRUE(extension);
 
-  EXPECT_FALSE(
-      service_->extension_prefs()->IsExtensionDisabled(extension->id()));
+  EXPECT_FALSE(ExtensionPrefs::Get(profile_.get())
+                   ->IsExtensionDisabled(extension->id()));
   EXPECT_TRUE(service_->IsExtensionEnabled(extension->id()));
   EXPECT_FALSE(extensions::util::IsIncognitoEnabled(extension->id(),
                                                     profile_.get()));
@@ -3470,7 +3472,7 @@
   EXPECT_EQ(1u, registry_->enabled_extensions().size());
 
   base::ListValue whitelist;
-  PrefService* prefs = service_->extension_prefs()->pref_service();
+  PrefService* prefs = ExtensionPrefs::Get(profile_.get())->pref_service();
   whitelist.Append(new base::StringValue(good_crx));
   prefs->Set(extensions::pref_names::kInstallAllowList, whitelist);
 
@@ -3521,8 +3523,8 @@
 
   InitializeGoodInstalledExtensionService();
   test_blacklist.Attach(service_->blacklist_);
-  service_->extension_prefs()->SetExtensionBlacklisted(good0, true);
-  service_->extension_prefs()->SetExtensionBlacklisted(good1, true);
+  ExtensionPrefs::Get(profile_.get())->SetExtensionBlacklisted(good0, true);
+  ExtensionPrefs::Get(profile_.get())->SetExtensionBlacklisted(good1, true);
 
   test_blacklist.SetBlacklistState(
       good1, extensions::BLACKLISTED_MALWARE, false);
@@ -4047,7 +4049,7 @@
   ASSERT_EQ(2u, registry_->enabled_extensions().size());
   EXPECT_TRUE(service_->GetExtensionById(good_crx, false));
   EXPECT_TRUE(service_->GetExtensionById(page_action, false));
-  ExtensionPrefs* prefs = service_->extension_prefs();
+  ExtensionPrefs* prefs = ExtensionPrefs::Get(profile_.get());
   ASSERT_TRUE(!prefs->IsExternalExtensionAcknowledged(good_crx));
   ASSERT_TRUE(prefs->IsExternalExtensionAcknowledged(page_action));
 }
@@ -4253,8 +4255,9 @@
   // Extension should be disabled now, waiting to be reloaded.
   EXPECT_EQ(0u, registry_->enabled_extensions().size());
   EXPECT_EQ(1u, registry_->disabled_extensions().size());
-  EXPECT_EQ(Extension::DISABLE_RELOAD,
-            service_->extension_prefs()->GetDisableReasons(extension_id));
+  EXPECT_EQ(
+      Extension::DISABLE_RELOAD,
+      ExtensionPrefs::Get(profile_.get())->GetDisableReasons(extension_id));
 
   // Reloading again should not crash.
   service_->ReloadExtension(extension_id);
@@ -5808,7 +5811,7 @@
     EXPECT_TRUE(initial_ordinal.Equals(app_sync_data.page_ordinal()));
   }
 
-  AppSorting* sorting = service_->extension_prefs()->app_sorting();
+  AppSorting* sorting = ExtensionPrefs::Get(profile_.get())->app_sorting();
   sorting->SetAppLaunchOrdinal(app->id(), initial_ordinal.CreateAfter());
   {
     syncer::SyncDataList list = extension_sync_service_->GetAllSyncData(
@@ -6912,9 +6915,9 @@
   EXPECT_FALSE(registry_->enabled_extensions().Contains(id));
   EXPECT_TRUE(registry_->blacklisted_extensions().Contains(id));
 
-  EXPECT_TRUE(service_->extension_prefs()->IsExtensionBlacklisted(id));
-  EXPECT_TRUE(
-      service_->extension_prefs()->IsBlacklistedExtensionAcknowledged(id));
+  EXPECT_TRUE(ExtensionPrefs::Get(profile_.get())->IsExtensionBlacklisted(id));
+  EXPECT_TRUE(ExtensionPrefs::Get(profile_.get())
+                  ->IsBlacklistedExtensionAcknowledged(id));
 }
 
 TEST_F(ExtensionServiceTest, ReconcileKnownDisabledNoneDisabled) {
@@ -6941,7 +6944,7 @@
   // A profile with 3 extensions installed: good0, good1, and good2.
   InitializeGoodInstalledExtensionService();
 
-  ExtensionPrefs* extension_prefs = service_->extension_prefs();
+  ExtensionPrefs* extension_prefs = ExtensionPrefs::Get(profile_.get());
 
   // Disable good1.
   extension_prefs->SetExtensionState(good1, Extension::DISABLED);
diff --git a/chrome/browser/extensions/extension_util.cc b/chrome/browser/extensions/extension_util.cc
index 5d5933f..31045757 100644
--- a/chrome/browser/extensions/extension_util.cc
+++ b/chrome/browser/extensions/extension_util.cc
@@ -63,7 +63,7 @@
     }
   }
 
-  ExtensionPrefs* extension_prefs = service->extension_prefs();
+  ExtensionPrefs* extension_prefs = ExtensionPrefs::Get(service->profile());
   // Broadcast unloaded and loaded events to update browser state. Only bother
   // if the value changed and the extension is actually enabled, since there is
   // no UI otherwise.
@@ -129,7 +129,7 @@
   if (allow == AllowFileAccess(extension_id, context))
     return;
 
-  service->extension_prefs()->SetAllowFileAccess(extension_id, allow);
+  ExtensionPrefs::Get(context)->SetAllowFileAccess(extension_id, allow);
 
   bool extension_is_enabled = service->extensions()->Contains(extension_id);
   if (extension_is_enabled)
diff --git a/chrome/browser/extensions/install_tracker_factory.cc b/chrome/browser/extensions/install_tracker_factory.cc
index 593cf44..f0bd4a7c 100644
--- a/chrome/browser/extensions/install_tracker_factory.cc
+++ b/chrome/browser/extensions/install_tracker_factory.cc
@@ -5,12 +5,12 @@
 #include "chrome/browser/extensions/install_tracker_factory.h"
 
 #include "base/memory/singleton.h"
-#include "chrome/browser/extensions/extension_service.h"
+#include "chrome/browser/extensions/extension_system_factory.h"
 #include "chrome/browser/extensions/install_tracker.h"
 #include "chrome/browser/profiles/profile.h"
 #include "components/browser_context_keyed_service/browser_context_dependency_manager.h"
-#include "extensions/browser/extension_system.h"
-#include "extensions/browser/extension_system_provider.h"
+#include "extensions/browser/extension_prefs.h"
+#include "extensions/browser/extension_prefs_factory.h"
 #include "extensions/browser/extensions_browser_client.h"
 
 namespace extensions {
@@ -30,6 +30,7 @@
         "InstallTracker",
         BrowserContextDependencyManager::GetInstance()) {
   DependsOn(ExtensionsBrowserClient::Get()->GetExtensionSystemFactory());
+  DependsOn(ExtensionPrefsFactory::GetInstance());
 }
 
 InstallTrackerFactory::~InstallTrackerFactory() {
@@ -37,10 +38,8 @@
 
 BrowserContextKeyedService* InstallTrackerFactory::BuildServiceInstanceFor(
     content::BrowserContext* context) const {
-  Profile* profile = static_cast<Profile*>(context);
-  ExtensionService* service =
-      extensions::ExtensionSystem::Get(profile)->extension_service();
-  return new InstallTracker(profile, service->extension_prefs());
+  Profile* profile = Profile::FromBrowserContext(context);
+  return new InstallTracker(profile, ExtensionPrefs::Get(context));
 }
 
 content::BrowserContext* InstallTrackerFactory::GetBrowserContextToUse(
diff --git a/chrome/browser/extensions/installed_loader.cc b/chrome/browser/extensions/installed_loader.cc
index 141586cc..36d8ada 100644
--- a/chrome/browser/extensions/installed_loader.cc
+++ b/chrome/browser/extensions/installed_loader.cc
@@ -119,7 +119,7 @@
 InstalledLoader::InstalledLoader(ExtensionService* extension_service)
     : extension_service_(extension_service),
       extension_registry_(ExtensionRegistry::Get(extension_service->profile())),
-      extension_prefs_(extension_service->extension_prefs()) {}
+      extension_prefs_(ExtensionPrefs::Get(extension_service->profile())) {}
 
 InstalledLoader::~InstalledLoader() {
 }
@@ -412,8 +412,7 @@
       extension_registry_->disabled_extensions();
   for (ex = disabled_extensions.begin(); ex != disabled_extensions.end();
        ++ex) {
-    if (extension_service_->extension_prefs()->
-        DidExtensionEscalatePermissions((*ex)->id())) {
+    if (extension_prefs_->DidExtensionEscalatePermissions((*ex)->id())) {
       ++disabled_for_permissions_count;
     }
     if (Manifest::IsExternalLocation((*ex)->location())) {
diff --git a/chrome/browser/extensions/launch_util.cc b/chrome/browser/extensions/launch_util.cc
index ac94c612..d24f40e 100644
--- a/chrome/browser/extensions/launch_util.cc
+++ b/chrome/browser/extensions/launch_util.cc
@@ -7,6 +7,7 @@
 #include "base/command_line.h"
 #include "base/values.h"
 #include "chrome/browser/extensions/extension_service.h"
+#include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/host_desktop.h"
 #include "chrome/common/chrome_switches.h"
 #include "chrome/common/extensions/extension_constants.h"
@@ -89,7 +90,9 @@
                    LaunchType launch_type) {
   DCHECK(launch_type >= LAUNCH_TYPE_FIRST && launch_type < NUM_LAUNCH_TYPES);
 
-  service->extension_prefs()->UpdateExtensionPref(extension_id, kPrefLaunchType,
+  ExtensionPrefs::Get(service->profile())->UpdateExtensionPref(
+      extension_id,
+      kPrefLaunchType,
       new base::FundamentalValue(static_cast<int>(launch_type)));
 
   // Sync the launch type.
diff --git a/chrome/browser/extensions/navigation_observer.cc b/chrome/browser/extensions/navigation_observer.cc
index 252d0bcfa..4d79c6c6 100644
--- a/chrome/browser/extensions/navigation_observer.cc
+++ b/chrome/browser/extensions/navigation_observer.cc
@@ -69,9 +69,7 @@
     return;
   prompted_extensions_.insert(extension->id());
 
-  ExtensionService* extension_service =
-      extensions::ExtensionSystem::Get(profile_)->extension_service();
-  ExtensionPrefs* extension_prefs = extension_service->extension_prefs();
+  ExtensionPrefs* extension_prefs = ExtensionPrefs::Get(profile_);
   if (extension_prefs->DidExtensionEscalatePermissions(extension->id())) {
     // Keep track of the extension id and nav controller we're prompting for.
     // These must be reset in InstallUIProceed and InstallUIAbort.
diff --git a/chrome/browser/extensions/permissions_updater_unittest.cc b/chrome/browser/extensions/permissions_updater_unittest.cc
index 78b9a89d..1fcb9b5 100644
--- a/chrome/browser/extensions/permissions_updater_unittest.cc
+++ b/chrome/browser/extensions/permissions_updater_unittest.cc
@@ -165,7 +165,7 @@
   // Verify that the new granted and active permissions were also stored
   // in the extension preferences. In this case, the granted permissions should
   // be equal to the active permissions.
-  ExtensionPrefs* prefs = service_->extension_prefs();
+  ExtensionPrefs* prefs = ExtensionPrefs::Get(profile_.get());
   scoped_refptr<PermissionSet> granted_permissions =
       active_permissions;
 
diff --git a/chrome/browser/extensions/suspicious_extension_bubble_controller.cc b/chrome/browser/extensions/suspicious_extension_bubble_controller.cc
index c0906f9..6f40d0f 100644
--- a/chrome/browser/extensions/suspicious_extension_bubble_controller.cc
+++ b/chrome/browser/extensions/suspicious_extension_bubble_controller.cc
@@ -10,6 +10,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/extensions/extension_message_bubble.h"
 #include "chrome/browser/extensions/extension_service.h"
+#include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_finder.h"
 #include "chrome/common/url_constants.h"
@@ -29,16 +30,15 @@
 // SuspiciousExtensionBubbleDelegate
 
 SuspiciousExtensionBubbleDelegate::SuspiciousExtensionBubbleDelegate(
-    ExtensionService* service)
-    : service_(service) {
-}
+    Profile* profile)
+    : profile_(profile) {}
 
 SuspiciousExtensionBubbleDelegate::~SuspiciousExtensionBubbleDelegate() {
 }
 
 bool SuspiciousExtensionBubbleDelegate::ShouldIncludeExtension(
       const std::string& extension_id) {
-  extensions::ExtensionPrefs* prefs = service_->extension_prefs();
+  extensions::ExtensionPrefs* prefs = extensions::ExtensionPrefs::Get(profile_);
   if (!prefs->IsExtensionDisabled(extension_id))
     return false;
 
@@ -52,7 +52,7 @@
 void SuspiciousExtensionBubbleDelegate::AcknowledgeExtension(
     const std::string& extension_id,
     ExtensionMessageBubbleController::BubbleAction user_action) {
-  extensions::ExtensionPrefs* prefs = service_->extension_prefs();
+  extensions::ExtensionPrefs* prefs = extensions::ExtensionPrefs::Get(profile_);
   prefs->SetWipeoutAcknowledged(extension_id, true);
 }
 
@@ -144,11 +144,9 @@
 SuspiciousExtensionBubbleController::SuspiciousExtensionBubbleController(
     Profile* profile)
     : ExtensionMessageBubbleController(
-          new SuspiciousExtensionBubbleDelegate(
-              extensions::ExtensionSystem::Get(profile)->extension_service()),
+          new SuspiciousExtensionBubbleDelegate(profile),
           profile),
-      profile_(profile) {
-}
+      profile_(profile) {}
 
 SuspiciousExtensionBubbleController::~SuspiciousExtensionBubbleController() {
 }
diff --git a/chrome/browser/extensions/suspicious_extension_bubble_controller.h b/chrome/browser/extensions/suspicious_extension_bubble_controller.h
index 4e88667..9ed5c90c 100644
--- a/chrome/browser/extensions/suspicious_extension_bubble_controller.h
+++ b/chrome/browser/extensions/suspicious_extension_bubble_controller.h
@@ -6,12 +6,13 @@
 #define CHROME_BROWSER_EXTENSIONS_SUSPICIOUS_EXTENSION_BUBBLE_CONTROLLER_H_
 
 #include <string>
-#include "chrome/browser/extensions/api/profile_keyed_api_factory.h"
+
 #include "chrome/browser/extensions/extension_message_bubble_controller.h"
 #include "extensions/common/extension.h"
 
 class Browser;
 class ExtensionService;
+class Profile;
 
 using extensions::ExtensionMessageBubbleController;
 
@@ -20,7 +21,7 @@
 class SuspiciousExtensionBubbleDelegate
     : public ExtensionMessageBubbleController::Delegate {
  public:
-  explicit SuspiciousExtensionBubbleDelegate(ExtensionService* service);
+  explicit SuspiciousExtensionBubbleDelegate(Profile* profile);
   virtual ~SuspiciousExtensionBubbleDelegate();
 
   // ExtensionMessageBubbleController::Delegate methods.
@@ -43,8 +44,8 @@
       ExtensionMessageBubbleController::BubbleAction action) OVERRIDE;
 
  private:
-  // Our extension service. Weak, not owned by us.
-  ExtensionService* service_;
+  // Our profile. Weak, not owned by us.
+  Profile* profile_;
 
   DISALLOW_COPY_AND_ASSIGN(SuspiciousExtensionBubbleDelegate);
 };
diff --git a/chrome/browser/extensions/unpacked_installer.cc b/chrome/browser/extensions/unpacked_installer.cc
index ec4b96b6..5dd3614 100644
--- a/chrome/browser/extensions/unpacked_installer.cc
+++ b/chrome/browser/extensions/unpacked_installer.cc
@@ -195,7 +195,7 @@
   std::string id = id_util::GenerateIdForPath(extension_path_);
   bool allow_file_access =
       Manifest::ShouldAlwaysAllowFileAccess(Manifest::UNPACKED);
-  ExtensionPrefs* prefs = service_weak_->extension_prefs();
+  ExtensionPrefs* prefs = ExtensionPrefs::Get(service_weak_->profile());
   if (prefs->HasAllowFileAccessSetting(id))
     allow_file_access = prefs->AllowFileAccess(id);
 
@@ -213,7 +213,7 @@
     return true;
   // If there is a "*" in the extension blacklist, then no extensions should be
   // allowed at all (except explicitly whitelisted extensions).
-  ExtensionPrefs* prefs = service_weak_->extension_prefs();
+  ExtensionPrefs* prefs = ExtensionPrefs::Get(service_weak_->profile());
   return !prefs->ExtensionsBlacklistedByDefault();
 }
 
diff --git a/chrome/browser/extensions/user_script_listener_unittest.cc b/chrome/browser/extensions/user_script_listener_unittest.cc
index 34c31f4f..ab089af 100644
--- a/chrome/browser/extensions/user_script_listener_unittest.cc
+++ b/chrome/browser/extensions/user_script_listener_unittest.cc
@@ -16,6 +16,7 @@
 #include "content/public/browser/notification_service.h"
 #include "content/public/browser/resource_controller.h"
 #include "content/public/browser/resource_throttle.h"
+#include "extensions/browser/extension_registry.h"
 #include "net/base/request_priority.h"
 #include "net/url_request/url_request.h"
 #include "net/url_request/url_request_filter.h"
@@ -280,7 +281,7 @@
   LoadTestExtension();
   base::MessageLoop::current()->RunUntilIdle();
 
-  // Fire up a second profile and have it load and extension with a content
+  // Fire up a second profile and have it load an extension with a content
   // script.
   TestingProfile profile2;
   std::string error;
@@ -288,6 +289,8 @@
       "content_script_yahoo.json", &error);
   ASSERT_TRUE(extension.get());
 
+  extensions::ExtensionRegistry::Get(&profile2)->AddEnabled(extension);
+
   content::NotificationService::current()->Notify(
       chrome::NOTIFICATION_EXTENSION_LOADED,
       content::Source<Profile>(&profile2),
diff --git a/chrome/browser/sync/test/integration/sync_app_helper.cc b/chrome/browser/sync/test/integration/sync_app_helper.cc
index e6e9e3f5..6c3a48e 100644
--- a/chrome/browser/sync/test/integration/sync_app_helper.cc
+++ b/chrome/browser/sync/test/integration/sync_app_helper.cc
@@ -13,11 +13,14 @@
 #include "chrome/common/extensions/extension_constants.h"
 #include "chrome/common/extensions/sync_helper.h"
 #include "extensions/browser/app_sorting.h"
+#include "extensions/browser/extension_prefs.h"
 #include "extensions/browser/extension_system.h"
 #include "extensions/common/extension.h"
 #include "extensions/common/extension_set.h"
 #include "extensions/common/id_util.h"
 
+using extensions::ExtensionPrefs;
+
 namespace {
 
 struct AppState {
@@ -48,16 +51,13 @@
 }
 
 // Load all the app specific values for |id| into |app_state|.
-void LoadApp(ExtensionService* extension_service,
+void LoadApp(content::BrowserContext* context,
              const std::string& id,
              AppState* app_state) {
-  app_state->app_launch_ordinal = extension_service->extension_prefs()->
-      app_sorting()->GetAppLaunchOrdinal(id);
-  app_state->page_ordinal = extension_service->extension_prefs()->
-      app_sorting()->GetPageOrdinal(id);
-  app_state->launch_type =
-      extensions::GetLaunchTypePrefValue(extension_service->extension_prefs(),
-                                         id);
+  ExtensionPrefs* prefs = ExtensionPrefs::Get(context);
+  app_state->app_launch_ordinal = prefs->app_sorting()->GetAppLaunchOrdinal(id);
+  app_state->page_ordinal = prefs->app_sorting()->GetPageOrdinal(id);
+  app_state->launch_type = extensions::GetLaunchTypePrefValue(prefs, id);
 }
 
 // Returns a map from |profile|'s installed extensions to their state.
@@ -72,7 +72,7 @@
        it != extensions->end(); ++it) {
     if (extensions::sync_helper::IsSyncableApp(it->get())) {
       const std::string& id = (*it)->id();
-      LoadApp(extension_service, id, &(app_state_map[id]));
+      LoadApp(profile, id, &(app_state_map[id]));
     }
   }
 
@@ -84,7 +84,7 @@
 
   for (std::list<std::string>::const_iterator id = pending_crx_ids.begin();
        id != pending_crx_ids.end(); ++id) {
-    LoadApp(extension_service, *id, &(app_state_map[*id]));
+    LoadApp(profile, *id, &(app_state_map[*id]));
   }
 
   return app_state_map;
@@ -155,37 +155,35 @@
 syncer::StringOrdinal SyncAppHelper::GetPageOrdinalForApp(
     Profile* profile,
     const std::string& name) {
-  return profile->GetExtensionService()->extension_prefs()->
-      app_sorting()->GetPageOrdinal(extensions::id_util::GenerateId(name));
+  return ExtensionPrefs::Get(profile)->app_sorting()->GetPageOrdinal(
+      extensions::id_util::GenerateId(name));
 }
 
 void SyncAppHelper::SetPageOrdinalForApp(
     Profile* profile,
     const std::string& name,
     const syncer::StringOrdinal& page_ordinal) {
-  profile->GetExtensionService()->extension_prefs()->app_sorting()->
-      SetPageOrdinal(extensions::id_util::GenerateId(name), page_ordinal);
+  ExtensionPrefs::Get(profile)->app_sorting()->SetPageOrdinal(
+      extensions::id_util::GenerateId(name), page_ordinal);
 }
 
 syncer::StringOrdinal SyncAppHelper::GetAppLaunchOrdinalForApp(
     Profile* profile,
     const std::string& name) {
-  return profile->GetExtensionService()->extension_prefs()->
-      app_sorting()->GetAppLaunchOrdinal(extensions::id_util::GenerateId(name));
+  return ExtensionPrefs::Get(profile)->app_sorting()->GetAppLaunchOrdinal(
+      extensions::id_util::GenerateId(name));
 }
 
 void SyncAppHelper::SetAppLaunchOrdinalForApp(
     Profile* profile,
     const std::string& name,
     const syncer::StringOrdinal& app_launch_ordinal) {
-  profile->GetExtensionService()->extension_prefs()->app_sorting()->
-      SetAppLaunchOrdinal(extensions::id_util::GenerateId(name),
-                          app_launch_ordinal);
+  ExtensionPrefs::Get(profile)->app_sorting()->SetAppLaunchOrdinal(
+      extensions::id_util::GenerateId(name), app_launch_ordinal);
 }
 
 void SyncAppHelper::FixNTPOrdinalCollisions(Profile* profile) {
-  profile->GetExtensionService()->extension_prefs()->app_sorting()->
-      FixNTPOrdinalCollisions();
+  ExtensionPrefs::Get(profile)->app_sorting()->FixNTPOrdinalCollisions();
 }
 
 SyncAppHelper::SyncAppHelper() : setup_completed_(false) {}
diff --git a/chrome/browser/sync/test/integration/sync_app_list_helper.cc b/chrome/browser/sync/test/integration/sync_app_list_helper.cc
index 17751baa..79dc84e 100644
--- a/chrome/browser/sync/test/integration/sync_app_list_helper.cc
+++ b/chrome/browser/sync/test/integration/sync_app_list_helper.cc
@@ -5,13 +5,13 @@
 #include "chrome/browser/sync/test/integration/sync_app_list_helper.h"
 
 #include "base/strings/stringprintf.h"
-#include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/sync/test/integration/sync_datatype_helper.h"
 #include "chrome/browser/sync/test/integration/sync_test.h"
 #include "chrome/browser/ui/app_list/app_list_syncable_service.h"
 #include "chrome/browser/ui/app_list/app_list_syncable_service_factory.h"
 #include "chrome/common/extensions/sync_helper.h"
+#include "extensions/browser/app_sorting.h"
 #include "extensions/browser/extension_system.h"
 #include "ui/app_list/app_list_folder_item.h"
 #include "ui/app_list/app_list_item.h"
@@ -170,8 +170,7 @@
                                   AppListItem* item,
                                   const std::string& label) {
   extensions::AppSorting* s =
-      extensions::ExtensionSystem::Get(profile)->extension_service()->
-      extension_prefs()->app_sorting();
+      extensions::ExtensionPrefs::Get(profile)->app_sorting();
   std::string id = item->id();
   if (item->GetItemType() == AppListFolderItem::kItemType) {
     VLOG(1) << label << item->ToDebugString();
diff --git a/chrome/browser/sync/test/integration/two_client_app_list_sync_test.cc b/chrome/browser/sync/test/integration/two_client_app_list_sync_test.cc
index d16e88c..3fce430 100644
--- a/chrome/browser/sync/test/integration/two_client_app_list_sync_test.cc
+++ b/chrome/browser/sync/test/integration/two_client_app_list_sync_test.cc
@@ -16,6 +16,7 @@
 #include "chrome/common/chrome_switches.h"
 #include "content/public/browser/notification_service.h"
 #include "content/public/test/test_utils.h"
+#include "extensions/browser/extension_prefs.h"
 #include "extensions/browser/extension_system.h"
 #include "ui/app_list/app_list_switches.h"
 
@@ -434,10 +435,10 @@
   ASSERT_TRUE(AllProfilesHaveSameAppListAsVerifier());
 
   // Flag Default app in Profile 1.
-  extensions::ExtensionSystem::Get(GetProfile(1))->
-      extension_service()->extension_prefs()->
-      UpdateExtensionPref(default_app_id, "was_installed_by_default",
-                          new base::FundamentalValue(true));
+  extensions::ExtensionPrefs::Get(GetProfile(1))
+      ->UpdateExtensionPref(default_app_id,
+                            "was_installed_by_default",
+                            new base::FundamentalValue(true));
 
   // Remove the default app in Profile 0 and verifier, ensure it was removed
   // in Profile 1.
diff --git a/chrome/browser/sync/test/integration/two_client_apps_sync_test.cc b/chrome/browser/sync/test/integration/two_client_apps_sync_test.cc
index 8ae32723..b99a9a9 100644
--- a/chrome/browser/sync/test/integration/two_client_apps_sync_test.cc
+++ b/chrome/browser/sync/test/integration/two_client_apps_sync_test.cc
@@ -12,6 +12,7 @@
 #include "chrome/browser/sync/test/integration/sync_test.h"
 #include "chrome/common/extensions/extension_constants.h"
 #include "extensions/browser/app_sorting.h"
+#include "extensions/browser/extension_prefs.h"
 #include "sync/api/string_ordinal.h"
 
 using apps_helper::AllProfilesHaveSameAppsAsVerifier;
@@ -396,29 +397,29 @@
 
   // Change the app launch ordinal.
   syncer::StringOrdinal cws_app_launch_ordinal =
-      GetProfile(0)->GetExtensionService()->
-      extension_prefs()->app_sorting()->GetAppLaunchOrdinal(
-          extension_misc::kWebStoreAppId);
-  GetProfile(0)->GetExtensionService()->extension_prefs()->app_sorting()->
-      SetAppLaunchOrdinal(
-          extension_misc::kWebStoreAppId, cws_app_launch_ordinal.CreateAfter());
-  verifier()->GetExtensionService()->extension_prefs()->app_sorting()->
-      SetAppLaunchOrdinal(
-          extension_misc::kWebStoreAppId, cws_app_launch_ordinal.CreateAfter());
+      extensions::ExtensionPrefs::Get(GetProfile(0))
+          ->app_sorting()
+          ->GetAppLaunchOrdinal(extension_misc::kWebStoreAppId);
+  extensions::ExtensionPrefs::Get(GetProfile(0))
+      ->app_sorting()
+      ->SetAppLaunchOrdinal(extension_misc::kWebStoreAppId,
+                            cws_app_launch_ordinal.CreateAfter());
+  extensions::ExtensionPrefs::Get(verifier())
+      ->app_sorting()
+      ->SetAppLaunchOrdinal(extension_misc::kWebStoreAppId,
+                            cws_app_launch_ordinal.CreateAfter());
   ASSERT_TRUE(AwaitQuiescence());
   ASSERT_TRUE(AllProfilesHaveSameAppsAsVerifier());
 
   // Change the page ordinal.
   syncer::StringOrdinal cws_page_ordinal =
-      GetProfile(1)->GetExtensionService()->
-      extension_prefs()->app_sorting()->GetPageOrdinal(
-          extension_misc::kWebStoreAppId);
-  GetProfile(1)->GetExtensionService()->extension_prefs()->
-      app_sorting()->SetPageOrdinal(extension_misc::kWebStoreAppId,
-                                    cws_page_ordinal.CreateAfter());
-  verifier()->GetExtensionService()->extension_prefs()->
-      app_sorting()->SetPageOrdinal(extension_misc::kWebStoreAppId,
-                                    cws_page_ordinal.CreateAfter());
+      extensions::ExtensionPrefs::Get(GetProfile(1))
+          ->app_sorting()
+          ->GetPageOrdinal(extension_misc::kWebStoreAppId);
+  extensions::ExtensionPrefs::Get(GetProfile(1))->app_sorting()->SetPageOrdinal(
+      extension_misc::kWebStoreAppId, cws_page_ordinal.CreateAfter());
+  extensions::ExtensionPrefs::Get(verifier())->app_sorting()->SetPageOrdinal(
+      extension_misc::kWebStoreAppId, cws_page_ordinal.CreateAfter());
   ASSERT_TRUE(AwaitQuiescence());
   ASSERT_TRUE(AllProfilesHaveSameAppsAsVerifier());
 }
diff --git a/chrome/browser/themes/theme_service.cc b/chrome/browser/themes/theme_service.cc
index 20fa50e..45173ae 100644
--- a/chrome/browser/themes/theme_service.cc
+++ b/chrome/browser/themes/theme_service.cc
@@ -23,6 +23,7 @@
 #include "chrome/common/pref_names.h"
 #include "content/public/browser/notification_service.h"
 #include "content/public/browser/user_metrics.h"
+#include "extensions/browser/extension_prefs.h"
 #include "extensions/browser/extension_system.h"
 #include "extensions/common/extension.h"
 #include "extensions/common/extension_set.h"
@@ -338,7 +339,7 @@
   std::vector<std::string> remove_list;
   scoped_ptr<const extensions::ExtensionSet> extensions(
       service->GenerateInstalledExtensionsSet());
-  extensions::ExtensionPrefs* prefs = service->extension_prefs();
+  extensions::ExtensionPrefs* prefs = extensions::ExtensionPrefs::Get(profile_);
   for (extensions::ExtensionSet::const_iterator it = extensions->begin();
        it != extensions->end(); ++it) {
     const extensions::Extension* extension = *it;
diff --git a/chrome/browser/themes/theme_syncable_service.cc b/chrome/browser/themes/theme_syncable_service.cc
index 78065b3..671a01f 100644
--- a/chrome/browser/themes/theme_syncable_service.cc
+++ b/chrome/browser/themes/theme_syncable_service.cc
@@ -10,6 +10,7 @@
 #include "chrome/browser/themes/theme_service.h"
 #include "chrome/common/extensions/manifest_url_handler.h"
 #include "chrome/common/extensions/sync_helper.h"
+#include "extensions/browser/extension_prefs.h"
 #include "extensions/browser/extension_system.h"
 #include "extensions/common/extension.h"
 #include "sync/protocol/sync.pb.h"
@@ -219,7 +220,7 @@
         return;
       }
       int disabled_reasons =
-          extensions_service->extension_prefs()->GetDisableReasons(id);
+          extensions::ExtensionPrefs::Get(profile_)->GetDisableReasons(id);
       if (!extensions_service->IsExtensionEnabled(id) &&
           disabled_reasons != extensions::Extension::DISABLE_USER_ACTION) {
         DVLOG(1) << "Theme " << id << " is disabled with reason "
diff --git a/chrome/browser/themes/theme_syncable_service_unittest.cc b/chrome/browser/themes/theme_syncable_service_unittest.cc
index d1b6ce9..d75d60e 100644
--- a/chrome/browser/themes/theme_syncable_service_unittest.cc
+++ b/chrome/browser/themes/theme_syncable_service_unittest.cc
@@ -187,8 +187,8 @@
     scoped_refptr<extensions::PermissionSet> permissions =
         new extensions::PermissionSet(empty_set, empty_manifest_permissions,
                                       empty_extent, empty_extent);
-    service->extension_prefs()->AddGrantedPermissions(
-        theme_extension_->id(), permissions.get());
+    extensions::ExtensionPrefs::Get(profile_.get())
+        ->AddGrantedPermissions(theme_extension_->id(), permissions.get());
     service->AddExtension(theme_extension_.get());
     ASSERT_EQ(1u, service->extensions()->size());
   }
diff --git a/chrome/browser/ui/app_list/app_list_controller_delegate.cc b/chrome/browser/ui/app_list/app_list_controller_delegate.cc
index d45be3b..807a0d6c 100644
--- a/chrome/browser/ui/app_list/app_list_controller_delegate.cc
+++ b/chrome/browser/ui/app_list/app_list_controller_delegate.cc
@@ -16,6 +16,7 @@
 #include "chrome/browser/ui/browser_navigator.h"
 #include "chrome/common/extensions/extension_constants.h"
 #include "chrome/common/extensions/manifest_url_handler.h"
+#include "extensions/browser/extension_prefs.h"
 #include "extensions/browser/extension_registry.h"
 #include "extensions/browser/extension_system.h"
 #include "extensions/browser/management_policy.h"
@@ -182,9 +183,7 @@
 extensions::LaunchType AppListControllerDelegate::GetExtensionLaunchType(
     Profile* profile,
     const std::string& app_id) {
-  ExtensionService* service =
-      extensions::ExtensionSystem::Get(profile)->extension_service();
-  return extensions::GetLaunchType(service->extension_prefs(),
+  return extensions::GetLaunchType(extensions::ExtensionPrefs::Get(profile),
                                    GetExtension(profile, app_id));
 }
 
diff --git a/chrome/browser/ui/app_list/app_list_syncable_service.cc b/chrome/browser/ui/app_list/app_list_syncable_service.cc
index f97c94f..1b41936 100644
--- a/chrome/browser/ui/app_list/app_list_syncable_service.cc
+++ b/chrome/browser/ui/app_list/app_list_syncable_service.cc
@@ -94,7 +94,8 @@
 }
 
 bool AppIsDefault(ExtensionService* service, const std::string& id) {
-  return service && service->extension_prefs()->WasInstalledByDefault(id);
+  return service && extensions::ExtensionPrefs::Get(service->profile())
+                        ->WasInstalledByDefault(id);
 }
 
 void UninstallExtension(ExtensionService* service, const std::string& id) {
diff --git a/chrome/browser/ui/app_list/extension_app_item.cc b/chrome/browser/ui/app_list/extension_app_item.cc
index 690a3e8..791a72a 100644
--- a/chrome/browser/ui/app_list/extension_app_item.cc
+++ b/chrome/browser/ui/app_list/extension_app_item.cc
@@ -104,9 +104,7 @@
 };
 
 extensions::AppSorting* GetAppSorting(Profile* profile) {
-  ExtensionService* service =
-      extensions::ExtensionSystem::Get(profile)->extension_service();
-  return service->extension_prefs()->app_sorting();
+  return extensions::ExtensionPrefs::Get(profile)->app_sorting();
 }
 
 const color_utils::HSL shift = {-1, 0, 0.6};
@@ -155,12 +153,11 @@
   if (!streamlined_hosted_apps)
     return false;
 #endif
-  const ExtensionService* service =
-      extensions::ExtensionSystem::Get(profile_)->extension_service();
-
-  extensions::LaunchType launch_type = GetExtension()
-      ? extensions::GetLaunchType(service->extension_prefs(), GetExtension())
-      : extensions::LAUNCH_TYPE_WINDOW;
+  extensions::LaunchType launch_type =
+      GetExtension()
+          ? extensions::GetLaunchType(extensions::ExtensionPrefs::Get(profile_),
+                                      GetExtension())
+          : extensions::LAUNCH_TYPE_WINDOW;
 
   return !is_platform_app_ && extension_id_ != extension_misc::kChromeAppId &&
       (!streamlined_hosted_apps ||
@@ -217,7 +214,8 @@
 
   ExtensionService* service =
       extensions::ExtensionSystem::Get(profile_)->extension_service();
-  extensions::AppSorting* sorting = service->extension_prefs()->app_sorting();
+  extensions::ExtensionPrefs* prefs = extensions::ExtensionPrefs::Get(profile_);
+  extensions::AppSorting* sorting = GetAppSorting(profile_);
 
   syncer::StringOrdinal page;
   std::string prev_id, next_id;
@@ -234,7 +232,7 @@
     if (page.Equals(sorting->GetPageOrdinal(next->extension_id())))
       next_id = next->extension_id();
   }
-  service->extension_prefs()->SetAppDraggedByUser(extension_id_);
+  prefs->SetAppDraggedByUser(extension_id_);
   sorting->SetPageOrdinal(extension_id_, page);
   service->OnExtensionMoved(extension_id_, prev_id, next_id);
   UpdatePositionFromExtensionOrdering();
diff --git a/chrome/browser/ui/app_list/extension_app_model_builder.cc b/chrome/browser/ui/app_list/extension_app_model_builder.cc
index 56de1b9..e05b788 100644
--- a/chrome/browser/ui/app_list/extension_app_model_builder.cc
+++ b/chrome/browser/ui/app_list/extension_app_model_builder.cc
@@ -7,11 +7,11 @@
 #include <algorithm>
 
 #include "base/auto_reset.h"
+#include "base/bind.h"
 #include "base/callback.h"
 #include "base/command_line.h"
 #include "base/prefs/pref_service.h"
 #include "chrome/browser/chrome_notification_types.h"
-#include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/extensions/install_tracker.h"
 #include "chrome/browser/extensions/install_tracker_factory.h"
 #include "chrome/browser/profiles/profile.h"
@@ -25,6 +25,7 @@
 #include "content/public/browser/notification_service.h"
 #include "extensions/browser/extension_prefs.h"
 #include "extensions/browser/extension_system.h"
+#include "extensions/browser/extensions_browser_client.h"
 #include "extensions/browser/pref_names.h"
 #include "extensions/common/extension.h"
 #include "extensions/common/extension_set.h"
@@ -90,13 +91,10 @@
           switches::kEnableStreamlinedHostedApps))
     return;
 
-  const ExtensionService* extension_service =
-      extensions::ExtensionSystem::Get(profile_)->extension_service();
-  if (!extension_service)
-    return;
-
+  extensions::ExtensionsBrowserClient* client =
+      extensions::ExtensionsBrowserClient::Get();
   extension_pref_change_registrar_.Init(
-      extension_service->extension_prefs()->pref_service());
+      client->GetPrefServiceForContext(profile_));
   extension_pref_change_registrar_.Add(
     extensions::pref_names::kExtensions,
     base::Bind(&ExtensionAppModelBuilder::OnExtensionPreferenceChanged,
diff --git a/chrome/browser/ui/app_list/extension_app_model_builder_unittest.cc b/chrome/browser/ui/app_list/extension_app_model_builder_unittest.cc
index b07eb0f..c4088087 100644
--- a/chrome/browser/ui/app_list/extension_app_model_builder_unittest.cc
+++ b/chrome/browser/ui/app_list/extension_app_model_builder_unittest.cc
@@ -250,7 +250,8 @@
 }
 
 TEST_F(ExtensionAppModelBuilderTest, OrdinalPrefsChange) {
-  extensions::AppSorting* sorting = service_->extension_prefs()->app_sorting();
+  extensions::AppSorting* sorting =
+      extensions::ExtensionPrefs::Get(profile_.get())->app_sorting();
 
   syncer::StringOrdinal package_app_page =
       sorting->GetPageOrdinal(kPackagedApp1Id);
@@ -272,7 +273,8 @@
 }
 
 TEST_F(ExtensionAppModelBuilderTest, OnExtensionMoved) {
-  extensions::AppSorting* sorting = service_->extension_prefs()->app_sorting();
+  extensions::AppSorting* sorting =
+      extensions::ExtensionPrefs::Get(profile_.get())->app_sorting();
   sorting->SetPageOrdinal(kHostedAppId,
                           sorting->GetPageOrdinal(kPackagedApp1Id));
 
@@ -294,11 +296,13 @@
 
 TEST_F(ExtensionAppModelBuilderTest, InvalidOrdinal) {
   // Creates a no-ordinal case.
-  extensions::AppSorting* sorting = service_->extension_prefs()->app_sorting();
+  extensions::AppSorting* sorting =
+      extensions::ExtensionPrefs::Get(profile_.get())->app_sorting();
   sorting->ClearOrdinals(kPackagedApp1Id);
 
   // Creates a corrupted ordinal case.
-  extensions::ExtensionScopedPrefs* scoped_prefs = service_->extension_prefs();
+  extensions::ExtensionScopedPrefs* scoped_prefs =
+      extensions::ExtensionPrefs::Get(profile_.get());
   scoped_prefs->UpdateExtensionPref(
       kHostedAppId,
       "page_ordinal",
@@ -313,7 +317,8 @@
   syncer::StringOrdinal conflict_ordinal =
       syncer::StringOrdinal::CreateInitialOrdinal();
 
-  extensions::AppSorting* sorting = service_->extension_prefs()->app_sorting();
+  extensions::AppSorting* sorting =
+      extensions::ExtensionPrefs::Get(profile_.get())->app_sorting();
   sorting->SetPageOrdinal(kHostedAppId, conflict_ordinal);
   sorting->SetAppLaunchOrdinal(kHostedAppId, conflict_ordinal);
 
diff --git a/chrome/browser/ui/app_list/recommended_apps.cc b/chrome/browser/ui/app_list/recommended_apps.cc
index 76833fde..94b4edd3 100644
--- a/chrome/browser/ui/app_list/recommended_apps.cc
+++ b/chrome/browser/ui/app_list/recommended_apps.cc
@@ -8,16 +8,13 @@
 #include <vector>
 
 #include "base/bind.h"
-#include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/extensions/install_tracker.h"
 #include "chrome/browser/extensions/install_tracker_factory.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/app_list/recommended_apps_observer.h"
 #include "chrome/common/pref_names.h"
 #include "extensions/browser/extension_prefs.h"
-#include "extensions/browser/extension_system.h"
-#include "extensions/browser/extension_system_provider.h"
-#include "extensions/browser/extensions_browser_client.h"
+#include "extensions/browser/extension_registry.h"
 #include "extensions/browser/pref_names.h"
 #include "extensions/common/extension.h"
 #include "extensions/common/extension_set.h"
@@ -45,9 +42,7 @@
 RecommendedApps::RecommendedApps(Profile* profile) : profile_(profile) {
   extensions::InstallTrackerFactory::GetForProfile(profile_)->AddObserver(this);
 
-  ExtensionService* service =
-      extensions::ExtensionSystem::Get(profile_)->extension_service();
-  extensions::ExtensionPrefs* prefs = service->extension_prefs();
+  extensions::ExtensionPrefs* prefs = extensions::ExtensionPrefs::Get(profile_);
   pref_change_registrar_.Init(prefs->pref_service());
   pref_change_registrar_.Add(extensions::pref_names::kExtensions,
                              base::Bind(&RecommendedApps::Update,
@@ -70,14 +65,14 @@
 }
 
 void RecommendedApps::Update() {
-  ExtensionService* service =
-      extensions::ExtensionSystem::Get(profile_)->extension_service();
-  extensions::ExtensionPrefs* prefs = service->extension_prefs();
+  extensions::ExtensionPrefs* prefs = extensions::ExtensionPrefs::Get(profile_);
 
   std::vector<AppSortInfo> sorted_apps;
-  const extensions::ExtensionSet* extensions = service->extensions();
-  for (extensions::ExtensionSet::const_iterator app = extensions->begin();
-       app != extensions->end(); ++app) {
+  const extensions::ExtensionSet& extensions =
+      extensions::ExtensionRegistry::Get(profile_)->enabled_extensions();
+  for (extensions::ExtensionSet::const_iterator app = extensions.begin();
+       app != extensions.end();
+       ++app) {
     if (!(*app)->ShouldDisplayInAppLauncher())
       continue;
 
diff --git a/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc b/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc
index 4ad7725..d16e333 100644
--- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc
+++ b/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc
@@ -70,6 +70,7 @@
 #include "content/public/browser/notification_registrar.h"
 #include "content/public/browser/notification_service.h"
 #include "content/public/browser/web_contents.h"
+#include "extensions/browser/extension_prefs.h"
 #include "extensions/browser/extension_system.h"
 #include "extensions/common/extension.h"
 #include "extensions/common/extension_resource.h"
@@ -701,9 +702,8 @@
   if (!extension)
     return extensions::LAUNCH_TYPE_DEFAULT;
 
-  return extensions::GetLaunchType(
-      profile_->GetExtensionService()->extension_prefs(),
-      extension);
+  return extensions::GetLaunchType(extensions::ExtensionPrefs::Get(profile_),
+                                   extension);
 }
 
 ash::ShelfID ChromeLauncherController::GetShelfIDForAppID(
diff --git a/chrome/browser/ui/cocoa/extensions/extension_action_context_menu_controller.mm b/chrome/browser/ui/cocoa/extensions/extension_action_context_menu_controller.mm
index dfdd9467..591b792a 100644
--- a/chrome/browser/ui/cocoa/extensions/extension_action_context_menu_controller.mm
+++ b/chrome/browser/ui/cocoa/extensions/extension_action_context_menu_controller.mm
@@ -24,6 +24,7 @@
 #include "chrome/common/pref_names.h"
 #include "chrome/common/url_constants.h"
 #include "content/public/browser/web_contents.h"
+#include "extensions/browser/extension_prefs.h"
 #include "extensions/browser/extension_system.h"
 #include "extensions/common/extension.h"
 #include "grit/chromium_strings.h"
@@ -176,8 +177,7 @@
 
 - (void)onHide:(id)sender {
   extensions::ExtensionActionAPI::SetBrowserActionVisibility(
-      extensions::ExtensionSystem::Get(
-          browser_->profile())->extension_service()->extension_prefs(),
+      extensions::ExtensionPrefs::Get(browser_->profile()),
       extension_->id(),
       false);
 }
diff --git a/chrome/browser/ui/extensions/application_launch.cc b/chrome/browser/ui/extensions/application_launch.cc
index 51be341..2e4cd22b 100644
--- a/chrome/browser/ui/extensions/application_launch.cc
+++ b/chrome/browser/ui/extensions/application_launch.cc
@@ -172,10 +172,8 @@
 #if defined(USE_ASH)
   // In ash, LAUNCH_TYPE_FULLSCREEN launches in a maximized app window and
   // LAUNCH_TYPE_WINDOW launches in a normal app window.
-  ExtensionService* service =
-      extensions::ExtensionSystem::Get(profile)->extension_service();
-  extensions::LaunchType launch_type = extensions::GetLaunchType(
-      service->extension_prefs(), extension);
+  extensions::LaunchType launch_type =
+      extensions::GetLaunchType(ExtensionPrefs::Get(profile), extension);
   if (launch_type == extensions::LAUNCH_TYPE_FULLSCREEN)
     return ui::SHOW_STATE_MAXIMIZED;
   else if (launch_type == extensions::LAUNCH_TYPE_WINDOW)
@@ -261,13 +259,8 @@
     browser->window()->Activate();
   }
 
-  // Check the prefs for overridden mode.
-  ExtensionService* extension_service =
-      extensions::ExtensionSystem::Get(profile)->extension_service();
-  DCHECK(extension_service);
-
-  extensions::LaunchType launch_type = extensions::GetLaunchType(
-      extension_service->extension_prefs(), extension);
+  extensions::LaunchType launch_type =
+      extensions::GetLaunchType(ExtensionPrefs::Get(profile), extension);
   UMA_HISTOGRAM_ENUMERATION("Extensions.AppTabLaunchType", launch_type, 100);
 
   int add_type = TabStripModel::ADD_ACTIVE;
@@ -338,8 +331,7 @@
   Profile* profile = params.profile;
 
   WebContents* tab = NULL;
-  ExtensionPrefs* prefs = extensions::ExtensionSystem::Get(profile)->
-      extension_service()->extension_prefs();
+  ExtensionPrefs* prefs = ExtensionPrefs::Get(profile);
   prefs->SetActiveBit(extension->id(), true);
 
   UMA_HISTOGRAM_ENUMERATION(
@@ -428,14 +420,10 @@
       override_url(),
       override_bounds(),
       command_line(CommandLine::NO_PROGRAM) {
-  ExtensionService* service =
-      extensions::ExtensionSystem::Get(profile)->extension_service();
-  DCHECK(service);
-
   // Look up the app preference to find out the right launch container. Default
   // is to launch as a regular tab.
-  container = extensions::GetLaunchContainer(
-      service->extension_prefs(), extension);
+  container =
+      extensions::GetLaunchContainer(ExtensionPrefs::Get(profile), extension);
 }
 
 AppLaunchParams::AppLaunchParams(Profile* profile,
@@ -455,14 +443,10 @@
   } else if (disposition == NEW_WINDOW) {
     container = extensions::LAUNCH_CONTAINER_WINDOW;
   } else {
-    ExtensionService* service =
-        extensions::ExtensionSystem::Get(profile)->extension_service();
-    DCHECK(service);
-
     // Look at preference to find the right launch container.  If no preference
     // is set, launch as a regular tab.
-    container = extensions::GetLaunchContainer(
-        service->extension_prefs(), extension);
+    container =
+        extensions::GetLaunchContainer(ExtensionPrefs::Get(profile), extension);
     disposition = NEW_FOREGROUND_TAB;
   }
 }
diff --git a/chrome/browser/ui/extensions/extension_enable_flow.cc b/chrome/browser/ui/extensions/extension_enable_flow.cc
index 03534bfa..4586331c 100644
--- a/chrome/browser/ui/extensions/extension_enable_flow.cc
+++ b/chrome/browser/ui/extensions/extension_enable_flow.cc
@@ -85,8 +85,8 @@
     return;
   }
 
-  extensions::ExtensionPrefs* extension_prefs = service->extension_prefs();
-  if (!extension_prefs->DidExtensionEscalatePermissions(extension_id_)) {
+  extensions::ExtensionPrefs* prefs = extensions::ExtensionPrefs::Get(profile_);
+  if (!prefs->DidExtensionEscalatePermissions(extension_id_)) {
     // Enable the extension immediately if its privileges weren't escalated.
     // This is a no-op if the extension was previously terminated.
     service->EnableExtension(extension_id_);
diff --git a/chrome/browser/ui/startup/startup_browser_creator_impl.cc b/chrome/browser/ui/startup/startup_browser_creator_impl.cc
index 6f794fd..a40921f 100644
--- a/chrome/browser/ui/startup/startup_browser_creator_impl.cc
+++ b/chrome/browser/ui/startup/startup_browser_creator_impl.cc
@@ -87,6 +87,7 @@
 #include "content/public/browser/storage_partition.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/browser/web_contents_view.h"
+#include "extensions/browser/extension_prefs.h"
 #include "extensions/browser/extension_system.h"
 #include "extensions/common/constants.h"
 #include "grit/locale_settings.h"
@@ -204,12 +205,12 @@
   // Look at preferences to find the right launch container. If no
   // preference is set, launch as a window.
   extensions::LaunchContainer launch_container = extensions::GetLaunchContainer(
-      extensions_service->extension_prefs(), extension);
+      extensions::ExtensionPrefs::Get(profile), extension);
 
   if (!CommandLine::ForCurrentProcess()->HasSwitch(
-          switches::kEnableStreamlinedHostedApps) &&
+           switches::kEnableStreamlinedHostedApps) &&
       !extensions::HasPreferredLaunchContainer(
-          extensions_service->extension_prefs(), extension)) {
+           extensions::ExtensionPrefs::Get(profile), extension)) {
     launch_container = extensions::LAUNCH_CONTAINER_WINDOW;
   }
 
diff --git a/chrome/browser/ui/sync/profile_signin_confirmation_helper_unittest.cc b/chrome/browser/ui/sync/profile_signin_confirmation_helper_unittest.cc
index 993bda134..6b7a58f 100644
--- a/chrome/browser/ui/sync/profile_signin_confirmation_helper_unittest.cc
+++ b/chrome/browser/ui/sync/profile_signin_confirmation_helper_unittest.cc
@@ -33,6 +33,7 @@
 #include "components/user_prefs/pref_registry_syncable.h"
 #include "content/public/test/test_browser_thread_bundle.h"
 #include "content/public/test/test_utils.h"
+#include "extensions/browser/extension_prefs.h"
 #include "extensions/common/extension.h"
 #include "extensions/common/manifest_constants.h"
 #include "extensions/common/permissions/permission_set.h"
@@ -201,7 +202,7 @@
   // (The web store doesn't count.)
   scoped_refptr<extensions::Extension> webstore =
       CreateExtension("web store", extension_misc::kWebStoreAppId);
-  extensions->extension_prefs()->AddGrantedPermissions(
+  extensions::ExtensionPrefs::Get(profile_.get())->AddGrantedPermissions(
       webstore->id(), make_scoped_refptr(new extensions::PermissionSet).get());
   extensions->AddExtension(webstore.get());
   EXPECT_FALSE(GetCallbackResult(
@@ -209,7 +210,7 @@
 
   scoped_refptr<extensions::Extension> extension =
       CreateExtension("foo", std::string());
-  extensions->extension_prefs()->AddGrantedPermissions(
+  extensions::ExtensionPrefs::Get(profile_.get())->AddGrantedPermissions(
       extension->id(), make_scoped_refptr(new extensions::PermissionSet).get());
   extensions->AddExtension(extension.get());
   EXPECT_TRUE(GetCallbackResult(
diff --git a/chrome/browser/ui/views/toolbar/browser_actions_container_browsertest.cc b/chrome/browser/ui/views/toolbar/browser_actions_container_browsertest.cc
index d0d94494..a707bb7 100644
--- a/chrome/browser/ui/views/toolbar/browser_actions_container_browsertest.cc
+++ b/chrome/browser/ui/views/toolbar/browser_actions_container_browsertest.cc
@@ -8,8 +8,8 @@
 #include "chrome/browser/extensions/api/extension_action/extension_action_api.h"
 #include "chrome/browser/extensions/browser_action_test_util.h"
 #include "chrome/browser/extensions/extension_browsertest.h"
-#include "chrome/browser/extensions/extension_service.h"
 #include "content/public/test/test_utils.h"
+#include "extensions/browser/extension_prefs.h"
 
 using extensions::Extension;
 
@@ -181,9 +181,6 @@
 
   // Force hide this browser action.
   extensions::ExtensionActionAPI::SetBrowserActionVisibility(
-      extensions::ExtensionSystem::Get(browser()->profile())->
-          extension_service()->extension_prefs(),
-      idA,
-      false);
+      extensions::ExtensionPrefs::Get(browser()->profile()), idA, false);
   EXPECT_EQ(0, browser_actions_bar()->VisibleBrowserActions());
 }
diff --git a/chrome/browser/ui/webui/extensions/extension_info_ui.cc b/chrome/browser/ui/webui/extensions/extension_info_ui.cc
index b2dbfd00..33c6fe9 100644
--- a/chrome/browser/ui/webui/extensions/extension_info_ui.cc
+++ b/chrome/browser/ui/webui/extensions/extension_info_ui.cc
@@ -57,8 +57,9 @@
 
 void ExtensionInfoUI::AddExtensionDataToSource(
     const std::string& extension_id) {
-  ExtensionService* extension_service = ExtensionSystem::Get(
-      Profile::FromWebUI(web_ui()))->extension_service();
+  Profile* profile = Profile::FromWebUI(web_ui());
+  ExtensionService* extension_service =
+      ExtensionSystem::Get(profile)->extension_service();
   const Extension* extension =
       extension_service->extensions()->GetByID(extension_id);
   if (!extension)
@@ -76,8 +77,8 @@
                                       false, NULL);
   source_->AddString("icon", base::UTF8ToUTF16(icon.spec()));
   // Set the last update time (the install time).
-  base::Time install_time = extension_service->extension_prefs()->
-      GetInstallTime(extension_id);
+  base::Time install_time =
+      ExtensionPrefs::Get(profile)->GetInstallTime(extension_id);
   source_->AddString("installTime", base::TimeFormatShortDate(install_time));
 }
 
diff --git a/chrome/browser/ui/webui/extensions/extension_settings_handler.cc b/chrome/browser/ui/webui/extensions/extension_settings_handler.cc
index 491c188b..5fbee8f 100644
--- a/chrome/browser/ui/webui/extensions/extension_settings_handler.cc
+++ b/chrome/browser/ui/webui/extensions/extension_settings_handler.cc
@@ -198,7 +198,7 @@
   bool enabled = extension_service_->IsExtensionEnabled(extension->id());
   GetExtensionBasicInfo(extension, enabled, extension_data);
 
-  ExtensionPrefs* prefs = extension_service_->extension_prefs();
+  ExtensionPrefs* prefs = ExtensionPrefs::Get(extension_service_->profile());
   int disable_reasons = prefs->GetDisableReasons(extension->id());
 
   bool suspicious_install =
@@ -259,8 +259,7 @@
   extension_data->SetString("locationText", location_text);
 
   base::string16 blacklist_text;
-  switch (extension_service_->extension_prefs()->GetExtensionBlacklistState(
-              extension->id())) {
+  switch (prefs->GetExtensionBlacklistState(extension->id())) {
     case BLACKLISTED_SECURITY_VULNERABILITY:
       blacklist_text = l10n_util::GetStringUTF16(
           IDS_OPTIONS_BLACKLISTED_SECURITY_VULNERABILITY);
@@ -287,8 +286,7 @@
   else
     extension_data->SetInteger("order", 2);
 
-  if (!ExtensionActionAPI::GetBrowserActionVisibility(
-          extension_service_->extension_prefs(), extension->id())) {
+  if (!ExtensionActionAPI::GetBrowserActionVisibility(prefs, extension->id())) {
     extension_data->SetBoolean("enable_show_button", true);
   }
 
@@ -752,7 +750,7 @@
   results.SetBoolean("developerMode", developer_mode);
 
   bool load_unpacked_disabled =
-      extension_service_->extension_prefs()->ExtensionsBlacklistedByDefault();
+      ExtensionPrefs::Get(profile)->ExtensionsBlacklistedByDefault();
   results.SetBoolean("loadUnpackedDisabled", load_unpacked_disabled);
 
   web_ui()->CallJavascriptFunction(
@@ -853,7 +851,7 @@
   }
 
   if (enable_str == "true") {
-    ExtensionPrefs* prefs = extension_service_->extension_prefs();
+    ExtensionPrefs* prefs = ExtensionPrefs::Get(extension_service_->profile());
     if (prefs->DidExtensionEscalatePermissions(extension_id)) {
       ShowExtensionDisabledDialog(
           extension_service_, web_ui()->GetWebContents(), extension);
@@ -998,7 +996,9 @@
   if (!extension)
     return;
   ExtensionActionAPI::SetBrowserActionVisibility(
-      extension_service_->extension_prefs(), extension->id(), true);
+      ExtensionPrefs::Get(extension_service_->profile()),
+      extension->id(),
+      true);
 }
 
 void ExtensionSettingsHandler::HandleAutoUpdateMessage(
@@ -1083,8 +1083,7 @@
   registrar_.Add(
       this,
       chrome::NOTIFICATION_EXTENSION_BROWSER_ACTION_VISIBILITY_CHANGED,
-      content::Source<ExtensionPrefs>(
-          profile->GetExtensionService()->extension_prefs()));
+      content::Source<ExtensionPrefs>(ExtensionPrefs::Get(profile)));
   registrar_.Add(this,
                  chrome::NOTIFICATION_EXTENSION_HOST_DESTROYED,
                  content::NotificationService::AllBrowserContextsAndSources());
diff --git a/chrome/browser/ui/webui/ntp/app_launcher_handler.cc b/chrome/browser/ui/webui/ntp/app_launcher_handler.cc
index 02a49e0..a82927e 100644
--- a/chrome/browser/ui/webui/ntp/app_launcher_handler.cc
+++ b/chrome/browser/ui/webui/ntp/app_launcher_handler.cc
@@ -159,7 +159,7 @@
   value->SetBoolean("icon_small_exists", icon_small_exists);
   value->SetInteger("launch_container",
                     extensions::AppLaunchInfo::GetLaunchContainer(extension));
-  ExtensionPrefs* prefs = service->extension_prefs();
+  ExtensionPrefs* prefs = ExtensionPrefs::Get(service->profile());
   value->SetInteger("launch_type", extensions::GetLaunchType(prefs, extension));
   value->SetBoolean("is_component",
                     extension->location() == extensions::Manifest::COMPONENT);
@@ -271,7 +271,8 @@
       if (app_info.get()) {
         visible_apps_.insert(extension->id());
 
-        ExtensionPrefs* prefs = extension_service_->extension_prefs();
+        ExtensionPrefs* prefs =
+            ExtensionPrefs::Get(extension_service_->profile());
         scoped_ptr<base::FundamentalValue> highlight(
             base::Value::CreateBooleanValue(
                 prefs->IsFromBookmark(extension->id()) &&
@@ -464,7 +465,7 @@
         &AppLauncherHandler::OnExtensionPreferenceChanged,
         base::Unretained(this));
     extension_pref_change_registrar_.Init(
-        extension_service_->extension_prefs()->pref_service());
+        ExtensionPrefs::Get(profile)->pref_service());
     extension_pref_change_registrar_.Add(
         extensions::pref_names::kExtensions, callback);
     extension_pref_change_registrar_.Add(prefs::kNtpAppPageNames, callback);
@@ -475,9 +476,10 @@
         content::Source<Profile>(profile));
     registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNINSTALLED,
         content::Source<Profile>(profile));
-    registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LAUNCHER_REORDERED,
-        content::Source<AppSorting>(
-            extension_service_->extension_prefs()->app_sorting()));
+    registrar_.Add(this,
+                   chrome::NOTIFICATION_EXTENSION_LAUNCHER_REORDERED,
+                   content::Source<AppSorting>(
+                       ExtensionPrefs::Get(profile)->app_sorting()));
     registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_INSTALL_ERROR,
         content::Source<CrxInstaller>(NULL));
     registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOAD_ERROR,
@@ -643,7 +645,8 @@
 
   // Don't update the page; it already knows the apps have been reordered.
   base::AutoReset<bool> auto_reset(&ignore_changes_, true);
-  extension_service_->extension_prefs()->SetAppDraggedByUser(dragged_app_id);
+  ExtensionPrefs::Get(extension_service_->profile())
+      ->SetAppDraggedByUser(dragged_app_id);
   extension_service_->OnExtensionMoved(dragged_app_id,
                                        predecessor_to_moved_ext,
                                        successor_to_moved_ext);
@@ -651,7 +654,7 @@
 
 void AppLauncherHandler::HandleSetPageIndex(const base::ListValue* args) {
   AppSorting* app_sorting =
-      extension_service_->extension_prefs()->app_sorting();
+      ExtensionPrefs::Get(extension_service_->profile())->app_sorting();
 
   std::string extension_id;
   double page_index;
@@ -690,7 +693,7 @@
   double page_index;
   CHECK(args->GetDouble(2, &page_index));
   AppSorting* app_sorting =
-      extension_service_->extension_prefs()->app_sorting();
+      ExtensionPrefs::Get(extension_service_->profile())->app_sorting();
   const syncer::StringOrdinal& page_ordinal =
       app_sorting->PageIntegerAsStringOrdinal(static_cast<size_t>(page_index));