Home | History | Annotate | Download | only in profiles
      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 
    176   void EnsureRequestContextCreated() {
    177     GetRequestContext();
    178   }
    179 
    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