diff options
author | phajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-10 23:13:24 +0000 |
---|---|---|
committer | phajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-10 23:13:24 +0000 |
commit | 99152a7e8091125c7be25c458b7219fa9f6192e1 (patch) | |
tree | bd5b8d26c38c5fae5f731c092ce5ce14455b2ed0 | |
parent | 412d3dab6514a8a5d48bd164b1b173fa245d492d (diff) | |
download | chromium_src-99152a7e8091125c7be25c458b7219fa9f6192e1.zip chromium_src-99152a7e8091125c7be25c458b7219fa9f6192e1.tar.gz chromium_src-99152a7e8091125c7be25c458b7219fa9f6192e1.tar.bz2 |
Drop more dependencies of ProfileKeyedService infrastructure on chrome.
This extracts AssertFactoriesBuilt code to a file that will stay in chrome.
BUG=227219
R=erg@chromium.org
Review URL: https://codereview.chromium.org/14967003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@199566 0039d316-1c4b-4281-b951-d872f2087c98
36 files changed, 402 insertions, 292 deletions
diff --git a/apps/shortcut_manager_factory.h b/apps/shortcut_manager_factory.h index bed2136..001bb61 100644 --- a/apps/shortcut_manager_factory.h +++ b/apps/shortcut_manager_factory.h @@ -9,6 +9,8 @@ template<typename Type> struct DefaultSingletonTraits; +class Profile; + namespace apps { class ShortcutManager; diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc index 2c7b4b2..cec8396 100644 --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc @@ -58,6 +58,7 @@ #include "chrome/browser/prerender/prerender_message_filter.h" #include "chrome/browser/prerender/prerender_tracker.h" #include "chrome/browser/printing/printing_message_filter.h" +#include "chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_io_data.h" #include "chrome/browser/profiles/profile_manager.h" @@ -543,6 +544,8 @@ content::BrowserMainParts* ChromeContentBrowserClient::CreateBrowserMainParts( main_parts = new ChromeBrowserMainParts(parameters); #endif + chrome::AddProfilesExtraParts(main_parts); + // Construct additional browser parts. Stages are called in the order in // which they are added. #if defined(TOOLKIT_GTK) diff --git a/chrome/browser/chrome_to_mobile_service_factory.h b/chrome/browser/chrome_to_mobile_service_factory.h index 4953079..12168a1 100644 --- a/chrome/browser/chrome_to_mobile_service_factory.h +++ b/chrome/browser/chrome_to_mobile_service_factory.h @@ -10,6 +10,7 @@ #include "chrome/browser/profiles/profile_keyed_service_factory.h" class ChromeToMobileService; +class Profile; class ChromeToMobileServiceFactory : public ProfileKeyedServiceFactory { public: diff --git a/chrome/browser/chromeos/app_mode/kiosk_app_update_service.h b/chrome/browser/chromeos/app_mode/kiosk_app_update_service.h index 8bde271..bd0601f 100644 --- a/chrome/browser/chromeos/app_mode/kiosk_app_update_service.h +++ b/chrome/browser/chromeos/app_mode/kiosk_app_update_service.h @@ -15,6 +15,8 @@ #include "chrome/browser/profiles/profile_keyed_service.h" #include "chrome/browser/profiles/profile_keyed_service_factory.h" +class Profile; + namespace chromeos { // This class enforces automatic restart on app and Chrome updates in app mode. diff --git a/chrome/browser/chromeos/login/login_utils_browsertest.cc b/chrome/browser/chromeos/login/login_utils_browsertest.cc index 99d663b..256b99d 100644 --- a/chrome/browser/chromeos/login/login_utils_browsertest.cc +++ b/chrome/browser/chromeos/login/login_utils_browsertest.cc @@ -35,6 +35,7 @@ #include "chrome/browser/policy/cloud/device_management_service.h" #include "chrome/browser/policy/policy_service.h" #include "chrome/browser/policy/proto/cloud/device_management_backend.pb.h" +#include "chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.h" #include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/rlz/rlz.h" #include "chrome/common/chrome_notification_types.h" @@ -434,6 +435,11 @@ class LoginUtilsTest : public testing::Test, } void PrepareProfile(const std::string& username) { + // Normally this would happen during browser startup, but for tests + // we need to trigger creation of Profile-related services. + ChromeBrowserMainExtraPartsProfiles:: + EnsureProfileKeyedServiceFactoriesBuilt(); + DeviceSettingsTestHelper device_settings_test_helper; DeviceSettingsService::Get()->SetSessionManager( &device_settings_test_helper, new MockOwnerKeyUtil()); diff --git a/chrome/browser/extensions/api/autotest_private/autotest_private_api_factory.h b/chrome/browser/extensions/api/autotest_private/autotest_private_api_factory.h index 0cb296e..cc6dfda 100644 --- a/chrome/browser/extensions/api/autotest_private/autotest_private_api_factory.h +++ b/chrome/browser/extensions/api/autotest_private/autotest_private_api_factory.h @@ -8,6 +8,8 @@ #include "base/memory/singleton.h" #include "chrome/browser/profiles/profile_keyed_service_factory.h" +class Profile; + namespace extensions { class AutotestPrivateAPI; diff --git a/chrome/browser/extensions/api/bluetooth/bluetooth_api_factory.h b/chrome/browser/extensions/api/bluetooth/bluetooth_api_factory.h index 8c5f134..cac8587 100644 --- a/chrome/browser/extensions/api/bluetooth/bluetooth_api_factory.h +++ b/chrome/browser/extensions/api/bluetooth/bluetooth_api_factory.h @@ -8,6 +8,8 @@ #include "base/memory/singleton.h" #include "chrome/browser/profiles/profile_keyed_service_factory.h" +class Profile; + namespace extensions { class BluetoothAPI; diff --git a/chrome/browser/extensions/api/developer_private/developer_private_api_factory.h b/chrome/browser/extensions/api/developer_private/developer_private_api_factory.h index 3c41292..2aff89f 100644 --- a/chrome/browser/extensions/api/developer_private/developer_private_api_factory.h +++ b/chrome/browser/extensions/api/developer_private/developer_private_api_factory.h @@ -8,6 +8,8 @@ #include "base/memory/singleton.h" #include "chrome/browser/profiles/profile_keyed_service_factory.h" +class Profile; + namespace extensions { class DeveloperPrivateAPI; diff --git a/chrome/browser/extensions/api/discovery/suggested_links_registry_factory.h b/chrome/browser/extensions/api/discovery/suggested_links_registry_factory.h index 3bb9af6..5160d5b 100644 --- a/chrome/browser/extensions/api/discovery/suggested_links_registry_factory.h +++ b/chrome/browser/extensions/api/discovery/suggested_links_registry_factory.h @@ -8,6 +8,8 @@ #include "base/memory/singleton.h" #include "chrome/browser/profiles/profile_keyed_service_factory.h" +class Profile; + namespace extensions { class SuggestedLinksRegistry; diff --git a/chrome/browser/extensions/api/idle/idle_manager_factory.h b/chrome/browser/extensions/api/idle/idle_manager_factory.h index b9c7c63..95d1750 100644 --- a/chrome/browser/extensions/api/idle/idle_manager_factory.h +++ b/chrome/browser/extensions/api/idle/idle_manager_factory.h @@ -8,6 +8,8 @@ #include "base/memory/singleton.h" #include "chrome/browser/profiles/profile_keyed_service_factory.h" +class Profile; + namespace extensions { class IdleManager; diff --git a/chrome/browser/extensions/api/sync_file_system/extension_sync_event_observer_factory.h b/chrome/browser/extensions/api/sync_file_system/extension_sync_event_observer_factory.h index c394e77..fe771ad 100644 --- a/chrome/browser/extensions/api/sync_file_system/extension_sync_event_observer_factory.h +++ b/chrome/browser/extensions/api/sync_file_system/extension_sync_event_observer_factory.h @@ -8,6 +8,8 @@ #include "base/memory/singleton.h" #include "chrome/browser/profiles/profile_keyed_service_factory.h" +class Profile; + namespace extensions { class ExtensionSyncEventObserver; diff --git a/chrome/browser/extensions/api/system_indicator/system_indicator_manager_factory.h b/chrome/browser/extensions/api/system_indicator/system_indicator_manager_factory.h index a1311cf..89f359c 100644 --- a/chrome/browser/extensions/api/system_indicator/system_indicator_manager_factory.h +++ b/chrome/browser/extensions/api/system_indicator/system_indicator_manager_factory.h @@ -8,6 +8,8 @@ #include "base/memory/singleton.h" #include "chrome/browser/profiles/profile_keyed_service_factory.h" +class Profile; + namespace extensions { class SystemIndicatorManager; diff --git a/chrome/browser/extensions/api/tab_capture/tab_capture_registry_factory.h b/chrome/browser/extensions/api/tab_capture/tab_capture_registry_factory.h index b1849cf..56c9283 100644 --- a/chrome/browser/extensions/api/tab_capture/tab_capture_registry_factory.h +++ b/chrome/browser/extensions/api/tab_capture/tab_capture_registry_factory.h @@ -8,6 +8,8 @@ #include "base/memory/singleton.h" #include "chrome/browser/profiles/profile_keyed_service_factory.h" +class Profile; + namespace extensions { class TabCaptureRegistry; diff --git a/chrome/browser/extensions/extension_pref_value_map_factory.h b/chrome/browser/extensions/extension_pref_value_map_factory.h index 9ec0168..efb0641 100644 --- a/chrome/browser/extensions/extension_pref_value_map_factory.h +++ b/chrome/browser/extensions/extension_pref_value_map_factory.h @@ -9,6 +9,7 @@ #include "chrome/browser/profiles/profile_keyed_service_factory.h" class ExtensionPrefValueMap; +class Profile; class ExtensionPrefValueMapFactory : public ProfileKeyedServiceFactory { public: diff --git a/chrome/browser/extensions/token_cache/token_cache_service_factory.h b/chrome/browser/extensions/token_cache/token_cache_service_factory.h index 0d28101..2a99359 100644 --- a/chrome/browser/extensions/token_cache/token_cache_service_factory.h +++ b/chrome/browser/extensions/token_cache/token_cache_service_factory.h @@ -9,6 +9,8 @@ #include "base/memory/singleton.h" #include "chrome/browser/profiles/profile_keyed_service_factory.h" +class Profile; + namespace extensions { class TokenCacheService; } // namespace extensions diff --git a/chrome/browser/google_apis/drive_notification_manager_factory.h b/chrome/browser/google_apis/drive_notification_manager_factory.h index fbcfc9a..177c27b 100644 --- a/chrome/browser/google_apis/drive_notification_manager_factory.h +++ b/chrome/browser/google_apis/drive_notification_manager_factory.h @@ -8,6 +8,8 @@ #include "base/memory/singleton.h" #include "chrome/browser/profiles/profile_keyed_service_factory.h" +class Profile; + namespace google_apis { class DriveNotificationManager; diff --git a/chrome/browser/managed_mode/managed_user_service_factory.h b/chrome/browser/managed_mode/managed_user_service_factory.h index 12ef119..1dfb81d 100644 --- a/chrome/browser/managed_mode/managed_user_service_factory.h +++ b/chrome/browser/managed_mode/managed_user_service_factory.h @@ -9,6 +9,7 @@ #include "chrome/browser/profiles/profile_keyed_service_factory.h" class ManagedUserService; +class Profile; class ManagedUserServiceFactory : public ProfileKeyedServiceFactory { public: diff --git a/chrome/browser/policy/cloud/user_policy_signin_service_factory.h b/chrome/browser/policy/cloud/user_policy_signin_service_factory.h index cde10e8..a105ebe 100644 --- a/chrome/browser/policy/cloud/user_policy_signin_service_factory.h +++ b/chrome/browser/policy/cloud/user_policy_signin_service_factory.h @@ -8,6 +8,8 @@ #include "base/memory/singleton.h" #include "chrome/browser/profiles/profile_keyed_service_factory.h" +class Profile; + namespace user_prefs { class PrefRegistrySyncable; } diff --git a/chrome/browser/predictors/autocomplete_action_predictor_factory.h b/chrome/browser/predictors/autocomplete_action_predictor_factory.h index b1624ab..3e30f6a 100644 --- a/chrome/browser/predictors/autocomplete_action_predictor_factory.h +++ b/chrome/browser/predictors/autocomplete_action_predictor_factory.h @@ -9,6 +9,8 @@ #include "base/memory/singleton.h" #include "chrome/browser/profiles/profile_keyed_service_factory.h" +class Profile; + namespace predictors { class AutocompleteActionPredictor; diff --git a/chrome/browser/predictors/predictor_database_factory.h b/chrome/browser/predictors/predictor_database_factory.h index 4bfcf5a..e08cdbd 100644 --- a/chrome/browser/predictors/predictor_database_factory.h +++ b/chrome/browser/predictors/predictor_database_factory.h @@ -9,6 +9,8 @@ #include "base/memory/singleton.h" #include "chrome/browser/profiles/profile_keyed_service_factory.h" +class Profile; + namespace predictors { class PredictorDatabase; diff --git a/chrome/browser/predictors/resource_prefetch_predictor_factory.h b/chrome/browser/predictors/resource_prefetch_predictor_factory.h index f40c38a..147a21c 100644 --- a/chrome/browser/predictors/resource_prefetch_predictor_factory.h +++ b/chrome/browser/predictors/resource_prefetch_predictor_factory.h @@ -9,6 +9,8 @@ #include "base/memory/singleton.h" #include "chrome/browser/profiles/profile_keyed_service_factory.h" +class Profile; + namespace predictors { class ResourcePrefetchPredictor; diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc new file mode 100644 index 0000000..d1dee56 --- /dev/null +++ b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc @@ -0,0 +1,282 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.h" + +#include "apps/app_restore_service_factory.h" +#include "apps/shortcut_manager_factory.h" +#include "chrome/browser/autofill/autocheckout_whitelist_manager_factory.h" +#include "chrome/browser/autofill/personal_data_manager_factory.h" +#include "chrome/browser/background/background_contents_service_factory.h" +#include "chrome/browser/bookmarks/bookmark_model_factory.h" +#include "chrome/browser/chrome_browser_main.h" +#include "chrome/browser/content_settings/cookie_settings.h" +#include "chrome/browser/custom_handlers/protocol_handler_registry_factory.h" +#include "chrome/browser/download/download_service_factory.h" +#include "chrome/browser/extensions/activity_log.h" +#include "chrome/browser/extensions/api/alarms/alarm_manager.h" +#include "chrome/browser/extensions/api/audio/audio_api.h" +#include "chrome/browser/extensions/api/bluetooth/bluetooth_api_factory.h" +#include "chrome/browser/extensions/api/bookmarks/bookmarks_api.h" +#include "chrome/browser/extensions/api/commands/command_service.h" +#include "chrome/browser/extensions/api/cookies/cookies_api.h" +#include "chrome/browser/extensions/api/dial/dial_api_factory.h" +#include "chrome/browser/extensions/api/discovery/suggested_links_registry_factory.h" +#include "chrome/browser/extensions/api/extension_action/extension_action_api.h" +#include "chrome/browser/extensions/api/font_settings/font_settings_api.h" +#include "chrome/browser/extensions/api/history/history_api.h" +#include "chrome/browser/extensions/api/identity/identity_api.h" +#include "chrome/browser/extensions/api/idle/idle_manager_factory.h" +#include "chrome/browser/extensions/api/input/input.h" +#include "chrome/browser/extensions/api/managed_mode_private/managed_mode_private_api.h" +#include "chrome/browser/extensions/api/management/management_api.h" +#include "chrome/browser/extensions/api/media_galleries_private/media_galleries_private_api.h" +#include "chrome/browser/extensions/api/omnibox/omnibox_api.h" +#include "chrome/browser/extensions/api/preference/preference_api.h" +#include "chrome/browser/extensions/api/processes/processes_api.h" +#include "chrome/browser/extensions/api/push_messaging/push_messaging_api.h" +#include "chrome/browser/extensions/api/session_restore/session_restore_api.h" +#include "chrome/browser/extensions/api/spellcheck/spellcheck_api.h" +#include "chrome/browser/extensions/api/streams_private/streams_private_api.h" +#include "chrome/browser/extensions/api/system_info/system_info_api.h" +#include "chrome/browser/extensions/api/tab_capture/tab_capture_registry_factory.h" +#include "chrome/browser/extensions/api/tabs/tabs_windows_api.h" +#include "chrome/browser/extensions/api/web_navigation/web_navigation_api.h" +#include "chrome/browser/extensions/extension_system_factory.h" +#include "chrome/browser/extensions/extension_web_ui_override_registrar.h" +#include "chrome/browser/extensions/install_tracker_factory.h" +#include "chrome/browser/extensions/token_cache/token_cache_service_factory.h" +#include "chrome/browser/favicon/favicon_service_factory.h" +#include "chrome/browser/geolocation/chrome_geolocation_permission_context_factory.h" +#include "chrome/browser/google/google_url_tracker_factory.h" +#include "chrome/browser/history/history_service_factory.h" +#include "chrome/browser/history/shortcuts_backend_factory.h" +#include "chrome/browser/notifications/desktop_notification_service_factory.h" +#include "chrome/browser/password_manager/password_store_factory.h" +#include "chrome/browser/plugins/plugin_prefs_factory.h" +#include "chrome/browser/policy/profile_policy_connector_factory.h" +#include "chrome/browser/predictors/autocomplete_action_predictor_factory.h" +#include "chrome/browser/predictors/predictor_database_factory.h" +#include "chrome/browser/predictors/resource_prefetch_predictor_factory.h" +#include "chrome/browser/prerender/prerender_link_manager_factory.h" +#include "chrome/browser/prerender/prerender_manager_factory.h" +#include "chrome/browser/printing/cloud_print/cloud_print_proxy_service_factory.h" +#include "chrome/browser/profiles/gaia_info_update_service_factory.h" +#include "chrome/browser/search_engines/template_url_fetcher_factory.h" +#include "chrome/browser/search_engines/template_url_service_factory.h" +#include "chrome/browser/sessions/session_service_factory.h" +#include "chrome/browser/sessions/tab_restore_service_factory.h" +#include "chrome/browser/signin/about_signin_internals_factory.h" +#include "chrome/browser/signin/signin_manager_factory.h" +#include "chrome/browser/signin/token_service_factory.h" +#include "chrome/browser/speech/chrome_speech_recognition_preferences.h" +#include "chrome/browser/speech/extension_api/tts_extension_api.h" +#include "chrome/browser/spellchecker/spellcheck_factory.h" +#include "chrome/browser/sync/profile_sync_service_factory.h" +#include "chrome/browser/themes/theme_service_factory.h" +#include "chrome/browser/thumbnails/thumbnail_service_factory.h" +#include "chrome/browser/ui/find_bar/find_bar_state_factory.h" +#include "chrome/browser/ui/global_error/global_error_service_factory.h" +#include "chrome/browser/ui/tabs/pinned_tab_service_factory.h" +#include "chrome/browser/ui/webui/ntp/ntp_resource_cache_factory.h" +#include "chrome/browser/user_style_sheet_watcher_factory.h" +#include "chrome/browser/webdata/web_data_service_factory.h" + +#if defined(ENABLE_CAPTIVE_PORTAL_DETECTION) +#include "chrome/browser/captive_portal/captive_portal_service_factory.h" +#endif + +#if defined(ENABLE_CONFIGURATION_POLICY) +#if defined(OS_CHROMEOS) +#include "chrome/browser/chromeos/policy/user_cloud_policy_manager_factory_chromeos.h" +#include "chrome/browser/chromeos/policy/user_cloud_policy_token_forwarder_factory.h" +#else +#include "chrome/browser/policy/cloud/user_cloud_policy_manager_factory.h" +#include "chrome/browser/policy/cloud/user_policy_signin_service_factory.h" +#endif +#endif + +#if defined(OS_CHROMEOS) +#include "chrome/browser/chromeos/extensions/input_method_api.h" +#include "chrome/browser/chromeos/extensions/media_player_api.h" +#include "chrome/browser/chromeos/extensions/networking_private_event_router_factory.h" +#include "chrome/browser/extensions/api/input_ime/input_ime_api.h" +#if defined(FILE_MANAGER_EXTENSION) +#include "chrome/browser/chromeos/extensions/file_manager/file_browser_private_api_factory.h" +#endif +#endif + +#if defined(USE_AURA) +#include "chrome/browser/ui/gesture_prefs_observer_factory_aura.h" +#endif + +#if !defined(OS_ANDROID) +#include "chrome/browser/media_galleries/media_galleries_preferences_factory.h" +#include "chrome/browser/notifications/sync_notifier/chrome_notifier_service_factory.h" +#endif + +namespace chrome { + +void AddProfilesExtraParts(ChromeBrowserMainParts* main_parts) { + main_parts->AddParts(new ChromeBrowserMainExtraPartsProfiles()); +} + +} // namespace chrome + +ChromeBrowserMainExtraPartsProfiles::ChromeBrowserMainExtraPartsProfiles() { +} + +ChromeBrowserMainExtraPartsProfiles::~ChromeBrowserMainExtraPartsProfiles() { +} + +// This method gets the instance of each ServiceFactory. We do this so that +// each ServiceFactory initializes itself and registers its dependencies with +// the global PreferenceDependencyManager. We need to have a complete +// dependency graph when we create a profile so we can dispatch the profile +// creation message to the services that want to create their services at +// profile creation time. +// +// TODO(erg): This needs to be something else. I don't think putting every +// FooServiceFactory here will scale or is desirable long term. +// +// static +void +ChromeBrowserMainExtraPartsProfiles::EnsureProfileKeyedServiceFactoriesBuilt() { + AboutSigninInternalsFactory::GetInstance(); + +#if defined(ENABLE_BACKGROUND) + BackgroundContentsServiceFactory::GetInstance(); +#endif + BookmarkModelFactory::GetInstance(); +#if defined(ENABLE_CAPTIVE_PORTAL_DETECTION) + captive_portal::CaptivePortalServiceFactory::GetInstance(); +#endif + ChromeGeolocationPermissionContextFactory::GetInstance(); +#if defined(ENABLE_PRINTING) + CloudPrintProxyServiceFactory::GetInstance(); +#endif + CookieSettings::Factory::GetInstance(); +#if defined(ENABLE_NOTIFICATIONS) + DesktopNotificationServiceFactory::GetInstance(); +#endif + DownloadServiceFactory::GetInstance(); +#if defined(ENABLE_EXTENSIONS) + apps::AppRestoreServiceFactory::GetInstance(); + apps::ShortcutManagerFactory::GetInstance(); + autofill::autocheckout::WhitelistManagerFactory::GetInstance(); + extensions::ActivityLogFactory::GetInstance(); + extensions::AlarmManager::GetFactoryInstance(); + extensions::AudioAPI::GetFactoryInstance(); + extensions::BookmarksAPI::GetFactoryInstance(); + extensions::BluetoothAPIFactory::GetInstance(); + extensions::CommandService::GetFactoryInstance(); + extensions::CookiesAPI::GetFactoryInstance(); + extensions::DialAPIFactory::GetInstance(); + extensions::ExtensionActionAPI::GetFactoryInstance(); + extensions::ExtensionSystemFactory::GetInstance(); + extensions::ExtensionWebUIOverrideRegistrar::GetFactoryInstance(); + extensions::FontSettingsAPI::GetFactoryInstance(); + extensions::HistoryAPI::GetFactoryInstance(); + extensions::IdentityAPI::GetFactoryInstance(); + extensions::IdleManagerFactory::GetInstance(); + extensions::InstallTrackerFactory::GetInstance(); +#if defined(TOOLKIT_VIEWS) + extensions::InputAPI::GetFactoryInstance(); +#endif +#if defined(OS_CHROMEOS) + extensions::InputImeAPI::GetFactoryInstance(); + extensions::InputMethodAPI::GetFactoryInstance(); +#endif + extensions::ManagedModeAPI::GetFactoryInstance(); + extensions::ManagementAPI::GetFactoryInstance(); + extensions::MediaGalleriesPrivateAPI::GetFactoryInstance(); +#if defined(OS_CHROMEOS) + extensions::MediaPlayerAPI::GetFactoryInstance(); +#endif + extensions::OmniboxAPI::GetFactoryInstance(); + extensions::PreferenceAPI::GetFactoryInstance(); + extensions::ProcessesAPI::GetFactoryInstance(); + extensions::PushMessagingAPI::GetFactoryInstance(); + extensions::SessionRestoreAPI::GetFactoryInstance(); + extensions::SpellcheckAPI::GetFactoryInstance(); + extensions::StreamsPrivateAPI::GetFactoryInstance(); + extensions::SystemInfoAPI::GetFactoryInstance(); + extensions::SuggestedLinksRegistryFactory::GetInstance(); + extensions::TabCaptureRegistryFactory::GetInstance(); + extensions::TabsWindowsAPI::GetFactoryInstance(); + extensions::TtsAPI::GetFactoryInstance(); + extensions::WebNavigationAPI::GetFactoryInstance(); +#endif // defined(ENABLE_EXTENSIONS) + FaviconServiceFactory::GetInstance(); +#if defined(OS_CHROMEOS) && defined(FILE_MANAGER_EXTENSION) + FileBrowserPrivateAPIFactory::GetInstance(); +#endif + FindBarStateFactory::GetInstance(); + GAIAInfoUpdateServiceFactory::GetInstance(); +#if defined(USE_AURA) + GesturePrefsObserverFactoryAura::GetInstance(); +#endif + GlobalErrorServiceFactory::GetInstance(); + GoogleURLTrackerFactory::GetInstance(); + HistoryServiceFactory::GetInstance(); +#if !defined(OS_ANDROID) + notifier::ChromeNotifierServiceFactory::GetInstance(); + MediaGalleriesPreferencesFactory::GetInstance(); +#endif +#if defined(OS_CHROMEOS) + chromeos::NetworkingPrivateEventRouterFactory::GetInstance(); +#endif + NTPResourceCacheFactory::GetInstance(); + PasswordStoreFactory::GetInstance(); + autofill::PersonalDataManagerFactory::GetInstance(); +#if !defined(OS_ANDROID) + PinnedTabServiceFactory::GetInstance(); +#endif +#if defined(ENABLE_PLUGINS) + PluginPrefsFactory::GetInstance(); +#endif + policy::ProfilePolicyConnectorFactory::GetInstance(); +#if defined(ENABLE_CONFIGURATION_POLICY) +#if defined(OS_CHROMEOS) + policy::UserCloudPolicyManagerFactoryChromeOS::GetInstance(); + policy::UserCloudPolicyTokenForwarderFactory::GetInstance(); +#else + policy::UserCloudPolicyManagerFactory::GetInstance(); + policy::UserPolicySigninServiceFactory::GetInstance(); +#endif +#endif + predictors::AutocompleteActionPredictorFactory::GetInstance(); + predictors::PredictorDatabaseFactory::GetInstance(); + predictors::ResourcePrefetchPredictorFactory::GetInstance(); + prerender::PrerenderManagerFactory::GetInstance(); + prerender::PrerenderLinkManagerFactory::GetInstance(); + ProfileSyncServiceFactory::GetInstance(); + ProtocolHandlerRegistryFactory::GetInstance(); +#if defined(ENABLE_SESSION_SERVICE) + SessionServiceFactory::GetInstance(); +#endif + ShortcutsBackendFactory::GetInstance(); + ThumbnailServiceFactory::GetInstance(); + SigninManagerFactory::GetInstance(); +#if defined(ENABLE_INPUT_SPEECH) + ChromeSpeechRecognitionPreferences::InitializeFactory(); +#endif + SpellcheckServiceFactory::GetInstance(); + TabRestoreServiceFactory::GetInstance(); + TemplateURLFetcherFactory::GetInstance(); + TemplateURLServiceFactory::GetInstance(); +#if defined(ENABLE_THEMES) + ThemeServiceFactory::GetInstance(); +#endif + TokenCacheServiceFactory::GetInstance(); + TokenServiceFactory::GetInstance(); +#if !defined(OS_ANDROID) + UserStyleSheetWatcherFactory::GetInstance(); +#endif + WebDataServiceFactory::GetInstance(); +} + +void ChromeBrowserMainExtraPartsProfiles::PreProfileInit() { + EnsureProfileKeyedServiceFactoriesBuilt(); +} diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.h b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.h new file mode 100644 index 0000000..1058102 --- /dev/null +++ b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.h @@ -0,0 +1,35 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_PROFILES_CHROME_BROWSER_MAIN_EXTRA_PARTS_PROFILES_H_ +#define CHROME_BROWSER_PROFILES_CHROME_BROWSER_MAIN_EXTRA_PARTS_PROFILES_H_ + +#include "base/basictypes.h" +#include "base/compiler_specific.h" +#include "chrome/browser/chrome_browser_main_extra_parts.h" + +class ChromeBrowserMainParts; + +namespace chrome { +void AddProfilesExtraParts(ChromeBrowserMainParts* main_parts); +} + +class ChromeBrowserMainExtraPartsProfiles : public ChromeBrowserMainExtraParts { + public: + ChromeBrowserMainExtraPartsProfiles(); + virtual ~ChromeBrowserMainExtraPartsProfiles(); + + // Instantiates all chrome ProfileKeyedService factories, which is especially + // important for services that should be created at profile creation time + // as compared to lazily on first access. + static void EnsureProfileKeyedServiceFactoriesBuilt(); + + // Overridden from ChromeBrowserMainExtraParts: + virtual void PreProfileInit() OVERRIDE; + + private: + DISALLOW_COPY_AND_ASSIGN(ChromeBrowserMainExtraPartsProfiles); +}; + +#endif // CHROME_BROWSER_PROFILES_CHROME_BROWSER_MAIN_EXTRA_PARTS_PROFILES_H_ diff --git a/chrome/browser/profiles/profile_dependency_manager.cc b/chrome/browser/profiles/profile_dependency_manager.cc index 93e7610..8b9a1fa 100644 --- a/chrome/browser/profiles/profile_dependency_manager.cc +++ b/chrome/browser/profiles/profile_dependency_manager.cc @@ -8,119 +8,9 @@ #include <deque> #include <iterator> -#include "apps/app_restore_service_factory.h" -#include "apps/shortcut_manager_factory.h" -#include "chrome/browser/autofill/autocheckout_whitelist_manager_factory.h" -#include "chrome/browser/autofill/personal_data_manager_factory.h" -#include "chrome/browser/background/background_contents_service_factory.h" -#include "chrome/browser/bookmarks/bookmark_model_factory.h" -#include "chrome/browser/content_settings/cookie_settings.h" -#include "chrome/browser/custom_handlers/protocol_handler_registry_factory.h" -#include "chrome/browser/download/download_service_factory.h" -#include "chrome/browser/extensions/activity_log.h" -#include "chrome/browser/extensions/api/alarms/alarm_manager.h" -#include "chrome/browser/extensions/api/audio/audio_api.h" -#include "chrome/browser/extensions/api/bluetooth/bluetooth_api_factory.h" -#include "chrome/browser/extensions/api/bookmarks/bookmarks_api.h" -#include "chrome/browser/extensions/api/commands/command_service.h" -#include "chrome/browser/extensions/api/cookies/cookies_api.h" -#include "chrome/browser/extensions/api/dial/dial_api_factory.h" -#include "chrome/browser/extensions/api/discovery/suggested_links_registry_factory.h" -#include "chrome/browser/extensions/api/extension_action/extension_action_api.h" -#include "chrome/browser/extensions/api/font_settings/font_settings_api.h" -#include "chrome/browser/extensions/api/history/history_api.h" -#include "chrome/browser/extensions/api/identity/identity_api.h" -#include "chrome/browser/extensions/api/idle/idle_manager_factory.h" -#include "chrome/browser/extensions/api/input/input.h" -#include "chrome/browser/extensions/api/managed_mode_private/managed_mode_private_api.h" -#include "chrome/browser/extensions/api/management/management_api.h" -#include "chrome/browser/extensions/api/media_galleries_private/media_galleries_private_api.h" -#include "chrome/browser/extensions/api/omnibox/omnibox_api.h" -#include "chrome/browser/extensions/api/preference/preference_api.h" -#include "chrome/browser/extensions/api/processes/processes_api.h" -#include "chrome/browser/extensions/api/push_messaging/push_messaging_api.h" -#include "chrome/browser/extensions/api/session_restore/session_restore_api.h" -#include "chrome/browser/extensions/api/spellcheck/spellcheck_api.h" -#include "chrome/browser/extensions/api/streams_private/streams_private_api.h" -#include "chrome/browser/extensions/api/system_info/system_info_api.h" -#include "chrome/browser/extensions/api/tab_capture/tab_capture_registry_factory.h" -#include "chrome/browser/extensions/api/tabs/tabs_windows_api.h" -#include "chrome/browser/extensions/api/web_navigation/web_navigation_api.h" -#include "chrome/browser/extensions/extension_system_factory.h" -#include "chrome/browser/extensions/extension_web_ui_override_registrar.h" -#include "chrome/browser/extensions/install_tracker_factory.h" -#include "chrome/browser/extensions/token_cache/token_cache_service_factory.h" -#include "chrome/browser/favicon/favicon_service_factory.h" -#include "chrome/browser/geolocation/chrome_geolocation_permission_context_factory.h" -#include "chrome/browser/google/google_url_tracker_factory.h" -#include "chrome/browser/history/history_service_factory.h" -#include "chrome/browser/history/shortcuts_backend_factory.h" -#include "chrome/browser/notifications/desktop_notification_service_factory.h" -#include "chrome/browser/password_manager/password_store_factory.h" -#include "chrome/browser/plugins/plugin_prefs_factory.h" -#include "chrome/browser/policy/profile_policy_connector_factory.h" -#include "chrome/browser/predictors/autocomplete_action_predictor_factory.h" -#include "chrome/browser/predictors/predictor_database_factory.h" -#include "chrome/browser/predictors/resource_prefetch_predictor_factory.h" -#include "chrome/browser/prerender/prerender_link_manager_factory.h" -#include "chrome/browser/prerender/prerender_manager_factory.h" -#include "chrome/browser/printing/cloud_print/cloud_print_proxy_service_factory.h" -#include "chrome/browser/profiles/gaia_info_update_service_factory.h" -#include "chrome/browser/profiles/profile.h" -#include "chrome/browser/profiles/profile_keyed_service.h" -#include "chrome/browser/profiles/profile_keyed_service_factory.h" -#include "chrome/browser/search_engines/template_url_fetcher_factory.h" -#include "chrome/browser/search_engines/template_url_service_factory.h" -#include "chrome/browser/sessions/session_service_factory.h" -#include "chrome/browser/sessions/tab_restore_service_factory.h" -#include "chrome/browser/signin/about_signin_internals_factory.h" -#include "chrome/browser/signin/signin_manager_factory.h" -#include "chrome/browser/signin/token_service_factory.h" -#include "chrome/browser/speech/chrome_speech_recognition_preferences.h" -#include "chrome/browser/speech/extension_api/tts_extension_api.h" -#include "chrome/browser/spellchecker/spellcheck_factory.h" -#include "chrome/browser/sync/profile_sync_service_factory.h" -#include "chrome/browser/themes/theme_service_factory.h" -#include "chrome/browser/thumbnails/thumbnail_service_factory.h" -#include "chrome/browser/ui/find_bar/find_bar_state_factory.h" -#include "chrome/browser/ui/global_error/global_error_service_factory.h" -#include "chrome/browser/ui/tabs/pinned_tab_service_factory.h" -#include "chrome/browser/ui/webui/ntp/ntp_resource_cache_factory.h" -#include "chrome/browser/user_style_sheet_watcher_factory.h" -#include "chrome/browser/webdata/web_data_service_factory.h" - -#if defined(ENABLE_CAPTIVE_PORTAL_DETECTION) -#include "chrome/browser/captive_portal/captive_portal_service_factory.h" -#endif - -#if defined(ENABLE_CONFIGURATION_POLICY) -#if defined(OS_CHROMEOS) -#include "chrome/browser/chromeos/policy/user_cloud_policy_manager_factory_chromeos.h" -#include "chrome/browser/chromeos/policy/user_cloud_policy_token_forwarder_factory.h" -#else -#include "chrome/browser/policy/cloud/user_cloud_policy_manager_factory.h" -#include "chrome/browser/policy/cloud/user_policy_signin_service_factory.h" -#endif -#endif - -#if defined(OS_CHROMEOS) -#include "chrome/browser/chromeos/extensions/input_method_api.h" -#include "chrome/browser/chromeos/extensions/media_player_api.h" -#include "chrome/browser/chromeos/extensions/networking_private_event_router_factory.h" -#include "chrome/browser/extensions/api/input_ime/input_ime_api.h" -#if defined(FILE_MANAGER_EXTENSION) -#include "chrome/browser/chromeos/extensions/file_manager/file_browser_private_api_factory.h" -#endif -#endif - -#if defined(USE_AURA) -#include "chrome/browser/ui/gesture_prefs_observer_factory_aura.h" -#endif - -#if !defined(OS_ANDROID) -#include "chrome/browser/media_galleries/media_galleries_preferences_factory.h" -#include "chrome/browser/notifications/sync_notifier/chrome_notifier_service_factory.h" -#endif +#include "base/bind.h" +#include "chrome/browser/profiles/profile_keyed_base_factory.h" +#include "content/public/browser/browser_context.h" #ifndef NDEBUG #include "base/command_line.h" @@ -145,8 +35,8 @@ void ProfileDependencyManager::AddEdge(ProfileKeyedBaseFactory* depended, dependency_graph_.AddEdge(depended, dependee); } -void ProfileDependencyManager::CreateProfileServices(Profile* profile, - bool is_testing_profile) { +void ProfileDependencyManager::CreateProfileServices( + content::BrowserContext* profile, bool is_testing_profile) { #ifndef NDEBUG // Unmark |profile| as dead. This exists because of unit tests, which will // often have similar stack structures. 0xWhatever might be created, go out @@ -154,8 +44,6 @@ void ProfileDependencyManager::CreateProfileServices(Profile* profile, dead_profile_pointers_.erase(profile); #endif - AssertFactoriesBuilt(); - std::vector<DependencyNode*> construction_order; if (!dependency_graph_.GetConstructionOrder(&construction_order)) { NOTREACHED(); @@ -184,7 +72,8 @@ void ProfileDependencyManager::CreateProfileServices(Profile* profile, } } -void ProfileDependencyManager::DestroyProfileServices(Profile* profile) { +void ProfileDependencyManager::DestroyProfileServices( + content::BrowserContext* profile) { std::vector<DependencyNode*> destruction_order; if (!dependency_graph_.GetDestructionOrder(&destruction_order)) { NOTREACHED(); @@ -213,7 +102,8 @@ void ProfileDependencyManager::DestroyProfileServices(Profile* profile) { } #ifndef NDEBUG -void ProfileDependencyManager::AssertProfileWasntDestroyed(Profile* profile) { +void ProfileDependencyManager::AssertProfileWasntDestroyed( + content::BrowserContext* profile) { if (dead_profile_pointers_.find(profile) != dead_profile_pointers_.end()) { NOTREACHED() << "Attempted to access a Profile that was ShutDown(). This " << "is most likely a heap smasher in progress. After " @@ -228,158 +118,10 @@ ProfileDependencyManager* ProfileDependencyManager::GetInstance() { return Singleton<ProfileDependencyManager>::get(); } -ProfileDependencyManager::ProfileDependencyManager() : built_factories_(false) { +ProfileDependencyManager::ProfileDependencyManager() { } -ProfileDependencyManager::~ProfileDependencyManager() {} - -// This method gets the instance of each ServiceFactory. We do this so that -// each ServiceFactory initializes itself and registers its dependencies with -// the global PreferenceDependencyManager. We need to have a complete -// dependency graph when we create a profile so we can dispatch the profile -// creation message to the services that want to create their services at -// profile creation time. -// -// TODO(erg): This needs to be something else. I don't think putting every -// FooServiceFactory here will scale or is desirable long term. -void ProfileDependencyManager::AssertFactoriesBuilt() { - if (built_factories_) - return; - - AboutSigninInternalsFactory::GetInstance(); - -#if defined(ENABLE_BACKGROUND) - BackgroundContentsServiceFactory::GetInstance(); -#endif - BookmarkModelFactory::GetInstance(); -#if defined(ENABLE_CAPTIVE_PORTAL_DETECTION) - captive_portal::CaptivePortalServiceFactory::GetInstance(); -#endif - ChromeGeolocationPermissionContextFactory::GetInstance(); -#if defined(ENABLE_PRINTING) - CloudPrintProxyServiceFactory::GetInstance(); -#endif - CookieSettings::Factory::GetInstance(); -#if defined(ENABLE_NOTIFICATIONS) - DesktopNotificationServiceFactory::GetInstance(); -#endif - DownloadServiceFactory::GetInstance(); -#if defined(ENABLE_EXTENSIONS) - apps::AppRestoreServiceFactory::GetInstance(); - apps::ShortcutManagerFactory::GetInstance(); - autofill::autocheckout::WhitelistManagerFactory::GetInstance(); - extensions::ActivityLogFactory::GetInstance(); - extensions::AlarmManager::GetFactoryInstance(); - extensions::AudioAPI::GetFactoryInstance(); - extensions::BookmarksAPI::GetFactoryInstance(); - extensions::BluetoothAPIFactory::GetInstance(); - extensions::CommandService::GetFactoryInstance(); - extensions::CookiesAPI::GetFactoryInstance(); - extensions::DialAPIFactory::GetInstance(); - extensions::ExtensionActionAPI::GetFactoryInstance(); - extensions::ExtensionSystemFactory::GetInstance(); - extensions::ExtensionWebUIOverrideRegistrar::GetFactoryInstance(); - extensions::FontSettingsAPI::GetFactoryInstance(); - extensions::HistoryAPI::GetFactoryInstance(); - extensions::IdentityAPI::GetFactoryInstance(); - extensions::IdleManagerFactory::GetInstance(); - extensions::InstallTrackerFactory::GetInstance(); -#if defined(TOOLKIT_VIEWS) - extensions::InputAPI::GetFactoryInstance(); -#endif -#if defined(OS_CHROMEOS) - extensions::InputImeAPI::GetFactoryInstance(); - extensions::InputMethodAPI::GetFactoryInstance(); -#endif - extensions::ManagedModeAPI::GetFactoryInstance(); - extensions::ManagementAPI::GetFactoryInstance(); - extensions::MediaGalleriesPrivateAPI::GetFactoryInstance(); -#if defined(OS_CHROMEOS) - extensions::MediaPlayerAPI::GetFactoryInstance(); -#endif - extensions::OmniboxAPI::GetFactoryInstance(); - extensions::PreferenceAPI::GetFactoryInstance(); - extensions::ProcessesAPI::GetFactoryInstance(); - extensions::PushMessagingAPI::GetFactoryInstance(); - extensions::SessionRestoreAPI::GetFactoryInstance(); - extensions::SpellcheckAPI::GetFactoryInstance(); - extensions::StreamsPrivateAPI::GetFactoryInstance(); - extensions::SystemInfoAPI::GetFactoryInstance(); - extensions::SuggestedLinksRegistryFactory::GetInstance(); - extensions::TabCaptureRegistryFactory::GetInstance(); - extensions::TabsWindowsAPI::GetFactoryInstance(); - extensions::TtsAPI::GetFactoryInstance(); - extensions::WebNavigationAPI::GetFactoryInstance(); -#endif // defined(ENABLE_EXTENSIONS) - FaviconServiceFactory::GetInstance(); -#if defined(OS_CHROMEOS) && defined(FILE_MANAGER_EXTENSION) - FileBrowserPrivateAPIFactory::GetInstance(); -#endif - FindBarStateFactory::GetInstance(); - GAIAInfoUpdateServiceFactory::GetInstance(); -#if defined(USE_AURA) - GesturePrefsObserverFactoryAura::GetInstance(); -#endif - GlobalErrorServiceFactory::GetInstance(); - GoogleURLTrackerFactory::GetInstance(); - HistoryServiceFactory::GetInstance(); -#if !defined(OS_ANDROID) - notifier::ChromeNotifierServiceFactory::GetInstance(); - MediaGalleriesPreferencesFactory::GetInstance(); -#endif -#if defined(OS_CHROMEOS) - chromeos::NetworkingPrivateEventRouterFactory::GetInstance(); -#endif - NTPResourceCacheFactory::GetInstance(); - PasswordStoreFactory::GetInstance(); - autofill::PersonalDataManagerFactory::GetInstance(); -#if !defined(OS_ANDROID) - PinnedTabServiceFactory::GetInstance(); -#endif -#if defined(ENABLE_PLUGINS) - PluginPrefsFactory::GetInstance(); -#endif - policy::ProfilePolicyConnectorFactory::GetInstance(); -#if defined(ENABLE_CONFIGURATION_POLICY) -#if defined(OS_CHROMEOS) - policy::UserCloudPolicyManagerFactoryChromeOS::GetInstance(); - policy::UserCloudPolicyTokenForwarderFactory::GetInstance(); -#else - policy::UserCloudPolicyManagerFactory::GetInstance(); - policy::UserPolicySigninServiceFactory::GetInstance(); -#endif -#endif - predictors::AutocompleteActionPredictorFactory::GetInstance(); - predictors::PredictorDatabaseFactory::GetInstance(); - predictors::ResourcePrefetchPredictorFactory::GetInstance(); - prerender::PrerenderManagerFactory::GetInstance(); - prerender::PrerenderLinkManagerFactory::GetInstance(); - ProfileSyncServiceFactory::GetInstance(); - ProtocolHandlerRegistryFactory::GetInstance(); -#if defined(ENABLE_SESSION_SERVICE) - SessionServiceFactory::GetInstance(); -#endif - ShortcutsBackendFactory::GetInstance(); - ThumbnailServiceFactory::GetInstance(); - SigninManagerFactory::GetInstance(); -#if defined(ENABLE_INPUT_SPEECH) - ChromeSpeechRecognitionPreferences::InitializeFactory(); -#endif - SpellcheckServiceFactory::GetInstance(); - TabRestoreServiceFactory::GetInstance(); - TemplateURLFetcherFactory::GetInstance(); - TemplateURLServiceFactory::GetInstance(); -#if defined(ENABLE_THEMES) - ThemeServiceFactory::GetInstance(); -#endif - TokenCacheServiceFactory::GetInstance(); - TokenServiceFactory::GetInstance(); -#if !defined(OS_ANDROID) - UserStyleSheetWatcherFactory::GetInstance(); -#endif - WebDataServiceFactory::GetInstance(); - - built_factories_ = true; +ProfileDependencyManager::~ProfileDependencyManager() { } #ifndef NDEBUG @@ -391,7 +133,8 @@ std::string ProfileKeyedBaseFactoryGetNodeName(DependencyNode* node) { } // namespace -void ProfileDependencyManager::DumpProfileDependencies(Profile* profile) { +void ProfileDependencyManager::DumpProfileDependencies( + content::BrowserContext* profile) { // Whenever we try to build a destruction ordering, we should also dump a // dependency graph to "/path/to/profile/profile-dependencies.dot". if (CommandLine::ForCurrentProcess()->HasSwitch( diff --git a/chrome/browser/profiles/profile_dependency_manager.h b/chrome/browser/profiles/profile_dependency_manager.h index 50a76d5..8c216d1 100644 --- a/chrome/browser/profiles/profile_dependency_manager.h +++ b/chrome/browser/profiles/profile_dependency_manager.h @@ -12,9 +12,12 @@ #include <set> #endif -class Profile; class ProfileKeyedBaseFactory; +namespace content { +class BrowserContext; +} + // A singleton that listens for profile destruction notifications and // rebroadcasts them to each ProfileKeyedBaseFactory in a safe order based // on the stated dependencies by each service. @@ -34,7 +37,8 @@ class ProfileDependencyManager { // done at this time. (If you want your ProfileKeyedService to be started // with the Profile, override ProfileKeyedBaseFactory:: // ServiceIsCreatedWithProfile() to return true.) - void CreateProfileServices(Profile* profile, bool is_testing_profile); + void CreateProfileServices(content::BrowserContext* profile, + bool is_testing_profile); // Called by each Profile to alert us that we should destroy services // associated with it. @@ -46,13 +50,13 @@ class ProfileDependencyManager { // - Because this class is a singleton and Singletons can't rely on // NotificationService in unit tests because NotificationService is // replaced in many tests. - void DestroyProfileServices(Profile* profile); + void DestroyProfileServices(content::BrowserContext* profile); #ifndef NDEBUG // Debugging assertion called as part of GetServiceForProfile in debug // mode. This will NOTREACHED() whenever the user is trying to access a stale // Profile*. - void AssertProfileWasntDestroyed(Profile* profile); + void AssertProfileWasntDestroyed(content::BrowserContext* profile); #endif static ProfileDependencyManager* GetInstance(); @@ -64,17 +68,10 @@ class ProfileDependencyManager { ProfileDependencyManager(); virtual ~ProfileDependencyManager(); - // Ensures that all the factories have been created before building the - // dependency graph. - void AssertFactoriesBuilt(); - #ifndef NDEBUG - void DumpProfileDependencies(Profile* profile); + void DumpProfileDependencies(content::BrowserContext* profile); #endif - // Whether AssertFactoriesBuilt has been done. - bool built_factories_; - DependencyGraph dependency_graph_; #ifndef NDEBUG @@ -82,7 +79,7 @@ class ProfileDependencyManager { // phase. These pointers are most likely invalid, but we keep track of their // locations in memory so we can nicely assert if we're asked to do anything // with them. - std::set<Profile*> dead_profile_pointers_; + std::set<content::BrowserContext*> dead_profile_pointers_; #endif }; diff --git a/chrome/browser/profiles/profile_keyed_base_factory.cc b/chrome/browser/profiles/profile_keyed_base_factory.cc index 5343e16..cf98c94 100644 --- a/chrome/browser/profiles/profile_keyed_base_factory.cc +++ b/chrome/browser/profiles/profile_keyed_base_factory.cc @@ -5,10 +5,10 @@ #include "chrome/browser/profiles/profile_keyed_base_factory.h" #include "base/prefs/pref_service.h" -#include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_dependency_manager.h" #include "components/user_prefs/pref_registry_syncable.h" #include "components/user_prefs/user_prefs.h" +#include "content/public/browser/browser_context.h" ProfileKeyedBaseFactory::ProfileKeyedBaseFactory( const char* name, ProfileDependencyManager* manager) @@ -32,17 +32,15 @@ content::BrowserContext* ProfileKeyedBaseFactory::GetBrowserContextToUse( content::BrowserContext* context) const { DCHECK(CalledOnValidThread()); - Profile* profile = static_cast<Profile*>(context); - #ifndef NDEBUG - dependency_manager_->AssertProfileWasntDestroyed(profile); + dependency_manager_->AssertProfileWasntDestroyed(context); #endif // Safe default for the Incognito mode: no service. - if (profile->IsOffTheRecord()) + if (context->IsOffTheRecord()) return NULL; - return profile; + return context; } void ProfileKeyedBaseFactory::RegisterUserPrefsOnProfile( diff --git a/chrome/browser/profiles/profile_keyed_base_factory.h b/chrome/browser/profiles/profile_keyed_base_factory.h index ca11d7a..25e090e 100644 --- a/chrome/browser/profiles/profile_keyed_base_factory.h +++ b/chrome/browser/profiles/profile_keyed_base_factory.h @@ -11,7 +11,6 @@ #include "chrome/browser/profiles/dependency_node.h" class PrefService; -class Profile; class ProfileDependencyManager; namespace content { diff --git a/chrome/browser/profiles/profile_keyed_service_factory.cc b/chrome/browser/profiles/profile_keyed_service_factory.cc index b64f073..eab250e 100644 --- a/chrome/browser/profiles/profile_keyed_service_factory.cc +++ b/chrome/browser/profiles/profile_keyed_service_factory.cc @@ -8,9 +8,9 @@ #include "base/logging.h" #include "base/stl_util.h" -#include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_dependency_manager.h" #include "chrome/browser/profiles/profile_keyed_service.h" +#include "content/public/browser/browser_context.h" void ProfileKeyedServiceFactory::SetTestingFactory( content::BrowserContext* profile, FactoryFunction factory) { diff --git a/chrome/browser/profiles/profile_keyed_service_factory.h b/chrome/browser/profiles/profile_keyed_service_factory.h index 973ef6b..78c73ba 100644 --- a/chrome/browser/profiles/profile_keyed_service_factory.h +++ b/chrome/browser/profiles/profile_keyed_service_factory.h @@ -12,7 +12,6 @@ #include "chrome/browser/profiles/profile_keyed_base_factory.h" #include "chrome/browser/profiles/profile_keyed_service.h" -class Profile; class ProfileDependencyManager; class ProfileKeyedService; diff --git a/chrome/browser/speech/chrome_speech_recognition_preferences.h b/chrome/browser/speech/chrome_speech_recognition_preferences.h index 8ee5ad4..b18fc2a 100644 --- a/chrome/browser/speech/chrome_speech_recognition_preferences.h +++ b/chrome/browser/speech/chrome_speech_recognition_preferences.h @@ -17,6 +17,7 @@ #include "content/public/browser/speech_recognition_preferences.h" class PrefService; +class Profile; namespace base { class ListValue; diff --git a/chrome/browser/spellchecker/spellcheck_factory.h b/chrome/browser/spellchecker/spellcheck_factory.h index 78d05a8..9f1de12 100644 --- a/chrome/browser/spellchecker/spellcheck_factory.h +++ b/chrome/browser/spellchecker/spellcheck_factory.h @@ -10,6 +10,7 @@ #include "chrome/browser/profiles/profile_keyed_service_factory.h" class SpellcheckService; +class Profile; // Entry into the SpellCheck system. // diff --git a/chrome/browser/ui/global_error/global_error_service_factory.h b/chrome/browser/ui/global_error/global_error_service_factory.h index 1936e2c..badb03e 100644 --- a/chrome/browser/ui/global_error/global_error_service_factory.h +++ b/chrome/browser/ui/global_error/global_error_service_factory.h @@ -11,6 +11,7 @@ #include "chrome/browser/profiles/profile_keyed_service_factory.h" class GlobalErrorService; +class Profile; // Singleton that owns all GlobalErrorService and associates them with // Profiles. Listens for the Profile's destruction notification and cleans up diff --git a/chrome/browser/ui/webui/ntp/app_resource_cache_factory.h b/chrome/browser/ui/webui/ntp/app_resource_cache_factory.h index fd2eb29..1b53d50 100644 --- a/chrome/browser/ui/webui/ntp/app_resource_cache_factory.h +++ b/chrome/browser/ui/webui/ntp/app_resource_cache_factory.h @@ -9,6 +9,7 @@ #include "chrome/browser/profiles/profile_keyed_service_factory.h" class NTPResourceCache; +class Profile; // Singleton that owns NTPResourceCaches used by the apps launcher page and // associates them with Profiles. Listens for the Profile's destruction diff --git a/chrome/browser/ui/webui/ntp/ntp_resource_cache_factory.h b/chrome/browser/ui/webui/ntp/ntp_resource_cache_factory.h index 16d4319..8d7145b 100644 --- a/chrome/browser/ui/webui/ntp/ntp_resource_cache_factory.h +++ b/chrome/browser/ui/webui/ntp/ntp_resource_cache_factory.h @@ -9,6 +9,7 @@ #include "chrome/browser/profiles/profile_keyed_service_factory.h" class NTPResourceCache; +class Profile; // Singleton that owns the NTPResourceCaches used by the NTP and associates them // with Profiles. Listens for the Profile's destruction notification and cleans diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi index c6471fa..c70d1de9 100644 --- a/chrome/chrome_browser.gypi +++ b/chrome/chrome_browser.gypi @@ -1546,6 +1546,8 @@ 'browser/profiles/avatar_menu_model_observer.h', 'browser/profiles/bookmark_model_loaded_observer.cc', 'browser/profiles/bookmark_model_loaded_observer.h', + 'browser/profiles/chrome_browser_main_extra_parts_profiles.cc', + 'browser/profiles/chrome_browser_main_extra_parts_profiles.h', 'browser/profiles/chrome_version_service.cc', 'browser/profiles/chrome_version_service.h', 'browser/profiles/dependency_graph.cc', diff --git a/chrome/test/base/testing_profile.cc b/chrome/test/base/testing_profile.cc index 2d4a400..a8b6e85 100644 --- a/chrome/test/base/testing_profile.cc +++ b/chrome/test/base/testing_profile.cc @@ -44,6 +44,7 @@ #include "chrome/browser/prefs/browser_prefs.h" #include "chrome/browser/prefs/pref_service_syncable.h" #include "chrome/browser/prerender/prerender_manager.h" +#include "chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.h" #include "chrome/browser/profiles/profile_dependency_manager.h" #include "chrome/browser/profiles/storage_partition_descriptor.h" #include "chrome/browser/search_engines/template_url_fetcher_factory.h" @@ -277,6 +278,11 @@ void TestingProfile::CreateTempProfileDir() { } void TestingProfile::Init() { + // Normally this would happen during browser startup, but for tests + // we need to trigger creation of Profile-related services. + ChromeBrowserMainExtraPartsProfiles:: + EnsureProfileKeyedServiceFactoriesBuilt(); + if (prefs_.get()) components::UserPrefs::Set(this, prefs_.get()); else |