chrome_content_browser_client.cc revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
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" 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/app_mode/app_mode_utils.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browser_about_handler.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browser_process.h" 237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/browser_shutdown.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browsing_data/browsing_data_helper.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browsing_data/browsing_data_remover.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/character_encoding.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" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/api/web_request/web_request_api.h" 3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/extensions/browser_permissions_policy_delegate.h" 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_host.h" 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_service.h" 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_web_ui.h" 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_webkit_preferences.h" 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/suggest_permission_util.h" 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/geolocation/chrome_access_token_store.h" 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/google/google_util.h" 44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/browser/guestview/adview/adview_guest.h" 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/guestview/guestview.h" 46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/browser/guestview/guestview_constants.h" 47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/browser/guestview/webview/webview_guest.h" 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/local_discovery/storage/privet_filesystem_backend.h" 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/media/cast_transport_host_filter.h" 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/media/media_capture_devices_dispatcher.h" 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.h" 528bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "chrome/browser/nacl_host/nacl_browser_delegate_impl.h" 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/net/chrome_net_log.h" 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/notifications/desktop_notification_service.h" 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/notifications/desktop_notification_service_factory.h" 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/platform_util.h" 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/plugins/plugin_info_message_filter.h" 58558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "chrome/browser/prerender/prerender_final_status.h" 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prerender/prerender_manager.h" 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prerender/prerender_manager_factory.h" 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prerender/prerender_message_filter.h" 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prerender/prerender_tracker.h" 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/printing/printing_message_filter.h" 6490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.h" 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile_io_data.h" 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile_manager.h" 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/renderer_host/chrome_render_message_filter.h" 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/renderer_host/pepper/chrome_browser_pepper_host_factory.h" 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/search/instant_service.h" 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/search/instant_service_factory.h" 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/search/search.h" 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/search_engines/search_provider_install_state_message_filter.h" 74a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/browser/signin/principals_message_filter.h" 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/speech/chrome_speech_recognition_manager_delegate.h" 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/speech/tts_message_filter.h" 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ssl/ssl_add_certificate.h" 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ssl/ssl_blocking_page.h" 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ssl/ssl_tab_helper.h" 802385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch#include "chrome/browser/sync_file_system/local/sync_file_system_backend.h" 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/tab_contents/tab_util.h" 8258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/ui/blocked_content/blocked_window_params.h" 83424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "chrome/browser/ui/blocked_content/popup_blocker_tab_helper.h" 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/chrome_select_file_policy.h" 85eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/browser/ui/sync/sync_promo_ui.h" 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/tab_contents/chrome_web_contents_view_delegate.h" 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/chrome_web_ui_controller_factory.h" 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_constants.h" 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_paths.h" 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 918bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "chrome/common/env_vars.h" 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/extensions/extension_process_policy.h" 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/common/extensions/manifest_handlers/app_isolation_info.h" 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/extensions/permissions/socket_permission.h" 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/logging_chrome.h" 967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/common/pepper_permission_util.h" 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/common/profile_management_switches.h" 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/render_messages.h" 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/url_constants.h" 1014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/installer/util/google_update_settings.h" 102a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)#include "chromeos/chromeos_constants.h" 1030f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "components/nacl/browser/nacl_browser.h" 104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/nacl/browser/nacl_host_message_filter.h" 105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/nacl/browser/nacl_process_host.h" 1067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "components/nacl/common/nacl_process_type.h" 107a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/nacl/common/nacl_switches.h" 1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/translate/core/common/translate_switches.h" 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "components/user_prefs/pref_registry_syncable.h" 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_child_process_host.h" 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_main_parts.h" 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_ppapi_host.h" 113868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "content/public/browser/browser_thread.h" 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_url_handler.h" 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/child_process_data.h" 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/child_process_security_policy.h" 1175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/public/browser/render_frame_host.h" 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_process_host.h" 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_view_host.h" 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/resource_context.h" 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/site_instance.h" 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents_view.h" 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/child_process_host.h" 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/content_descriptors.h" 12668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "content/public/common/url_utils.h" 1275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_message_filter.h" 1285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_registry.h" 1295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_system.h" 130f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/browser/info_map.h" 131f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/browser/process_manager.h" 1325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/process_map.h" 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "extensions/browser/view_type_utils.h" 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "extensions/common/constants.h" 135f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/extension.h" 1365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/common/extension_set.h" 137f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/manifest_handlers/background_info.h" 138f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/manifest_handlers/shared_module_info.h" 1395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/common/manifest_handlers/web_accessible_resources_info.h" 140f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/permissions/permissions_data.h" 141ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "extensions/common/switches.h" 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/generated_resources.h" 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/ui_resources.h" 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/base/mime_util.h" 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/cookies/canonical_cookie.h" 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/cookies/cookie_options.h" 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/ssl/ssl_cert_request_info.h" 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/host/ppapi_host.h" 1495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ppapi/shared_impl/ppapi_switches.h" 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/resource/resource_bundle.h" 152a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)#include "ui/message_center/message_center_util.h" 153eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "webkit/browser/fileapi/external_mount_points.h" 154868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "webkit/common/webpreferences.h" 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 1575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/win/windows_version.h" 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chrome_browser_main_win.h" 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "sandbox/win/src/sandbox_policy.h" 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chrome_browser_main_mac.h" 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/spellchecker/spellcheck_message_filter_mac.h" 1638bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "components/breakpad/app/breakpad_mac.h" 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_CHROMEOS) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/chrome_browser_main_chromeos.h" 1665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/chromeos/drive/fileapi/file_system_backend_delegate.h" 1677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chromeos/fileapi/file_system_backend.h" 168b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "chrome/browser/chromeos/login/startup_utils.h" 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/login/user_manager.h" 170558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "chrome/browser/chromeos/system/input_device_settings.h" 171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/chromeos_switches.h" 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_LINUX) 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chrome_browser_main_linux.h" 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_ANDROID) 17558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/android/webapps/single_tab_mode_tab_helper.h" 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chrome_browser_main_android.h" 177d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "chrome/browser/media/encrypted_media_message_filter_android.h" 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/descriptors_android.h" 1798bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "components/breakpad/browser/crash_dump_manager_android.h" 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_POSIX) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chrome_browser_main_posix.h" 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#if defined(OS_POSIX) && !defined(OS_MACOSX) 1858bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "base/debug/leak_annotations.h" 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/linux_util.h" 1878bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "components/breakpad/app/breakpad_linux.h" 1888bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "components/breakpad/browser/crash_handler_host_linux.h" 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(ENABLE_CAPTIVE_PORTAL_DETECTION) 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/captive_portal/captive_portal_tab_helper.h" 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/ui_base_paths.h" 1978bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "ui/gfx/android/device_display_info.h" 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if !defined(OS_CHROMEOS) 201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/signin/signin_manager.h" 202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/signin/signin_manager_factory.h" 203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if !defined(OS_ANDROID) 2067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/media_galleries/fileapi/media_file_system_backend.h" 207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 209868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#if defined(ENABLE_WEBRTC) 210868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/browser/media/webrtc_logging_handler_host.h" 211868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif 212868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 2137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(ENABLE_INPUT_SPEECH) 2147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/speech/chrome_speech_recognition_manager_delegate_bubble_ui.h" 2157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif 2167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(OS_CHROMEOS) 21858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/chromeos/file_manager/app_id.h" 2197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif 2207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(TOOLKIT_GTK) 2227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/ui/gtk/chrome_browser_main_extra_parts_gtk.h" 2237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif 2247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(TOOLKIT_VIEWS) 2267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/ui/views/chrome_browser_main_extra_parts_views.h" 2277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif 2287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(USE_ASH) 2307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/ui/views/ash/chrome_browser_main_extra_parts_ash.h" 2317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif 2327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(USE_AURA) 2347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/ui/aura/chrome_browser_main_extra_parts_aura.h" 2357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif 2367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(USE_X11) 2387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_browser_main_extra_parts_x11.h" 2397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif 2407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 241a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#if defined(ENABLE_SPELLCHECK) 242a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/spellchecker/spellcheck_message_filter.h" 243a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#endif 244a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 245a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 246a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if defined(ENABLE_MDNS) 247a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/browser/local_discovery/storage/privet_filesystem_backend.h" 248a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif 249a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 250f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebWindowFeatures; 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::FileDescriptor; 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::AccessTokenStore; 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserChildProcessHostIterator; 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread; 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserURLHandler; 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::ChildProcessSecurityPolicy; 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::QuotaPermissionContext; 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::RenderViewHost; 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::SiteInstance; 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContents; 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using extensions::APIPermission; 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using extensions::Extension; 263f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using extensions::InfoMap; 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using extensions::Manifest; 265558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochusing message_center::NotifierId; 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 267a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if defined(OS_POSIX) 268a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)using content::FileDescriptorInfo; 269a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif 270a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 273c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Cached version of the locale so we can return the locale on the I/O 274c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// thread. 275c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)base::LazyInstance<std::string> g_io_thread_application_locale; 276c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 277868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#if defined(ENABLE_PLUGINS) 2780f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)const char* kPredefinedAllowedFileHandleOrigins[] = { 2790f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "6EAED1924DB611B6EEF2A664BD077BE7EAD33B8F", // see crbug.com/234789 2800f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "4EB74897CB187C7633357C2FE832E0AD6A44883A" // see crbug.com/234789 2810f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)}; 2820f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* kPredefinedAllowedSocketOrigins[] = { 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "okddffdblfhhnmhodogpojmfkjmhinfp", // Test SSH Client 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "pnhechapfaindjhompbnflcldabbghjo", // HTerm App (SSH Client) 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "bglhmjfplikpjnfoegeomebmfnkjomhe", // see crbug.com/122126 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "gbchcmhmhahfdphkhkmpfmihenigjmpp", // Chrome Remote Desktop 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "kgngmbheleoaphbjbaiobfdepmghbfah", // Pre-release Chrome Remote Desktop 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "odkaodonbgfohohmklejpjiejmcipmib", // Dogfood Chrome Remote Desktop 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "ojoimpklfciegopdfgeenehpalipignm", // Chromoting canary 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "cbkkbcmdlboombapidmoeolnmdacpkch", // see crbug.com/129089 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "hhnbmknkdabfoieppbbljkhkfjcmcbjh", // see crbug.com/134099 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "mablfbjkhmhkmefkjjacnbaikjkipphg", // see crbug.com/134099 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "pdeelgamlgannhelgoegilelnnojegoh", // see crbug.com/134099 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "cabapfdbkniadpollkckdnedaanlciaj", // see crbug.com/134099 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "mapljbgnjledlpdmlchihnmeclmefbba", // see crbug.com/134099 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "ghbfeebgmiidnnmeobbbaiamklmpbpii", // see crbug.com/134099 2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "jdfhpkjeckflbbleddjlpimecpbjdeep", // see crbug.com/142514 299c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "iabmpiboiopbgfabjmgeedhcmjenhbla", // see crbug.com/165080 300c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "B7CF8A292249681AF81771650BA4CEEAF19A4560", // see crbug.com/165080 301c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "6EAED1924DB611B6EEF2A664BD077BE7EAD33B8F", // see crbug.com/234789 302c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "4EB74897CB187C7633357C2FE832E0AD6A44883A", // see crbug.com/234789 303c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "7525AF4F66763A70A883C4700529F647B470E4D2", // see crbug.com/238084 304c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "0B549507088E1564D672F7942EB87CA4DAD73972", // see crbug.com/238084 305c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "864288364E239573E777D3E0E36864E590E95C74" // see crbug.com/238084 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 307868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns a copy of the given url with its host set to given host and path set 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// to given path. Other parts of the url will be the same. 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GURL ReplaceURLHostAndPath(const GURL& url, 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& host, 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& path) { 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url_canon::Replacements<char> replacements; 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) replacements.SetHost(host.c_str(), 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url_parse::Component(0, host.length())); 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) replacements.SetPath(path.c_str(), 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url_parse::Component(0, path.length())); 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return url.ReplaceComponents(replacements); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Maps "foo://bar/baz/" to "foo://chrome/bar/baz/". 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GURL AddUberHost(const GURL& url) { 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string uber_host = chrome::kChromeUIUberHost; 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string new_path = url.host() + url.path(); 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ReplaceURLHostAndPath(url, uber_host, new_path); 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// If url->host() is "chrome" and url->path() has characters other than the 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// first slash, changes the url from "foo://chrome/bar/" to "foo://bar/" and 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// returns true. Otherwise returns false. 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RemoveUberHost(GURL* url) { 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (url->host() != chrome::kChromeUIUberHost) 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (url->path().empty() || url->path() == "/") 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string old_path = url->path(); 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string::size_type separator = old_path.find('/', 1); 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string new_host; 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string new_path; 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (separator == std::string::npos) { 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_host = old_path.substr(1); 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_host = old_path.substr(1, separator - 1); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_path = old_path.substr(separator); 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Do not allow URLs with paths empty before the first slash since we can't 3537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // have an empty host. (e.g "foo://chrome//") 3547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (new_host.empty()) 3557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return false; 3567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *url = ReplaceURLHostAndPath(*url, new_host, new_path); 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) DCHECK(url->is_valid()); 3607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Handles rewriting Web UI URLs. 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool HandleWebUI(GURL* url, content::BrowserContext* browser_context) { 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Do not handle special URLs such as "about:foo" 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!url->host().empty()) { 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL chrome_url = AddUberHost(*url); 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Handle valid "chrome://chrome/foo" URLs so the reverse handler will 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // be called. 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ChromeWebUIControllerFactory::GetInstance()->UseWebUIForURL( 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser_context, chrome_url)) 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ChromeWebUIControllerFactory::GetInstance()->UseWebUIForURL( 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser_context, *url)) 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Special case : in ChromeOS in Guest mode bookmarks and history are 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // disabled for security reasons. New tab page explains the reasons, so 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // we redirect user to new tab page. 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (chromeos::UserManager::Get()->IsLoggedInAsGuest()) { 3865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (url->SchemeIs(content::kChromeUIScheme) && 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (url->DomainIs(chrome::kChromeUIBookmarksHost) || 3884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(ENABLE_ENHANCED_BOOKMARKS) 3894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) url->DomainIs(chrome::kChromeUIEnhancedBookmarksHost) || 3904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url->DomainIs(chrome::kChromeUIHistoryHost))) { 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Rewrite with new tab URL 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *url = GURL(chrome::kChromeUINewTabURL); 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Reverse URL handler for Web UI. Maps "chrome://chrome/foo/" to 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// "chrome://foo/". 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool HandleWebUIReverse(GURL* url, content::BrowserContext* browser_context) { 4045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!url->is_valid() || !url->SchemeIs(content::kChromeUIScheme)) 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return RemoveUberHost(url); 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Used by the GetPrivilegeRequiredByUrl() and GetProcessPrivilege() functions 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// below. Extension, and isolated apps require different privileges to be 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// granted to their RenderProcessHosts. This classification allows us to make 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// sure URLs are served by hosts with the right set of privileges. 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum RenderProcessHostPrivilege { 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRIV_NORMAL, 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRIV_HOSTED, 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRIV_ISOLATED, 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRIV_EXTENSION, 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RenderProcessHostPrivilege GetPrivilegeRequiredByUrl( 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionService* service) { 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Default to a normal renderer cause it is lower privileged. This should only 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // occur if the URL on a site instance is either malformed, or uninitialized. 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If it is malformed, then there is no need for better privileges anyways. 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If it is uninitialized, but eventually settles on being an a scheme other 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // than normal webrenderer, the navigation logic will correct us out of band 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // anyways. 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!url.is_valid()) 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PRIV_NORMAL; 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (url.SchemeIs(extensions::kExtensionScheme)) { 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* extension = 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service->extensions()->GetByID(url.host()); 436c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (extension && 437c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) extensions::AppIsolationInfo::HasIsolatedStorage(extension)) 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PRIV_ISOLATED; 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (extension && extension->is_hosted_app()) 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PRIV_HOSTED; 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PRIV_EXTENSION; 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PRIV_NORMAL; 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RenderProcessHostPrivilege GetProcessPrivilege( 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderProcessHost* process_host, 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::ProcessMap* process_map, 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionService* service) { 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<std::string> extension_ids = 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) process_map->GetExtensionsInProcess(process_host->GetID()); 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (extension_ids.empty()) 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PRIV_NORMAL; 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (std::set<std::string>::iterator iter = extension_ids.begin(); 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iter != extension_ids.end(); ++iter) { 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* extension = service->GetExtensionById(*iter, false); 460c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (extension && 461c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) extensions::AppIsolationInfo::HasIsolatedStorage(extension)) 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PRIV_ISOLATED; 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (extension && extension->is_hosted_app()) 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PRIV_HOSTED; 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PRIV_EXTENSION; 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool CertMatchesFilter(const net::X509Certificate& cert, 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::DictionaryValue& filter) { 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(markusheintz): This is the minimal required filter implementation. 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Implement a better matcher. 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // An empty filter matches any client certificate since no requirements are 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // specified at all. 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (filter.empty()) 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string common_name; 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (filter.GetString("ISSUER.CN", &common_name) && 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (cert.issuer().common_name == common_name)) { 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 488f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if !defined(OS_ANDROID) 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Fills |map| with the per-script font prefs under path |map_name|. 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void FillFontFamilyMap(const PrefService* prefs, 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* map_name, 492c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) webkit_glue::ScriptFontFamilyMap* map) { 4938bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // TODO: Get rid of the brute-force scan over possible (font family / script) 4948bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // combinations - see http://crbug.com/308095. 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < prefs::kWebKitScriptsForFontFamilyMapsLength; ++i) { 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* script = prefs::kWebKitScriptsForFontFamilyMaps[i]; 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string pref_name = base::StringPrintf("%s.%s", map_name, script); 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string font_family = prefs->GetString(pref_name.c_str()); 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!font_family.empty()) 5005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) (*map)[script] = base::UTF8ToUTF16(font_family); 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_POSIX) && !defined(OS_MACOSX) 5058bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)breakpad::CrashHandlerHostLinux* CreateCrashHandlerHost( 5068bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const std::string& process_type) { 5078bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) base::FilePath dumps_path; 5088bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) PathService::Get(chrome::DIR_CRASH_DUMPS, &dumps_path); 5098bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) { 5108bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ANNOTATE_SCOPED_MEMORY_LEAK; 5118bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) breakpad::CrashHandlerHostLinux* crash_handler = 5128bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) new breakpad::CrashHandlerHostLinux( 5138bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) process_type, dumps_path, getenv(env_vars::kHeadless) == NULL); 5148bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) crash_handler->StartUploaderThread(); 5158bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return crash_handler; 5168bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 5178bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 5188bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int GetCrashSignalFD(const CommandLine& command_line) { 5205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (command_line.HasSwitch(extensions::switches::kExtensionProcess)) { 5218bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) static breakpad::CrashHandlerHostLinux* crash_handler = NULL; 5228bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (!crash_handler) 5238bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) crash_handler = CreateCrashHandlerHost("extension"); 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return crash_handler->GetDeathSignalSocket(); 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string process_type = 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line.GetSwitchValueASCII(switches::kProcessType); 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5308bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (process_type == switches::kRendererProcess) { 5318bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) static breakpad::CrashHandlerHostLinux* crash_handler = NULL; 5328bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (!crash_handler) 5338bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) crash_handler = CreateCrashHandlerHost(process_type); 5348bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return crash_handler->GetDeathSignalSocket(); 5358bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5378bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (process_type == switches::kPluginProcess) { 5388bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) static breakpad::CrashHandlerHostLinux* crash_handler = NULL; 5398bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (!crash_handler) 5408bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) crash_handler = CreateCrashHandlerHost(process_type); 5418bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return crash_handler->GetDeathSignalSocket(); 5428bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5448bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (process_type == switches::kPpapiPluginProcess) { 5458bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) static breakpad::CrashHandlerHostLinux* crash_handler = NULL; 5468bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (!crash_handler) 5478bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) crash_handler = CreateCrashHandlerHost(process_type); 5488bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return crash_handler->GetDeathSignalSocket(); 5498bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5518bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (process_type == switches::kGpuProcess) { 5528bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) static breakpad::CrashHandlerHostLinux* crash_handler = NULL; 5538bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (!crash_handler) 5548bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) crash_handler = CreateCrashHandlerHost(process_type); 5558bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return crash_handler->GetDeathSignalSocket(); 5568bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return -1; 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_POSIX) && !defined(OS_MACOSX) 561f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif // !defined(OS_ANDROID) 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 563c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if !defined(OS_CHROMEOS) 5642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)GURL GetEffectiveURLForSignin(const GURL& url) { 5652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHECK(SigninManager::IsWebBasedSigninFlowURL(url)); 5662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL effective_url(SigninManager::kChromeSigninEffectiveSite); 5682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Copy the path because the argument to SetPathStr must outlive 5692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the Replacements object. 5702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string path_copy(url.path()); 5712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL::Replacements replacements; 5722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) replacements.SetPathStr(path_copy); 5732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) effective_url = effective_url.ReplaceComponents(replacements); 5742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return effective_url; 5752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 576c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 577c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 578c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SetApplicationLocaleOnIOThread(const std::string& locale) { 579c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 580c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) g_io_thread_application_locale.Get() = locale; 581c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 582c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 58358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void HandleBlockedPopupOnUIThread(const BlockedWindowParams& params) { 58458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) WebContents* tab = tab_util::GetWebContentsByID(params.render_process_id(), 58558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) params.opener_id()); 586558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch if (!tab) 587558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch return; 588558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 5895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prerender::PrerenderContents* prerender_contents = 5905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prerender::PrerenderContents::FromWebContents(tab); 5915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (prerender_contents) { 5925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prerender_contents->Destroy(prerender::FINAL_STATUS_CREATE_NEW_WINDOW); 5935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return; 5945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 5955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 596558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch PopupBlockerTabHelper* popup_helper = 597558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch PopupBlockerTabHelper::FromWebContents(tab); 598558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch if (!popup_helper) 599558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch return; 60058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) popup_helper->AddBlockedPopup(params); 60158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 60258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 60358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(OS_ANDROID) 6048bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 60558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void HandleSingleTabModeBlockOnUIThread(const BlockedWindowParams& params) { 60658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) WebContents* web_contents = 60758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) tab_util::GetWebContentsByID(params.render_process_id(), 60858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) params.opener_id()); 60958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (!web_contents) 61058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return; 61158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 61258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) SingleTabModeTabHelper::FromWebContents(web_contents)->HandleOpenUrl(params); 613558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch} 6148bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 6150f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)float GetDeviceScaleAdjustment() { 6168bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) static const float kMinFSM = 1.05f; 6178bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) static const int kWidthForMinFSM = 320; 6188bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) static const float kMaxFSM = 1.3f; 6198bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) static const int kWidthForMaxFSM = 800; 6208bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 6218bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) gfx::DeviceDisplayInfo info; 6228bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) int minWidth = info.GetSmallestDIPWidth(); 6238bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 6248bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (minWidth <= kWidthForMinFSM) 6258bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return kMinFSM; 6268bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (minWidth >= kWidthForMaxFSM) 6278bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return kMaxFSM; 6288bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 6298bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // The font scale multiplier varies linearly between kMinFSM and kMaxFSM. 6308bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) float ratio = static_cast<float>(minWidth - kWidthForMinFSM) / 6318bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) (kWidthForMaxFSM - kWidthForMinFSM); 6328bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return ratio * (kMaxFSM - kMinFSM) + kMinFSM; 6338bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 6348bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 63558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif // defined(OS_ANDROID) 636558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chrome { 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ChromeContentBrowserClient::ChromeContentBrowserClient() { 642868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#if defined(ENABLE_PLUGINS) 6430f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) for (size_t i = 0; i < arraysize(kPredefinedAllowedFileHandleOrigins); ++i) 6440f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) allowed_file_handle_origins_.insert(kPredefinedAllowedFileHandleOrigins[i]); 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < arraysize(kPredefinedAllowedSocketOrigins); ++i) 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed_socket_origins_.insert(kPredefinedAllowedSocketOrigins[i]); 647868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif 64890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 64990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) permissions_policy_delegate_.reset( 65090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) new extensions::BrowserPermissionsPolicyDelegate()); 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ChromeContentBrowserClient::~ChromeContentBrowserClient() { 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 6577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid ChromeContentBrowserClient::RegisterProfilePrefs( 658c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable* registry) { 659c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterBooleanPref( 660c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kDisable3DAPIs, 661c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 662c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 663c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterBooleanPref( 664c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kEnableHyperlinkAuditing, 665c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) true, 666c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 667c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 668c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 669c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// static 670c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void ChromeContentBrowserClient::SetApplicationLocale( 671c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& locale) { 672c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 673c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 674c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // This object is guaranteed to outlive all threads so we don't have to 675c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // worry about the lack of refcounting and can just post as Unretained. 676c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // 677c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // The common case is that this function is called early in Chrome startup 678c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // before any threads are created (it will also be called later if the user 679c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // changes the pref). In this case, there will be no threads created and 680c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // posting will fail. When there are no threads, we can just set the string 681c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // without worrying about threadsafety. 682c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, 683c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Bind(&SetApplicationLocaleOnIOThread, locale))) { 684c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) g_io_thread_application_locale.Get() = locale; 685c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)content::BrowserMainParts* ChromeContentBrowserClient::CreateBrowserMainParts( 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::MainFunctionParams& parameters) { 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeBrowserMainParts* main_parts; 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Construct the Main browser parts based on the OS type. 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) main_parts = new ChromeBrowserMainPartsWin(parameters); 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX) 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) main_parts = new ChromeBrowserMainPartsMac(parameters); 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_CHROMEOS) 6972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) main_parts = new chromeos::ChromeBrowserMainPartsChromeos(parameters); 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_LINUX) 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) main_parts = new ChromeBrowserMainPartsLinux(parameters); 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_ANDROID) 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) main_parts = new ChromeBrowserMainPartsAndroid(parameters); 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_POSIX) 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) main_parts = new ChromeBrowserMainPartsPosix(parameters); 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) main_parts = new ChromeBrowserMainParts(parameters); 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 70990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) chrome::AddProfilesExtraParts(main_parts); 71090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Construct additional browser parts. Stages are called in the order in 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // which they are added. 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(TOOLKIT_GTK) 7147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch main_parts->AddParts(new ChromeBrowserMainExtraPartsGtk()); 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(TOOLKIT_VIEWS) 7187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch main_parts->AddParts(new ChromeBrowserMainExtraPartsViews()); 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_ASH) 7227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch main_parts->AddParts(new ChromeBrowserMainExtraPartsAsh()); 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_AURA) 7267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch main_parts->AddParts(new ChromeBrowserMainExtraPartsAura()); 7277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif 7287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 7297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(USE_X11) 7307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch main_parts->AddParts(new ChromeBrowserMainExtraPartsX11()); 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 733c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chrome::AddMetricsExtraParts(main_parts); 734c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return main_parts; 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string ChromeContentBrowserClient::GetStoragePartitionIdForSite( 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserContext* browser_context, 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& site) { 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string partition_id; 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The partition ID for webview guest processes is the string value of its 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // SiteInstance URL - "chrome-guest://app_id/persist?partition". 745a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (site.SchemeIs(content::kGuestScheme)) { 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) partition_id = site.spec(); 747a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } else if (site.GetOrigin().spec() == kChromeUIChromeSigninURL) { 748a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Chrome signin page has an embedded iframe of extension and web content, 749a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // thus it must be isolated from other webUI pages. 750a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) partition_id = site.GetOrigin().spec(); 751a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 753c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(IsValidStoragePartitionId(browser_context, partition_id)); 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return partition_id; 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::IsValidStoragePartitionId( 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserContext* browser_context, 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& partition_id) { 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The default ID is empty and is always valid. 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (partition_id.empty()) 7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GURL(partition_id).is_valid(); 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::GetStoragePartitionConfigForSite( 7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserContext* browser_context, 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& site, 7702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool can_be_default, 7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string* partition_domain, 7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string* partition_name, 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool* in_memory) { 7742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Default to the browser-wide storage partition and override based on |site| 7752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // below. 7762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) partition_domain->clear(); 7772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) partition_name->clear(); 7782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *in_memory = false; 7792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 780f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool success = GuestView::GetGuestPartitionConfigForSite( 781f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) site, partition_domain, partition_name, in_memory); 782f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 783f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!success && site.SchemeIs(extensions::kExtensionScheme)) { 7842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If |can_be_default| is false, the caller is stating that the |site| 7852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // should be parsed as if it had isolated storage. In particular it is 7862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // important to NOT check ExtensionService for the is_storage_isolated() 7872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // attribute because this code path is run during Extension uninstall 7882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // to do cleanup after the Extension has already been unloaded from the 7892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // ExtensionService. 7902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_isolated = !can_be_default; 7912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (can_be_default) { 7922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const Extension* extension = NULL; 7932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile* profile = Profile::FromBrowserContext(browser_context); 7942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionService* extension_service = 7952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::ExtensionSystem::Get(profile)->extension_service(); 7962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (extension_service) { 797ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch extension = 798ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch extension_service->extensions()->GetExtensionOrAppByURL(site); 799c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (extension && 800c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) extensions::AppIsolationInfo::HasIsolatedStorage(extension)) { 8012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) is_isolated = true; 8022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 8032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 8042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (is_isolated) { 8072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHECK(site.has_host()); 8082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // For extensions with isolated storage, the the host of the |site| is 8092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the |partition_domain|. The |in_memory| and |partition_name| are only 8102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // used in guest schemes so they are cleared here. 8112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *partition_domain = site.host(); 8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *in_memory = false; 8132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) partition_name->clear(); 8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } else if (site.GetOrigin().spec() == kChromeUIChromeSigninURL) { 8165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Chrome signin page has an embedded iframe of extension and web content, 8175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // thus it must be isolated from other webUI pages. 8185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *partition_domain = chrome::kChromeUIChromeSigninHost; 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Assert that if |can_be_default| is false, the code above must have found a 8222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // non-default partition. If this fails, the caller has a serious logic 8232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // error about which StoragePartition they expect to be in and it is not 8242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // safe to continue. 8252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHECK(can_be_default || !partition_domain->empty()); 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)content::WebContentsViewDelegate* 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeContentBrowserClient::GetWebContentsViewDelegate( 8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WebContents* web_contents) { 8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return chrome::CreateWebContentsViewDelegate(web_contents); 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 834eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid ChromeContentBrowserClient::GuestWebContentsCreated( 8350f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) SiteInstance* guest_site_instance, 836eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch WebContents* guest_web_contents, 837eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch WebContents* opener_web_contents, 8387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch content::BrowserPluginGuestDelegate** guest_delegate, 839eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<base::DictionaryValue> extra_params) { 8400f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) if (!guest_site_instance) { 8410f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) NOTREACHED(); 8420f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return; 8430f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) } 8440f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) GURL guest_site_url = guest_site_instance->GetSiteURL(); 8450f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) const std::string& extension_id = guest_site_url.host(); 8460f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 8470f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 8480f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) guest_web_contents->GetBrowserContext()); 8490f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) ExtensionService* service = 8500f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) extensions::ExtensionSystem::Get(profile)->extension_service(); 8510f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) if (!service) { 8520f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) NOTREACHED(); 8530f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return; 8540f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) } 8550f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 8560f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) /// TODO(fsamuel): In the future, certain types of GuestViews won't require 8570f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // extension bindings. At that point, we should clear |extension_id| instead 8580f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // of exiting early. 8590f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) if (!service->GetExtensionById(extension_id, false) && 8600f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) !CommandLine::ForCurrentProcess()->HasSwitch( 8610f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) switches::kEnableBrowserPluginForAllViewTypes)) { 8620f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) NOTREACHED(); 8630f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return; 8640f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) } 8650f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 866eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (opener_web_contents) { 867eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GuestView* guest = GuestView::FromWebContents(opener_web_contents); 868eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (!guest) { 869eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch NOTREACHED(); 870eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return; 871eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 872eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 873d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // Create a new GuestView of the same type as the opener. 874d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) *guest_delegate = 8750f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) GuestView::Create(guest_web_contents, 8760f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) extension_id, 8770f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) guest->GetViewType()); 878eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return; 879eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 880eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 881eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (!extra_params) { 882eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch NOTREACHED(); 883eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return; 884eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 885eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::string api_type; 8862385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch extra_params->GetString(guestview::kParameterApi, &api_type); 887eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 8880f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) if (api_type.empty()) 8890f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return; 8900f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 891d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) *guest_delegate = 892d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) GuestView::Create(guest_web_contents, 8930f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) extension_id, 894d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) GuestView::GetViewTypeFromString(api_type)); 895eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 896eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 897868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void ChromeContentBrowserClient::GuestWebContentsAttached( 898868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebContents* guest_web_contents, 899868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebContents* embedder_web_contents, 900eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const base::DictionaryValue& extra_params) { 90168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 9020f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) GuestView* guest = GuestView::FromWebContents(guest_web_contents); 9030f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) if (!guest) { 904a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // It's ok to return here, since we could be running a browser plugin 905a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // outside an extension, and don't need to attach a 906a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // BrowserPluginGuestDelegate in that case; 907a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // e.g. running with flag --enable-browser-plugin-for-all-view-types. 9082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 909eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 9100f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) guest->Attach(embedder_web_contents, extra_params); 9112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 9122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void ChromeContentBrowserClient::RenderProcessWillLaunch( 9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderProcessHost* host) { 9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int id = host->GetID(); 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext(host->GetBrowserContext()); 9172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::URLRequestContextGetter* context = 9182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile->GetRequestContextForRenderProcess(id); 9192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) host->AddFilter(new ChromeRenderMessageFilter(id, profile, context)); 9215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) host->AddFilter(new extensions::ExtensionMessageFilter(id, profile)); 9222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(ENABLE_PLUGINS) 9234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) host->AddFilter(new PluginInfoMessageFilter(id, profile)); 9242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 9255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) host->AddFilter(new cast::CastTransportHostFilter); 9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(ENABLE_PRINTING) 9274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) host->AddFilter(new PrintingMessageFilter(id, profile)); 9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 9294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) host->AddFilter(new SearchProviderInstallStateMessageFilter(id, profile)); 930a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#if defined(ENABLE_SPELLCHECK) 9314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) host->AddFilter(new SpellCheckMessageFilter(id)); 932a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#endif 9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 9344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) host->AddFilter(new SpellCheckMessageFilterMac(id)); 9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 9365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) host->AddFilter(new ChromeNetBenchmarkingMessageFilter(profile, context)); 9374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) host->AddFilter(new prerender::PrerenderMessageFilter(id, profile)); 9384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) host->AddFilter(new TtsMessageFilter(id, profile)); 939868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#if defined(ENABLE_WEBRTC) 9404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) WebRtcLoggingHandlerHost* webrtc_logging_handler_host = 9418bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) new WebRtcLoggingHandlerHost(profile); 9425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) host->SetWebRtcLogMessageCallback(base::Bind( 9435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &WebRtcLoggingHandlerHost::LogMessage, webrtc_logging_handler_host)); 9444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) host->AddFilter(webrtc_logging_handler_host); 9454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) host->SetUserData(host, new base::UserDataAdapter<WebRtcLoggingHandlerHost>( 9464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) webrtc_logging_handler_host)); 947868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif 9487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#if !defined(DISABLE_NACL) 949f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) host->AddFilter(new nacl::NaClHostMessageFilter( 950eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch id, profile->IsOffTheRecord(), 9518bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) profile->GetPath(), 952eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch context)); 9537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif 954d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#if defined(OS_ANDROID) 9554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) host->AddFilter(new EncryptedMediaMessageFilterAndroid()); 956d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#endif 9575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (switches::IsNewProfileManagement()) 958a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) host->AddFilter(new PrincipalsMessageFilter(id)); 9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host->Send(new ChromeViewMsg_SetIsIncognitoProcess( 9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile->IsOffTheRecord())); 9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SendExtensionWebRequestStatusToHost(host); 9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RendererContentSettingRules rules; 966a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (host->IsGuest()) { 967a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) GuestView::GetDefaultContentSettingRules(&rules, profile->IsOffTheRecord()); 968a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } else { 969a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) GetRendererContentSettingRules( 970a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) profile->GetHostContentSettingsMap(), &rules); 971a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host->Send(new ChromeViewMsg_SetContentSettingRules(rules)); 9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GURL ChromeContentBrowserClient::GetEffectiveURL( 9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserContext* browser_context, const GURL& url) { 9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext(browser_context); 9782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!profile) 9792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return url; 9802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 981a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // If the input |url| should be assigned to the Instant renderer, make its 982a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // effective URL distinct from other URLs on the search provider's domain. 983a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) if (chrome::ShouldAssignURLToInstantRenderer(url, profile)) 984a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return chrome::GetEffectiveURLForInstant(url, profile); 985a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 986c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if !defined(OS_CHROMEOS) 9872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If the input |url| should be assigned to the Signin renderer, make its 9882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // effective URL distinct from other URLs on the signin service's domain. 9892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Note that the signin renderer will be allowed to sign the user in to 9902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Chrome. 9912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (SigninManager::IsWebBasedSigninFlowURL(url)) 9922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GetEffectiveURLForSignin(url); 993c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 9942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If the input |url| is part of an installed app, the effective URL is an 9962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // extension URL with the ID of that extension as the host. This has the 9972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // effect of grouping apps together in a common SiteInstance. 9982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionService* extension_service = 9992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::ExtensionSystem::Get(profile)->extension_service(); 10002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!extension_service) 10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return url; 10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const Extension* extension = extension_service->extensions()-> 1004ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GetHostedAppByURL(url); 10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!extension) 10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return url; 10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Bookmark apps do not use the hosted app process model, and should be 10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // treated as normal URLs. 10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (extension->from_bookmark()) 10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return url; 10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If the URL is part of an extension's web extent, convert it to an 10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // extension URL. 10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return extension->GetResourceURL(url.path()); 10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::ShouldUseProcessPerSite( 10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserContext* browser_context, const GURL& effective_url) { 10202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Non-extension, non-Instant URLs should generally use 10212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // process-per-site-instance. Because we expect to use the effective URL, 10222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // URLs for hosted apps (apart from bookmark apps) should have an extension 10232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // scheme by now. 10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext(browser_context); 10262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!profile) 10272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 10282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1029a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch if (chrome::ShouldUseProcessPerSiteForInstantURL(effective_url, profile)) 10302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 10312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1032c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if !defined(OS_CHROMEOS) 10332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (SigninManager::IsWebBasedSigninFlowURL(effective_url)) 10342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 1035c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 10362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!effective_url.SchemeIs(extensions::kExtensionScheme)) 10382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 10392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionService* extension_service = 10412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::ExtensionSystem::Get(profile)->extension_service(); 10422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!extension_service) 10435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const Extension* extension = 1046ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch extension_service->extensions()->GetExtensionOrAppByURL(effective_url); 10475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!extension) 10485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 10495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If the URL is part of a hosted app that does not have the background 10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // permission, or that does not allow JavaScript access to the background 10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // page, we want to give each instance its own process to improve 10535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // responsiveness. 10542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (extension->GetType() == Manifest::TYPE_HOSTED_APP) { 10555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!extension->HasAPIPermission(APIPermission::kBackground) || 10562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !extensions::BackgroundInfo::AllowJSAccess(extension)) { 10575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Hosted apps that have script access to their background page must use 10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // process per site, since all instances can make synchronous calls to the 10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // background window. Other extensions should use process per site as well. 10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// These are treated as WebUI schemes but do not get WebUI bindings. Also, 10685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// view-source is allowed for these schemes. 1069c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void ChromeContentBrowserClient::GetAdditionalWebUISchemes( 1070c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<std::string>* additional_schemes) { 1071c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) additional_schemes->push_back(chrome::kChromeSearchScheme); 10725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) additional_schemes->push_back(chrome::kDomDistillerScheme); 10732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 10742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1075a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void ChromeContentBrowserClient::GetAdditionalWebUIHostsToIgnoreParititionCheck( 1076a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) std::vector<std::string>* hosts) { 1077a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) hosts->push_back(chrome::kChromeUIExtensionIconHost); 1078a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) hosts->push_back(chrome::kChromeUIFaviconHost); 1079a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) hosts->push_back(chrome::kChromeUIThemeHost); 1080a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) hosts->push_back(chrome::kChromeUIThumbnailHost); 1081a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) hosts->push_back(chrome::kChromeUIThumbnailHost2); 1082a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) hosts->push_back(chrome::kChromeUIThumbnailListHost); 1083a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 1084a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 10852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)net::URLRequestContextGetter* 10862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ChromeContentBrowserClient::CreateRequestContext( 10872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::BrowserContext* browser_context, 1088a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) content::ProtocolHandlerMap* protocol_handlers, 1089a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) content::ProtocolHandlerScopedVector protocol_interceptors) { 10902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile* profile = Profile::FromBrowserContext(browser_context); 1091a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return profile->CreateRequestContext(protocol_handlers, 1092a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) protocol_interceptors.Pass()); 10932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 10942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)net::URLRequestContextGetter* 10962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ChromeContentBrowserClient::CreateRequestContextForStoragePartition( 10972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::BrowserContext* browser_context, 10982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& partition_path, 10992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool in_memory, 1100a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) content::ProtocolHandlerMap* protocol_handlers, 1101a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) content::ProtocolHandlerScopedVector protocol_interceptors) { 11022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile* profile = Profile::FromBrowserContext(browser_context); 11032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return profile->CreateRequestContextForStoragePartition( 1104a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) partition_path, 1105a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) in_memory, 1106a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) protocol_handlers, 1107a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) protocol_interceptors.Pass()); 11082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 11092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::IsHandledURL(const GURL& url) { 11115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ProfileIOData::IsHandledURL(url); 11125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1114a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)bool ChromeContentBrowserClient::CanCommitURL( 1115a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) content::RenderProcessHost* process_host, 1116a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const GURL& url) { 1117a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // We need to let most extension URLs commit in any process, since this can 1118a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // be allowed due to web_accessible_resources. Most hosted app URLs may also 1119a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // load in any process (e.g., in an iframe). However, the Chrome Web Store 1120a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // cannot be loaded in iframes and should never be requested outside its 1121a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // process. 1122a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) Profile* profile = 1123a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) Profile::FromBrowserContext(process_host->GetBrowserContext()); 1124a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) ExtensionService* service = 1125a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) extensions::ExtensionSystem::Get(profile)->extension_service(); 1126a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (!service) 1127a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) return true; 1128a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const Extension* new_extension = 1129ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch service->extensions()->GetExtensionOrAppByURL(url); 1130a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (new_extension && 1131a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) new_extension->is_hosted_app() && 1132a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) new_extension->id() == extension_misc::kWebStoreAppId && 11335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) !extensions::ProcessMap::Get(profile)-> 11345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Contains(new_extension->id(), process_host->GetID())) { 1135a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) return false; 1136a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) } 1137a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 1138a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) return true; 1139a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)} 1140a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 114158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)bool ChromeContentBrowserClient::ShouldAllowOpenURL( 114258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) content::SiteInstance* site_instance, const GURL& url) { 114358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) GURL from_url = site_instance->GetSiteURL(); 114458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Do not allow pages from the web or other extensions navigate to 114558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // non-web-accessible extension resources. 114658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (url.SchemeIs(extensions::kExtensionScheme) && 114758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) (from_url.SchemeIsHTTPOrHTTPS() || 114858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) from_url.SchemeIs(extensions::kExtensionScheme))) { 114958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 115058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) site_instance->GetProcess()->GetBrowserContext()); 115158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ExtensionService* service = 115258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) extensions::ExtensionSystem::Get(profile)->extension_service(); 115358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (!service) 115458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return true; 115558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const Extension* extension = 115658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) service->extensions()->GetExtensionOrAppByURL(url); 115758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (!extension) 115858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return true; 115958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const Extension* from_extension = 116058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) service->extensions()->GetExtensionOrAppByURL( 116158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) site_instance->GetSiteURL()); 116258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (from_extension && from_extension->id() == extension->id()) 116358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return true; 116458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 116558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (!extensions::WebAccessibleResourcesInfo::IsResourceWebAccessible( 116658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) extension, url.path())) 116758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return false; 116858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 116958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return true; 117058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 117158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 11725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::IsSuitableHost( 11735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderProcessHost* process_host, 11745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& site_url) { 11755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = 11765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile::FromBrowserContext(process_host->GetBrowserContext()); 11772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This may be NULL during tests. In that case, just assume any site can 11782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // share any host. 11792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!profile) 11802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 11812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Instant URLs should only be in the instant process and instant process 1183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // should only have Instant URLs. 11842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InstantService* instant_service = 11852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InstantServiceFactory::GetForProfile(profile); 1186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (instant_service) { 1187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool is_instant_process = instant_service->IsInstantProcess( 1188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) process_host->GetID()); 1189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool should_be_in_instant_process = 1190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chrome::ShouldAssignURLToInstantRenderer(site_url, profile); 1191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (is_instant_process || should_be_in_instant_process) 1192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return is_instant_process && should_be_in_instant_process; 1193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 11942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if !defined(OS_CHROMEOS) 11962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SigninManager* signin_manager = SigninManagerFactory::GetForProfile(profile); 11972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (signin_manager && signin_manager->IsSigninProcess(process_host->GetID())) 11982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return SigninManager::IsWebBasedSigninFlowURL(site_url); 1199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 12002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionService* service = 12022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::ExtensionSystem::Get(profile)->extension_service(); 12035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::ProcessMap* process_map = extensions::ProcessMap::Get(profile); 12045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Don't allow the Task Manager to share a process with anything else. 12065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Otherwise it can affect the renderers it is observing. 12075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Note: we could create another RenderProcessHostPrivilege bucket for 12085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // this to allow multiple chrome://tasks instances to share, but that's 12095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // a very unlikely case without serious consequences. 12105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (site_url.GetOrigin() == GURL(chrome::kChromeUITaskManagerURL).GetOrigin()) 12115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 12125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // These may be NULL during tests. In that case, just assume any site can 12145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // share any host. 12155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!service || !process_map) 12165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 12175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Otherwise, just make sure the process privilege matches the privilege 12195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // required by the site. 12205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderProcessHostPrivilege privilege_required = 12215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetPrivilegeRequiredByUrl(site_url, service); 12225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetProcessPrivilege(process_host, process_map, service) == 12235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) privilege_required; 12245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This function is trying to limit the amount of processes used by extensions 12275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// with background pages. It uses a globally set percentage of processes to 12285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// run such extensions and if the limit is exceeded, it returns true, to 12295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// indicate to the content module to group extensions together. 12305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::ShouldTryToUseExistingProcessHost( 12315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserContext* browser_context, const GURL& url) { 12325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // It has to be a valid URL for us to check for an extension. 12335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!url.is_valid()) 12345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 12355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext(browser_context); 12372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionService* service = !profile ? NULL : 12382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::ExtensionSystem::Get(profile)->extension_service(); 12395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!service) 12405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 12415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We have to have a valid extension with background page to proceed. 12435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* extension = 1244ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch service->extensions()->GetExtensionOrAppByURL(url); 12455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!extension) 12465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 12472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!extensions::BackgroundInfo::HasBackgroundPage(extension)) 12485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 12495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<int> process_ids; 12515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t max_process_count = 12525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderProcessHost::GetMaxRendererProcessCount(); 12535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Go through all profiles to ensure we have total count of extension 12555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // processes containing background pages, otherwise one profile can 12565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // starve the other. 12575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<Profile*> profiles = g_browser_process->profile_manager()-> 12585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetLoadedProfiles(); 12595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < profiles.size(); ++i) { 1260f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) extensions::ProcessManager* epm = 12615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::ExtensionSystem::Get(profiles[i])->process_manager(); 1262f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) for (extensions::ProcessManager::const_iterator iter = 12635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) epm->background_hosts().begin(); 12645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iter != epm->background_hosts().end(); ++iter) { 12655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const extensions::ExtensionHost* host = *iter; 12665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) process_ids.insert(host->render_process_host()->GetID()); 12675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (process_ids.size() > 12715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (max_process_count * chrome::kMaxShareOfExtensionProcesses)) { 12725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 12735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 12765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::SiteInstanceGotProcess( 12795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SiteInstance* site_instance) { 12805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(site_instance->HasProcess()); 12815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 12835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) site_instance->GetBrowserContext()); 12842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!profile) 12852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 12862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Remember the ID of the Instant process to signal the renderer process 12882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // on startup in |AppendExtraCommandLineSwitches| below. 1289c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (chrome::ShouldAssignURLToInstantRenderer( 12902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) site_instance->GetSiteURL(), profile)) { 12912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InstantService* instant_service = 12922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InstantServiceFactory::GetForProfile(profile); 12932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (instant_service) 12942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) instant_service->AddInstantProcess(site_instance->GetProcess()->GetID()); 12952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 12962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1297c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if !defined(OS_CHROMEOS) 12982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // We only expect there to be one signin process as we use process-per-site 12992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // for signin URLs. The signin process will be cleared from SigninManager 13002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // when the renderer is destroyed. 13012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (SigninManager::IsWebBasedSigninFlowURL(site_instance->GetSiteURL())) { 13022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SigninManager* signin_manager = 13032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SigninManagerFactory::GetForProfile(profile); 13042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (signin_manager) 13052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) signin_manager->SetSigninProcess(site_instance->GetProcess()->GetID()); 130690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) BrowserThread::PostTask( 1307f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) BrowserThread::IO, 1308f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FROM_HERE, 1309f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Bind(&InfoMap::SetSigninProcess, 131090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) extensions::ExtensionSystem::Get(profile)->info_map(), 131190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) site_instance->GetProcess()->GetID())); 13122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1313c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 13142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionService* service = 13162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::ExtensionSystem::Get(profile)->extension_service(); 13175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!service) 13185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 13195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1320ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const Extension* extension = service->extensions()->GetExtensionOrAppByURL( 1321ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch site_instance->GetSiteURL()); 13225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!extension) 13235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 13245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::ProcessMap::Get(profile) 13265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ->Insert(extension->id(), 13275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) site_instance->GetProcess()->GetID(), 13285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) site_instance->GetId()); 13295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 13305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 1331f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) BrowserThread::IO, 1332f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FROM_HERE, 1333f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Bind(&InfoMap::RegisterExtensionProcess, 13345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::ExtensionSystem::Get(profile)->info_map(), 13355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension->id(), 13365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) site_instance->GetProcess()->GetID(), 13375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) site_instance->GetId())); 13385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::SiteInstanceDeleting( 13415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SiteInstance* site_instance) { 13425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!site_instance->HasProcess()) 13435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 13445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 13465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) site_instance->GetBrowserContext()); 13472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionService* service = 13482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::ExtensionSystem::Get(profile)->extension_service(); 13495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!service) 13505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 13515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1352ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const Extension* extension = service->extensions()->GetExtensionOrAppByURL( 1353ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch site_instance->GetSiteURL()); 13545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!extension) 13555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 13565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::ProcessMap::Get(profile) 13585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ->Remove(extension->id(), 13595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) site_instance->GetProcess()->GetID(), 13605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) site_instance->GetId()); 13615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 13625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 1363f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) BrowserThread::IO, 1364f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FROM_HERE, 1365f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Bind(&InfoMap::UnregisterExtensionProcess, 13665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::ExtensionSystem::Get(profile)->info_map(), 13675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension->id(), 13685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) site_instance->GetProcess()->GetID(), 13695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) site_instance->GetId())); 13705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void ChromeContentBrowserClient::WorkerProcessCreated( 13735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SiteInstance* site_instance, 13745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int worker_process_id) { 13755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::ExtensionRegistry* extension_registry = 13765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::ExtensionRegistry::Get(site_instance->GetBrowserContext()); 13775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!extension_registry) 13785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return; 13795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const Extension* extension = 13805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extension_registry->enabled_extensions().GetExtensionOrAppByURL( 13815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) site_instance->GetSiteURL()); 13825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!extension) 13835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return; 13845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::ExtensionSystem* extension_system = 13855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::ExtensionSystem::Get(site_instance->GetBrowserContext()); 13865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extension_system->info_map()->RegisterExtensionWorkerProcess( 13875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extension->id(), 13885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) worker_process_id, 13895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) site_instance->GetId()); 13905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 13915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 13925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void ChromeContentBrowserClient::WorkerProcessTerminated( 13935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SiteInstance* site_instance, 13945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int worker_process_id) { 13955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::ExtensionSystem* extension_system = 13965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::ExtensionSystem::Get(site_instance->GetBrowserContext()); 13975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extension_system->info_map()->UnregisterExtensionWorkerProcess( 13985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) worker_process_id); 13995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 14005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1401f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool ChromeContentBrowserClient::ShouldSwapBrowsingInstancesForNavigation( 14022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SiteInstance* site_instance, 14035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& current_url, 14045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& new_url) { 1405a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // If we don't have an ExtensionService, then rely on the SiteInstance logic 1406a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // in RenderFrameHostManager to decide when to swap. 14072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile* profile = 14082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile::FromBrowserContext(site_instance->GetBrowserContext()); 14092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionService* service = 14102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::ExtensionSystem::Get(profile)->extension_service(); 14112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!service) 14122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 14132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1414a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // We must use a new BrowsingInstance (forcing a process swap and disabling 1415a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // scripting by existing tabs) if one of the URLs is an extension and the 1416a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // other is not the exact same extension. 1417a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // 1418a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // We ignore hosted apps here so that other tabs in their BrowsingInstance can 1419a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // use postMessage with them. (The exception is the Chrome Web Store, which 1420a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // is a hosted app that requires its own BrowsingInstance.) Navigations 1421a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // to/from a hosted app will still trigger a SiteInstance swap in 1422a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // RenderFrameHostManager. 1423a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const Extension* current_extension = 1424a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) service->extensions()->GetExtensionOrAppByURL(current_url); 1425a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (current_extension && 1426a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) current_extension->is_hosted_app() && 1427a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) current_extension->id() != extension_misc::kWebStoreAppId) 1428a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) current_extension = NULL; 1429a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 14302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const Extension* new_extension = 1431ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch service->extensions()->GetExtensionOrAppByURL(new_url); 14322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (new_extension && 14332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new_extension->is_hosted_app() && 14342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new_extension->id() != extension_misc::kWebStoreAppId) 14352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new_extension = NULL; 1436a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 1437a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // First do a process check. We should force a BrowsingInstance swap if the 1438a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // current process doesn't know about new_extension, even if current_extension 1439a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // is somehow the same as new_extension. 14405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::ProcessMap* process_map = extensions::ProcessMap::Get(profile); 14412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (new_extension && 14422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) site_instance->HasProcess() && 14435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) !process_map->Contains( 14445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) new_extension->id(), site_instance->GetProcess()->GetID())) 14452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 14462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1447a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Otherwise, swap BrowsingInstances if current_extension and new_extension 1448a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // differ. 1449a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return current_extension != new_extension; 14505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::ShouldSwapProcessesForRedirect( 14535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ResourceContext* resource_context, const GURL& current_url, 14545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& new_url) { 14555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileIOData* io_data = ProfileIOData::FromResourceContext(resource_context); 14565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return extensions::CrossesExtensionProcessBoundary( 14575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) io_data->GetExtensionInfoMap()->extensions(), 1458ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch current_url, new_url, false); 14595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochbool ChromeContentBrowserClient::ShouldAssignSiteForURL(const GURL& url) { 14627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return !url.SchemeIs(chrome::kChromeNativeScheme); 14637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 14647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 14655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string ChromeContentBrowserClient::GetCanonicalEncodingNameByAliasName( 14665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& alias_name) { 14675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return CharacterEncoding::GetCanonicalEncodingNameByAliasName(alias_name); 14685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::AppendExtraCommandLineSwitches( 14715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine* command_line, int child_process_id) { 14724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(OS_POSIX) 14738bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (breakpad::IsCrashReporterEnabled()) { 14744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) std::string enable_crash_reporter; 14754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) GoogleUpdateSettings::GetMetricsId(&enable_crash_reporter); 14764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if !defined(OS_MACOSX) 14774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) enable_crash_reporter += "," + base::GetLinuxDistro(); 14784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif 14795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitchASCII(switches::kEnableCrashReporter, 14804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) enable_crash_reporter); 14815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif // OS_POSIX 14835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (logging::DialogsAreSuppressed()) 14855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitch(switches::kNoErrorDialogs); 14865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string process_type = 14885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->GetSwitchValueASCII(switches::kProcessType); 14895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const CommandLine& browser_command_line = *CommandLine::ForCurrentProcess(); 14902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 149158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) static const char* const kCommonSwitchNames[] = { 1492a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) switches::kUserAgent, 149358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches::kUserDataDir, // Make logs go to the right file. 149458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) }; 149558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) command_line->CopySwitchesFrom(browser_command_line, kCommonSwitchNames, 149658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) arraysize(kCommonSwitchNames)); 14972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1498a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(ENABLE_IPC_FUZZER) 1499a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) static const char* const kIpcFuzzerSwitches[] = { 1500a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) switches::kIpcFuzzerTestcase, 1501a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) }; 1502a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) command_line->CopySwitchesFrom(browser_command_line, kIpcFuzzerSwitches, 1503a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) arraysize(kIpcFuzzerSwitches)); 1504a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif 1505a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 15065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (process_type == switches::kRendererProcess) { 15075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 15085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& login_profile = 1509c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) browser_command_line.GetSwitchValueASCII( 1510c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chromeos::switches::kLoginProfile); 15115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!login_profile.empty()) 1512c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) command_line->AppendSwitchASCII( 1513c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chromeos::switches::kLoginProfile, login_profile); 15145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 15155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15160f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#if defined(ENABLE_WEBRTC) 1517a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) MaybeCopyDisableWebRtcEncryptionSwitch(command_line, 1518a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) browser_command_line, 1519a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) VersionInfo::GetChannel()); 15200f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#endif 15210f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 15225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderProcessHost* process = 15235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderProcessHost::FromID(child_process_id); 15245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (process) { 15255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 15265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) process->GetBrowserContext()); 15275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 15285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (extensions::ProcessMap::Get(profile)->Contains(process->GetID())) 15295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) command_line->AppendSwitch(extensions::switches::kExtensionProcess); 15305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefService* prefs = profile->GetPrefs(); 15325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Currently this pref is only registered if applied via a policy. 15335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (prefs->HasPrefPath(prefs::kDisable3DAPIs) && 15345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kDisable3DAPIs)) { 15355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Turn this policy into a command line switch. 15365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitch(switches::kDisable3DAPIs); 15375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Disable client-side phishing detection in the renderer if it is 15405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // disabled in the Profile preferences or the browser process. 15415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!prefs->GetBoolean(prefs::kSafeBrowsingEnabled) || 15425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !g_browser_process->safe_browsing_detection_service()) { 15435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitch( 15445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kDisableClientSidePhishingDetection); 15455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!prefs->GetBoolean(prefs::kPrintPreviewDisabled)) 15485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitch(switches::kRendererPrintPreview); 15492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InstantService* instant_service = 15512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InstantServiceFactory::GetForProfile(profile); 15522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (instant_service && 15532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) instant_service->IsInstantProcess(process->GetID())) 15542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) command_line->AppendSwitch(switches::kInstantProcess); 15552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1556c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if !defined(OS_CHROMEOS) 15572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SigninManager* signin_manager = 15582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SigninManagerFactory::GetForProfile(profile); 15592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (signin_manager && signin_manager->IsSigninProcess(process->GetID())) 15602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) command_line->AppendSwitch(switches::kSigninProcess); 1561c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 15625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Please keep this in alphabetical order. 15655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const char* const kSwitchNames[] = { 15665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) autofill::switches::kDisableIgnoreAutocompleteOff, 156790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) autofill::switches::kDisableInteractiveAutocomplete, 15684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) autofill::switches::kDisablePasswordGeneration, 156990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) autofill::switches::kEnableInteractiveAutocomplete, 15704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) autofill::switches::kEnablePasswordGeneration, 15715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) autofill::switches::kLocalHeuristicsOnlyForPasswordGeneration, 1572f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) extensions::switches::kAllowHTTPBackgroundPage, 1573ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch extensions::switches::kAllowLegacyExtensionManifests, 1574ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch extensions::switches::kAllowScriptingGallery, 1575a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) extensions::switches::kEnableExperimentalExtensionApis, 1576ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch extensions::switches::kExtensionsOnChromeURLs, 15777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // TODO(victorhsieh): remove the following flag once we move PPAPI FileIO 15787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // to browser. 15797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) switches::kAllowNaClFileHandleAPI, 15805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kAppsCheckoutURL, 15815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kAppsGalleryURL, 15825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kCloudPrintServiceURL, 15835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kDisableBundledPpapiFlash, 15845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kDisableExtensionsResourceWhitelist, 15853551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) switches::kDisablePnacl, 15865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kDisableScriptedPrintThrottling, 15872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switches::kEnableAdview, 1588eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch switches::kEnableAppWindowControls, 15895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kEnableBenchmarking, 15905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kEnableNaCl, 1591a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) switches::kEnableNaClDebug, 1592a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) switches::kEnableNaClNonSfiMode, 15932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switches::kEnableNetBenchmarking, 1594a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) switches::kEnableOfflineAutoReload, 15955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) switches::kEnableStreamlinedHostedApps, 15965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kEnableWatchdog, 15975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kMemoryProfiling, 15985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kMessageLoopHistogrammer, 15995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kNoJsRandomness, 1600f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) switches::kOutOfProcessPdf, 16015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kPlaybackMode, 16025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kPpapiFlashArgs, 16035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kPpapiFlashPath, 16045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kPpapiFlashVersion, 16055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kProfilingAtStart, 16065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kProfilingFile, 16075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kProfilingFlush, 16085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kRecordMode, 16095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kSilentDumpOnDCHECK, 16105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kWhitelistedExtensionID, 16114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) translate::switches::kTranslateSecurityOrigin, 16125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 16135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->CopySwitchesFrom(browser_command_line, kSwitchNames, 16155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arraysize(kSwitchNames)); 16165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (process_type == switches::kUtilityProcess) { 16175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const char* const kSwitchNames[] = { 1618f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) extensions::switches::kAllowHTTPBackgroundPage, 1619a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) extensions::switches::kEnableExperimentalExtensionApis, 1620ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch extensions::switches::kExtensionsOnChromeURLs, 16215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kWhitelistedExtensionID, 16225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 16235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->CopySwitchesFrom(browser_command_line, kSwitchNames, 16255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arraysize(kSwitchNames)); 16265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (process_type == switches::kPluginProcess) { 16275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const char* const kSwitchNames[] = { 1628c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_CHROMEOS) 1629c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chromeos::switches::kLoginProfile, 1630c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 16315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kMemoryProfiling, 16325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kSilentDumpOnDCHECK, 16335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 16345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->CopySwitchesFrom(browser_command_line, kSwitchNames, 16365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arraysize(kSwitchNames)); 16375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (process_type == switches::kZygoteProcess) { 16385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const char* const kSwitchNames[] = { 16395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Load (in-process) Pepper plugins in-process in the zygote pre-sandbox. 16405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kDisableBundledPpapiFlash, 16415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kPpapiFlashPath, 16425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kPpapiFlashVersion, 16435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 16445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->CopySwitchesFrom(browser_command_line, kSwitchNames, 16465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arraysize(kSwitchNames)); 16475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (process_type == switches::kGpuProcess) { 16485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If --ignore-gpu-blacklist is passed in, don't send in crash reports 16495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // because GPU is expected to be unreliable. 16505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (browser_command_line.HasSwitch(switches::kIgnoreGpuBlacklist) && 16515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !command_line->HasSwitch(switches::kDisableBreakpad)) 16525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitch(switches::kDisableBreakpad); 16535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The command line switch kEnableBenchmarking needs to be specified along 16565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // with the kEnableStatsTable switch to ensure that the stats table global 16575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is initialized correctly. 16585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (command_line->HasSwitch(switches::kEnableBenchmarking)) 16595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(command_line->HasSwitch(switches::kEnableStatsTable)); 16605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string ChromeContentBrowserClient::GetApplicationLocale() { 16635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (BrowserThread::CurrentlyOn(BrowserThread::IO)) 1664c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return g_io_thread_application_locale.Get(); 16655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return g_browser_process->GetApplicationLocale(); 16665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string ChromeContentBrowserClient::GetAcceptLangs( 16695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserContext* context) { 16705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext(context); 16715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return profile->GetPrefs()->GetString(prefs::kAcceptLanguages); 16725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)gfx::ImageSkia* ChromeContentBrowserClient::GetDefaultFavicon() { 16755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResourceBundle& rb = ResourceBundle::GetSharedInstance(); 16765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return rb.GetImageSkiaNamed(IDR_DEFAULT_FAVICON); 16775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::AllowAppCache( 16805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& manifest_url, 16815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& first_party, 16825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ResourceContext* context) { 16835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 16845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); 16855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return io_data->GetCookieSettings()-> 16865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IsSettingCookieAllowed(manifest_url, first_party); 16875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::AllowGetCookie( 16905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 16915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& first_party, 16925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const net::CookieList& cookie_list, 16935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ResourceContext* context, 16945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_process_id, 16955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int render_frame_id) { 16965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 16975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); 16985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool allow = io_data->GetCookieSettings()-> 16995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IsReadingCookieAllowed(url, first_party); 17005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 17025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 17035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&TabSpecificContentSettings::CookiesRead, render_process_id, 17045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) render_frame_id, url, first_party, cookie_list, !allow)); 17055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return allow; 17065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::AllowSetCookie( 17095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 17105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& first_party, 17115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& cookie_line, 17125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ResourceContext* context, 17135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_process_id, 17145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int render_frame_id, 17155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::CookieOptions* options) { 17165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 17175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); 17185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieSettings* cookie_settings = io_data->GetCookieSettings(); 17195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool allow = cookie_settings->IsSettingCookieAllowed(url, first_party); 17205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 17225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 17235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&TabSpecificContentSettings::CookieChanged, render_process_id, 17245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) render_frame_id, url, first_party, cookie_line, *options, 17255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !allow)); 17265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return allow; 17275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::AllowSaveLocalState( 17305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ResourceContext* context) { 17315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 17325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); 17335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieSettings* cookie_settings = io_data->GetCookieSettings(); 17345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSetting setting = cookie_settings->GetDefaultCookieSetting(NULL); 17355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(bauerb): Should we also disallow local state if the default is BLOCK? 17375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Could we even support per-origin settings? 17385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return setting != CONTENT_SETTING_SESSION_ONLY; 17395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::AllowWorkerDatabase( 17425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 1743a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& name, 1744a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& display_name, 17455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned long estimated_size, 17465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ResourceContext* context, 17475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::vector<std::pair<int, int> >& render_frames) { 17485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 17495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); 17505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieSettings* cookie_settings = io_data->GetCookieSettings(); 17515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool allow = cookie_settings->IsSettingCookieAllowed(url, url); 17525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Record access to database for potential display in UI. 17545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::pair<int, int> >::const_iterator i; 17555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (i = render_frames.begin(); i != render_frames.end(); ++i) { 17565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 17575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 17585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&TabSpecificContentSettings::WebDatabaseAccessed, 17595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i->first, i->second, url, name, display_name, !allow)); 17605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return allow; 17635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::AllowWorkerFileSystem( 17665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 17675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ResourceContext* context, 17685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::vector<std::pair<int, int> >& render_frames) { 17695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 17705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); 17715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieSettings* cookie_settings = io_data->GetCookieSettings(); 17725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool allow = cookie_settings->IsSettingCookieAllowed(url, url); 17735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Record access to file system for potential display in UI. 17755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::pair<int, int> >::const_iterator i; 17765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (i = render_frames.begin(); i != render_frames.end(); ++i) { 17775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 17785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 17795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&TabSpecificContentSettings::FileSystemAccessed, 17805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i->first, i->second, url, !allow)); 17815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return allow; 17845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::AllowWorkerIndexedDB( 17875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 1788a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& name, 17895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ResourceContext* context, 17905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::vector<std::pair<int, int> >& render_frames) { 17915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 17925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); 17935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieSettings* cookie_settings = io_data->GetCookieSettings(); 17945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool allow = cookie_settings->IsSettingCookieAllowed(url, url); 17955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Record access to IndexedDB for potential display in UI. 17975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::pair<int, int> >::const_iterator i; 17985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (i = render_frames.begin(); i != render_frames.end(); ++i) { 17995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 18005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 18015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&TabSpecificContentSettings::IndexedDBAccessed, 18025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i->first, i->second, url, name, !allow)); 18035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return allow; 18065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 18075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)net::URLRequestContext* 18095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ChromeContentBrowserClient::OverrideRequestContextForURL( 18105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, content::ResourceContext* context) { 18115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 18122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (url.SchemeIs(extensions::kExtensionScheme)) { 18135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); 18145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return io_data->extensions_request_context(); 18155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 18185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 18195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)QuotaPermissionContext* 18215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ChromeContentBrowserClient::CreateQuotaPermissionContext() { 18225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new ChromeQuotaPermissionContext(); 18235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 18245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::AllowCertificateError( 18265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_process_id, 18275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int render_frame_id, 18285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int cert_error, 18295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const net::SSLInfo& ssl_info, 18305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& request_url, 18312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ResourceType::Type resource_type, 18325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool overridable, 18335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool strict_enforcement, 18345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Callback<void(bool)>& callback, 183590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) content::CertificateRequestResultType* result) { 18362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (resource_type != ResourceType::MAIN_FRAME) { 18372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // A sub-resource has a certificate error. The user doesn't really 18382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // have a context for making the right decision, so block the 18392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // request hard, without an info bar to allow showing the insecure 18402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // content. 184190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) *result = content::CERTIFICATE_REQUEST_RESULT_TYPE_DENY; 18422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 18432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 18442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If the tab is being prerendered, cancel the prerender and the request. 18465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::RenderFrameHost* render_frame_host = 18475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::RenderFrameHost::FromID(render_process_id, render_frame_id); 18485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WebContents* tab = WebContents::FromRenderFrameHost(render_frame_host); 18495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!tab) { 18505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 18515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 18525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 18545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prerender::PrerenderContents* prerender_contents = 18555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prerender::PrerenderContents::FromWebContents(tab); 18565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (prerender_contents) { 18575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prerender_contents->Destroy(prerender::FINAL_STATUS_SSL_ERROR); 18585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *result = content::CERTIFICATE_REQUEST_RESULT_TYPE_CANCEL; 18595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return; 18605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(ENABLE_CAPTIVE_PORTAL_DETECTION) 18635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) captive_portal::CaptivePortalTabHelper* captive_portal_tab_helper = 18645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) captive_portal::CaptivePortalTabHelper::FromWebContents(tab); 18655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (captive_portal_tab_helper) 18665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) captive_portal_tab_helper->OnSSLCertError(ssl_info); 18675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 18685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Otherwise, display an SSL blocking page. 18705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new SSLBlockingPage(tab, cert_error, ssl_info, request_url, overridable, 18715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) strict_enforcement, callback); 18725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 18735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::SelectClientCertificate( 18755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_process_id, 18765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int render_frame_id, 18775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const net::HttpNetworkSession* network_session, 18785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::SSLCertRequestInfo* cert_request_info, 18795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Callback<void(net::X509Certificate*)>& callback) { 18805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::RenderFrameHost* rfh = content::RenderFrameHost::FromID( 18815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) render_process_id, render_frame_id); 18825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WebContents* tab = WebContents::FromRenderFrameHost(rfh); 18835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!tab) { 18845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 18855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 18865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prerender::PrerenderContents* prerender_contents = 18895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prerender::PrerenderContents::FromWebContents(tab); 18905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (prerender_contents) { 18915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prerender_contents->Destroy( 18925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prerender::FINAL_STATUS_SSL_CLIENT_CERTIFICATE_REQUESTED); 18935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return; 18945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 18955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 18965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GURL requesting_url("https://" + cert_request_info->host_and_port.ToString()); 18975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DCHECK(requesting_url.is_valid()) 18985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) << "Invalid URL string: https://" 18995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) << cert_request_info->host_and_port.ToString(); 19005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext(tab->GetBrowserContext()); 19025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::Value> filter( 19035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile->GetHostContentSettingsMap()->GetWebsiteSetting( 19045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) requesting_url, 19055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) requesting_url, 19065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTINGS_TYPE_AUTO_SELECT_CERTIFICATE, 19075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string(), NULL)); 19085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (filter.get()) { 19105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Try to automatically select a client certificate. 19115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (filter->IsType(base::Value::TYPE_DICTIONARY)) { 19125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue* filter_dict = 19135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) static_cast<base::DictionaryValue*>(filter.get()); 19145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<scoped_refptr<net::X509Certificate> >& 19165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) all_client_certs = cert_request_info->client_certs; 19175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < all_client_certs.size(); ++i) { 1918868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (CertMatchesFilter(*all_client_certs[i].get(), *filter_dict)) { 19195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Use the first certificate that is matched by the filter. 1920868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) callback.Run(all_client_certs[i].get()); 19215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 19225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 19255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 19265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SSLTabHelper* ssl_tab_helper = SSLTabHelper::FromWebContents(tab); 19305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ssl_tab_helper) { 19315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If there is no SSLTabHelper for the given WebContents then we can't 19325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // show the user a dialog to select a client certificate. So we simply 19335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // proceed with no client certificate. 19345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback.Run(NULL); 19355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 19365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ssl_tab_helper->ShowClientCertificateRequestDialog( 19385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) network_session, cert_request_info, callback); 19395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ChromeContentBrowserClient::AddCertificate( 19425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::URLRequest* request, 19432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::CertificateMimeType cert_type, 19442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const void* cert_data, 19452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t cert_size, 19465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_process_id, 19475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_view_id) { 19482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::SSLAddCertificate(request, cert_type, cert_data, cert_size, 19492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) render_process_id, render_view_id); 19505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)content::MediaObserver* ChromeContentBrowserClient::GetMediaObserver() { 19532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return MediaCaptureDevicesDispatcher::GetInstance(); 19545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::RequestDesktopNotificationPermission( 19575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& source_origin, 19585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int callback_context, 19595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_process_id, 19605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_view_id) { 19615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(ENABLE_NOTIFICATIONS) 19625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 19635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* contents = 19645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab_util::GetWebContentsByID(render_process_id, render_view_id); 19655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!contents) { 19665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 19675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 19685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Skip showing the infobar if the request comes from an extension, and that 19715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // extension has the 'notify' permission. (If the extension does not have the 19725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // permission, the user will still be prompted.) 19735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext(contents->GetBrowserContext()); 1974f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) InfoMap* extension_info_map = 1975c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) extensions::ExtensionSystem::Get(profile)->info_map(); 1976c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DesktopNotificationService* notification_service = 1977c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DesktopNotificationServiceFactory::GetForProfile(profile); 1978c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const Extension* extension = NULL; 1979c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (extension_info_map) { 19805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::ExtensionSet extensions; 1981c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) extension_info_map->GetExtensionsWithAPIPermissionForSecurityOrigin( 1982c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) source_origin, render_process_id, 1983c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) extensions::APIPermission::kNotification, &extensions); 19845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (extensions::ExtensionSet::const_iterator iter = extensions.begin(); 1985c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) iter != extensions.end(); ++iter) { 1986558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch if (notification_service->IsNotifierEnabled(NotifierId( 1987558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch NotifierId::APPLICATION, (*iter)->id()))) { 19887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) extension = iter->get(); 1989c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) break; 1990c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 1991c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 1992c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 19932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderViewHost* rvh = 19942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderViewHost::FromID(render_process_id, render_view_id); 19952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (IsExtensionWithPermissionOrSuggestInConsole( 19962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) APIPermission::kNotification, extension, rvh)) { 19975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (rvh) 19985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rvh->DesktopNotificationPermissionRequestDone(callback_context); 19995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 20005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2002c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) notification_service->RequestPermission(source_origin, render_process_id, 20035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) render_view_id, callback_context, contents); 20045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 20055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTIMPLEMENTED(); 20065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 20075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2009f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)blink::WebNotificationPresenter::Permission 20105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeContentBrowserClient::CheckDesktopNotificationPermission( 20115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& source_origin, 20125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ResourceContext* context, 20135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_process_id) { 20145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(ENABLE_NOTIFICATIONS) 20155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 20167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 20175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); 2018f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) InfoMap* extension_info_map = io_data->GetExtensionInfoMap(); 2019f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 2020f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // We want to see if there is an extension that hasn't been manually disabled 2021f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // that has the notifications permission and applies to this security origin. 2022f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // First, get the list of extensions with permission for the origin. 20235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::ExtensionSet extensions; 2024f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) extension_info_map->GetExtensionsWithAPIPermissionForSecurityOrigin( 2025f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) source_origin, render_process_id, 2026f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) extensions::APIPermission::kNotification, &extensions); 20275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (extensions::ExtensionSet::const_iterator iter = extensions.begin(); 2028f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) iter != extensions.end(); ++iter) { 2029f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Then, check to see if it's been disabled by the user. 2030f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!extension_info_map->AreNotificationsDisabled((*iter)->id())) 2031f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return blink::WebNotificationPresenter::PermissionAllowed; 2032c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 2033c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2034f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // No enabled extensions exist, so check the normal host content settings. 2035f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) HostContentSettingsMap* host_content_settings_map = 2036f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) io_data->GetHostContentSettingsMap(); 2037f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ContentSetting setting = host_content_settings_map->GetContentSetting( 2038f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) source_origin, 2039f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) source_origin, 2040f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CONTENT_SETTINGS_TYPE_NOTIFICATIONS, 2041f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) NO_RESOURCE_IDENTIFIER); 2042f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 2043f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (setting == CONTENT_SETTING_ALLOW) 2044f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return blink::WebNotificationPresenter::PermissionAllowed; 2045f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (setting == CONTENT_SETTING_BLOCK) 2046f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return blink::WebNotificationPresenter::PermissionDenied; 2047f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return blink::WebNotificationPresenter::PermissionNotAllowed; 20485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 2049f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return blink::WebNotificationPresenter::PermissionAllowed; 20505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 20515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::ShowDesktopNotification( 20545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::ShowDesktopNotificationHostMsgParams& params, 20555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_process_id, 20565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_view_id, 20575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool worker) { 20585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(ENABLE_NOTIFICATIONS) 20595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewHost* rvh = RenderViewHost::FromID( 20605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) render_process_id, render_view_id); 20615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!rvh) { 20625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 20635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 20645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderProcessHost* process = rvh->GetProcess(); 20675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext(process->GetBrowserContext()); 20685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DesktopNotificationService* service = 20695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DesktopNotificationServiceFactory::GetForProfile(profile); 20705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service->ShowDesktopNotification( 20715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params, render_process_id, render_view_id, 20725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) worker ? DesktopNotificationService::WorkerNotification : 20735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DesktopNotificationService::PageNotification); 20745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 20755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTIMPLEMENTED(); 20765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 20775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::CancelDesktopNotification( 20805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_process_id, 20815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_view_id, 20825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int notification_id) { 20835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(ENABLE_NOTIFICATIONS) 20845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewHost* rvh = RenderViewHost::FromID( 20855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) render_process_id, render_view_id); 20865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!rvh) { 20875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 20885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 20895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderProcessHost* process = rvh->GetProcess(); 20925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext(process->GetBrowserContext()); 20935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DesktopNotificationService* service = 20945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DesktopNotificationServiceFactory::GetForProfile(profile); 20955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service->CancelDesktopNotification( 20965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) render_process_id, render_view_id, notification_id); 20975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 20985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTIMPLEMENTED(); 20995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 21005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::CanCreateWindow( 21035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& opener_url, 210458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const GURL& opener_top_level_frame_url, 21055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& source_origin, 21065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowContainerType container_type, 2107558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch const GURL& target_url, 2108558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch const content::Referrer& referrer, 2109558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch WindowOpenDisposition disposition, 2110558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch const WebWindowFeatures& features, 2111558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch bool user_gesture, 2112558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch bool opener_suppressed, 21135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ResourceContext* context, 21145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_process_id, 2115558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch bool is_guest, 2116558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch int opener_id, 21175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool* no_javascript_access) { 21185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 21195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *no_javascript_access = false; 21215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 212258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); 2123f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) InfoMap* map = io_data->GetExtensionInfoMap(); 212458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 21255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If the opener is trying to create a background window but doesn't have 21265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the appropriate permission, fail the attempt. 21275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (container_type == WINDOW_CONTAINER_TYPE_BACKGROUND) { 21285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!map->SecurityOriginHasAPIPermission( 21295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) source_origin, 21305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) render_process_id, 21315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) APIPermission::kBackground)) { 21325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 21335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 21345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Note: this use of GetExtensionOrAppByURL is safe but imperfect. It may 21365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // return a recently installed Extension even if this CanCreateWindow call 21375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // was made by an old copy of the page in a normal web process. That's ok, 21385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // because the permission check above would have caused an early return 21395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // already. We must use the full URL to find hosted apps, though, and not 21405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // just the origin. 2141ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const Extension* extension = 2142ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch map->extensions().GetExtensionOrAppByURL(opener_url); 21432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (extension && !extensions::BackgroundInfo::AllowJSAccess(extension)) 21445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *no_javascript_access = true; 2145558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 2146558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch return true; 21475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // No new browser window (popup or tab) in app mode. 2150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (container_type == WINDOW_CONTAINER_TYPE_NORMAL && 2151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chrome::IsRunningInForcedAppMode()) { 2152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return false; 2153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 2154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2155558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch if (is_guest) 2156558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch return true; 2157558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 2158558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch HostContentSettingsMap* content_settings = 2159558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch ProfileIOData::FromResourceContext(context)->GetHostContentSettingsMap(); 216058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) BlockedWindowParams blocked_params(target_url, 216158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) referrer, 216258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) disposition, 216358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) features, 216458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) user_gesture, 216558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) opener_suppressed, 216658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) render_process_id, 216758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) opener_id); 2168558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 21692385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch if (!user_gesture && !CommandLine::ForCurrentProcess()->HasSwitch( 21702385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch switches::kDisablePopupBlocking)) { 217158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (content_settings->GetContentSetting(opener_top_level_frame_url, 217258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) opener_top_level_frame_url, 2173558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch CONTENT_SETTINGS_TYPE_POPUPS, 217458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) std::string()) != 2175558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch CONTENT_SETTING_ALLOW) { 217658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) BrowserThread::PostTask(BrowserThread::UI, 217758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) FROM_HERE, 217858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Bind(&HandleBlockedPopupOnUIThread, 217958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) blocked_params)); 218058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return false; 2181558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch } 218258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 2183558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 218458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(OS_ANDROID) 218558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (SingleTabModeTabHelper::IsRegistered(render_process_id, opener_id)) { 2186558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch BrowserThread::PostTask(BrowserThread::UI, 2187558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch FROM_HERE, 218858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Bind(&HandleSingleTabModeBlockOnUIThread, 218958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) blocked_params)); 2190558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch return false; 2191558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch } 219258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif 2193558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 21945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 21955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string ChromeContentBrowserClient::GetWorkerProcessTitle( 21985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, content::ResourceContext* context) { 21995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 22005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check if it's an extension-created worker, in which case we want to use 22015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the name of the extension. 22025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); 22035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* extension = 22045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) io_data->GetExtensionInfoMap()->extensions().GetByID(url.host()); 22055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return extension ? extension->name() : std::string(); 22065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::ResourceDispatcherHostCreated() { 22095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return g_browser_process->ResourceDispatcherHostCreated(); 22105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// TODO(tommi): Rename from Get to Create. 22135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)content::SpeechRecognitionManagerDelegate* 22145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeContentBrowserClient::GetSpeechRecognitionManagerDelegate() { 22157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(ENABLE_INPUT_SPEECH) 22167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return new speech::ChromeSpeechRecognitionManagerDelegateBubbleUI(); 22175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 22187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Platforms who don't implement x-webkit-speech (a.k.a INPUT_SPEECH) just 22197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // need the base delegate without the bubble UI. 22207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return new speech::ChromeSpeechRecognitionManagerDelegate(); 22215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 22225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)net::NetLog* ChromeContentBrowserClient::GetNetLog() { 22255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return g_browser_process->net_log(); 22265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AccessTokenStore* ChromeContentBrowserClient::CreateAccessTokenStore() { 22295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new ChromeAccessTokenStore(); 22305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::IsFastShutdownPossible() { 22332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 22345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::OverrideWebkitPrefs( 22375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewHost* rvh, const GURL& url, WebPreferences* web_prefs) { 22385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 22395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rvh->GetProcess()->GetBrowserContext()); 22405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefService* prefs = profile->GetPrefs(); 22415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22428bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // Fill per-script font preferences. These are not registered on Android 22438bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // - http://crbug.com/308033. 22448bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#if !defined(OS_ANDROID) 22455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FillFontFamilyMap(prefs, prefs::kWebKitStandardFontFamilyMap, 22465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &web_prefs->standard_font_family_map); 22475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FillFontFamilyMap(prefs, prefs::kWebKitFixedFontFamilyMap, 22485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &web_prefs->fixed_font_family_map); 22495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FillFontFamilyMap(prefs, prefs::kWebKitSerifFontFamilyMap, 22505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &web_prefs->serif_font_family_map); 22515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FillFontFamilyMap(prefs, prefs::kWebKitSansSerifFontFamilyMap, 22525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &web_prefs->sans_serif_font_family_map); 22535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FillFontFamilyMap(prefs, prefs::kWebKitCursiveFontFamilyMap, 22545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &web_prefs->cursive_font_family_map); 22555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FillFontFamilyMap(prefs, prefs::kWebKitFantasyFontFamilyMap, 22565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &web_prefs->fantasy_font_family_map); 22575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FillFontFamilyMap(prefs, prefs::kWebKitPictographFontFamilyMap, 22585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &web_prefs->pictograph_font_family_map); 22598bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#endif 22605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->default_font_size = 22625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetInteger(prefs::kWebKitDefaultFontSize); 22635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->default_fixed_font_size = 22645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetInteger(prefs::kWebKitDefaultFixedFontSize); 22655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->minimum_font_size = 22665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetInteger(prefs::kWebKitMinimumFontSize); 22675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->minimum_logical_font_size = 22685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetInteger(prefs::kWebKitMinimumLogicalFontSize); 22695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->default_encoding = prefs->GetString(prefs::kDefaultCharset); 22715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->javascript_can_open_windows_automatically = 22735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kWebKitJavascriptCanOpenWindowsAutomatically); 22745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->dom_paste_enabled = 22755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kWebKitDomPasteEnabled); 22765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->shrinks_standalone_images_to_fit = 22775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kWebKitShrinksStandaloneImagesToFit); 22785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::DictionaryValue* inspector_settings = 22795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetDictionary(prefs::kWebKitInspectorSettings); 22805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (inspector_settings) { 22815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (base::DictionaryValue::Iterator iter(*inspector_settings); 22825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) !iter.IsAtEnd(); 22832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) iter.Advance()) { 22845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string value; 22852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (iter.value().GetAsString(&value)) { 22865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->inspector_settings.push_back( 22872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::make_pair(iter.key(), value)); 22882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 22895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->tabs_to_links = prefs->GetBoolean(prefs::kWebkitTabsToLinks); 22925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!prefs->GetBoolean(prefs::kWebKitJavascriptEnabled)) 22945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->javascript_enabled = false; 22955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!prefs->GetBoolean(prefs::kWebKitWebSecurityEnabled)) 22965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->web_security_enabled = false; 22975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!prefs->GetBoolean(prefs::kWebKitPluginsEnabled)) 22985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->plugins_enabled = false; 22995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!prefs->GetBoolean(prefs::kWebKitJavaEnabled)) 23005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->java_enabled = false; 23015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->loads_images_automatically = 23025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kWebKitLoadsImagesAutomatically); 23035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (prefs->GetBoolean(prefs::kDisable3DAPIs)) 23055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->experimental_webgl_enabled = false; 23065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->allow_displaying_insecure_content = 23085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kWebKitAllowDisplayingInsecureContent); 23095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->allow_running_insecure_content = 23105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kWebKitAllowRunningInsecureContent); 23115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 23120f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) web_prefs->font_scale_factor = 23130f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) static_cast<float>(prefs->GetDouble(prefs::kWebKitFontScaleFactor)); 23140f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) web_prefs->device_scale_adjustment = GetDeviceScaleAdjustment(); 23155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->force_enable_zoom = 23165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kWebKitForceEnableZoom); 23175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2318b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 2319868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#if defined(OS_ANDROID) 2320868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) web_prefs->password_echo_enabled = 2321868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) prefs->GetBoolean(prefs::kWebKitPasswordEchoEnabled); 2322868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#else 23235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->password_echo_enabled = browser_defaults::kPasswordEchoEnabled; 2324868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif 2325868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 2326c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) web_prefs->asynchronous_spell_checking_enabled = true; 2327c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) web_prefs->unified_textchecker_enabled = true; 23285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->uses_universal_detector = 23305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kWebKitUsesUniversalDetector); 23315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->text_areas_are_resizable = 23325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kWebKitTextAreasAreResizable); 23335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->hyperlink_auditing_enabled = 23345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kEnableHyperlinkAuditing); 23355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure we will set the default_encoding with canonical encoding name. 23375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->default_encoding = 23385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CharacterEncoding::GetCanonicalEncodingNameByAliasName( 23395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->default_encoding); 23405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (web_prefs->default_encoding.empty()) { 23415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->ClearPref(prefs::kDefaultCharset); 23425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->default_encoding = prefs->GetString(prefs::kDefaultCharset); 23435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 23445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(!web_prefs->default_encoding.empty()); 23455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents = WebContents::FromRenderViewHost(rvh); 2347c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) extensions::ViewType view_type = extensions::GetViewType(web_contents); 23482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionService* service = 23492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::ExtensionSystem::Get(profile)->extension_service(); 23505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (service) { 23515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const GURL& site_url = rvh->GetSiteInstance()->GetSiteURL(); 23525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const Extension* extension = 23535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) service->extensions()->GetByID(site_url.host()); 23545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure that we are only granting extension preferences to URLs with 23555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the correct scheme. Without this check, chrome-guest:// schemes used by 23565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // webview tags as well as hosts that happen to match the id of an 23575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // installed extension would get the wrong preferences. 23585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (site_url.SchemeIs(extensions::kExtensionScheme)) { 23595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_webkit_preferences::SetPreferences( 23605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension, view_type, web_prefs); 23615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 23625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 23635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2364c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (view_type == extensions::VIEW_TYPE_NOTIFICATION) { 23655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->allow_scripts_to_close_windows = true; 2366c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } else if (view_type == extensions::VIEW_TYPE_BACKGROUND_CONTENTS) { 23675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Disable all kinds of acceleration for background pages. 23685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // See http://crbug.com/96005 and http://crbug.com/96006 23695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->force_compositing_mode = false; 23705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->accelerated_compositing_enabled = false; 23715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 23725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(OS_CHROMEOS) 23745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Override the default of suppressing HW compositing for WebUI pages for the 23755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // file manager, which is implemented using WebUI but wants HW acceleration 23765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // for video decode & render. 23777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (url.SchemeIs(extensions::kExtensionScheme) && 23783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) url.host() == file_manager::kFileManagerAppId) { 23795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->accelerated_compositing_enabled = true; 23805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->accelerated_2d_canvas_enabled = true; 23815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 23825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 23835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 23845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::UpdateInspectorSetting( 23865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewHost* rvh, const std::string& key, const std::string& value) { 23875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserContext* browser_context = 23885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rvh->GetProcess()->GetBrowserContext(); 23895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DictionaryPrefUpdate update( 23905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile::FromBrowserContext(browser_context)->GetPrefs(), 23915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitInspectorSettings); 23925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue* inspector_settings = update.Get(); 23935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) inspector_settings->SetWithoutPathExpansion( 23945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) key, base::Value::CreateStringValue(value)); 23955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 23965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::BrowserURLHandlerCreated( 23985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserURLHandler* handler) { 23995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add the default URL handlers. 24005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handler->AddHandlerPair(&ExtensionWebUI::HandleChromeURLOverride, 24015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserURLHandler::null_handler()); 24025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handler->AddHandlerPair(BrowserURLHandler::null_handler(), 24035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &ExtensionWebUI::HandleChromeURLOverrideReverse); 24045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // about: handler. Must come before chrome: handler, since it will 24065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // rewrite about: urls to chrome: URLs and then expect chrome: to 24075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // actually handle them. 24085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handler->AddHandlerPair(&WillHandleBrowserAboutURL, 24095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserURLHandler::null_handler()); 241058e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch 241158e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch // Handler to rewrite chrome://newtab for InstantExtended. 241258e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch handler->AddHandlerPair(&chrome::HandleNewTabURLRewrite, 241358e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch &chrome::HandleNewTabURLReverseRewrite); 241458e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch 24155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // chrome: & friends. 24165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handler->AddHandlerPair(&HandleWebUI, &HandleWebUIReverse); 24175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 24185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::ClearCache(RenderViewHost* rvh) { 24205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 24215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rvh->GetSiteInstance()->GetProcess()->GetBrowserContext()); 24225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowsingDataRemover* remover = 24235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowsingDataRemover::CreateForUnboundedRange(profile); 24245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) remover->Remove(BrowsingDataRemover::REMOVE_CACHE, 24255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowsingDataHelper::UNPROTECTED_WEB); 24265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // BrowsingDataRemover takes care of deleting itself when done. 24275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 24285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::ClearCookies(RenderViewHost* rvh) { 24305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 24315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rvh->GetSiteInstance()->GetProcess()->GetBrowserContext()); 24325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowsingDataRemover* remover = 24335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowsingDataRemover::CreateForUnboundedRange(profile); 24345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int remove_mask = BrowsingDataRemover::REMOVE_SITE_DATA; 24355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) remover->Remove(remove_mask, BrowsingDataHelper::UNPROTECTED_WEB); 24365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // BrowsingDataRemover takes care of deleting itself when done. 24375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 24385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::FilePath ChromeContentBrowserClient::GetDefaultDownloadDirectory() { 24403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return DownloadPrefs::GetDefaultDownloadDirectory(); 24415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 24425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string ChromeContentBrowserClient::GetDefaultDownloadName() { 24445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return l10n_util::GetStringUTF8(IDS_DEFAULT_DOWNLOAD_FILENAME); 24455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 24465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::DidCreatePpapiPlugin( 24485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserPpapiHost* browser_host) { 24492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(ENABLE_PLUGINS) 24505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser_host->GetPpapiHost()->AddHostFactoryFilter( 24515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ppapi::host::HostFactory>( 24525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new ChromeBrowserPepperHostFactory(browser_host))); 24532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 24545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 24555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)content::BrowserPpapiHost* 24575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeContentBrowserClient::GetExternalBrowserPpapiHost( 24585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int plugin_process_id) { 24592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserChildProcessHostIterator iter(PROCESS_TYPE_NACL_LOADER); 24605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (!iter.Done()) { 2461f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) nacl::NaClProcessHost* host = static_cast<nacl::NaClProcessHost*>( 2462f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) iter.GetDelegate()); 24635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (host->process() && 24645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host->process()->GetData().id == plugin_process_id) { 24655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Found the plugin. 24665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return host->browser_ppapi_host(); 24675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 24685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++iter; 24695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 24705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 24715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 24725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool ChromeContentBrowserClient::SupportsBrowserPlugin( 24742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::BrowserContext* browser_context, const GURL& site_url) { 24752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (CommandLine::ForCurrentProcess()->HasSwitch( 24762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switches::kEnableBrowserPluginForAllViewTypes)) 24772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 24782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 247968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (content::HasWebUIScheme(site_url)) 248068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return true; 248168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 24822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile* profile = Profile::FromBrowserContext(browser_context); 24832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionService* service = 24842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::ExtensionSystem::Get(profile)->extension_service(); 24852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!service) 24862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 24872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2488ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const Extension* extension = 2489ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch service->extensions()->GetExtensionOrAppByURL(site_url); 24902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!extension) 24912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 24922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2493c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return extension->HasAPIPermission(APIPermission::kWebView) || 2494c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) extension->HasAPIPermission(APIPermission::kAdView); 24952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 24962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 24975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::AllowPepperSocketAPI( 24985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserContext* browser_context, 24995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 25007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool private_api, 250168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const content::SocketPermissionRequest* params) { 2502868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#if defined(ENABLE_PLUGINS) 25037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext(browser_context); 25045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const extensions::ExtensionSet* extension_set = NULL; 25057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (profile) { 25067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) extension_set = extensions::ExtensionSystem::Get(profile)-> 25077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) extension_service()->extensions(); 25087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 25097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 25107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (private_api) { 25117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Access to private socket APIs is controlled by the whitelist. 25127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (IsExtensionOrSharedModuleWhitelisted(url, extension_set, 25137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) allowed_socket_origins_)) { 25147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return true; 25157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 25167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } else { 25177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Access to public socket APIs is controlled by extension permissions. 25187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (url.is_valid() && url.SchemeIs(extensions::kExtensionScheme) && 25197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) extension_set) { 25207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const Extension* extension = extension_set->GetByID(url.host()); 25217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (extension) { 252268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (params) { 252368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) extensions::SocketPermission::CheckParam check_params( 252468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) params->type, params->host, params->port); 252568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (extensions::PermissionsData::CheckAPIPermissionWithParam( 252668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) extension, extensions::APIPermission::kSocket, 252768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) &check_params)) { 252868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return true; 252968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 253068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } else { 253168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (extensions::PermissionsData::HasAPIPermission( 253268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) extension, extensions::APIPermission::kSocket)) { 253368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return true; 253468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 25357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 25367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 25377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 25387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 25397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 25407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Allow both public and private APIs if the command line says so. 25417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return IsHostAllowedByCommandLine(url, extension_set, 25427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) switches::kAllowNaClSocketAPI); 2543868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#else 25445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 2545868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif 25465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 25475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ui::SelectFilePolicy* ChromeContentBrowserClient::CreateSelectFilePolicy( 25492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* web_contents) { 25502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return new ChromeSelectFilePolicy(web_contents); 25512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 25522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2553c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void ChromeContentBrowserClient::GetAdditionalAllowedSchemesForFileSystem( 2554c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<std::string>* additional_allowed_schemes) { 2555c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ContentBrowserClient::GetAdditionalAllowedSchemesForFileSystem( 2556c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) additional_allowed_schemes); 25575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) additional_allowed_schemes->push_back(content::kChromeDevToolsScheme); 25585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) additional_allowed_schemes->push_back(content::kChromeUIScheme); 2559c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) additional_allowed_schemes->push_back(extensions::kExtensionScheme); 2560c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 2561c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 25627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid ChromeContentBrowserClient::GetAdditionalFileSystemBackends( 25637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch content::BrowserContext* browser_context, 2564c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& storage_partition_path, 25657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ScopedVector<fileapi::FileSystemBackend>* additional_backends) { 2566c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if !defined(OS_ANDROID) 2567868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::SequencedWorkerPool* pool = content::BrowserThread::GetBlockingPool(); 25687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch additional_backends->push_back(new MediaFileSystemBackend( 2569868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) storage_partition_path, 2570868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) pool->GetSequencedTaskRunner(pool->GetNamedSequenceToken( 25717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch MediaFileSystemBackend::kMediaTaskRunnerName)).get())); 2572c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 2573eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#if defined(OS_CHROMEOS) 25747dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch fileapi::ExternalMountPoints* external_mount_points = 25757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch content::BrowserContext::GetMountPoints(browser_context); 2576eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DCHECK(external_mount_points); 25777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch chromeos::FileSystemBackend* backend = 25787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch new chromeos::FileSystemBackend( 25795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) new drive::FileSystemBackendDelegate, 25807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch browser_context->GetSpecialStoragePolicy(), 2581eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch external_mount_points, 2582eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch fileapi::ExternalMountPoints::GetSystemInstance()); 25837dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch backend->AddSystemMountPoints(); 25847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DCHECK(backend->CanHandleType(fileapi::kFileSystemTypeExternal)); 25857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch additional_backends->push_back(backend); 2586eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif 2587a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 258858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) additional_backends->push_back( 258958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) new sync_file_system::SyncFileSystemBackend( 259058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Profile::FromBrowserContext(browser_context))); 25915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2592a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if defined(ENABLE_MDNS) 25935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (CommandLine::ForCurrentProcess()->HasSwitch( 25945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) switches::kEnablePrivetStorage)) { 25955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) additional_backends->push_back( 25965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) new local_discovery::PrivetFileSystemBackend( 2597a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) fileapi::ExternalMountPoints::GetSystemInstance(), 2598a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) browser_context)); 25995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 2600a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif 2601c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 2602c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 26035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_POSIX) && !defined(OS_MACOSX) 26045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::GetAdditionalMappedFilesForChildProcess( 26055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const CommandLine& command_line, 26065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int child_process_id, 26075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FileDescriptorInfo>* mappings) { 26085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 26092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath data_path; 26105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PathService::Get(ui::DIR_RESOURCE_PAKS_ANDROID, &data_path); 26115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(!data_path.empty()); 26125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2613a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int flags = base::File::FLAG_OPEN | base::File::FLAG_READ; 26142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath chrome_resources_pak = 26155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data_path.AppendASCII("chrome_100_percent.pak"); 2616a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::File file(chrome_resources_pak, flags); 2617a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DCHECK(file.IsValid()); 26182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mappings->push_back(FileDescriptorInfo(kAndroidChrome100PercentPakDescriptor, 2619a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) FileDescriptor(file.Pass()))); 26205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string locale = GetApplicationLocale(); 26222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath locale_pak = ResourceBundle::GetSharedInstance(). 26235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetLocaleFilePath(locale, false); 2624a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) file.Initialize(locale_pak, flags); 2625a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DCHECK(file.IsValid()); 26265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mappings->push_back(FileDescriptorInfo(kAndroidLocalePakDescriptor, 2627a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) FileDescriptor(file.Pass()))); 26285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath resources_pack_path; 26302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PathService::Get(chrome::FILE_RESOURCES_PACK, &resources_pack_path); 2631a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) file.Initialize(resources_pack_path, flags); 2632a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DCHECK(file.IsValid()); 26332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mappings->push_back(FileDescriptorInfo(kAndroidUIResourcesPakDescriptor, 2634a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) FileDescriptor(file.Pass()))); 26352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 26368bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (breakpad::IsCrashReporterEnabled()) { 2637a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) file = breakpad::CrashDumpManager::GetInstance()->CreateMinidumpFile( 2638a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) child_process_id); 2639a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (file.IsValid()) { 2640a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) mappings->push_back(FileDescriptorInfo(kAndroidMinidumpDescriptor, 2641a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) FileDescriptor(file.Pass()))); 2642a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } else { 26432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOG(ERROR) << "Failed to create file for minidump, crash reporting will " 26442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "be disabled for this process."; 26452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 26465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 26475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 26495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int crash_signal_fd = GetCrashSignalFD(command_line); 26505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (crash_signal_fd >= 0) { 26515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mappings->push_back(FileDescriptorInfo(kCrashDumpSignal, 26525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FileDescriptor(crash_signal_fd, 26535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false))); 26545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 26555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_ANDROID) 26565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 26575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_POSIX) && !defined(OS_MACOSX) 26585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 26605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t* ChromeContentBrowserClient::GetResourceDllName() { 26615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return chrome::kBrowserResourcesDll; 26625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 26635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ChromeContentBrowserClient::PreSpawnRenderer( 26652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sandbox::TargetPolicy* policy, 26662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool* success) { 26672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This code is duplicated in nacl_exe_win_64.cc. 26682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Allow the server side of a pipe restricted to the "chrome.nacl." 26692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // namespace so that it cannot impersonate other system or other chrome 26702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // service pipes. 26712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sandbox::ResultCode result = policy->AddRule( 26722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sandbox::TargetPolicy::SUBSYS_NAMED_PIPES, 26732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sandbox::TargetPolicy::NAMEDPIPES_ALLOW_ANY, 26742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) L"\\\\.\\pipe\\chrome.nacl.*"); 26752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (result != sandbox::SBOX_ALL_OK) { 26762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *success = false; 26772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 26782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 26792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 26802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Renderers need to send named pipe handles and shared memory 26812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // segment handles to NaCl loader processes. 26822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result = policy->AddRule(sandbox::TargetPolicy::SUBSYS_HANDLES, 26832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sandbox::TargetPolicy::HANDLES_DUP_ANY, 26842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) L"File"); 26852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (result != sandbox::SBOX_ALL_OK) { 26862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *success = false; 26872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 26882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 26895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 26905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 26915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)bool ChromeContentBrowserClient::IsPluginAllowedToCallRequestOSFileHandle( 26934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) content::BrowserContext* browser_context, 26944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const GURL& url) { 26954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(ENABLE_PLUGINS) 26964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) Profile* profile = Profile::FromBrowserContext(browser_context); 26975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const extensions::ExtensionSet* extension_set = NULL; 26984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (profile) { 26994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) extension_set = extensions::ExtensionSystem::Get(profile)-> 27004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) extension_service()->extensions(); 27014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 27024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // TODO(teravest): Populate allowed_file_handle_origins_ when FileIO is moved 27034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // from the renderer to the browser. 27044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return IsExtensionOrSharedModuleWhitelisted(url, extension_set, 27054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) allowed_file_handle_origins_) || 27064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) IsHostAllowedByCommandLine(url, extension_set, 27074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) switches::kAllowNaClFileHandleAPI); 27084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#else 27094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return false; 27104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif 27114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 27124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 27135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool ChromeContentBrowserClient::IsPluginAllowedToUseDevChannelAPIs() { 27145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(ENABLE_PLUGINS) 27155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Allow access for tests. 27165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (CommandLine::ForCurrentProcess()->HasSwitch( 27175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) switches::kEnablePepperTesting)) { 27185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return true; 27195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 27205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 27215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel(); 27225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Allow dev channel APIs to be used on "Canary", "Dev", and "Unknown" 27235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // releases of Chrome. Permitting "Unknown" allows these APIs to be used on 27245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Chromium builds as well. 27255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return channel <= chrome::VersionInfo::CHANNEL_DEV; 27265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#else 27275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return false; 27285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif 27295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 27305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2731a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if defined(ENABLE_WEBRTC) 2732a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void ChromeContentBrowserClient::MaybeCopyDisableWebRtcEncryptionSwitch( 2733a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) CommandLine* to_command_line, 2734a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const CommandLine& from_command_line, 2735a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) VersionInfo::Channel channel) { 2736a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if defined(OS_ANDROID) 2737a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const VersionInfo::Channel kMaxDisableEncryptionChannel = 2738a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) VersionInfo::CHANNEL_BETA; 2739a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#else 2740a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const VersionInfo::Channel kMaxDisableEncryptionChannel = 2741a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) VersionInfo::CHANNEL_DEV; 2742a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif 2743a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (channel <= kMaxDisableEncryptionChannel) { 2744a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) static const char* const kWebRtcDevSwitchNames[] = { 2745a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) switches::kDisableWebRtcEncryption, 2746a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) }; 2747a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) to_command_line->CopySwitchesFrom(from_command_line, 2748a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) kWebRtcDevSwitchNames, 2749a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) arraysize(kWebRtcDevSwitchNames)); 2750a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 2751a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 2752a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif // defined(ENABLE_WEBRTC) 27535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 27545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace chrome 2755