// Copyright (c) 2010 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. // This class gathers state related to a single user profile. #ifndef CHROME_BROWSER_PROFILE_IMPL_H_ #define CHROME_BROWSER_PROFILE_IMPL_H_ #pragma once #include "base/file_path.h" #include "base/ref_counted.h" #include "base/scoped_ptr.h" #include "base/timer.h" #include "chrome/browser/profile.h" #include "chrome/browser/prefs/pref_change_registrar.h" #include "chrome/browser/spellcheck_host_observer.h" #include "chrome/common/notification_observer.h" #include "chrome/common/notification_registrar.h" class PrefService; #if defined(OS_CHROMEOS) namespace chromeos { class Preferences; } #endif class NetPrefObserver; // The default profile implementation. class ProfileImpl : public Profile, public SpellCheckHostObserver, public NotificationObserver { public: virtual ~ProfileImpl(); static void RegisterUserPrefs(PrefService* prefs); // Profile implementation. virtual ProfileId GetRuntimeId(); virtual FilePath GetPath(); virtual bool IsOffTheRecord(); virtual Profile* GetOffTheRecordProfile(); virtual void DestroyOffTheRecordProfile(); virtual bool HasOffTheRecordProfile(); virtual Profile* GetOriginalProfile(); virtual ChromeAppCacheService* GetAppCacheService(); virtual webkit_database::DatabaseTracker* GetDatabaseTracker(); virtual history::TopSites* GetTopSites(); virtual history::TopSites* GetTopSitesWithoutCreating(); virtual VisitedLinkMaster* GetVisitedLinkMaster(); virtual UserScriptMaster* GetUserScriptMaster(); virtual SSLHostState* GetSSLHostState(); virtual net::TransportSecurityState* GetTransportSecurityState(); virtual ExtensionsService* GetExtensionsService(); virtual ExtensionDevToolsManager* GetExtensionDevToolsManager(); virtual ExtensionProcessManager* GetExtensionProcessManager(); virtual ExtensionMessageService* GetExtensionMessageService(); virtual ExtensionEventRouter* GetExtensionEventRouter(); virtual FaviconService* GetFaviconService(ServiceAccessType sat); virtual HistoryService* GetHistoryService(ServiceAccessType sat); virtual HistoryService* GetHistoryServiceWithoutCreating(); virtual AutocompleteClassifier* GetAutocompleteClassifier(); virtual WebDataService* GetWebDataService(ServiceAccessType sat); virtual WebDataService* GetWebDataServiceWithoutCreating(); virtual PasswordStore* GetPasswordStore(ServiceAccessType sat); virtual PrefService* GetPrefs(); virtual TemplateURLModel* GetTemplateURLModel(); virtual TemplateURLFetcher* GetTemplateURLFetcher(); virtual DownloadManager* GetDownloadManager(); virtual PersonalDataManager* GetPersonalDataManager(); virtual BrowserFileSystemContext* GetFileSystemContext(); virtual void InitThemes(); virtual void SetTheme(const Extension* extension); virtual void SetNativeTheme(); virtual void ClearTheme(); virtual const Extension* GetTheme(); virtual BrowserThemeProvider* GetThemeProvider(); virtual bool HasCreatedDownloadManager() const; virtual URLRequestContextGetter* GetRequestContext(); virtual URLRequestContextGetter* GetRequestContextForMedia(); virtual URLRequestContextGetter* GetRequestContextForExtensions(); virtual void RegisterExtensionWithRequestContexts(const Extension* extension); virtual void UnregisterExtensionWithRequestContexts( const Extension* extension); virtual net::SSLConfigService* GetSSLConfigService(); virtual HostContentSettingsMap* GetHostContentSettingsMap(); virtual HostZoomMap* GetHostZoomMap(); virtual GeolocationContentSettingsMap* GetGeolocationContentSettingsMap(); virtual GeolocationPermissionContext* GetGeolocationPermissionContext(); virtual UserStyleSheetWatcher* GetUserStyleSheetWatcher(); virtual FindBarState* GetFindBarState(); virtual SessionService* GetSessionService(); virtual void ShutdownSessionService(); virtual bool HasSessionService() const; virtual bool HasProfileSyncService() const; virtual bool DidLastSessionExitCleanly(); virtual BookmarkModel* GetBookmarkModel(); virtual bool IsSameProfile(Profile* profile); virtual base::Time GetStartTime() const; virtual TabRestoreService* GetTabRestoreService(); virtual void ResetTabRestoreService(); virtual SpellCheckHost* GetSpellCheckHost(); virtual void ReinitializeSpellCheckHost(bool force); virtual WebKitContext* GetWebKitContext(); virtual DesktopNotificationService* GetDesktopNotificationService(); virtual BackgroundContentsService* GetBackgroundContentsService() const; virtual StatusTray* GetStatusTray(); virtual void MarkAsCleanShutdown(); virtual void InitExtensions(); virtual void InitWebResources(); virtual NTPResourceCache* GetNTPResourceCache(); virtual FilePath last_selected_directory(); virtual void set_last_selected_directory(const FilePath& path); virtual ProfileSyncService* GetProfileSyncService(); virtual ProfileSyncService* GetProfileSyncService( const std::string& cros_user); virtual TokenService* GetTokenService(); void InitSyncService(const std::string& cros_user); virtual CloudPrintProxyService* GetCloudPrintProxyService(); void InitCloudPrintProxyService(); virtual ChromeBlobStorageContext* GetBlobStorageContext(); virtual ExtensionInfoMap* GetExtensionInfoMap(); virtual PromoCounter* GetInstantPromoCounter(); virtual BrowserSignin* GetBrowserSignin(); #if defined(OS_CHROMEOS) virtual chromeos::ProxyConfigServiceImpl* GetChromeOSProxyConfigServiceImpl(); #endif // defined(OS_CHROMEOS) // NotificationObserver implementation. virtual void Observe(NotificationType type, const NotificationSource& source, const NotificationDetails& details); // SpellCheckHostObserver implementation. virtual void SpellCheckHostInitialized(); private: friend class Profile; explicit ProfileImpl(const FilePath& path); void CreateWebDataService(); FilePath GetPrefFilePath(); void CreatePasswordStore(); void StopCreateSessionServiceTimer(); void EnsureRequestContextCreated() { GetRequestContext(); } void EnsureSessionServiceCreated() { GetSessionService(); } void RegisterComponentExtensions(); void InstallDefaultApps(); NotificationRegistrar registrar_; PrefChangeRegistrar pref_change_registrar_; FilePath path_; FilePath base_cache_path_; scoped_ptr visited_link_event_listener_; scoped_ptr visited_link_master_; scoped_refptr extensions_service_; scoped_refptr user_script_master_; scoped_refptr extension_devtools_manager_; scoped_ptr extension_process_manager_; scoped_refptr extension_message_service_; scoped_ptr extension_event_router_; scoped_ptr ssl_host_state_; scoped_refptr transport_security_state_; scoped_refptr transport_security_persister_; scoped_ptr prefs_; scoped_ptr net_pref_observer_; scoped_ptr template_url_fetcher_; scoped_ptr template_url_model_; scoped_ptr bookmark_bar_model_; scoped_refptr web_resource_service_; scoped_ptr ntp_resource_cache_; scoped_ptr token_service_; scoped_ptr profile_sync_factory_; scoped_ptr sync_service_; scoped_refptr cloud_print_proxy_service_; scoped_refptr request_context_; scoped_refptr media_request_context_; scoped_refptr extensions_request_context_; scoped_ptr ssl_config_service_manager_; scoped_refptr host_content_settings_map_; scoped_refptr host_zoom_map_; scoped_refptr geolocation_content_settings_map_; scoped_refptr geolocation_permission_context_; scoped_refptr user_style_sheet_watcher_; scoped_ptr find_bar_state_; scoped_refptr download_manager_; scoped_refptr history_service_; scoped_refptr favicon_service_; scoped_ptr autocomplete_classifier_; scoped_refptr web_data_service_; scoped_refptr password_store_; scoped_refptr session_service_; scoped_ptr theme_provider_; scoped_refptr webkit_context_; scoped_ptr desktop_notification_service_; scoped_ptr background_contents_service_; scoped_ptr background_mode_manager_; scoped_ptr status_tray_; scoped_refptr personal_data_manager_; scoped_ptr pinned_tab_service_; scoped_refptr browser_file_system_context_; scoped_ptr browser_signin_; bool history_service_created_; bool favicon_service_created_; bool created_web_data_service_; bool created_password_store_; bool created_download_manager_; bool created_theme_provider_; // Whether or not the last session exited cleanly. This is set only once. bool last_session_exited_cleanly_; base::OneShotTimer create_session_service_timer_; scoped_ptr off_the_record_profile_; // See GetStartTime for details. base::Time start_time_; scoped_refptr tab_restore_service_; scoped_refptr spellcheck_host_; // Indicates whether |spellcheck_host_| has told us initialization is // finished. bool spellcheck_host_ready_; #if defined(OS_WIN) bool checked_instant_promo_; scoped_ptr instant_promo_counter_; #endif // Set to true when ShutdownSessionService is invoked. If true // GetSessionService won't recreate the SessionService. bool shutdown_session_service_; // The AppCacheService for this profile, shared by all requests contexts // associated with this profile. Should only be used on the IO thread. scoped_refptr appcache_service_; // The main database tracker for this profile. // Should be used only on the file thread. scoped_refptr db_tracker_; scoped_refptr top_sites_; // For history and thumbnails. scoped_refptr blob_storage_context_; scoped_refptr extension_info_map_; #if defined(OS_CHROMEOS) scoped_ptr chromeos_preferences_; scoped_refptr chromeos_proxy_config_service_impl_; #endif DISALLOW_COPY_AND_ASSIGN(ProfileImpl); }; #endif // CHROME_BROWSER_PROFILE_IMPL_H_