From 367d9b17688f47133ad03d522fc5caf1ac428d01 Mon Sep 17 00:00:00 2001 From: "derat@chromium.org" Date: Tue, 3 Dec 2013 00:31:02 +0000 Subject: Remove ExtensionPrefFactory's dependency on Profile. Move the code that checks whether the command-line flag or pref to disable extensions is set into ExtensionsBrowserClient, and make ExtensionPrefFactory work with a BrowserContext instead of requiring a Profile. BUG=313284 Review URL: https://codereview.chromium.org/89253002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@238243 0039d316-1c4b-4281-b951-d872f2087c98 --- apps/app_restore_service.cc | 1 + apps/app_restore_service_browsertest.cc | 1 + apps/saved_files_service.cc | 1 + .../api/file_system/file_system_apitest.cc | 1 + .../extensions/chrome_extensions_browser_client.cc | 13 +++++++++++ .../extensions/chrome_extensions_browser_client.h | 6 +++++ .../extensions/extension_pref_value_map_factory.cc | 1 - .../extensions/extension_pref_value_map_factory.h | 1 - chrome/browser/extensions/extension_prefs.cc | 4 ++-- chrome/browser/extensions/extension_prefs.h | 9 +++++--- .../browser/extensions/extension_prefs_factory.cc | 27 ++++++++++------------ .../browser/extensions/extension_prefs_factory.h | 4 ++-- chrome/browser/extensions/extension_service.cc | 5 ++-- .../extensions/extension_sync_service_factory.cc | 2 +- .../browser/extensions/extension_toolbar_model.h | 1 + .../extensions/extension_toolbar_model_factory.cc | 5 ++-- extensions/browser/extensions_browser_client.h | 12 ++++++++++ 17 files changed, 63 insertions(+), 31 deletions(-) diff --git a/apps/app_restore_service.cc b/apps/app_restore_service.cc index 524ab96..50cb7d0 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 27b179a..381efbf3 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 b4dfab7..86e1bd6 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 b3348ba..762b515 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 500534e..8005825 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 dc9d4fd..24aa6e8 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 fdc9c5c..bc926ea 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 5aefc38..3689265 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 21158a5..b84e043 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 f7130a5..6906f90 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 c3cfe967..e0bb1ba 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 b3057f2..911f949 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 955e43f..ed4cf34 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 5b9b9a4..cc3ca65 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 d739ce3..a69fa79 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 f4056a6..474c6a0 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 6331dae..61641a7 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; -- cgit v1.1