// 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/scoped_temp_dir.h" #include "base/timer.h" #include "chrome/browser/profiles/profile.h" #include "content/browser/appcache/chrome_appcache_service.h" namespace content { class ResourceContextGetter; } namespace history { class TopSites; } namespace net { class CookieMonster; } namespace quota { class SpecialStoragePolicy; } class AutocompleteClassifier; class BookmarkModel; class CommandLine; class ExtensionPrefs; class ExtensionPrefStore; class ExtensionPrefValueMap; class ExtensionSpecialStoragePolicy; class FaviconService; class FindBarState; class GeolocationContentSettingsMap; class GeolocationPermissionContext; class HistoryService; class HostContentSettingsMap; class PrefService; class ProfileDependencyManager; class ProfileSyncService; class TemplateURLService; class TestingPrefService; class ThemeService; class WebKitContext; namespace net { class URLRequestContextGetter; } 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 TemplateURLService. If not invoked the TemplateURLService is // NULL. Creates a TemplateURLFetcher. If not invoked, the // TemplateURLFetcher is NULL. void CreateTemplateURLFetcher(); // Creates a TemplateURLService. If not invoked, the TemplateURLService is // NULL. void CreateTemplateURLService(); // 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, bool autoupdate_enabled); TestingPrefService* GetTestingPrefService(); virtual TestingProfile* AsTestingProfile(); virtual std::string GetProfileName(); virtual FilePath GetPath(); 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(); void SetAppCacheService(ChromeAppCacheService* appcache_service); 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(); void SetExtensionSpecialStoragePolicy( ExtensionSpecialStoragePolicy* extension_special_storage_policy); virtual ExtensionSpecialStoragePolicy* GetExtensionSpecialStoragePolicy(); virtual SSLHostState* GetSSLHostState(); virtual net::TransportSecurityState* GetTransportSecurityState(); virtual FaviconService* GetFaviconService(ServiceAccessType access); virtual HistoryService* GetHistoryService(ServiceAccessType access); virtual HistoryService* GetHistoryServiceWithoutCreating(); // 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 TemplateURLFetcher* GetTemplateURLFetcher(); virtual history::TopSites* GetTopSites(); virtual history::TopSites* GetTopSitesWithoutCreating(); virtual DownloadManager* GetDownloadManager(); virtual PersonalDataManager* GetPersonalDataManager(); virtual fileapi::FileSystemContext* GetFileSystemContext(); virtual quota::QuotaManager* GetQuotaManager(); 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 net::URLRequestContextGetter* GetRequestContext(); virtual net::URLRequestContextGetter* GetRequestContextForRenderProcess( int renderer_child_id); void CreateRequestContext(); // Clears out the created request context (which must be done before shutting // down the IO thread to avoid leaks). void ResetRequestContext(); virtual net::URLRequestContextGetter* GetRequestContextForMedia(); virtual net::URLRequestContextGetter* GetRequestContextForExtensions(); virtual net::URLRequestContextGetter* GetRequestContextForIsolatedApp( const std::string& app_id); virtual const content::ResourceContext& GetResourceContext(); virtual net::SSLConfigService* GetSSLConfigService(); virtual UserStyleSheetWatcher* GetUserStyleSheetWatcher(); virtual FindBarState* GetFindBarState(); virtual HostContentSettingsMap* GetHostContentSettingsMap(); virtual GeolocationContentSettingsMap* GetGeolocationContentSettingsMap(); virtual GeolocationPermissionContext* GetGeolocationPermissionContext(); virtual HostZoomMap* GetHostZoomMap(); 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 ProtocolHandlerRegistry* GetProtocolHandlerRegistry(); virtual SpellCheckHost* GetSpellCheckHost(); virtual void ReinitializeSpellCheckHost(bool force) { } virtual WebKitContext* GetWebKitContext(); virtual WebKitContext* GetOffTheRecordWebKitContext(); virtual void MarkAsCleanShutdown() {} virtual void InitExtensions(bool extensions_enabled) {} virtual void InitPromoResources() {} virtual void InitRegisteredProtocolHandlers() {} 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 ChromeURLDataManager* GetChromeURLDataManager(); virtual prerender::PrerenderManager* GetPrerenderManager(); virtual PrefService* GetOffTheRecordPrefs(); // TODO(jam): remove me once webkit_context_unittest.cc doesn't use Profile // and gets the quota::SpecialStoragePolicy* from whatever ends up replacing // it in the content module. quota::SpecialStoragePolicy* GetSpecialStoragePolicy(); protected: base::Time start_time_; scoped_ptr 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 favicon_service_; // The history service. Only created if CreateHistoryService is invoked. scoped_refptr history_service_; // The BookmarkModel. Only created if CreateBookmarkModel is invoked. scoped_ptr bookmark_bar_model_; // The ProtocolHandlerRegistry. Only created if CreateProtocolHandlerRegistry // is invoked. scoped_refptr protocol_handler_registry_; // The TokenService. Created by CreateTokenService. Filled with dummy data. scoped_ptr token_service_; // The ProfileSyncService. Created by CreateProfileSyncService. scoped_ptr profile_sync_service_; // The AutocompleteClassifier. Only created if CreateAutocompleteClassifier // is invoked. scoped_ptr autocomplete_classifier_; // The WebDataService. Only created if CreateWebDataService is invoked. scoped_refptr web_data_service_; // The TemplateURLFetcher. Only created if CreateTemplateURLFetcher is // invoked. scoped_ptr template_url_fetcher_; // Internally, this is a TestURLRequestContextGetter that creates a dummy // request context. Currently, only the CookieMonster is hooked up. scoped_refptr request_context_; scoped_refptr extensions_request_context_; std::wstring id_; bool incognito_; scoped_ptr incognito_profile_; // Did the last session exit cleanly? Default is true. bool last_session_exited_cleanly_; // FileSystemContext. Created lazily by GetFileSystemContext(). scoped_refptr file_system_context_; // WebKitContext, lazily initialized by GetWebKitContext(). scoped_refptr webkit_context_; // The main database tracker for this profile. // Should be used only on the file thread. scoped_refptr db_tracker_; scoped_refptr host_content_settings_map_; scoped_refptr geolocation_content_settings_map_; scoped_refptr geolocation_permission_context_; // Find bar state. Created lazily by GetFindBarState(). scoped_ptr find_bar_state_; FilePath last_selected_directory_; scoped_refptr top_sites_; // For history and thumbnails. // The Extension Preferences. Only created if CreateExtensionService is // invoked. scoped_ptr extension_prefs_; scoped_ptr extension_service_; scoped_ptr extension_pref_value_map_; scoped_refptr extension_special_storage_policy_; // The proxy prefs tracker. scoped_refptr pref_proxy_config_tracker_; // We use a temporary directory to store testing profile data. ScopedTempDir temp_dir_; scoped_ptr chrome_url_data_manager_; scoped_ptr prerender_manager_; // We keep a weak pointer to the dependency manager we want to notify on our // death. Defaults to the Singleton implementation but overridable for // testing. ProfileDependencyManager* profile_dependency_manager_; scoped_refptr appcache_service_; }; #endif // CHROME_TEST_TESTING_PROFILE_H_