| // Copyright (c) 2011 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_TEST_TESTING_PROFILE_H_ |
| #define CHROME_TEST_TESTING_PROFILE_H_ |
| #pragma once |
| |
| #include "base/memory/ref_counted.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "base/memory/scoped_temp_dir.h" |
| #include "base/timer.h" |
| #include "chrome/browser/profiles/profile.h" |
| |
| namespace history { |
| class TopSites; |
| } |
| |
| namespace net { |
| class CookieMonster; |
| } |
| |
| class AutocompleteClassifier; |
| class BookmarkModel; |
| class CommandLine; |
| class DesktopNotificationService; |
| class ExtensionPrefs; |
| class ExtensionPrefStore; |
| class ExtensionPrefValueMap; |
| class ExtensionSpecialStoragePolicy; |
| class FaviconService; |
| class FindBarState; |
| class GeolocationContentSettingsMap; |
| class GeolocationPermissionContext; |
| class HistoryService; |
| class HostContentSettingsMap; |
| class PrefService; |
| class ProfileSyncService; |
| class SessionService; |
| class TemplateURLModel; |
| class TestingPrefService; |
| class ThemeService; |
| class URLRequestContextGetter; |
| class WebKitContext; |
| |
| class TestingProfile : public Profile { |
| public: |
| TestingProfile(); |
| |
| virtual ~TestingProfile(); |
| |
| // Creates the favicon service. Consequent calls would recreate the service. |
| void CreateFaviconService(); |
| |
| // Creates the history service. If |delete_file| is true, the history file is |
| // deleted first, then the HistoryService is created. As TestingProfile |
| // deletes the directory containing the files used by HistoryService, this |
| // only matters if you're recreating the HistoryService. If |no_db| is true, |
| // the history backend will fail to initialize its database; this is useful |
| // for testing error conditions. |
| void CreateHistoryService(bool delete_file, bool no_db); |
| |
| // Shuts down and nulls out the reference to HistoryService. |
| void DestroyHistoryService(); |
| |
| // Creates TopSites. This returns immediately, and top sites may not be |
| // loaded. Use BlockUntilTopSitesLoaded to ensure TopSites has finished |
| // loading. |
| void CreateTopSites(); |
| |
| // Shuts down and nulls out the reference to TopSites. |
| void DestroyTopSites(); |
| |
| // Creates the BookmkarBarModel. If not invoked the bookmark bar model is |
| // NULL. If |delete_file| is true, the bookmarks file is deleted first, then |
| // the model is created. As TestingProfile deletes the directory containing |
| // the files used by HistoryService, the boolean only matters if you're |
| // recreating the BookmarkModel. |
| // |
| // NOTE: this does not block until the bookmarks are loaded. For that use |
| // BlockUntilBookmarkModelLoaded. |
| void CreateBookmarkModel(bool delete_file); |
| |
| // Creates an AutocompleteClassifier. If not invoked the |
| // AutocompleteClassifier is NULL. |
| void CreateAutocompleteClassifier(); |
| |
| // Creates a ProtocolHandlerRegistry. If not invoked the protocol handler |
| // registry is NULL. |
| void CreateProtocolHandlerRegistry(); |
| |
| // Creates the webdata service. If |delete_file| is true, the webdata file is |
| // deleted first, then the WebDataService is created. As TestingProfile |
| // deletes the directory containing the files used by WebDataService, this |
| // only matters if you're recreating the WebDataService. |
| void CreateWebDataService(bool delete_file); |
| |
| // Blocks until the BookmarkModel finishes loaded. This is NOT invoked from |
| // CreateBookmarkModel. |
| void BlockUntilBookmarkModelLoaded(); |
| |
| // Blocks until TopSites finishes loading. |
| void BlockUntilTopSitesLoaded(); |
| |
| // Creates a TemplateURLModel. If not invoked the TemplateURLModel is NULL. |
| // Creates a TemplateURLFetcher. If not invoked, the TemplateURLFetcher is |
| // NULL. |
| void CreateTemplateURLFetcher(); |
| |
| // Creates a TemplateURLModel. If not invoked, the TemplateURLModel is NULL. |
| void CreateTemplateURLModel(); |
| |
| // Sets the TemplateURLModel. Takes ownership of it. |
| void SetTemplateURLModel(TemplateURLModel* model); |
| |
| // Creates an ExtensionService initialized with the testing profile and |
| // returns it. The profile keeps its own copy of a scoped_refptr to the |
| // ExtensionService to make sure that is still alive to be notified when the |
| // profile is destroyed. |
| ExtensionService* CreateExtensionService(const CommandLine* command_line, |
| const FilePath& install_directory); |
| |
| TestingPrefService* GetTestingPrefService(); |
| |
| virtual ProfileId GetRuntimeId(); |
| |
| virtual FilePath GetPath(); |
| |
| // Sets whether we're incognito. Default is false. |
| void set_incognito(bool incognito) { |
| incognito_ = incognito; |
| } |
| virtual bool IsOffTheRecord(); |
| // Assumes ownership. |
| virtual void SetOffTheRecordProfile(Profile* profile); |
| virtual Profile* GetOffTheRecordProfile(); |
| |
| virtual void DestroyOffTheRecordProfile() {} |
| |
| virtual bool HasOffTheRecordProfile(); |
| |
| virtual Profile* GetOriginalProfile(); |
| virtual ChromeAppCacheService* GetAppCacheService(); |
| virtual webkit_database::DatabaseTracker* GetDatabaseTracker(); |
| virtual VisitedLinkMaster* GetVisitedLinkMaster(); |
| virtual ExtensionService* GetExtensionService(); |
| virtual UserScriptMaster* GetUserScriptMaster(); |
| virtual ExtensionDevToolsManager* GetExtensionDevToolsManager(); |
| virtual ExtensionProcessManager* GetExtensionProcessManager(); |
| virtual ExtensionMessageService* GetExtensionMessageService(); |
| virtual ExtensionEventRouter* GetExtensionEventRouter(); |
| virtual ExtensionSpecialStoragePolicy* GetExtensionSpecialStoragePolicy(); |
| virtual SSLHostState* GetSSLHostState(); |
| virtual net::TransportSecurityState* GetTransportSecurityState(); |
| virtual FaviconService* GetFaviconService(ServiceAccessType access); |
| virtual HistoryService* GetHistoryService(ServiceAccessType access); |
| virtual HistoryService* GetHistoryServiceWithoutCreating(); |
| void set_has_history_service(bool has_history_service) { |
| has_history_service_ = has_history_service; |
| } |
| // The CookieMonster will only be returned if a Context has been created. Do |
| // this by calling CreateRequestContext(). See the note at GetRequestContext |
| // for more information. |
| net::CookieMonster* GetCookieMonster(); |
| virtual AutocompleteClassifier* GetAutocompleteClassifier(); |
| virtual WebDataService* GetWebDataService(ServiceAccessType access); |
| virtual WebDataService* GetWebDataServiceWithoutCreating(); |
| virtual PasswordStore* GetPasswordStore(ServiceAccessType access); |
| // Sets the profile's PrefService. If a pref service hasn't been explicitly |
| // set GetPrefs creates one, so normally you need not invoke this. If you need |
| // to set a pref service you must invoke this before GetPrefs. |
| // TestingPrefService takes ownership of |prefs|. |
| void SetPrefService(PrefService* prefs); |
| virtual PrefService* GetPrefs(); |
| virtual TemplateURLModel* GetTemplateURLModel(); |
| virtual TemplateURLFetcher* GetTemplateURLFetcher(); |
| virtual history::TopSites* GetTopSites(); |
| virtual history::TopSites* GetTopSitesWithoutCreating(); |
| virtual DownloadManager* GetDownloadManager(); |
| virtual PersonalDataManager* GetPersonalDataManager(); |
| virtual fileapi::FileSystemContext* GetFileSystemContext(); |
| virtual BrowserSignin* GetBrowserSignin(); |
| virtual bool HasCreatedDownloadManager() const; |
| |
| // Returns a testing ContextGetter (if one has been created via |
| // CreateRequestContext) or NULL. This is not done on-demand for two reasons: |
| // (1) Some tests depend on GetRequestContext() returning NULL. (2) Because |
| // of the special memory management considerations for the |
| // TestURLRequestContextGetter class, many tests would find themseleves |
| // leaking if they called this method without the necessary IO thread. This |
| // getter is currently only capable of returning a Context that helps test |
| // the CookieMonster. See implementation comments for more details. |
| virtual URLRequestContextGetter* GetRequestContext(); |
| virtual URLRequestContextGetter* GetRequestContextForPossibleApp( |
| const Extension* installed_app); |
| void CreateRequestContext(); |
| // Clears out the created request context (which must be done before shutting |
| // down the IO thread to avoid leaks). |
| void ResetRequestContext(); |
| |
| virtual URLRequestContextGetter* GetRequestContextForMedia(); |
| virtual URLRequestContextGetter* GetRequestContextForExtensions(); |
| virtual URLRequestContextGetter* GetRequestContextForIsolatedApp( |
| const std::string& app_id); |
| |
| virtual net::SSLConfigService* GetSSLConfigService(); |
| virtual UserStyleSheetWatcher* GetUserStyleSheetWatcher(); |
| virtual FindBarState* GetFindBarState(); |
| virtual HostContentSettingsMap* GetHostContentSettingsMap(); |
| virtual GeolocationContentSettingsMap* GetGeolocationContentSettingsMap(); |
| virtual GeolocationPermissionContext* GetGeolocationPermissionContext(); |
| virtual HostZoomMap* GetHostZoomMap(); |
| void set_session_service(SessionService* session_service); |
| virtual SessionService* GetSessionService(); |
| virtual void ShutdownSessionService() {} |
| virtual bool HasSessionService() const; |
| virtual bool HasProfileSyncService() const; |
| virtual std::wstring GetName(); |
| virtual void SetName(const std::wstring& name) {} |
| virtual std::wstring GetID(); |
| virtual void SetID(const std::wstring& id); |
| void set_last_session_exited_cleanly(bool value) { |
| last_session_exited_cleanly_ = value; |
| } |
| virtual bool DidLastSessionExitCleanly(); |
| virtual void MergeResourceString(int message_id, |
| std::wstring* output_string) {} |
| virtual void MergeResourceInteger(int message_id, int* output_value) {} |
| virtual void MergeResourceBoolean(int message_id, bool* output_value) {} |
| virtual BookmarkModel* GetBookmarkModel(); |
| virtual bool IsSameProfile(Profile *p); |
| virtual base::Time GetStartTime() const; |
| virtual TabRestoreService* GetTabRestoreService(); |
| virtual ProtocolHandlerRegistry* GetProtocolHandlerRegistry(); |
| virtual void ResetTabRestoreService() {} |
| virtual SpellCheckHost* GetSpellCheckHost(); |
| virtual void ReinitializeSpellCheckHost(bool force) { } |
| virtual WebKitContext* GetWebKitContext(); |
| virtual WebKitContext* GetOffTheRecordWebKitContext(); |
| virtual void MarkAsCleanShutdown() {} |
| virtual void InitExtensions() {} |
| virtual void InitPromoResources() {} |
| virtual void InitRegisteredProtocolHandlers() {} |
| virtual NTPResourceCache* GetNTPResourceCache(); |
| |
| virtual DesktopNotificationService* GetDesktopNotificationService(); |
| virtual BackgroundContentsService* GetBackgroundContentsService() const; |
| virtual StatusTray* GetStatusTray(); |
| virtual FilePath last_selected_directory(); |
| virtual void set_last_selected_directory(const FilePath& path); |
| #if defined(OS_CHROMEOS) |
| virtual void SetupChromeOSEnterpriseExtensionObserver() { |
| } |
| virtual void InitChromeOSPreferences() { |
| } |
| virtual void ChangeAppLocale(const std::string&, AppLocaleChangedVia) { |
| } |
| virtual void OnLogin() { |
| } |
| #endif // defined(OS_CHROMEOS) |
| |
| virtual PrefProxyConfigTracker* GetProxyConfigTracker(); |
| |
| // Schedules a task on the history backend and runs a nested loop until the |
| // task is processed. This has the effect of blocking the caller until the |
| // history service processes all pending requests. |
| void BlockUntilHistoryProcessesPendingRequests(); |
| |
| // Creates and initializes a profile sync service if the tests require one. |
| virtual TokenService* GetTokenService(); |
| virtual ProfileSyncService* GetProfileSyncService(); |
| virtual ProfileSyncService* GetProfileSyncService( |
| const std::string& cros_notes); |
| virtual CloudPrintProxyService* GetCloudPrintProxyService(); |
| virtual ChromeBlobStorageContext* GetBlobStorageContext(); |
| virtual ExtensionInfoMap* GetExtensionInfoMap(); |
| virtual PromoCounter* GetInstantPromoCounter(); |
| virtual policy::ProfilePolicyConnector* GetPolicyConnector(); |
| virtual ChromeURLDataManager* GetChromeURLDataManager(); |
| virtual prerender::PrerenderManager* GetPrerenderManager(); |
| virtual PrefService* GetOffTheRecordPrefs(); |
| |
| protected: |
| base::Time start_time_; |
| scoped_ptr<PrefService> prefs_; |
| // ref only for right type, lifecycle is managed by prefs_ |
| TestingPrefService* testing_prefs_; |
| |
| private: |
| // Destroys favicon service if it has been created. |
| void DestroyFaviconService(); |
| |
| // If the webdata service has been created, it is destroyed. This is invoked |
| // from the destructor. |
| void DestroyWebDataService(); |
| |
| // Creates a TestingPrefService and associates it with the TestingProfile. |
| void CreateTestingPrefService(); |
| |
| // The favicon service. Only created if CreateFaviconService is invoked. |
| scoped_refptr<FaviconService> favicon_service_; |
| |
| // The history service. Only created if CreateHistoryService is invoked. |
| scoped_refptr<HistoryService> history_service_; |
| |
| // The BookmarkModel. Only created if CreateBookmarkModel is invoked. |
| scoped_ptr<BookmarkModel> bookmark_bar_model_; |
| |
| // The ProtocolHandlerRegistry. Only created if CreateProtocolHandlerRegistry |
| // is invoked. |
| scoped_refptr<ProtocolHandlerRegistry> protocol_handler_registry_; |
| |
| // The TokenService. Created by CreateTokenService. Filled with dummy data. |
| scoped_ptr<TokenService> token_service_; |
| |
| // The ProfileSyncService. Created by CreateProfileSyncService. |
| scoped_ptr<ProfileSyncService> profile_sync_service_; |
| |
| // The AutocompleteClassifier. Only created if CreateAutocompleteClassifier |
| // is invoked. |
| scoped_ptr<AutocompleteClassifier> autocomplete_classifier_; |
| |
| // The WebDataService. Only created if CreateWebDataService is invoked. |
| scoped_refptr<WebDataService> web_data_service_; |
| |
| // The TemplateURLFetcher. Only created if CreateTemplateURLFetcher is |
| // invoked. |
| scoped_ptr<TemplateURLFetcher> template_url_fetcher_; |
| |
| // The TemplateURLModel. Only created if CreateTemplateURLModel is invoked. |
| scoped_ptr<TemplateURLModel> template_url_model_; |
| |
| scoped_ptr<NTPResourceCache> ntp_resource_cache_; |
| |
| // The SessionService. Defaults to NULL, but can be set using the setter. |
| scoped_refptr<SessionService> session_service_; |
| |
| // Internally, this is a TestURLRequestContextGetter that creates a dummy |
| // request context. Currently, only the CookieMonster is hooked up. |
| scoped_refptr<URLRequestContextGetter> request_context_; |
| scoped_refptr<URLRequestContextGetter> extensions_request_context_; |
| |
| // Do we have a history service? This defaults to the value of |
| // history_service, but can be explicitly set. |
| bool has_history_service_; |
| |
| std::wstring id_; |
| |
| bool incognito_; |
| scoped_ptr<Profile> incognito_profile_; |
| |
| // Did the last session exit cleanly? Default is true. |
| bool last_session_exited_cleanly_; |
| |
| // The main database tracker for this profile. |
| // Should be used only on the file thread. |
| scoped_refptr<webkit_database::DatabaseTracker> db_tracker_; |
| |
| // WebKitContext, lazily initialized by GetWebKitContext(). |
| scoped_refptr<WebKitContext> webkit_context_; |
| |
| scoped_refptr<HostContentSettingsMap> host_content_settings_map_; |
| scoped_refptr<GeolocationContentSettingsMap> |
| geolocation_content_settings_map_; |
| scoped_refptr<GeolocationPermissionContext> geolocation_permission_context_; |
| scoped_ptr<DesktopNotificationService> desktop_notification_service_; |
| |
| // Find bar state. Created lazily by GetFindBarState(). |
| scoped_ptr<FindBarState> find_bar_state_; |
| |
| FilePath last_selected_directory_; |
| scoped_refptr<history::TopSites> top_sites_; // For history and thumbnails. |
| |
| // The Extension Preferences. Only created if CreateExtensionService is |
| // invoked. |
| scoped_ptr<ExtensionPrefs> extension_prefs_; |
| |
| // For properly notifying the ExtensionService when the profile |
| // is disposed. |
| scoped_refptr<ExtensionService> extensions_service_; |
| |
| scoped_ptr<ExtensionPrefValueMap> extension_pref_value_map_; |
| |
| scoped_refptr<ExtensionSpecialStoragePolicy> |
| extension_special_storage_policy_; |
| |
| // The proxy prefs tracker. |
| scoped_refptr<PrefProxyConfigTracker> pref_proxy_config_tracker_; |
| |
| // We use a temporary directory to store testing profile data. |
| ScopedTempDir temp_dir_; |
| |
| scoped_ptr<ChromeURLDataManager> chrome_url_data_manager_; |
| |
| scoped_refptr<prerender::PrerenderManager> prerender_manager_; |
| }; |
| |
| // A profile that derives from another profile. This does not actually |
| // override anything except the GetRuntimeId() in order to test sharing of |
| // site information. |
| class DerivedTestingProfile : public TestingProfile { |
| public: |
| explicit DerivedTestingProfile(Profile* profile); |
| virtual ~DerivedTestingProfile(); |
| |
| virtual ProfileId GetRuntimeId(); |
| |
| protected: |
| Profile* original_profile_; |
| }; |
| |
| #endif // CHROME_TEST_TESTING_PROFILE_H_ |