Index: chrome/browser/profile.cc |
=================================================================== |
--- chrome/browser/profile.cc (revision 68044) |
+++ chrome/browser/profile.cc (working copy) |
@@ -1,667 +0,0 @@ |
-// 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. |
- |
-#include "chrome/browser/profile.h" |
- |
-#include "app/resource_bundle.h" |
-#include "base/command_line.h" |
-#include "base/file_path.h" |
-#include "base/file_util.h" |
-#include "base/path_service.h" |
-#include "base/scoped_ptr.h" |
-#include "base/string_util.h" |
-#include "chrome/browser/background_contents_service.h" |
-#include "chrome/browser/browser_list.h" |
-#include "chrome/browser/browser_process.h" |
-#include "chrome/browser/browser_thread.h" |
-#include "chrome/browser/chrome_blob_storage_context.h" |
-#include "chrome/browser/download/download_manager.h" |
-#include "chrome/browser/extensions/extension_message_service.h" |
-#include "chrome/browser/extensions/extension_process_manager.h" |
-#include "chrome/browser/file_system/browser_file_system_context.h" |
-#include "chrome/browser/in_process_webkit/webkit_context.h" |
-#include "chrome/browser/net/chrome_url_request_context.h" |
-#include "chrome/browser/notifications/desktop_notification_service.h" |
-#include "chrome/browser/ssl/ssl_host_state.h" |
-#include "chrome/browser/sync/profile_sync_service.h" |
-#include "chrome/browser/themes/browser_theme_provider.h" |
-#include "chrome/browser/ui/find_bar/find_bar_state.h" |
-#include "chrome/common/chrome_constants.h" |
-#include "chrome/common/chrome_paths.h" |
-#include "chrome/common/chrome_switches.h" |
-#include "chrome/common/json_pref_store.h" |
-#include "chrome/common/notification_service.h" |
-#include "chrome/common/pref_names.h" |
-#include "chrome/common/render_messages.h" |
-#include "grit/browser_resources.h" |
-#include "grit/locale_settings.h" |
-#include "net/base/transport_security_state.h" |
-#include "webkit/database/database_tracker.h" |
-#if defined(TOOLKIT_USES_GTK) |
-#include "chrome/browser/gtk/gtk_theme_provider.h" |
-#endif |
- |
-#if defined(OS_WIN) |
-#include "chrome/browser/password_manager/password_store_win.h" |
-#elif defined(OS_MACOSX) |
-#include "chrome/browser/keychain_mac.h" |
-#include "chrome/browser/password_manager/password_store_mac.h" |
-#elif defined(OS_POSIX) && !defined(OS_CHROMEOS) |
-#include "chrome/browser/password_manager/native_backend_gnome_x.h" |
-#include "chrome/browser/password_manager/native_backend_kwallet_x.h" |
-#include "chrome/browser/password_manager/password_store_x.h" |
-#endif |
- |
-using base::Time; |
-using base::TimeDelta; |
- |
-// A pointer to the request context for the default profile. See comments on |
-// Profile::GetDefaultRequestContext. |
-URLRequestContextGetter* Profile::default_request_context_; |
- |
-namespace { |
- |
-// TODO(pathorn): Duplicated in profile_impl.cc |
-void CleanupRequestContext(ChromeURLRequestContextGetter* context) { |
- if (context) |
- context->CleanupOnUIThread(); |
-} |
- |
-} // namespace |
- |
-// static |
-const ProfileId Profile::InvalidProfileId = static_cast<ProfileId>(0); |
- |
-// static |
-void Profile::RegisterUserPrefs(PrefService* prefs) { |
- prefs->RegisterBooleanPref(prefs::kSearchSuggestEnabled, true); |
- prefs->RegisterBooleanPref(prefs::kSessionExitedCleanly, true); |
- prefs->RegisterBooleanPref(prefs::kSafeBrowsingEnabled, true); |
- prefs->RegisterBooleanPref(prefs::kSafeBrowsingReportingEnabled, false); |
- // TODO(estade): IDS_SPELLCHECK_DICTIONARY should be an ASCII string. |
- prefs->RegisterLocalizedStringPref(prefs::kSpellCheckDictionary, |
- IDS_SPELLCHECK_DICTIONARY); |
- prefs->RegisterBooleanPref(prefs::kEnableSpellCheck, true); |
- prefs->RegisterBooleanPref(prefs::kEnableAutoSpellCorrect, true); |
-#if defined(TOOLKIT_USES_GTK) |
- prefs->RegisterBooleanPref(prefs::kUsesSystemTheme, |
- GtkThemeProvider::DefaultUsesSystemTheme()); |
-#endif |
- prefs->RegisterFilePathPref(prefs::kCurrentThemePackFilename, FilePath()); |
- prefs->RegisterStringPref(prefs::kCurrentThemeID, |
- BrowserThemeProvider::kDefaultThemeID); |
- prefs->RegisterDictionaryPref(prefs::kCurrentThemeImages); |
- prefs->RegisterDictionaryPref(prefs::kCurrentThemeColors); |
- prefs->RegisterDictionaryPref(prefs::kCurrentThemeTints); |
- prefs->RegisterDictionaryPref(prefs::kCurrentThemeDisplayProperties); |
- prefs->RegisterBooleanPref(prefs::kDisableExtensions, false); |
- prefs->RegisterStringPref(prefs::kSelectFileLastDirectory, ""); |
-#if defined(OS_CHROMEOS) |
- // TODO(dilmah): For OS_CHROMEOS we maintain kApplicationLocale in both |
- // local state and user's profile. For other platforms we maintain |
- // kApplicationLocale only in local state. |
- // In the future we may want to maintain kApplicationLocale |
- // in user's profile for other platforms as well. |
- prefs->RegisterStringPref(prefs::kApplicationLocale, ""); |
-#endif |
-} |
- |
-// static |
-URLRequestContextGetter* Profile::GetDefaultRequestContext() { |
- return default_request_context_; |
-} |
- |
-bool Profile::IsSyncAccessible() { |
- ProfileSyncService* syncService = GetProfileSyncService(); |
- return syncService && !syncService->IsManaged(); |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// |
-// OffTheRecordProfileImpl is a profile subclass that wraps an existing profile |
-// to make it suitable for the off the record mode. |
-// |
-//////////////////////////////////////////////////////////////////////////////// |
-class OffTheRecordProfileImpl : public Profile, |
- public BrowserList::Observer { |
- public: |
- explicit OffTheRecordProfileImpl(Profile* real_profile) |
- : profile_(real_profile), |
- start_time_(Time::Now()) { |
- request_context_ = ChromeURLRequestContextGetter::CreateOffTheRecord(this); |
- extension_process_manager_.reset(ExtensionProcessManager::Create(this)); |
- |
- BrowserList::AddObserver(this); |
- |
- background_contents_service_.reset( |
- new BackgroundContentsService(this, CommandLine::ForCurrentProcess())); |
- } |
- |
- virtual ~OffTheRecordProfileImpl() { |
- NotificationService::current()->Notify(NotificationType::PROFILE_DESTROYED, |
- Source<Profile>(this), |
- NotificationService::NoDetails()); |
- CleanupRequestContext(request_context_); |
- CleanupRequestContext(extensions_request_context_); |
- |
- // Clean up all DB files/directories |
- BrowserThread::PostTask( |
- BrowserThread::FILE, FROM_HERE, |
- NewRunnableMethod( |
- db_tracker_.get(), |
- &webkit_database::DatabaseTracker::DeleteIncognitoDBDirectory)); |
- |
- BrowserList::RemoveObserver(this); |
- } |
- |
- virtual ProfileId GetRuntimeId() { |
- return reinterpret_cast<ProfileId>(this); |
- } |
- |
- virtual FilePath GetPath() { return profile_->GetPath(); } |
- |
- virtual bool IsOffTheRecord() { |
- return true; |
- } |
- |
- virtual Profile* GetOffTheRecordProfile() { |
- return this; |
- } |
- |
- virtual void DestroyOffTheRecordProfile() { |
- // Suicide is bad! |
- NOTREACHED(); |
- } |
- |
- virtual bool HasOffTheRecordProfile() { |
- return true; |
- } |
- |
- virtual Profile* GetOriginalProfile() { |
- return profile_; |
- } |
- |
- virtual ChromeAppCacheService* GetAppCacheService() { |
- if (!appcache_service_) { |
- appcache_service_ = new ChromeAppCacheService; |
- BrowserThread::PostTask( |
- BrowserThread::IO, FROM_HERE, |
- NewRunnableMethod(appcache_service_.get(), |
- &ChromeAppCacheService::InitializeOnIOThread, |
- GetPath(), IsOffTheRecord(), |
- make_scoped_refptr(GetHostContentSettingsMap()))); |
- } |
- return appcache_service_; |
- } |
- |
- virtual webkit_database::DatabaseTracker* GetDatabaseTracker() { |
- if (!db_tracker_) { |
- db_tracker_ = new webkit_database::DatabaseTracker( |
- GetPath(), IsOffTheRecord()); |
- } |
- return db_tracker_; |
- } |
- |
- virtual VisitedLinkMaster* GetVisitedLinkMaster() { |
- // We don't provide access to the VisitedLinkMaster when we're OffTheRecord |
- // because we don't want to leak the sites that the user has visited before. |
- return NULL; |
- } |
- |
- virtual ExtensionsService* GetExtensionsService() { |
- return GetOriginalProfile()->GetExtensionsService(); |
- } |
- |
- virtual BackgroundContentsService* GetBackgroundContentsService() const { |
- return background_contents_service_.get(); |
- } |
- |
- virtual StatusTray* GetStatusTray() { |
- return GetOriginalProfile()->GetStatusTray(); |
- } |
- |
- virtual UserScriptMaster* GetUserScriptMaster() { |
- return GetOriginalProfile()->GetUserScriptMaster(); |
- } |
- |
- virtual ExtensionDevToolsManager* GetExtensionDevToolsManager() { |
- // TODO(mpcomplete): figure out whether we should return the original |
- // profile's version. |
- return NULL; |
- } |
- |
- virtual ExtensionProcessManager* GetExtensionProcessManager() { |
- return extension_process_manager_.get(); |
- } |
- |
- virtual ExtensionMessageService* GetExtensionMessageService() { |
- return GetOriginalProfile()->GetExtensionMessageService(); |
- } |
- |
- virtual ExtensionEventRouter* GetExtensionEventRouter() { |
- return GetOriginalProfile()->GetExtensionEventRouter(); |
- } |
- |
- virtual SSLHostState* GetSSLHostState() { |
- if (!ssl_host_state_.get()) |
- ssl_host_state_.reset(new SSLHostState()); |
- |
- DCHECK(ssl_host_state_->CalledOnValidThread()); |
- return ssl_host_state_.get(); |
- } |
- |
- virtual net::TransportSecurityState* GetTransportSecurityState() { |
- if (!transport_security_state_.get()) |
- transport_security_state_ = new net::TransportSecurityState(); |
- |
- return transport_security_state_.get(); |
- } |
- |
- virtual HistoryService* GetHistoryService(ServiceAccessType sat) { |
- if (sat == EXPLICIT_ACCESS) |
- return profile_->GetHistoryService(sat); |
- |
- NOTREACHED() << "This profile is OffTheRecord"; |
- return NULL; |
- } |
- |
- virtual HistoryService* GetHistoryServiceWithoutCreating() { |
- return profile_->GetHistoryServiceWithoutCreating(); |
- } |
- |
- virtual FaviconService* GetFaviconService(ServiceAccessType sat) { |
- if (sat == EXPLICIT_ACCESS) |
- return profile_->GetFaviconService(sat); |
- |
- NOTREACHED() << "This profile is OffTheRecord"; |
- return NULL; |
- } |
- |
- virtual AutocompleteClassifier* GetAutocompleteClassifier() { |
- return profile_->GetAutocompleteClassifier(); |
- } |
- |
- virtual WebDataService* GetWebDataService(ServiceAccessType sat) { |
- if (sat == EXPLICIT_ACCESS) |
- return profile_->GetWebDataService(sat); |
- |
- NOTREACHED() << "This profile is OffTheRecord"; |
- return NULL; |
- } |
- |
- virtual WebDataService* GetWebDataServiceWithoutCreating() { |
- return profile_->GetWebDataServiceWithoutCreating(); |
- } |
- |
- virtual PasswordStore* GetPasswordStore(ServiceAccessType sat) { |
- if (sat == EXPLICIT_ACCESS) |
- return profile_->GetPasswordStore(sat); |
- |
- NOTREACHED() << "This profile is OffTheRecord"; |
- return NULL; |
- } |
- |
- virtual PrefService* GetPrefs() { |
- return profile_->GetPrefs(); |
- } |
- |
- virtual TemplateURLModel* GetTemplateURLModel() { |
- return profile_->GetTemplateURLModel(); |
- } |
- |
- virtual TemplateURLFetcher* GetTemplateURLFetcher() { |
- return profile_->GetTemplateURLFetcher(); |
- } |
- |
- virtual DownloadManager* GetDownloadManager() { |
- if (!download_manager_.get()) { |
- scoped_refptr<DownloadManager> dlm( |
- new DownloadManager(g_browser_process->download_status_updater())); |
- dlm->Init(this); |
- download_manager_.swap(dlm); |
- } |
- return download_manager_.get(); |
- } |
- |
- virtual bool HasCreatedDownloadManager() const { |
- return (download_manager_.get() != NULL); |
- } |
- |
- virtual PersonalDataManager* GetPersonalDataManager() { |
- return NULL; |
- } |
- |
- virtual BrowserFileSystemContext* GetFileSystemContext() { |
- if (!browser_file_system_context_) |
- browser_file_system_context_ = new BrowserFileSystemContext( |
- GetPath(), IsOffTheRecord()); |
- DCHECK(browser_file_system_context_.get()); |
- return browser_file_system_context_.get(); |
- } |
- |
- virtual void InitThemes() { |
- profile_->InitThemes(); |
- } |
- |
- virtual void SetTheme(const Extension* extension) { |
- profile_->SetTheme(extension); |
- } |
- |
- virtual void SetNativeTheme() { |
- profile_->SetNativeTheme(); |
- } |
- |
- virtual void ClearTheme() { |
- profile_->ClearTheme(); |
- } |
- |
- virtual const Extension* GetTheme() { |
- return profile_->GetTheme(); |
- } |
- |
- virtual BrowserThemeProvider* GetThemeProvider() { |
- return profile_->GetThemeProvider(); |
- } |
- |
- virtual URLRequestContextGetter* GetRequestContext() { |
- return request_context_; |
- } |
- |
- virtual URLRequestContextGetter* GetRequestContextForMedia() { |
- // In OTR mode, media request context is the same as the original one. |
- return request_context_; |
- } |
- |
- URLRequestContextGetter* GetRequestContextForExtensions() { |
- if (!extensions_request_context_) { |
- extensions_request_context_ = |
- ChromeURLRequestContextGetter::CreateOffTheRecordForExtensions(this); |
- } |
- |
- return extensions_request_context_; |
- } |
- |
- virtual net::SSLConfigService* GetSSLConfigService() { |
- return profile_->GetSSLConfigService(); |
- } |
- |
- virtual HostContentSettingsMap* GetHostContentSettingsMap() { |
- // Retrieve the host content settings map of the parent profile in order to |
- // ensure the preferences have been migrated. |
- profile_->GetHostContentSettingsMap(); |
- if (!host_content_settings_map_.get()) |
- host_content_settings_map_ = new HostContentSettingsMap(this); |
- return host_content_settings_map_.get(); |
- } |
- |
- virtual HostZoomMap* GetHostZoomMap() { |
- if (!host_zoom_map_) |
- host_zoom_map_ = new HostZoomMap(this); |
- return host_zoom_map_.get(); |
- } |
- |
- virtual GeolocationContentSettingsMap* GetGeolocationContentSettingsMap() { |
- return profile_->GetGeolocationContentSettingsMap(); |
- } |
- |
- virtual GeolocationPermissionContext* GetGeolocationPermissionContext() { |
- return profile_->GetGeolocationPermissionContext(); |
- } |
- |
- virtual UserStyleSheetWatcher* GetUserStyleSheetWatcher() { |
- return profile_->GetUserStyleSheetWatcher(); |
- } |
- |
- virtual FindBarState* GetFindBarState() { |
- if (!find_bar_state_.get()) |
- find_bar_state_.reset(new FindBarState()); |
- return find_bar_state_.get(); |
- } |
- |
- virtual SessionService* GetSessionService() { |
- // Don't save any sessions when off the record. |
- return NULL; |
- } |
- |
- virtual void ShutdownSessionService() { |
- // We don't allow a session service, nothing to do. |
- } |
- |
- virtual bool HasSessionService() const { |
- // We never have a session service. |
- return false; |
- } |
- |
- virtual bool HasProfileSyncService() const { |
- // We never have a profile sync service. |
- return false; |
- } |
- |
- virtual bool DidLastSessionExitCleanly() { |
- return profile_->DidLastSessionExitCleanly(); |
- } |
- |
- virtual BookmarkModel* GetBookmarkModel() { |
- return profile_->GetBookmarkModel(); |
- } |
- |
- virtual DesktopNotificationService* GetDesktopNotificationService() { |
- if (!desktop_notification_service_.get()) { |
- desktop_notification_service_.reset(new DesktopNotificationService( |
- this, g_browser_process->notification_ui_manager())); |
- } |
- return desktop_notification_service_.get(); |
- } |
- |
- virtual TokenService* GetTokenService() { |
- return NULL; |
- } |
- |
- virtual ProfileSyncService* GetProfileSyncService() { |
- return NULL; |
- } |
- |
- virtual ProfileSyncService* GetProfileSyncService( |
- const std::string& cros_user) { |
- return NULL; |
- } |
- |
- virtual BrowserSignin* GetBrowserSignin() { |
- return profile_->GetBrowserSignin(); |
- } |
- |
- virtual CloudPrintProxyService* GetCloudPrintProxyService() { |
- return NULL; |
- } |
- |
- virtual bool IsSameProfile(Profile* profile) { |
- return (profile == this) || (profile == profile_); |
- } |
- |
- virtual Time GetStartTime() const { |
- return start_time_; |
- } |
- |
- virtual TabRestoreService* GetTabRestoreService() { |
- return NULL; |
- } |
- |
- virtual void ResetTabRestoreService() { |
- } |
- |
- virtual SpellCheckHost* GetSpellCheckHost() { |
- return profile_->GetSpellCheckHost(); |
- } |
- |
- virtual void ReinitializeSpellCheckHost(bool force) { |
- profile_->ReinitializeSpellCheckHost(force); |
- } |
- |
- virtual WebKitContext* GetWebKitContext() { |
- if (!webkit_context_.get()) |
- webkit_context_ = new WebKitContext(this, false); |
- DCHECK(webkit_context_.get()); |
- return webkit_context_.get(); |
- } |
- |
- virtual history::TopSites* GetTopSitesWithoutCreating() { |
- return NULL; |
- } |
- |
- virtual history::TopSites* GetTopSites() { |
- return NULL; |
- } |
- |
- virtual void MarkAsCleanShutdown() { |
- } |
- |
- virtual void InitExtensions() { |
- NOTREACHED(); |
- } |
- |
- virtual void InitWebResources() { |
- NOTREACHED(); |
- } |
- |
- virtual NTPResourceCache* GetNTPResourceCache() { |
- // Just return the real profile resource cache. |
- return profile_->GetNTPResourceCache(); |
- } |
- |
- virtual FilePath last_selected_directory() { |
- const FilePath& directory = last_selected_directory_; |
- if (directory.empty()) { |
- return profile_->last_selected_directory(); |
- } |
- return directory; |
- } |
- |
- virtual void set_last_selected_directory(const FilePath& path) { |
- last_selected_directory_ = path; |
- } |
- |
-#if defined(OS_CHROMEOS) |
- virtual chromeos::ProxyConfigServiceImpl* |
- GetChromeOSProxyConfigServiceImpl() { |
- return profile_->GetChromeOSProxyConfigServiceImpl(); |
- } |
- |
- virtual void SetupChromeOSEnterpriseExtensionObserver() { |
- profile_->SetupChromeOSEnterpriseExtensionObserver(); |
- } |
-#endif // defined(OS_CHROMEOS) |
- |
- virtual void ExitedOffTheRecordMode() { |
- // DownloadManager is lazily created, so check before accessing it. |
- if (download_manager_.get()) { |
- // Drop our download manager so we forget about all the downloads made |
- // in off-the-record mode. |
- download_manager_->Shutdown(); |
- download_manager_ = NULL; |
- } |
- } |
- |
- virtual void OnBrowserAdded(const Browser* browser) { |
- } |
- |
- virtual void OnBrowserRemoved(const Browser* browser) { |
- if (BrowserList::GetBrowserCount(this) == 0) |
- ExitedOffTheRecordMode(); |
- } |
- |
- virtual ChromeBlobStorageContext* GetBlobStorageContext() { |
- if (!blob_storage_context_) { |
- blob_storage_context_ = new ChromeBlobStorageContext(); |
- BrowserThread::PostTask( |
- BrowserThread::IO, FROM_HERE, |
- NewRunnableMethod( |
- blob_storage_context_.get(), |
- &ChromeBlobStorageContext::InitializeOnIOThread)); |
- } |
- return blob_storage_context_; |
- } |
- |
- virtual ExtensionInfoMap* GetExtensionInfoMap() { |
- return profile_->GetExtensionInfoMap(); |
- } |
- |
- virtual policy::ProfilePolicyContext* GetPolicyContext() { |
- return NULL; |
- } |
- |
- virtual PromoCounter* GetInstantPromoCounter() { |
- return NULL; |
- } |
- |
- virtual PrefProxyConfigTracker* GetProxyConfigTracker() { |
- return profile_->GetProxyConfigTracker(); |
- } |
- |
- private: |
- NotificationRegistrar registrar_; |
- |
- // The real underlying profile. |
- Profile* profile_; |
- |
- scoped_ptr<ExtensionProcessManager> extension_process_manager_; |
- |
- // The context to use for requests made from this OTR session. |
- scoped_refptr<ChromeURLRequestContextGetter> request_context_; |
- |
- // The context to use for requests made by an extension while in OTR mode. |
- scoped_refptr<ChromeURLRequestContextGetter> extensions_request_context_; |
- |
- // The download manager that only stores downloaded items in memory. |
- scoped_refptr<DownloadManager> download_manager_; |
- |
- // Use a separate desktop notification service for OTR. |
- scoped_ptr<DesktopNotificationService> desktop_notification_service_; |
- |
- // We use a non-writable content settings map for OTR. |
- scoped_refptr<HostContentSettingsMap> host_content_settings_map_; |
- |
- // Use a separate zoom map for OTR. |
- scoped_refptr<HostZoomMap> host_zoom_map_; |
- |
- // Use a special WebKit context for OTR browsing. |
- scoped_refptr<WebKitContext> webkit_context_; |
- |
- // We don't want SSLHostState from the OTR profile to leak back to the main |
- // profile because then the main profile would learn some of the host names |
- // the user visited while OTR. |
- scoped_ptr<SSLHostState> ssl_host_state_; |
- |
- // Use a separate FindBarState so search terms do not leak back to the main |
- // profile. |
- scoped_ptr<FindBarState> find_bar_state_; |
- |
- // The TransportSecurityState that only stores enabled sites in memory. |
- scoped_refptr<net::TransportSecurityState> |
- transport_security_state_; |
- |
- // Time we were started. |
- Time start_time_; |
- |
- scoped_refptr<ChromeAppCacheService> appcache_service_; |
- |
- // The main database tracker for this profile. |
- // Should be used only on the file thread. |
- scoped_refptr<webkit_database::DatabaseTracker> db_tracker_; |
- |
- FilePath last_selected_directory_; |
- |
- // Tracks all BackgroundContents running under this profile. |
- scoped_ptr<BackgroundContentsService> background_contents_service_; |
- |
- scoped_refptr<ChromeBlobStorageContext> blob_storage_context_; |
- |
- // The file_system context for this profile. |
- scoped_refptr<BrowserFileSystemContext> browser_file_system_context_; |
- |
- DISALLOW_COPY_AND_ASSIGN(OffTheRecordProfileImpl); |
-}; |
- |
-Profile* Profile::CreateOffTheRecordProfile() { |
- return new OffTheRecordProfileImpl(this); |
-} |