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" 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/dom_distiller/profile_utils.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/download/chrome_download_manager_delegate.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/download/download_service.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/download/download_service_factory.h" 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#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/io_thread.h" 275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/net/chrome_url_request_context_getter.h" 28ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "chrome/browser/net/pref_proxy_config_tracker.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/net/proxy_service_factory.h" 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/plugins/chrome_plugin_service_filter.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/plugins/plugin_prefs.h" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prefs/incognito_mode_prefs.h" 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/prefs/pref_service_syncable.h" 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/ssl/chrome_ssl_host_state_delegate.h" 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/ssl/chrome_ssl_host_state_delegate_factory.h" 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/themes/theme_service.h" 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/extensions/extension_icon_source.h" 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_constants.h" 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_paths.h" 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/render_messages.h" 43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/keyed_service/content/browser_context_dependency_manager.h" 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "components/user_prefs/user_prefs.h" 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_thread.h" 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/host_zoom_map.h" 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_process_host.h" 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/storage_partition.h" 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/url_data_source.h" 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/http/http_server_properties.h" 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/http/transport_security_state.h" 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "storage/browser/database/database_tracker.h" 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(OS_ANDROID) 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/media/protected_media_identifier_permission_context.h" 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/media/protected_media_identifier_permission_context_factory.h" 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif // defined(OS_ANDROID) 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_ANDROID) || defined(OS_IOS) 611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/prefs/scoped_user_pref_update.h" 62ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "chrome/browser/prefs/proxy_prefs.h" 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // defined(OS_ANDROID) || defined(OS_IOS) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/preferences.h" 677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chromeos/profiles/profile_helper.h" 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if defined(ENABLE_CONFIGURATION_POLICY) && !defined(OS_CHROMEOS) 71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/policy/cloud/user_cloud_policy_manager_factory.h" 72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif 73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 74f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/browser/api/web_request/web_request_api.h" 76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "extensions/browser/extension_system.h" 776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "extensions/browser/guest_view/guest_view_manager.h" 78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "extensions/common/extension.h" 796d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#endif 806d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread; 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::DownloadManagerDelegate; 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::HostZoomMap; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 856d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NotifyOTRProfileCreatedOnIOThread(void* original_profile, 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void* otr_profile) { 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionWebRequestEventRouter::GetInstance()->OnOTRBrowserContextCreated( 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) original_profile, otr_profile); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NotifyOTRProfileDestroyedOnIOThread(void* original_profile, 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void* otr_profile) { 961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionWebRequestEventRouter::GetInstance()->OnOTRBrowserContextDestroyed( 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) original_profile, otr_profile); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 1016d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#endif 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)OffTheRecordProfileImpl::OffTheRecordProfileImpl(Profile* real_profile) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : profile_(real_profile), 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs_(PrefServiceSyncable::IncognitoFromProfile(real_profile)), 1064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) start_time_(Time::Now()) { 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Register on BrowserContext. 1085e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) user_prefs::UserPrefs::Set(this, prefs_); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void OffTheRecordProfileImpl::Init() { 112a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // The construction of OffTheRecordProfileIOData::Handle needs the profile 113a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // type returned by this->GetProfileType(). Since GetProfileType() is a 114a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // virtual member function, we cannot call the function defined in the most 115a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // derived class (e.g. GuestSessionProfile) until a ctor finishes. Thus, 116a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // we have to instantiate OffTheRecordProfileIOData::Handle here after a ctor. 117a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) InitIoData(); 118a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 119f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if defined(ENABLE_CONFIGURATION_POLICY) && !defined(OS_CHROMEOS) 120f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Because UserCloudPolicyManager is in a component, it cannot access 121f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // GetOriginalProfile. Instead, we have to inject this relation here. 122f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) policy::UserCloudPolicyManagerFactory::RegisterForOffTheRecordBrowserContext( 123f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) this->GetOriginalProfile(), this); 124f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif 125f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 12690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) BrowserContextDependencyManager::GetInstance()->CreateBrowserContextServices( 1273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) this); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Guest profiles may always be OTR. Check IncognitoModePrefs otherwise. 13003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) DCHECK(profile_->IsGuestSession() || 13103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) IncognitoModePrefs::GetAvailability(profile_->GetPrefs()) != 13203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) IncognitoModePrefs::DISABLED); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_ANDROID) || defined(OS_IOS) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UseSystemProxy(); 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // defined(OS_ANDROID) || defined(OS_IOS) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(oshima): Remove the need to eagerly initialize the request context 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // getter. chromeos::OnlineAttempt is illegally trying to access this 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Profile member from a thread other than the UI thread, so we need to 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // prevent a race. 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRequestContext(); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_CHROMEOS) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InitHostZoomMap(); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(ENABLE_PLUGINS) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromePluginServiceFilter::GetInstance()->RegisterResourceContext( 1507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) PluginPrefs::GetForProfile(this).get(), 151a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) io_data_->GetResourceContextNoInit()); 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1546d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 155116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Make the chrome//extension-icon/ resource available. 156116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extensions::ExtensionIconSource* icon_source = 157116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch new extensions::ExtensionIconSource(profile_); 158116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::URLDataSource::Add(this, icon_source); 159116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::IO, FROM_HERE, 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&NotifyOTRProfileCreatedOnIOThread, profile_, this)); 1636d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#endif 1641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // The DomDistillerViewerSource is not a normal WebUI so it must be registered 1661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // as a URLDataSource early. 1671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci RegisterDomDistillerViewerSource(this); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)OffTheRecordProfileImpl::~OffTheRecordProfileImpl() { 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MaybeSendDestroyedNotification(); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(ENABLE_PLUGINS) 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromePluginServiceFilter::GetInstance()->UnregisterResourceContext( 175a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) io_data_->GetResourceContextNoInit()); 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) BrowserContextDependencyManager::GetInstance()->DestroyBrowserContextServices( 17990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) this); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1816d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::IO, FROM_HERE, 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&NotifyOTRProfileDestroyedOnIOThread, profile_, this)); 1856d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#endif 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 187868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (host_content_settings_map_.get()) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_content_settings_map_->ShutdownOnUIThread(); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 190b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) if (pref_proxy_config_tracker_) 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_proxy_config_tracker_->DetachFromPrefService(); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clears any data the network stack contains that may be related to the 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // OTR session. 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) g_browser_process->io_thread()->ChangedToOnTheRecord(); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 198a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void OffTheRecordProfileImpl::InitIoData() { 199a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) io_data_.reset(new OffTheRecordProfileIOData::Handle(this)); 200a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 201a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void OffTheRecordProfileImpl::InitHostZoomMap() { 2031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci HostZoomMap* host_zoom_map = HostZoomMap::GetDefaultForBrowserContext(this); 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HostZoomMap* parent_host_zoom_map = 2051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci HostZoomMap::GetDefaultForBrowserContext(profile_); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_zoom_map->CopyFrom(parent_host_zoom_map); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Observe parent's HZM change for propagating change of parent's 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // change to this HZM. 2094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) zoom_subscription_ = parent_host_zoom_map->AddZoomLevelChangedCallback( 2104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::Bind(&OffTheRecordProfileImpl::OnZoomLevelChanged, 2114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::Unretained(this))); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_ANDROID) || defined(OS_IOS) 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void OffTheRecordProfileImpl::UseSystemProxy() { 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Force the use of the system-assigned proxy when off the record. 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char kProxyMode[] = "mode"; 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char kProxyServer[] = "server"; 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char kProxyBypassList[] = "bypass_list"; 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char kProxyPacUrl[] = "pac_url"; 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DictionaryPrefUpdate update(prefs_, prefs::kProxy); 2225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue* dict = update.Get(); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dict->SetString(kProxyMode, ProxyModeToString(ProxyPrefs::MODE_SYSTEM)); 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dict->SetString(kProxyPacUrl, ""); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dict->SetString(kProxyServer, ""); 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dict->SetString(kProxyBypassList, ""); 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // defined(OS_ANDROID) || defined(OS_IOS) 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string OffTheRecordProfileImpl::GetProfileName() { 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Incognito profile should not return the profile name. 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return std::string(); 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)Profile::ProfileType OffTheRecordProfileImpl::GetProfileType() const { 236a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return INCOGNITO_PROFILE; 237a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 238a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 2397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochbase::FilePath OffTheRecordProfileImpl::GetPath() const { 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return profile_->GetPath(); 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)scoped_refptr<base::SequencedTaskRunner> 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)OffTheRecordProfileImpl::GetIOTaskRunner() { 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return profile_->GetIOTaskRunner(); 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool OffTheRecordProfileImpl::IsOffTheRecord() const { 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Profile* OffTheRecordProfileImpl::GetOffTheRecordProfile() { 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return this; 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void OffTheRecordProfileImpl::DestroyOffTheRecordProfile() { 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Suicide is bad! 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool OffTheRecordProfileImpl::HasOffTheRecordProfile() { 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Profile* OffTheRecordProfileImpl::GetOriginalProfile() { 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return profile_; 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ExtensionSpecialStoragePolicy* 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OffTheRecordProfileImpl::GetExtensionSpecialStoragePolicy() { 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetOriginalProfile()->GetExtensionSpecialStoragePolicy(); 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 274f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)bool OffTheRecordProfileImpl::IsSupervised() { 275f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return GetOriginalProfile()->IsSupervised(); 276a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 277a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PrefService* OffTheRecordProfileImpl::GetPrefs() { 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return prefs_; 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PrefService* OffTheRecordProfileImpl::GetOffTheRecordPrefs() { 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return prefs_; 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DownloadManagerDelegate* OffTheRecordProfileImpl::GetDownloadManagerDelegate() { 287a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return DownloadServiceFactory::GetForBrowserContext(this)-> 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetDownloadManagerDelegate(); 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)net::URLRequestContextGetter* OffTheRecordProfileImpl::GetRequestContext() { 2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GetDefaultStoragePartition(this)->GetURLRequestContext(); 2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)net::URLRequestContextGetter* OffTheRecordProfileImpl::CreateRequestContext( 296a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) content::ProtocolHandlerMap* protocol_handlers, 297cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::URLRequestInterceptorScopedVector request_interceptors) { 298a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return io_data_->CreateMainRequestContextGetter( 299cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) protocol_handlers, request_interceptors.Pass()).get(); 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)net::URLRequestContextGetter* 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OffTheRecordProfileImpl::GetRequestContextForRenderProcess( 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int renderer_child_id) { 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderProcessHost* rph = content::RenderProcessHost::FromID( 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) renderer_child_id); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return rph->GetStoragePartition()->GetURLRequestContext(); 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)net::URLRequestContextGetter* 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OffTheRecordProfileImpl::GetMediaRequestContext() { 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // In OTR mode, media request context is the same as the original one. 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetRequestContext(); 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)net::URLRequestContextGetter* 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OffTheRecordProfileImpl::GetMediaRequestContextForRenderProcess( 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int renderer_child_id) { 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // In OTR mode, media request context is the same as the original one. 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetRequestContextForRenderProcess(renderer_child_id); 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)net::URLRequestContextGetter* 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)OffTheRecordProfileImpl::GetMediaRequestContextForStoragePartition( 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& partition_path, 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool in_memory) { 327a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return io_data_->GetIsolatedAppRequestContextGetter(partition_path, in_memory) 3287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) .get(); 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)net::URLRequestContextGetter* 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OffTheRecordProfileImpl::GetRequestContextForExtensions() { 333a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return io_data_->GetExtensionsRequestContextGetter().get(); 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)net::URLRequestContextGetter* 337a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)OffTheRecordProfileImpl::CreateRequestContextForStoragePartition( 338a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const base::FilePath& partition_path, 339a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) bool in_memory, 340a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) content::ProtocolHandlerMap* protocol_handlers, 341cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::URLRequestInterceptorScopedVector request_interceptors) { 342a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return io_data_->CreateIsolatedAppRequestContextGetter( 343a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) partition_path, 344a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) in_memory, 345a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) protocol_handlers, 346cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) request_interceptors.Pass()).get(); 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)content::ResourceContext* OffTheRecordProfileImpl::GetResourceContext() { 350a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return io_data_->GetResourceContext(); 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)net::SSLConfigService* OffTheRecordProfileImpl::GetSSLConfigService() { 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return profile_->GetSSLConfigService(); 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HostContentSettingsMap* OffTheRecordProfileImpl::GetHostContentSettingsMap() { 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Retrieve the host content settings map of the parent profile in order to 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ensure the preferences have been migrated. 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_->GetHostContentSettingsMap(); 361868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (!host_content_settings_map_.get()) { 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_content_settings_map_ = new HostContentSettingsMap(GetPrefs(), true); 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 364116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ExtensionService* extension_service = 365116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extensions::ExtensionSystem::Get(this)->extension_service(); 3661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (extension_service) { 3671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci extension_service->RegisterContentSettings( 3681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci host_content_settings_map_.get()); 3691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return host_content_settings_map_.get(); 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)content::BrowserPluginGuestManager* OffTheRecordProfileImpl::GetGuestManager() { 376f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 3776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return extensions::GuestViewManager::FromBrowserContext(this); 378f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#else 379f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return NULL; 380f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif 381010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 382010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 38303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)storage::SpecialStoragePolicy* 3845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)OffTheRecordProfileImpl::GetSpecialStoragePolicy() { 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetExtensionSpecialStoragePolicy(); 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 388f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)content::PushMessagingService* 389f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)OffTheRecordProfileImpl::GetPushMessagingService() { 390f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // TODO(johnme): Support push messaging in incognito if possible. 391f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return NULL; 392f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 393f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 3945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)content::SSLHostStateDelegate* 3955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)OffTheRecordProfileImpl::GetSSLHostStateDelegate() { 3965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return ChromeSSLHostStateDelegateFactory::GetForProfile(this); 3975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 3985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool OffTheRecordProfileImpl::IsSameProfile(Profile* profile) { 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (profile == this) || (profile == profile_); 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Time OffTheRecordProfileImpl::GetStartTime() const { 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return start_time_; 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)history::TopSites* OffTheRecordProfileImpl::GetTopSitesWithoutCreating() { 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)history::TopSites* OffTheRecordProfileImpl::GetTopSites() { 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void OffTheRecordProfileImpl::SetExitType(ExitType exit_type) { 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::FilePath OffTheRecordProfileImpl::last_selected_directory() { 4192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& directory = last_selected_directory_; 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (directory.empty()) { 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return profile_->last_selected_directory(); 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return directory; 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void OffTheRecordProfileImpl::set_last_selected_directory( 4272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& path) { 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_selected_directory_ = path; 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool OffTheRecordProfileImpl::WasCreatedByVersionOrLater( 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& version) { 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return profile_->WasCreatedByVersionOrLater(version); 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Profile::ExitType OffTheRecordProfileImpl::GetLastSessionExitType() { 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return profile_->GetLastSessionExitType(); 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 4414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void OffTheRecordProfileImpl::ChangeAppLocale(const std::string& locale, 4424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) AppLocaleChangedVia) { 4434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 4444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 4454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void OffTheRecordProfileImpl::OnLogin() { 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void OffTheRecordProfileImpl::InitChromeOSPreferences() { 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The incognito profile shouldn't have Chrome OS's preferences. 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The preferences are associated with the regular user profile. 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_CHROMEOS) 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PrefProxyConfigTracker* OffTheRecordProfileImpl::GetProxyConfigTracker() { 4557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (!pref_proxy_config_tracker_) 4567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch pref_proxy_config_tracker_.reset(CreateProxyConfigTracker()); 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return pref_proxy_config_tracker_.get(); 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)chrome_browser_net::Predictor* OffTheRecordProfileImpl::GetNetworkPredictor() { 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We do not store information about websites visited in OTR profiles which 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is necessary for a Predictor, so we do not have a Predictor at all. 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 46646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)DevToolsNetworkController* 46746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)OffTheRecordProfileImpl::GetDevToolsNetworkController() { 46846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return io_data_->GetDevToolsNetworkController(); 46946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 47046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void OffTheRecordProfileImpl::ClearNetworkingHistorySince( 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time time, 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Closure& completion) { 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Nothing to do here, our transport security state is read-only. 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Still, fire the callback to indicate we have finished, otherwise the 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // BrowsingDataRemover will never be destroyed and the dialog will never be 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // closed. We must do this asynchronously in order to avoid reentrancy issues. 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!completion.is_null()) { 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, completion); 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GURL OffTheRecordProfileImpl::GetHomePage() { 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return profile_->GetHomePage(); 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Special case of the OffTheRecordProfileImpl which is used while Guest 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// session in CrOS. 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GuestSessionProfile : public OffTheRecordProfileImpl { 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit GuestSessionProfile(Profile* real_profile) 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : OffTheRecordProfileImpl(real_profile) { 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 496a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual ProfileType GetProfileType() const OVERRIDE { 497a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return GUEST_PROFILE; 498a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 499a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 5002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void InitChromeOSPreferences() OVERRIDE { 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chromeos_preferences_.reset(new chromeos::Preferences()); 5026e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) chromeos_preferences_->Init( 50303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) this, user_manager::UserManager::Get()->GetActiveUser()); 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The guest user should be able to customize Chrome OS preferences. 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<chromeos::Preferences> chromeos_preferences_; 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Profile* Profile::CreateOffTheRecordProfile() { 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OffTheRecordProfileImpl* profile = NULL; 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 5152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (IsGuestSession()) 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile = new GuestSessionProfile(this); 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!profile) 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile = new OffTheRecordProfileImpl(this); 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile->Init(); 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return profile; 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void OffTheRecordProfileImpl::OnZoomLevelChanged( 5252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const HostZoomMap::ZoomLevelChange& change) { 5261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci HostZoomMap* host_zoom_map = HostZoomMap::GetDefaultForBrowserContext(this); 5272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switch (change.mode) { 5282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case HostZoomMap::ZOOM_CHANGED_TEMPORARY_ZOOM: 5292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 5302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case HostZoomMap::ZOOM_CHANGED_FOR_HOST: 5312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) host_zoom_map->SetZoomLevelForHost(change.host, change.zoom_level); 5322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 5332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case HostZoomMap::ZOOM_CHANGED_FOR_SCHEME_AND_HOST: 5342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) host_zoom_map->SetZoomLevelForHostAndScheme(change.scheme, 5352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) change.host, 5362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) change.zoom_level); 5372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 5382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 5417dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochPrefProxyConfigTracker* OffTheRecordProfileImpl::CreateProxyConfigTracker() { 5427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(OS_CHROMEOS) 5437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (chromeos::ProfileHelper::IsSigninProfile(this)) { 5447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return ProxyServiceFactory::CreatePrefProxyConfigTrackerOfLocalState( 5457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch g_browser_process->local_state()); 5467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 5477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif // defined(OS_CHROMEOS) 5487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return ProxyServiceFactory::CreatePrefProxyConfigTrackerOfProfile( 5497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch GetPrefs(), g_browser_process->local_state()); 5507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 551