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" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/content_settings/tab_specific_content_settings.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/defaults.h" 343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "chrome/browser/download/download_prefs.h" 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/font_family_cache.h" 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/geolocation/chrome_access_token_store.h" 37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/geolocation/geolocation_permission_context.h" 38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/geolocation/geolocation_permission_context_factory.h" 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/media/cast_transport_host_filter.h" 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/media/media_capture_devices_dispatcher.h" 41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/media/midi_permission_context.h" 42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/media/midi_permission_context_factory.h" 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.h" 448bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "chrome/browser/nacl_host/nacl_browser_delegate_impl.h" 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/net/chrome_net_log.h" 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/notifications/desktop_notification_service.h" 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/notifications/desktop_notification_service_factory.h" 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/platform_util.h" 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/plugins/plugin_info_message_filter.h" 50558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "chrome/browser/prerender/prerender_final_status.h" 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prerender/prerender_manager.h" 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prerender/prerender_manager_factory.h" 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prerender/prerender_message_filter.h" 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prerender/prerender_tracker.h" 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/printing/printing_message_filter.h" 5690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.h" 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile_io_data.h" 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/renderer_host/chrome_render_message_filter.h" 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/renderer_host/pepper/chrome_browser_pepper_host_factory.h" 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/search/instant_service.h" 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/search/instant_service_factory.h" 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/search/search.h" 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/search_engines/search_provider_install_state_message_filter.h" 65a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/browser/signin/principals_message_filter.h" 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/speech/chrome_speech_recognition_manager_delegate.h" 67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/speech/tts_controller.h" 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/speech/tts_message_filter.h" 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ssl/ssl_add_certificate.h" 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ssl/ssl_blocking_page.h" 7146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/ssl/ssl_client_certificate_selector.h" 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/tab_contents/tab_util.h" 7358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/ui/blocked_content/blocked_window_params.h" 74424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "chrome/browser/ui/blocked_content/popup_blocker_tab_helper.h" 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/chrome_select_file_policy.h" 76eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/browser/ui/sync/sync_promo_ui.h" 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/tab_contents/chrome_web_contents_view_delegate.h" 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/chrome_web_ui_controller_factory.h" 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_constants.h" 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_paths.h" 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 828bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "chrome/common/env_vars.h" 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/logging_chrome.h" 847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/common/pepper_permission_util.h" 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/render_messages.h" 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/url_constants.h" 8803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "chrome/grit/generated_resources.h" 894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/installer/util/google_update_settings.h" 90a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)#include "chromeos/chromeos_constants.h" 91010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "components/cdm/browser/cdm_message_filter_android.h" 920529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "components/cloud_devices/common/cloud_devices_switches.h" 931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/content_settings/core/browser/content_settings_provider.h" 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/content_settings/core/common/content_settings.h" 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/content_settings/core/common/permission_request_id.h" 965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/dom_distiller/core/url_constants.h" 976d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "components/google/core/browser/google_util.h" 985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/metrics/client_info.h" 99cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/pref_registry/pref_registry_syncable.h" 1000529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "components/signin/core/common/profile_management_switches.h" 1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/translate/core/common/translate_switches.h" 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_child_process_host.h" 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_main_parts.h" 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_ppapi_host.h" 105868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "content/public/browser/browser_thread.h" 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_url_handler.h" 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/child_process_data.h" 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/child_process_security_policy.h" 1095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "content/public/browser/desktop_notification_delegate.h" 1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/public/browser/render_frame_host.h" 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_process_host.h" 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_view_host.h" 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/resource_context.h" 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/site_instance.h" 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/child_process_host.h" 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/content_descriptors.h" 118116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/public/common/show_desktop_notification_params.h" 11968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "content/public/common/url_utils.h" 120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/public/common/web_preferences.h" 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/base/mime_util.h" 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/cookies/canonical_cookie.h" 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/cookies/cookie_options.h" 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/ssl/ssl_cert_request_info.h" 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/host/ppapi_host.h" 1265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ppapi/shared_impl/ppapi_switches.h" 1271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "storage/browser/fileapi/external_mount_points.h" 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/resource/resource_bundle.h" 13003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "ui/resources/grit/ui_resources.h" 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 1335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/win/windows_version.h" 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chrome_browser_main_win.h" 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "sandbox/win/src/sandbox_policy.h" 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chrome_browser_main_mac.h" 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/spellchecker/spellcheck_message_filter_mac.h" 1391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/crash/app/breakpad_mac.h" 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_CHROMEOS) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/chrome_browser_main_chromeos.h" 1425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/chromeos/drive/fileapi/file_system_backend_delegate.h" 143116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/chromeos/file_manager/app_id.h" 1440529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "chrome/browser/chromeos/file_system_provider/fileapi/backend_delegate.h" 1457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chromeos/fileapi/file_system_backend.h" 1465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/chromeos/fileapi/mtp_file_system_backend_delegate.h" 147b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "chrome/browser/chromeos/login/startup_utils.h" 148558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "chrome/browser/chromeos/system/input_device_settings.h" 149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/chromeos_switches.h" 1506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "components/user_manager/user_manager.h" 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_LINUX) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chrome_browser_main_linux.h" 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_ANDROID) 154effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/android/new_tab_page_url_handler.h" 15558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/android/webapps/single_tab_mode_tab_helper.h" 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chrome_browser_main_android.h" 157f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/media/protected_media_identifier_permission_context.h" 158f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/media/protected_media_identifier_permission_context_factory.h" 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/descriptors_android.h" 1601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/crash/browser/crash_dump_manager_android.h" 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_POSIX) 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chrome_browser_main_posix.h" 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#if defined(OS_POSIX) && !defined(OS_MACOSX) 1668bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "base/debug/leak_annotations.h" 1671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/crash/app/breakpad_linux.h" 1681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/crash/browser/crash_handler_host_linux.h" 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/ui_base_paths.h" 1738bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "ui/gfx/android/device_display_info.h" 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(OS_ANDROID) 1771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/android/dev_tools_manager_delegate_android.h" 1781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#else 1791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/devtools/chrome_devtools_manager_delegate.h" 1801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif 1811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if !defined(OS_CHROMEOS) 183effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/signin/chrome_signin_client.h" 184effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/signin/chrome_signin_client_factory.h" 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/signin/signin_manager_factory.h" 186e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "components/signin/core/browser/signin_manager.h" 187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(TOOLKIT_VIEWS) 1907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/ui/views/chrome_browser_main_extra_parts_views.h" 1917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif 1927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(USE_ATHENA) 1941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "athena/content/public/web_contents_view_delegate_creator.h" 1951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/ui/views/athena/chrome_browser_main_extra_parts_athena.h" 1961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#elif 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" 2241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/speech/extension_api/tts_engine_extension_api.h" 2251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/browser/extension_system.h" 2266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "extensions/browser/guest_view/guest_view_base.h" 2276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "extensions/browser/guest_view/guest_view_manager.h" 2281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/browser/guest_view/web_view/web_view_guest.h" 2291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/browser/guest_view/web_view/web_view_permission_helper.h" 2301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/browser/guest_view/web_view/web_view_renderer_state.h" 23103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "extensions/browser/suggest_permission_util.h" 2321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/common/constants.h" 2331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/common/extension.h" 2341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/common/extension_set.h" 2355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/common/manifest_handlers/background_info.h" 2361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/common/manifest_handlers/shared_module_info.h" 2371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/common/permissions/permissions_data.h" 2381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/common/permissions/socket_permission.h" 2391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/common/switches.h" 24046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif 24146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 242a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#if defined(ENABLE_SPELLCHECK) 243a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/spellchecker/spellcheck_message_filter.h" 244a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#endif 245a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 24646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#if defined(ENABLE_WEBRTC) 24746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/media/webrtc_logging_handler_host.h" 24846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif 24946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::FileDescriptor; 2516d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)using blink::WebWindowFeatures; 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::AccessTokenStore; 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread; 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserURLHandler; 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::ChildProcessSecurityPolicy; 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::QuotaPermissionContext; 2570529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochusing content::RenderFrameHost; 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::RenderViewHost; 259116680a4aac90f2aa7413d9095a592090648e557Ben Murdochusing content::ResourceType; 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::SiteInstance; 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContents; 262116680a4aac90f2aa7413d9095a592090648e557Ben Murdochusing content::WebPreferences; 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) 2701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciusing extensions::APIPermission; 2716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)using extensions::ChromeContentBrowserClientExtensionsPart; 2721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciusing extensions::Extension; 2731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciusing extensions::InfoMap; 2741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciusing extensions::Manifest; 2756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif 2766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 279c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Cached version of the locale so we can return the locale on the I/O 280c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// thread. 281c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)base::LazyInstance<std::string> g_io_thread_application_locale; 282c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 283868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#if defined(ENABLE_PLUGINS) 2846d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)// TODO(teravest): Add renderer-side API-specific checking for these APIs so 2856d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)// that blanket permission isn't granted to all dev channel APIs for these. 2866d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)// http://crbug.com/386743 2876d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)const char* const kPredefinedAllowedDevChannelOrigins[] = { 2886d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) "6EAED1924DB611B6EEF2A664BD077BE7EAD33B8F", // see crbug.com/383937 2896d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) "4EB74897CB187C7633357C2FE832E0AD6A44883A" // see crbug.com/383937 2906d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)}; 2916d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 292cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const char* const kPredefinedAllowedFileHandleOrigins[] = { 2930f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "6EAED1924DB611B6EEF2A664BD077BE7EAD33B8F", // see crbug.com/234789 2940f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "4EB74897CB187C7633357C2FE832E0AD6A44883A" // see crbug.com/234789 2950f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)}; 2960f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 297cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const char* const kPredefinedAllowedSocketOrigins[] = { 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "okddffdblfhhnmhodogpojmfkjmhinfp", // Test SSH Client 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "pnhechapfaindjhompbnflcldabbghjo", // HTerm App (SSH Client) 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "bglhmjfplikpjnfoegeomebmfnkjomhe", // see crbug.com/122126 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "gbchcmhmhahfdphkhkmpfmihenigjmpp", // Chrome Remote Desktop 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "kgngmbheleoaphbjbaiobfdepmghbfah", // Pre-release Chrome Remote Desktop 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "odkaodonbgfohohmklejpjiejmcipmib", // Dogfood Chrome Remote Desktop 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "ojoimpklfciegopdfgeenehpalipignm", // Chromoting canary 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "cbkkbcmdlboombapidmoeolnmdacpkch", // see crbug.com/129089 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "hhnbmknkdabfoieppbbljkhkfjcmcbjh", // see crbug.com/134099 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "mablfbjkhmhkmefkjjacnbaikjkipphg", // see crbug.com/134099 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "pdeelgamlgannhelgoegilelnnojegoh", // see crbug.com/134099 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "cabapfdbkniadpollkckdnedaanlciaj", // see crbug.com/134099 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "mapljbgnjledlpdmlchihnmeclmefbba", // see crbug.com/134099 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "ghbfeebgmiidnnmeobbbaiamklmpbpii", // see crbug.com/134099 3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "jdfhpkjeckflbbleddjlpimecpbjdeep", // see crbug.com/142514 313c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "iabmpiboiopbgfabjmgeedhcmjenhbla", // see crbug.com/165080 314c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "B7CF8A292249681AF81771650BA4CEEAF19A4560", // see crbug.com/165080 315c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "6EAED1924DB611B6EEF2A664BD077BE7EAD33B8F", // see crbug.com/234789 316c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "4EB74897CB187C7633357C2FE832E0AD6A44883A", // see crbug.com/234789 317c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "7525AF4F66763A70A883C4700529F647B470E4D2", // see crbug.com/238084 318c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "0B549507088E1564D672F7942EB87CA4DAD73972", // see crbug.com/238084 319c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "864288364E239573E777D3E0E36864E590E95C74" // see crbug.com/238084 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 321868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns a copy of the given url with its host set to given host and path set 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// to given path. Other parts of the url will be the same. 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GURL ReplaceURLHostAndPath(const GURL& url, 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& host, 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& path) { 3285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu url::Replacements<char> replacements; 3295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu replacements.SetHost(host.c_str(), url::Component(0, host.length())); 3305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu replacements.SetPath(path.c_str(), url::Component(0, path.length())); 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return url.ReplaceComponents(replacements); 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Maps "foo://bar/baz/" to "foo://chrome/bar/baz/". 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GURL AddUberHost(const GURL& url) { 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string uber_host = chrome::kChromeUIUberHost; 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string new_path = url.host() + url.path(); 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ReplaceURLHostAndPath(url, uber_host, new_path); 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// If url->host() is "chrome" and url->path() has characters other than the 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// first slash, changes the url from "foo://chrome/bar/" to "foo://bar/" and 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// returns true. Otherwise returns false. 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RemoveUberHost(GURL* url) { 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (url->host() != chrome::kChromeUIUberHost) 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (url->path().empty() || url->path() == "/") 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string old_path = url->path(); 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string::size_type separator = old_path.find('/', 1); 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string new_host; 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string new_path; 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (separator == std::string::npos) { 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_host = old_path.substr(1); 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_host = old_path.substr(1, separator - 1); 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_path = old_path.substr(separator); 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Do not allow URLs with paths empty before the first slash since we can't 3657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // have an empty host. (e.g "foo://chrome//") 3667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (new_host.empty()) 3677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return false; 3687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *url = ReplaceURLHostAndPath(*url, new_host, new_path); 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) DCHECK(url->is_valid()); 3727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Handles rewriting Web UI URLs. 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool HandleWebUI(GURL* url, content::BrowserContext* browser_context) { 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Do not handle special URLs such as "about:foo" 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!url->host().empty()) { 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL chrome_url = AddUberHost(*url); 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Handle valid "chrome://chrome/foo" URLs so the reverse handler will 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // be called. 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ChromeWebUIControllerFactory::GetInstance()->UseWebUIForURL( 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser_context, chrome_url)) 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ChromeWebUIControllerFactory::GetInstance()->UseWebUIForURL( 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser_context, *url)) 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Special case : in ChromeOS in Guest mode bookmarks and history are 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // disabled for security reasons. New tab page explains the reasons, so 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // we redirect user to new tab page. 3976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (user_manager::UserManager::Get()->IsLoggedInAsGuest()) { 3985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (url->SchemeIs(content::kChromeUIScheme) && 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (url->DomainIs(chrome::kChromeUIBookmarksHost) || 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url->DomainIs(chrome::kChromeUIHistoryHost))) { 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Rewrite with new tab URL 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *url = GURL(chrome::kChromeUINewTabURL); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Reverse URL handler for Web UI. Maps "chrome://chrome/foo/" to 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// "chrome://foo/". 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool HandleWebUIReverse(GURL* url, content::BrowserContext* browser_context) { 4135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!url->is_valid() || !url->SchemeIs(content::kChromeUIScheme)) 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return RemoveUberHost(url); 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool CertMatchesFilter(const net::X509Certificate& cert, 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::DictionaryValue& filter) { 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(markusheintz): This is the minimal required filter implementation. 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Implement a better matcher. 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // An empty filter matches any client certificate since no requirements are 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // specified at all. 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (filter.empty()) 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string common_name; 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (filter.GetString("ISSUER.CN", &common_name) && 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (cert.issuer().common_name == common_name)) { 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if defined(OS_POSIX) && !defined(OS_ANDROID) && !defined(OS_MACOSX) 4388bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)breakpad::CrashHandlerHostLinux* CreateCrashHandlerHost( 4398bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const std::string& process_type) { 4408bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) base::FilePath dumps_path; 4418bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) PathService::Get(chrome::DIR_CRASH_DUMPS, &dumps_path); 4428bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) { 4438bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ANNOTATE_SCOPED_MEMORY_LEAK; 444cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool upload = (getenv(env_vars::kHeadless) == NULL); 4458bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) breakpad::CrashHandlerHostLinux* crash_handler = 446cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) new breakpad::CrashHandlerHostLinux(process_type, dumps_path, upload); 4478bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) crash_handler->StartUploaderThread(); 4488bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return crash_handler; 4498bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 4508bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 4518bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int GetCrashSignalFD(const CommandLine& command_line) { 453cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Extensions have the same process type as renderers. 4545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (command_line.HasSwitch(extensions::switches::kExtensionProcess)) { 4558bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) static breakpad::CrashHandlerHostLinux* crash_handler = NULL; 4568bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (!crash_handler) 4578bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) crash_handler = CreateCrashHandlerHost("extension"); 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return crash_handler->GetDeathSignalSocket(); 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string process_type = 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line.GetSwitchValueASCII(switches::kProcessType); 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4648bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (process_type == switches::kRendererProcess) { 4658bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) static breakpad::CrashHandlerHostLinux* crash_handler = NULL; 4668bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (!crash_handler) 4678bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) crash_handler = CreateCrashHandlerHost(process_type); 4688bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return crash_handler->GetDeathSignalSocket(); 4698bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4718bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (process_type == switches::kPluginProcess) { 4728bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) static breakpad::CrashHandlerHostLinux* crash_handler = NULL; 4738bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (!crash_handler) 4748bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) crash_handler = CreateCrashHandlerHost(process_type); 4758bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return crash_handler->GetDeathSignalSocket(); 4768bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4788bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (process_type == switches::kPpapiPluginProcess) { 4798bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) static breakpad::CrashHandlerHostLinux* crash_handler = NULL; 4808bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (!crash_handler) 4818bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) crash_handler = CreateCrashHandlerHost(process_type); 4828bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return crash_handler->GetDeathSignalSocket(); 4838bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4858bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (process_type == switches::kGpuProcess) { 4868bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) static breakpad::CrashHandlerHostLinux* crash_handler = NULL; 4878bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (!crash_handler) 4888bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) crash_handler = CreateCrashHandlerHost(process_type); 4898bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return crash_handler->GetDeathSignalSocket(); 4908bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return -1; 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif // defined(OS_POSIX) && !defined(OS_ANDROID) && !defined(OS_MACOSX) 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 496c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if !defined(OS_CHROMEOS) 4972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)GURL GetEffectiveURLForSignin(const GURL& url) { 4982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHECK(SigninManager::IsWebBasedSigninFlowURL(url)); 4992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL effective_url(SigninManager::kChromeSigninEffectiveSite); 5012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Copy the path because the argument to SetPathStr must outlive 5022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the Replacements object. 5032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string path_copy(url.path()); 5042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL::Replacements replacements; 5052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) replacements.SetPathStr(path_copy); 5062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) effective_url = effective_url.ReplaceComponents(replacements); 5072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return effective_url; 5082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 509c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 510c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 511c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SetApplicationLocaleOnIOThread(const std::string& locale) { 512c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 513c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) g_io_thread_application_locale.Get() = locale; 514c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 515c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 51658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void HandleBlockedPopupOnUIThread(const BlockedWindowParams& params) { 51758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) WebContents* tab = tab_util::GetWebContentsByID(params.render_process_id(), 51858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) params.opener_id()); 519558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch if (!tab) 520558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch return; 521558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 5225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prerender::PrerenderContents* prerender_contents = 5235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prerender::PrerenderContents::FromWebContents(tab); 5245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (prerender_contents) { 5255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prerender_contents->Destroy(prerender::FINAL_STATUS_CREATE_NEW_WINDOW); 5265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return; 5275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 5285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 529558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch PopupBlockerTabHelper* popup_helper = 530558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch PopupBlockerTabHelper::FromWebContents(tab); 531558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch if (!popup_helper) 532558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch return; 53358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) popup_helper->AddBlockedPopup(params); 53458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 53558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 53658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(OS_ANDROID) 5378bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 53858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void HandleSingleTabModeBlockOnUIThread(const BlockedWindowParams& params) { 53958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) WebContents* web_contents = 54058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) tab_util::GetWebContentsByID(params.render_process_id(), 54158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) params.opener_id()); 54258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (!web_contents) 54358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return; 54458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 54558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) SingleTabModeTabHelper::FromWebContents(web_contents)->HandleOpenUrl(params); 546558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch} 5478bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 5480f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)float GetDeviceScaleAdjustment() { 5498bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) static const float kMinFSM = 1.05f; 5508bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) static const int kWidthForMinFSM = 320; 5518bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) static const float kMaxFSM = 1.3f; 5528bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) static const int kWidthForMaxFSM = 800; 5538bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 5548bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) gfx::DeviceDisplayInfo info; 5558bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) int minWidth = info.GetSmallestDIPWidth(); 5568bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 5578bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (minWidth <= kWidthForMinFSM) 5588bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return kMinFSM; 5598bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (minWidth >= kWidthForMaxFSM) 5608bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return kMaxFSM; 5618bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 5628bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // The font scale multiplier varies linearly between kMinFSM and kMaxFSM. 5638bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) float ratio = static_cast<float>(minWidth - kWidthForMinFSM) / 5648bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) (kWidthForMaxFSM - kWidthForMinFSM); 5658bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return ratio * (kMaxFSM - kMinFSM) + kMinFSM; 5668bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 5678bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 56858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif // defined(OS_ANDROID) 569558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 5706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 5716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// By default, JavaScript and images are enabled in guest content. 5726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void GetGuestViewDefaultContentSettingRules( 5736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) bool incognito, 5746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) RendererContentSettingRules* rules) { 5756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) rules->image_rules.push_back( 5766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ContentSettingPatternSource(ContentSettingsPattern::Wildcard(), 5776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ContentSettingsPattern::Wildcard(), 5786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) CONTENT_SETTING_ALLOW, 5796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::string(), 5806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) incognito)); 5816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 5826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) rules->script_rules.push_back( 5836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ContentSettingPatternSource(ContentSettingsPattern::Wildcard(), 5846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ContentSettingsPattern::Wildcard(), 5856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) CONTENT_SETTING_ALLOW, 5866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::string(), 5876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) incognito)); 5886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 5896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif // defined(ENALBE_EXTENSIONS) 5906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chrome { 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)ChromeContentBrowserClient::ChromeContentBrowserClient() 596116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch : prerender_tracker_(NULL), 597116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch weak_factory_(this) { 598868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#if defined(ENABLE_PLUGINS) 5996d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) for (size_t i = 0; i < arraysize(kPredefinedAllowedDevChannelOrigins); ++i) 6006d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) allowed_dev_channel_origins_.insert(kPredefinedAllowedDevChannelOrigins[i]); 6010f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) for (size_t i = 0; i < arraysize(kPredefinedAllowedFileHandleOrigins); ++i) 6020f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) allowed_file_handle_origins_.insert(kPredefinedAllowedFileHandleOrigins[i]); 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < arraysize(kPredefinedAllowedSocketOrigins); ++i) 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed_socket_origins_.insert(kPredefinedAllowedSocketOrigins[i]); 605868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif 60690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 607116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if !defined(OS_ANDROID) 608116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TtsExtensionEngine* tts_extension_engine = TtsExtensionEngine::GetInstance(); 609116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TtsController::GetInstance()->SetTtsEngineDelegate(tts_extension_engine); 610116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 6115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 6135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extra_parts_.push_back(new ChromeContentBrowserClientExtensionsPart); 6146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ChromeContentBrowserClient::~ChromeContentBrowserClient() { 6185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (int i = static_cast<int>(extra_parts_.size()) - 1; i >= 0; --i) 6195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) delete extra_parts_[i]; 6205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extra_parts_.clear(); 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 6247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid ChromeContentBrowserClient::RegisterProfilePrefs( 625c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable* registry) { 626c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterBooleanPref( 627c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kDisable3DAPIs, 628c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 629c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 630c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterBooleanPref( 631c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kEnableHyperlinkAuditing, 632c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) true, 633c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 6346d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) registry->RegisterListPref( 6356d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) prefs::kEnableDeprecatedWebPlatformFeatures, 6366d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 637c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 638c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 639c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// static 640c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void ChromeContentBrowserClient::SetApplicationLocale( 641c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& locale) { 642c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 643c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 644c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // This object is guaranteed to outlive all threads so we don't have to 645c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // worry about the lack of refcounting and can just post as Unretained. 646c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // 647c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // The common case is that this function is called early in Chrome startup 648c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // before any threads are created (it will also be called later if the user 649c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // changes the pref). In this case, there will be no threads created and 650c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // posting will fail. When there are no threads, we can just set the string 651c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // without worrying about threadsafety. 652c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, 653c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Bind(&SetApplicationLocaleOnIOThread, locale))) { 654c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) g_io_thread_application_locale.Get() = locale; 655c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)content::BrowserMainParts* ChromeContentBrowserClient::CreateBrowserMainParts( 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::MainFunctionParams& parameters) { 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeBrowserMainParts* main_parts; 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Construct the Main browser parts based on the OS type. 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) main_parts = new ChromeBrowserMainPartsWin(parameters); 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX) 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) main_parts = new ChromeBrowserMainPartsMac(parameters); 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_CHROMEOS) 6672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) main_parts = new chromeos::ChromeBrowserMainPartsChromeos(parameters); 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_LINUX) 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) main_parts = new ChromeBrowserMainPartsLinux(parameters); 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_ANDROID) 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) main_parts = new ChromeBrowserMainPartsAndroid(parameters); 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_POSIX) 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) main_parts = new ChromeBrowserMainPartsPosix(parameters); 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) main_parts = new ChromeBrowserMainParts(parameters); 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 67990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) chrome::AddProfilesExtraParts(main_parts); 68090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Construct additional browser parts. Stages are called in the order in 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // which they are added. 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(TOOLKIT_VIEWS) 6847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch main_parts->AddParts(new ChromeBrowserMainExtraPartsViews()); 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// TODO(oshima): Athena on chrome currently requires USE_ASH to build. 6881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// We should reduce the dependency as much as possible. 6891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(USE_ATHENA) 6901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci main_parts->AddParts(CreateChromeBrowserMainExtraPartsAthena()); 6911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#elif defined(USE_ASH) 6927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch main_parts->AddParts(new ChromeBrowserMainExtraPartsAsh()); 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_AURA) 6967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch main_parts->AddParts(new ChromeBrowserMainExtraPartsAura()); 6977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif 6987dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 6997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(USE_X11) 7007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch main_parts->AddParts(new ChromeBrowserMainExtraPartsX11()); 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 703c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chrome::AddMetricsExtraParts(main_parts); 704c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return main_parts; 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string ChromeContentBrowserClient::GetStoragePartitionIdForSite( 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserContext* browser_context, 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& site) { 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string partition_id; 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The partition ID for webview guest processes is the string value of its 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // SiteInstance URL - "chrome-guest://app_id/persist?partition". 715a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (site.SchemeIs(content::kGuestScheme)) { 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) partition_id = site.spec(); 717a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } else if (site.GetOrigin().spec() == kChromeUIChromeSigninURL) { 718a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Chrome signin page has an embedded iframe of extension and web content, 719a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // thus it must be isolated from other webUI pages. 720a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) partition_id = site.GetOrigin().spec(); 721a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 723c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(IsValidStoragePartitionId(browser_context, partition_id)); 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return partition_id; 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::IsValidStoragePartitionId( 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserContext* browser_context, 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& partition_id) { 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The default ID is empty and is always valid. 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (partition_id.empty()) 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GURL(partition_id).is_valid(); 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::GetStoragePartitionConfigForSite( 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserContext* browser_context, 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& site, 7402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool can_be_default, 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string* partition_domain, 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string* partition_name, 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool* in_memory) { 7442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Default to the browser-wide storage partition and override based on |site| 7452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // below. 7462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) partition_domain->clear(); 7472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) partition_name->clear(); 7482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *in_memory = false; 7492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 750f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool success = false; 751f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 7526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) success = extensions::WebViewGuest::GetGuestPartitionConfigForSite( 753f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) site, partition_domain, partition_name, in_memory); 754f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 755f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!success && site.SchemeIs(extensions::kExtensionScheme)) { 7562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If |can_be_default| is false, the caller is stating that the |site| 7572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // should be parsed as if it had isolated storage. In particular it is 7582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // important to NOT check ExtensionService for the is_storage_isolated() 7592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // attribute because this code path is run during Extension uninstall 7602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // to do cleanup after the Extension has already been unloaded from the 7612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // ExtensionService. 7622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_isolated = !can_be_default; 7632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (can_be_default) { 764effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (extensions::util::SiteHasIsolatedStorage(site, browser_context)) 765effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch is_isolated = true; 7662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (is_isolated) { 7692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHECK(site.has_host()); 7702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // For extensions with isolated storage, the the host of the |site| is 7712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the |partition_domain|. The |in_memory| and |partition_name| are only 7722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // used in guest schemes so they are cleared here. 7732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *partition_domain = site.host(); 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *in_memory = false; 7752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) partition_name->clear(); 7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 777f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) success = true; 778f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 779f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif 780f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 781f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (!success && (site.GetOrigin().spec() == kChromeUIChromeSigninURL)) { 7825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Chrome signin page has an embedded iframe of extension and web content, 7835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // thus it must be isolated from other webUI pages. 7845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *partition_domain = chrome::kChromeUIChromeSigninHost; 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Assert that if |can_be_default| is false, the code above must have found a 7882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // non-default partition. If this fails, the caller has a serious logic 7892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // error about which StoragePartition they expect to be in and it is not 7902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // safe to continue. 7912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHECK(can_be_default || !partition_domain->empty()); 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)content::WebContentsViewDelegate* 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeContentBrowserClient::GetWebContentsViewDelegate( 7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WebContents* web_contents) { 7971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(USE_ATHENA) 7981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return athena::CreateWebContentsViewDelegate(web_contents); 7991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#else 8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return chrome::CreateWebContentsViewDelegate(web_contents); 8011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif 8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void ChromeContentBrowserClient::RenderProcessWillLaunch( 8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderProcessHost* host) { 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int id = host->GetID(); 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext(host->GetBrowserContext()); 8082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::URLRequestContextGetter* context = 8092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile->GetRequestContextForRenderProcess(id); 8102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 81146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) host->AddFilter(new ChromeRenderMessageFilter(id, profile)); 8122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(ENABLE_PLUGINS) 8134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) host->AddFilter(new PluginInfoMessageFilter(id, profile)); 8142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 8155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) host->AddFilter(new cast::CastTransportHostFilter); 8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(ENABLE_PRINTING) 81703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) host->AddFilter(new printing::PrintingMessageFilter(id, profile)); 8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 8194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) host->AddFilter(new SearchProviderInstallStateMessageFilter(id, profile)); 820a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#if defined(ENABLE_SPELLCHECK) 8214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) host->AddFilter(new SpellCheckMessageFilter(id)); 822a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#endif 8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 8244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) host->AddFilter(new SpellCheckMessageFilterMac(id)); 8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 8265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) host->AddFilter(new ChromeNetBenchmarkingMessageFilter(profile, context)); 8274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) host->AddFilter(new prerender::PrerenderMessageFilter(id, profile)); 8286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) host->AddFilter(new TtsMessageFilter(id, host->GetBrowserContext())); 829868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#if defined(ENABLE_WEBRTC) 8304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) WebRtcLoggingHandlerHost* webrtc_logging_handler_host = 8318bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) new WebRtcLoggingHandlerHost(profile); 8325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) host->SetWebRtcLogMessageCallback(base::Bind( 8335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &WebRtcLoggingHandlerHost::LogMessage, webrtc_logging_handler_host)); 8344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) host->AddFilter(webrtc_logging_handler_host); 8354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) host->SetUserData(host, new base::UserDataAdapter<WebRtcLoggingHandlerHost>( 8364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) webrtc_logging_handler_host)); 837868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif 8387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#if !defined(DISABLE_NACL) 839f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) host->AddFilter(new nacl::NaClHostMessageFilter( 840eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch id, profile->IsOffTheRecord(), 8418bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) profile->GetPath(), 842eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch context)); 8437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif 844d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#if defined(OS_ANDROID) 845010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) host->AddFilter(new cdm::CdmMessageFilterAndroid()); 846d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#endif 8475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (switches::IsEnableAccountConsistency()) 848a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) host->AddFilter(new PrincipalsMessageFilter(id)); 8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host->Send(new ChromeViewMsg_SetIsIncognitoProcess( 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile->IsOffTheRecord())); 8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (size_t i = 0; i < extra_parts_.size(); ++i) 8545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extra_parts_[i]->RenderProcessWillLaunch(host); 8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RendererContentSettingRules rules; 857cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (host->IsIsolatedGuest()) { 858f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 8596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) GetGuestViewDefaultContentSettingRules(profile->IsOffTheRecord(), &rules); 860f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#else 861f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) NOTREACHED(); 862f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif 863a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } else { 864a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) GetRendererContentSettingRules( 865a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) profile->GetHostContentSettingsMap(), &rules); 866a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host->Send(new ChromeViewMsg_SetContentSettingRules(rules)); 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GURL ChromeContentBrowserClient::GetEffectiveURL( 8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserContext* browser_context, const GURL& url) { 8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext(browser_context); 8732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!profile) 8742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return url; 8752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 876a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // If the input |url| should be assigned to the Instant renderer, make its 877a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // effective URL distinct from other URLs on the search provider's domain. 878a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) if (chrome::ShouldAssignURLToInstantRenderer(url, profile)) 879a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return chrome::GetEffectiveURLForInstant(url, profile); 880a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 881c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if !defined(OS_CHROMEOS) 8822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If the input |url| should be assigned to the Signin renderer, make its 8832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // effective URL distinct from other URLs on the signin service's domain. 8842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Note that the signin renderer will be allowed to sign the user in to 8852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Chrome. 8862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (SigninManager::IsWebBasedSigninFlowURL(url)) 8872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GetEffectiveURLForSignin(url); 888c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 8892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 8915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return ChromeContentBrowserClientExtensionsPart::GetEffectiveURL( 8925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) profile, url); 8936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#else 8946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return url; 8956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif 8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::ShouldUseProcessPerSite( 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserContext* browser_context, const GURL& effective_url) { 9002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Non-extension, non-Instant URLs should generally use 9012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // process-per-site-instance. Because we expect to use the effective URL, 9022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // URLs for hosted apps (apart from bookmark apps) should have an extension 9032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // scheme by now. 9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext(browser_context); 9062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!profile) 9072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 9082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 909a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch if (chrome::ShouldUseProcessPerSiteForInstantURL(effective_url, profile)) 9102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 9112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 912c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if !defined(OS_CHROMEOS) 9132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (SigninManager::IsWebBasedSigninFlowURL(effective_url)) 9142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 915c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 9162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 9185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return ChromeContentBrowserClientExtensionsPart::ShouldUseProcessPerSite( 9195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) profile, effective_url); 9206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#else 9216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return false; 9226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif 9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// These are treated as WebUI schemes but do not get WebUI bindings. Also, 9265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// view-source is allowed for these schemes. 927c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void ChromeContentBrowserClient::GetAdditionalWebUISchemes( 928c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<std::string>* additional_schemes) { 929c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) additional_schemes->push_back(chrome::kChromeSearchScheme); 9305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) additional_schemes->push_back(dom_distiller::kDomDistillerScheme); 9312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 9322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 933a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void ChromeContentBrowserClient::GetAdditionalWebUIHostsToIgnoreParititionCheck( 934a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) std::vector<std::string>* hosts) { 935a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) hosts->push_back(chrome::kChromeUIExtensionIconHost); 936a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) hosts->push_back(chrome::kChromeUIFaviconHost); 937a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) hosts->push_back(chrome::kChromeUIThemeHost); 938a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) hosts->push_back(chrome::kChromeUIThumbnailHost); 939a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) hosts->push_back(chrome::kChromeUIThumbnailHost2); 940a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) hosts->push_back(chrome::kChromeUIThumbnailListHost); 941a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 942a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 9432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)net::URLRequestContextGetter* 9442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ChromeContentBrowserClient::CreateRequestContext( 9452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::BrowserContext* browser_context, 946a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) content::ProtocolHandlerMap* protocol_handlers, 947cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::URLRequestInterceptorScopedVector request_interceptors) { 9482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile* profile = Profile::FromBrowserContext(browser_context); 949a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return profile->CreateRequestContext(protocol_handlers, 950cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) request_interceptors.Pass()); 9512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 9522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)net::URLRequestContextGetter* 9542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ChromeContentBrowserClient::CreateRequestContextForStoragePartition( 9552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::BrowserContext* browser_context, 9562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& partition_path, 9572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool in_memory, 958a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) content::ProtocolHandlerMap* protocol_handlers, 959cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::URLRequestInterceptorScopedVector request_interceptors) { 9602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile* profile = Profile::FromBrowserContext(browser_context); 9612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return profile->CreateRequestContextForStoragePartition( 962a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) partition_path, 963a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) in_memory, 964a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) protocol_handlers, 965cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) request_interceptors.Pass()); 9662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 9672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::IsHandledURL(const GURL& url) { 9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ProfileIOData::IsHandledURL(url); 9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 972a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)bool ChromeContentBrowserClient::CanCommitURL( 973a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) content::RenderProcessHost* process_host, 974a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const GURL& url) { 9756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 9765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return ChromeContentBrowserClientExtensionsPart::CanCommitURL( 9775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) process_host, url); 9786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#else 9796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return true; 9806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif 981a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)} 982a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 98358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)bool ChromeContentBrowserClient::ShouldAllowOpenURL( 98458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) content::SiteInstance* site_instance, const GURL& url) { 98558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) GURL from_url = site_instance->GetSiteURL(); 98658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 9876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 9885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) bool result; 9895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (ChromeContentBrowserClientExtensionsPart::ShouldAllowOpenURL( 9905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) site_instance, from_url, url, &result)) 9915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return result; 9926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif 9935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 9945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Do not allow chrome://chrome-signin navigate to other chrome:// URLs, since 9955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // the signin page may host untrusted web content. 9965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (from_url.GetOrigin().spec() == chrome::kChromeUIChromeSigninURL && 9975c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu url.SchemeIs(content::kChromeUIScheme) && 9985c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu url.host() != chrome::kChromeUIChromeSigninHost) { 9995c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu VLOG(1) << "Blocked navigation to " << url.spec() << " from " 10005c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu << chrome::kChromeUIChromeSigninURL; 10015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return false; 10025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 10035c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 100458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return true; 100558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 100658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::IsSuitableHost( 10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderProcessHost* process_host, 10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& site_url) { 10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = 10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile::FromBrowserContext(process_host->GetBrowserContext()); 10122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This may be NULL during tests. In that case, just assume any site can 10132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // share any host. 10142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!profile) 10152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 10162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1017c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Instant URLs should only be in the instant process and instant process 1018c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // should only have Instant URLs. 10192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InstantService* instant_service = 10202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InstantServiceFactory::GetForProfile(profile); 1021c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (instant_service) { 1022c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool is_instant_process = instant_service->IsInstantProcess( 1023c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) process_host->GetID()); 1024c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool should_be_in_instant_process = 1025c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chrome::ShouldAssignURLToInstantRenderer(site_url, profile); 1026c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (is_instant_process || should_be_in_instant_process) 1027c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return is_instant_process && should_be_in_instant_process; 1028c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 10292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1030c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if !defined(OS_CHROMEOS) 1031cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) SigninClient* signin_client = 1032effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ChromeSigninClientFactory::GetForProfile(profile); 1033effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (signin_client && signin_client->IsSigninProcess(process_host->GetID())) 10342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return SigninManager::IsWebBasedSigninFlowURL(site_url); 1035c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 10362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 10385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return ChromeContentBrowserClientExtensionsPart::IsSuitableHost( 10395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) profile, process_host, site_url); 10406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#else 10416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return true; 10426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif 10435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool ChromeContentBrowserClient::MayReuseHost( 1046cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::RenderProcessHost* process_host) { 1047cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // If there is currently a prerender in progress for the host provided, 1048cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // it may not be shared. We require prerenders to be by themselves in a 1049cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // separate process, so that we can monitor their resource usage, and so that 1050cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // we can track the cookies that they change. 1051cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 1052cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) process_host->GetBrowserContext()); 1053cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) prerender::PrerenderManager* prerender_manager = 1054cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) prerender::PrerenderManagerFactory::GetForProfile(profile); 1055cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (prerender_manager && 1056cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) !prerender_manager->MayReuseProcessHost(process_host)) { 1057cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return false; 1058cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 1059cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1060cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return true; 1061cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 1062cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::ShouldTryToUseExistingProcessHost( 10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserContext* browser_context, const GURL& url) { 10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // It has to be a valid URL for us to check for an extension. 10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!url.is_valid()) 10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext(browser_context); 10715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return ChromeContentBrowserClientExtensionsPart:: 10725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ShouldTryToUseExistingProcessHost( 10735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) profile, url); 10746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#else 10756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return false; 10766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif 10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::SiteInstanceGotProcess( 10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SiteInstance* site_instance) { 10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(site_instance->HasProcess()); 10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) site_instance->GetBrowserContext()); 10852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!profile) 10862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 10872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Remember the ID of the Instant process to signal the renderer process 10892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // on startup in |AppendExtraCommandLineSwitches| below. 1090c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (chrome::ShouldAssignURLToInstantRenderer( 10912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) site_instance->GetSiteURL(), profile)) { 10922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InstantService* instant_service = 10932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InstantServiceFactory::GetForProfile(profile); 10942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (instant_service) 10952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) instant_service->AddInstantProcess(site_instance->GetProcess()->GetID()); 10962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 10972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1098c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if !defined(OS_CHROMEOS) 10992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // We only expect there to be one signin process as we use process-per-site 11002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // for signin URLs. The signin process will be cleared from SigninManager 11012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // when the renderer is destroyed. 11022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (SigninManager::IsWebBasedSigninFlowURL(site_instance->GetSiteURL())) { 1103cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) SigninClient* signin_client = 1104effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ChromeSigninClientFactory::GetForProfile(profile); 1105effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (signin_client) 1106effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch signin_client->SetSigninProcess(site_instance->GetProcess()->GetID()); 11076e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 11085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ChromeContentBrowserClientExtensionsPart::SetSigninProcess(site_instance); 11096e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif 11102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 11122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (size_t i = 0; i < extra_parts_.size(); ++i) 11145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extra_parts_[i]->SiteInstanceGotProcess(site_instance); 11155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::SiteInstanceDeleting( 11185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SiteInstance* site_instance) { 11195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!site_instance->HasProcess()) 11205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 11215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (size_t i = 0; i < extra_parts_.size(); ++i) 11235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extra_parts_[i]->SiteInstanceDeleting(site_instance); 11245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1126f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool ChromeContentBrowserClient::ShouldSwapBrowsingInstancesForNavigation( 11272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SiteInstance* site_instance, 11285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& current_url, 11295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& new_url) { 11306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 11315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return ChromeContentBrowserClientExtensionsPart:: 11325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ShouldSwapBrowsingInstancesForNavigation( 11335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) site_instance, current_url, new_url); 11346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#else 11356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return false; 11366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif 11375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::ShouldSwapProcessesForRedirect( 11405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ResourceContext* resource_context, const GURL& current_url, 11415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& new_url) { 1142116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(ENABLE_EXTENSIONS) 11435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return ChromeContentBrowserClientExtensionsPart:: 11445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ShouldSwapProcessesForRedirect(resource_context, current_url, new_url); 1145116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 1146116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return false; 1147116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 11485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochbool ChromeContentBrowserClient::ShouldAssignSiteForURL(const GURL& url) { 11517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return !url.SchemeIs(chrome::kChromeNativeScheme); 11527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 11537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 11545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string ChromeContentBrowserClient::GetCanonicalEncodingNameByAliasName( 11555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& alias_name) { 11565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return CharacterEncoding::GetCanonicalEncodingNameByAliasName(alias_name); 11575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1159f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)namespace { 1160f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 1161f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)bool IsAutoReloadEnabled() { 11626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Fetch the field trial, even though we don't use it. Calling FindFullName() 11636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // causes the field-trial mechanism to report which group we're in, which 11646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // might reflect a hard disable or hard enable via flag, both of which have 11656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // their own field trial groups. This lets us know what percentage of users 11666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // manually enable or disable auto-reload. 1167f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string group = base::FieldTrialList::FindFullName( 1168f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "AutoReloadExperiment"); 1169f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const CommandLine& browser_command_line = *CommandLine::ForCurrentProcess(); 1170f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (browser_command_line.HasSwitch(switches::kEnableOfflineAutoReload)) 1171f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return true; 1172f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (browser_command_line.HasSwitch(switches::kDisableOfflineAutoReload)) 1173f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return false; 11746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return true; 1175f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 1176f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 1177f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)bool IsAutoReloadVisibleOnlyEnabled() { 11786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // See the block comment in IsAutoReloadEnabled(). 1179f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string group = base::FieldTrialList::FindFullName( 1180f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "AutoReloadVisibleOnlyExperiment"); 1181f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const CommandLine& browser_command_line = *CommandLine::ForCurrentProcess(); 1182f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (browser_command_line.HasSwitch( 1183f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) switches::kEnableOfflineAutoReloadVisibleOnly)) { 1184f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return true; 1185f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 1186f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (browser_command_line.HasSwitch( 1187f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) switches::kDisableOfflineAutoReloadVisibleOnly)) { 1188f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return false; 1189f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 11906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return true; 1191f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 1192f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 1193f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} // namespace 1194f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 11955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::AppendExtraCommandLineSwitches( 11965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine* command_line, int child_process_id) { 11974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(OS_POSIX) 11988bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (breakpad::IsCrashReporterEnabled()) { 11995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_ptr<metrics::ClientInfo> client_info = 12005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GoogleUpdateSettings::LoadMetricsClientInfo(); 12015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitchASCII(switches::kEnableCrashReporter, 12025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) client_info ? client_info->client_id 12035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) : std::string()); 12045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1205cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif // defined(OS_POSIX) 12065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (logging::DialogsAreSuppressed()) 12085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitch(switches::kNoErrorDialogs); 12095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string process_type = 12115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->GetSwitchValueASCII(switches::kProcessType); 12125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const CommandLine& browser_command_line = *CommandLine::ForCurrentProcess(); 12132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 121458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) static const char* const kCommonSwitchNames[] = { 1215a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) switches::kUserAgent, 121658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches::kUserDataDir, // Make logs go to the right file. 121758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) }; 121858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) command_line->CopySwitchesFrom(browser_command_line, kCommonSwitchNames, 121958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) arraysize(kCommonSwitchNames)); 12202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1221a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(ENABLE_IPC_FUZZER) 1222a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) static const char* const kIpcFuzzerSwitches[] = { 1223a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) switches::kIpcFuzzerTestcase, 1224a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) }; 1225a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) command_line->CopySwitchesFrom(browser_command_line, kIpcFuzzerSwitches, 1226a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) arraysize(kIpcFuzzerSwitches)); 1227a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif 1228a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 1229cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#if defined(OS_CHROMEOS) 1230cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // On Chrome OS need to pass primary user homedir (in multi-profiles session). 1231cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::FilePath homedir; 1232cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PathService::Get(base::DIR_HOME, &homedir); 1233cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) command_line->AppendSwitchASCII(chromeos::switches::kHomedir, 1234cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) homedir.value().c_str()); 1235cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif 1236cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 12375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (process_type == switches::kRendererProcess) { 12385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) content::RenderProcessHost* process = 12395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) content::RenderProcessHost::FromID(child_process_id); 12405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Profile* profile = 12415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) process ? Profile::FromBrowserContext(process->GetBrowserContext()) 12425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) : NULL; 12435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (size_t i = 0; i < extra_parts_.size(); ++i) { 12445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extra_parts_[i]->AppendExtraRendererCommandLineSwitches( 12455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) command_line, process, profile); 12465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 12475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 12485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 12495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& login_profile = 1250c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) browser_command_line.GetSwitchValueASCII( 1251c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chromeos::switches::kLoginProfile); 12525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!login_profile.empty()) 1253c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) command_line->AppendSwitchASCII( 1254c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chromeos::switches::kLoginProfile, login_profile); 12555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 12565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12570f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#if defined(ENABLE_WEBRTC) 1258a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) MaybeCopyDisableWebRtcEncryptionSwitch(command_line, 1259a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) browser_command_line, 1260a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) VersionInfo::GetChannel()); 12610f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#endif 12620f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 12635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (process) { 12645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefService* prefs = profile->GetPrefs(); 12655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Currently this pref is only registered if applied via a policy. 12665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (prefs->HasPrefPath(prefs::kDisable3DAPIs) && 12675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kDisable3DAPIs)) { 12685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Turn this policy into a command line switch. 12695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitch(switches::kDisable3DAPIs); 12705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12726d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const base::ListValue* switches = 12736d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) prefs->GetList(prefs::kEnableDeprecatedWebPlatformFeatures); 12746d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) if (switches) { 12756d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Enable any deprecated features that have been re-enabled by policy. 12766d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) for (base::ListValue::const_iterator it = switches->begin(); 12776d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) it != switches->end(); ++it) { 12786d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) std::string switch_to_enable; 12796d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) if ((*it)->GetAsString(&switch_to_enable)) 12806d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) command_line->AppendSwitch(switch_to_enable); 12816d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) } 12826d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) } 12836d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 12845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Disable client-side phishing detection in the renderer if it is 12855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // disabled in the Profile preferences or the browser process. 12865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!prefs->GetBoolean(prefs::kSafeBrowsingEnabled) || 12875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !g_browser_process->safe_browsing_detection_service()) { 12885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitch( 12895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kDisableClientSidePhishingDetection); 12905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (prefs->GetBoolean(prefs::kPrintPreviewDisabled)) 12931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci command_line->AppendSwitch(switches::kDisablePrintPreview); 12941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 12952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InstantService* instant_service = 12962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InstantServiceFactory::GetForProfile(profile); 12972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (instant_service && 12982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) instant_service->IsInstantProcess(process->GetID())) 12992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) command_line->AppendSwitch(switches::kInstantProcess); 13002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1301c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if !defined(OS_CHROMEOS) 1302cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) SigninClient* signin_client = 1303effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ChromeSigninClientFactory::GetForProfile(profile); 1304effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (signin_client && signin_client->IsSigninProcess(process->GetID())) 13052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) command_line->AppendSwitch(switches::kSigninProcess); 1306c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 13075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1309f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (IsAutoReloadEnabled()) 1310f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) command_line->AppendSwitch(switches::kEnableOfflineAutoReload); 1311f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (IsAutoReloadVisibleOnlyEnabled()) { 1312f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) command_line->AppendSwitch( 1313f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) switches::kEnableOfflineAutoReloadVisibleOnly); 1314010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 1315010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 1316010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) { 13176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Enable load stale cache if this session is in the field trial or 13186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // the user explicitly enabled it. Note that as far as the renderer 13196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // is concerned, the feature is enabled if-and-only-if the 13206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // kEnableOfflineLoadStaleCache flag is on the command line; 13216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // the yes/no/default behavior is only at the browser command line 13226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // level. 1323010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 1324010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Command line switches override 1325010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (browser_command_line.HasSwitch( 1326010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) switches::kEnableOfflineLoadStaleCache)) { 1327010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) command_line->AppendSwitch(switches::kEnableOfflineLoadStaleCache); 1328010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } else if (!browser_command_line.HasSwitch( 1329010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) switches::kDisableOfflineLoadStaleCache)) { 1330010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) std::string group = 1331010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::FieldTrialList::FindFullName("LoadStaleCacheExperiment"); 1332010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 13336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (group == "Enabled") 1334010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) command_line->AppendSwitch(switches::kEnableOfflineLoadStaleCache); 1335effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 1336effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 1337effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 13385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Please keep this in alphabetical order. 13395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const char* const kSwitchNames[] = { 13405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) autofill::switches::kDisableIgnoreAutocompleteOff, 13414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) autofill::switches::kDisablePasswordGeneration, 13424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) autofill::switches::kEnablePasswordGeneration, 13435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) autofill::switches::kLocalHeuristicsOnlyForPasswordGeneration, 13441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(ENABLE_EXTENSIONS) 1345f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) extensions::switches::kAllowHTTPBackgroundPage, 1346ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch extensions::switches::kAllowLegacyExtensionManifests, 134703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) extensions::switches::kEnableAppView, 13481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci extensions::switches::kEnableAppWindowControls, 1349116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extensions::switches::kEnableEmbeddedExtensionOptions, 1350a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) extensions::switches::kEnableExperimentalExtensionApis, 1351cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) extensions::switches::kEnableScriptsRequireAction, 1352ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch extensions::switches::kExtensionsOnChromeURLs, 1353e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch extensions::switches::kWhitelistedExtensionID, 13541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif 13555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kAppsCheckoutURL, 13565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kAppsGalleryURL, 13570529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch switches::kCloudPrintURL, 13580529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch switches::kCloudPrintXmppEndpoint, 13595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kDisableBundledPpapiFlash, 13605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kEnableBenchmarking, 13615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kEnableNaCl, 1362116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if !defined(DISABLE_NACL) 1363a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) switches::kEnableNaClDebug, 1364a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) switches::kEnableNaClNonSfiMode, 1365116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 13662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switches::kEnableNetBenchmarking, 1367f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) switches::kEnableShowModalDialog, 13685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) switches::kEnableStreamlinedHostedApps, 1369010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) switches::kEnableWebBasedSignin, 13701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci switches::kJavaScriptHarmony, 13715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kMessageLoopHistogrammer, 1372f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) switches::kOutOfProcessPdf, 13735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kPlaybackMode, 13745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kPpapiFlashArgs, 13755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kPpapiFlashPath, 13765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kPpapiFlashVersion, 13775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kProfilingAtStart, 13785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kProfilingFile, 13795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kProfilingFlush, 13805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kRecordMode, 13814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) translate::switches::kTranslateSecurityOrigin, 13825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 13835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->CopySwitchesFrom(browser_command_line, kSwitchNames, 13855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arraysize(kSwitchNames)); 13865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (process_type == switches::kUtilityProcess) { 13871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(ENABLE_EXTENSIONS) 13885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const char* const kSwitchNames[] = { 1389f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) extensions::switches::kAllowHTTPBackgroundPage, 1390a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) extensions::switches::kEnableExperimentalExtensionApis, 1391ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch extensions::switches::kExtensionsOnChromeURLs, 1392e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch extensions::switches::kWhitelistedExtensionID, 13935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 13945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->CopySwitchesFrom(browser_command_line, kSwitchNames, 13965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arraysize(kSwitchNames)); 13971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif 13985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (process_type == switches::kPluginProcess) { 1399c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_CHROMEOS) 14006d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) static const char* const kSwitchNames[] = { 1401c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chromeos::switches::kLoginProfile, 14025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 14035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->CopySwitchesFrom(browser_command_line, kSwitchNames, 14055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arraysize(kSwitchNames)); 14066d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#endif 14075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (process_type == switches::kZygoteProcess) { 14085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const char* const kSwitchNames[] = { 14095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Load (in-process) Pepper plugins in-process in the zygote pre-sandbox. 14105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kDisableBundledPpapiFlash, 1411116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if !defined(DISABLE_NACL) 1412cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) switches::kEnableNaClNonSfiMode, 1413a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch switches::kNaClDangerousNoSandboxNonSfi, 1414116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 14155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kPpapiFlashPath, 14165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kPpapiFlashVersion, 14175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 14185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->CopySwitchesFrom(browser_command_line, kSwitchNames, 14205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arraysize(kSwitchNames)); 14215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (process_type == switches::kGpuProcess) { 14225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If --ignore-gpu-blacklist is passed in, don't send in crash reports 14235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // because GPU is expected to be unreliable. 14245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (browser_command_line.HasSwitch(switches::kIgnoreGpuBlacklist) && 14255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !command_line->HasSwitch(switches::kDisableBreakpad)) 14265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitch(switches::kDisableBreakpad); 14275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The command line switch kEnableBenchmarking needs to be specified along 14305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // with the kEnableStatsTable switch to ensure that the stats table global 14315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is initialized correctly. 14325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (command_line->HasSwitch(switches::kEnableBenchmarking)) 14335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(command_line->HasSwitch(switches::kEnableStatsTable)); 14345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string ChromeContentBrowserClient::GetApplicationLocale() { 14375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (BrowserThread::CurrentlyOn(BrowserThread::IO)) 1438c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return g_io_thread_application_locale.Get(); 14395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return g_browser_process->GetApplicationLocale(); 14405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string ChromeContentBrowserClient::GetAcceptLangs( 14435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserContext* context) { 14445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext(context); 14455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return profile->GetPrefs()->GetString(prefs::kAcceptLanguages); 14465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1448f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)const gfx::ImageSkia* ChromeContentBrowserClient::GetDefaultFavicon() { 14495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResourceBundle& rb = ResourceBundle::GetSharedInstance(); 1450f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return rb.GetNativeImageNamed(IDR_DEFAULT_FAVICON).ToImageSkia(); 14515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::AllowAppCache( 14545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& manifest_url, 14555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& first_party, 14565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ResourceContext* context) { 14575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 14585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); 14595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return io_data->GetCookieSettings()-> 14605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IsSettingCookieAllowed(manifest_url, first_party); 14615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::AllowGetCookie( 14645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 14655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& first_party, 14665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const net::CookieList& cookie_list, 14675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ResourceContext* context, 14685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_process_id, 14695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int render_frame_id) { 14705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 14715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); 14725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool allow = io_data->GetCookieSettings()-> 14735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IsReadingCookieAllowed(url, first_party); 14745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 14765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 14775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&TabSpecificContentSettings::CookiesRead, render_process_id, 147823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) render_frame_id, url, first_party, cookie_list, !allow, true)); 14795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return allow; 14805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::AllowSetCookie( 14835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 14845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& first_party, 14855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& cookie_line, 14865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ResourceContext* context, 14875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_process_id, 14885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int render_frame_id, 14895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::CookieOptions* options) { 14905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 14915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); 14925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieSettings* cookie_settings = io_data->GetCookieSettings(); 14935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool allow = cookie_settings->IsSettingCookieAllowed(url, first_party); 14945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1495cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (prerender_tracker_) { 1496cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) prerender_tracker_->OnCookieChangedForURL( 1497cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) render_process_id, 1498cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) context->GetRequestContext()->cookie_store()->GetCookieMonster(), 1499cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) url); 1500cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 1501cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 15025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 15035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 15045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&TabSpecificContentSettings::CookieChanged, render_process_id, 15055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) render_frame_id, url, first_party, cookie_line, *options, 15065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !allow)); 15075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return allow; 15085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::AllowSaveLocalState( 15115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ResourceContext* context) { 15125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 15135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); 15145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieSettings* cookie_settings = io_data->GetCookieSettings(); 15155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSetting setting = cookie_settings->GetDefaultCookieSetting(NULL); 15165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(bauerb): Should we also disallow local state if the default is BLOCK? 15185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Could we even support per-origin settings? 15195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return setting != CONTENT_SETTING_SESSION_ONLY; 15205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::AllowWorkerDatabase( 15235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 1524a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& name, 1525a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& display_name, 15265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned long estimated_size, 15275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ResourceContext* context, 15285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::vector<std::pair<int, int> >& render_frames) { 15295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 15305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); 15315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieSettings* cookie_settings = io_data->GetCookieSettings(); 15325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool allow = cookie_settings->IsSettingCookieAllowed(url, url); 15335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Record access to database for potential display in UI. 15355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::pair<int, int> >::const_iterator i; 15365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (i = render_frames.begin(); i != render_frames.end(); ++i) { 15375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 15385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 15395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&TabSpecificContentSettings::WebDatabaseAccessed, 15405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i->first, i->second, url, name, display_name, !allow)); 15415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return allow; 15445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1546116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid ChromeContentBrowserClient::AllowWorkerFileSystem( 15475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 15485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ResourceContext* context, 1549116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::vector<std::pair<int, int> >& render_frames, 1550116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Callback<void(bool)> callback) { 15515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 15525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); 15535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieSettings* cookie_settings = io_data->GetCookieSettings(); 15545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool allow = cookie_settings->IsSettingCookieAllowed(url, url); 15555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1556116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(ENABLE_EXTENSIONS) 1557116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch GuestPermissionRequestHelper(url, render_frames, callback, allow); 1558116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 1559116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch FileSystemAccessed(url, render_frames, callback, allow); 1560116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1561116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 1562116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1563116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(ENABLE_EXTENSIONS) 1564116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid ChromeContentBrowserClient::GuestPermissionRequestHelper( 1565116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const GURL& url, 1566116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::vector<std::pair<int, int> >& render_frames, 1567116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Callback<void(bool)> callback, 1568116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool allow) { 1569116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DCHECK(BrowserThread:: CurrentlyOn(BrowserThread::IO)); 1570116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::vector<std::pair<int, int> >::const_iterator i; 1571116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::map<int, int> process_map; 1572116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::map<int, int>::const_iterator it; 1573116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool has_web_view_guest = false; 1574116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Record access to file system for potential display in UI. 1575116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch for (i = render_frames.begin(); i != render_frames.end(); ++i) { 1576116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (process_map.find(i->first) != process_map.end()) 1577116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch continue; 1578116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1579116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch process_map.insert(std::pair<int, int>(i->first, i->second)); 1580116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 15816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (extensions::WebViewRendererState::GetInstance()->IsGuest(i->first)) 1582116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch has_web_view_guest = true; 1583116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 1584116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (!has_web_view_guest) { 1585116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch FileSystemAccessed(url, render_frames, callback, allow); 1586116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return; 1587116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 1588116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DCHECK_EQ(1U, process_map.size()); 1589116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch it = process_map.begin(); 1590116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch BrowserThread::PostTask( 1591116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch BrowserThread::UI, 1592116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch FROM_HERE, 1593116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Bind(&ChromeContentBrowserClient:: 1594116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch RequestFileSystemPermissionOnUIThread, 1595116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch it->first, 1596116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch it->second, 1597116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch url, 1598116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch allow, 1599116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Bind(&ChromeContentBrowserClient::FileSystemAccessed, 1600116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch weak_factory_.GetWeakPtr(), 1601116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch url, 1602116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch render_frames, 1603116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch callback))); 1604116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 1605116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1606116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid ChromeContentBrowserClient::RequestFileSystemPermissionOnUIThread( 1607116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int render_process_id, 1608116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int render_frame_id, 1609116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const GURL& url, 1610116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool allowed_by_default, 1611116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::Callback<void(bool)>& callback) { 1612116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DCHECK(BrowserThread:: CurrentlyOn(BrowserThread::UI)); 16136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) extensions::WebViewPermissionHelper* web_view_permission_helper = 16146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) extensions::WebViewPermissionHelper::FromFrameID( 16156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) render_process_id, render_frame_id); 1616116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch web_view_permission_helper->RequestFileSystemPermission(url, 1617116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch allowed_by_default, 1618116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch callback); 1619116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 1620116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1621116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1622116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid ChromeContentBrowserClient::FileSystemAccessed( 1623116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const GURL& url, 1624116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::vector<std::pair<int, int> >& render_frames, 1625116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Callback<void(bool)> callback, 1626116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool allow) { 16275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Record access to file system for potential display in UI. 16285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::pair<int, int> >::const_iterator i; 16295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (i = render_frames.begin(); i != render_frames.end(); ++i) { 16305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 1631116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch BrowserThread::UI, 1632116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch FROM_HERE, 16335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&TabSpecificContentSettings::FileSystemAccessed, 16345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i->first, i->second, url, !allow)); 16355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1636116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch callback.Run(allow); 16375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::AllowWorkerIndexedDB( 16405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 1641a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& name, 16425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ResourceContext* context, 16435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::vector<std::pair<int, int> >& render_frames) { 16445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 16455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); 16465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieSettings* cookie_settings = io_data->GetCookieSettings(); 16475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool allow = cookie_settings->IsSettingCookieAllowed(url, url); 16485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Record access to IndexedDB for potential display in UI. 16505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::pair<int, int> >::const_iterator i; 16515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (i = render_frames.begin(); i != render_frames.end(); ++i) { 16525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 16535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 16545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&TabSpecificContentSettings::IndexedDBAccessed, 16555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i->first, i->second, url, name, !allow)); 16565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return allow; 16595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)net::URLRequestContext* 16625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ChromeContentBrowserClient::OverrideRequestContextForURL( 16635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, content::ResourceContext* context) { 16645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 1665116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(ENABLE_EXTENSIONS) 16662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (url.SchemeIs(extensions::kExtensionScheme)) { 16675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); 16685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return io_data->extensions_request_context(); 16695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1670116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 16715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 16735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)QuotaPermissionContext* 16765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ChromeContentBrowserClient::CreateQuotaPermissionContext() { 16775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new ChromeQuotaPermissionContext(); 16785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::AllowCertificateError( 16815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_process_id, 16825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int render_frame_id, 16835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int cert_error, 16845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const net::SSLInfo& ssl_info, 16855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& request_url, 16865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ResourceType resource_type, 16875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool overridable, 16885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool strict_enforcement, 16896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) bool expired_previous_decision, 16905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Callback<void(bool)>& callback, 169190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) content::CertificateRequestResultType* result) { 16925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (resource_type != content::RESOURCE_TYPE_MAIN_FRAME) { 16932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // A sub-resource has a certificate error. The user doesn't really 16942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // have a context for making the right decision, so block the 16952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // request hard, without an info bar to allow showing the insecure 16962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // content. 169790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) *result = content::CERTIFICATE_REQUEST_RESULT_TYPE_DENY; 16982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 16992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 17002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If the tab is being prerendered, cancel the prerender and the request. 17025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::RenderFrameHost* render_frame_host = 17035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::RenderFrameHost::FromID(render_process_id, render_frame_id); 17045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WebContents* tab = WebContents::FromRenderFrameHost(render_frame_host); 17055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!tab) { 17065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 17075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 17085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 17105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prerender::PrerenderContents* prerender_contents = 17115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prerender::PrerenderContents::FromWebContents(tab); 17125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (prerender_contents) { 17135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prerender_contents->Destroy(prerender::FINAL_STATUS_SSL_ERROR); 17145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *result = content::CERTIFICATE_REQUEST_RESULT_TYPE_CANCEL; 17155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return; 17165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(ENABLE_CAPTIVE_PORTAL_DETECTION) 17195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu CaptivePortalTabHelper* captive_portal_tab_helper = 17205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu CaptivePortalTabHelper::FromWebContents(tab); 17215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (captive_portal_tab_helper) 17225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) captive_portal_tab_helper->OnSSLCertError(ssl_info); 17235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 17245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Otherwise, display an SSL blocking page. The interstitial page takes 17265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // ownership of ssl_blocking_page. 17276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int options_mask = 0; 17286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (overridable) 17291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci options_mask |= SSLBlockingPage::OVERRIDABLE; 17306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (strict_enforcement) 17311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci options_mask |= SSLBlockingPage::STRICT_ENFORCEMENT; 17326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (expired_previous_decision) 17331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci options_mask |= SSLBlockingPage::EXPIRED_BUT_PREVIOUSLY_ALLOWED; 17345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SSLBlockingPage* ssl_blocking_page = new SSLBlockingPage( 17356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) tab, cert_error, ssl_info, request_url, options_mask, callback); 17365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ssl_blocking_page->Show(); 17375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::SelectClientCertificate( 17405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_process_id, 17415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int render_frame_id, 17425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const net::HttpNetworkSession* network_session, 17435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::SSLCertRequestInfo* cert_request_info, 17445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Callback<void(net::X509Certificate*)>& callback) { 17455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::RenderFrameHost* rfh = content::RenderFrameHost::FromID( 17465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) render_process_id, render_frame_id); 17475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WebContents* tab = WebContents::FromRenderFrameHost(rfh); 17485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!tab) { 17495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 17505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 17515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prerender::PrerenderContents* prerender_contents = 17545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prerender::PrerenderContents::FromWebContents(tab); 17555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (prerender_contents) { 17565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prerender_contents->Destroy( 17575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prerender::FINAL_STATUS_SSL_CLIENT_CERTIFICATE_REQUESTED); 17585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return; 17595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 17605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 17615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GURL requesting_url("https://" + cert_request_info->host_and_port.ToString()); 17625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DCHECK(requesting_url.is_valid()) 17635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) << "Invalid URL string: https://" 17645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) << cert_request_info->host_and_port.ToString(); 17655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext(tab->GetBrowserContext()); 17671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<base::Value> filter = 17685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile->GetHostContentSettingsMap()->GetWebsiteSetting( 17695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) requesting_url, 17705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) requesting_url, 17715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTINGS_TYPE_AUTO_SELECT_CERTIFICATE, 17721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string(), 17731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci NULL); 17745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (filter.get()) { 17765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Try to automatically select a client certificate. 17775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (filter->IsType(base::Value::TYPE_DICTIONARY)) { 17785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue* filter_dict = 17795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) static_cast<base::DictionaryValue*>(filter.get()); 17805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<scoped_refptr<net::X509Certificate> >& 17825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) all_client_certs = cert_request_info->client_certs; 17835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < all_client_certs.size(); ++i) { 1784868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (CertMatchesFilter(*all_client_certs[i].get(), *filter_dict)) { 17855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Use the first certificate that is matched by the filter. 1786868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) callback.Run(all_client_certs[i].get()); 17875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 17885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 17915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 17925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 179546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) chrome::ShowSSLClientCertificateSelector(tab, network_session, 179646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) cert_request_info, callback); 17975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ChromeContentBrowserClient::AddCertificate( 18002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::CertificateMimeType cert_type, 18012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const void* cert_data, 18022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t cert_size, 18035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_process_id, 180446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) int render_frame_id) { 180546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) chrome::SSLAddCertificate(cert_type, cert_data, cert_size, 180646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) render_process_id, render_frame_id); 18075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 18085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)content::MediaObserver* ChromeContentBrowserClient::GetMediaObserver() { 18102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return MediaCaptureDevicesDispatcher::GetInstance(); 18115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 18125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::RequestDesktopNotificationPermission( 18145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& source_origin, 18150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch content::RenderFrameHost* render_frame_host, 18165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const base::Callback<void(blink::WebNotificationPermission)>& callback) { 18175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(ENABLE_NOTIFICATIONS) 18185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Skip showing the infobar if the request comes from an extension, and that 18195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // extension has the 'notify' permission. (If the extension does not have the 18205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // permission, the user will still be prompted.) 18210529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch Profile* profile = Profile::FromBrowserContext( 18220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch render_frame_host->GetSiteInstance()->GetBrowserContext()); 1823c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DesktopNotificationService* notification_service = 1824c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DesktopNotificationServiceFactory::GetForProfile(profile); 182503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 182603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) InfoMap* extension_info_map = 182703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) extensions::ExtensionSystem::Get(profile)->info_map(); 1828c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const Extension* extension = NULL; 1829c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (extension_info_map) { 18305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::ExtensionSet extensions; 1831c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) extension_info_map->GetExtensionsWithAPIPermissionForSecurityOrigin( 18325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) source_origin, 18335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) render_frame_host->GetProcess()->GetID(), 18345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extensions::APIPermission::kNotifications, 18355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) &extensions); 18365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (extensions::ExtensionSet::const_iterator iter = extensions.begin(); 1837c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) iter != extensions.end(); ++iter) { 1838558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch if (notification_service->IsNotifierEnabled(NotifierId( 1839558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch NotifierId::APPLICATION, (*iter)->id()))) { 18407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) extension = iter->get(); 1841c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) break; 1842c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 1843c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 1844c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 18452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (IsExtensionWithPermissionOrSuggestInConsole( 18465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) APIPermission::kNotifications, 18475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extension, 18480529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch render_frame_host->GetRenderViewHost())) { 18495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) callback.Run(blink::WebNotificationPermissionAllowed); 18505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 18515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 185203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#endif 18535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) WebContents* web_contents = WebContents::FromRenderFrameHost( 18555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) render_frame_host); 18565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int render_process_id = render_frame_host->GetProcess()->GetID(); 18575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const PermissionRequestID request_id(render_process_id, 18585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) web_contents->GetRoutingID(), 18595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) -1 /* bridge id */, 18605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GURL()); 18615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 18625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) notification_service->RequestNotificationPermission( 18635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) web_contents, 18645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) request_id, 18655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) source_origin, 18665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // TODO(peter): plumb user_gesture over IPC 18675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) true, 18685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) callback); 18695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 18705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 18715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTIMPLEMENTED(); 18725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 18735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 18745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)blink::WebNotificationPermission 18765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)ChromeContentBrowserClient::CheckDesktopNotificationPermission( 18775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const GURL& source_origin, 18785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) content::ResourceContext* context, 18795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int render_process_id) { 18805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(ENABLE_NOTIFICATIONS) 18815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 18827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 18835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); 18841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(ENABLE_EXTENSIONS) 1885f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) InfoMap* extension_info_map = io_data->GetExtensionInfoMap(); 1886f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1887f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // We want to see if there is an extension that hasn't been manually disabled 1888f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // that has the notifications permission and applies to this security origin. 1889f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // First, get the list of extensions with permission for the origin. 18905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::ExtensionSet extensions; 1891f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) extension_info_map->GetExtensionsWithAPIPermissionForSecurityOrigin( 18925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) source_origin, 18935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) render_process_id, 18945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extensions::APIPermission::kNotifications, 18955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) &extensions); 18965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (extensions::ExtensionSet::const_iterator iter = extensions.begin(); 1897f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) iter != extensions.end(); ++iter) { 1898f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Then, check to see if it's been disabled by the user. 1899f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!extension_info_map->AreNotificationsDisabled((*iter)->id())) 19005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return blink::WebNotificationPermissionAllowed; 1901c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 19021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif 1903c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1904f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // No enabled extensions exist, so check the normal host content settings. 1905f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) HostContentSettingsMap* host_content_settings_map = 1906f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) io_data->GetHostContentSettingsMap(); 1907f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ContentSetting setting = host_content_settings_map->GetContentSetting( 1908f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) source_origin, 1909f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) source_origin, 1910f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CONTENT_SETTINGS_TYPE_NOTIFICATIONS, 1911f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) NO_RESOURCE_IDENTIFIER); 1912f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1913f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (setting == CONTENT_SETTING_ALLOW) 19145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return blink::WebNotificationPermissionAllowed; 1915f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (setting == CONTENT_SETTING_BLOCK) 19165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return blink::WebNotificationPermissionDenied; 19175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return blink::WebNotificationPermissionDefault; 19185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 19195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return blink::WebNotificationPermissionAllowed; 19205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 19215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::ShowDesktopNotification( 19245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::ShowDesktopNotificationHostMsgParams& params, 19250529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch RenderFrameHost* render_frame_host, 19265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_ptr<content::DesktopNotificationDelegate> delegate, 19270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch base::Closure* cancel_callback) { 19285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(ENABLE_NOTIFICATIONS) 19290529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch content::RenderProcessHost* process = render_frame_host->GetProcess(); 19305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext(process->GetBrowserContext()); 19315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DesktopNotificationService* service = 19325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DesktopNotificationServiceFactory::GetForProfile(profile); 19335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service->ShowDesktopNotification( 19345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) params, render_frame_host, delegate.Pass(), cancel_callback); 1935116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1936116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch profile->GetHostContentSettingsMap()->UpdateLastUsage( 1937116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch params.origin, params.origin, CONTENT_SETTINGS_TYPE_NOTIFICATIONS); 19385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 19395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTIMPLEMENTED(); 19405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 19415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1943f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void ChromeContentBrowserClient::RequestGeolocationPermission( 1944f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) content::WebContents* web_contents, 1945f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) int bridge_id, 1946f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const GURL& requesting_frame, 1947f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool user_gesture, 1948f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Callback<void(bool)> result_callback, 1949f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Closure* cancel_callback) { 1950f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GeolocationPermissionContextFactory::GetForProfile( 1951f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Profile::FromBrowserContext(web_contents->GetBrowserContext()))-> 1952f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) RequestGeolocationPermission(web_contents, bridge_id, 1953f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) requesting_frame, user_gesture, 1954f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) result_callback, cancel_callback); 1955f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 1956f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 1957f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void ChromeContentBrowserClient::RequestMidiSysExPermission( 1958f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) content::WebContents* web_contents, 1959f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) int bridge_id, 1960f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const GURL& requesting_frame, 1961f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool user_gesture, 1962f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Callback<void(bool)> result_callback, 1963f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Closure* cancel_callback) { 1964f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) MidiPermissionContext* context = 1965f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) MidiPermissionContextFactory::GetForProfile( 1966f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Profile::FromBrowserContext(web_contents->GetBrowserContext())); 1967116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int renderer_id = web_contents->GetRenderProcessHost()->GetID(); 1968116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int render_view_id = web_contents->GetRenderViewHost()->GetRoutingID(); 1969116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const PermissionRequestID id(renderer_id, render_view_id, bridge_id, GURL()); 1970116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1971116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch context->RequestPermission(web_contents, id, requesting_frame, 1972116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch user_gesture, result_callback); 1973116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 1974116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1975116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid ChromeContentBrowserClient::DidUseGeolocationPermission( 1976116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::WebContents* web_contents, 1977116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const GURL& frame_url, 1978116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const GURL& main_frame_url) { 1979116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch Profile::FromBrowserContext(web_contents->GetBrowserContext()) 1980116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ->GetHostContentSettingsMap() 1981116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ->UpdateLastUsage( 1982116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch frame_url, main_frame_url, CONTENT_SETTINGS_TYPE_GEOLOCATION); 1983f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 1984f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 1985f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void ChromeContentBrowserClient::RequestProtectedMediaIdentifierPermission( 1986f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) content::WebContents* web_contents, 1987f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const GURL& origin, 1988f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Callback<void(bool)> result_callback, 1989f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Closure* cancel_callback) { 1990f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#if defined(OS_ANDROID) 1991f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ProtectedMediaIdentifierPermissionContext* context = 1992f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ProtectedMediaIdentifierPermissionContextFactory::GetForProfile( 1993f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Profile::FromBrowserContext(web_contents->GetBrowserContext())); 1994f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) context->RequestProtectedMediaIdentifierPermission(web_contents, 1995f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) origin, 1996f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) result_callback, 1997f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) cancel_callback); 1998f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#else 1999f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) NOTIMPLEMENTED(); 2000f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) result_callback.Run(false); 2001f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif // defined(OS_ANDROID) 2002f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 2003f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 20045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::CanCreateWindow( 20055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& opener_url, 200658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const GURL& opener_top_level_frame_url, 20075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& source_origin, 20085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowContainerType container_type, 2009558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch const GURL& target_url, 2010558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch const content::Referrer& referrer, 2011558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch WindowOpenDisposition disposition, 2012558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch const WebWindowFeatures& features, 2013558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch bool user_gesture, 2014558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch bool opener_suppressed, 20155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ResourceContext* context, 20165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_process_id, 2017558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch int opener_id, 20185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool* no_javascript_access) { 20195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 20205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *no_javascript_access = false; 20225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If the opener is trying to create a background window but doesn't have 20245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the appropriate permission, fail the attempt. 20255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (container_type == WINDOW_CONTAINER_TYPE_BACKGROUND) { 2026116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(ENABLE_EXTENSIONS) 2027116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); 2028116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch InfoMap* map = io_data->GetExtensionInfoMap(); 20295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!map->SecurityOriginHasAPIPermission( 20305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) source_origin, 20315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) render_process_id, 20325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) APIPermission::kBackground)) { 20335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 20345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Note: this use of GetExtensionOrAppByURL is safe but imperfect. It may 20375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // return a recently installed Extension even if this CanCreateWindow call 20385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // was made by an old copy of the page in a normal web process. That's ok, 20395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // because the permission check above would have caused an early return 20405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // already. We must use the full URL to find hosted apps, though, and not 20415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // just the origin. 2042ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const Extension* extension = 2043ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch map->extensions().GetExtensionOrAppByURL(opener_url); 20442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (extension && !extensions::BackgroundInfo::AllowJSAccess(extension)) 20455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *no_javascript_access = true; 2046116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 2047558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 2048558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch return true; 20495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2050c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2051116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(ENABLE_EXTENSIONS) 20526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (extensions::WebViewRendererState::GetInstance()->IsGuest( 20536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) render_process_id)) 2054558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch return true; 2055116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 2056558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 2057558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch HostContentSettingsMap* content_settings = 2058558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch ProfileIOData::FromResourceContext(context)->GetHostContentSettingsMap(); 205958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) BlockedWindowParams blocked_params(target_url, 2060116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch referrer, 2061116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch disposition, 2062116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch features, 2063116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch user_gesture, 2064116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch opener_suppressed, 2065116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch render_process_id, 2066116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch opener_id); 2067558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 20682385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch if (!user_gesture && !CommandLine::ForCurrentProcess()->HasSwitch( 20692385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch switches::kDisablePopupBlocking)) { 207058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (content_settings->GetContentSetting(opener_top_level_frame_url, 207158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) opener_top_level_frame_url, 2072558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch CONTENT_SETTINGS_TYPE_POPUPS, 207358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) std::string()) != 2074558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch CONTENT_SETTING_ALLOW) { 207558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) BrowserThread::PostTask(BrowserThread::UI, 207658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) FROM_HERE, 207758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Bind(&HandleBlockedPopupOnUIThread, 207858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) blocked_params)); 207958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return false; 2080558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch } 208158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 2082558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 208358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(OS_ANDROID) 208458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (SingleTabModeTabHelper::IsRegistered(render_process_id, opener_id)) { 2085558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch BrowserThread::PostTask(BrowserThread::UI, 2086558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch FROM_HERE, 208758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Bind(&HandleSingleTabModeBlockOnUIThread, 208858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) blocked_params)); 2089558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch return false; 2090558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch } 209158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif 2092558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 20935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 20945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::ResourceDispatcherHostCreated() { 2097cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 2098cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) prerender_tracker_ = g_browser_process->prerender_tracker(); 20995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return g_browser_process->ResourceDispatcherHostCreated(); 21005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// TODO(tommi): Rename from Get to Create. 21035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)content::SpeechRecognitionManagerDelegate* 21045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeContentBrowserClient::GetSpeechRecognitionManagerDelegate() { 21057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return new speech::ChromeSpeechRecognitionManagerDelegate(); 21065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)net::NetLog* ChromeContentBrowserClient::GetNetLog() { 21095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return g_browser_process->net_log(); 21105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AccessTokenStore* ChromeContentBrowserClient::CreateAccessTokenStore() { 21135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new ChromeAccessTokenStore(); 21145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::IsFastShutdownPossible() { 21172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 21185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::OverrideWebkitPrefs( 21215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewHost* rvh, const GURL& url, WebPreferences* web_prefs) { 21225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 21235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rvh->GetProcess()->GetBrowserContext()); 21245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefService* prefs = profile->GetPrefs(); 21255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21268bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // Fill per-script font preferences. These are not registered on Android 21278bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // - http://crbug.com/308033. 21288bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#if !defined(OS_ANDROID) 21295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FontFamilyCache::FillFontFamilyMap(profile, 21305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) prefs::kWebKitStandardFontFamilyMap, 21315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) &web_prefs->standard_font_family_map); 21325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FontFamilyCache::FillFontFamilyMap(profile, 21335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) prefs::kWebKitFixedFontFamilyMap, 21345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) &web_prefs->fixed_font_family_map); 21355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FontFamilyCache::FillFontFamilyMap(profile, 21365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) prefs::kWebKitSerifFontFamilyMap, 21375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) &web_prefs->serif_font_family_map); 21385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FontFamilyCache::FillFontFamilyMap(profile, 21395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) prefs::kWebKitSansSerifFontFamilyMap, 21405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) &web_prefs->sans_serif_font_family_map); 21415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FontFamilyCache::FillFontFamilyMap(profile, 21425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) prefs::kWebKitCursiveFontFamilyMap, 21435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) &web_prefs->cursive_font_family_map); 21445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FontFamilyCache::FillFontFamilyMap(profile, 21455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) prefs::kWebKitFantasyFontFamilyMap, 21465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) &web_prefs->fantasy_font_family_map); 21475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FontFamilyCache::FillFontFamilyMap(profile, 21485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) prefs::kWebKitPictographFontFamilyMap, 21495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) &web_prefs->pictograph_font_family_map); 21508bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#endif 21515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->default_font_size = 21535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetInteger(prefs::kWebKitDefaultFontSize); 21545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->default_fixed_font_size = 21555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetInteger(prefs::kWebKitDefaultFixedFontSize); 21565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->minimum_font_size = 21575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetInteger(prefs::kWebKitMinimumFontSize); 21585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->minimum_logical_font_size = 21595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetInteger(prefs::kWebKitMinimumLogicalFontSize); 21605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->default_encoding = prefs->GetString(prefs::kDefaultCharset); 21625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->javascript_can_open_windows_automatically = 21645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kWebKitJavascriptCanOpenWindowsAutomatically); 21655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->dom_paste_enabled = 21665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kWebKitDomPasteEnabled); 21675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->shrinks_standalone_images_to_fit = 21685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kWebKitShrinksStandaloneImagesToFit); 21695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->tabs_to_links = prefs->GetBoolean(prefs::kWebkitTabsToLinks); 21705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!prefs->GetBoolean(prefs::kWebKitJavascriptEnabled)) 21725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->javascript_enabled = false; 21735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!prefs->GetBoolean(prefs::kWebKitWebSecurityEnabled)) 21745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->web_security_enabled = false; 21755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!prefs->GetBoolean(prefs::kWebKitPluginsEnabled)) 21765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->plugins_enabled = false; 21775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!prefs->GetBoolean(prefs::kWebKitJavaEnabled)) 21785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->java_enabled = false; 21795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->loads_images_automatically = 21805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kWebKitLoadsImagesAutomatically); 21815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (prefs->GetBoolean(prefs::kDisable3DAPIs)) 21835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->experimental_webgl_enabled = false; 21845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->allow_displaying_insecure_content = 21865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kWebKitAllowDisplayingInsecureContent); 21875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->allow_running_insecure_content = 21885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kWebKitAllowRunningInsecureContent); 21895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 21900f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) web_prefs->font_scale_factor = 21910f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) static_cast<float>(prefs->GetDouble(prefs::kWebKitFontScaleFactor)); 21920f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) web_prefs->device_scale_adjustment = GetDeviceScaleAdjustment(); 21935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->force_enable_zoom = 21945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kWebKitForceEnableZoom); 21955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2196b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 2197868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#if defined(OS_ANDROID) 2198868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) web_prefs->password_echo_enabled = 2199868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) prefs->GetBoolean(prefs::kWebKitPasswordEchoEnabled); 2200868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#else 22015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->password_echo_enabled = browser_defaults::kPasswordEchoEnabled; 2202868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif 2203868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 2204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) web_prefs->asynchronous_spell_checking_enabled = true; 2205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) web_prefs->unified_textchecker_enabled = true; 22065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->uses_universal_detector = 22085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kWebKitUsesUniversalDetector); 22095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->text_areas_are_resizable = 22105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kWebKitTextAreasAreResizable); 22115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->hyperlink_auditing_enabled = 22125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kEnableHyperlinkAuditing); 22135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure we will set the default_encoding with canonical encoding name. 22155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->default_encoding = 22165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CharacterEncoding::GetCanonicalEncodingNameByAliasName( 22175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->default_encoding); 22185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (web_prefs->default_encoding.empty()) { 22195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->ClearPref(prefs::kDefaultCharset); 22205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->default_encoding = prefs->GetString(prefs::kDefaultCharset); 22215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(!web_prefs->default_encoding.empty()); 22235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (size_t i = 0; i < extra_parts_.size(); ++i) 22255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extra_parts_[i]->OverrideWebkitPrefs(rvh, url, web_prefs); 22265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::BrowserURLHandlerCreated( 22295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserURLHandler* handler) { 22305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (size_t i = 0; i < extra_parts_.size(); ++i) 22315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extra_parts_[i]->BrowserURLHandlerCreated(handler); 22325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // about: handler. Must come before chrome: handler, since it will 22345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // rewrite about: urls to chrome: URLs and then expect chrome: to 22355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // actually handle them. 22365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handler->AddHandlerPair(&WillHandleBrowserAboutURL, 22375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserURLHandler::null_handler()); 223858e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch 2239effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#if defined(OS_ANDROID) 2240effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Handler to rewrite chrome://newtab on Android. 2241effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch handler->AddHandlerPair(&chrome::android::HandleAndroidNewTabURL, 2242effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch BrowserURLHandler::null_handler()); 2243effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#else 224458e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch // Handler to rewrite chrome://newtab for InstantExtended. 224558e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch handler->AddHandlerPair(&chrome::HandleNewTabURLRewrite, 224658e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch &chrome::HandleNewTabURLReverseRewrite); 2247effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif 224858e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch 22495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // chrome: & friends. 22505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handler->AddHandlerPair(&HandleWebUI, &HandleWebUIReverse); 22515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::ClearCache(RenderViewHost* rvh) { 22545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 22555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rvh->GetSiteInstance()->GetProcess()->GetBrowserContext()); 22565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowsingDataRemover* remover = 22575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowsingDataRemover::CreateForUnboundedRange(profile); 22585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) remover->Remove(BrowsingDataRemover::REMOVE_CACHE, 22595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowsingDataHelper::UNPROTECTED_WEB); 22605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // BrowsingDataRemover takes care of deleting itself when done. 22615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::ClearCookies(RenderViewHost* rvh) { 22645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 22655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rvh->GetSiteInstance()->GetProcess()->GetBrowserContext()); 22665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowsingDataRemover* remover = 22675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowsingDataRemover::CreateForUnboundedRange(profile); 22685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int remove_mask = BrowsingDataRemover::REMOVE_SITE_DATA; 22695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) remover->Remove(remove_mask, BrowsingDataHelper::UNPROTECTED_WEB); 22705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // BrowsingDataRemover takes care of deleting itself when done. 22715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::FilePath ChromeContentBrowserClient::GetDefaultDownloadDirectory() { 22743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return DownloadPrefs::GetDefaultDownloadDirectory(); 22755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string ChromeContentBrowserClient::GetDefaultDownloadName() { 22785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return l10n_util::GetStringUTF8(IDS_DEFAULT_DOWNLOAD_FILENAME); 22795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::DidCreatePpapiPlugin( 22825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserPpapiHost* browser_host) { 22832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(ENABLE_PLUGINS) 22845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser_host->GetPpapiHost()->AddHostFactoryFilter( 22855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ppapi::host::HostFactory>( 22865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new ChromeBrowserPepperHostFactory(browser_host))); 22872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 22885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)content::BrowserPpapiHost* 22915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeContentBrowserClient::GetExternalBrowserPpapiHost( 22925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int plugin_process_id) { 2293116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if !defined(DISABLE_NACL) 2294116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::BrowserChildProcessHostIterator iter(PROCESS_TYPE_NACL_LOADER); 22955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (!iter.Done()) { 2296f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) nacl::NaClProcessHost* host = static_cast<nacl::NaClProcessHost*>( 2297f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) iter.GetDelegate()); 22985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (host->process() && 22995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host->process()->GetData().id == plugin_process_id) { 23005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Found the plugin. 23015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return host->browser_ppapi_host(); 23025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 23035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++iter; 23045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2305116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 23065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 23075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 23085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::AllowPepperSocketAPI( 23105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserContext* browser_context, 23115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 23127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool private_api, 231368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const content::SocketPermissionRequest* params) { 231403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 23157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext(browser_context); 23165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const extensions::ExtensionSet* extension_set = NULL; 23177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (profile) { 2318116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const ExtensionService* ext_service = 2319116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extensions::ExtensionSystem::Get(profile)->extension_service(); 2320116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (ext_service) { 2321116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extension_set = ext_service->extensions(); 2322116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 23237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 23247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 23257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (private_api) { 23267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Access to private socket APIs is controlled by the whitelist. 23277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (IsExtensionOrSharedModuleWhitelisted(url, extension_set, 23287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) allowed_socket_origins_)) { 23297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return true; 23307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 23317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } else { 23327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Access to public socket APIs is controlled by extension permissions. 23337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (url.is_valid() && url.SchemeIs(extensions::kExtensionScheme) && 23347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) extension_set) { 23357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const Extension* extension = extension_set->GetByID(url.host()); 23367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (extension) { 233746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const extensions::PermissionsData* permissions_data = 233846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) extension->permissions_data(); 233968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (params) { 234068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) extensions::SocketPermission::CheckParam check_params( 234168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) params->type, params->host, params->port); 234246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (permissions_data->CheckAPIPermissionWithParam( 234346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) extensions::APIPermission::kSocket, &check_params)) { 234468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return true; 234568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 234646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } else if (permissions_data->HasAPIPermission( 234746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) extensions::APIPermission::kSocket)) { 234846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return true; 23497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 23507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 23517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 23527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 23537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 23547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Allow both public and private APIs if the command line says so. 23557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return IsHostAllowedByCommandLine(url, extension_set, 23567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) switches::kAllowNaClSocketAPI); 2357868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#else 23585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 2359868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif 23605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 23615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ui::SelectFilePolicy* ChromeContentBrowserClient::CreateSelectFilePolicy( 23632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* web_contents) { 23642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return new ChromeSelectFilePolicy(web_contents); 23652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 23662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2367c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void ChromeContentBrowserClient::GetAdditionalAllowedSchemesForFileSystem( 2368c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<std::string>* additional_allowed_schemes) { 2369c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ContentBrowserClient::GetAdditionalAllowedSchemesForFileSystem( 2370c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) additional_allowed_schemes); 23715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) additional_allowed_schemes->push_back(content::kChromeDevToolsScheme); 23725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) additional_allowed_schemes->push_back(content::kChromeUIScheme); 23735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (size_t i = 0; i < extra_parts_.size(); ++i) { 23745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extra_parts_[i]->GetAdditionalAllowedSchemesForFileSystem( 23755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) additional_allowed_schemes); 23765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 2377c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 2378c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 237923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)void ChromeContentBrowserClient::GetURLRequestAutoMountHandlers( 238003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) std::vector<storage::URLRequestAutoMountHandler>* handlers) { 23815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (size_t i = 0; i < extra_parts_.size(); ++i) 23825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extra_parts_[i]->GetURLRequestAutoMountHandlers(handlers); 238323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 238423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 23857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid ChromeContentBrowserClient::GetAdditionalFileSystemBackends( 23867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch content::BrowserContext* browser_context, 2387c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& storage_partition_path, 238803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ScopedVector<storage::FileSystemBackend>* additional_backends) { 2389eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#if defined(OS_CHROMEOS) 239003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) storage::ExternalMountPoints* external_mount_points = 23917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch content::BrowserContext::GetMountPoints(browser_context); 2392eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DCHECK(external_mount_points); 23930529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch chromeos::FileSystemBackend* backend = new chromeos::FileSystemBackend( 23940529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch new drive::FileSystemBackendDelegate, 23950529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch new chromeos::file_system_provider::BackendDelegate, 23965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu new chromeos::MTPFileSystemBackendDelegate(storage_partition_path), 23970529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch browser_context->GetSpecialStoragePolicy(), 23980529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch external_mount_points, 239903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) storage::ExternalMountPoints::GetSystemInstance()); 24007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch backend->AddSystemMountPoints(); 240103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) DCHECK(backend->CanHandleType(storage::kFileSystemTypeExternal)); 24027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch additional_backends->push_back(backend); 2403eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif 2404a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 24055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (size_t i = 0; i < extra_parts_.size(); ++i) { 24065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extra_parts_[i]->GetAdditionalFileSystemBackends( 24075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) browser_context, storage_partition_path, additional_backends); 24085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 2409c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 2410c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 24115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_POSIX) && !defined(OS_MACOSX) 24125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::GetAdditionalMappedFilesForChildProcess( 24135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const CommandLine& command_line, 24145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int child_process_id, 24155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FileDescriptorInfo>* mappings) { 24165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 24172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath data_path; 24185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PathService::Get(ui::DIR_RESOURCE_PAKS_ANDROID, &data_path); 24195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(!data_path.empty()); 24205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2421a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int flags = base::File::FLAG_OPEN | base::File::FLAG_READ; 24222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath chrome_resources_pak = 24235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data_path.AppendASCII("chrome_100_percent.pak"); 2424a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::File file(chrome_resources_pak, flags); 2425a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DCHECK(file.IsValid()); 24262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mappings->push_back(FileDescriptorInfo(kAndroidChrome100PercentPakDescriptor, 2427a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) FileDescriptor(file.Pass()))); 24285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string locale = GetApplicationLocale(); 24302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath locale_pak = ResourceBundle::GetSharedInstance(). 24315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetLocaleFilePath(locale, false); 2432a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) file.Initialize(locale_pak, flags); 2433a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DCHECK(file.IsValid()); 24345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mappings->push_back(FileDescriptorInfo(kAndroidLocalePakDescriptor, 2435a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) FileDescriptor(file.Pass()))); 24365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath resources_pack_path; 24382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PathService::Get(chrome::FILE_RESOURCES_PACK, &resources_pack_path); 2439a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) file.Initialize(resources_pack_path, flags); 2440a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DCHECK(file.IsValid()); 24412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mappings->push_back(FileDescriptorInfo(kAndroidUIResourcesPakDescriptor, 2442a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) FileDescriptor(file.Pass()))); 24432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 24448bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (breakpad::IsCrashReporterEnabled()) { 2445a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) file = breakpad::CrashDumpManager::GetInstance()->CreateMinidumpFile( 2446a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) child_process_id); 2447a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (file.IsValid()) { 2448a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) mappings->push_back(FileDescriptorInfo(kAndroidMinidumpDescriptor, 2449a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) FileDescriptor(file.Pass()))); 2450a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } else { 24512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOG(ERROR) << "Failed to create file for minidump, crash reporting will " 24522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "be disabled for this process."; 24532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 24545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 24555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2456f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::FilePath app_data_path; 2457f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PathService::Get(base::DIR_ANDROID_APP_DATA, &app_data_path); 2458f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) DCHECK(!app_data_path.empty()); 2459f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 2460f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) flags = base::File::FLAG_OPEN | base::File::FLAG_READ; 2461f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::FilePath icudata_path = 2462f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) app_data_path.AppendASCII("icudtl.dat"); 2463f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::File icudata_file(icudata_path, flags); 2464f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) DCHECK(icudata_file.IsValid()); 2465f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) mappings->push_back(FileDescriptorInfo(kAndroidICUDataDescriptor, 2466f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) FileDescriptor(icudata_file.Pass()))); 2467f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 24685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 24695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int crash_signal_fd = GetCrashSignalFD(command_line); 24705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (crash_signal_fd >= 0) { 24715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mappings->push_back(FileDescriptorInfo(kCrashDumpSignal, 24725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FileDescriptor(crash_signal_fd, 24735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false))); 24745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 24755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_ANDROID) 24765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 24775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_POSIX) && !defined(OS_MACOSX) 24785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 24805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t* ChromeContentBrowserClient::GetResourceDllName() { 24815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return chrome::kBrowserResourcesDll; 24825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 24835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ChromeContentBrowserClient::PreSpawnRenderer( 24852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sandbox::TargetPolicy* policy, 24862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool* success) { 24872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This code is duplicated in nacl_exe_win_64.cc. 24882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Allow the server side of a pipe restricted to the "chrome.nacl." 24892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // namespace so that it cannot impersonate other system or other chrome 24902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // service pipes. 24912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sandbox::ResultCode result = policy->AddRule( 24922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sandbox::TargetPolicy::SUBSYS_NAMED_PIPES, 24932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sandbox::TargetPolicy::NAMEDPIPES_ALLOW_ANY, 24942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) L"\\\\.\\pipe\\chrome.nacl.*"); 24952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (result != sandbox::SBOX_ALL_OK) { 24962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *success = false; 24972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 24982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 24992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 25002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Renderers need to send named pipe handles and shared memory 25012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // segment handles to NaCl loader processes. 25022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result = policy->AddRule(sandbox::TargetPolicy::SUBSYS_HANDLES, 25032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sandbox::TargetPolicy::HANDLES_DUP_ANY, 25042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) L"File"); 25052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (result != sandbox::SBOX_ALL_OK) { 25062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *success = false; 25072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 25082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 25095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 25105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 25115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool ChromeContentBrowserClient::CheckMediaAccessPermission( 25131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::BrowserContext* browser_context, 25141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const GURL& security_origin, 25151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::MediaStreamType type) { 25161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return MediaCaptureDevicesDispatcher::GetInstance() 25171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ->CheckMediaAccessPermission( 25181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci browser_context, security_origin, type); 25191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 25201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2521f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)content::DevToolsManagerDelegate* 2522f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)ChromeContentBrowserClient::GetDevToolsManagerDelegate() { 25231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(OS_ANDROID) 25241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return new DevToolsManagerDelegateAndroid(); 25251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#else 2526f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return new ChromeDevToolsManagerDelegate(); 25271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif 2528f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 2529f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 25304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)bool ChromeContentBrowserClient::IsPluginAllowedToCallRequestOSFileHandle( 25314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) content::BrowserContext* browser_context, 25324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const GURL& url) { 253303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 25344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) Profile* profile = Profile::FromBrowserContext(browser_context); 25355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const extensions::ExtensionSet* extension_set = NULL; 25364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (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 } 25424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 25434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return IsExtensionOrSharedModuleWhitelisted(url, extension_set, 25444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) allowed_file_handle_origins_) || 25454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) IsHostAllowedByCommandLine(url, extension_set, 25464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) switches::kAllowNaClFileHandleAPI); 25474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#else 25484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return false; 25494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif 25504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 25514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 25526d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)bool ChromeContentBrowserClient::IsPluginAllowedToUseDevChannelAPIs( 25536d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) content::BrowserContext* browser_context, 25546d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const GURL& url) { 255503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 25565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Allow access for tests. 25575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (CommandLine::ForCurrentProcess()->HasSwitch( 25585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) switches::kEnablePepperTesting)) { 25595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return true; 25605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 25615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 25626d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext(browser_context); 25636d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const extensions::ExtensionSet* extension_set = NULL; 25646d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) if (profile) { 2565116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const ExtensionService* ext_service = 2566116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extensions::ExtensionSystem::Get(profile)->extension_service(); 2567116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (ext_service) { 2568116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extension_set = ext_service->extensions(); 2569116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 25706d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) } 25716d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 25726d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Allow access for whitelisted applications. 25736d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) if (IsExtensionOrSharedModuleWhitelisted(url, 25746d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) extension_set, 25756d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) allowed_dev_channel_origins_)) { 25766d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) return true; 25776d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) } 25786d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 25795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel(); 25805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Allow dev channel APIs to be used on "Canary", "Dev", and "Unknown" 25815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // releases of Chrome. Permitting "Unknown" allows these APIs to be used on 25825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Chromium builds as well. 25835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return channel <= chrome::VersionInfo::CHANNEL_DEV; 25845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#else 25855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return false; 25865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif 25875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 25885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2589cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)net::CookieStore* 2590cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)ChromeContentBrowserClient::OverrideCookieStoreForRenderProcess( 2591cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) int render_process_id) { 2592cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 2593cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!prerender_tracker_) 2594cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return NULL; 25951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return prerender_tracker_->GetPrerenderCookieStoreForRenderProcess( 25961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci render_process_id).get(); 2597cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 2598cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 2599a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if defined(ENABLE_WEBRTC) 2600a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void ChromeContentBrowserClient::MaybeCopyDisableWebRtcEncryptionSwitch( 2601a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) CommandLine* to_command_line, 2602a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const CommandLine& from_command_line, 2603a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) VersionInfo::Channel channel) { 2604a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if defined(OS_ANDROID) 2605a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const VersionInfo::Channel kMaxDisableEncryptionChannel = 2606a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) VersionInfo::CHANNEL_BETA; 2607a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#else 2608a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const VersionInfo::Channel kMaxDisableEncryptionChannel = 2609a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) VersionInfo::CHANNEL_DEV; 2610a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif 2611a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (channel <= kMaxDisableEncryptionChannel) { 2612a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) static const char* const kWebRtcDevSwitchNames[] = { 2613a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) switches::kDisableWebRtcEncryption, 2614a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) }; 2615a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) to_command_line->CopySwitchesFrom(from_command_line, 2616a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) kWebRtcDevSwitchNames, 2617a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) arraysize(kWebRtcDevSwitchNames)); 2618a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 2619a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 2620a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif // defined(ENABLE_WEBRTC) 26215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 26225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace chrome 2623