15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/off_the_record_profile_impl.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/path_service.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/prefs/json_pref_store.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/strings/string_number_conversions.h" 15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_util.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "build/build_config.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/background/background_contents_service_factory.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browser_process.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/content_settings/host_content_settings_map.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/download/chrome_download_manager_delegate.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/download/download_service.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/download/download_service_factory.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/api/web_request/web_request_api.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_service.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_special_storage_policy.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_system.h" 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/geolocation/chrome_geolocation_permission_context.h" 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/geolocation/chrome_geolocation_permission_context_factory.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/io_thread.h" 30a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/media/chrome_midi_permission_context.h" 31a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/media/chrome_midi_permission_context_factory.h" 32ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "chrome/browser/net/pref_proxy_config_tracker.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/net/proxy_service_factory.h" 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/plugins/chrome_plugin_service_filter.h" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/plugins/plugin_prefs.h" 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prefs/incognito_mode_prefs.h" 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/prefs/pref_service_syncable.h" 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/themes/theme_service.h" 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/extensions/extension_icon_source.h" 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_constants.h" 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_paths.h" 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/render_messages.h" 4590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "components/browser_context_keyed_service/browser_context_dependency_manager.h" 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "components/user_prefs/user_prefs.h" 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_thread.h" 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/host_zoom_map.h" 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_process_host.h" 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/storage_partition.h" 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/url_data_source.h" 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/extension.h" 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/http/http_server_properties.h" 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/http/transport_security_state.h" 5690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "webkit/browser/database/database_tracker.h" 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_ANDROID) || defined(OS_IOS) 591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/prefs/scoped_user_pref_update.h" 60ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "chrome/browser/prefs/proxy_prefs.h" 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // defined(OS_ANDROID) || defined(OS_IOS) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/preferences.h" 657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chromeos/profiles/profile_helper.h" 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if defined(ENABLE_CONFIGURATION_POLICY) && !defined(OS_CHROMEOS) 69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/policy/cloud/user_cloud_policy_manager_factory.h" 70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif 71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::DownloadManagerDelegate; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::HostZoomMap; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NotifyOTRProfileCreatedOnIOThread(void* original_profile, 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void* otr_profile) { 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionWebRequestEventRouter::GetInstance()->OnOTRProfileCreated( 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) original_profile, otr_profile); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NotifyOTRProfileDestroyedOnIOThread(void* original_profile, 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void* otr_profile) { 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionWebRequestEventRouter::GetInstance()->OnOTRProfileDestroyed( 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) original_profile, otr_profile); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)OffTheRecordProfileImpl::OffTheRecordProfileImpl(Profile* real_profile) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : profile_(real_profile), 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs_(PrefServiceSyncable::IncognitoFromProfile(real_profile)), 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) io_data_(this), 964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) start_time_(Time::Now()) { 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Register on BrowserContext. 985e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) user_prefs::UserPrefs::Set(this, prefs_); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void OffTheRecordProfileImpl::Init() { 102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if defined(ENABLE_CONFIGURATION_POLICY) && !defined(OS_CHROMEOS) 103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Because UserCloudPolicyManager is in a component, it cannot access 104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // GetOriginalProfile. Instead, we have to inject this relation here. 105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) policy::UserCloudPolicyManagerFactory::RegisterForOffTheRecordBrowserContext( 106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) this->GetOriginalProfile(), this); 107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif 108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 10990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) BrowserContextDependencyManager::GetInstance()->CreateBrowserContextServices( 1103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) this); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_NE(IncognitoModePrefs::DISABLED, 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IncognitoModePrefs::GetAvailability(profile_->GetPrefs())); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_ANDROID) || defined(OS_IOS) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UseSystemProxy(); 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // defined(OS_ANDROID) || defined(OS_IOS) 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(oshima): Remove the need to eagerly initialize the request context 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // getter. chromeos::OnlineAttempt is illegally trying to access this 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Profile member from a thread other than the UI thread, so we need to 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // prevent a race. 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRequestContext(); 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_CHROMEOS) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InitHostZoomMap(); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make the chrome//extension-icon/ resource available. 130a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) extensions::ExtensionIconSource* icon_source = 131a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) new extensions::ExtensionIconSource(profile_); 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::URLDataSource::Add(this, icon_source); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(ENABLE_PLUGINS) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromePluginServiceFilter::GetInstance()->RegisterResourceContext( 1367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) PluginPrefs::GetForProfile(this).get(), 1377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) io_data_.GetResourceContextNoInit()); 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::IO, FROM_HERE, 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&NotifyOTRProfileCreatedOnIOThread, profile_, this)); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)OffTheRecordProfileImpl::~OffTheRecordProfileImpl() { 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MaybeSendDestroyedNotification(); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(ENABLE_PLUGINS) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromePluginServiceFilter::GetInstance()->UnregisterResourceContext( 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) io_data_.GetResourceContextNoInit()); 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) BrowserContextDependencyManager::GetInstance()->DestroyBrowserContextServices( 15490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) this); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::IO, FROM_HERE, 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&NotifyOTRProfileDestroyedOnIOThread, profile_, this)); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 160868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (host_content_settings_map_.get()) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_content_settings_map_->ShutdownOnUIThread(); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 163b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) if (pref_proxy_config_tracker_) 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_proxy_config_tracker_->DetachFromPrefService(); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clears any data the network stack contains that may be related to the 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // OTR session. 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) g_browser_process->io_thread()->ChangedToOnTheRecord(); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void OffTheRecordProfileImpl::InitHostZoomMap() { 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HostZoomMap* host_zoom_map = HostZoomMap::GetForBrowserContext(this); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HostZoomMap* parent_host_zoom_map = 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HostZoomMap::GetForBrowserContext(profile_); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_zoom_map->CopyFrom(parent_host_zoom_map); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Observe parent's HZM change for propagating change of parent's 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // change to this HZM. 1784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) zoom_subscription_ = parent_host_zoom_map->AddZoomLevelChangedCallback( 1794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::Bind(&OffTheRecordProfileImpl::OnZoomLevelChanged, 1804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::Unretained(this))); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_ANDROID) || defined(OS_IOS) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void OffTheRecordProfileImpl::UseSystemProxy() { 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Force the use of the system-assigned proxy when off the record. 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char kProxyMode[] = "mode"; 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char kProxyServer[] = "server"; 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char kProxyBypassList[] = "bypass_list"; 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char kProxyPacUrl[] = "pac_url"; 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DictionaryPrefUpdate update(prefs_, prefs::kProxy); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DictionaryValue* dict = update.Get(); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dict->SetString(kProxyMode, ProxyModeToString(ProxyPrefs::MODE_SYSTEM)); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dict->SetString(kProxyPacUrl, ""); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dict->SetString(kProxyServer, ""); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dict->SetString(kProxyBypassList, ""); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // defined(OS_ANDROID) || defined(OS_IOS) 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string OffTheRecordProfileImpl::GetProfileName() { 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Incognito profile should not return the profile name. 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return std::string(); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochbase::FilePath OffTheRecordProfileImpl::GetPath() const { 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return profile_->GetPath(); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)scoped_refptr<base::SequencedTaskRunner> 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)OffTheRecordProfileImpl::GetIOTaskRunner() { 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return profile_->GetIOTaskRunner(); 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool OffTheRecordProfileImpl::IsOffTheRecord() const { 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Profile* OffTheRecordProfileImpl::GetOffTheRecordProfile() { 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return this; 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void OffTheRecordProfileImpl::DestroyOffTheRecordProfile() { 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Suicide is bad! 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool OffTheRecordProfileImpl::HasOffTheRecordProfile() { 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Profile* OffTheRecordProfileImpl::GetOriginalProfile() { 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return profile_; 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ExtensionService* OffTheRecordProfileImpl::GetExtensionService() { 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return extensions::ExtensionSystem::Get(this)->extension_service(); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ExtensionSpecialStoragePolicy* 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OffTheRecordProfileImpl::GetExtensionSpecialStoragePolicy() { 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetOriginalProfile()->GetExtensionSpecialStoragePolicy(); 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 243a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)bool OffTheRecordProfileImpl::IsManaged() { 244a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return GetOriginalProfile()->IsManaged(); 245a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 246a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PrefService* OffTheRecordProfileImpl::GetPrefs() { 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return prefs_; 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PrefService* OffTheRecordProfileImpl::GetOffTheRecordPrefs() { 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return prefs_; 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DownloadManagerDelegate* OffTheRecordProfileImpl::GetDownloadManagerDelegate() { 256a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return DownloadServiceFactory::GetForBrowserContext(this)-> 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetDownloadManagerDelegate(); 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)net::URLRequestContextGetter* OffTheRecordProfileImpl::GetRequestContext() { 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GetDefaultStoragePartition(this)->GetURLRequestContext(); 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)net::URLRequestContextGetter* OffTheRecordProfileImpl::CreateRequestContext( 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::ProtocolHandlerMap* protocol_handlers) { 2667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return io_data_.CreateMainRequestContextGetter(protocol_handlers).get(); 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)net::URLRequestContextGetter* 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OffTheRecordProfileImpl::GetRequestContextForRenderProcess( 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int renderer_child_id) { 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderProcessHost* rph = content::RenderProcessHost::FromID( 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) renderer_child_id); 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return rph->GetStoragePartition()->GetURLRequestContext(); 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)net::URLRequestContextGetter* 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OffTheRecordProfileImpl::GetMediaRequestContext() { 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // In OTR mode, media request context is the same as the original one. 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetRequestContext(); 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)net::URLRequestContextGetter* 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OffTheRecordProfileImpl::GetMediaRequestContextForRenderProcess( 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int renderer_child_id) { 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // In OTR mode, media request context is the same as the original one. 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetRequestContextForRenderProcess(renderer_child_id); 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)net::URLRequestContextGetter* 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)OffTheRecordProfileImpl::GetMediaRequestContextForStoragePartition( 2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& partition_path, 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool in_memory) { 2947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return io_data_.GetIsolatedAppRequestContextGetter(partition_path, in_memory) 2957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) .get(); 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2987dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid OffTheRecordProfileImpl::RequestMIDISysExPermission( 2997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int render_process_id, 3007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int render_view_id, 3011e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) int bridge_id, 3027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const GURL& requesting_frame, 3037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const MIDISysExPermissionCallback& callback) { 304a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ChromeMIDIPermissionContext* context = 305a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ChromeMIDIPermissionContextFactory::GetForProfile(this); 306a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) context->RequestMIDISysExPermission(render_process_id, 307a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) render_view_id, 3081e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) bridge_id, 309a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) requesting_frame, 310a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) callback); 3117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 3127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 3131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void OffTheRecordProfileImpl::CancelMIDISysExPermissionRequest( 3141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) int render_process_id, 3151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) int render_view_id, 3161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) int bridge_id, 3171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const GURL& requesting_frame) { 3181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ChromeMIDIPermissionContext* context = 3191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ChromeMIDIPermissionContextFactory::GetForProfile(this); 3201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) context->CancelMIDISysExPermissionRequest( 3211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) render_process_id, render_view_id, bridge_id, requesting_frame); 3221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 3231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)net::URLRequestContextGetter* 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OffTheRecordProfileImpl::GetRequestContextForExtensions() { 3267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return io_data_.GetExtensionsRequestContextGetter().get(); 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)net::URLRequestContextGetter* 3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OffTheRecordProfileImpl::CreateRequestContextForStoragePartition( 3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& partition_path, 3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool in_memory, 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::ProtocolHandlerMap* protocol_handlers) { 3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return io_data_.CreateIsolatedAppRequestContextGetter( 3357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) partition_path, in_memory, protocol_handlers).get(); 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)content::ResourceContext* OffTheRecordProfileImpl::GetResourceContext() { 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return io_data_.GetResourceContext(); 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)net::SSLConfigService* OffTheRecordProfileImpl::GetSSLConfigService() { 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return profile_->GetSSLConfigService(); 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HostContentSettingsMap* OffTheRecordProfileImpl::GetHostContentSettingsMap() { 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Retrieve the host content settings map of the parent profile in order to 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ensure the preferences have been migrated. 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_->GetHostContentSettingsMap(); 350868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (!host_content_settings_map_.get()) { 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_content_settings_map_ = new HostContentSettingsMap(GetPrefs(), true); 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionService* extension_service = GetExtensionService(); 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (extension_service) 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_content_settings_map_->RegisterExtensionService(extension_service); 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return host_content_settings_map_.get(); 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)content::GeolocationPermissionContext* 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OffTheRecordProfileImpl::GetGeolocationPermissionContext() { 363c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return ChromeGeolocationPermissionContextFactory::GetForProfile(this); 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)quota::SpecialStoragePolicy* 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OffTheRecordProfileImpl::GetSpecialStoragePolicy() { 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetExtensionSpecialStoragePolicy(); 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool OffTheRecordProfileImpl::IsSameProfile(Profile* profile) { 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (profile == this) || (profile == profile_); 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Time OffTheRecordProfileImpl::GetStartTime() const { 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return start_time_; 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)history::TopSites* OffTheRecordProfileImpl::GetTopSitesWithoutCreating() { 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)history::TopSites* OffTheRecordProfileImpl::GetTopSites() { 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void OffTheRecordProfileImpl::SetExitType(ExitType exit_type) { 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::FilePath OffTheRecordProfileImpl::last_selected_directory() { 3912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& directory = last_selected_directory_; 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (directory.empty()) { 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return profile_->last_selected_directory(); 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return directory; 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void OffTheRecordProfileImpl::set_last_selected_directory( 3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& path) { 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_selected_directory_ = path; 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool OffTheRecordProfileImpl::WasCreatedByVersionOrLater( 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& version) { 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return profile_->WasCreatedByVersionOrLater(version); 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Profile::ExitType OffTheRecordProfileImpl::GetLastSessionExitType() { 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return profile_->GetLastSessionExitType(); 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 4134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void OffTheRecordProfileImpl::ChangeAppLocale(const std::string& locale, 4144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) AppLocaleChangedVia) { 4154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 4164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 4174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void OffTheRecordProfileImpl::OnLogin() { 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void OffTheRecordProfileImpl::InitChromeOSPreferences() { 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The incognito profile shouldn't have Chrome OS's preferences. 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The preferences are associated with the regular user profile. 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_CHROMEOS) 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PrefProxyConfigTracker* OffTheRecordProfileImpl::GetProxyConfigTracker() { 4277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (!pref_proxy_config_tracker_) 4287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch pref_proxy_config_tracker_.reset(CreateProxyConfigTracker()); 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return pref_proxy_config_tracker_.get(); 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)chrome_browser_net::Predictor* OffTheRecordProfileImpl::GetNetworkPredictor() { 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We do not store information about websites visited in OTR profiles which 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is necessary for a Predictor, so we do not have a Predictor at all. 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void OffTheRecordProfileImpl::ClearNetworkingHistorySince( 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time time, 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Closure& completion) { 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Nothing to do here, our transport security state is read-only. 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Still, fire the callback to indicate we have finished, otherwise the 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // BrowsingDataRemover will never be destroyed and the dialog will never be 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // closed. We must do this asynchronously in order to avoid reentrancy issues. 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!completion.is_null()) { 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, completion); 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GURL OffTheRecordProfileImpl::GetHomePage() { 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return profile_->GetHomePage(); 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Special case of the OffTheRecordProfileImpl which is used while Guest 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// session in CrOS. 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GuestSessionProfile : public OffTheRecordProfileImpl { 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit GuestSessionProfile(Profile* real_profile) 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : OffTheRecordProfileImpl(real_profile) { 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void InitChromeOSPreferences() OVERRIDE { 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chromeos_preferences_.reset(new chromeos::Preferences()); 4650f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) chromeos_preferences_->Init(static_cast<PrefServiceSyncable*>(GetPrefs()), 4660f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) true /* is_primary_profile */); 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The guest user should be able to customize Chrome OS preferences. 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<chromeos::Preferences> chromeos_preferences_; 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Profile* Profile::CreateOffTheRecordProfile() { 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OffTheRecordProfileImpl* profile = NULL; 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (IsGuestSession()) 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile = new GuestSessionProfile(this); 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!profile) 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile = new OffTheRecordProfileImpl(this); 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile->Init(); 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return profile; 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void OffTheRecordProfileImpl::OnZoomLevelChanged( 4882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const HostZoomMap::ZoomLevelChange& change) { 4892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HostZoomMap* host_zoom_map = HostZoomMap::GetForBrowserContext(this); 4902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switch (change.mode) { 4912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case HostZoomMap::ZOOM_CHANGED_TEMPORARY_ZOOM: 4922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 4932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case HostZoomMap::ZOOM_CHANGED_FOR_HOST: 4942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) host_zoom_map->SetZoomLevelForHost(change.host, change.zoom_level); 4952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 4962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case HostZoomMap::ZOOM_CHANGED_FOR_SCHEME_AND_HOST: 4972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) host_zoom_map->SetZoomLevelForHostAndScheme(change.scheme, 4982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) change.host, 4992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) change.zoom_level); 5002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 5012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 5047dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochPrefProxyConfigTracker* OffTheRecordProfileImpl::CreateProxyConfigTracker() { 5057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(OS_CHROMEOS) 5067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (chromeos::ProfileHelper::IsSigninProfile(this)) { 5077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return ProxyServiceFactory::CreatePrefProxyConfigTrackerOfLocalState( 5087dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch g_browser_process->local_state()); 5097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 5107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif // defined(OS_CHROMEOS) 5117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return ProxyServiceFactory::CreatePrefProxyConfigTrackerOfProfile( 5127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch GetPrefs(), g_browser_process->local_state()); 5137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 514