diff --git a/apps/app_restore_service.cc b/apps/app_restore_service.cc index 524ab964780269..50cb7d0396fa22 100644 --- a/apps/app_restore_service.cc +++ b/apps/app_restore_service.cc @@ -15,6 +15,7 @@ #include "chrome/browser/extensions/extension_prefs.h" #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/extensions/extension_system.h" +#include "chrome/browser/profiles/profile.h" #include "chrome/common/extensions/extension_set.h" #include "extensions/common/extension.h" diff --git a/apps/app_restore_service_browsertest.cc b/apps/app_restore_service_browsertest.cc index 27b179a502c31f..381efbf3e33171 100644 --- a/apps/app_restore_service_browsertest.cc +++ b/apps/app_restore_service_browsertest.cc @@ -10,6 +10,7 @@ #include "chrome/browser/extensions/api/file_system/file_system_api.h" #include "chrome/browser/extensions/extension_prefs.h" #include "chrome/browser/extensions/extension_test_message_listener.h" +#include "chrome/browser/profiles/profile.h" #include "content/public/browser/notification_service.h" #include "content/public/test/test_utils.h" #include "extensions/common/extension.h" diff --git a/apps/saved_files_service.cc b/apps/saved_files_service.cc index b4dfab71b2d3b0..86e1bd63346485 100644 --- a/apps/saved_files_service.cc +++ b/apps/saved_files_service.cc @@ -15,6 +15,7 @@ #include "chrome/browser/extensions/extension_prefs.h" #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/extensions/extension_system.h" +#include "chrome/browser/profiles/profile.h" #include "content/public/browser/notification_service.h" #include "extensions/common/permissions/api_permission.h" #include "extensions/common/permissions/permission_set.h" diff --git a/chrome/browser/extensions/api/file_system/file_system_apitest.cc b/chrome/browser/extensions/api/file_system/file_system_apitest.cc index b3348baab4751e..762b515f687e3d 100644 --- a/chrome/browser/extensions/api/file_system/file_system_apitest.cc +++ b/chrome/browser/extensions/api/file_system/file_system_apitest.cc @@ -10,6 +10,7 @@ #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/extensions/api/file_system/file_system_api.h" #include "chrome/browser/extensions/extension_prefs.h" +#include "chrome/browser/profiles/profile.h" #include "chrome/common/chrome_paths.h" #include "content/public/browser/notification_observer.h" #include "content/public/browser/notification_service.h" diff --git a/chrome/browser/extensions/chrome_extensions_browser_client.cc b/chrome/browser/extensions/chrome_extensions_browser_client.cc index 500534e2c079c7..800582580567a8 100644 --- a/chrome/browser/extensions/chrome_extensions_browser_client.cc +++ b/chrome/browser/extensions/chrome_extensions_browser_client.cc @@ -34,6 +34,14 @@ bool ChromeExtensionsBrowserClient::IsShuttingDown() { return g_browser_process->IsShuttingDown(); } +bool ChromeExtensionsBrowserClient::AreExtensionsDisabled( + const CommandLine& command_line, + content::BrowserContext* context) { + Profile* profile = static_cast(context); + return command_line.HasSwitch(switches::kDisableExtensions) || + profile->GetPrefs()->GetBoolean(prefs::kDisableExtensions); +} + bool ChromeExtensionsBrowserClient::IsValidContext( content::BrowserContext* context) { Profile* profile = static_cast(context); @@ -62,6 +70,11 @@ content::BrowserContext* ChromeExtensionsBrowserClient::GetOriginalContext( return static_cast(context)->GetOriginalProfile(); } +PrefService* ChromeExtensionsBrowserClient::GetPrefServiceForContext( + content::BrowserContext* context) { + return static_cast(context)->GetPrefs(); +} + bool ChromeExtensionsBrowserClient::DeferLoadingBackgroundHosts( content::BrowserContext* context) const { Profile* profile = static_cast(context); diff --git a/chrome/browser/extensions/chrome_extensions_browser_client.h b/chrome/browser/extensions/chrome_extensions_browser_client.h index dc9d4fd30cbf39..24aa6e8a86ec8e 100644 --- a/chrome/browser/extensions/chrome_extensions_browser_client.h +++ b/chrome/browser/extensions/chrome_extensions_browser_client.h @@ -12,6 +12,8 @@ #include "chrome/browser/extensions/chrome_notification_observer.h" #include "extensions/browser/extensions_browser_client.h" +class CommandLine; + namespace content { class BrowserContext; } @@ -31,6 +33,8 @@ class ChromeExtensionsBrowserClient : public ExtensionsBrowserClient { // BrowserClient overrides: virtual bool IsShuttingDown() OVERRIDE; + virtual bool AreExtensionsDisabled(const CommandLine& command_line, + content::BrowserContext* context) OVERRIDE; virtual bool IsValidContext(content::BrowserContext* context) OVERRIDE; virtual bool IsSameContext(content::BrowserContext* first, content::BrowserContext* second) OVERRIDE; @@ -40,6 +44,8 @@ class ChromeExtensionsBrowserClient : public ExtensionsBrowserClient { content::BrowserContext* context) OVERRIDE; virtual content::BrowserContext* GetOriginalContext( content::BrowserContext* context) OVERRIDE; + virtual PrefService* GetPrefServiceForContext( + content::BrowserContext* context) OVERRIDE; virtual bool DeferLoadingBackgroundHosts( content::BrowserContext* context) const OVERRIDE; virtual bool DidVersionUpdate(content::BrowserContext* context) OVERRIDE; diff --git a/chrome/browser/extensions/extension_pref_value_map_factory.cc b/chrome/browser/extensions/extension_pref_value_map_factory.cc index fdc9c5cb100a52..bc926ea45e348e 100644 --- a/chrome/browser/extensions/extension_pref_value_map_factory.cc +++ b/chrome/browser/extensions/extension_pref_value_map_factory.cc @@ -5,7 +5,6 @@ #include "chrome/browser/extensions/extension_pref_value_map_factory.h" #include "chrome/browser/extensions/extension_pref_value_map.h" -#include "chrome/browser/profiles/profile.h" #include "components/browser_context_keyed_service/browser_context_dependency_manager.h" ExtensionPrefValueMapFactory::ExtensionPrefValueMapFactory() diff --git a/chrome/browser/extensions/extension_pref_value_map_factory.h b/chrome/browser/extensions/extension_pref_value_map_factory.h index 5aefc385251f32..368926530aab58 100644 --- a/chrome/browser/extensions/extension_pref_value_map_factory.h +++ b/chrome/browser/extensions/extension_pref_value_map_factory.h @@ -9,7 +9,6 @@ #include "components/browser_context_keyed_service/browser_context_keyed_service_factory.h" class ExtensionPrefValueMap; -class Profile; // The usual factory boilerplate for ExtensionPrefValueMap. class ExtensionPrefValueMapFactory : public BrowserContextKeyedServiceFactory { diff --git a/chrome/browser/extensions/extension_prefs.cc b/chrome/browser/extensions/extension_prefs.cc index 21158a511493b1..b84e04399a2a17 100644 --- a/chrome/browser/extensions/extension_prefs.cc +++ b/chrome/browser/extensions/extension_prefs.cc @@ -348,8 +348,8 @@ ExtensionPrefs::~ExtensionPrefs() { } // static -ExtensionPrefs* ExtensionPrefs::Get(Profile* profile) { - return ExtensionPrefsFactory::GetInstance()->GetForProfile(profile); +ExtensionPrefs* ExtensionPrefs::Get(content::BrowserContext* context) { + return ExtensionPrefsFactory::GetInstance()->GetForBrowserContext(context); } static base::FilePath::StringType MakePathRelative(const base::FilePath& parent, diff --git a/chrome/browser/extensions/extension_prefs.h b/chrome/browser/extensions/extension_prefs.h index f7130a59fdc44f..6906f9019964aa 100644 --- a/chrome/browser/extensions/extension_prefs.h +++ b/chrome/browser/extensions/extension_prefs.h @@ -24,7 +24,10 @@ class ExtensionPrefValueMap; class PrefService; -class Profile; + +namespace content { +class BrowserContext; +} namespace user_prefs { class PrefRegistrySyncable; @@ -158,8 +161,8 @@ class ExtensionPrefs : public ExtensionScopedPrefs, virtual ~ExtensionPrefs(); - // Convenience function to get the ExtensionPrefs for a Profile. - static ExtensionPrefs* Get(Profile* profile); + // Convenience function to get the ExtensionPrefs for a BrowserContext. + static ExtensionPrefs* Get(content::BrowserContext* context); // Returns all installed extensions from extension preferences provided by // |pref_service|. This is exposed for ProtectedPrefsWatcher because it needs diff --git a/chrome/browser/extensions/extension_prefs_factory.cc b/chrome/browser/extensions/extension_prefs_factory.cc index c3cfe967cb003a..e0bb1ba10339c5 100644 --- a/chrome/browser/extensions/extension_prefs_factory.cc +++ b/chrome/browser/extensions/extension_prefs_factory.cc @@ -10,19 +10,18 @@ #include "chrome/browser/extensions/extension_prefs_factory.h" #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/profiles/incognito_helpers.h" -#include "chrome/browser/profiles/profile.h" -#include "chrome/common/chrome_switches.h" -#include "chrome/common/pref_names.h" #include "components/browser_context_keyed_service/browser_context_dependency_manager.h" +#include "content/public/browser/browser_context.h" #include "extensions/browser/extensions_browser_client.h" #include "extensions/common/constants.h" namespace extensions { // static -ExtensionPrefs* ExtensionPrefsFactory::GetForProfile(Profile* profile) { +ExtensionPrefs* ExtensionPrefsFactory::GetForBrowserContext( + content::BrowserContext* context) { return static_cast( - GetInstance()->GetServiceForBrowserContext(profile, true)); + GetInstance()->GetServiceForBrowserContext(context, true)); } // static @@ -46,21 +45,19 @@ ExtensionPrefsFactory::~ExtensionPrefsFactory() { BrowserContextKeyedService* ExtensionPrefsFactory::BuildServiceInstanceFor( content::BrowserContext* context) const { - Profile* profile = Profile::FromBrowserContext(context); - bool extensions_disabled = - profile->GetPrefs()->GetBoolean(prefs::kDisableExtensions) || - CommandLine::ForCurrentProcess()->HasSwitch(switches::kDisableExtensions); + ExtensionsBrowserClient* client = ExtensionsBrowserClient::Get(); return ExtensionPrefs::Create( - profile->GetPrefs(), - profile->GetPath().AppendASCII(extensions::kInstallDirectoryName), - ExtensionPrefValueMapFactory::GetForBrowserContext(profile), - ExtensionsBrowserClient::Get()->CreateAppSorting().Pass(), - extensions_disabled); + client->GetPrefServiceForContext(context), + context->GetPath().AppendASCII(extensions::kInstallDirectoryName), + ExtensionPrefValueMapFactory::GetForBrowserContext(context), + client->CreateAppSorting().Pass(), + client->AreExtensionsDisabled( + *CommandLine::ForCurrentProcess(), context)); } content::BrowserContext* ExtensionPrefsFactory::GetBrowserContextToUse( content::BrowserContext* context) const { - return chrome::GetBrowserContextRedirectedInIncognito(context); + return ExtensionsBrowserClient::Get()->GetOriginalContext(context); } } // namespace extensions diff --git a/chrome/browser/extensions/extension_prefs_factory.h b/chrome/browser/extensions/extension_prefs_factory.h index b3057f227b8c0b..911f949a65555a 100644 --- a/chrome/browser/extensions/extension_prefs_factory.h +++ b/chrome/browser/extensions/extension_prefs_factory.h @@ -15,7 +15,7 @@ class ExtensionPrefs; class ExtensionPrefsFactory : public BrowserContextKeyedServiceFactory { public: - static ExtensionPrefs* GetForProfile(Profile* profile); + static ExtensionPrefs* GetForBrowserContext(content::BrowserContext* context); static ExtensionPrefsFactory* GetInstance(); @@ -29,7 +29,7 @@ class ExtensionPrefsFactory : public BrowserContextKeyedServiceFactory { virtual ~ExtensionPrefsFactory(); virtual BrowserContextKeyedService* BuildServiceInstanceFor( - content::BrowserContext* profile) const OVERRIDE; + content::BrowserContext* context) const OVERRIDE; virtual content::BrowserContext* GetBrowserContextToUse( content::BrowserContext* context) const OVERRIDE; }; diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc index 955e43f7d4f531..ed4cf34183a30f 100644 --- a/chrome/browser/extensions/extension_service.cc +++ b/chrome/browser/extensions/extension_service.cc @@ -337,10 +337,9 @@ ExtensionService::ExtensionService(Profile* profile, CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); // Figure out if extension installation should be enabled. - if (command_line->HasSwitch(switches::kDisableExtensions) || - profile->GetPrefs()->GetBoolean(prefs::kDisableExtensions)) { + if (extensions::ExtensionsBrowserClient::Get()->AreExtensionsDisabled( + *command_line, profile)) extensions_enabled_ = false; - } registrar_.Add(this, chrome::NOTIFICATION_APP_TERMINATING, content::NotificationService::AllBrowserContextsAndSources()); diff --git a/chrome/browser/extensions/extension_sync_service_factory.cc b/chrome/browser/extensions/extension_sync_service_factory.cc index 5b9b9a4772afbd..cc3ca6523fc324 100644 --- a/chrome/browser/extensions/extension_sync_service_factory.cc +++ b/chrome/browser/extensions/extension_sync_service_factory.cc @@ -41,7 +41,7 @@ BrowserContextKeyedService* Profile* profile = Profile::FromBrowserContext(context); return new ExtensionSyncService( profile, - extensions::ExtensionPrefsFactory::GetForProfile(profile), + extensions::ExtensionPrefsFactory::GetForBrowserContext(profile), extensions::ExtensionSystemFactory::GetForProfile(profile)-> extension_service()); } diff --git a/chrome/browser/extensions/extension_toolbar_model.h b/chrome/browser/extensions/extension_toolbar_model.h index d739ce347cffe3..a69fa794518fbe 100644 --- a/chrome/browser/extensions/extension_toolbar_model.h +++ b/chrome/browser/extensions/extension_toolbar_model.h @@ -17,6 +17,7 @@ class Browser; class ExtensionService; class PrefService; +class Profile; // Model for the browser actions toolbar. class ExtensionToolbarModel : public content::NotificationObserver, diff --git a/chrome/browser/extensions/extension_toolbar_model_factory.cc b/chrome/browser/extensions/extension_toolbar_model_factory.cc index f4056a6d818656..474c6a0339df43 100644 --- a/chrome/browser/extensions/extension_toolbar_model_factory.cc +++ b/chrome/browser/extensions/extension_toolbar_model_factory.cc @@ -35,10 +35,9 @@ ExtensionToolbarModelFactory::~ExtensionToolbarModelFactory() {} BrowserContextKeyedService* ExtensionToolbarModelFactory::BuildServiceInstanceFor( content::BrowserContext* context) const { - Profile* profile = Profile::FromBrowserContext(context); return new ExtensionToolbarModel( - profile, - extensions::ExtensionPrefsFactory::GetForProfile(profile)); + Profile::FromBrowserContext(context), + extensions::ExtensionPrefsFactory::GetForBrowserContext(context)); } content::BrowserContext* ExtensionToolbarModelFactory::GetBrowserContextToUse( diff --git a/extensions/browser/extensions_browser_client.h b/extensions/browser/extensions_browser_client.h index 6331dae5c27827..61641a7931abcc 100644 --- a/extensions/browser/extensions_browser_client.h +++ b/extensions/browser/extensions_browser_client.h @@ -7,6 +7,9 @@ #include "base/memory/scoped_ptr.h" +class CommandLine; +class PrefService; + namespace content { class BrowserContext; } @@ -28,6 +31,11 @@ class ExtensionsBrowserClient { // Returns true if the embedder has started shutting down. virtual bool IsShuttingDown() = 0; + // Returns true if extensions have been disabled (e.g. via a command-line flag + // or preference). + virtual bool AreExtensionsDisabled(const CommandLine& command_line, + content::BrowserContext* context) = 0; + // Returns true if the |context| is known to the embedder. virtual bool IsValidContext(content::BrowserContext* context) = 0; @@ -51,6 +59,10 @@ class ExtensionsBrowserClient { virtual content::BrowserContext* GetOriginalContext( content::BrowserContext* context) = 0; + // Returns the PrefService associated with |context|. + virtual PrefService* GetPrefServiceForContext( + content::BrowserContext* context) = 0; + // Returns true if loading background pages should be deferred. virtual bool DeferLoadingBackgroundHosts( content::BrowserContext* context) const = 0;