• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 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_PROFILES_PROFILE_IMPL_H_
8 #define CHROME_BROWSER_PROFILES_PROFILE_IMPL_H_
9 #pragma once
10 
11 #include "base/file_path.h"
12 #include "base/memory/ref_counted.h"
13 #include "base/memory/scoped_ptr.h"
14 #include "base/timer.h"
15 #include "chrome/browser/prefs/pref_change_registrar.h"
16 #include "chrome/browser/profiles/profile.h"
17 #include "chrome/browser/profiles/profile_impl_io_data.h"
18 #include "chrome/browser/spellcheck_host_observer.h"
19 #include "content/common/notification_observer.h"
20 #include "content/common/notification_registrar.h"
21 
22 class ExtensionPrefs;
23 class ExtensionPrefValueMap;
24 class PrefService;
25 
26 #if defined(OS_CHROMEOS)
27 namespace chromeos {
28 class EnterpriseExtensionObserver;
29 class LocaleChangeGuard;
30 class Preferences;
31 }
32 #endif
33 
34 class NetPrefObserver;
35 
36 // The default profile implementation.
37 class ProfileImpl : public Profile,
38                     public SpellCheckHostObserver,
39                     public NotificationObserver,
40                     public PrefService::Delegate {
41  public:
42   virtual ~ProfileImpl();
43 
44   static void RegisterUserPrefs(PrefService* prefs);
45 
46   // Profile implementation.
47   virtual ProfileId GetRuntimeId();
48   virtual FilePath GetPath();
49   virtual bool IsOffTheRecord();
50   virtual Profile* GetOffTheRecordProfile();
51   virtual void DestroyOffTheRecordProfile();
52   virtual bool HasOffTheRecordProfile();
53   virtual Profile* GetOriginalProfile();
54   virtual ChromeAppCacheService* GetAppCacheService();
55   virtual webkit_database::DatabaseTracker* GetDatabaseTracker();
56   virtual history::TopSites* GetTopSites();
57   virtual history::TopSites* GetTopSitesWithoutCreating();
58   virtual VisitedLinkMaster* GetVisitedLinkMaster();
59   virtual UserScriptMaster* GetUserScriptMaster();
60   virtual SSLHostState* GetSSLHostState();
61   virtual net::TransportSecurityState* GetTransportSecurityState();
62   virtual ExtensionService* GetExtensionService();
63   virtual ExtensionDevToolsManager* GetExtensionDevToolsManager();
64   virtual ExtensionProcessManager* GetExtensionProcessManager();
65   virtual ExtensionMessageService* GetExtensionMessageService();
66   virtual ExtensionEventRouter* GetExtensionEventRouter();
67   virtual ExtensionSpecialStoragePolicy* GetExtensionSpecialStoragePolicy();
68   virtual FaviconService* GetFaviconService(ServiceAccessType sat);
69   virtual HistoryService* GetHistoryService(ServiceAccessType sat);
70   virtual HistoryService* GetHistoryServiceWithoutCreating();
71   virtual AutocompleteClassifier* GetAutocompleteClassifier();
72   virtual WebDataService* GetWebDataService(ServiceAccessType sat);
73   virtual WebDataService* GetWebDataServiceWithoutCreating();
74   virtual PasswordStore* GetPasswordStore(ServiceAccessType sat);
75   virtual PrefService* GetPrefs();
76   virtual PrefService* GetOffTheRecordPrefs();
77   virtual TemplateURLModel* GetTemplateURLModel();
78   virtual TemplateURLFetcher* GetTemplateURLFetcher();
79   virtual DownloadManager* GetDownloadManager();
80   virtual PersonalDataManager* GetPersonalDataManager();
81   virtual fileapi::FileSystemContext* GetFileSystemContext();
82   virtual bool HasCreatedDownloadManager() const;
83   virtual net::URLRequestContextGetter* GetRequestContext();
84   virtual net::URLRequestContextGetter* GetRequestContextForPossibleApp(
85       const Extension* installed_app);
86   virtual net::URLRequestContextGetter* GetRequestContextForMedia();
87   virtual net::URLRequestContextGetter* GetRequestContextForExtensions();
88   virtual net::URLRequestContextGetter* GetRequestContextForIsolatedApp(
89       const std::string& app_id);
90   virtual const content::ResourceContext& GetResourceContext();
91   virtual void RegisterExtensionWithRequestContexts(const Extension* extension);
92   virtual void UnregisterExtensionWithRequestContexts(
93       const std::string& extension_id,
94       const UnloadedExtensionInfo::Reason reason);
95   virtual net::SSLConfigService* GetSSLConfigService();
96   virtual HostContentSettingsMap* GetHostContentSettingsMap();
97   virtual HostZoomMap* GetHostZoomMap();
98   virtual GeolocationContentSettingsMap* GetGeolocationContentSettingsMap();
99   virtual GeolocationPermissionContext* GetGeolocationPermissionContext();
100   virtual UserStyleSheetWatcher* GetUserStyleSheetWatcher();
101   virtual FindBarState* GetFindBarState();
102   virtual SessionService* GetSessionService();
103   virtual void ShutdownSessionService();
104   virtual bool HasSessionService() const;
105   virtual bool HasProfileSyncService() const;
106   virtual bool DidLastSessionExitCleanly();
107   virtual BookmarkModel* GetBookmarkModel();
108   virtual ProtocolHandlerRegistry* GetProtocolHandlerRegistry();
109   virtual bool IsSameProfile(Profile* profile);
110   virtual base::Time GetStartTime() const;
111   virtual TabRestoreService* GetTabRestoreService();
112   virtual void ResetTabRestoreService();
113   virtual SpellCheckHost* GetSpellCheckHost();
114   virtual void ReinitializeSpellCheckHost(bool force);
115   virtual WebKitContext* GetWebKitContext();
116   virtual StatusTray* GetStatusTray();
117   virtual void MarkAsCleanShutdown();
118   virtual void InitExtensions(bool extensions_enabled);
119   virtual void InitPromoResources();
120   virtual void InitRegisteredProtocolHandlers();
121   virtual NTPResourceCache* GetNTPResourceCache();
122   virtual FilePath last_selected_directory();
123   virtual void set_last_selected_directory(const FilePath& path);
124   virtual ProfileSyncService* GetProfileSyncService();
125   virtual ProfileSyncService* GetProfileSyncService(
126       const std::string& cros_user);
127   virtual TokenService* GetTokenService();
128   void InitSyncService(const std::string& cros_user);
129   virtual CloudPrintProxyService* GetCloudPrintProxyService();
130   void InitCloudPrintProxyService();
131   virtual ChromeBlobStorageContext* GetBlobStorageContext();
132   virtual ExtensionInfoMap* GetExtensionInfoMap();
133   virtual PromoCounter* GetInstantPromoCounter();
134   virtual BrowserSignin* GetBrowserSignin();
135   virtual policy::ProfilePolicyConnector* GetPolicyConnector();
136   virtual ChromeURLDataManager* GetChromeURLDataManager();
137 
138 #if defined(OS_CHROMEOS)
139   virtual void ChangeAppLocale(const std::string& locale, AppLocaleChangedVia);
140   virtual void OnLogin();
141   virtual void SetupChromeOSEnterpriseExtensionObserver();
142   virtual void InitChromeOSPreferences();
143 #endif  // defined(OS_CHROMEOS)
144 
145   virtual PrefProxyConfigTracker* GetProxyConfigTracker();
146   virtual prerender::PrerenderManager* GetPrerenderManager();
147 
148   // NotificationObserver implementation.
149   virtual void Observe(NotificationType type,
150                        const NotificationSource& source,
151                        const NotificationDetails& details);
152 
153   // SpellCheckHostObserver implementation.
154   virtual void SpellCheckHostInitialized();
155 
156  private:
157   friend class Profile;
158 
159   ProfileImpl(const FilePath& path,
160               Profile::Delegate* delegate);
161 
162   // Does final initialization. Should be called after prefs were loaded.
163   void DoFinalInit();
164 
165   // PrefService::Delegate implementation. Does final prefs initialization and
166   // calls Init().
167   virtual void OnPrefsLoaded(PrefService* prefs, bool success);
168 
169   void CreateWebDataService();
170   FilePath GetPrefFilePath();
171 
172   void CreatePasswordStore();
173 
174   void StopCreateSessionServiceTimer();
175 
EnsureRequestContextCreated()176   void EnsureRequestContextCreated() {
177     GetRequestContext();
178   }
179 
EnsureSessionServiceCreated()180   void EnsureSessionServiceCreated() {
181     GetSessionService();
182   }
183 
184   void RegisterComponentExtensions();
185 
186   ExtensionPrefValueMap* GetExtensionPrefValueMap();
187 
188   NotificationRegistrar registrar_;
189   PrefChangeRegistrar pref_change_registrar_;
190 
191   FilePath path_;
192   FilePath base_cache_path_;
193   scoped_ptr<ExtensionPrefValueMap> extension_pref_value_map_;
194   // Keep |prefs_| on top for destruction order because |extension_prefs_|,
195   // |net_pref_observer_|, |web_resource_service_|, and |io_data_| store
196   // pointers to |prefs_| and shall be destructed first.
197   scoped_ptr<PrefService> prefs_;
198   scoped_ptr<PrefService> otr_prefs_;
199   scoped_ptr<VisitedLinkEventListener> visited_link_event_listener_;
200   scoped_ptr<VisitedLinkMaster> visited_link_master_;
201   // Keep extension_prefs_ on top of extensions_service_ because the latter
202   // maintains a pointer to the first and shall be destructed first.
203   scoped_ptr<ExtensionPrefs> extension_prefs_;
204   scoped_refptr<ExtensionService> extensions_service_;
205   scoped_refptr<UserScriptMaster> user_script_master_;
206   scoped_refptr<ExtensionDevToolsManager> extension_devtools_manager_;
207   scoped_ptr<ExtensionProcessManager> extension_process_manager_;
208   scoped_refptr<ExtensionMessageService> extension_message_service_;
209   scoped_ptr<ExtensionEventRouter> extension_event_router_;
210   scoped_refptr<ExtensionSpecialStoragePolicy>
211       extension_special_storage_policy_;
212   scoped_ptr<SSLHostState> ssl_host_state_;
213   scoped_refptr<net::TransportSecurityState>
214       transport_security_state_;
215   scoped_refptr<TransportSecurityPersister>
216       transport_security_persister_;
217   scoped_ptr<policy::ProfilePolicyConnector> profile_policy_connector_;
218   scoped_refptr<prerender::PrerenderManager> prerender_manager_;
219   scoped_ptr<NetPrefObserver> net_pref_observer_;
220   scoped_ptr<TemplateURLFetcher> template_url_fetcher_;
221   scoped_ptr<TemplateURLModel> template_url_model_;
222   scoped_ptr<BookmarkModel> bookmark_bar_model_;
223   scoped_refptr<PromoResourceService> promo_resource_service_;
224   scoped_refptr<ProtocolHandlerRegistry> protocol_handler_registry_;
225   scoped_ptr<NTPResourceCache> ntp_resource_cache_;
226 
227   scoped_ptr<TokenService> token_service_;
228   scoped_ptr<ProfileSyncFactory> profile_sync_factory_;
229   scoped_ptr<ProfileSyncService> sync_service_;
230   scoped_refptr<CloudPrintProxyService> cloud_print_proxy_service_;
231 
232   ProfileImplIOData::Handle io_data_;
233 
234   scoped_ptr<SSLConfigServiceManager> ssl_config_service_manager_;
235 
236   scoped_refptr<HostContentSettingsMap> host_content_settings_map_;
237   scoped_refptr<HostZoomMap> host_zoom_map_;
238   scoped_refptr<GeolocationContentSettingsMap>
239       geolocation_content_settings_map_;
240   scoped_refptr<GeolocationPermissionContext>
241       geolocation_permission_context_;
242   scoped_refptr<UserStyleSheetWatcher> user_style_sheet_watcher_;
243   scoped_ptr<FindBarState> find_bar_state_;
244   scoped_refptr<DownloadManager> download_manager_;
245   scoped_refptr<HistoryService> history_service_;
246   scoped_refptr<FaviconService> favicon_service_;
247   scoped_ptr<AutocompleteClassifier> autocomplete_classifier_;
248   scoped_refptr<WebDataService> web_data_service_;
249   scoped_refptr<PasswordStore> password_store_;
250   scoped_refptr<SessionService> session_service_;
251   scoped_refptr<WebKitContext> webkit_context_;
252   scoped_ptr<StatusTray> status_tray_;
253   scoped_refptr<PersonalDataManager> personal_data_manager_;
254   scoped_refptr<fileapi::FileSystemContext> file_system_context_;
255   scoped_ptr<BrowserSignin> browser_signin_;
256   bool history_service_created_;
257   bool favicon_service_created_;
258   bool created_web_data_service_;
259   bool created_password_store_;
260   bool created_download_manager_;
261   bool clear_local_state_on_exit_;
262   // Whether or not the last session exited cleanly. This is set only once.
263   bool last_session_exited_cleanly_;
264 
265   base::OneShotTimer<ProfileImpl> create_session_service_timer_;
266 
267   scoped_ptr<Profile> off_the_record_profile_;
268 
269   // See GetStartTime for details.
270   base::Time start_time_;
271 
272   scoped_refptr<TabRestoreService> tab_restore_service_;
273 
274   scoped_refptr<SpellCheckHost> spellcheck_host_;
275 
276   // Indicates whether |spellcheck_host_| has told us initialization is
277   // finished.
278   bool spellcheck_host_ready_;
279 
280 #if defined(OS_WIN)
281   bool checked_instant_promo_;
282   scoped_ptr<PromoCounter> instant_promo_counter_;
283 #endif
284 
285   // Set to true when ShutdownSessionService is invoked. If true
286   // GetSessionService won't recreate the SessionService.
287   bool shutdown_session_service_;
288 
289   // The AppCacheService for this profile, shared by all requests contexts
290   // associated with this profile. Should only be used on the IO thread.
291   scoped_refptr<ChromeAppCacheService> appcache_service_;
292 
293   // The main database tracker for this profile.
294   // Should be used only on the file thread.
295   scoped_refptr<webkit_database::DatabaseTracker> db_tracker_;
296 
297   scoped_refptr<history::TopSites> top_sites_;  // For history and thumbnails.
298 
299   scoped_refptr<ChromeBlobStorageContext> blob_storage_context_;
300 
301   scoped_refptr<ExtensionInfoMap> extension_info_map_;
302 
303 #if defined(OS_CHROMEOS)
304   scoped_ptr<chromeos::Preferences> chromeos_preferences_;
305 
306   scoped_ptr<chromeos::EnterpriseExtensionObserver>
307       chromeos_enterprise_extension_observer_;
308 
309   scoped_ptr<chromeos::LocaleChangeGuard> locale_change_guard_;
310 #endif
311 
312   scoped_refptr<PrefProxyConfigTracker> pref_proxy_config_tracker_;
313 
314   scoped_ptr<ChromeURLDataManager> chrome_url_data_manager_;
315 
316   Profile::Delegate* delegate_;
317 
318   DISALLOW_COPY_AND_ASSIGN(ProfileImpl);
319 };
320 
321 #endif  // CHROME_BROWSER_PROFILES_PROFILE_IMPL_H_
322