172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/profiles/profile.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include <string> 872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/command_line.h" 10dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "base/compiler_specific.h" 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/file_path.h" 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/file_util.h" 13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_ptr.h" 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/path_service.h" 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/string_util.h" 16dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "build/build_config.h" 17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/background_contents_service_factory.h" 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/browser_process.h" 19dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/content_settings/host_content_settings_map.h" 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/download/download_manager.h" 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/extensions/extension_message_service.h" 2272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/extensions/extension_pref_store.h" 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/extensions/extension_process_manager.h" 24dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/extensions/extension_special_storage_policy.h" 2572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/net/pref_proxy_config_service.h" 26dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/prefs/pref_service.h" 27dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/profiles/off_the_record_profile_io_data.h" 28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/profiles/profile_dependency_manager.h" 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/ssl/ssl_host_state.h" 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/sync/profile_sync_service.h" 31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/themes/theme_service.h" 32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/transport_security_persister.h" 33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/ui/browser_list.h" 3421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/ui/find_bar/find_bar_state.h" 35dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/ui/webui/chrome_url_data_manager.h" 36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/ui/webui/extension_icon_source.h" 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/chrome_constants.h" 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/chrome_paths.h" 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/chrome_switches.h" 40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/common/extensions/extension.h" 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/json_pref_store.h" 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/pref_names.h" 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/render_messages.h" 44dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/appcache/chrome_appcache_service.h" 45dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/browser_thread.h" 46dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/chrome_blob_storage_context.h" 47dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/file_system/browser_file_system_helper.h" 48dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/host_zoom_map.h" 49dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/in_process_webkit/webkit_context.h" 50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_service.h" 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "grit/locale_settings.h" 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "net/base/transport_security_state.h" 5372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/resource/resource_bundle.h" 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "webkit/database/database_tracker.h" 5572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(TOOLKIT_USES_GTK) 57ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/ui/gtk/gtk_theme_service.h" 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 603345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#if defined(OS_WIN) 613345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/password_manager/password_store_win.h" 623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#elif defined(OS_MACOSX) 633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/keychain_mac.h" 643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/password_manager/password_store_mac.h" 653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#elif defined(OS_POSIX) && !defined(OS_CHROMEOS) 663345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/password_manager/native_backend_gnome_x.h" 673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/password_manager/native_backend_kwallet_x.h" 683345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/password_manager/password_store_x.h" 69dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#elif defined(OS_CHROMEOS) 70dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/chromeos/preferences.h" 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 733345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickusing base::Time; 743345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickusing base::TimeDelta; 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// A pointer to the request context for the default profile. See comments on 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Profile::GetDefaultRequestContext. 78ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennet::URLRequestContextGetter* Profile::default_request_context_; 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 803345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merricknamespace { 813345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 8272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} // namespace 833345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 84c6f29d64d97c44a4a132966ad9538ab89303e9f5Kristian Monsen#ifdef ANDROID 85c6f29d64d97c44a4a132966ad9538ab89303e9f5Kristian Monsen// Android moved this to profile_android.cc to avoid compiling this file. 86c6f29d64d97c44a4a132966ad9538ab89303e9f5Kristian Monsen#endif 8721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenProfile::Profile() 8821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen : restored_last_session_(false), 8921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen accessibility_pause_level_(0) { 9021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen} 9121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// static 9372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenconst char* Profile::kProfileKey = "__PROFILE__"; 9472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 9572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// static 96dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenconst ProfileId Profile::kInvalidProfileId = static_cast<ProfileId>(0); 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// static 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid Profile::RegisterUserPrefs(PrefService* prefs) { 100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch prefs->RegisterBooleanPref(prefs::kSearchSuggestEnabled, true); 101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch prefs->RegisterBooleanPref(prefs::kSessionExitedCleanly, true); 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch prefs->RegisterBooleanPref(prefs::kSafeBrowsingEnabled, true); 103201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch prefs->RegisterBooleanPref(prefs::kSafeBrowsingReportingEnabled, false); 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TODO(estade): IDS_SPELLCHECK_DICTIONARY should be an ASCII string. 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch prefs->RegisterLocalizedStringPref(prefs::kSpellCheckDictionary, 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IDS_SPELLCHECK_DICTIONARY); 107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch prefs->RegisterBooleanPref(prefs::kEnableSpellCheck, true); 108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch prefs->RegisterBooleanPref(prefs::kEnableAutoSpellCorrect, true); 109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(TOOLKIT_USES_GTK) 110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch prefs->RegisterBooleanPref(prefs::kUsesSystemTheme, 111ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen GtkThemeService::DefaultUsesSystemTheme()); 112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch prefs->RegisterFilePathPref(prefs::kCurrentThemePackFilename, FilePath()); 114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch prefs->RegisterStringPref(prefs::kCurrentThemeID, 115ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ThemeService::kDefaultThemeID); 116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch prefs->RegisterDictionaryPref(prefs::kCurrentThemeImages); 117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch prefs->RegisterDictionaryPref(prefs::kCurrentThemeColors); 118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch prefs->RegisterDictionaryPref(prefs::kCurrentThemeTints); 119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch prefs->RegisterDictionaryPref(prefs::kCurrentThemeDisplayProperties); 120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch prefs->RegisterBooleanPref(prefs::kDisableExtensions, false); 121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch prefs->RegisterStringPref(prefs::kSelectFileLastDirectory, ""); 1224a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#if defined(OS_CHROMEOS) 1234a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // TODO(dilmah): For OS_CHROMEOS we maintain kApplicationLocale in both 1244a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // local state and user's profile. For other platforms we maintain 1254a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // kApplicationLocale only in local state. 1264a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // In the future we may want to maintain kApplicationLocale 1274a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // in user's profile for other platforms as well. 1284a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch prefs->RegisterStringPref(prefs::kApplicationLocale, ""); 12921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen prefs->RegisterStringPref(prefs::kApplicationLocaleBackup, ""); 13072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen prefs->RegisterStringPref(prefs::kApplicationLocaleAccepted, ""); 1314a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#endif 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// static 135ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennet::URLRequestContextGetter* Profile::GetDefaultRequestContext() { 136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return default_request_context_; 137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 13972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenbool Profile::IsGuestSession() { 14072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#if defined(OS_CHROMEOS) 14172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen static bool is_guest_session = 14272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen CommandLine::ForCurrentProcess()->HasSwitch(switches::kGuestSession); 14372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return is_guest_session; 14472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#else 14572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return false; 14672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#endif 14772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 14872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool Profile::IsSyncAccessible() { 150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ProfileSyncService* syncService = GetProfileSyncService(); 151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return syncService && !syncService->IsManaged(); 152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//////////////////////////////////////////////////////////////////////////////// 155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// OffTheRecordProfileImpl is a profile subclass that wraps an existing profile 157ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// to make it suitable for the incognito mode. 158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//////////////////////////////////////////////////////////////////////////////// 160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass OffTheRecordProfileImpl : public Profile, 161731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick public BrowserList::Observer { 162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch explicit OffTheRecordProfileImpl(Profile* real_profile) 164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch : profile_(real_profile), 16572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen prefs_(real_profile->GetOffTheRecordPrefs()), 166dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ALLOW_THIS_IN_INITIALIZER_LIST(io_data_(this)), 167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch start_time_(Time::Now()) { 1683345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick extension_process_manager_.reset(ExtensionProcessManager::Create(this)); 169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 170731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserList::AddObserver(this); 171731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 172ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen BackgroundContentsServiceFactory::GetForProfile(this); 17372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 17472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DCHECK(real_profile->GetPrefs()->GetBoolean(prefs::kIncognitoEnabled)); 175dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 176dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // TODO(oshima): Remove the need to eagerly initialize the request context 177dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // getter. chromeos::OnlineAttempt is illegally trying to access this 178dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Profile member from a thread other than the UI thread, so we need to 179dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // prevent a race. 180dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#if defined(OS_CHROMEOS) 181dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen GetRequestContext(); 182dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#endif // defined(OS_CHROMEOS) 183ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 184ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Make the chrome//extension-icon/ resource available. 185ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ExtensionIconSource* icon_source = new ExtensionIconSource(real_profile); 186ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen GetChromeURLDataManager()->AddDataSource(icon_source); 187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual ~OffTheRecordProfileImpl() { 190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationService::current()->Notify(NotificationType::PROFILE_DESTROYED, 191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Source<Profile>(this), 192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationService::NoDetails()); 193ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 194ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ProfileDependencyManager::GetInstance()->DestroyProfileServices(this); 195ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Clean up all DB files/directories 197dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (db_tracker_) 198dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen BrowserThread::PostTask( 199dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen BrowserThread::FILE, FROM_HERE, 200dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen NewRunnableMethod( 201dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen db_tracker_.get(), 202dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen &webkit_database::DatabaseTracker::DeleteIncognitoDBDirectory)); 203731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 204731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserList::RemoveObserver(this); 20572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 20672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (pref_proxy_config_tracker_) 20772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen pref_proxy_config_tracker_->DetachFromPrefService(); 208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual ProfileId GetRuntimeId() { 211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return reinterpret_cast<ProfileId>(this); 212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual FilePath GetPath() { return profile_->GetPath(); } 215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool IsOffTheRecord() { 217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual Profile* GetOffTheRecordProfile() { 221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return this; 222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void DestroyOffTheRecordProfile() { 225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Suicide is bad! 226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NOTREACHED(); 227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool HasOffTheRecordProfile() { 230c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 231c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 233c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual Profile* GetOriginalProfile() { 234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return profile_; 235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual ChromeAppCacheService* GetAppCacheService() { 2383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (!appcache_service_) { 2393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick appcache_service_ = new ChromeAppCacheService; 240731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread::PostTask( 241731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread::IO, FROM_HERE, 242dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen NewRunnableMethod( 243dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen appcache_service_.get(), 244dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen &ChromeAppCacheService::InitializeOnIOThread, 245ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IsOffTheRecord() 246ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ? FilePath() : GetPath().Append(chrome::kAppCacheDirname), 247dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen make_scoped_refptr(GetHostContentSettingsMap()), 248dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen make_scoped_refptr(GetExtensionSpecialStoragePolicy()), 249dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen false)); 2503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 2513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return appcache_service_; 2523345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 2533345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 254c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual webkit_database::DatabaseTracker* GetDatabaseTracker() { 255dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (!db_tracker_.get()) { 256c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch db_tracker_ = new webkit_database::DatabaseTracker( 257dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen GetPath(), IsOffTheRecord(), GetExtensionSpecialStoragePolicy()); 258c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 259c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return db_tracker_; 260c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 261c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 262c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual VisitedLinkMaster* GetVisitedLinkMaster() { 263c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // We don't provide access to the VisitedLinkMaster when we're OffTheRecord 264c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // because we don't want to leak the sites that the user has visited before. 265c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return NULL; 266c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 267c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 26821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual ExtensionService* GetExtensionService() { 26921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen return GetOriginalProfile()->GetExtensionService(); 270c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 271c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2723345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual StatusTray* GetStatusTray() { 2733345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return GetOriginalProfile()->GetStatusTray(); 2743345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 2753345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 276c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual UserScriptMaster* GetUserScriptMaster() { 277c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return GetOriginalProfile()->GetUserScriptMaster(); 278c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 279c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 280c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual ExtensionDevToolsManager* GetExtensionDevToolsManager() { 281c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TODO(mpcomplete): figure out whether we should return the original 282c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // profile's version. 283c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return NULL; 284c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 285c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 286c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual ExtensionProcessManager* GetExtensionProcessManager() { 2873345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return extension_process_manager_.get(); 288c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 289c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 290c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual ExtensionMessageService* GetExtensionMessageService() { 291c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return GetOriginalProfile()->GetExtensionMessageService(); 292c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 293c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 294731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick virtual ExtensionEventRouter* GetExtensionEventRouter() { 295731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return GetOriginalProfile()->GetExtensionEventRouter(); 296731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 297731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 298dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual ExtensionSpecialStoragePolicy* GetExtensionSpecialStoragePolicy() { 299dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return GetOriginalProfile()->GetExtensionSpecialStoragePolicy(); 30072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 30172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 302c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual SSLHostState* GetSSLHostState() { 303c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!ssl_host_state_.get()) 304c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ssl_host_state_.reset(new SSLHostState()); 305c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 306c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DCHECK(ssl_host_state_->CalledOnValidThread()); 307c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return ssl_host_state_.get(); 308c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 309c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 310c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual net::TransportSecurityState* GetTransportSecurityState() { 311ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!transport_security_state_.get()) { 312c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch transport_security_state_ = new net::TransportSecurityState(); 313ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen transport_security_loader_ = 314ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen new TransportSecurityPersister(true /* readonly */); 315ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen transport_security_loader_->Initialize(transport_security_state_.get(), 316ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen GetOriginalProfile()->GetPath()); 317ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 318c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 319c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return transport_security_state_.get(); 320c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 321c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 322c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual HistoryService* GetHistoryService(ServiceAccessType sat) { 323c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (sat == EXPLICIT_ACCESS) 324c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return profile_->GetHistoryService(sat); 325c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 326c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NOTREACHED() << "This profile is OffTheRecord"; 327c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return NULL; 328c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 329c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 330c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual HistoryService* GetHistoryServiceWithoutCreating() { 331c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return profile_->GetHistoryServiceWithoutCreating(); 332c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 333c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 334c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual FaviconService* GetFaviconService(ServiceAccessType sat) { 335c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (sat == EXPLICIT_ACCESS) 336c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return profile_->GetFaviconService(sat); 337c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 338c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NOTREACHED() << "This profile is OffTheRecord"; 339c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return NULL; 340c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 341c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 342c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual AutocompleteClassifier* GetAutocompleteClassifier() { 343c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return profile_->GetAutocompleteClassifier(); 344c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 345c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 346c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual WebDataService* GetWebDataService(ServiceAccessType sat) { 347c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (sat == EXPLICIT_ACCESS) 348c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return profile_->GetWebDataService(sat); 349c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 350c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NOTREACHED() << "This profile is OffTheRecord"; 351c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return NULL; 352c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 353c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 354c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual WebDataService* GetWebDataServiceWithoutCreating() { 355c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return profile_->GetWebDataServiceWithoutCreating(); 356c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 357c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 358c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual PasswordStore* GetPasswordStore(ServiceAccessType sat) { 359c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (sat == EXPLICIT_ACCESS) 360c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return profile_->GetPasswordStore(sat); 361c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 362c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NOTREACHED() << "This profile is OffTheRecord"; 363c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return NULL; 364c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 365c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 366c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual PrefService* GetPrefs() { 36772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return prefs_; 36872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 36972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 37072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual PrefService* GetOffTheRecordPrefs() { 37172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return prefs_; 372c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 373c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 374c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual TemplateURLModel* GetTemplateURLModel() { 375c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return profile_->GetTemplateURLModel(); 376c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 377c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 378c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual TemplateURLFetcher* GetTemplateURLFetcher() { 379c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return profile_->GetTemplateURLFetcher(); 380c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 381c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 382c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual DownloadManager* GetDownloadManager() { 383c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!download_manager_.get()) { 3843345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick scoped_refptr<DownloadManager> dlm( 3853345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick new DownloadManager(g_browser_process->download_status_updater())); 386c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch dlm->Init(this); 387c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch download_manager_.swap(dlm); 388c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 389c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return download_manager_.get(); 390c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 391c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 392c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool HasCreatedDownloadManager() const { 393c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return (download_manager_.get() != NULL); 394c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 395c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 396c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual PersonalDataManager* GetPersonalDataManager() { 397c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return NULL; 398c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 399c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 40072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual fileapi::FileSystemContext* GetFileSystemContext() { 40121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen if (!file_system_context_) 40221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen file_system_context_ = CreateFileSystemContext( 403dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen GetPath(), IsOffTheRecord(), GetExtensionSpecialStoragePolicy()); 40421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen DCHECK(file_system_context_.get()); 40521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen return file_system_context_.get(); 4063345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 4073345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 408ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual net::URLRequestContextGetter* GetRequestContext() { 409ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return io_data_.GetMainRequestContextGetter(); 410c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 411c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 412ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual net::URLRequestContextGetter* GetRequestContextForPossibleApp( 413ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const Extension* installed_app) { 414ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (CommandLine::ForCurrentProcess()->HasSwitch( 415ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen switches::kEnableExperimentalAppManifests) && 416ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen installed_app != NULL && 417ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen installed_app->is_storage_isolated()) 418ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return GetRequestContextForIsolatedApp(installed_app->id()); 419c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 420ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return GetRequestContext(); 421c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 422c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 423ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual net::URLRequestContextGetter* GetRequestContextForMedia() { 424ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // In OTR mode, media request context is the same as the original one. 425ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return io_data_.GetMainRequestContextGetter(); 426c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 427c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 428ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual net::URLRequestContextGetter* GetRequestContextForExtensions() { 429ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return io_data_.GetExtensionsRequestContextGetter(); 430c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 431c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 432ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual net::URLRequestContextGetter* GetRequestContextForIsolatedApp( 433ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& app_id) { 434ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return io_data_.GetIsolatedAppRequestContextGetter(app_id); 435c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 436c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 437ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual const content::ResourceContext& GetResourceContext() { 438ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return io_data_.GetResourceContext(); 439c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 440c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 441c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual net::SSLConfigService* GetSSLConfigService() { 442c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return profile_->GetSSLConfigService(); 443c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 444c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 445c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual HostContentSettingsMap* GetHostContentSettingsMap() { 446c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Retrieve the host content settings map of the parent profile in order to 447c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // ensure the preferences have been migrated. 448c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch profile_->GetHostContentSettingsMap(); 449c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!host_content_settings_map_.get()) 450c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch host_content_settings_map_ = new HostContentSettingsMap(this); 451c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return host_content_settings_map_.get(); 452c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 453c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 454c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual HostZoomMap* GetHostZoomMap() { 455c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!host_zoom_map_) 456c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch host_zoom_map_ = new HostZoomMap(this); 457c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return host_zoom_map_.get(); 458c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 459c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 460c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual GeolocationContentSettingsMap* GetGeolocationContentSettingsMap() { 461c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return profile_->GetGeolocationContentSettingsMap(); 462c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 463c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 464c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual GeolocationPermissionContext* GetGeolocationPermissionContext() { 465c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return profile_->GetGeolocationPermissionContext(); 466c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 467c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 468c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual UserStyleSheetWatcher* GetUserStyleSheetWatcher() { 469c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return profile_->GetUserStyleSheetWatcher(); 470c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 471c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 472c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual FindBarState* GetFindBarState() { 473c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!find_bar_state_.get()) 474c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch find_bar_state_.reset(new FindBarState()); 475c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return find_bar_state_.get(); 476c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 477c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 478c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual SessionService* GetSessionService() { 479ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Don't save any sessions when incognito. 480c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return NULL; 481c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 482c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 483c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void ShutdownSessionService() { 484c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // We don't allow a session service, nothing to do. 485c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 486c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 487c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool HasSessionService() const { 488c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // We never have a session service. 489c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return false; 490c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 491c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 492513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual bool HasProfileSyncService() const { 493513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // We never have a profile sync service. 494513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return false; 495513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 496513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 497c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool DidLastSessionExitCleanly() { 498c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return profile_->DidLastSessionExitCleanly(); 499c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 500c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 501c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual BookmarkModel* GetBookmarkModel() { 502c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return profile_->GetBookmarkModel(); 503c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 504c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 505dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual ProtocolHandlerRegistry* GetProtocolHandlerRegistry() { 506dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return profile_->GetProtocolHandlerRegistry(); 507dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 508dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 509c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual TokenService* GetTokenService() { 510c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return NULL; 511c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 512c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 513c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual ProfileSyncService* GetProfileSyncService() { 514c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return NULL; 515c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 516c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual ProfileSyncService* GetProfileSyncService( 5183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const std::string& cros_user) { 5193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return NULL; 5203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 5213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 522513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual BrowserSignin* GetBrowserSignin() { 523513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return profile_->GetBrowserSignin(); 524513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 525513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 526c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual CloudPrintProxyService* GetCloudPrintProxyService() { 527c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return NULL; 528c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 529c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 530c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool IsSameProfile(Profile* profile) { 531c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return (profile == this) || (profile == profile_); 532c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 533c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 534c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual Time GetStartTime() const { 535c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return start_time_; 536c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 537c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 538c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual TabRestoreService* GetTabRestoreService() { 539c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return NULL; 540c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 541c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 542c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void ResetTabRestoreService() { 543c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 544c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 545c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual SpellCheckHost* GetSpellCheckHost() { 546c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return profile_->GetSpellCheckHost(); 547c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 548c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 549c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void ReinitializeSpellCheckHost(bool force) { 550c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch profile_->ReinitializeSpellCheckHost(force); 551c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 552c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 553c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual WebKitContext* GetWebKitContext() { 554ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!webkit_context_.get()) { 555ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen webkit_context_ = new WebKitContext( 556ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IsOffTheRecord(), GetPath(), GetExtensionSpecialStoragePolicy(), 557ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen false); 558ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 559c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return webkit_context_.get(); 560c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 561c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 562513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual history::TopSites* GetTopSitesWithoutCreating() { 563513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return NULL; 564513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 565513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 566c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual history::TopSites* GetTopSites() { 567c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return NULL; 568c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 569c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 570c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void MarkAsCleanShutdown() { 571c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 572c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 573ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void InitExtensions(bool extensions_enabled) { 574c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NOTREACHED(); 575c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 576c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 577dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual void InitPromoResources() { 578dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen NOTREACHED(); 579dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 580dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 581dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual void InitRegisteredProtocolHandlers() { 582c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NOTREACHED(); 583c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 584c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 585c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual NTPResourceCache* GetNTPResourceCache() { 586c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Just return the real profile resource cache. 587c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return profile_->GetNTPResourceCache(); 588c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 589c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 590c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual FilePath last_selected_directory() { 591c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const FilePath& directory = last_selected_directory_; 592c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (directory.empty()) { 593c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return profile_->last_selected_directory(); 594c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 595c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return directory; 596c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 597c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 598c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void set_last_selected_directory(const FilePath& path) { 599c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch last_selected_directory_ = path; 600c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 601c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 6023345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#if defined(OS_CHROMEOS) 60321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void SetupChromeOSEnterpriseExtensionObserver() { 60421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen profile_->SetupChromeOSEnterpriseExtensionObserver(); 60521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } 606dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 607dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual void InitChromeOSPreferences() { 608ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // The incognito profile shouldn't have Chrome OS's preferences. 609dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // The preferences are associated with the regular user profile. 610dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 6113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#endif // defined(OS_CHROMEOS) 6123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 613c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void ExitedOffTheRecordMode() { 6143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // DownloadManager is lazily created, so check before accessing it. 6153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (download_manager_.get()) { 6163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Drop our download manager so we forget about all the downloads made 617ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // in incognito mode. 6183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick download_manager_->Shutdown(); 6193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick download_manager_ = NULL; 6203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 621c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 622c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 623731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick virtual void OnBrowserAdded(const Browser* browser) { 624731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 625c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 626731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick virtual void OnBrowserRemoved(const Browser* browser) { 627731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick if (BrowserList::GetBrowserCount(this) == 0) 628c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ExitedOffTheRecordMode(); 629c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 630c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 6313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual ChromeBlobStorageContext* GetBlobStorageContext() { 6323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (!blob_storage_context_) { 6333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick blob_storage_context_ = new ChromeBlobStorageContext(); 634731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread::PostTask( 635731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread::IO, FROM_HERE, 6363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick NewRunnableMethod( 6373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick blob_storage_context_.get(), 6383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick &ChromeBlobStorageContext::InitializeOnIOThread)); 6393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 6403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return blob_storage_context_; 6413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 6423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 643731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick virtual ExtensionInfoMap* GetExtensionInfoMap() { 644731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return profile_->GetExtensionInfoMap(); 645731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 646731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 647dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual policy::ProfilePolicyConnector* GetPolicyConnector() { 648201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return NULL; 649201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 650201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 65172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ChromeURLDataManager* GetChromeURLDataManager() { 65272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (!chrome_url_data_manager_.get()) 65372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen chrome_url_data_manager_.reset(new ChromeURLDataManager(this)); 65472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return chrome_url_data_manager_.get(); 65572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 65672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 6574a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual PromoCounter* GetInstantPromoCounter() { 6584a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch return NULL; 6594a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch } 6604a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 66172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#if defined(OS_CHROMEOS) 66272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void ChangeAppLocale(const std::string& locale, AppLocaleChangedVia) { 66372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 664dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual void OnLogin() { 665dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 66672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#endif // defined(OS_CHROMEOS) 66772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 668201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch virtual PrefProxyConfigTracker* GetProxyConfigTracker() { 66972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (!pref_proxy_config_tracker_) 67072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen pref_proxy_config_tracker_ = new PrefProxyConfigTracker(GetPrefs()); 67172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 67272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return pref_proxy_config_tracker_; 673201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 674201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 675dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual prerender::PrerenderManager* GetPrerenderManager() { 67621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // We do not allow prerendering in OTR profiles at this point. 67721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // TODO(tburkard): Figure out if we want to support this, and how, at some 67821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // point in the future. 67921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen return NULL; 68021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } 68121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 682c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 683c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationRegistrar registrar_; 684c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 685c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The real underlying profile. 686c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Profile* profile_; 687c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 68872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Weak pointer owned by |profile_|. 68972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen PrefService* prefs_; 69072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 6913345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick scoped_ptr<ExtensionProcessManager> extension_process_manager_; 6923345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 693dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen OffTheRecordProfileIOData::Handle io_data_; 6943345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 695c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The download manager that only stores downloaded items in memory. 696c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<DownloadManager> download_manager_; 697c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 698c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // We use a non-writable content settings map for OTR. 699c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<HostContentSettingsMap> host_content_settings_map_; 700c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 701c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Use a separate zoom map for OTR. 702c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<HostZoomMap> host_zoom_map_; 703c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 704c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Use a special WebKit context for OTR browsing. 705c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<WebKitContext> webkit_context_; 706c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 707c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // We don't want SSLHostState from the OTR profile to leak back to the main 708c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // profile because then the main profile would learn some of the host names 709c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // the user visited while OTR. 710c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<SSLHostState> ssl_host_state_; 711c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 712c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Use a separate FindBarState so search terms do not leak back to the main 713c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // profile. 714c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<FindBarState> find_bar_state_; 715c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 716c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The TransportSecurityState that only stores enabled sites in memory. 717c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<net::TransportSecurityState> 718c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch transport_security_state_; 719c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 720c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Time we were started. 721c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Time start_time_; 722c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick scoped_refptr<ChromeAppCacheService> appcache_service_; 7243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 725c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The main database tracker for this profile. 726c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Should be used only on the file thread. 727c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<webkit_database::DatabaseTracker> db_tracker_; 728c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 729c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath last_selected_directory_; 730c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick scoped_refptr<ChromeBlobStorageContext> blob_storage_context_; 732c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // The file_system context for this profile. 73472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_refptr<fileapi::FileSystemContext> file_system_context_; 73572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 73672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_refptr<PrefProxyConfigTracker> pref_proxy_config_tracker_; 73772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 73872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_ptr<ChromeURLDataManager> chrome_url_data_manager_; 739c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 740ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Used read-only. 741ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_refptr<TransportSecurityPersister> transport_security_loader_; 742ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 7433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick DISALLOW_COPY_AND_ASSIGN(OffTheRecordProfileImpl); 7443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}; 745c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 74672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#if defined(OS_CHROMEOS) 74772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Special case of the OffTheRecordProfileImpl which is used while Guest 74872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// session in CrOS. 74972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass GuestSessionProfile : public OffTheRecordProfileImpl { 75072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen public: 75172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen explicit GuestSessionProfile(Profile* real_profile) 75272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen : OffTheRecordProfileImpl(real_profile) { 75372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 75472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 75572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual PersonalDataManager* GetPersonalDataManager() { 75672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return GetOriginalProfile()->GetPersonalDataManager(); 75772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 758dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 759dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual void InitChromeOSPreferences() { 760dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen chromeos_preferences_.reset(new chromeos::Preferences()); 761dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen chromeos_preferences_->Init(GetPrefs()); 762dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 763dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 764dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen private: 765dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // The guest user should be able to customize Chrome OS preferences. 766dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen scoped_ptr<chromeos::Preferences> chromeos_preferences_; 76772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}; 76872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#endif 76972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 770731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickProfile* Profile::CreateOffTheRecordProfile() { 77172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#if defined(OS_CHROMEOS) 77272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (Profile::IsGuestSession()) 77372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return new GuestSessionProfile(this); 77472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#endif 7753345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return new OffTheRecordProfileImpl(this); 776c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 777