diff options
author | ben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-12-02 21:18:33 +0000 |
---|---|---|
committer | ben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-12-02 21:18:33 +0000 |
commit | 8ecad5ed4a616e8c5023561c224e81e09a37d79a (patch) | |
tree | 86f596a20c73edf5a39eb0a4e589fe654c15ba2c /chrome/browser/profiles/profile.h | |
parent | 96ccc7ec1f107b74a697ced6d08c4150efb5c297 (diff) | |
download | chromium_src-8ecad5ed4a616e8c5023561c224e81e09a37d79a.zip chromium_src-8ecad5ed4a616e8c5023561c224e81e09a37d79a.tar.gz chromium_src-8ecad5ed4a616e8c5023561c224e81e09a37d79a.tar.bz2 |
Move:
file_path_watcher into subdir
profile* into profiles/ subdir
login* into ui/login
visitedlink* into subdir
BUG=none
TEST=none
TBR=brettw
Review URL: http://codereview.chromium.org/5606002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@68069 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/profiles/profile.h')
-rw-r--r-- | chrome/browser/profiles/profile.h | 549 |
1 files changed, 549 insertions, 0 deletions
diff --git a/chrome/browser/profiles/profile.h b/chrome/browser/profiles/profile.h new file mode 100644 index 0000000..b563010 --- /dev/null +++ b/chrome/browser/profiles/profile.h @@ -0,0 +1,549 @@ +// 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_PROFILES_PROFILE_H_ +#define CHROME_BROWSER_PROFILES_PROFILE_H_ +#pragma once + +#include "base/basictypes.h" +#include "base/logging.h" + +namespace base { +class Time; +} + +#if defined(OS_CHROMEOS) +namespace chromeos { +class EnterpriseExtensionObserver; +class ProxyConfigServiceImpl; +} +#endif + +namespace history { +class TopSites; +} + +namespace net { +class TransportSecurityState; +class SSLConfigService; +} + +namespace policy { +class ProfilePolicyContext; +} + +namespace webkit_database { +class DatabaseTracker; +} + +class AutocompleteClassifier; +class BackgroundContentsService; +class BackgroundModeManager; +class BookmarkModel; +class BrowserSignin; +class BrowserThemeProvider; +class ChromeAppCacheService; +class ChromeBlobStorageContext; +class ChromeURLRequestContextGetter; +class CloudPrintProxyService; +class DesktopNotificationService; +class DownloadManager; +class Extension; +class ExtensionDevToolsManager; +class ExtensionEventRouter; +class ExtensionMessageService; +class ExtensionProcessManager; +class ExtensionsService; +class FaviconService; +class FilePath; +class BrowserFileSystemContext; +class FindBarState; +class GeolocationContentSettingsMap; +class GeolocationPermissionContext; +class HistoryService; +class HostContentSettingsMap; +class HostZoomMap; +class NavigationController; +class NTPResourceCache; +class PasswordStore; +class PersonalDataManager; +class PinnedTabService; +class PrefService; +class ExtensionInfoMap; +class PrefProxyConfigTracker; +class PromoCounter; +class ProfileSyncService; +class ProfileSyncFactory; +class SessionService; +class SpellCheckHost; +class SSLConfigServiceManager; +class SSLHostState; +class StatusTray; +class TransportSecurityPersister; +class SQLitePersistentCookieStore; +class TabRestoreService; +class TemplateURLFetcher; +class TemplateURLModel; +class ThemeProvider; +class TokenService; +class URLRequestContextGetter; +class UserScriptMaster; +class UserStyleSheetWatcher; +class VisitedLinkMaster; +class VisitedLinkEventListener; +class WebDataService; +class WebKitContext; +class WebResourceService; + +typedef intptr_t ProfileId; + +class Profile { + public: + // Profile services are accessed with the following parameter. This parameter + // defines what the caller plans to do with the service. + // The caller is responsible for not performing any operation that would + // result in persistent implicit records while using an OffTheRecord profile. + // This flag allows the profile to perform an additional check. + // + // It also gives us an opportunity to perform further checks in the future. We + // could, for example, return an history service that only allow some specific + // methods. + enum ServiceAccessType { + // The caller plans to perform a read or write that takes place as a result + // of the user input. Use this flag when the operation you are doing can be + // performed while off the record. (ex: creating a bookmark) + // + // Since EXPLICIT_ACCESS means "as a result of a user action", this request + // always succeeds. + EXPLICIT_ACCESS, + + // The caller plans to call a method that will permanently change some data + // in the profile, as part of Chrome's implicit data logging. Use this flag + // when you are about to perform an operation which is incompatible with the + // off the record mode. + IMPLICIT_ACCESS + }; + + // Value that represents no profile Id. + static const ProfileId InvalidProfileId; + + Profile() : restored_last_session_(false), accessibility_pause_level_(0) {} + virtual ~Profile() {} + + // Profile prefs are registered as soon as the prefs are loaded for the first + // time. + static void RegisterUserPrefs(PrefService* prefs); + + // Create a new profile given a path. + static Profile* CreateProfile(const FilePath& path); + + // Returns the request context for the "default" profile. This may be called + // from any thread. This CAN return NULL if a first request context has not + // yet been created. If necessary, listen on the UI thread for + // NOTIFY_DEFAULT_REQUEST_CONTEXT_AVAILABLE. + static URLRequestContextGetter* GetDefaultRequestContext(); + + // Returns a unique Id that can be used to identify this profile at runtime. + // This Id is not persistent and will not survive a restart of the browser. + virtual ProfileId GetRuntimeId() = 0; + + // Returns the path of the directory where this profile's data is stored. + virtual FilePath GetPath() = 0; + + // Return whether this profile is off the record. Default is false. + virtual bool IsOffTheRecord() = 0; + + // Return the off the record version of this profile. The returned pointer + // is owned by the receiving profile. If the receiving profile is off the + // record, the same profile is returned. + virtual Profile* GetOffTheRecordProfile() = 0; + + // Destroys the off the record profile. + virtual void DestroyOffTheRecordProfile() = 0; + + // True if an off the record profile exists. + virtual bool HasOffTheRecordProfile() = 0; + + // Return the original "recording" profile. This method returns this if the + // profile is not off the record. + virtual Profile* GetOriginalProfile() = 0; + + // Returns a pointer to the ChromeAppCacheService instance for this profile. + virtual ChromeAppCacheService* GetAppCacheService() = 0; + + // Returns a pointer to the DatabaseTracker instance for this profile. + virtual webkit_database::DatabaseTracker* GetDatabaseTracker() = 0; + + // Returns a pointer to the TopSites (thumbnail manager) instance + // for this profile. + virtual history::TopSites* GetTopSites() = 0; + + // Variant of GetTopSites that doesn't force creation. + virtual history::TopSites* GetTopSitesWithoutCreating() = 0; + + // Retrieves a pointer to the VisitedLinkMaster associated with this + // profile. The VisitedLinkMaster is lazily created the first time + // that this method is called. + virtual VisitedLinkMaster* GetVisitedLinkMaster() = 0; + + // Retrieves a pointer to the ExtensionsService associated with this + // profile. The ExtensionsService is created at startup. + virtual ExtensionsService* GetExtensionsService() = 0; + + // Retrieves a pointer to the UserScriptMaster associated with this + // profile. The UserScriptMaster is lazily created the first time + // that this method is called. + virtual UserScriptMaster* GetUserScriptMaster() = 0; + + // Retrieves a pointer to the ExtensionDevToolsManager associated with this + // profile. The instance is created at startup. + virtual ExtensionDevToolsManager* GetExtensionDevToolsManager() = 0; + + // Retrieves a pointer to the ExtensionProcessManager associated with this + // profile. The instance is created at startup. + virtual ExtensionProcessManager* GetExtensionProcessManager() = 0; + + // Retrieves a pointer to the ExtensionMessageService associated with this + // profile. The instance is created at startup. + virtual ExtensionMessageService* GetExtensionMessageService() = 0; + + // Accessor. The instance is created at startup. + virtual ExtensionEventRouter* GetExtensionEventRouter() = 0; + + // Retrieves a pointer to the SSLHostState associated with this profile. + // The SSLHostState is lazily created the first time that this method is + // called. + virtual SSLHostState* GetSSLHostState() = 0; + + // Retrieves a pointer to the TransportSecurityState associated with + // this profile. The TransportSecurityState is lazily created the + // first time that this method is called. + virtual net::TransportSecurityState* + GetTransportSecurityState() = 0; + + // Retrieves a pointer to the FaviconService associated with this + // profile. The FaviconService is lazily created the first time + // that this method is called. + // + // Although FaviconService is refcounted, this will not addref, and callers + // do not need to do any reference counting as long as they keep the pointer + // only for the local scope (which they should do anyway since the browser + // process may decide to shut down). + // + // |access| defines what the caller plans to do with the service. See + // the ServiceAccessType definition above. + virtual FaviconService* GetFaviconService(ServiceAccessType access) = 0; + + // Retrieves a pointer to the HistoryService associated with this + // profile. The HistoryService is lazily created the first time + // that this method is called. + // + // Although HistoryService is refcounted, this will not addref, and callers + // do not need to do any reference counting as long as they keep the pointer + // only for the local scope (which they should do anyway since the browser + // process may decide to shut down). + // + // |access| defines what the caller plans to do with the service. See + // the ServiceAccessType definition above. + virtual HistoryService* GetHistoryService(ServiceAccessType access) = 0; + + // Similar to GetHistoryService(), but won't create the history service if it + // doesn't already exist. + virtual HistoryService* GetHistoryServiceWithoutCreating() = 0; + + // Retrieves a pointer to the AutocompleteClassifier associated with this + // profile. The AutocompleteClassifier is lazily created the first time that + // this method is called. + virtual AutocompleteClassifier* GetAutocompleteClassifier() = 0; + + // Returns the WebDataService for this profile. This is owned by + // the Profile. Callers that outlive the life of this profile need to be + // sure they refcount the returned value. + // + // |access| defines what the caller plans to do with the service. See + // the ServiceAccessType definition above. + virtual WebDataService* GetWebDataService(ServiceAccessType access) = 0; + + // Similar to GetWebDataService(), but won't create the web data service if it + // doesn't already exist. + virtual WebDataService* GetWebDataServiceWithoutCreating() = 0; + + // Returns the PasswordStore for this profile. This is owned by the Profile. + virtual PasswordStore* GetPasswordStore(ServiceAccessType access) = 0; + + // Retrieves a pointer to the PrefService that manages the preferences + // for this user profile. The PrefService is lazily created the first + // time that this method is called. + virtual PrefService* GetPrefs() = 0; + + // Returns the TemplateURLModel for this profile. This is owned by the + // the Profile. + virtual TemplateURLModel* GetTemplateURLModel() = 0; + + // Returns the TemplateURLFetcher for this profile. This is owned by the + // profile. + virtual TemplateURLFetcher* GetTemplateURLFetcher() = 0; + + // Returns the DownloadManager associated with this profile. + virtual DownloadManager* GetDownloadManager() = 0; + virtual bool HasCreatedDownloadManager() const = 0; + + // Returns the PersonalDataManager associated with this profile. + virtual PersonalDataManager* GetPersonalDataManager() = 0; + + // Returns the FileSystemContext associated to this profile. The context + // is lazily created the first time this method is called. This is owned + // by the profile. + virtual BrowserFileSystemContext* GetFileSystemContext() = 0; + + // Returns the BrowserSignin object assigned to this profile. + virtual BrowserSignin* GetBrowserSignin() = 0; + + // Init our themes system. + virtual void InitThemes() = 0; + + // Set the theme to the specified extension. + virtual void SetTheme(const Extension* extension) = 0; + + // Set the theme to the machine's native theme. + virtual void SetNativeTheme() = 0; + + // Clear the theme and reset it to default. + virtual void ClearTheme() = 0; + + // Gets the theme that was last set. Returns NULL if the theme is no longer + // installed, if there is no installed theme, or the theme was cleared. + virtual const Extension* GetTheme() = 0; + + // Returns or creates the ThemeProvider associated with this profile + virtual BrowserThemeProvider* GetThemeProvider() = 0; + + // Returns the request context information associated with this profile. Call + // this only on the UI thread, since it can send notifications that should + // happen on the UI thread. + virtual URLRequestContextGetter* GetRequestContext() = 0; + + // Returns the request context for media resources asociated with this + // profile. + virtual URLRequestContextGetter* GetRequestContextForMedia() = 0; + + // Returns the request context used for extension-related requests. This + // is only used for a separate cookie store currently. + virtual URLRequestContextGetter* GetRequestContextForExtensions() = 0; + + // Called by the ExtensionsService that lives in this profile. Gives the + // profile a chance to react to the load event before the EXTENSION_LOADED + // notification has fired. The purpose for handling this event first is to + // avoid race conditions by making sure URLRequestContexts learn about new + // extensions before anything else needs them to know. + virtual void RegisterExtensionWithRequestContexts( + const Extension* extension) {} + + // Called by the ExtensionsService that lives in this profile. Lets the + // profile clean up its RequestContexts once all the listeners to the + // EXTENSION_UNLOADED notification have finished running. + virtual void UnregisterExtensionWithRequestContexts( + const Extension* extension) {} + + // Returns the SSLConfigService for this profile. + virtual net::SSLConfigService* GetSSLConfigService() = 0; + + // Returns the Hostname <-> Content settings map for this profile. + virtual HostContentSettingsMap* GetHostContentSettingsMap() = 0; + + // Returns the Hostname <-> Zoom Level map for this profile. + virtual HostZoomMap* GetHostZoomMap() = 0; + + // Returns the geolocation settings map for this profile. + virtual GeolocationContentSettingsMap* GetGeolocationContentSettingsMap() = 0; + + // Returns the geolocation permission context for this profile. + virtual GeolocationPermissionContext* GetGeolocationPermissionContext() = 0; + + // Returns the user style sheet watcher. + virtual UserStyleSheetWatcher* GetUserStyleSheetWatcher() = 0; + + // Returns the find bar state for this profile. The find bar state is lazily + // created the first time that this method is called. + virtual FindBarState* GetFindBarState() = 0; + + // Returns the session service for this profile. This may return NULL. If + // this profile supports a session service (it isn't off the record), and + // the session service hasn't yet been created, this forces creation of + // the session service. + // + // This returns NULL in two situations: the profile is off the record, or the + // session service has been explicitly shutdown (browser is exiting). Callers + // should always check the return value for NULL. + virtual SessionService* GetSessionService() = 0; + + // If this profile has a session service, it is shut down. To properly record + // the current state this forces creation of the session service, then shuts + // it down. + virtual void ShutdownSessionService() = 0; + + // Returns true if this profile has a session service. + virtual bool HasSessionService() const = 0; + + // Returns true if this profile has a profile sync service. + virtual bool HasProfileSyncService() const = 0; + + // Returns true if the last time this profile was open it was exited cleanly. + virtual bool DidLastSessionExitCleanly() = 0; + + // Returns the BookmarkModel, creating if not yet created. + virtual BookmarkModel* GetBookmarkModel() = 0; + + // Returns the Gaia Token Service, creating if not yet created. + virtual TokenService* GetTokenService() = 0; + + // Returns the ProfileSyncService, creating if not yet created. + virtual ProfileSyncService* GetProfileSyncService() = 0; + + // Returns the ProfileSyncService, creating if not yet created, with + // the specified CrOS username. + virtual ProfileSyncService* GetProfileSyncService( + const std::string& cros_user) = 0; + + // Returns the CloudPrintProxyService, creating if not yet created. + virtual CloudPrintProxyService* GetCloudPrintProxyService() = 0; + + // Return whether 2 profiles are the same. 2 profiles are the same if they + // represent the same profile. This can happen if there is pointer equality + // or if one profile is the off the record version of another profile (or vice + // versa). + virtual bool IsSameProfile(Profile* profile) = 0; + + // Returns the time the profile was started. This is not the time the profile + // was created, rather it is the time the user started chrome and logged into + // this profile. For the single profile case, this corresponds to the time + // the user started chrome. + virtual base::Time GetStartTime() const = 0; + + // Returns the TabRestoreService. This returns NULL when off the record. + virtual TabRestoreService* GetTabRestoreService() = 0; + + virtual void ResetTabRestoreService() = 0; + + // May return NULL. + virtual SpellCheckHost* GetSpellCheckHost() = 0; + + // If |force| is false, and the spellchecker is already initialized (or is in + // the process of initializing), then do nothing. Otherwise clobber the + // current spellchecker and replace it with a new one. + virtual void ReinitializeSpellCheckHost(bool force) = 0; + + // Returns the WebKitContext assigned to this profile. + virtual WebKitContext* GetWebKitContext() = 0; + + // Returns the provider of desktop notifications for this profile. + virtual DesktopNotificationService* GetDesktopNotificationService() = 0; + + // Returns the service that manages BackgroundContents for this profile. + virtual BackgroundContentsService* GetBackgroundContentsService() const = 0; + + // Returns the StatusTray, which provides an API for displaying status icons + // in the system status tray. Returns NULL if status icons are not supported + // on this platform (or this is a unit test). + virtual StatusTray* GetStatusTray() = 0; + + // Marks the profile as cleanly shutdown. + // + // NOTE: this is invoked internally on a normal shutdown, but is public so + // that it can be invoked when the user logs out/powers down (WM_ENDSESSION). + virtual void MarkAsCleanShutdown() = 0; + + virtual void InitExtensions() = 0; + + // Start up service that gathers data from a web resource feed. + virtual void InitWebResources() = 0; + + // Returns the new tab page resource cache. + virtual NTPResourceCache* GetNTPResourceCache() = 0; + + // Returns the last directory that was chosen for uploading or opening a file. + virtual FilePath last_selected_directory() = 0; + virtual void set_last_selected_directory(const FilePath& path) = 0; + + // Returns a pointer to the ChromeBlobStorageContext instance for this + // profile. + virtual ChromeBlobStorageContext* GetBlobStorageContext() = 0; + + // Returns the IO-thread-accessible profile data for this profile. + virtual ExtensionInfoMap* GetExtensionInfoMap() = 0; + + // Returns the PromoCounter for Instant, or NULL if not applicable. + virtual PromoCounter* GetInstantPromoCounter() = 0; + + // Gets the policy context associated with this profile. + virtual policy::ProfilePolicyContext* GetPolicyContext() = 0; + +#if defined(OS_CHROMEOS) + // Returns ChromeOS's ProxyConfigServiceImpl, creating if not yet created. + virtual chromeos::ProxyConfigServiceImpl* + GetChromeOSProxyConfigServiceImpl() = 0; + + // Creates ChromeOS's EnterpriseExtensionListener. + virtual void SetupChromeOSEnterpriseExtensionObserver() = 0; + +#endif // defined(OS_CHROMEOS) + + // Returns the helper object that provides the proxy configuration service + // access to the the proxy configuration possibly defined by preferences. + virtual PrefProxyConfigTracker* GetProxyConfigTracker() = 0; + +#ifdef UNIT_TEST + // Use with caution. GetDefaultRequestContext may be called on any thread! + static void set_default_request_context(URLRequestContextGetter* c) { + default_request_context_ = c; + } +#endif + + // Did the user restore the last session? This is set by SessionRestore. + void set_restored_last_session(bool restored_last_session) { + restored_last_session_ = restored_last_session; + } + bool restored_last_session() const { + return restored_last_session_; + } + + // Stop sending accessibility events until ResumeAccessibilityEvents(). + // Calls to Pause nest; no events will be sent until the number of + // Resume calls matches the number of Pause calls received. + void PauseAccessibilityEvents() { + accessibility_pause_level_++; + } + + void ResumeAccessibilityEvents() { + DCHECK(accessibility_pause_level_ > 0); + accessibility_pause_level_--; + } + + bool ShouldSendAccessibilityEvents() { + return 0 == accessibility_pause_level_; + } + + // Checks whether sync is configurable by the user. Returns false if sync is + // disabled or controlled by configuration management. + bool IsSyncAccessible(); + + // Creates an OffTheRecordProfile which points to this Profile. + Profile* CreateOffTheRecordProfile(); + + protected: + static URLRequestContextGetter* default_request_context_; + + private: + bool restored_last_session_; + + // Accessibility events will only be propagated when the pause + // level is zero. PauseAccessibilityEvents and ResumeAccessibilityEvents + // increment and decrement the level, respectively, rather than set it to + // true or false, so that calls can be nested. + int accessibility_pause_level_; +}; + +#endif // CHROME_BROWSER_PROFILES_PROFILE_H_ |