13551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// Copyright 2013 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) 53551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "content/shell/browser/shell_content_browser_client.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 71e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/base_switches.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/files/file.h" 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/files/file_util.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/path_service.h" 12a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "base/strings/utf_string_conversions.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/render_process_host.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/resource_dispatcher_host.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/storage_partition.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/common/content_switches.h" 17b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "content/public/common/url_constants.h" 18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/public/common/web_preferences.h" 1903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "content/shell/browser/ipc_echo_message_filter.h" 203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "content/shell/browser/shell.h" 213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "content/shell/browser/shell_browser_context.h" 223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "content/shell/browser/shell_browser_main_parts.h" 233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "content/shell/browser/shell_devtools_delegate.h" 243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "content/shell/browser/shell_message_filter.h" 253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "content/shell/browser/shell_net_log.h" 265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "content/shell/browser/shell_notification_manager.h" 273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "content/shell/browser/shell_quota_permission_context.h" 283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "content/shell/browser/shell_resource_dispatcher_host_delegate.h" 293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "content/shell/browser/shell_web_contents_view_delegate_creator.h" 303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "content/shell/browser/webkit_test_controller.h" 31b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "content/shell/common/shell_messages.h" 32b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "content/shell/common/shell_switches.h" 33b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "content/shell/common/webkit_test_helpers.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/shell/geolocation/shell_access_token_store.h" 357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "net/url_request/url_request_context_getter.h" 367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h" 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/android/path_utils.h" 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/crash/browser/crash_dump_manager_android.h" 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/shell/android/shell_descriptors.h" 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#if defined(OS_POSIX) && !defined(OS_MACOSX) 451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/debug/leak_annotations.h" 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/crash/app/breakpad_linux.h" 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/crash/browser/crash_handler_host_linux.h" 481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "content/public/common/content_descriptors.h" 491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif 501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 51a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#if defined(OS_WIN) 52a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "content/common/sandbox_win.h" 53a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "sandbox/win/src/sandbox.h" 54a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#endif 55a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)ShellContentBrowserClient* g_browser_client; 61c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdochbool g_swap_processes_for_redirect = false; 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID) 641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)breakpad::CrashHandlerHostLinux* CreateCrashHandlerHost( 651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const std::string& process_type) { 661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) base::FilePath dumps_path = 671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) CommandLine::ForCurrentProcess()->GetSwitchValuePath( 681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) switches::kCrashDumpsDir); 691e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { 701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ANNOTATE_SCOPED_MEMORY_LEAK; 711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) breakpad::CrashHandlerHostLinux* crash_handler = 721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) new breakpad::CrashHandlerHostLinux( 731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) process_type, dumps_path, false); 741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) crash_handler->StartUploaderThread(); 751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return crash_handler; 761e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 781e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)int GetCrashSignalFD(const CommandLine& command_line) { 801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (!breakpad::IsCrashReporterEnabled()) 811e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return -1; 821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) std::string process_type = 841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) command_line.GetSwitchValueASCII(switches::kProcessType); 851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 861e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (process_type == switches::kRendererProcess) { 871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) static breakpad::CrashHandlerHostLinux* crash_handler = NULL; 881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (!crash_handler) 891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) crash_handler = CreateCrashHandlerHost(process_type); 901e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return crash_handler->GetDeathSignalSocket(); 911e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 921e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 931e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (process_type == switches::kPluginProcess) { 941e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) static breakpad::CrashHandlerHostLinux* crash_handler = NULL; 951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (!crash_handler) 961e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) crash_handler = CreateCrashHandlerHost(process_type); 971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return crash_handler->GetDeathSignalSocket(); 981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1001e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (process_type == switches::kPpapiPluginProcess) { 1011e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) static breakpad::CrashHandlerHostLinux* crash_handler = NULL; 1021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (!crash_handler) 1031e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) crash_handler = CreateCrashHandlerHost(process_type); 1041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return crash_handler->GetDeathSignalSocket(); 1051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 1061e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1071e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (process_type == switches::kGpuProcess) { 1081e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) static breakpad::CrashHandlerHostLinux* crash_handler = NULL; 1091e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (!crash_handler) 1101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) crash_handler = CreateCrashHandlerHost(process_type); 1111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return crash_handler->GetDeathSignalSocket(); 1121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 1131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return -1; 1151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif // defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID) 1171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void RequestDesktopNotificationPermissionOnIO( 1195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const GURL& source_origin, 1205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) RenderFrameHost* render_frame_host, 1215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const base::Callback<void(blink::WebNotificationPermission)>& callback) { 1225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ShellNotificationManager* manager = 1235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ShellContentBrowserClient::Get()->GetShellNotificationManager(); 1245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (manager) 1255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) manager->RequestPermission(source_origin, callback); 1265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) else 1275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) callback.Run(blink::WebNotificationPermissionAllowed); 1285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)ShellContentBrowserClient* ShellContentBrowserClient::Get() { 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return g_browser_client; 134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 136c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdochvoid ShellContentBrowserClient::SetSwapProcessesForRedirect(bool swap) { 137c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch g_swap_processes_for_redirect = swap; 138c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch} 139c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ShellContentBrowserClient::ShellContentBrowserClient() 141a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) : shell_browser_main_parts_(NULL) { 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(!g_browser_client); 143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) g_browser_client = this; 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!CommandLine::ForCurrentProcess()->HasSwitch(switches::kDumpRenderTree)) 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webkit_source_dir_ = GetWebKitRootDirFilePath(); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ShellContentBrowserClient::~ShellContentBrowserClient() { 150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) g_browser_client = NULL; 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)ShellNotificationManager* 1545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)ShellContentBrowserClient::GetShellNotificationManager() { 1555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 1565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!CommandLine::ForCurrentProcess()->HasSwitch(switches::kDumpRenderTree)) 1575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return NULL; 1585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!shell_notification_manager_) 1605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) shell_notification_manager_.reset(new ShellNotificationManager()); 1615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return shell_notification_manager_.get(); 1635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowserMainParts* ShellContentBrowserClient::CreateBrowserMainParts( 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const MainFunctionParams& parameters) { 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) shell_browser_main_parts_ = new ShellBrowserMainParts(parameters); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return shell_browser_main_parts_; 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void ShellContentBrowserClient::RenderProcessWillLaunch( 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderProcessHost* host) { 17303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kExposeIpcEcho)) 17403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) host->AddFilter(new IPCEchoMessageFilter()); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!CommandLine::ForCurrentProcess()->HasSwitch(switches::kDumpRenderTree)) 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) host->AddFilter(new ShellMessageFilter( 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) host->GetID(), 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserContext::GetDefaultStoragePartition(browser_context()) 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ->GetDatabaseTracker(), 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserContext::GetDefaultStoragePartition(browser_context()) 1827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ->GetQuotaManager(), 1837dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch BrowserContext::GetDefaultStoragePartition(browser_context()) 1847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ->GetURLRequestContext())); 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) host->Send(new ShellViewMsg_SetWebKitSourceDir(webkit_source_dir_)); 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)net::URLRequestContextGetter* ShellContentBrowserClient::CreateRequestContext( 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserContext* content_browser_context, 190a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ProtocolHandlerMap* protocol_handlers, 191cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) URLRequestInterceptorScopedVector request_interceptors) { 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShellBrowserContext* shell_browser_context = 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShellBrowserContextForBrowserContext(content_browser_context); 194a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return shell_browser_context->CreateRequestContext( 195cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) protocol_handlers, request_interceptors.Pass()); 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)net::URLRequestContextGetter* 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ShellContentBrowserClient::CreateRequestContextForStoragePartition( 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserContext* content_browser_context, 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& partition_path, 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool in_memory, 203a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ProtocolHandlerMap* protocol_handlers, 204cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) URLRequestInterceptorScopedVector request_interceptors) { 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShellBrowserContext* shell_browser_context = 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShellBrowserContextForBrowserContext(content_browser_context); 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return shell_browser_context->CreateRequestContextForStoragePartition( 208a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) partition_path, 209a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) in_memory, 210a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) protocol_handlers, 211cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) request_interceptors.Pass()); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 214b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)bool ShellContentBrowserClient::IsHandledURL(const GURL& url) { 215b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) if (!url.is_valid()) 216b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) return false; 2176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DCHECK_EQ(url.scheme(), base::StringToLowerASCII(url.scheme())); 218b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // Keep in sync with ProtocolHandlers added by 219b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // ShellURLRequestContextGetter::GetURLRequestContext(). 220b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) static const char* const kProtocolList[] = { 221cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) url::kBlobScheme, 222cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) url::kFileSystemScheme, 2235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) kChromeUIScheme, 2245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) kChromeDevToolsScheme, 225cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) url::kDataScheme, 226cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) url::kFileScheme, 227b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) }; 228b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) for (size_t i = 0; i < arraysize(kProtocolList); ++i) { 229b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) if (url.scheme() == kProtocolList[i]) 230b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) return true; 231b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) } 232b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) return false; 233b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)} 234b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ShellContentBrowserClient::AppendExtraCommandLineSwitches( 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine* command_line, int child_process_id) { 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kDumpRenderTree)) 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitch(switches::kDumpRenderTree); 239ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (CommandLine::ForCurrentProcess()->HasSwitch( 240010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) switches::kEnableFontAntialiasing)) 241010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) command_line->AppendSwitch(switches::kEnableFontAntialiasing); 242c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (CommandLine::ForCurrentProcess()->HasSwitch( 243ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch switches::kExposeInternalsForTesting)) 244ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch command_line->AppendSwitch(switches::kExposeInternalsForTesting); 24503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (CommandLine::ForCurrentProcess()->HasSwitch( 24603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) switches::kExposeIpcEcho)) 24703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) command_line->AppendSwitch(switches::kExposeIpcEcho); 2483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kStableReleaseMode)) 2493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) command_line->AppendSwitch(switches::kStableReleaseMode); 2501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (CommandLine::ForCurrentProcess()->HasSwitch( 2511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) switches::kEnableCrashReporter)) { 2521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) command_line->AppendSwitch(switches::kEnableCrashReporter); 2531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 2541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kCrashDumpsDir)) { 2551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) command_line->AppendSwitchPath( 2561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) switches::kCrashDumpsDir, 2571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) CommandLine::ForCurrentProcess()->GetSwitchValuePath( 2581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) switches::kCrashDumpsDir)); 2591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 2605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (CommandLine::ForCurrentProcess()->HasSwitch( 261116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch switches::kEnableLeakDetection)) { 262116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch command_line->AppendSwitchASCII( 263116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch switches::kEnableLeakDetection, 264116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CommandLine::ForCurrentProcess()->GetSwitchValueASCII( 265116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch switches::kEnableLeakDetection)); 266116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 267a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch if (CommandLine::ForCurrentProcess()->HasSwitch( 268a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch switches::kRegisterFontFiles)) { 269a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch command_line->AppendSwitchASCII( 270a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch switches::kRegisterFontFiles, 271a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch CommandLine::ForCurrentProcess()->GetSwitchValueASCII( 272a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch switches::kRegisterFontFiles)); 273a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch } 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ShellContentBrowserClient::OverrideWebkitPrefs( 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewHost* render_view_host, 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 279c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WebPreferences* prefs) { 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!CommandLine::ForCurrentProcess()->HasSwitch(switches::kDumpRenderTree)) 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebKitTestController::Get()->OverrideWebkitPrefs(prefs); 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ShellContentBrowserClient::ResourceDispatcherHostCreated() { 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resource_dispatcher_host_delegate_.reset( 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new ShellResourceDispatcherHostDelegate()); 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResourceDispatcherHost::Get()->SetDelegate( 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resource_dispatcher_host_delegate_.get()); 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string ShellContentBrowserClient::GetDefaultDownloadName() { 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return "download"; 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebContentsViewDelegate* ShellContentBrowserClient::GetWebContentsViewDelegate( 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents) { 2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if !defined(USE_AURA) 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return CreateShellWebContentsViewDelegate(web_contents); 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)QuotaPermissionContext* 3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ShellContentBrowserClient::CreateQuotaPermissionContext() { 3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return new ShellQuotaPermissionContext(); 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void ShellContentBrowserClient::RequestDesktopNotificationPermission( 3115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const GURL& source_origin, 3125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) RenderFrameHost* render_frame_host, 3135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const base::Callback<void(blink::WebNotificationPermission)>& callback) { 3145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 3155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BrowserThread::PostTask(BrowserThread::IO, 3165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FROM_HERE, 3175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::Bind(&RequestDesktopNotificationPermissionOnIO, 3185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) source_origin, 3195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) render_frame_host, 3205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) callback)); 3215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 3225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)blink::WebNotificationPermission 3245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)ShellContentBrowserClient::CheckDesktopNotificationPermission( 3255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const GURL& source_url, 3265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ResourceContext* context, 3275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int render_process_id) { 3285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ShellNotificationManager* manager = GetShellNotificationManager(); 3295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (manager) 3305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return manager->CheckPermission(source_url); 3315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return blink::WebNotificationPermissionAllowed; 3335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 3345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 335424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)SpeechRecognitionManagerDelegate* 336424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ShellContentBrowserClient::GetSpeechRecognitionManagerDelegate() { 337424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return new ShellSpeechRecognitionManagerDelegate(); 338424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 339424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 340eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnet::NetLog* ShellContentBrowserClient::GetNetLog() { 341eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return shell_browser_main_parts_->net_log(); 342eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 343eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 344c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdochbool ShellContentBrowserClient::ShouldSwapProcessesForRedirect( 345c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch ResourceContext* resource_context, 346c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch const GURL& current_url, 347c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch const GURL& new_url) { 348c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch return g_swap_processes_for_redirect; 349c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch} 350c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch 3511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciDevToolsManagerDelegate* 3521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciShellContentBrowserClient::GetDevToolsManagerDelegate() { 3531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return new ShellDevToolsManagerDelegate(browser_context()); 3541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 3551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#if defined(OS_POSIX) && !defined(OS_MACOSX) 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ShellContentBrowserClient::GetAdditionalMappedFilesForChildProcess( 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const CommandLine& command_line, 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int child_process_id, 360cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::vector<FileDescriptorInfo>* mappings) { 3611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#if defined(OS_ANDROID) 36246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) int flags = base::File::FLAG_OPEN | base::File::FLAG_READ; 3632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath pak_file; 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool r = PathService::Get(base::DIR_ANDROID_APP_DATA, &pak_file); 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(r); 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pak_file = pak_file.Append(FILE_PATH_LITERAL("paks")); 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pak_file = pak_file.Append(FILE_PATH_LITERAL("content_shell.pak")); 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 369a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::File f(pak_file, flags); 370a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!f.IsValid()) { 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED() << "Failed to open file when creating renderer process: " 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "content_shell.pak"; 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mappings->push_back( 375cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) FileDescriptorInfo(kShellPakDescriptor, base::FileDescriptor(f.Pass()))); 3761e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 3771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (breakpad::IsCrashReporterEnabled()) { 3781e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) f = breakpad::CrashDumpManager::GetInstance()->CreateMinidumpFile( 3791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) child_process_id); 380a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!f.IsValid()) { 3811e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) LOG(ERROR) << "Failed to create file for minidump, crash reporting will " 3821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) << "be disabled for this process."; 3831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } else { 384a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) mappings->push_back( 385a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) FileDescriptorInfo(kAndroidMinidumpDescriptor, 386a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::FileDescriptor(f.Pass()))); 3871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 3881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 3891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#else // !defined(OS_ANDROID) 3901e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) int crash_signal_fd = GetCrashSignalFD(command_line); 3911e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (crash_signal_fd >= 0) { 3921e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) mappings->push_back(FileDescriptorInfo( 3931e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) kCrashDumpSignal, base::FileDescriptor(crash_signal_fd, false))); 3941e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 3951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif // defined(OS_ANDROID) 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif // defined(OS_POSIX) && !defined(OS_MACOSX) 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 399a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#if defined(OS_WIN) 400a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochvoid ShellContentBrowserClient::PreSpawnRenderer(sandbox::TargetPolicy* policy, 401a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch bool* success) { 402a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Add sideloaded font files for testing. See also DIR_WINDOWS_FONTS 403a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // addition in |StartSandboxedProcess|. 404a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch std::vector<std::string> font_files = GetSideloadFontFiles(); 405a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch for (std::vector<std::string>::const_iterator i(font_files.begin()); 406a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch i != font_files.end(); 407a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ++i) { 408a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch policy->AddRule(sandbox::TargetPolicy::SUBSYS_FILES, 409a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch sandbox::TargetPolicy::FILES_ALLOW_READONLY, 410a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch base::UTF8ToWide(*i).c_str()); 411a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch } 412a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 413a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#endif // OS_WIN 414a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ShellBrowserContext* ShellContentBrowserClient::browser_context() { 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return shell_browser_main_parts_->browser_context(); 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ShellBrowserContext* 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShellContentBrowserClient::off_the_record_browser_context() { 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return shell_browser_main_parts_->off_the_record_browser_context(); 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AccessTokenStore* ShellContentBrowserClient::CreateAccessTokenStore() { 425c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return new ShellAccessTokenStore(browser_context()); 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ShellBrowserContext* 4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ShellContentBrowserClient::ShellBrowserContextForBrowserContext( 4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserContext* content_browser_context) { 4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (content_browser_context == browser_context()) 4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return browser_context(); 4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK_EQ(content_browser_context, off_the_record_browser_context()); 4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return off_the_record_browser_context(); 4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 438