chrome_content_browser_client.cc revision 03b57e008b61dfcb1fbad3aea950ae0e001748b0
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/chrome_content_browser_client.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <set> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <utility> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/lazy_instance.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/path_service.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/prefs/scoped_user_pref_update.h" 17868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_number_conversions.h" 18868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 19868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/threading/sequenced_worker_pool.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browser_about_handler.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browser_process.h" 227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/browser_shutdown.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browsing_data/browsing_data_helper.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browsing_data/browsing_data_remover.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/character_encoding.h" 266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/browser/chrome_content_browser_client_parts.h" 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/chrome_net_benchmarking_message_filter.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chrome_quota_permission_context.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/content_settings/content_settings_utils.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/content_settings/cookie_settings.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/content_settings/host_content_settings_map.h" 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/content_settings/permission_request_id.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/content_settings/tab_specific_content_settings.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/defaults.h" 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/devtools/chrome_devtools_manager_delegate.h" 363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "chrome/browser/download/download_prefs.h" 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/font_family_cache.h" 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/geolocation/chrome_access_token_store.h" 39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/geolocation/geolocation_permission_context.h" 40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/geolocation/geolocation_permission_context_factory.h" 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/media/cast_transport_host_filter.h" 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/media/media_capture_devices_dispatcher.h" 43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/media/midi_permission_context.h" 44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/media/midi_permission_context_factory.h" 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.h" 468bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "chrome/browser/nacl_host/nacl_browser_delegate_impl.h" 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/net/chrome_net_log.h" 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/notifications/desktop_notification_service.h" 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/notifications/desktop_notification_service_factory.h" 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/platform_util.h" 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/plugins/plugin_info_message_filter.h" 52558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "chrome/browser/prerender/prerender_final_status.h" 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prerender/prerender_manager.h" 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prerender/prerender_manager_factory.h" 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prerender/prerender_message_filter.h" 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prerender/prerender_tracker.h" 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/printing/printing_message_filter.h" 5890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.h" 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile_io_data.h" 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/renderer_host/chrome_render_message_filter.h" 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/renderer_host/pepper/chrome_browser_pepper_host_factory.h" 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/search/instant_service.h" 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/search/instant_service_factory.h" 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/search/search.h" 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/search_engines/search_provider_install_state_message_filter.h" 67a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/browser/signin/principals_message_filter.h" 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/speech/chrome_speech_recognition_manager_delegate.h" 69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/speech/extension_api/tts_engine_extension_api.h" 70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/speech/tts_controller.h" 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/speech/tts_message_filter.h" 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ssl/ssl_add_certificate.h" 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ssl/ssl_blocking_page.h" 7446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/ssl/ssl_client_certificate_selector.h" 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/tab_contents/tab_util.h" 7658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/ui/blocked_content/blocked_window_params.h" 77424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "chrome/browser/ui/blocked_content/popup_blocker_tab_helper.h" 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/chrome_select_file_policy.h" 79eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/browser/ui/sync/sync_promo_ui.h" 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/tab_contents/chrome_web_contents_view_delegate.h" 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/chrome_web_ui_controller_factory.h" 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_constants.h" 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_paths.h" 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/common/content_settings.h" 868bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "chrome/common/env_vars.h" 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/logging_chrome.h" 887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/common/pepper_permission_util.h" 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/render_messages.h" 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/url_constants.h" 9203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "chrome/grit/generated_resources.h" 934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/installer/util/google_update_settings.h" 94a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)#include "chromeos/chromeos_constants.h" 95010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "components/cdm/browser/cdm_message_filter_android.h" 960529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "components/cloud_devices/common/cloud_devices_switches.h" 975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/dom_distiller/core/url_constants.h" 986d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "components/google/core/browser/google_util.h" 995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/metrics/client_info.h" 100cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/pref_registry/pref_registry_syncable.h" 1010529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "components/signin/core/common/profile_management_switches.h" 1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/translate/core/common/translate_switches.h" 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_child_process_host.h" 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_main_parts.h" 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_ppapi_host.h" 106868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "content/public/browser/browser_thread.h" 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_url_handler.h" 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/child_process_data.h" 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/child_process_security_policy.h" 1105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "content/public/browser/desktop_notification_delegate.h" 1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/public/browser/render_frame_host.h" 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_process_host.h" 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_view_host.h" 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/resource_context.h" 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/site_instance.h" 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/child_process_host.h" 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/content_descriptors.h" 119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/public/common/show_desktop_notification_params.h" 12068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "content/public/common/url_utils.h" 121116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/public/common/web_preferences.h" 1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_system.h" 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "extensions/common/constants.h" 124f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/extension.h" 1255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/common/extension_set.h" 126f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/manifest_handlers/shared_module_info.h" 127f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/permissions/permissions_data.h" 128effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "extensions/common/permissions/socket_permission.h" 129ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "extensions/common/switches.h" 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/base/mime_util.h" 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/cookies/canonical_cookie.h" 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/cookies/cookie_options.h" 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/ssl/ssl_cert_request_info.h" 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/host/ppapi_host.h" 1355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ppapi/shared_impl/ppapi_switches.h" 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/resource/resource_bundle.h" 13803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "ui/resources/grit/ui_resources.h" 139eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "webkit/browser/fileapi/external_mount_points.h" 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 1425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/win/windows_version.h" 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chrome_browser_main_win.h" 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "sandbox/win/src/sandbox_policy.h" 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX) 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chrome_browser_main_mac.h" 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/spellchecker/spellcheck_message_filter_mac.h" 1488bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "components/breakpad/app/breakpad_mac.h" 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_CHROMEOS) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/chrome_browser_main_chromeos.h" 1515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/chromeos/drive/fileapi/file_system_backend_delegate.h" 152116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/chromeos/file_manager/app_id.h" 1530529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "chrome/browser/chromeos/file_system_provider/fileapi/backend_delegate.h" 1547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chromeos/fileapi/file_system_backend.h" 1555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/chromeos/fileapi/mtp_file_system_backend_delegate.h" 156b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "chrome/browser/chromeos/login/startup_utils.h" 157558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "chrome/browser/chromeos/system/input_device_settings.h" 158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/chromeos_switches.h" 1596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "components/user_manager/user_manager.h" 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_LINUX) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chrome_browser_main_linux.h" 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_ANDROID) 163effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/android/new_tab_page_url_handler.h" 16458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/android/webapps/single_tab_mode_tab_helper.h" 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chrome_browser_main_android.h" 166f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/media/protected_media_identifier_permission_context.h" 167f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/media/protected_media_identifier_permission_context_factory.h" 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/descriptors_android.h" 1698bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "components/breakpad/browser/crash_dump_manager_android.h" 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_POSIX) 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chrome_browser_main_posix.h" 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#if defined(OS_POSIX) && !defined(OS_MACOSX) 1758bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "base/debug/leak_annotations.h" 1768bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "components/breakpad/app/breakpad_linux.h" 1778bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "components/breakpad/browser/crash_handler_host_linux.h" 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/ui_base_paths.h" 1828bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "ui/gfx/android/device_display_info.h" 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if !defined(OS_CHROMEOS) 186effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/signin/chrome_signin_client.h" 187effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/signin/chrome_signin_client_factory.h" 188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/signin/signin_manager_factory.h" 189e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "components/signin/core/browser/signin_manager.h" 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(TOOLKIT_VIEWS) 1937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/ui/views/chrome_browser_main_extra_parts_views.h" 1947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif 1957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(USE_ASH) 1977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/ui/views/ash/chrome_browser_main_extra_parts_ash.h" 1987dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif 1997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(USE_AURA) 2017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/ui/aura/chrome_browser_main_extra_parts_aura.h" 2027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif 2037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(USE_X11) 2057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_browser_main_extra_parts_x11.h" 2067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif 2077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 20846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#if defined(ENABLE_CAPTIVE_PORTAL_DETECTION) 20946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/captive_portal/captive_portal_tab_helper.h" 21046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif 21146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 212116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if !defined(DISABLE_NACL) 213116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/nacl/browser/nacl_browser.h" 214116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/nacl/browser/nacl_host_message_filter.h" 215116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/nacl/browser/nacl_process_host.h" 216116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/nacl/common/nacl_process_type.h" 217116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/nacl/common/nacl_switches.h" 218116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 219116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 22046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 2216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/browser/extensions/chrome_content_browser_client_extensions_part.h" 2225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/extensions/extension_service.h" 2235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/extensions/extension_util.h" 224f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/guest_view/web_view/web_view_guest.h" 225116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/guest_view/web_view/web_view_permission_helper.h" 226116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/guest_view/web_view/web_view_renderer_state.h" 2276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "extensions/browser/guest_view/guest_view_base.h" 2286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "extensions/browser/guest_view/guest_view_constants.h" 2296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "extensions/browser/guest_view/guest_view_manager.h" 23003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "extensions/browser/suggest_permission_util.h" 2315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/common/manifest_handlers/background_info.h" 23246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif 23346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 234a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#if defined(ENABLE_SPELLCHECK) 235a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/spellchecker/spellcheck_message_filter.h" 236a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#endif 237a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 23823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#if defined(ENABLE_SERVICE_DISCOVERY) 239a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/browser/local_discovery/storage/privet_filesystem_backend.h" 240a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif 241a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 24246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#if defined(ENABLE_WEBRTC) 24346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/media/webrtc_logging_handler_host.h" 24446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif 24546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::FileDescriptor; 2476d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)using blink::WebWindowFeatures; 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::AccessTokenStore; 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread; 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserURLHandler; 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::ChildProcessSecurityPolicy; 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::QuotaPermissionContext; 2530529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochusing content::RenderFrameHost; 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::RenderViewHost; 255116680a4aac90f2aa7413d9095a592090648e557Ben Murdochusing content::ResourceType; 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::SiteInstance; 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContents; 258116680a4aac90f2aa7413d9095a592090648e557Ben Murdochusing content::WebPreferences; 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using extensions::APIPermission; 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using extensions::Extension; 261f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using extensions::InfoMap; 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using extensions::Manifest; 263558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochusing message_center::NotifierId; 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if defined(OS_POSIX) 266a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)using content::FileDescriptorInfo; 267a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif 268a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 2696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 2706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)using extensions::ChromeContentBrowserClientExtensionsPart; 2716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif 2726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Cached version of the locale so we can return the locale on the I/O 276c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// thread. 277c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)base::LazyInstance<std::string> g_io_thread_application_locale; 278c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 279868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#if defined(ENABLE_PLUGINS) 2806d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)// TODO(teravest): Add renderer-side API-specific checking for these APIs so 2816d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)// that blanket permission isn't granted to all dev channel APIs for these. 2826d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)// http://crbug.com/386743 2836d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)const char* const kPredefinedAllowedDevChannelOrigins[] = { 2846d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) "6EAED1924DB611B6EEF2A664BD077BE7EAD33B8F", // see crbug.com/383937 2856d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) "4EB74897CB187C7633357C2FE832E0AD6A44883A" // see crbug.com/383937 2866d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)}; 2876d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 288cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const char* const kPredefinedAllowedFileHandleOrigins[] = { 2890f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "6EAED1924DB611B6EEF2A664BD077BE7EAD33B8F", // see crbug.com/234789 2900f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "4EB74897CB187C7633357C2FE832E0AD6A44883A" // see crbug.com/234789 2910f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)}; 2920f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 293cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const char* const kPredefinedAllowedSocketOrigins[] = { 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "okddffdblfhhnmhodogpojmfkjmhinfp", // Test SSH Client 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "pnhechapfaindjhompbnflcldabbghjo", // HTerm App (SSH Client) 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "bglhmjfplikpjnfoegeomebmfnkjomhe", // see crbug.com/122126 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "gbchcmhmhahfdphkhkmpfmihenigjmpp", // Chrome Remote Desktop 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "kgngmbheleoaphbjbaiobfdepmghbfah", // Pre-release Chrome Remote Desktop 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "odkaodonbgfohohmklejpjiejmcipmib", // Dogfood Chrome Remote Desktop 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "ojoimpklfciegopdfgeenehpalipignm", // Chromoting canary 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "cbkkbcmdlboombapidmoeolnmdacpkch", // see crbug.com/129089 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "hhnbmknkdabfoieppbbljkhkfjcmcbjh", // see crbug.com/134099 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "mablfbjkhmhkmefkjjacnbaikjkipphg", // see crbug.com/134099 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "pdeelgamlgannhelgoegilelnnojegoh", // see crbug.com/134099 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "cabapfdbkniadpollkckdnedaanlciaj", // see crbug.com/134099 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "mapljbgnjledlpdmlchihnmeclmefbba", // see crbug.com/134099 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "ghbfeebgmiidnnmeobbbaiamklmpbpii", // see crbug.com/134099 3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "jdfhpkjeckflbbleddjlpimecpbjdeep", // see crbug.com/142514 309c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "iabmpiboiopbgfabjmgeedhcmjenhbla", // see crbug.com/165080 310c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "B7CF8A292249681AF81771650BA4CEEAF19A4560", // see crbug.com/165080 311c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "6EAED1924DB611B6EEF2A664BD077BE7EAD33B8F", // see crbug.com/234789 312c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "4EB74897CB187C7633357C2FE832E0AD6A44883A", // see crbug.com/234789 313c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "7525AF4F66763A70A883C4700529F647B470E4D2", // see crbug.com/238084 314c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "0B549507088E1564D672F7942EB87CA4DAD73972", // see crbug.com/238084 315c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "864288364E239573E777D3E0E36864E590E95C74" // see crbug.com/238084 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 317868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns a copy of the given url with its host set to given host and path set 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// to given path. Other parts of the url will be the same. 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GURL ReplaceURLHostAndPath(const GURL& url, 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& host, 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& path) { 3245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu url::Replacements<char> replacements; 3255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu replacements.SetHost(host.c_str(), url::Component(0, host.length())); 3265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu replacements.SetPath(path.c_str(), url::Component(0, path.length())); 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return url.ReplaceComponents(replacements); 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Maps "foo://bar/baz/" to "foo://chrome/bar/baz/". 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GURL AddUberHost(const GURL& url) { 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string uber_host = chrome::kChromeUIUberHost; 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string new_path = url.host() + url.path(); 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ReplaceURLHostAndPath(url, uber_host, new_path); 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// If url->host() is "chrome" and url->path() has characters other than the 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// first slash, changes the url from "foo://chrome/bar/" to "foo://bar/" and 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// returns true. Otherwise returns false. 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RemoveUberHost(GURL* url) { 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (url->host() != chrome::kChromeUIUberHost) 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (url->path().empty() || url->path() == "/") 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string old_path = url->path(); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string::size_type separator = old_path.find('/', 1); 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string new_host; 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string new_path; 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (separator == std::string::npos) { 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_host = old_path.substr(1); 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_host = old_path.substr(1, separator - 1); 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_path = old_path.substr(separator); 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Do not allow URLs with paths empty before the first slash since we can't 3617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // have an empty host. (e.g "foo://chrome//") 3627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (new_host.empty()) 3637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return false; 3647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *url = ReplaceURLHostAndPath(*url, new_host, new_path); 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) DCHECK(url->is_valid()); 3687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Handles rewriting Web UI URLs. 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool HandleWebUI(GURL* url, content::BrowserContext* browser_context) { 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Do not handle special URLs such as "about:foo" 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!url->host().empty()) { 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL chrome_url = AddUberHost(*url); 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Handle valid "chrome://chrome/foo" URLs so the reverse handler will 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // be called. 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ChromeWebUIControllerFactory::GetInstance()->UseWebUIForURL( 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser_context, chrome_url)) 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ChromeWebUIControllerFactory::GetInstance()->UseWebUIForURL( 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser_context, *url)) 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Special case : in ChromeOS in Guest mode bookmarks and history are 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // disabled for security reasons. New tab page explains the reasons, so 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // we redirect user to new tab page. 3936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (user_manager::UserManager::Get()->IsLoggedInAsGuest()) { 3945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (url->SchemeIs(content::kChromeUIScheme) && 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (url->DomainIs(chrome::kChromeUIBookmarksHost) || 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url->DomainIs(chrome::kChromeUIHistoryHost))) { 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Rewrite with new tab URL 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *url = GURL(chrome::kChromeUINewTabURL); 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Reverse URL handler for Web UI. Maps "chrome://chrome/foo/" to 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// "chrome://foo/". 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool HandleWebUIReverse(GURL* url, content::BrowserContext* browser_context) { 4095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!url->is_valid() || !url->SchemeIs(content::kChromeUIScheme)) 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return RemoveUberHost(url); 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool CertMatchesFilter(const net::X509Certificate& cert, 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::DictionaryValue& filter) { 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(markusheintz): This is the minimal required filter implementation. 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Implement a better matcher. 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // An empty filter matches any client certificate since no requirements are 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // specified at all. 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (filter.empty()) 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string common_name; 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (filter.GetString("ISSUER.CN", &common_name) && 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (cert.issuer().common_name == common_name)) { 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if defined(OS_POSIX) && !defined(OS_ANDROID) && !defined(OS_MACOSX) 4348bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)breakpad::CrashHandlerHostLinux* CreateCrashHandlerHost( 4358bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const std::string& process_type) { 4368bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) base::FilePath dumps_path; 4378bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) PathService::Get(chrome::DIR_CRASH_DUMPS, &dumps_path); 4388bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) { 4398bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ANNOTATE_SCOPED_MEMORY_LEAK; 440cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool upload = (getenv(env_vars::kHeadless) == NULL); 4418bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) breakpad::CrashHandlerHostLinux* crash_handler = 442cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) new breakpad::CrashHandlerHostLinux(process_type, dumps_path, upload); 4438bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) crash_handler->StartUploaderThread(); 4448bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return crash_handler; 4458bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 4468bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 4478bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int GetCrashSignalFD(const CommandLine& command_line) { 449cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Extensions have the same process type as renderers. 4505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (command_line.HasSwitch(extensions::switches::kExtensionProcess)) { 4518bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) static breakpad::CrashHandlerHostLinux* crash_handler = NULL; 4528bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (!crash_handler) 4538bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) crash_handler = CreateCrashHandlerHost("extension"); 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return crash_handler->GetDeathSignalSocket(); 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string process_type = 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line.GetSwitchValueASCII(switches::kProcessType); 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4608bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (process_type == switches::kRendererProcess) { 4618bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) static breakpad::CrashHandlerHostLinux* crash_handler = NULL; 4628bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (!crash_handler) 4638bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) crash_handler = CreateCrashHandlerHost(process_type); 4648bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return crash_handler->GetDeathSignalSocket(); 4658bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4678bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (process_type == switches::kPluginProcess) { 4688bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) static breakpad::CrashHandlerHostLinux* crash_handler = NULL; 4698bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (!crash_handler) 4708bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) crash_handler = CreateCrashHandlerHost(process_type); 4718bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return crash_handler->GetDeathSignalSocket(); 4728bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4748bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (process_type == switches::kPpapiPluginProcess) { 4758bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) static breakpad::CrashHandlerHostLinux* crash_handler = NULL; 4768bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (!crash_handler) 4778bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) crash_handler = CreateCrashHandlerHost(process_type); 4788bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return crash_handler->GetDeathSignalSocket(); 4798bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4818bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (process_type == switches::kGpuProcess) { 4828bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) static breakpad::CrashHandlerHostLinux* crash_handler = NULL; 4838bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (!crash_handler) 4848bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) crash_handler = CreateCrashHandlerHost(process_type); 4858bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return crash_handler->GetDeathSignalSocket(); 4868bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return -1; 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif // defined(OS_POSIX) && !defined(OS_ANDROID) && !defined(OS_MACOSX) 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 492c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if !defined(OS_CHROMEOS) 4932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)GURL GetEffectiveURLForSignin(const GURL& url) { 4942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHECK(SigninManager::IsWebBasedSigninFlowURL(url)); 4952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL effective_url(SigninManager::kChromeSigninEffectiveSite); 4972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Copy the path because the argument to SetPathStr must outlive 4982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the Replacements object. 4992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string path_copy(url.path()); 5002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL::Replacements replacements; 5012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) replacements.SetPathStr(path_copy); 5022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) effective_url = effective_url.ReplaceComponents(replacements); 5032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return effective_url; 5042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 505c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 506c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 507c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SetApplicationLocaleOnIOThread(const std::string& locale) { 508c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 509c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) g_io_thread_application_locale.Get() = locale; 510c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 511c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 51258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void HandleBlockedPopupOnUIThread(const BlockedWindowParams& params) { 51358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) WebContents* tab = tab_util::GetWebContentsByID(params.render_process_id(), 51458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) params.opener_id()); 515558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch if (!tab) 516558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch return; 517558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 5185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prerender::PrerenderContents* prerender_contents = 5195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prerender::PrerenderContents::FromWebContents(tab); 5205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (prerender_contents) { 5215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prerender_contents->Destroy(prerender::FINAL_STATUS_CREATE_NEW_WINDOW); 5225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return; 5235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 5245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 525558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch PopupBlockerTabHelper* popup_helper = 526558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch PopupBlockerTabHelper::FromWebContents(tab); 527558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch if (!popup_helper) 528558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch return; 52958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) popup_helper->AddBlockedPopup(params); 53058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 53158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 53258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(OS_ANDROID) 5338bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 53458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void HandleSingleTabModeBlockOnUIThread(const BlockedWindowParams& params) { 53558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) WebContents* web_contents = 53658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) tab_util::GetWebContentsByID(params.render_process_id(), 53758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) params.opener_id()); 53858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (!web_contents) 53958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return; 54058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 54158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) SingleTabModeTabHelper::FromWebContents(web_contents)->HandleOpenUrl(params); 542558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch} 5438bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 5440f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)float GetDeviceScaleAdjustment() { 5458bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) static const float kMinFSM = 1.05f; 5468bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) static const int kWidthForMinFSM = 320; 5478bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) static const float kMaxFSM = 1.3f; 5488bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) static const int kWidthForMaxFSM = 800; 5498bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 5508bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) gfx::DeviceDisplayInfo info; 5518bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) int minWidth = info.GetSmallestDIPWidth(); 5528bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 5538bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (minWidth <= kWidthForMinFSM) 5548bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return kMinFSM; 5558bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (minWidth >= kWidthForMaxFSM) 5568bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return kMaxFSM; 5578bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 5588bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // The font scale multiplier varies linearly between kMinFSM and kMaxFSM. 5598bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) float ratio = static_cast<float>(minWidth - kWidthForMinFSM) / 5608bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) (kWidthForMaxFSM - kWidthForMinFSM); 5618bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return ratio * (kMaxFSM - kMinFSM) + kMinFSM; 5628bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 5638bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 56458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif // defined(OS_ANDROID) 565558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 5666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 5676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// By default, JavaScript and images are enabled in guest content. 5686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void GetGuestViewDefaultContentSettingRules( 5696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) bool incognito, 5706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) RendererContentSettingRules* rules) { 5716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) rules->image_rules.push_back( 5726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ContentSettingPatternSource(ContentSettingsPattern::Wildcard(), 5736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ContentSettingsPattern::Wildcard(), 5746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) CONTENT_SETTING_ALLOW, 5756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::string(), 5766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) incognito)); 5776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 5786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) rules->script_rules.push_back( 5796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ContentSettingPatternSource(ContentSettingsPattern::Wildcard(), 5806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ContentSettingsPattern::Wildcard(), 5816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) CONTENT_SETTING_ALLOW, 5826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::string(), 5836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) incognito)); 5846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 5856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif // defined(ENALBE_EXTENSIONS) 5866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chrome { 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 591cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)ChromeContentBrowserClient::ChromeContentBrowserClient() 592116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch : prerender_tracker_(NULL), 593116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch weak_factory_(this) { 594868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#if defined(ENABLE_PLUGINS) 5956d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) for (size_t i = 0; i < arraysize(kPredefinedAllowedDevChannelOrigins); ++i) 5966d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) allowed_dev_channel_origins_.insert(kPredefinedAllowedDevChannelOrigins[i]); 5970f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) for (size_t i = 0; i < arraysize(kPredefinedAllowedFileHandleOrigins); ++i) 5980f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) allowed_file_handle_origins_.insert(kPredefinedAllowedFileHandleOrigins[i]); 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < arraysize(kPredefinedAllowedSocketOrigins); ++i) 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed_socket_origins_.insert(kPredefinedAllowedSocketOrigins[i]); 601868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif 60290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 603116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if !defined(OS_ANDROID) 604116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TtsExtensionEngine* tts_extension_engine = TtsExtensionEngine::GetInstance(); 605116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TtsController::GetInstance()->SetTtsEngineDelegate(tts_extension_engine); 606116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 6075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6086e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 6095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extra_parts_.push_back(new ChromeContentBrowserClientExtensionsPart); 6106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ChromeContentBrowserClient::~ChromeContentBrowserClient() { 6145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (int i = static_cast<int>(extra_parts_.size()) - 1; i >= 0; --i) 6155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) delete extra_parts_[i]; 6165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extra_parts_.clear(); 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 6207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid ChromeContentBrowserClient::RegisterProfilePrefs( 621c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable* registry) { 622c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterBooleanPref( 623c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kDisable3DAPIs, 624c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 625c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 626c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterBooleanPref( 627c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kEnableHyperlinkAuditing, 628c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) true, 629c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 6306d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) registry->RegisterListPref( 6316d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) prefs::kEnableDeprecatedWebPlatformFeatures, 6326d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 633c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 634c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 635c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// static 636c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void ChromeContentBrowserClient::SetApplicationLocale( 637c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& locale) { 638c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 639c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 640c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // This object is guaranteed to outlive all threads so we don't have to 641c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // worry about the lack of refcounting and can just post as Unretained. 642c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // 643c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // The common case is that this function is called early in Chrome startup 644c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // before any threads are created (it will also be called later if the user 645c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // changes the pref). In this case, there will be no threads created and 646c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // posting will fail. When there are no threads, we can just set the string 647c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // without worrying about threadsafety. 648c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, 649c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Bind(&SetApplicationLocaleOnIOThread, locale))) { 650c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) g_io_thread_application_locale.Get() = locale; 651c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)content::BrowserMainParts* ChromeContentBrowserClient::CreateBrowserMainParts( 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::MainFunctionParams& parameters) { 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeBrowserMainParts* main_parts; 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Construct the Main browser parts based on the OS type. 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) main_parts = new ChromeBrowserMainPartsWin(parameters); 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX) 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) main_parts = new ChromeBrowserMainPartsMac(parameters); 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_CHROMEOS) 6632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) main_parts = new chromeos::ChromeBrowserMainPartsChromeos(parameters); 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_LINUX) 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) main_parts = new ChromeBrowserMainPartsLinux(parameters); 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_ANDROID) 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) main_parts = new ChromeBrowserMainPartsAndroid(parameters); 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_POSIX) 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) main_parts = new ChromeBrowserMainPartsPosix(parameters); 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) main_parts = new ChromeBrowserMainParts(parameters); 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 67590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) chrome::AddProfilesExtraParts(main_parts); 67690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Construct additional browser parts. Stages are called in the order in 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // which they are added. 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(TOOLKIT_VIEWS) 6807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch main_parts->AddParts(new ChromeBrowserMainExtraPartsViews()); 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_ASH) 6847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch main_parts->AddParts(new ChromeBrowserMainExtraPartsAsh()); 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_AURA) 6887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch main_parts->AddParts(new ChromeBrowserMainExtraPartsAura()); 6897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif 6907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 6917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(USE_X11) 6927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch main_parts->AddParts(new ChromeBrowserMainExtraPartsX11()); 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chrome::AddMetricsExtraParts(main_parts); 696c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return main_parts; 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string ChromeContentBrowserClient::GetStoragePartitionIdForSite( 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserContext* browser_context, 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& site) { 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string partition_id; 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The partition ID for webview guest processes is the string value of its 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // SiteInstance URL - "chrome-guest://app_id/persist?partition". 707a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (site.SchemeIs(content::kGuestScheme)) { 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) partition_id = site.spec(); 709a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } else if (site.GetOrigin().spec() == kChromeUIChromeSigninURL) { 710a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Chrome signin page has an embedded iframe of extension and web content, 711a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // thus it must be isolated from other webUI pages. 712a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) partition_id = site.GetOrigin().spec(); 713a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(IsValidStoragePartitionId(browser_context, partition_id)); 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return partition_id; 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::IsValidStoragePartitionId( 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserContext* browser_context, 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& partition_id) { 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The default ID is empty and is always valid. 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (partition_id.empty()) 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GURL(partition_id).is_valid(); 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::GetStoragePartitionConfigForSite( 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserContext* browser_context, 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& site, 7322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool can_be_default, 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string* partition_domain, 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string* partition_name, 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool* in_memory) { 7362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Default to the browser-wide storage partition and override based on |site| 7372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // below. 7382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) partition_domain->clear(); 7392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) partition_name->clear(); 7402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *in_memory = false; 7412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 742f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool success = false; 743f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 7446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) success = extensions::WebViewGuest::GetGuestPartitionConfigForSite( 745f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) site, partition_domain, partition_name, in_memory); 746f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 747f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!success && site.SchemeIs(extensions::kExtensionScheme)) { 7482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If |can_be_default| is false, the caller is stating that the |site| 7492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // should be parsed as if it had isolated storage. In particular it is 7502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // important to NOT check ExtensionService for the is_storage_isolated() 7512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // attribute because this code path is run during Extension uninstall 7522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // to do cleanup after the Extension has already been unloaded from the 7532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // ExtensionService. 7542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_isolated = !can_be_default; 7552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (can_be_default) { 756effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (extensions::util::SiteHasIsolatedStorage(site, browser_context)) 757effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch is_isolated = true; 7582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (is_isolated) { 7612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHECK(site.has_host()); 7622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // For extensions with isolated storage, the the host of the |site| is 7632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the |partition_domain|. The |in_memory| and |partition_name| are only 7642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // used in guest schemes so they are cleared here. 7652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *partition_domain = site.host(); 7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *in_memory = false; 7672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) partition_name->clear(); 7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 769f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) success = true; 770f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 771f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif 772f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 773f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (!success && (site.GetOrigin().spec() == kChromeUIChromeSigninURL)) { 7745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Chrome signin page has an embedded iframe of extension and web content, 7755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // thus it must be isolated from other webUI pages. 7765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *partition_domain = chrome::kChromeUIChromeSigninHost; 7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Assert that if |can_be_default| is false, the code above must have found a 7802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // non-default partition. If this fails, the caller has a serious logic 7812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // error about which StoragePartition they expect to be in and it is not 7822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // safe to continue. 7832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHECK(can_be_default || !partition_domain->empty()); 7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)content::WebContentsViewDelegate* 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeContentBrowserClient::GetWebContentsViewDelegate( 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WebContents* web_contents) { 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return chrome::CreateWebContentsViewDelegate(web_contents); 7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void ChromeContentBrowserClient::RenderProcessWillLaunch( 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderProcessHost* host) { 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int id = host->GetID(); 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext(host->GetBrowserContext()); 7962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::URLRequestContextGetter* context = 7972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile->GetRequestContextForRenderProcess(id); 7982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 79946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) host->AddFilter(new ChromeRenderMessageFilter(id, profile)); 8002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(ENABLE_PLUGINS) 8014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) host->AddFilter(new PluginInfoMessageFilter(id, profile)); 8022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 8035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) host->AddFilter(new cast::CastTransportHostFilter); 8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(ENABLE_PRINTING) 80503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) host->AddFilter(new printing::PrintingMessageFilter(id, profile)); 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 8074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) host->AddFilter(new SearchProviderInstallStateMessageFilter(id, profile)); 808a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#if defined(ENABLE_SPELLCHECK) 8094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) host->AddFilter(new SpellCheckMessageFilter(id)); 810a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#endif 8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 8124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) host->AddFilter(new SpellCheckMessageFilterMac(id)); 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 8145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) host->AddFilter(new ChromeNetBenchmarkingMessageFilter(profile, context)); 8154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) host->AddFilter(new prerender::PrerenderMessageFilter(id, profile)); 8166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) host->AddFilter(new TtsMessageFilter(id, host->GetBrowserContext())); 817868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#if defined(ENABLE_WEBRTC) 8184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) WebRtcLoggingHandlerHost* webrtc_logging_handler_host = 8198bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) new WebRtcLoggingHandlerHost(profile); 8205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) host->SetWebRtcLogMessageCallback(base::Bind( 8215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &WebRtcLoggingHandlerHost::LogMessage, webrtc_logging_handler_host)); 8224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) host->AddFilter(webrtc_logging_handler_host); 8234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) host->SetUserData(host, new base::UserDataAdapter<WebRtcLoggingHandlerHost>( 8244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) webrtc_logging_handler_host)); 825868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif 8267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#if !defined(DISABLE_NACL) 827f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) host->AddFilter(new nacl::NaClHostMessageFilter( 828eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch id, profile->IsOffTheRecord(), 8298bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) profile->GetPath(), 830eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch context)); 8317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif 832d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#if defined(OS_ANDROID) 833010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) host->AddFilter(new cdm::CdmMessageFilterAndroid()); 834d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#endif 8355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (switches::IsEnableAccountConsistency()) 836a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) host->AddFilter(new PrincipalsMessageFilter(id)); 8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host->Send(new ChromeViewMsg_SetIsIncognitoProcess( 8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile->IsOffTheRecord())); 8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (size_t i = 0; i < extra_parts_.size(); ++i) 8425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extra_parts_[i]->RenderProcessWillLaunch(host); 8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RendererContentSettingRules rules; 845cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (host->IsIsolatedGuest()) { 846f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 8476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) GetGuestViewDefaultContentSettingRules(profile->IsOffTheRecord(), &rules); 848f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#else 849f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) NOTREACHED(); 850f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif 851a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } else { 852a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) GetRendererContentSettingRules( 853a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) profile->GetHostContentSettingsMap(), &rules); 854a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host->Send(new ChromeViewMsg_SetContentSettingRules(rules)); 8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GURL ChromeContentBrowserClient::GetEffectiveURL( 8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserContext* browser_context, const GURL& url) { 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext(browser_context); 8612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!profile) 8622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return url; 8632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 864a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // If the input |url| should be assigned to the Instant renderer, make its 865a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // effective URL distinct from other URLs on the search provider's domain. 866a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) if (chrome::ShouldAssignURLToInstantRenderer(url, profile)) 867a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return chrome::GetEffectiveURLForInstant(url, profile); 868a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 869c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if !defined(OS_CHROMEOS) 8702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If the input |url| should be assigned to the Signin renderer, make its 8712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // effective URL distinct from other URLs on the signin service's domain. 8722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Note that the signin renderer will be allowed to sign the user in to 8732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Chrome. 8742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (SigninManager::IsWebBasedSigninFlowURL(url)) 8752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GetEffectiveURLForSignin(url); 876c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 8772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 8795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return ChromeContentBrowserClientExtensionsPart::GetEffectiveURL( 8805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) profile, url); 8816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#else 8826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return url; 8836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif 8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::ShouldUseProcessPerSite( 8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserContext* browser_context, const GURL& effective_url) { 8882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Non-extension, non-Instant URLs should generally use 8892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // process-per-site-instance. Because we expect to use the effective URL, 8902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // URLs for hosted apps (apart from bookmark apps) should have an extension 8912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // scheme by now. 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext(browser_context); 8942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!profile) 8952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 8962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 897a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch if (chrome::ShouldUseProcessPerSiteForInstantURL(effective_url, profile)) 8982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 8992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 900c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if !defined(OS_CHROMEOS) 9012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (SigninManager::IsWebBasedSigninFlowURL(effective_url)) 9022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 903c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 9042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 9065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return ChromeContentBrowserClientExtensionsPart::ShouldUseProcessPerSite( 9075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) profile, effective_url); 9086e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#else 9096e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return false; 9106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif 9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// These are treated as WebUI schemes but do not get WebUI bindings. Also, 9145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// view-source is allowed for these schemes. 915c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void ChromeContentBrowserClient::GetAdditionalWebUISchemes( 916c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<std::string>* additional_schemes) { 917c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) additional_schemes->push_back(chrome::kChromeSearchScheme); 9185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) additional_schemes->push_back(dom_distiller::kDomDistillerScheme); 9192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 9202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 921a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void ChromeContentBrowserClient::GetAdditionalWebUIHostsToIgnoreParititionCheck( 922a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) std::vector<std::string>* hosts) { 923a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) hosts->push_back(chrome::kChromeUIExtensionIconHost); 924a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) hosts->push_back(chrome::kChromeUIFaviconHost); 925a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) hosts->push_back(chrome::kChromeUIThemeHost); 926a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) hosts->push_back(chrome::kChromeUIThumbnailHost); 927a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) hosts->push_back(chrome::kChromeUIThumbnailHost2); 928a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) hosts->push_back(chrome::kChromeUIThumbnailListHost); 929a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 930a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 9312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)net::URLRequestContextGetter* 9322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ChromeContentBrowserClient::CreateRequestContext( 9332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::BrowserContext* browser_context, 934a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) content::ProtocolHandlerMap* protocol_handlers, 935cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::URLRequestInterceptorScopedVector request_interceptors) { 9362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile* profile = Profile::FromBrowserContext(browser_context); 937a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return profile->CreateRequestContext(protocol_handlers, 938cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) request_interceptors.Pass()); 9392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 9402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)net::URLRequestContextGetter* 9422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ChromeContentBrowserClient::CreateRequestContextForStoragePartition( 9432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::BrowserContext* browser_context, 9442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& partition_path, 9452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool in_memory, 946a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) content::ProtocolHandlerMap* protocol_handlers, 947cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::URLRequestInterceptorScopedVector request_interceptors) { 9482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile* profile = Profile::FromBrowserContext(browser_context); 9492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return profile->CreateRequestContextForStoragePartition( 950a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) partition_path, 951a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) in_memory, 952a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) protocol_handlers, 953cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) request_interceptors.Pass()); 9542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 9552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::IsHandledURL(const GURL& url) { 9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ProfileIOData::IsHandledURL(url); 9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 960a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)bool ChromeContentBrowserClient::CanCommitURL( 961a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) content::RenderProcessHost* process_host, 962a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const GURL& url) { 9636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 9645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return ChromeContentBrowserClientExtensionsPart::CanCommitURL( 9655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) process_host, url); 9666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#else 9676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return true; 9686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif 969a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)} 970a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 97158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)bool ChromeContentBrowserClient::ShouldAllowOpenURL( 97258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) content::SiteInstance* site_instance, const GURL& url) { 97358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) GURL from_url = site_instance->GetSiteURL(); 97458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 9756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 9765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) bool result; 9775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (ChromeContentBrowserClientExtensionsPart::ShouldAllowOpenURL( 9785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) site_instance, from_url, url, &result)) 9795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return result; 9806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif 9815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 9825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Do not allow chrome://chrome-signin navigate to other chrome:// URLs, since 9835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // the signin page may host untrusted web content. 9845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (from_url.GetOrigin().spec() == chrome::kChromeUIChromeSigninURL && 9855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu url.SchemeIs(content::kChromeUIScheme) && 9865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu url.host() != chrome::kChromeUIChromeSigninHost) { 9875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu VLOG(1) << "Blocked navigation to " << url.spec() << " from " 9885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu << chrome::kChromeUIChromeSigninURL; 9895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return false; 9905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 9915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 99258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return true; 99358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 99458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::IsSuitableHost( 9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderProcessHost* process_host, 9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& site_url) { 9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = 9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile::FromBrowserContext(process_host->GetBrowserContext()); 10002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This may be NULL during tests. In that case, just assume any site can 10012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // share any host. 10022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!profile) 10032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 10042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1005c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Instant URLs should only be in the instant process and instant process 1006c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // should only have Instant URLs. 10072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InstantService* instant_service = 10082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InstantServiceFactory::GetForProfile(profile); 1009c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (instant_service) { 1010c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool is_instant_process = instant_service->IsInstantProcess( 1011c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) process_host->GetID()); 1012c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool should_be_in_instant_process = 1013c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chrome::ShouldAssignURLToInstantRenderer(site_url, profile); 1014c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (is_instant_process || should_be_in_instant_process) 1015c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return is_instant_process && should_be_in_instant_process; 1016c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 10172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1018c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if !defined(OS_CHROMEOS) 1019cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) SigninClient* signin_client = 1020effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ChromeSigninClientFactory::GetForProfile(profile); 1021effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (signin_client && signin_client->IsSigninProcess(process_host->GetID())) 10222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return SigninManager::IsWebBasedSigninFlowURL(site_url); 1023c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 10242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 10265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return ChromeContentBrowserClientExtensionsPart::IsSuitableHost( 10275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) profile, process_host, site_url); 10286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#else 10296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return true; 10306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif 10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1033cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool ChromeContentBrowserClient::MayReuseHost( 1034cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::RenderProcessHost* process_host) { 1035cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // If there is currently a prerender in progress for the host provided, 1036cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // it may not be shared. We require prerenders to be by themselves in a 1037cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // separate process, so that we can monitor their resource usage, and so that 1038cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // we can track the cookies that they change. 1039cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 1040cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) process_host->GetBrowserContext()); 1041cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) prerender::PrerenderManager* prerender_manager = 1042cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) prerender::PrerenderManagerFactory::GetForProfile(profile); 1043cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (prerender_manager && 1044cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) !prerender_manager->MayReuseProcessHost(process_host)) { 1045cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return false; 1046cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 1047cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1048cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return true; 1049cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 1050cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::ShouldTryToUseExistingProcessHost( 10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserContext* browser_context, const GURL& url) { 10535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // It has to be a valid URL for us to check for an extension. 10545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!url.is_valid()) 10555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext(browser_context); 10595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return ChromeContentBrowserClientExtensionsPart:: 10605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ShouldTryToUseExistingProcessHost( 10615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) profile, url); 10626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#else 10636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return false; 10646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif 10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::SiteInstanceGotProcess( 10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SiteInstance* site_instance) { 10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(site_instance->HasProcess()); 10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) site_instance->GetBrowserContext()); 10732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!profile) 10742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 10752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Remember the ID of the Instant process to signal the renderer process 10772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // on startup in |AppendExtraCommandLineSwitches| below. 1078c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (chrome::ShouldAssignURLToInstantRenderer( 10792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) site_instance->GetSiteURL(), profile)) { 10802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InstantService* instant_service = 10812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InstantServiceFactory::GetForProfile(profile); 10822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (instant_service) 10832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) instant_service->AddInstantProcess(site_instance->GetProcess()->GetID()); 10842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 10852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1086c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if !defined(OS_CHROMEOS) 10872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // We only expect there to be one signin process as we use process-per-site 10882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // for signin URLs. The signin process will be cleared from SigninManager 10892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // when the renderer is destroyed. 10902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (SigninManager::IsWebBasedSigninFlowURL(site_instance->GetSiteURL())) { 1091cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) SigninClient* signin_client = 1092effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ChromeSigninClientFactory::GetForProfile(profile); 1093effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (signin_client) 1094effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch signin_client->SetSigninProcess(site_instance->GetProcess()->GetID()); 10956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 10965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ChromeContentBrowserClientExtensionsPart::SetSigninProcess(site_instance); 10976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif 10982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1099c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 11002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (size_t i = 0; i < extra_parts_.size(); ++i) 11025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extra_parts_[i]->SiteInstanceGotProcess(site_instance); 11035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::SiteInstanceDeleting( 11065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SiteInstance* site_instance) { 11075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!site_instance->HasProcess()) 11085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 11095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (size_t i = 0; i < extra_parts_.size(); ++i) 11115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extra_parts_[i]->SiteInstanceDeleting(site_instance); 11125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool ChromeContentBrowserClient::ShouldSwapBrowsingInstancesForNavigation( 11152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SiteInstance* site_instance, 11165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& current_url, 11175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& new_url) { 11186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 11195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return ChromeContentBrowserClientExtensionsPart:: 11205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ShouldSwapBrowsingInstancesForNavigation( 11215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) site_instance, current_url, new_url); 11226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#else 11236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return false; 11246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif 11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::ShouldSwapProcessesForRedirect( 11285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ResourceContext* resource_context, const GURL& current_url, 11295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& new_url) { 1130116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(ENABLE_EXTENSIONS) 11315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return ChromeContentBrowserClientExtensionsPart:: 11325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ShouldSwapProcessesForRedirect(resource_context, current_url, new_url); 1133116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 1134116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return false; 1135116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 11365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochbool ChromeContentBrowserClient::ShouldAssignSiteForURL(const GURL& url) { 11397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return !url.SchemeIs(chrome::kChromeNativeScheme); 11407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 11417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 11425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string ChromeContentBrowserClient::GetCanonicalEncodingNameByAliasName( 11435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& alias_name) { 11445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return CharacterEncoding::GetCanonicalEncodingNameByAliasName(alias_name); 11455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1147f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)namespace { 1148f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 1149f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)bool IsAutoReloadEnabled() { 11506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Fetch the field trial, even though we don't use it. Calling FindFullName() 11516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // causes the field-trial mechanism to report which group we're in, which 11526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // might reflect a hard disable or hard enable via flag, both of which have 11536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // their own field trial groups. This lets us know what percentage of users 11546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // manually enable or disable auto-reload. 1155f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string group = base::FieldTrialList::FindFullName( 1156f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "AutoReloadExperiment"); 1157f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const CommandLine& browser_command_line = *CommandLine::ForCurrentProcess(); 1158f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (browser_command_line.HasSwitch(switches::kEnableOfflineAutoReload)) 1159f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return true; 1160f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (browser_command_line.HasSwitch(switches::kDisableOfflineAutoReload)) 1161f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return false; 11626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return true; 1163f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 1164f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 1165f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)bool IsAutoReloadVisibleOnlyEnabled() { 11666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // See the block comment in IsAutoReloadEnabled(). 1167f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string group = base::FieldTrialList::FindFullName( 1168f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "AutoReloadVisibleOnlyExperiment"); 1169f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const CommandLine& browser_command_line = *CommandLine::ForCurrentProcess(); 1170f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (browser_command_line.HasSwitch( 1171f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) switches::kEnableOfflineAutoReloadVisibleOnly)) { 1172f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return true; 1173f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 1174f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (browser_command_line.HasSwitch( 1175f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) switches::kDisableOfflineAutoReloadVisibleOnly)) { 1176f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return false; 1177f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 11786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return true; 1179f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 1180f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 1181f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} // namespace 1182f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 11835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::AppendExtraCommandLineSwitches( 11845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine* command_line, int child_process_id) { 11854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(OS_POSIX) 11868bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (breakpad::IsCrashReporterEnabled()) { 11875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_ptr<metrics::ClientInfo> client_info = 11885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GoogleUpdateSettings::LoadMetricsClientInfo(); 11895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitchASCII(switches::kEnableCrashReporter, 11905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) client_info ? client_info->client_id 11915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) : std::string()); 11925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1193cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif // defined(OS_POSIX) 11945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (logging::DialogsAreSuppressed()) 11965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitch(switches::kNoErrorDialogs); 11975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string process_type = 11995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->GetSwitchValueASCII(switches::kProcessType); 12005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const CommandLine& browser_command_line = *CommandLine::ForCurrentProcess(); 12012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 120258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) static const char* const kCommonSwitchNames[] = { 1203a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) switches::kUserAgent, 120458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches::kUserDataDir, // Make logs go to the right file. 120558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) }; 120658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) command_line->CopySwitchesFrom(browser_command_line, kCommonSwitchNames, 120758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) arraysize(kCommonSwitchNames)); 12082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1209a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(ENABLE_IPC_FUZZER) 1210a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) static const char* const kIpcFuzzerSwitches[] = { 1211a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) switches::kIpcFuzzerTestcase, 1212a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) }; 1213a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) command_line->CopySwitchesFrom(browser_command_line, kIpcFuzzerSwitches, 1214a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) arraysize(kIpcFuzzerSwitches)); 1215a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif 1216a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 1217cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#if defined(OS_CHROMEOS) 1218cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // On Chrome OS need to pass primary user homedir (in multi-profiles session). 1219cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::FilePath homedir; 1220cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PathService::Get(base::DIR_HOME, &homedir); 1221cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) command_line->AppendSwitchASCII(chromeos::switches::kHomedir, 1222cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) homedir.value().c_str()); 1223cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif 1224cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 12255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (process_type == switches::kRendererProcess) { 12265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) content::RenderProcessHost* process = 12275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) content::RenderProcessHost::FromID(child_process_id); 12285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Profile* profile = 12295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) process ? Profile::FromBrowserContext(process->GetBrowserContext()) 12305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) : NULL; 12315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (size_t i = 0; i < extra_parts_.size(); ++i) { 12325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extra_parts_[i]->AppendExtraRendererCommandLineSwitches( 12335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) command_line, process, profile); 12345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 12355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 12365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 12375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& login_profile = 1238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) browser_command_line.GetSwitchValueASCII( 1239c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chromeos::switches::kLoginProfile); 12405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!login_profile.empty()) 1241c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) command_line->AppendSwitchASCII( 1242c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chromeos::switches::kLoginProfile, login_profile); 12435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 12445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12450f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#if defined(ENABLE_WEBRTC) 1246a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) MaybeCopyDisableWebRtcEncryptionSwitch(command_line, 1247a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) browser_command_line, 1248a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) VersionInfo::GetChannel()); 12490f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#endif 12500f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 12515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (process) { 12525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefService* prefs = profile->GetPrefs(); 12535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Currently this pref is only registered if applied via a policy. 12545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (prefs->HasPrefPath(prefs::kDisable3DAPIs) && 12555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kDisable3DAPIs)) { 12565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Turn this policy into a command line switch. 12575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitch(switches::kDisable3DAPIs); 12585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12606d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const base::ListValue* switches = 12616d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) prefs->GetList(prefs::kEnableDeprecatedWebPlatformFeatures); 12626d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) if (switches) { 12636d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Enable any deprecated features that have been re-enabled by policy. 12646d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) for (base::ListValue::const_iterator it = switches->begin(); 12656d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) it != switches->end(); ++it) { 12666d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) std::string switch_to_enable; 12676d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) if ((*it)->GetAsString(&switch_to_enable)) 12686d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) command_line->AppendSwitch(switch_to_enable); 12696d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) } 12706d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) } 12716d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 12725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Disable client-side phishing detection in the renderer if it is 12735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // disabled in the Profile preferences or the browser process. 12745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!prefs->GetBoolean(prefs::kSafeBrowsingEnabled) || 12755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !g_browser_process->safe_browsing_detection_service()) { 12765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitch( 12775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kDisableClientSidePhishingDetection); 12785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InstantService* instant_service = 12812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InstantServiceFactory::GetForProfile(profile); 12822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (instant_service && 12832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) instant_service->IsInstantProcess(process->GetID())) 12842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) command_line->AppendSwitch(switches::kInstantProcess); 12852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1286c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if !defined(OS_CHROMEOS) 1287cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) SigninClient* signin_client = 1288effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ChromeSigninClientFactory::GetForProfile(profile); 1289effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (signin_client && signin_client->IsSigninProcess(process->GetID())) 12902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) command_line->AppendSwitch(switches::kSigninProcess); 1291c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 12925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1294f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (IsAutoReloadEnabled()) 1295f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) command_line->AppendSwitch(switches::kEnableOfflineAutoReload); 1296f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (IsAutoReloadVisibleOnlyEnabled()) { 1297f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) command_line->AppendSwitch( 1298f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) switches::kEnableOfflineAutoReloadVisibleOnly); 1299010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 1300010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 1301010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) { 13026e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Enable load stale cache if this session is in the field trial or 13036e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // the user explicitly enabled it. Note that as far as the renderer 13046e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // is concerned, the feature is enabled if-and-only-if the 13056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // kEnableOfflineLoadStaleCache flag is on the command line; 13066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // the yes/no/default behavior is only at the browser command line 13076e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // level. 1308010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 1309010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Command line switches override 1310010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (browser_command_line.HasSwitch( 1311010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) switches::kEnableOfflineLoadStaleCache)) { 1312010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) command_line->AppendSwitch(switches::kEnableOfflineLoadStaleCache); 1313010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } else if (!browser_command_line.HasSwitch( 1314010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) switches::kDisableOfflineLoadStaleCache)) { 1315010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) std::string group = 1316010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::FieldTrialList::FindFullName("LoadStaleCacheExperiment"); 1317010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 13186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (group == "Enabled") 1319010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) command_line->AppendSwitch(switches::kEnableOfflineLoadStaleCache); 1320effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 1321effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 1322effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 13235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Please keep this in alphabetical order. 13245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const char* const kSwitchNames[] = { 13255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) autofill::switches::kDisableIgnoreAutocompleteOff, 13264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) autofill::switches::kDisablePasswordGeneration, 13274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) autofill::switches::kEnablePasswordGeneration, 13285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) autofill::switches::kLocalHeuristicsOnlyForPasswordGeneration, 1329f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) extensions::switches::kAllowHTTPBackgroundPage, 1330ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch extensions::switches::kAllowLegacyExtensionManifests, 133103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) extensions::switches::kEnableAppView, 1332116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extensions::switches::kEnableEmbeddedExtensionOptions, 1333a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) extensions::switches::kEnableExperimentalExtensionApis, 1334cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) extensions::switches::kEnableScriptsRequireAction, 1335ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch extensions::switches::kExtensionsOnChromeURLs, 1336e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch extensions::switches::kWhitelistedExtensionID, 13375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kAppsCheckoutURL, 13385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kAppsGalleryURL, 13390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch switches::kCloudPrintURL, 13400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch switches::kCloudPrintXmppEndpoint, 13415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kDisableBundledPpapiFlash, 1342eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch switches::kEnableAppWindowControls, 13435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kEnableBenchmarking, 13445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kEnableNaCl, 1345116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if !defined(DISABLE_NACL) 1346a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) switches::kEnableNaClDebug, 1347a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) switches::kEnableNaClNonSfiMode, 1348116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 13492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switches::kEnableNetBenchmarking, 1350f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) switches::kEnableShowModalDialog, 13515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) switches::kEnableStreamlinedHostedApps, 1352010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) switches::kEnableWebBasedSignin, 13535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kMessageLoopHistogrammer, 1354f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) switches::kOutOfProcessPdf, 13555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kPlaybackMode, 13565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kPpapiFlashArgs, 13575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kPpapiFlashPath, 13585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kPpapiFlashVersion, 13595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kProfilingAtStart, 13605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kProfilingFile, 13615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kProfilingFlush, 13625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kRecordMode, 13634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) translate::switches::kTranslateSecurityOrigin, 13645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 13655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->CopySwitchesFrom(browser_command_line, kSwitchNames, 13675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arraysize(kSwitchNames)); 13685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (process_type == switches::kUtilityProcess) { 13695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const char* const kSwitchNames[] = { 1370f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) extensions::switches::kAllowHTTPBackgroundPage, 1371a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) extensions::switches::kEnableExperimentalExtensionApis, 1372ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch extensions::switches::kExtensionsOnChromeURLs, 1373e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch extensions::switches::kWhitelistedExtensionID, 13745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 13755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->CopySwitchesFrom(browser_command_line, kSwitchNames, 13775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arraysize(kSwitchNames)); 13785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (process_type == switches::kPluginProcess) { 1379c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_CHROMEOS) 13806d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) static const char* const kSwitchNames[] = { 1381c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chromeos::switches::kLoginProfile, 13825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 13835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->CopySwitchesFrom(browser_command_line, kSwitchNames, 13855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arraysize(kSwitchNames)); 13866d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#endif 13875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (process_type == switches::kZygoteProcess) { 13885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const char* const kSwitchNames[] = { 13895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Load (in-process) Pepper plugins in-process in the zygote pre-sandbox. 13905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kDisableBundledPpapiFlash, 1391116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if !defined(DISABLE_NACL) 1392cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) switches::kEnableNaClNonSfiMode, 1393a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch switches::kNaClDangerousNoSandboxNonSfi, 1394116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 13955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kPpapiFlashPath, 13965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kPpapiFlashVersion, 13975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 13985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->CopySwitchesFrom(browser_command_line, kSwitchNames, 14005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arraysize(kSwitchNames)); 14015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (process_type == switches::kGpuProcess) { 14025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If --ignore-gpu-blacklist is passed in, don't send in crash reports 14035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // because GPU is expected to be unreliable. 14045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (browser_command_line.HasSwitch(switches::kIgnoreGpuBlacklist) && 14055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !command_line->HasSwitch(switches::kDisableBreakpad)) 14065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitch(switches::kDisableBreakpad); 14075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The command line switch kEnableBenchmarking needs to be specified along 14105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // with the kEnableStatsTable switch to ensure that the stats table global 14115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is initialized correctly. 14125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (command_line->HasSwitch(switches::kEnableBenchmarking)) 14135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(command_line->HasSwitch(switches::kEnableStatsTable)); 14145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string ChromeContentBrowserClient::GetApplicationLocale() { 14175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (BrowserThread::CurrentlyOn(BrowserThread::IO)) 1418c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return g_io_thread_application_locale.Get(); 14195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return g_browser_process->GetApplicationLocale(); 14205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string ChromeContentBrowserClient::GetAcceptLangs( 14235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserContext* context) { 14245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext(context); 14255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return profile->GetPrefs()->GetString(prefs::kAcceptLanguages); 14265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1428f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)const gfx::ImageSkia* ChromeContentBrowserClient::GetDefaultFavicon() { 14295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResourceBundle& rb = ResourceBundle::GetSharedInstance(); 1430f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return rb.GetNativeImageNamed(IDR_DEFAULT_FAVICON).ToImageSkia(); 14315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::AllowAppCache( 14345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& manifest_url, 14355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& first_party, 14365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ResourceContext* context) { 14375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 14385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); 14395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return io_data->GetCookieSettings()-> 14405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IsSettingCookieAllowed(manifest_url, first_party); 14415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::AllowGetCookie( 14445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 14455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& first_party, 14465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const net::CookieList& cookie_list, 14475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ResourceContext* context, 14485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_process_id, 14495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int render_frame_id) { 14505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 14515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); 14525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool allow = io_data->GetCookieSettings()-> 14535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IsReadingCookieAllowed(url, first_party); 14545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 14565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 14575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&TabSpecificContentSettings::CookiesRead, render_process_id, 145823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) render_frame_id, url, first_party, cookie_list, !allow, true)); 14595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return allow; 14605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::AllowSetCookie( 14635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 14645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& first_party, 14655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& cookie_line, 14665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ResourceContext* context, 14675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_process_id, 14685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int render_frame_id, 14695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::CookieOptions* options) { 14705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 14715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); 14725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieSettings* cookie_settings = io_data->GetCookieSettings(); 14735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool allow = cookie_settings->IsSettingCookieAllowed(url, first_party); 14745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1475cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (prerender_tracker_) { 1476cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) prerender_tracker_->OnCookieChangedForURL( 1477cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) render_process_id, 1478cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) context->GetRequestContext()->cookie_store()->GetCookieMonster(), 1479cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) url); 1480cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 1481cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 14825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 14835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 14845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&TabSpecificContentSettings::CookieChanged, render_process_id, 14855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) render_frame_id, url, first_party, cookie_line, *options, 14865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !allow)); 14875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return allow; 14885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::AllowSaveLocalState( 14915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ResourceContext* context) { 14925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 14935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); 14945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieSettings* cookie_settings = io_data->GetCookieSettings(); 14955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSetting setting = cookie_settings->GetDefaultCookieSetting(NULL); 14965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(bauerb): Should we also disallow local state if the default is BLOCK? 14985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Could we even support per-origin settings? 14995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return setting != CONTENT_SETTING_SESSION_ONLY; 15005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::AllowWorkerDatabase( 15035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 1504a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& name, 1505a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& display_name, 15065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned long estimated_size, 15075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ResourceContext* context, 15085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::vector<std::pair<int, int> >& render_frames) { 15095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 15105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); 15115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieSettings* cookie_settings = io_data->GetCookieSettings(); 15125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool allow = cookie_settings->IsSettingCookieAllowed(url, url); 15135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Record access to database for potential display in UI. 15155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::pair<int, int> >::const_iterator i; 15165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (i = render_frames.begin(); i != render_frames.end(); ++i) { 15175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 15185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 15195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&TabSpecificContentSettings::WebDatabaseAccessed, 15205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i->first, i->second, url, name, display_name, !allow)); 15215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return allow; 15245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1526116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid ChromeContentBrowserClient::AllowWorkerFileSystem( 15275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 15285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ResourceContext* context, 1529116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::vector<std::pair<int, int> >& render_frames, 1530116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Callback<void(bool)> callback) { 15315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 15325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); 15335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieSettings* cookie_settings = io_data->GetCookieSettings(); 15345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool allow = cookie_settings->IsSettingCookieAllowed(url, url); 15355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1536116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(ENABLE_EXTENSIONS) 1537116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch GuestPermissionRequestHelper(url, render_frames, callback, allow); 1538116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 1539116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch FileSystemAccessed(url, render_frames, callback, allow); 1540116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1541116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 1542116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1543116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(ENABLE_EXTENSIONS) 1544116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid ChromeContentBrowserClient::GuestPermissionRequestHelper( 1545116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const GURL& url, 1546116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::vector<std::pair<int, int> >& render_frames, 1547116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Callback<void(bool)> callback, 1548116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool allow) { 1549116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DCHECK(BrowserThread:: CurrentlyOn(BrowserThread::IO)); 1550116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::vector<std::pair<int, int> >::const_iterator i; 1551116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::map<int, int> process_map; 1552116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::map<int, int>::const_iterator it; 1553116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool has_web_view_guest = false; 1554116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Record access to file system for potential display in UI. 1555116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch for (i = render_frames.begin(); i != render_frames.end(); ++i) { 1556116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (process_map.find(i->first) != process_map.end()) 1557116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch continue; 1558116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1559116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch process_map.insert(std::pair<int, int>(i->first, i->second)); 1560116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 15616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (extensions::WebViewRendererState::GetInstance()->IsGuest(i->first)) 1562116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch has_web_view_guest = true; 1563116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 1564116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (!has_web_view_guest) { 1565116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch FileSystemAccessed(url, render_frames, callback, allow); 1566116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return; 1567116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 1568116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DCHECK_EQ(1U, process_map.size()); 1569116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch it = process_map.begin(); 1570116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch BrowserThread::PostTask( 1571116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch BrowserThread::UI, 1572116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch FROM_HERE, 1573116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Bind(&ChromeContentBrowserClient:: 1574116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch RequestFileSystemPermissionOnUIThread, 1575116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch it->first, 1576116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch it->second, 1577116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch url, 1578116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch allow, 1579116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Bind(&ChromeContentBrowserClient::FileSystemAccessed, 1580116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch weak_factory_.GetWeakPtr(), 1581116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch url, 1582116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch render_frames, 1583116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch callback))); 1584116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 1585116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1586116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid ChromeContentBrowserClient::RequestFileSystemPermissionOnUIThread( 1587116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int render_process_id, 1588116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int render_frame_id, 1589116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const GURL& url, 1590116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool allowed_by_default, 1591116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::Callback<void(bool)>& callback) { 1592116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DCHECK(BrowserThread:: CurrentlyOn(BrowserThread::UI)); 15936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) extensions::WebViewPermissionHelper* web_view_permission_helper = 15946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) extensions::WebViewPermissionHelper::FromFrameID( 15956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) render_process_id, render_frame_id); 1596116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch web_view_permission_helper->RequestFileSystemPermission(url, 1597116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch allowed_by_default, 1598116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch callback); 1599116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 1600116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1601116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1602116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid ChromeContentBrowserClient::FileSystemAccessed( 1603116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const GURL& url, 1604116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::vector<std::pair<int, int> >& render_frames, 1605116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Callback<void(bool)> callback, 1606116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool allow) { 16075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Record access to file system for potential display in UI. 16085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::pair<int, int> >::const_iterator i; 16095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (i = render_frames.begin(); i != render_frames.end(); ++i) { 16105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 1611116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch BrowserThread::UI, 1612116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch FROM_HERE, 16135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&TabSpecificContentSettings::FileSystemAccessed, 16145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i->first, i->second, url, !allow)); 16155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1616116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch callback.Run(allow); 16175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::AllowWorkerIndexedDB( 16205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 1621a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& name, 16225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ResourceContext* context, 16235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::vector<std::pair<int, int> >& render_frames) { 16245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 16255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); 16265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieSettings* cookie_settings = io_data->GetCookieSettings(); 16275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool allow = cookie_settings->IsSettingCookieAllowed(url, url); 16285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Record access to IndexedDB for potential display in UI. 16305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::pair<int, int> >::const_iterator i; 16315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (i = render_frames.begin(); i != render_frames.end(); ++i) { 16325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 16335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 16345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&TabSpecificContentSettings::IndexedDBAccessed, 16355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i->first, i->second, url, name, !allow)); 16365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return allow; 16395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)net::URLRequestContext* 16425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ChromeContentBrowserClient::OverrideRequestContextForURL( 16435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, content::ResourceContext* context) { 16445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 1645116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(ENABLE_EXTENSIONS) 16462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (url.SchemeIs(extensions::kExtensionScheme)) { 16475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); 16485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return io_data->extensions_request_context(); 16495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1650116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 16515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 16535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)QuotaPermissionContext* 16565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ChromeContentBrowserClient::CreateQuotaPermissionContext() { 16575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new ChromeQuotaPermissionContext(); 16585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::AllowCertificateError( 16615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_process_id, 16625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int render_frame_id, 16635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int cert_error, 16645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const net::SSLInfo& ssl_info, 16655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& request_url, 16665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ResourceType resource_type, 16675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool overridable, 16685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool strict_enforcement, 16696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) bool expired_previous_decision, 16705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Callback<void(bool)>& callback, 167190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) content::CertificateRequestResultType* result) { 16725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (resource_type != content::RESOURCE_TYPE_MAIN_FRAME) { 16732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // A sub-resource has a certificate error. The user doesn't really 16742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // have a context for making the right decision, so block the 16752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // request hard, without an info bar to allow showing the insecure 16762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // content. 167790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) *result = content::CERTIFICATE_REQUEST_RESULT_TYPE_DENY; 16782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 16792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 16802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If the tab is being prerendered, cancel the prerender and the request. 16825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::RenderFrameHost* render_frame_host = 16835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::RenderFrameHost::FromID(render_process_id, render_frame_id); 16845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WebContents* tab = WebContents::FromRenderFrameHost(render_frame_host); 16855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!tab) { 16865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 16875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 16885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 16905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prerender::PrerenderContents* prerender_contents = 16915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prerender::PrerenderContents::FromWebContents(tab); 16925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (prerender_contents) { 16935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prerender_contents->Destroy(prerender::FINAL_STATUS_SSL_ERROR); 16945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *result = content::CERTIFICATE_REQUEST_RESULT_TYPE_CANCEL; 16955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return; 16965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(ENABLE_CAPTIVE_PORTAL_DETECTION) 16995c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu CaptivePortalTabHelper* captive_portal_tab_helper = 17005c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu CaptivePortalTabHelper::FromWebContents(tab); 17015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (captive_portal_tab_helper) 17025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) captive_portal_tab_helper->OnSSLCertError(ssl_info); 17035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 17045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Otherwise, display an SSL blocking page. The interstitial page takes 17065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // ownership of ssl_blocking_page. 17076e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int options_mask = 0; 17086e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (overridable) 17096e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) options_mask = SSLBlockingPage::OVERRIDABLE; 17106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (strict_enforcement) 17116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) options_mask = SSLBlockingPage::STRICT_ENFORCEMENT; 17126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (expired_previous_decision) 17136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) options_mask = SSLBlockingPage::EXPIRED_BUT_PREVIOUSLY_ALLOWED; 17145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SSLBlockingPage* ssl_blocking_page = new SSLBlockingPage( 17156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) tab, cert_error, ssl_info, request_url, options_mask, callback); 17165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ssl_blocking_page->Show(); 17175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::SelectClientCertificate( 17205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_process_id, 17215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int render_frame_id, 17225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const net::HttpNetworkSession* network_session, 17235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::SSLCertRequestInfo* cert_request_info, 17245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Callback<void(net::X509Certificate*)>& callback) { 17255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::RenderFrameHost* rfh = content::RenderFrameHost::FromID( 17265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) render_process_id, render_frame_id); 17275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WebContents* tab = WebContents::FromRenderFrameHost(rfh); 17285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!tab) { 17295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 17305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 17315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prerender::PrerenderContents* prerender_contents = 17345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prerender::PrerenderContents::FromWebContents(tab); 17355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (prerender_contents) { 17365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prerender_contents->Destroy( 17375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prerender::FINAL_STATUS_SSL_CLIENT_CERTIFICATE_REQUESTED); 17385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return; 17395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 17405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 17415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GURL requesting_url("https://" + cert_request_info->host_and_port.ToString()); 17425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DCHECK(requesting_url.is_valid()) 17435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) << "Invalid URL string: https://" 17445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) << cert_request_info->host_and_port.ToString(); 17455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext(tab->GetBrowserContext()); 17475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::Value> filter( 17485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile->GetHostContentSettingsMap()->GetWebsiteSetting( 17495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) requesting_url, 17505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) requesting_url, 17515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTINGS_TYPE_AUTO_SELECT_CERTIFICATE, 17525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string(), NULL)); 17535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (filter.get()) { 17555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Try to automatically select a client certificate. 17565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (filter->IsType(base::Value::TYPE_DICTIONARY)) { 17575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue* filter_dict = 17585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) static_cast<base::DictionaryValue*>(filter.get()); 17595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<scoped_refptr<net::X509Certificate> >& 17615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) all_client_certs = cert_request_info->client_certs; 17625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < all_client_certs.size(); ++i) { 1763868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (CertMatchesFilter(*all_client_certs[i].get(), *filter_dict)) { 17645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Use the first certificate that is matched by the filter. 1765868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) callback.Run(all_client_certs[i].get()); 17665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 17675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 17705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 17715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 177446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) chrome::ShowSSLClientCertificateSelector(tab, network_session, 177546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) cert_request_info, callback); 17765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ChromeContentBrowserClient::AddCertificate( 17792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::CertificateMimeType cert_type, 17802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const void* cert_data, 17812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t cert_size, 17825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_process_id, 178346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) int render_frame_id) { 178446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) chrome::SSLAddCertificate(cert_type, cert_data, cert_size, 178546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) render_process_id, render_frame_id); 17865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)content::MediaObserver* ChromeContentBrowserClient::GetMediaObserver() { 17892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return MediaCaptureDevicesDispatcher::GetInstance(); 17905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::RequestDesktopNotificationPermission( 17935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& source_origin, 17940529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch content::RenderFrameHost* render_frame_host, 17955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const base::Callback<void(blink::WebNotificationPermission)>& callback) { 17965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(ENABLE_NOTIFICATIONS) 17975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Skip showing the infobar if the request comes from an extension, and that 17985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // extension has the 'notify' permission. (If the extension does not have the 17995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // permission, the user will still be prompted.) 18000529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch Profile* profile = Profile::FromBrowserContext( 18010529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch render_frame_host->GetSiteInstance()->GetBrowserContext()); 1802c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DesktopNotificationService* notification_service = 1803c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DesktopNotificationServiceFactory::GetForProfile(profile); 180403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 180503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) InfoMap* extension_info_map = 180603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) extensions::ExtensionSystem::Get(profile)->info_map(); 1807c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const Extension* extension = NULL; 1808c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (extension_info_map) { 18095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::ExtensionSet extensions; 1810c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) extension_info_map->GetExtensionsWithAPIPermissionForSecurityOrigin( 18115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) source_origin, 18125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) render_frame_host->GetProcess()->GetID(), 18135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extensions::APIPermission::kNotifications, 18145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) &extensions); 18155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (extensions::ExtensionSet::const_iterator iter = extensions.begin(); 1816c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) iter != extensions.end(); ++iter) { 1817558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch if (notification_service->IsNotifierEnabled(NotifierId( 1818558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch NotifierId::APPLICATION, (*iter)->id()))) { 18197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) extension = iter->get(); 1820c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) break; 1821c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 1822c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 1823c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 18242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (IsExtensionWithPermissionOrSuggestInConsole( 18255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) APIPermission::kNotifications, 18265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extension, 18270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch render_frame_host->GetRenderViewHost())) { 18285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) callback.Run(blink::WebNotificationPermissionAllowed); 18295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 18305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 183103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#endif 18325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) WebContents* web_contents = WebContents::FromRenderFrameHost( 18345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) render_frame_host); 18355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int render_process_id = render_frame_host->GetProcess()->GetID(); 18365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const PermissionRequestID request_id(render_process_id, 18375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) web_contents->GetRoutingID(), 18385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) -1 /* bridge id */, 18395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GURL()); 18405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 18415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) notification_service->RequestNotificationPermission( 18425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) web_contents, 18435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) request_id, 18445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) source_origin, 18455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // TODO(peter): plumb user_gesture over IPC 18465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) true, 18475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) callback); 18485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 18495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 18505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTIMPLEMENTED(); 18515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 18525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 18535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)blink::WebNotificationPermission 18555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)ChromeContentBrowserClient::CheckDesktopNotificationPermission( 18565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const GURL& source_origin, 18575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) content::ResourceContext* context, 18585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int render_process_id) { 18595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(ENABLE_NOTIFICATIONS) 18605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 18617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 18625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); 1863f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) InfoMap* extension_info_map = io_data->GetExtensionInfoMap(); 1864f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1865f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // We want to see if there is an extension that hasn't been manually disabled 1866f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // that has the notifications permission and applies to this security origin. 1867f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // First, get the list of extensions with permission for the origin. 18685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::ExtensionSet extensions; 1869f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) extension_info_map->GetExtensionsWithAPIPermissionForSecurityOrigin( 18705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) source_origin, 18715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) render_process_id, 18725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extensions::APIPermission::kNotifications, 18735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) &extensions); 18745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (extensions::ExtensionSet::const_iterator iter = extensions.begin(); 1875f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) iter != extensions.end(); ++iter) { 1876f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Then, check to see if it's been disabled by the user. 1877f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!extension_info_map->AreNotificationsDisabled((*iter)->id())) 18785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return blink::WebNotificationPermissionAllowed; 1879c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 1880c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1881f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // No enabled extensions exist, so check the normal host content settings. 1882f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) HostContentSettingsMap* host_content_settings_map = 1883f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) io_data->GetHostContentSettingsMap(); 1884f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ContentSetting setting = host_content_settings_map->GetContentSetting( 1885f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) source_origin, 1886f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) source_origin, 1887f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CONTENT_SETTINGS_TYPE_NOTIFICATIONS, 1888f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) NO_RESOURCE_IDENTIFIER); 1889f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1890f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (setting == CONTENT_SETTING_ALLOW) 18915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return blink::WebNotificationPermissionAllowed; 1892f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (setting == CONTENT_SETTING_BLOCK) 18935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return blink::WebNotificationPermissionDenied; 18945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return blink::WebNotificationPermissionDefault; 18955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 18965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return blink::WebNotificationPermissionAllowed; 18975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 18985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 18995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::ShowDesktopNotification( 19015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::ShowDesktopNotificationHostMsgParams& params, 19020529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch RenderFrameHost* render_frame_host, 19035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_ptr<content::DesktopNotificationDelegate> delegate, 19040529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch base::Closure* cancel_callback) { 19055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(ENABLE_NOTIFICATIONS) 19060529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch content::RenderProcessHost* process = render_frame_host->GetProcess(); 19075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext(process->GetBrowserContext()); 19085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DesktopNotificationService* service = 19095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DesktopNotificationServiceFactory::GetForProfile(profile); 19105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service->ShowDesktopNotification( 19115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) params, render_frame_host, delegate.Pass(), cancel_callback); 1912116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1913116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch profile->GetHostContentSettingsMap()->UpdateLastUsage( 1914116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch params.origin, params.origin, CONTENT_SETTINGS_TYPE_NOTIFICATIONS); 19155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 19165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTIMPLEMENTED(); 19175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 19185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1920f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void ChromeContentBrowserClient::RequestGeolocationPermission( 1921f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) content::WebContents* web_contents, 1922f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) int bridge_id, 1923f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const GURL& requesting_frame, 1924f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool user_gesture, 1925f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Callback<void(bool)> result_callback, 1926f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Closure* cancel_callback) { 1927f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GeolocationPermissionContextFactory::GetForProfile( 1928f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Profile::FromBrowserContext(web_contents->GetBrowserContext()))-> 1929f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) RequestGeolocationPermission(web_contents, bridge_id, 1930f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) requesting_frame, user_gesture, 1931f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) result_callback, cancel_callback); 1932f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 1933f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 1934f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void ChromeContentBrowserClient::RequestMidiSysExPermission( 1935f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) content::WebContents* web_contents, 1936f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) int bridge_id, 1937f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const GURL& requesting_frame, 1938f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool user_gesture, 1939f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Callback<void(bool)> result_callback, 1940f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Closure* cancel_callback) { 1941f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) MidiPermissionContext* context = 1942f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) MidiPermissionContextFactory::GetForProfile( 1943f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Profile::FromBrowserContext(web_contents->GetBrowserContext())); 1944116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int renderer_id = web_contents->GetRenderProcessHost()->GetID(); 1945116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int render_view_id = web_contents->GetRenderViewHost()->GetRoutingID(); 1946116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const PermissionRequestID id(renderer_id, render_view_id, bridge_id, GURL()); 1947116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1948116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch context->RequestPermission(web_contents, id, requesting_frame, 1949116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch user_gesture, result_callback); 1950116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 1951116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1952116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid ChromeContentBrowserClient::DidUseGeolocationPermission( 1953116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::WebContents* web_contents, 1954116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const GURL& frame_url, 1955116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const GURL& main_frame_url) { 1956116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch Profile::FromBrowserContext(web_contents->GetBrowserContext()) 1957116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ->GetHostContentSettingsMap() 1958116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ->UpdateLastUsage( 1959116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch frame_url, main_frame_url, CONTENT_SETTINGS_TYPE_GEOLOCATION); 1960f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 1961f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 1962f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void ChromeContentBrowserClient::RequestProtectedMediaIdentifierPermission( 1963f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) content::WebContents* web_contents, 1964f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const GURL& origin, 1965f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Callback<void(bool)> result_callback, 1966f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Closure* cancel_callback) { 1967f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#if defined(OS_ANDROID) 1968f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ProtectedMediaIdentifierPermissionContext* context = 1969f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ProtectedMediaIdentifierPermissionContextFactory::GetForProfile( 1970f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Profile::FromBrowserContext(web_contents->GetBrowserContext())); 1971f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) context->RequestProtectedMediaIdentifierPermission(web_contents, 1972f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) origin, 1973f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) result_callback, 1974f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) cancel_callback); 1975f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#else 1976f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) NOTIMPLEMENTED(); 1977f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) result_callback.Run(false); 1978f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif // defined(OS_ANDROID) 1979f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 1980f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 19815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::CanCreateWindow( 19825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& opener_url, 198358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const GURL& opener_top_level_frame_url, 19845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& source_origin, 19855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowContainerType container_type, 1986558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch const GURL& target_url, 1987558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch const content::Referrer& referrer, 1988558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch WindowOpenDisposition disposition, 1989558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch const WebWindowFeatures& features, 1990558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch bool user_gesture, 1991558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch bool opener_suppressed, 19925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ResourceContext* context, 19935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_process_id, 1994558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch int opener_id, 19955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool* no_javascript_access) { 19965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 19975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *no_javascript_access = false; 19995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If the opener is trying to create a background window but doesn't have 20015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the appropriate permission, fail the attempt. 20025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (container_type == WINDOW_CONTAINER_TYPE_BACKGROUND) { 2003116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(ENABLE_EXTENSIONS) 2004116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); 2005116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch InfoMap* map = io_data->GetExtensionInfoMap(); 20065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!map->SecurityOriginHasAPIPermission( 20075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) source_origin, 20085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) render_process_id, 20095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) APIPermission::kBackground)) { 20105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 20115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Note: this use of GetExtensionOrAppByURL is safe but imperfect. It may 20145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // return a recently installed Extension even if this CanCreateWindow call 20155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // was made by an old copy of the page in a normal web process. That's ok, 20165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // because the permission check above would have caused an early return 20175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // already. We must use the full URL to find hosted apps, though, and not 20185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // just the origin. 2019ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const Extension* extension = 2020ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch map->extensions().GetExtensionOrAppByURL(opener_url); 20212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (extension && !extensions::BackgroundInfo::AllowJSAccess(extension)) 20225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *no_javascript_access = true; 2023116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 2024558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 2025558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch return true; 20265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2027c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2028116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(ENABLE_EXTENSIONS) 20296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (extensions::WebViewRendererState::GetInstance()->IsGuest( 20306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) render_process_id)) 2031558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch return true; 2032116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 2033558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 2034558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch HostContentSettingsMap* content_settings = 2035558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch ProfileIOData::FromResourceContext(context)->GetHostContentSettingsMap(); 203658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) BlockedWindowParams blocked_params(target_url, 2037116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch referrer, 2038116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch disposition, 2039116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch features, 2040116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch user_gesture, 2041116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch opener_suppressed, 2042116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch render_process_id, 2043116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch opener_id); 2044558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 20452385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch if (!user_gesture && !CommandLine::ForCurrentProcess()->HasSwitch( 20462385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch switches::kDisablePopupBlocking)) { 204758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (content_settings->GetContentSetting(opener_top_level_frame_url, 204858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) opener_top_level_frame_url, 2049558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch CONTENT_SETTINGS_TYPE_POPUPS, 205058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) std::string()) != 2051558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch CONTENT_SETTING_ALLOW) { 205258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) BrowserThread::PostTask(BrowserThread::UI, 205358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) FROM_HERE, 205458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Bind(&HandleBlockedPopupOnUIThread, 205558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) blocked_params)); 205658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return false; 2057558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch } 205858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 2059558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 206058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(OS_ANDROID) 206158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (SingleTabModeTabHelper::IsRegistered(render_process_id, opener_id)) { 2062558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch BrowserThread::PostTask(BrowserThread::UI, 2063558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch FROM_HERE, 206458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Bind(&HandleSingleTabModeBlockOnUIThread, 206558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) blocked_params)); 2066558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch return false; 2067558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch } 206858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif 2069558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 20705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 20715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::ResourceDispatcherHostCreated() { 2074cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 2075cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) prerender_tracker_ = g_browser_process->prerender_tracker(); 20765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return g_browser_process->ResourceDispatcherHostCreated(); 20775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2079c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// TODO(tommi): Rename from Get to Create. 20805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)content::SpeechRecognitionManagerDelegate* 20815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeContentBrowserClient::GetSpeechRecognitionManagerDelegate() { 20827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return new speech::ChromeSpeechRecognitionManagerDelegate(); 20835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)net::NetLog* ChromeContentBrowserClient::GetNetLog() { 20865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return g_browser_process->net_log(); 20875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AccessTokenStore* ChromeContentBrowserClient::CreateAccessTokenStore() { 20905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new ChromeAccessTokenStore(); 20915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::IsFastShutdownPossible() { 20942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 20955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::OverrideWebkitPrefs( 20985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewHost* rvh, const GURL& url, WebPreferences* web_prefs) { 20995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 21005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rvh->GetProcess()->GetBrowserContext()); 21015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefService* prefs = profile->GetPrefs(); 21025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21038bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // Fill per-script font preferences. These are not registered on Android 21048bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // - http://crbug.com/308033. 21058bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#if !defined(OS_ANDROID) 21065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FontFamilyCache::FillFontFamilyMap(profile, 21075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) prefs::kWebKitStandardFontFamilyMap, 21085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) &web_prefs->standard_font_family_map); 21095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FontFamilyCache::FillFontFamilyMap(profile, 21105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) prefs::kWebKitFixedFontFamilyMap, 21115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) &web_prefs->fixed_font_family_map); 21125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FontFamilyCache::FillFontFamilyMap(profile, 21135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) prefs::kWebKitSerifFontFamilyMap, 21145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) &web_prefs->serif_font_family_map); 21155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FontFamilyCache::FillFontFamilyMap(profile, 21165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) prefs::kWebKitSansSerifFontFamilyMap, 21175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) &web_prefs->sans_serif_font_family_map); 21185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FontFamilyCache::FillFontFamilyMap(profile, 21195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) prefs::kWebKitCursiveFontFamilyMap, 21205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) &web_prefs->cursive_font_family_map); 21215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FontFamilyCache::FillFontFamilyMap(profile, 21225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) prefs::kWebKitFantasyFontFamilyMap, 21235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) &web_prefs->fantasy_font_family_map); 21245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FontFamilyCache::FillFontFamilyMap(profile, 21255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) prefs::kWebKitPictographFontFamilyMap, 21265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) &web_prefs->pictograph_font_family_map); 21278bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#endif 21285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->default_font_size = 21305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetInteger(prefs::kWebKitDefaultFontSize); 21315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->default_fixed_font_size = 21325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetInteger(prefs::kWebKitDefaultFixedFontSize); 21335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->minimum_font_size = 21345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetInteger(prefs::kWebKitMinimumFontSize); 21355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->minimum_logical_font_size = 21365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetInteger(prefs::kWebKitMinimumLogicalFontSize); 21375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->default_encoding = prefs->GetString(prefs::kDefaultCharset); 21395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->javascript_can_open_windows_automatically = 21415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kWebKitJavascriptCanOpenWindowsAutomatically); 21425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->dom_paste_enabled = 21435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kWebKitDomPasteEnabled); 21445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->shrinks_standalone_images_to_fit = 21455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kWebKitShrinksStandaloneImagesToFit); 21465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->tabs_to_links = prefs->GetBoolean(prefs::kWebkitTabsToLinks); 21475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!prefs->GetBoolean(prefs::kWebKitJavascriptEnabled)) 21495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->javascript_enabled = false; 21505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!prefs->GetBoolean(prefs::kWebKitWebSecurityEnabled)) 21515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->web_security_enabled = false; 21525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!prefs->GetBoolean(prefs::kWebKitPluginsEnabled)) 21535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->plugins_enabled = false; 21545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!prefs->GetBoolean(prefs::kWebKitJavaEnabled)) 21555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->java_enabled = false; 21565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->loads_images_automatically = 21575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kWebKitLoadsImagesAutomatically); 21585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (prefs->GetBoolean(prefs::kDisable3DAPIs)) 21605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->experimental_webgl_enabled = false; 21615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->allow_displaying_insecure_content = 21635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kWebKitAllowDisplayingInsecureContent); 21645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->allow_running_insecure_content = 21655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kWebKitAllowRunningInsecureContent); 21665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 21670f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) web_prefs->font_scale_factor = 21680f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) static_cast<float>(prefs->GetDouble(prefs::kWebKitFontScaleFactor)); 21690f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) web_prefs->device_scale_adjustment = GetDeviceScaleAdjustment(); 21705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->force_enable_zoom = 21715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kWebKitForceEnableZoom); 21725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2173b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 2174868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#if defined(OS_ANDROID) 2175868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) web_prefs->password_echo_enabled = 2176868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) prefs->GetBoolean(prefs::kWebKitPasswordEchoEnabled); 2177868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#else 21785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->password_echo_enabled = browser_defaults::kPasswordEchoEnabled; 2179868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif 2180868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 2181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) web_prefs->asynchronous_spell_checking_enabled = true; 2182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) web_prefs->unified_textchecker_enabled = true; 21835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->uses_universal_detector = 21855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kWebKitUsesUniversalDetector); 21865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->text_areas_are_resizable = 21875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kWebKitTextAreasAreResizable); 21885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->hyperlink_auditing_enabled = 21895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kEnableHyperlinkAuditing); 21905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure we will set the default_encoding with canonical encoding name. 21925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->default_encoding = 21935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CharacterEncoding::GetCanonicalEncodingNameByAliasName( 21945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->default_encoding); 21955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (web_prefs->default_encoding.empty()) { 21965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->ClearPref(prefs::kDefaultCharset); 21975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->default_encoding = prefs->GetString(prefs::kDefaultCharset); 21985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 21995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(!web_prefs->default_encoding.empty()); 22005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (size_t i = 0; i < extra_parts_.size(); ++i) 22025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extra_parts_[i]->OverrideWebkitPrefs(rvh, url, web_prefs); 22035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::BrowserURLHandlerCreated( 22065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserURLHandler* handler) { 22075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (size_t i = 0; i < extra_parts_.size(); ++i) 22085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extra_parts_[i]->BrowserURLHandlerCreated(handler); 22095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // about: handler. Must come before chrome: handler, since it will 22115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // rewrite about: urls to chrome: URLs and then expect chrome: to 22125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // actually handle them. 22135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handler->AddHandlerPair(&WillHandleBrowserAboutURL, 22145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserURLHandler::null_handler()); 221558e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch 2216effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#if defined(OS_ANDROID) 2217effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Handler to rewrite chrome://newtab on Android. 2218effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch handler->AddHandlerPair(&chrome::android::HandleAndroidNewTabURL, 2219effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch BrowserURLHandler::null_handler()); 2220effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#else 222158e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch // Handler to rewrite chrome://newtab for InstantExtended. 222258e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch handler->AddHandlerPair(&chrome::HandleNewTabURLRewrite, 222358e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch &chrome::HandleNewTabURLReverseRewrite); 2224effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif 222558e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch 22265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // chrome: & friends. 22275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handler->AddHandlerPair(&HandleWebUI, &HandleWebUIReverse); 22285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::ClearCache(RenderViewHost* rvh) { 22315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 22325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rvh->GetSiteInstance()->GetProcess()->GetBrowserContext()); 22335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowsingDataRemover* remover = 22345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowsingDataRemover::CreateForUnboundedRange(profile); 22355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) remover->Remove(BrowsingDataRemover::REMOVE_CACHE, 22365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowsingDataHelper::UNPROTECTED_WEB); 22375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // BrowsingDataRemover takes care of deleting itself when done. 22385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::ClearCookies(RenderViewHost* rvh) { 22415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 22425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rvh->GetSiteInstance()->GetProcess()->GetBrowserContext()); 22435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowsingDataRemover* remover = 22445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowsingDataRemover::CreateForUnboundedRange(profile); 22455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int remove_mask = BrowsingDataRemover::REMOVE_SITE_DATA; 22465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) remover->Remove(remove_mask, BrowsingDataHelper::UNPROTECTED_WEB); 22475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // BrowsingDataRemover takes care of deleting itself when done. 22485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::FilePath ChromeContentBrowserClient::GetDefaultDownloadDirectory() { 22513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return DownloadPrefs::GetDefaultDownloadDirectory(); 22525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string ChromeContentBrowserClient::GetDefaultDownloadName() { 22555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return l10n_util::GetStringUTF8(IDS_DEFAULT_DOWNLOAD_FILENAME); 22565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::DidCreatePpapiPlugin( 22595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserPpapiHost* browser_host) { 22602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(ENABLE_PLUGINS) 22615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser_host->GetPpapiHost()->AddHostFactoryFilter( 22625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ppapi::host::HostFactory>( 22635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new ChromeBrowserPepperHostFactory(browser_host))); 22642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 22655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)content::BrowserPpapiHost* 22685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeContentBrowserClient::GetExternalBrowserPpapiHost( 22695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int plugin_process_id) { 2270116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if !defined(DISABLE_NACL) 2271116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::BrowserChildProcessHostIterator iter(PROCESS_TYPE_NACL_LOADER); 22725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (!iter.Done()) { 2273f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) nacl::NaClProcessHost* host = static_cast<nacl::NaClProcessHost*>( 2274f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) iter.GetDelegate()); 22755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (host->process() && 22765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host->process()->GetData().id == plugin_process_id) { 22775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Found the plugin. 22785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return host->browser_ppapi_host(); 22795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++iter; 22815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2282116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 22835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 22845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::AllowPepperSocketAPI( 22875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserContext* browser_context, 22885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 22897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool private_api, 229068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const content::SocketPermissionRequest* params) { 229103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 22927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext(browser_context); 22935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const extensions::ExtensionSet* extension_set = NULL; 22947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (profile) { 2295116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const ExtensionService* ext_service = 2296116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extensions::ExtensionSystem::Get(profile)->extension_service(); 2297116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (ext_service) { 2298116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extension_set = ext_service->extensions(); 2299116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 23007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 23017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 23027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (private_api) { 23037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Access to private socket APIs is controlled by the whitelist. 23047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (IsExtensionOrSharedModuleWhitelisted(url, extension_set, 23057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) allowed_socket_origins_)) { 23067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return true; 23077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 23087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } else { 23097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Access to public socket APIs is controlled by extension permissions. 23107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (url.is_valid() && url.SchemeIs(extensions::kExtensionScheme) && 23117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) extension_set) { 23127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const Extension* extension = extension_set->GetByID(url.host()); 23137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (extension) { 231446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const extensions::PermissionsData* permissions_data = 231546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) extension->permissions_data(); 231668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (params) { 231768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) extensions::SocketPermission::CheckParam check_params( 231868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) params->type, params->host, params->port); 231946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (permissions_data->CheckAPIPermissionWithParam( 232046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) extensions::APIPermission::kSocket, &check_params)) { 232168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return true; 232268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 232346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } else if (permissions_data->HasAPIPermission( 232446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) extensions::APIPermission::kSocket)) { 232546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return true; 23267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 23277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 23287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 23297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 23307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 23317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Allow both public and private APIs if the command line says so. 23327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return IsHostAllowedByCommandLine(url, extension_set, 23337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) switches::kAllowNaClSocketAPI); 2334868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#else 23355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 2336868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif 23375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 23385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ui::SelectFilePolicy* ChromeContentBrowserClient::CreateSelectFilePolicy( 23402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* web_contents) { 23412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return new ChromeSelectFilePolicy(web_contents); 23422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 23432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2344c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void ChromeContentBrowserClient::GetAdditionalAllowedSchemesForFileSystem( 2345c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<std::string>* additional_allowed_schemes) { 2346c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ContentBrowserClient::GetAdditionalAllowedSchemesForFileSystem( 2347c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) additional_allowed_schemes); 23485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) additional_allowed_schemes->push_back(content::kChromeDevToolsScheme); 23495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) additional_allowed_schemes->push_back(content::kChromeUIScheme); 23505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (size_t i = 0; i < extra_parts_.size(); ++i) { 23515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extra_parts_[i]->GetAdditionalAllowedSchemesForFileSystem( 23525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) additional_allowed_schemes); 23535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 2354c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 2355c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 235623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)void ChromeContentBrowserClient::GetURLRequestAutoMountHandlers( 235703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) std::vector<storage::URLRequestAutoMountHandler>* handlers) { 23585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (size_t i = 0; i < extra_parts_.size(); ++i) 23595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extra_parts_[i]->GetURLRequestAutoMountHandlers(handlers); 236023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 236123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 23627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid ChromeContentBrowserClient::GetAdditionalFileSystemBackends( 23637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch content::BrowserContext* browser_context, 2364c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& storage_partition_path, 236503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ScopedVector<storage::FileSystemBackend>* additional_backends) { 2366eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#if defined(OS_CHROMEOS) 236703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) storage::ExternalMountPoints* external_mount_points = 23687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch content::BrowserContext::GetMountPoints(browser_context); 2369eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DCHECK(external_mount_points); 23700529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch chromeos::FileSystemBackend* backend = new chromeos::FileSystemBackend( 23710529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch new drive::FileSystemBackendDelegate, 23720529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch new chromeos::file_system_provider::BackendDelegate, 23735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu new chromeos::MTPFileSystemBackendDelegate(storage_partition_path), 23740529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch browser_context->GetSpecialStoragePolicy(), 23750529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch external_mount_points, 237603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) storage::ExternalMountPoints::GetSystemInstance()); 23777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch backend->AddSystemMountPoints(); 237803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) DCHECK(backend->CanHandleType(storage::kFileSystemTypeExternal)); 23797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch additional_backends->push_back(backend); 2380eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif 2381a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 238223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#if defined(ENABLE_SERVICE_DISCOVERY) 23835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (CommandLine::ForCurrentProcess()->HasSwitch( 23845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) switches::kEnablePrivetStorage)) { 238503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) additional_backends->push_back(new local_discovery::PrivetFileSystemBackend( 238603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) storage::ExternalMountPoints::GetSystemInstance(), browser_context)); 23875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 2388a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif 23895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 23905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (size_t i = 0; i < extra_parts_.size(); ++i) { 23915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extra_parts_[i]->GetAdditionalFileSystemBackends( 23925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) browser_context, storage_partition_path, additional_backends); 23935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 2394c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 2395c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 23965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_POSIX) && !defined(OS_MACOSX) 23975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::GetAdditionalMappedFilesForChildProcess( 23985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const CommandLine& command_line, 23995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int child_process_id, 24005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FileDescriptorInfo>* mappings) { 24015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 24022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath data_path; 24035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PathService::Get(ui::DIR_RESOURCE_PAKS_ANDROID, &data_path); 24045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(!data_path.empty()); 24055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2406a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int flags = base::File::FLAG_OPEN | base::File::FLAG_READ; 24072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath chrome_resources_pak = 24085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data_path.AppendASCII("chrome_100_percent.pak"); 2409a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::File file(chrome_resources_pak, flags); 2410a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DCHECK(file.IsValid()); 24112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mappings->push_back(FileDescriptorInfo(kAndroidChrome100PercentPakDescriptor, 2412a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) FileDescriptor(file.Pass()))); 24135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string locale = GetApplicationLocale(); 24152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath locale_pak = ResourceBundle::GetSharedInstance(). 24165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetLocaleFilePath(locale, false); 2417a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) file.Initialize(locale_pak, flags); 2418a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DCHECK(file.IsValid()); 24195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mappings->push_back(FileDescriptorInfo(kAndroidLocalePakDescriptor, 2420a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) FileDescriptor(file.Pass()))); 24215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath resources_pack_path; 24232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PathService::Get(chrome::FILE_RESOURCES_PACK, &resources_pack_path); 2424a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) file.Initialize(resources_pack_path, flags); 2425a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DCHECK(file.IsValid()); 24262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mappings->push_back(FileDescriptorInfo(kAndroidUIResourcesPakDescriptor, 2427a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) FileDescriptor(file.Pass()))); 24282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 24298bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (breakpad::IsCrashReporterEnabled()) { 2430a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) file = breakpad::CrashDumpManager::GetInstance()->CreateMinidumpFile( 2431a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) child_process_id); 2432a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (file.IsValid()) { 2433a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) mappings->push_back(FileDescriptorInfo(kAndroidMinidumpDescriptor, 2434a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) FileDescriptor(file.Pass()))); 2435a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } else { 24362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOG(ERROR) << "Failed to create file for minidump, crash reporting will " 24372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "be disabled for this process."; 24382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 24395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 24405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2441f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::FilePath app_data_path; 2442f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PathService::Get(base::DIR_ANDROID_APP_DATA, &app_data_path); 2443f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) DCHECK(!app_data_path.empty()); 2444f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 2445f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) flags = base::File::FLAG_OPEN | base::File::FLAG_READ; 2446f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::FilePath icudata_path = 2447f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) app_data_path.AppendASCII("icudtl.dat"); 2448f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::File icudata_file(icudata_path, flags); 2449f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) DCHECK(icudata_file.IsValid()); 2450f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) mappings->push_back(FileDescriptorInfo(kAndroidICUDataDescriptor, 2451f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) FileDescriptor(icudata_file.Pass()))); 2452f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 24535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 24545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int crash_signal_fd = GetCrashSignalFD(command_line); 24555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (crash_signal_fd >= 0) { 24565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mappings->push_back(FileDescriptorInfo(kCrashDumpSignal, 24575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FileDescriptor(crash_signal_fd, 24585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false))); 24595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 24605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_ANDROID) 24615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 24625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_POSIX) && !defined(OS_MACOSX) 24635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 24655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t* ChromeContentBrowserClient::GetResourceDllName() { 24665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return chrome::kBrowserResourcesDll; 24675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 24685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ChromeContentBrowserClient::PreSpawnRenderer( 24702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sandbox::TargetPolicy* policy, 24712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool* success) { 24722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This code is duplicated in nacl_exe_win_64.cc. 24732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Allow the server side of a pipe restricted to the "chrome.nacl." 24742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // namespace so that it cannot impersonate other system or other chrome 24752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // service pipes. 24762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sandbox::ResultCode result = policy->AddRule( 24772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sandbox::TargetPolicy::SUBSYS_NAMED_PIPES, 24782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sandbox::TargetPolicy::NAMEDPIPES_ALLOW_ANY, 24792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) L"\\\\.\\pipe\\chrome.nacl.*"); 24802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (result != sandbox::SBOX_ALL_OK) { 24812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *success = false; 24822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 24832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 24842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 24852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Renderers need to send named pipe handles and shared memory 24862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // segment handles to NaCl loader processes. 24872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result = policy->AddRule(sandbox::TargetPolicy::SUBSYS_HANDLES, 24882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sandbox::TargetPolicy::HANDLES_DUP_ANY, 24892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) L"File"); 24902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (result != sandbox::SBOX_ALL_OK) { 24912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *success = false; 24922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 24932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 24945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 24955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 24965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2497f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)content::DevToolsManagerDelegate* 2498f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)ChromeContentBrowserClient::GetDevToolsManagerDelegate() { 2499f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return new ChromeDevToolsManagerDelegate(); 2500f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 2501f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 25024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)bool ChromeContentBrowserClient::IsPluginAllowedToCallRequestOSFileHandle( 25034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) content::BrowserContext* browser_context, 25044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const GURL& url) { 250503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 25064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) Profile* profile = Profile::FromBrowserContext(browser_context); 25075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const extensions::ExtensionSet* extension_set = NULL; 25084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (profile) { 2509116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const ExtensionService* ext_service = 2510116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extensions::ExtensionSystem::Get(profile)->extension_service(); 2511116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (ext_service) { 2512116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extension_set = ext_service->extensions(); 2513116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 25144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 25154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return IsExtensionOrSharedModuleWhitelisted(url, extension_set, 25164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) allowed_file_handle_origins_) || 25174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) IsHostAllowedByCommandLine(url, extension_set, 25184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) switches::kAllowNaClFileHandleAPI); 25194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#else 25204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return false; 25214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif 25224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 25234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 25246d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)bool ChromeContentBrowserClient::IsPluginAllowedToUseDevChannelAPIs( 25256d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) content::BrowserContext* browser_context, 25266d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const GURL& url) { 252703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 25285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Allow access for tests. 25295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (CommandLine::ForCurrentProcess()->HasSwitch( 25305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) switches::kEnablePepperTesting)) { 25315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return true; 25325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 25335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 25346d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext(browser_context); 25356d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const extensions::ExtensionSet* extension_set = NULL; 25366d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) if (profile) { 2537116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const ExtensionService* ext_service = 2538116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extensions::ExtensionSystem::Get(profile)->extension_service(); 2539116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (ext_service) { 2540116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extension_set = ext_service->extensions(); 2541116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 25426d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) } 25436d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 25446d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Allow access for whitelisted applications. 25456d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) if (IsExtensionOrSharedModuleWhitelisted(url, 25466d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) extension_set, 25476d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) allowed_dev_channel_origins_)) { 25486d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) return true; 25496d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) } 25506d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 25515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel(); 25525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Allow dev channel APIs to be used on "Canary", "Dev", and "Unknown" 25535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // releases of Chrome. Permitting "Unknown" allows these APIs to be used on 25545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Chromium builds as well. 25555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return channel <= chrome::VersionInfo::CHANNEL_DEV; 25565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#else 25575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return false; 25585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif 25595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 25605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2561cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)net::CookieStore* 2562cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)ChromeContentBrowserClient::OverrideCookieStoreForRenderProcess( 2563cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) int render_process_id) { 2564cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 2565cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!prerender_tracker_) 2566cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return NULL; 2567cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return prerender_tracker_-> 2568cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) GetPrerenderCookieStoreForRenderProcess(render_process_id); 2569cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 2570cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 2571a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if defined(ENABLE_WEBRTC) 2572a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void ChromeContentBrowserClient::MaybeCopyDisableWebRtcEncryptionSwitch( 2573a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) CommandLine* to_command_line, 2574a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const CommandLine& from_command_line, 2575a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) VersionInfo::Channel channel) { 2576a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if defined(OS_ANDROID) 2577a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const VersionInfo::Channel kMaxDisableEncryptionChannel = 2578a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) VersionInfo::CHANNEL_BETA; 2579a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#else 2580a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const VersionInfo::Channel kMaxDisableEncryptionChannel = 2581a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) VersionInfo::CHANNEL_DEV; 2582a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif 2583a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (channel <= kMaxDisableEncryptionChannel) { 2584a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) static const char* const kWebRtcDevSwitchNames[] = { 2585a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) switches::kDisableWebRtcEncryption, 2586a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) }; 2587a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) to_command_line->CopySwitchesFrom(from_command_line, 2588a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) kWebRtcDevSwitchNames, 2589a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) arraysize(kWebRtcDevSwitchNames)); 2590a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 2591a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 2592a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif // defined(ENABLE_WEBRTC) 25935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 25945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace chrome 2595