OLD | NEW |
| (Empty) |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 // This class gathers state related to a single user profile. | |
6 | |
7 #ifndef CHROME_BROWSER_PROFILE_H_ | |
8 #define CHROME_BROWSER_PROFILE_H_ | |
9 #pragma once | |
10 | |
11 #include "base/basictypes.h" | |
12 #include "base/logging.h" | |
13 | |
14 namespace base { | |
15 class Time; | |
16 } | |
17 | |
18 #if defined(OS_CHROMEOS) | |
19 namespace chromeos { | |
20 class EnterpriseExtensionObserver; | |
21 class ProxyConfigServiceImpl; | |
22 } | |
23 #endif | |
24 | |
25 namespace history { | |
26 class TopSites; | |
27 } | |
28 | |
29 namespace net { | |
30 class TransportSecurityState; | |
31 class SSLConfigService; | |
32 } | |
33 | |
34 namespace policy { | |
35 class ProfilePolicyContext; | |
36 } | |
37 | |
38 namespace webkit_database { | |
39 class DatabaseTracker; | |
40 } | |
41 | |
42 class AutocompleteClassifier; | |
43 class BackgroundContentsService; | |
44 class BackgroundModeManager; | |
45 class BookmarkModel; | |
46 class BrowserSignin; | |
47 class BrowserThemeProvider; | |
48 class ChromeAppCacheService; | |
49 class ChromeBlobStorageContext; | |
50 class ChromeURLRequestContextGetter; | |
51 class CloudPrintProxyService; | |
52 class DesktopNotificationService; | |
53 class DownloadManager; | |
54 class Extension; | |
55 class ExtensionDevToolsManager; | |
56 class ExtensionEventRouter; | |
57 class ExtensionMessageService; | |
58 class ExtensionProcessManager; | |
59 class ExtensionsService; | |
60 class FaviconService; | |
61 class FilePath; | |
62 class BrowserFileSystemContext; | |
63 class FindBarState; | |
64 class GeolocationContentSettingsMap; | |
65 class GeolocationPermissionContext; | |
66 class HistoryService; | |
67 class HostContentSettingsMap; | |
68 class HostZoomMap; | |
69 class NavigationController; | |
70 class NTPResourceCache; | |
71 class PasswordStore; | |
72 class PersonalDataManager; | |
73 class PinnedTabService; | |
74 class PrefService; | |
75 class ExtensionInfoMap; | |
76 class PrefProxyConfigTracker; | |
77 class PromoCounter; | |
78 class ProfileSyncService; | |
79 class ProfileSyncFactory; | |
80 class SessionService; | |
81 class SpellCheckHost; | |
82 class SSLConfigServiceManager; | |
83 class SSLHostState; | |
84 class StatusTray; | |
85 class TransportSecurityPersister; | |
86 class SQLitePersistentCookieStore; | |
87 class TabRestoreService; | |
88 class TemplateURLFetcher; | |
89 class TemplateURLModel; | |
90 class ThemeProvider; | |
91 class TokenService; | |
92 class URLRequestContextGetter; | |
93 class UserScriptMaster; | |
94 class UserStyleSheetWatcher; | |
95 class VisitedLinkMaster; | |
96 class VisitedLinkEventListener; | |
97 class WebDataService; | |
98 class WebKitContext; | |
99 class WebResourceService; | |
100 | |
101 typedef intptr_t ProfileId; | |
102 | |
103 class Profile { | |
104 public: | |
105 // Profile services are accessed with the following parameter. This parameter | |
106 // defines what the caller plans to do with the service. | |
107 // The caller is responsible for not performing any operation that would | |
108 // result in persistent implicit records while using an OffTheRecord profile. | |
109 // This flag allows the profile to perform an additional check. | |
110 // | |
111 // It also gives us an opportunity to perform further checks in the future. We | |
112 // could, for example, return an history service that only allow some specific | |
113 // methods. | |
114 enum ServiceAccessType { | |
115 // The caller plans to perform a read or write that takes place as a result | |
116 // of the user input. Use this flag when the operation you are doing can be | |
117 // performed while off the record. (ex: creating a bookmark) | |
118 // | |
119 // Since EXPLICIT_ACCESS means "as a result of a user action", this request | |
120 // always succeeds. | |
121 EXPLICIT_ACCESS, | |
122 | |
123 // The caller plans to call a method that will permanently change some data | |
124 // in the profile, as part of Chrome's implicit data logging. Use this flag | |
125 // when you are about to perform an operation which is incompatible with the | |
126 // off the record mode. | |
127 IMPLICIT_ACCESS | |
128 }; | |
129 | |
130 // Value that represents no profile Id. | |
131 static const ProfileId InvalidProfileId; | |
132 | |
133 Profile() : restored_last_session_(false), accessibility_pause_level_(0) {} | |
134 virtual ~Profile() {} | |
135 | |
136 // Profile prefs are registered as soon as the prefs are loaded for the first | |
137 // time. | |
138 static void RegisterUserPrefs(PrefService* prefs); | |
139 | |
140 // Create a new profile given a path. | |
141 static Profile* CreateProfile(const FilePath& path); | |
142 | |
143 // Returns the request context for the "default" profile. This may be called | |
144 // from any thread. This CAN return NULL if a first request context has not | |
145 // yet been created. If necessary, listen on the UI thread for | |
146 // NOTIFY_DEFAULT_REQUEST_CONTEXT_AVAILABLE. | |
147 static URLRequestContextGetter* GetDefaultRequestContext(); | |
148 | |
149 // Returns a unique Id that can be used to identify this profile at runtime. | |
150 // This Id is not persistent and will not survive a restart of the browser. | |
151 virtual ProfileId GetRuntimeId() = 0; | |
152 | |
153 // Returns the path of the directory where this profile's data is stored. | |
154 virtual FilePath GetPath() = 0; | |
155 | |
156 // Return whether this profile is off the record. Default is false. | |
157 virtual bool IsOffTheRecord() = 0; | |
158 | |
159 // Return the off the record version of this profile. The returned pointer | |
160 // is owned by the receiving profile. If the receiving profile is off the | |
161 // record, the same profile is returned. | |
162 virtual Profile* GetOffTheRecordProfile() = 0; | |
163 | |
164 // Destroys the off the record profile. | |
165 virtual void DestroyOffTheRecordProfile() = 0; | |
166 | |
167 // True if an off the record profile exists. | |
168 virtual bool HasOffTheRecordProfile() = 0; | |
169 | |
170 // Return the original "recording" profile. This method returns this if the | |
171 // profile is not off the record. | |
172 virtual Profile* GetOriginalProfile() = 0; | |
173 | |
174 // Returns a pointer to the ChromeAppCacheService instance for this profile. | |
175 virtual ChromeAppCacheService* GetAppCacheService() = 0; | |
176 | |
177 // Returns a pointer to the DatabaseTracker instance for this profile. | |
178 virtual webkit_database::DatabaseTracker* GetDatabaseTracker() = 0; | |
179 | |
180 // Returns a pointer to the TopSites (thumbnail manager) instance | |
181 // for this profile. | |
182 virtual history::TopSites* GetTopSites() = 0; | |
183 | |
184 // Variant of GetTopSites that doesn't force creation. | |
185 virtual history::TopSites* GetTopSitesWithoutCreating() = 0; | |
186 | |
187 // Retrieves a pointer to the VisitedLinkMaster associated with this | |
188 // profile. The VisitedLinkMaster is lazily created the first time | |
189 // that this method is called. | |
190 virtual VisitedLinkMaster* GetVisitedLinkMaster() = 0; | |
191 | |
192 // Retrieves a pointer to the ExtensionsService associated with this | |
193 // profile. The ExtensionsService is created at startup. | |
194 virtual ExtensionsService* GetExtensionsService() = 0; | |
195 | |
196 // Retrieves a pointer to the UserScriptMaster associated with this | |
197 // profile. The UserScriptMaster is lazily created the first time | |
198 // that this method is called. | |
199 virtual UserScriptMaster* GetUserScriptMaster() = 0; | |
200 | |
201 // Retrieves a pointer to the ExtensionDevToolsManager associated with this | |
202 // profile. The instance is created at startup. | |
203 virtual ExtensionDevToolsManager* GetExtensionDevToolsManager() = 0; | |
204 | |
205 // Retrieves a pointer to the ExtensionProcessManager associated with this | |
206 // profile. The instance is created at startup. | |
207 virtual ExtensionProcessManager* GetExtensionProcessManager() = 0; | |
208 | |
209 // Retrieves a pointer to the ExtensionMessageService associated with this | |
210 // profile. The instance is created at startup. | |
211 virtual ExtensionMessageService* GetExtensionMessageService() = 0; | |
212 | |
213 // Accessor. The instance is created at startup. | |
214 virtual ExtensionEventRouter* GetExtensionEventRouter() = 0; | |
215 | |
216 // Retrieves a pointer to the SSLHostState associated with this profile. | |
217 // The SSLHostState is lazily created the first time that this method is | |
218 // called. | |
219 virtual SSLHostState* GetSSLHostState() = 0; | |
220 | |
221 // Retrieves a pointer to the TransportSecurityState associated with | |
222 // this profile. The TransportSecurityState is lazily created the | |
223 // first time that this method is called. | |
224 virtual net::TransportSecurityState* | |
225 GetTransportSecurityState() = 0; | |
226 | |
227 // Retrieves a pointer to the FaviconService associated with this | |
228 // profile. The FaviconService is lazily created the first time | |
229 // that this method is called. | |
230 // | |
231 // Although FaviconService is refcounted, this will not addref, and callers | |
232 // do not need to do any reference counting as long as they keep the pointer | |
233 // only for the local scope (which they should do anyway since the browser | |
234 // process may decide to shut down). | |
235 // | |
236 // |access| defines what the caller plans to do with the service. See | |
237 // the ServiceAccessType definition above. | |
238 virtual FaviconService* GetFaviconService(ServiceAccessType access) = 0; | |
239 | |
240 // Retrieves a pointer to the HistoryService associated with this | |
241 // profile. The HistoryService is lazily created the first time | |
242 // that this method is called. | |
243 // | |
244 // Although HistoryService is refcounted, this will not addref, and callers | |
245 // do not need to do any reference counting as long as they keep the pointer | |
246 // only for the local scope (which they should do anyway since the browser | |
247 // process may decide to shut down). | |
248 // | |
249 // |access| defines what the caller plans to do with the service. See | |
250 // the ServiceAccessType definition above. | |
251 virtual HistoryService* GetHistoryService(ServiceAccessType access) = 0; | |
252 | |
253 // Similar to GetHistoryService(), but won't create the history service if it | |
254 // doesn't already exist. | |
255 virtual HistoryService* GetHistoryServiceWithoutCreating() = 0; | |
256 | |
257 // Retrieves a pointer to the AutocompleteClassifier associated with this | |
258 // profile. The AutocompleteClassifier is lazily created the first time that | |
259 // this method is called. | |
260 virtual AutocompleteClassifier* GetAutocompleteClassifier() = 0; | |
261 | |
262 // Returns the WebDataService for this profile. This is owned by | |
263 // the Profile. Callers that outlive the life of this profile need to be | |
264 // sure they refcount the returned value. | |
265 // | |
266 // |access| defines what the caller plans to do with the service. See | |
267 // the ServiceAccessType definition above. | |
268 virtual WebDataService* GetWebDataService(ServiceAccessType access) = 0; | |
269 | |
270 // Similar to GetWebDataService(), but won't create the web data service if it | |
271 // doesn't already exist. | |
272 virtual WebDataService* GetWebDataServiceWithoutCreating() = 0; | |
273 | |
274 // Returns the PasswordStore for this profile. This is owned by the Profile. | |
275 virtual PasswordStore* GetPasswordStore(ServiceAccessType access) = 0; | |
276 | |
277 // Retrieves a pointer to the PrefService that manages the preferences | |
278 // for this user profile. The PrefService is lazily created the first | |
279 // time that this method is called. | |
280 virtual PrefService* GetPrefs() = 0; | |
281 | |
282 // Returns the TemplateURLModel for this profile. This is owned by the | |
283 // the Profile. | |
284 virtual TemplateURLModel* GetTemplateURLModel() = 0; | |
285 | |
286 // Returns the TemplateURLFetcher for this profile. This is owned by the | |
287 // profile. | |
288 virtual TemplateURLFetcher* GetTemplateURLFetcher() = 0; | |
289 | |
290 // Returns the DownloadManager associated with this profile. | |
291 virtual DownloadManager* GetDownloadManager() = 0; | |
292 virtual bool HasCreatedDownloadManager() const = 0; | |
293 | |
294 // Returns the PersonalDataManager associated with this profile. | |
295 virtual PersonalDataManager* GetPersonalDataManager() = 0; | |
296 | |
297 // Returns the FileSystemContext associated to this profile. The context | |
298 // is lazily created the first time this method is called. This is owned | |
299 // by the profile. | |
300 virtual BrowserFileSystemContext* GetFileSystemContext() = 0; | |
301 | |
302 // Returns the BrowserSignin object assigned to this profile. | |
303 virtual BrowserSignin* GetBrowserSignin() = 0; | |
304 | |
305 // Init our themes system. | |
306 virtual void InitThemes() = 0; | |
307 | |
308 // Set the theme to the specified extension. | |
309 virtual void SetTheme(const Extension* extension) = 0; | |
310 | |
311 // Set the theme to the machine's native theme. | |
312 virtual void SetNativeTheme() = 0; | |
313 | |
314 // Clear the theme and reset it to default. | |
315 virtual void ClearTheme() = 0; | |
316 | |
317 // Gets the theme that was last set. Returns NULL if the theme is no longer | |
318 // installed, if there is no installed theme, or the theme was cleared. | |
319 virtual const Extension* GetTheme() = 0; | |
320 | |
321 // Returns or creates the ThemeProvider associated with this profile | |
322 virtual BrowserThemeProvider* GetThemeProvider() = 0; | |
323 | |
324 // Returns the request context information associated with this profile. Call | |
325 // this only on the UI thread, since it can send notifications that should | |
326 // happen on the UI thread. | |
327 virtual URLRequestContextGetter* GetRequestContext() = 0; | |
328 | |
329 // Returns the request context for media resources asociated with this | |
330 // profile. | |
331 virtual URLRequestContextGetter* GetRequestContextForMedia() = 0; | |
332 | |
333 // Returns the request context used for extension-related requests. This | |
334 // is only used for a separate cookie store currently. | |
335 virtual URLRequestContextGetter* GetRequestContextForExtensions() = 0; | |
336 | |
337 // Called by the ExtensionsService that lives in this profile. Gives the | |
338 // profile a chance to react to the load event before the EXTENSION_LOADED | |
339 // notification has fired. The purpose for handling this event first is to | |
340 // avoid race conditions by making sure URLRequestContexts learn about new | |
341 // extensions before anything else needs them to know. | |
342 virtual void RegisterExtensionWithRequestContexts( | |
343 const Extension* extension) {} | |
344 | |
345 // Called by the ExtensionsService that lives in this profile. Lets the | |
346 // profile clean up its RequestContexts once all the listeners to the | |
347 // EXTENSION_UNLOADED notification have finished running. | |
348 virtual void UnregisterExtensionWithRequestContexts( | |
349 const Extension* extension) {} | |
350 | |
351 // Returns the SSLConfigService for this profile. | |
352 virtual net::SSLConfigService* GetSSLConfigService() = 0; | |
353 | |
354 // Returns the Hostname <-> Content settings map for this profile. | |
355 virtual HostContentSettingsMap* GetHostContentSettingsMap() = 0; | |
356 | |
357 // Returns the Hostname <-> Zoom Level map for this profile. | |
358 virtual HostZoomMap* GetHostZoomMap() = 0; | |
359 | |
360 // Returns the geolocation settings map for this profile. | |
361 virtual GeolocationContentSettingsMap* GetGeolocationContentSettingsMap() = 0; | |
362 | |
363 // Returns the geolocation permission context for this profile. | |
364 virtual GeolocationPermissionContext* GetGeolocationPermissionContext() = 0; | |
365 | |
366 // Returns the user style sheet watcher. | |
367 virtual UserStyleSheetWatcher* GetUserStyleSheetWatcher() = 0; | |
368 | |
369 // Returns the find bar state for this profile. The find bar state is lazily | |
370 // created the first time that this method is called. | |
371 virtual FindBarState* GetFindBarState() = 0; | |
372 | |
373 // Returns the session service for this profile. This may return NULL. If | |
374 // this profile supports a session service (it isn't off the record), and | |
375 // the session service hasn't yet been created, this forces creation of | |
376 // the session service. | |
377 // | |
378 // This returns NULL in two situations: the profile is off the record, or the | |
379 // session service has been explicitly shutdown (browser is exiting). Callers | |
380 // should always check the return value for NULL. | |
381 virtual SessionService* GetSessionService() = 0; | |
382 | |
383 // If this profile has a session service, it is shut down. To properly record | |
384 // the current state this forces creation of the session service, then shuts | |
385 // it down. | |
386 virtual void ShutdownSessionService() = 0; | |
387 | |
388 // Returns true if this profile has a session service. | |
389 virtual bool HasSessionService() const = 0; | |
390 | |
391 // Returns true if this profile has a profile sync service. | |
392 virtual bool HasProfileSyncService() const = 0; | |
393 | |
394 // Returns true if the last time this profile was open it was exited cleanly. | |
395 virtual bool DidLastSessionExitCleanly() = 0; | |
396 | |
397 // Returns the BookmarkModel, creating if not yet created. | |
398 virtual BookmarkModel* GetBookmarkModel() = 0; | |
399 | |
400 // Returns the Gaia Token Service, creating if not yet created. | |
401 virtual TokenService* GetTokenService() = 0; | |
402 | |
403 // Returns the ProfileSyncService, creating if not yet created. | |
404 virtual ProfileSyncService* GetProfileSyncService() = 0; | |
405 | |
406 // Returns the ProfileSyncService, creating if not yet created, with | |
407 // the specified CrOS username. | |
408 virtual ProfileSyncService* GetProfileSyncService( | |
409 const std::string& cros_user) = 0; | |
410 | |
411 // Returns the CloudPrintProxyService, creating if not yet created. | |
412 virtual CloudPrintProxyService* GetCloudPrintProxyService() = 0; | |
413 | |
414 // Return whether 2 profiles are the same. 2 profiles are the same if they | |
415 // represent the same profile. This can happen if there is pointer equality | |
416 // or if one profile is the off the record version of another profile (or vice | |
417 // versa). | |
418 virtual bool IsSameProfile(Profile* profile) = 0; | |
419 | |
420 // Returns the time the profile was started. This is not the time the profile | |
421 // was created, rather it is the time the user started chrome and logged into | |
422 // this profile. For the single profile case, this corresponds to the time | |
423 // the user started chrome. | |
424 virtual base::Time GetStartTime() const = 0; | |
425 | |
426 // Returns the TabRestoreService. This returns NULL when off the record. | |
427 virtual TabRestoreService* GetTabRestoreService() = 0; | |
428 | |
429 virtual void ResetTabRestoreService() = 0; | |
430 | |
431 // May return NULL. | |
432 virtual SpellCheckHost* GetSpellCheckHost() = 0; | |
433 | |
434 // If |force| is false, and the spellchecker is already initialized (or is in | |
435 // the process of initializing), then do nothing. Otherwise clobber the | |
436 // current spellchecker and replace it with a new one. | |
437 virtual void ReinitializeSpellCheckHost(bool force) = 0; | |
438 | |
439 // Returns the WebKitContext assigned to this profile. | |
440 virtual WebKitContext* GetWebKitContext() = 0; | |
441 | |
442 // Returns the provider of desktop notifications for this profile. | |
443 virtual DesktopNotificationService* GetDesktopNotificationService() = 0; | |
444 | |
445 // Returns the service that manages BackgroundContents for this profile. | |
446 virtual BackgroundContentsService* GetBackgroundContentsService() const = 0; | |
447 | |
448 // Returns the StatusTray, which provides an API for displaying status icons | |
449 // in the system status tray. Returns NULL if status icons are not supported | |
450 // on this platform (or this is a unit test). | |
451 virtual StatusTray* GetStatusTray() = 0; | |
452 | |
453 // Marks the profile as cleanly shutdown. | |
454 // | |
455 // NOTE: this is invoked internally on a normal shutdown, but is public so | |
456 // that it can be invoked when the user logs out/powers down (WM_ENDSESSION). | |
457 virtual void MarkAsCleanShutdown() = 0; | |
458 | |
459 virtual void InitExtensions() = 0; | |
460 | |
461 // Start up service that gathers data from a web resource feed. | |
462 virtual void InitWebResources() = 0; | |
463 | |
464 // Returns the new tab page resource cache. | |
465 virtual NTPResourceCache* GetNTPResourceCache() = 0; | |
466 | |
467 // Returns the last directory that was chosen for uploading or opening a file. | |
468 virtual FilePath last_selected_directory() = 0; | |
469 virtual void set_last_selected_directory(const FilePath& path) = 0; | |
470 | |
471 // Returns a pointer to the ChromeBlobStorageContext instance for this | |
472 // profile. | |
473 virtual ChromeBlobStorageContext* GetBlobStorageContext() = 0; | |
474 | |
475 // Returns the IO-thread-accessible profile data for this profile. | |
476 virtual ExtensionInfoMap* GetExtensionInfoMap() = 0; | |
477 | |
478 // Returns the PromoCounter for Instant, or NULL if not applicable. | |
479 virtual PromoCounter* GetInstantPromoCounter() = 0; | |
480 | |
481 // Gets the policy context associated with this profile. | |
482 virtual policy::ProfilePolicyContext* GetPolicyContext() = 0; | |
483 | |
484 #if defined(OS_CHROMEOS) | |
485 // Returns ChromeOS's ProxyConfigServiceImpl, creating if not yet created. | |
486 virtual chromeos::ProxyConfigServiceImpl* | |
487 GetChromeOSProxyConfigServiceImpl() = 0; | |
488 | |
489 // Creates ChromeOS's EnterpriseExtensionListener. | |
490 virtual void SetupChromeOSEnterpriseExtensionObserver() = 0; | |
491 | |
492 #endif // defined(OS_CHROMEOS) | |
493 | |
494 // Returns the helper object that provides the proxy configuration service | |
495 // access to the the proxy configuration possibly defined by preferences. | |
496 virtual PrefProxyConfigTracker* GetProxyConfigTracker() = 0; | |
497 | |
498 #ifdef UNIT_TEST | |
499 // Use with caution. GetDefaultRequestContext may be called on any thread! | |
500 static void set_default_request_context(URLRequestContextGetter* c) { | |
501 default_request_context_ = c; | |
502 } | |
503 #endif | |
504 | |
505 // Did the user restore the last session? This is set by SessionRestore. | |
506 void set_restored_last_session(bool restored_last_session) { | |
507 restored_last_session_ = restored_last_session; | |
508 } | |
509 bool restored_last_session() const { | |
510 return restored_last_session_; | |
511 } | |
512 | |
513 // Stop sending accessibility events until ResumeAccessibilityEvents(). | |
514 // Calls to Pause nest; no events will be sent until the number of | |
515 // Resume calls matches the number of Pause calls received. | |
516 void PauseAccessibilityEvents() { | |
517 accessibility_pause_level_++; | |
518 } | |
519 | |
520 void ResumeAccessibilityEvents() { | |
521 DCHECK(accessibility_pause_level_ > 0); | |
522 accessibility_pause_level_--; | |
523 } | |
524 | |
525 bool ShouldSendAccessibilityEvents() { | |
526 return 0 == accessibility_pause_level_; | |
527 } | |
528 | |
529 // Checks whether sync is configurable by the user. Returns false if sync is | |
530 // disabled or controlled by configuration management. | |
531 bool IsSyncAccessible(); | |
532 | |
533 // Creates an OffTheRecordProfile which points to this Profile. | |
534 Profile* CreateOffTheRecordProfile(); | |
535 | |
536 protected: | |
537 static URLRequestContextGetter* default_request_context_; | |
538 | |
539 private: | |
540 bool restored_last_session_; | |
541 | |
542 // Accessibility events will only be propagated when the pause | |
543 // level is zero. PauseAccessibilityEvents and ResumeAccessibilityEvents | |
544 // increment and decrement the level, respectively, rather than set it to | |
545 // true or false, so that calls can be nested. | |
546 int accessibility_pause_level_; | |
547 }; | |
548 | |
549 #endif // CHROME_BROWSER_PROFILE_H_ | |
OLD | NEW |