chrome_content_browser_client.cc revision 116680a4aac90f2aa7413d9095a592090648e557
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chrome_content_browser_client.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <set> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <utility> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/lazy_instance.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/path_service.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/prefs/scoped_user_pref_update.h" 17868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_number_conversions.h" 18868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 19868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/threading/sequenced_worker_pool.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browser_about_handler.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browser_process.h" 227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/browser_shutdown.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browsing_data/browsing_data_helper.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browsing_data/browsing_data_remover.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/character_encoding.h" 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/chrome_net_benchmarking_message_filter.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chrome_quota_permission_context.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/content_settings/content_settings_utils.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/content_settings/cookie_settings.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/content_settings/host_content_settings_map.h" 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/content_settings/permission_request_id.h" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/content_settings/tab_specific_content_settings.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/defaults.h" 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/devtools/chrome_devtools_manager_delegate.h" 353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "chrome/browser/download/download_prefs.h" 3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/extensions/browser_permissions_policy_delegate.h" 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_service.h" 38effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/extensions/extension_util.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" 43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/geolocation/geolocation_permission_context.h" 44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/geolocation/geolocation_permission_context_factory.h" 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/media/cast_transport_host_filter.h" 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/media/media_capture_devices_dispatcher.h" 47f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/media/midi_permission_context.h" 48f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/media/midi_permission_context_factory.h" 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.h" 508bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "chrome/browser/nacl_host/nacl_browser_delegate_impl.h" 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/net/chrome_net_log.h" 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/notifications/desktop_notification_service.h" 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/notifications/desktop_notification_service_factory.h" 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/platform_util.h" 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/plugins/plugin_info_message_filter.h" 56558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "chrome/browser/prerender/prerender_final_status.h" 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prerender/prerender_manager.h" 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prerender/prerender_manager_factory.h" 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prerender/prerender_message_filter.h" 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prerender/prerender_tracker.h" 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/printing/printing_message_filter.h" 6290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.h" 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile_io_data.h" 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile_manager.h" 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/renderer_host/chrome_render_message_filter.h" 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/renderer_host/pepper/chrome_browser_pepper_host_factory.h" 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/search/instant_service.h" 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/search/instant_service_factory.h" 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/search/search.h" 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/search_engines/search_provider_install_state_message_filter.h" 72a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/browser/signin/principals_message_filter.h" 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/speech/chrome_speech_recognition_manager_delegate.h" 74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/speech/extension_api/tts_engine_extension_api.h" 75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/speech/tts_controller.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" 7946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/ssl/ssl_client_certificate_selector.h" 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/tab_contents/tab_util.h" 8158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/ui/blocked_content/blocked_window_params.h" 82424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "chrome/browser/ui/blocked_content/popup_blocker_tab_helper.h" 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/chrome_select_file_policy.h" 84eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/browser/ui/sync/sync_promo_ui.h" 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/tab_contents/chrome_web_contents_view_delegate.h" 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/chrome_web_ui_controller_factory.h" 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_constants.h" 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_paths.h" 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 908bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "chrome/common/env_vars.h" 91cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/common/extensions/extension_constants.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/logging_chrome.h" 957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/common/pepper_permission_util.h" 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/render_messages.h" 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/url_constants.h" 994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/installer/util/google_update_settings.h" 100a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)#include "chromeos/chromeos_constants.h" 101010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "components/cdm/browser/cdm_message_filter_android.h" 1020529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "components/cloud_devices/common/cloud_devices_switches.h" 1036d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "components/google/core/browser/google_util.h" 104cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/pref_registry/pref_registry_syncable.h" 1050529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "components/signin/core/common/profile_management_switches.h" 1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/translate/core/common/translate_switches.h" 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_child_process_host.h" 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_main_parts.h" 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_ppapi_host.h" 110868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "content/public/browser/browser_thread.h" 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_url_handler.h" 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/child_process_data.h" 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/child_process_security_policy.h" 1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/public/browser/render_frame_host.h" 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_process_host.h" 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_view_host.h" 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/resource_context.h" 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/site_instance.h" 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/child_process_host.h" 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/content_descriptors.h" 122116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/public/common/show_desktop_notification_params.h" 12368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "content/public/common/url_utils.h" 124116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/public/common/web_preferences.h" 12523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "extensions/browser/extension_host.h" 1265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_message_filter.h" 1275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_registry.h" 1285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_system.h" 129f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/browser/info_map.h" 130f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/browser/process_manager.h" 1315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/process_map.h" 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "extensions/browser/view_type_utils.h" 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "extensions/common/constants.h" 134f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/extension.h" 1355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/common/extension_set.h" 136f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/manifest_handlers/background_info.h" 137f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/manifest_handlers/shared_module_info.h" 1385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/common/manifest_handlers/web_accessible_resources_info.h" 139f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/permissions/permissions_data.h" 140effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "extensions/common/permissions/socket_permission.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" 152eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "webkit/browser/fileapi/external_mount_points.h" 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 1555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/win/windows_version.h" 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chrome_browser_main_win.h" 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "sandbox/win/src/sandbox_policy.h" 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chrome_browser_main_mac.h" 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/spellchecker/spellcheck_message_filter_mac.h" 1618bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "components/breakpad/app/breakpad_mac.h" 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_CHROMEOS) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/chrome_browser_main_chromeos.h" 1645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/chromeos/drive/fileapi/file_system_backend_delegate.h" 165116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/chromeos/file_manager/app_id.h" 1660529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "chrome/browser/chromeos/file_system_provider/fileapi/backend_delegate.h" 1677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chromeos/fileapi/file_system_backend.h" 1685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/chromeos/fileapi/mtp_file_system_backend_delegate.h" 169b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "chrome/browser/chromeos/login/startup_utils.h" 170cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/users/user_manager.h" 171558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "chrome/browser/chromeos/system/input_device_settings.h" 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/chromeos_switches.h" 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_LINUX) 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chrome_browser_main_linux.h" 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_ANDROID) 176effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/android/new_tab_page_url_handler.h" 17758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/android/webapps/single_tab_mode_tab_helper.h" 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chrome_browser_main_android.h" 179f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/media/protected_media_identifier_permission_context.h" 180f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/media/protected_media_identifier_permission_context_factory.h" 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/descriptors_android.h" 1828bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "components/breakpad/browser/crash_dump_manager_android.h" 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_POSIX) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chrome_browser_main_posix.h" 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#if defined(OS_POSIX) && !defined(OS_MACOSX) 1888bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "base/debug/leak_annotations.h" 1898bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "components/breakpad/app/breakpad_linux.h" 1908bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "components/breakpad/browser/crash_handler_host_linux.h" 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/ui_base_paths.h" 1958bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "ui/gfx/android/device_display_info.h" 19646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#else 19746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/media_galleries/fileapi/media_file_system_backend.h" 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if !defined(OS_CHROMEOS) 201effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/signin/chrome_signin_client.h" 202effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/signin/chrome_signin_client_factory.h" 203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/signin/signin_manager_factory.h" 204e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "components/signin/core/browser/signin_manager.h" 205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(TOOLKIT_VIEWS) 2087dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/ui/views/chrome_browser_main_extra_parts_views.h" 2097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif 2107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(USE_ASH) 2127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/ui/views/ash/chrome_browser_main_extra_parts_ash.h" 2137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif 2147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(USE_AURA) 2167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/ui/aura/chrome_browser_main_extra_parts_aura.h" 2177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif 2187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(USE_X11) 2207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_browser_main_extra_parts_x11.h" 2217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif 2227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 22346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#if defined(ENABLE_CAPTIVE_PORTAL_DETECTION) 22446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/captive_portal/captive_portal_tab_helper.h" 22546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif 22646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 227116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if !defined(DISABLE_NACL) 228116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/nacl/browser/nacl_browser.h" 229116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/nacl/browser/nacl_host_message_filter.h" 230116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/nacl/browser/nacl_process_host.h" 231116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/nacl/common/nacl_process_type.h" 232116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/nacl/common/nacl_switches.h" 233116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 234116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 23546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 2366d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "chrome/browser/extensions/api/web_request/web_request_api.h" 237f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/guest_view/guest_view_base.h" 238f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/guest_view/guest_view_constants.h" 239f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/guest_view/guest_view_manager.h" 240f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/guest_view/web_view/web_view_guest.h" 241116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/guest_view/web_view/web_view_permission_helper.h" 242116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/guest_view/web_view/web_view_renderer_state.h" 24346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/renderer_host/chrome_extension_message_filter.h" 244116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/sync_file_system/local/sync_file_system_backend.h" 24546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif 24646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 247a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#if defined(ENABLE_SPELLCHECK) 248a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/spellchecker/spellcheck_message_filter.h" 249a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#endif 250a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 25123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#if defined(ENABLE_SERVICE_DISCOVERY) 252a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/browser/local_discovery/storage/privet_filesystem_backend.h" 253a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif 254a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 25546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#if defined(ENABLE_WEBRTC) 25646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/media/webrtc_logging_handler_host.h" 25746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif 25846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::FileDescriptor; 2606d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)using blink::WebWindowFeatures; 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::AccessTokenStore; 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread; 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserURLHandler; 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::ChildProcessSecurityPolicy; 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::QuotaPermissionContext; 2660529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochusing content::RenderFrameHost; 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::RenderViewHost; 268116680a4aac90f2aa7413d9095a592090648e557Ben Murdochusing content::ResourceType; 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::SiteInstance; 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContents; 271116680a4aac90f2aa7413d9095a592090648e557Ben Murdochusing content::WebPreferences; 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using extensions::APIPermission; 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using extensions::Extension; 274f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using extensions::InfoMap; 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using extensions::Manifest; 276558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochusing message_center::NotifierId; 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 278a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if defined(OS_POSIX) 279a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)using content::FileDescriptorInfo; 280a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif 281a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 284c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Cached version of the locale so we can return the locale on the I/O 285c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// thread. 286c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)base::LazyInstance<std::string> g_io_thread_application_locale; 287c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 288868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#if defined(ENABLE_PLUGINS) 2896d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)// TODO(teravest): Add renderer-side API-specific checking for these APIs so 2906d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)// that blanket permission isn't granted to all dev channel APIs for these. 2916d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)// http://crbug.com/386743 2926d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)const char* const kPredefinedAllowedDevChannelOrigins[] = { 2936d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) "6EAED1924DB611B6EEF2A664BD077BE7EAD33B8F", // see crbug.com/383937 2946d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) "4EB74897CB187C7633357C2FE832E0AD6A44883A" // see crbug.com/383937 2956d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)}; 2966d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 297cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const char* const kPredefinedAllowedFileHandleOrigins[] = { 2980f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "6EAED1924DB611B6EEF2A664BD077BE7EAD33B8F", // see crbug.com/234789 2990f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "4EB74897CB187C7633357C2FE832E0AD6A44883A" // see crbug.com/234789 3000f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)}; 3010f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 302cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const char* const kPredefinedAllowedSocketOrigins[] = { 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "okddffdblfhhnmhodogpojmfkjmhinfp", // Test SSH Client 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "pnhechapfaindjhompbnflcldabbghjo", // HTerm App (SSH Client) 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "bglhmjfplikpjnfoegeomebmfnkjomhe", // see crbug.com/122126 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "gbchcmhmhahfdphkhkmpfmihenigjmpp", // Chrome Remote Desktop 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "kgngmbheleoaphbjbaiobfdepmghbfah", // Pre-release Chrome Remote Desktop 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "odkaodonbgfohohmklejpjiejmcipmib", // Dogfood Chrome Remote Desktop 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "ojoimpklfciegopdfgeenehpalipignm", // Chromoting canary 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "cbkkbcmdlboombapidmoeolnmdacpkch", // see crbug.com/129089 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "hhnbmknkdabfoieppbbljkhkfjcmcbjh", // see crbug.com/134099 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "mablfbjkhmhkmefkjjacnbaikjkipphg", // see crbug.com/134099 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "pdeelgamlgannhelgoegilelnnojegoh", // see crbug.com/134099 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "cabapfdbkniadpollkckdnedaanlciaj", // see crbug.com/134099 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "mapljbgnjledlpdmlchihnmeclmefbba", // see crbug.com/134099 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "ghbfeebgmiidnnmeobbbaiamklmpbpii", // see crbug.com/134099 3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "jdfhpkjeckflbbleddjlpimecpbjdeep", // see crbug.com/142514 318c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "iabmpiboiopbgfabjmgeedhcmjenhbla", // see crbug.com/165080 319c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "B7CF8A292249681AF81771650BA4CEEAF19A4560", // see crbug.com/165080 320c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "6EAED1924DB611B6EEF2A664BD077BE7EAD33B8F", // see crbug.com/234789 321c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "4EB74897CB187C7633357C2FE832E0AD6A44883A", // see crbug.com/234789 322c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "7525AF4F66763A70A883C4700529F647B470E4D2", // see crbug.com/238084 323c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "0B549507088E1564D672F7942EB87CA4DAD73972", // see crbug.com/238084 324c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "864288364E239573E777D3E0E36864E590E95C74" // see crbug.com/238084 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 326868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns a copy of the given url with its host set to given host and path set 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// to given path. Other parts of the url will be the same. 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GURL ReplaceURLHostAndPath(const GURL& url, 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& host, 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& path) { 3335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu url::Replacements<char> replacements; 3345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu replacements.SetHost(host.c_str(), url::Component(0, host.length())); 3355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu replacements.SetPath(path.c_str(), url::Component(0, path.length())); 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return url.ReplaceComponents(replacements); 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Maps "foo://bar/baz/" to "foo://chrome/bar/baz/". 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GURL AddUberHost(const GURL& url) { 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string uber_host = chrome::kChromeUIUberHost; 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string new_path = url.host() + url.path(); 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ReplaceURLHostAndPath(url, uber_host, new_path); 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// If url->host() is "chrome" and url->path() has characters other than the 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// first slash, changes the url from "foo://chrome/bar/" to "foo://bar/" and 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// returns true. Otherwise returns false. 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RemoveUberHost(GURL* url) { 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (url->host() != chrome::kChromeUIUberHost) 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (url->path().empty() || url->path() == "/") 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string old_path = url->path(); 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string::size_type separator = old_path.find('/', 1); 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string new_host; 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string new_path; 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (separator == std::string::npos) { 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_host = old_path.substr(1); 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_host = old_path.substr(1, separator - 1); 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_path = old_path.substr(separator); 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Do not allow URLs with paths empty before the first slash since we can't 3707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // have an empty host. (e.g "foo://chrome//") 3717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (new_host.empty()) 3727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return false; 3737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *url = ReplaceURLHostAndPath(*url, new_host, new_path); 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) DCHECK(url->is_valid()); 3777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Handles rewriting Web UI URLs. 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool HandleWebUI(GURL* url, content::BrowserContext* browser_context) { 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Do not handle special URLs such as "about:foo" 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!url->host().empty()) { 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL chrome_url = AddUberHost(*url); 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Handle valid "chrome://chrome/foo" URLs so the reverse handler will 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // be called. 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ChromeWebUIControllerFactory::GetInstance()->UseWebUIForURL( 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser_context, chrome_url)) 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ChromeWebUIControllerFactory::GetInstance()->UseWebUIForURL( 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser_context, *url)) 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Special case : in ChromeOS in Guest mode bookmarks and history are 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // disabled for security reasons. New tab page explains the reasons, so 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // we redirect user to new tab page. 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (chromeos::UserManager::Get()->IsLoggedInAsGuest()) { 4035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (url->SchemeIs(content::kChromeUIScheme) && 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (url->DomainIs(chrome::kChromeUIBookmarksHost) || 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url->DomainIs(chrome::kChromeUIHistoryHost))) { 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Rewrite with new tab URL 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *url = GURL(chrome::kChromeUINewTabURL); 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Reverse URL handler for Web UI. Maps "chrome://chrome/foo/" to 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// "chrome://foo/". 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool HandleWebUIReverse(GURL* url, content::BrowserContext* browser_context) { 4185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!url->is_valid() || !url->SchemeIs(content::kChromeUIScheme)) 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return RemoveUberHost(url); 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Used by the GetPrivilegeRequiredByUrl() and GetProcessPrivilege() functions 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// below. Extension, and isolated apps require different privileges to be 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// granted to their RenderProcessHosts. This classification allows us to make 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// sure URLs are served by hosts with the right set of privileges. 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum RenderProcessHostPrivilege { 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRIV_NORMAL, 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRIV_HOSTED, 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRIV_ISOLATED, 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRIV_EXTENSION, 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RenderProcessHostPrivilege GetPrivilegeRequiredByUrl( 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionService* service) { 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Default to a normal renderer cause it is lower privileged. This should only 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // occur if the URL on a site instance is either malformed, or uninitialized. 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If it is malformed, then there is no need for better privileges anyways. 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If it is uninitialized, but eventually settles on being an a scheme other 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // than normal webrenderer, the navigation logic will correct us out of band 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // anyways. 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!url.is_valid()) 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PRIV_NORMAL; 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (url.SchemeIs(extensions::kExtensionScheme)) { 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* extension = 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service->extensions()->GetByID(url.host()); 450c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (extension && 451c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) extensions::AppIsolationInfo::HasIsolatedStorage(extension)) 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PRIV_ISOLATED; 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (extension && extension->is_hosted_app()) 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PRIV_HOSTED; 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PRIV_EXTENSION; 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PRIV_NORMAL; 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RenderProcessHostPrivilege GetProcessPrivilege( 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderProcessHost* process_host, 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::ProcessMap* process_map, 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionService* service) { 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<std::string> extension_ids = 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) process_map->GetExtensionsInProcess(process_host->GetID()); 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (extension_ids.empty()) 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PRIV_NORMAL; 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (std::set<std::string>::iterator iter = extension_ids.begin(); 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iter != extension_ids.end(); ++iter) { 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* extension = service->GetExtensionById(*iter, false); 474c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (extension && 475c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) extensions::AppIsolationInfo::HasIsolatedStorage(extension)) 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PRIV_ISOLATED; 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (extension && extension->is_hosted_app()) 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PRIV_HOSTED; 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PRIV_EXTENSION; 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool CertMatchesFilter(const net::X509Certificate& cert, 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::DictionaryValue& filter) { 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(markusheintz): This is the minimal required filter implementation. 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Implement a better matcher. 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // An empty filter matches any client certificate since no requirements are 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // specified at all. 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (filter.empty()) 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string common_name; 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (filter.GetString("ISSUER.CN", &common_name) && 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (cert.issuer().common_name == common_name)) { 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 502f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if !defined(OS_ANDROID) 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Fills |map| with the per-script font prefs under path |map_name|. 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void FillFontFamilyMap(const PrefService* prefs, 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* map_name, 506116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::ScriptFontFamilyMap* map) { 507cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // TODO(falken): Get rid of the brute-force scan over possible 508cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // (font family / script) combinations - see http://crbug.com/308095. 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < prefs::kWebKitScriptsForFontFamilyMapsLength; ++i) { 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* script = prefs::kWebKitScriptsForFontFamilyMaps[i]; 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string pref_name = base::StringPrintf("%s.%s", map_name, script); 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string font_family = prefs->GetString(pref_name.c_str()); 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!font_family.empty()) 5145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) (*map)[script] = base::UTF8ToUTF16(font_family); 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_POSIX) && !defined(OS_MACOSX) 5198bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)breakpad::CrashHandlerHostLinux* CreateCrashHandlerHost( 5208bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const std::string& process_type) { 5218bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) base::FilePath dumps_path; 5228bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) PathService::Get(chrome::DIR_CRASH_DUMPS, &dumps_path); 5238bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) { 5248bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ANNOTATE_SCOPED_MEMORY_LEAK; 525cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool upload = (getenv(env_vars::kHeadless) == NULL); 5268bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) breakpad::CrashHandlerHostLinux* crash_handler = 527cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) new breakpad::CrashHandlerHostLinux(process_type, dumps_path, upload); 5288bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) crash_handler->StartUploaderThread(); 5298bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return crash_handler; 5308bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 5318bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 5328bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int GetCrashSignalFD(const CommandLine& command_line) { 534cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Extensions have the same process type as renderers. 5355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (command_line.HasSwitch(extensions::switches::kExtensionProcess)) { 5368bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) static breakpad::CrashHandlerHostLinux* crash_handler = NULL; 5378bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (!crash_handler) 5388bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) crash_handler = CreateCrashHandlerHost("extension"); 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return crash_handler->GetDeathSignalSocket(); 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string process_type = 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line.GetSwitchValueASCII(switches::kProcessType); 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5458bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (process_type == switches::kRendererProcess) { 5468bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) static breakpad::CrashHandlerHostLinux* crash_handler = NULL; 5478bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (!crash_handler) 5488bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) crash_handler = CreateCrashHandlerHost(process_type); 5498bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return crash_handler->GetDeathSignalSocket(); 5508bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5528bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (process_type == switches::kPluginProcess) { 5538bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) static breakpad::CrashHandlerHostLinux* crash_handler = NULL; 5548bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (!crash_handler) 5558bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) crash_handler = CreateCrashHandlerHost(process_type); 5568bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return crash_handler->GetDeathSignalSocket(); 5578bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5598bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (process_type == switches::kPpapiPluginProcess) { 5608bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) static breakpad::CrashHandlerHostLinux* crash_handler = NULL; 5618bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (!crash_handler) 5628bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) crash_handler = CreateCrashHandlerHost(process_type); 5638bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return crash_handler->GetDeathSignalSocket(); 5648bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5668bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (process_type == switches::kGpuProcess) { 5678bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) static breakpad::CrashHandlerHostLinux* crash_handler = NULL; 5688bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (!crash_handler) 5698bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) crash_handler = CreateCrashHandlerHost(process_type); 5708bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return crash_handler->GetDeathSignalSocket(); 5718bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return -1; 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_POSIX) && !defined(OS_MACOSX) 576f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif // !defined(OS_ANDROID) 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 578c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if !defined(OS_CHROMEOS) 5792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)GURL GetEffectiveURLForSignin(const GURL& url) { 5802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHECK(SigninManager::IsWebBasedSigninFlowURL(url)); 5812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL effective_url(SigninManager::kChromeSigninEffectiveSite); 5832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Copy the path because the argument to SetPathStr must outlive 5842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the Replacements object. 5852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string path_copy(url.path()); 5862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL::Replacements replacements; 5872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) replacements.SetPathStr(path_copy); 5882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) effective_url = effective_url.ReplaceComponents(replacements); 5892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return effective_url; 5902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 591c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 592c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 593c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SetApplicationLocaleOnIOThread(const std::string& locale) { 594c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 595c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) g_io_thread_application_locale.Get() = locale; 596c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 597c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 59858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void HandleBlockedPopupOnUIThread(const BlockedWindowParams& params) { 59958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) WebContents* tab = tab_util::GetWebContentsByID(params.render_process_id(), 60058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) params.opener_id()); 601558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch if (!tab) 602558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch return; 603558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 6045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prerender::PrerenderContents* prerender_contents = 6055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prerender::PrerenderContents::FromWebContents(tab); 6065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (prerender_contents) { 6075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prerender_contents->Destroy(prerender::FINAL_STATUS_CREATE_NEW_WINDOW); 6085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return; 6095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 6105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 611558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch PopupBlockerTabHelper* popup_helper = 612558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch PopupBlockerTabHelper::FromWebContents(tab); 613558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch if (!popup_helper) 614558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch return; 61558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) popup_helper->AddBlockedPopup(params); 61658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 61758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 61858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(OS_ANDROID) 6198bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 62058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void HandleSingleTabModeBlockOnUIThread(const BlockedWindowParams& params) { 62158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) WebContents* web_contents = 62258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) tab_util::GetWebContentsByID(params.render_process_id(), 62358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) params.opener_id()); 62458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (!web_contents) 62558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return; 62658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 62758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) SingleTabModeTabHelper::FromWebContents(web_contents)->HandleOpenUrl(params); 628558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch} 6298bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 6300f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)float GetDeviceScaleAdjustment() { 6318bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) static const float kMinFSM = 1.05f; 6328bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) static const int kWidthForMinFSM = 320; 6338bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) static const float kMaxFSM = 1.3f; 6348bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) static const int kWidthForMaxFSM = 800; 6358bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 6368bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) gfx::DeviceDisplayInfo info; 6378bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) int minWidth = info.GetSmallestDIPWidth(); 6388bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 6398bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (minWidth <= kWidthForMinFSM) 6408bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return kMinFSM; 6418bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (minWidth >= kWidthForMaxFSM) 6428bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return kMaxFSM; 6438bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 6448bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // The font scale multiplier varies linearly between kMinFSM and kMaxFSM. 6458bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) float ratio = static_cast<float>(minWidth - kWidthForMinFSM) / 6468bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) (kWidthForMaxFSM - kWidthForMinFSM); 6478bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return ratio * (kMaxFSM - kMinFSM) + kMinFSM; 6488bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 6498bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 65058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif // defined(OS_ANDROID) 651558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chrome { 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 656cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)ChromeContentBrowserClient::ChromeContentBrowserClient() 657116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch : prerender_tracker_(NULL), 658116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch weak_factory_(this) { 659868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#if defined(ENABLE_PLUGINS) 6606d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) for (size_t i = 0; i < arraysize(kPredefinedAllowedDevChannelOrigins); ++i) 6616d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) allowed_dev_channel_origins_.insert(kPredefinedAllowedDevChannelOrigins[i]); 6620f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) for (size_t i = 0; i < arraysize(kPredefinedAllowedFileHandleOrigins); ++i) 6630f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) allowed_file_handle_origins_.insert(kPredefinedAllowedFileHandleOrigins[i]); 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < arraysize(kPredefinedAllowedSocketOrigins); ++i) 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed_socket_origins_.insert(kPredefinedAllowedSocketOrigins[i]); 666868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif 66790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 66890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) permissions_policy_delegate_.reset( 66990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) new extensions::BrowserPermissionsPolicyDelegate()); 670116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 671116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if !defined(OS_ANDROID) 672116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TtsExtensionEngine* tts_extension_engine = TtsExtensionEngine::GetInstance(); 673116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TtsController::GetInstance()->SetTtsEngineDelegate(tts_extension_engine); 674116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ChromeContentBrowserClient::~ChromeContentBrowserClient() { 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 6817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid ChromeContentBrowserClient::RegisterProfilePrefs( 682c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable* registry) { 683c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterBooleanPref( 684c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kDisable3DAPIs, 685c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 686c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 687c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterBooleanPref( 688c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kEnableHyperlinkAuditing, 689c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) true, 690c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 6916d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) registry->RegisterListPref( 6926d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) prefs::kEnableDeprecatedWebPlatformFeatures, 6936d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 694c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 695c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 696c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// static 697c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void ChromeContentBrowserClient::SetApplicationLocale( 698c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& locale) { 699c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 700c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 701c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // This object is guaranteed to outlive all threads so we don't have to 702c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // worry about the lack of refcounting and can just post as Unretained. 703c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // 704c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // The common case is that this function is called early in Chrome startup 705c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // before any threads are created (it will also be called later if the user 706c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // changes the pref). In this case, there will be no threads created and 707c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // posting will fail. When there are no threads, we can just set the string 708c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // without worrying about threadsafety. 709c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, 710c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Bind(&SetApplicationLocaleOnIOThread, locale))) { 711c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) g_io_thread_application_locale.Get() = locale; 712c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)content::BrowserMainParts* ChromeContentBrowserClient::CreateBrowserMainParts( 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::MainFunctionParams& parameters) { 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeBrowserMainParts* main_parts; 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Construct the Main browser parts based on the OS type. 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) main_parts = new ChromeBrowserMainPartsWin(parameters); 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX) 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) main_parts = new ChromeBrowserMainPartsMac(parameters); 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_CHROMEOS) 7242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) main_parts = new chromeos::ChromeBrowserMainPartsChromeos(parameters); 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_LINUX) 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) main_parts = new ChromeBrowserMainPartsLinux(parameters); 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_ANDROID) 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) main_parts = new ChromeBrowserMainPartsAndroid(parameters); 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_POSIX) 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) main_parts = new ChromeBrowserMainPartsPosix(parameters); 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) main_parts = new ChromeBrowserMainParts(parameters); 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 73690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) chrome::AddProfilesExtraParts(main_parts); 73790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Construct additional browser parts. Stages are called in the order in 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // which they are added. 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(TOOLKIT_VIEWS) 7417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch main_parts->AddParts(new ChromeBrowserMainExtraPartsViews()); 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_ASH) 7457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch main_parts->AddParts(new ChromeBrowserMainExtraPartsAsh()); 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_AURA) 7497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch main_parts->AddParts(new ChromeBrowserMainExtraPartsAura()); 7507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif 7517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 7527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(USE_X11) 7537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch main_parts->AddParts(new ChromeBrowserMainExtraPartsX11()); 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 756c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chrome::AddMetricsExtraParts(main_parts); 757c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return main_parts; 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string ChromeContentBrowserClient::GetStoragePartitionIdForSite( 7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserContext* browser_context, 7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& site) { 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string partition_id; 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The partition ID for webview guest processes is the string value of its 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // SiteInstance URL - "chrome-guest://app_id/persist?partition". 768a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (site.SchemeIs(content::kGuestScheme)) { 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) partition_id = site.spec(); 770a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } else if (site.GetOrigin().spec() == kChromeUIChromeSigninURL) { 771a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Chrome signin page has an embedded iframe of extension and web content, 772a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // thus it must be isolated from other webUI pages. 773a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) partition_id = site.GetOrigin().spec(); 774a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 776c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(IsValidStoragePartitionId(browser_context, partition_id)); 7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return partition_id; 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::IsValidStoragePartitionId( 7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserContext* browser_context, 7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& partition_id) { 7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The default ID is empty and is always valid. 7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (partition_id.empty()) 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GURL(partition_id).is_valid(); 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::GetStoragePartitionConfigForSite( 7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserContext* browser_context, 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& site, 7932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool can_be_default, 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string* partition_domain, 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string* partition_name, 7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool* in_memory) { 7972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Default to the browser-wide storage partition and override based on |site| 7982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // below. 7992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) partition_domain->clear(); 8002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) partition_name->clear(); 8012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *in_memory = false; 8022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 803f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool success = false; 804f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 805f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) success = WebViewGuest::GetGuestPartitionConfigForSite( 806f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) site, partition_domain, partition_name, in_memory); 807f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 808f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!success && site.SchemeIs(extensions::kExtensionScheme)) { 8092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If |can_be_default| is false, the caller is stating that the |site| 8102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // should be parsed as if it had isolated storage. In particular it is 8112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // important to NOT check ExtensionService for the is_storage_isolated() 8122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // attribute because this code path is run during Extension uninstall 8132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // to do cleanup after the Extension has already been unloaded from the 8142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // ExtensionService. 8152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_isolated = !can_be_default; 8162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (can_be_default) { 817effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (extensions::util::SiteHasIsolatedStorage(site, browser_context)) 818effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch is_isolated = true; 8192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (is_isolated) { 8222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHECK(site.has_host()); 8232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // For extensions with isolated storage, the the host of the |site| is 8242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the |partition_domain|. The |in_memory| and |partition_name| are only 8252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // used in guest schemes so they are cleared here. 8262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *partition_domain = site.host(); 8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *in_memory = false; 8282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) partition_name->clear(); 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 830f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) success = true; 831f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 832f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif 833f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 834f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (!success && (site.GetOrigin().spec() == kChromeUIChromeSigninURL)) { 8355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Chrome signin page has an embedded iframe of extension and web content, 8365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // thus it must be isolated from other webUI pages. 8375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *partition_domain = chrome::kChromeUIChromeSigninHost; 8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Assert that if |can_be_default| is false, the code above must have found a 8412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // non-default partition. If this fails, the caller has a serious logic 8422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // error about which StoragePartition they expect to be in and it is not 8432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // safe to continue. 8442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHECK(can_be_default || !partition_domain->empty()); 8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)content::WebContentsViewDelegate* 8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeContentBrowserClient::GetWebContentsViewDelegate( 8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WebContents* web_contents) { 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return chrome::CreateWebContentsViewDelegate(web_contents); 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void ChromeContentBrowserClient::RenderProcessWillLaunch( 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderProcessHost* host) { 8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int id = host->GetID(); 8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext(host->GetBrowserContext()); 8572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::URLRequestContextGetter* context = 8582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile->GetRequestContextForRenderProcess(id); 8592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 86046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) host->AddFilter(new ChromeRenderMessageFilter(id, profile)); 86146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 86246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) host->AddFilter(new ChromeExtensionMessageFilter(id, profile)); 8635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) host->AddFilter(new extensions::ExtensionMessageFilter(id, profile)); 86446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif 8652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(ENABLE_PLUGINS) 8664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) host->AddFilter(new PluginInfoMessageFilter(id, profile)); 8672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 8685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) host->AddFilter(new cast::CastTransportHostFilter); 8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(ENABLE_PRINTING) 8704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) host->AddFilter(new PrintingMessageFilter(id, profile)); 8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 8724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) host->AddFilter(new SearchProviderInstallStateMessageFilter(id, profile)); 873a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#if defined(ENABLE_SPELLCHECK) 8744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) host->AddFilter(new SpellCheckMessageFilter(id)); 875a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#endif 8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 8774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) host->AddFilter(new SpellCheckMessageFilterMac(id)); 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 8795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) host->AddFilter(new ChromeNetBenchmarkingMessageFilter(profile, context)); 8804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) host->AddFilter(new prerender::PrerenderMessageFilter(id, profile)); 8814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) host->AddFilter(new TtsMessageFilter(id, profile)); 882868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#if defined(ENABLE_WEBRTC) 8834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) WebRtcLoggingHandlerHost* webrtc_logging_handler_host = 8848bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) new WebRtcLoggingHandlerHost(profile); 8855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) host->SetWebRtcLogMessageCallback(base::Bind( 8865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &WebRtcLoggingHandlerHost::LogMessage, webrtc_logging_handler_host)); 8874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) host->AddFilter(webrtc_logging_handler_host); 8884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) host->SetUserData(host, new base::UserDataAdapter<WebRtcLoggingHandlerHost>( 8894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) webrtc_logging_handler_host)); 890868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif 8917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#if !defined(DISABLE_NACL) 892f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) host->AddFilter(new nacl::NaClHostMessageFilter( 893eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch id, profile->IsOffTheRecord(), 8948bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) profile->GetPath(), 895eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch context)); 8967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif 897d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#if defined(OS_ANDROID) 898010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) host->AddFilter(new cdm::CdmMessageFilterAndroid()); 899d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#endif 9005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (switches::IsNewProfileManagement()) 901a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) host->AddFilter(new PrincipalsMessageFilter(id)); 9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host->Send(new ChromeViewMsg_SetIsIncognitoProcess( 9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile->IsOffTheRecord())); 9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9066d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SendExtensionWebRequestStatusToHost(host); 9086d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#endif 9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RendererContentSettingRules rules; 911cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (host->IsIsolatedGuest()) { 912f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 9135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GuestViewBase::GetDefaultContentSettingRules(&rules, 9145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu profile->IsOffTheRecord()); 915f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#else 916f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) NOTREACHED(); 917f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif 918a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } else { 919a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) GetRendererContentSettingRules( 920a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) profile->GetHostContentSettingsMap(), &rules); 921a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host->Send(new ChromeViewMsg_SetContentSettingRules(rules)); 9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GURL ChromeContentBrowserClient::GetEffectiveURL( 9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserContext* browser_context, const GURL& url) { 9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext(browser_context); 9282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!profile) 9292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return url; 9302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 931a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // If the input |url| should be assigned to the Instant renderer, make its 932a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // effective URL distinct from other URLs on the search provider's domain. 933a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) if (chrome::ShouldAssignURLToInstantRenderer(url, profile)) 934a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return chrome::GetEffectiveURLForInstant(url, profile); 935a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 936c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if !defined(OS_CHROMEOS) 9372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If the input |url| should be assigned to the Signin renderer, make its 9382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // effective URL distinct from other URLs on the signin service's domain. 9392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Note that the signin renderer will be allowed to sign the user in to 9402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Chrome. 9412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (SigninManager::IsWebBasedSigninFlowURL(url)) 9422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GetEffectiveURLForSignin(url); 943c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 9442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If the input |url| is part of an installed app, the effective URL is an 9462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // extension URL with the ID of that extension as the host. This has the 9472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // effect of grouping apps together in a common SiteInstance. 9482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionService* extension_service = 9492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::ExtensionSystem::Get(profile)->extension_service(); 9502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!extension_service) 9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return url; 9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const Extension* extension = extension_service->extensions()-> 954ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GetHostedAppByURL(url); 9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!extension) 9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return url; 9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Bookmark apps do not use the hosted app process model, and should be 9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // treated as normal URLs. 9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (extension->from_bookmark()) 9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return url; 9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If the URL is part of an extension's web extent, convert it to an 9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // extension URL. 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return extension->GetResourceURL(url.path()); 9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::ShouldUseProcessPerSite( 9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserContext* browser_context, const GURL& effective_url) { 9702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Non-extension, non-Instant URLs should generally use 9712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // process-per-site-instance. Because we expect to use the effective URL, 9722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // URLs for hosted apps (apart from bookmark apps) should have an extension 9732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // scheme by now. 9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext(browser_context); 9762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!profile) 9772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 9782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 979a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch if (chrome::ShouldUseProcessPerSiteForInstantURL(effective_url, profile)) 9802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 9812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 982c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if !defined(OS_CHROMEOS) 9832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (SigninManager::IsWebBasedSigninFlowURL(effective_url)) 9842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 985c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 9862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!effective_url.SchemeIs(extensions::kExtensionScheme)) 9882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 9892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionService* extension_service = 9912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::ExtensionSystem::Get(profile)->extension_service(); 9922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!extension_service) 9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 995ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const Extension* extension = 996ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch extension_service->extensions()->GetExtensionOrAppByURL(effective_url); 9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!extension) 9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If the URL is part of a hosted app that does not have the background 10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // permission, or that does not allow JavaScript access to the background 10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // page, we want to give each instance its own process to improve 10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // responsiveness. 10042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (extension->GetType() == Manifest::TYPE_HOSTED_APP) { 100546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (!extension->permissions_data()->HasAPIPermission( 100646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) APIPermission::kBackground) || 10072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !extensions::BackgroundInfo::AllowJSAccess(extension)) { 10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Hosted apps that have script access to their background page must use 10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // process per site, since all instances can make synchronous calls to the 10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // background window. Other extensions should use process per site as well. 10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// These are treated as WebUI schemes but do not get WebUI bindings. Also, 10195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// view-source is allowed for these schemes. 1020c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void ChromeContentBrowserClient::GetAdditionalWebUISchemes( 1021c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<std::string>* additional_schemes) { 1022c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) additional_schemes->push_back(chrome::kChromeSearchScheme); 10235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) additional_schemes->push_back(chrome::kDomDistillerScheme); 10242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 10252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1026a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void ChromeContentBrowserClient::GetAdditionalWebUIHostsToIgnoreParititionCheck( 1027a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) std::vector<std::string>* hosts) { 1028a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) hosts->push_back(chrome::kChromeUIExtensionIconHost); 1029a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) hosts->push_back(chrome::kChromeUIFaviconHost); 1030a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) hosts->push_back(chrome::kChromeUIThemeHost); 1031a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) hosts->push_back(chrome::kChromeUIThumbnailHost); 1032a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) hosts->push_back(chrome::kChromeUIThumbnailHost2); 1033a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) hosts->push_back(chrome::kChromeUIThumbnailListHost); 1034a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 1035a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 10362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)net::URLRequestContextGetter* 10372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ChromeContentBrowserClient::CreateRequestContext( 10382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::BrowserContext* browser_context, 1039a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) content::ProtocolHandlerMap* protocol_handlers, 1040cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::URLRequestInterceptorScopedVector request_interceptors) { 10412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile* profile = Profile::FromBrowserContext(browser_context); 1042a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return profile->CreateRequestContext(protocol_handlers, 1043cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) request_interceptors.Pass()); 10442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 10452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)net::URLRequestContextGetter* 10472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ChromeContentBrowserClient::CreateRequestContextForStoragePartition( 10482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::BrowserContext* browser_context, 10492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& partition_path, 10502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool in_memory, 1051a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) content::ProtocolHandlerMap* protocol_handlers, 1052cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::URLRequestInterceptorScopedVector request_interceptors) { 10532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile* profile = Profile::FromBrowserContext(browser_context); 10542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return profile->CreateRequestContextForStoragePartition( 1055a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) partition_path, 1056a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) in_memory, 1057a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) protocol_handlers, 1058cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) request_interceptors.Pass()); 10592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 10602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::IsHandledURL(const GURL& url) { 10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ProfileIOData::IsHandledURL(url); 10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1065a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)bool ChromeContentBrowserClient::CanCommitURL( 1066a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) content::RenderProcessHost* process_host, 1067a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const GURL& url) { 1068a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // We need to let most extension URLs commit in any process, since this can 1069a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // be allowed due to web_accessible_resources. Most hosted app URLs may also 1070a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // load in any process (e.g., in an iframe). However, the Chrome Web Store 1071a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // cannot be loaded in iframes and should never be requested outside its 1072a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // process. 1073a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) Profile* profile = 1074a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) Profile::FromBrowserContext(process_host->GetBrowserContext()); 1075a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) ExtensionService* service = 1076a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) extensions::ExtensionSystem::Get(profile)->extension_service(); 1077a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (!service) 1078a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) return true; 1079a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const Extension* new_extension = 1080ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch service->extensions()->GetExtensionOrAppByURL(url); 1081a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (new_extension && 1082a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) new_extension->is_hosted_app() && 1083a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) new_extension->id() == extension_misc::kWebStoreAppId && 10845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) !extensions::ProcessMap::Get(profile)-> 10855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Contains(new_extension->id(), process_host->GetID())) { 1086a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) return false; 1087a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) } 1088a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 1089a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) return true; 1090a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)} 1091a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 109258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)bool ChromeContentBrowserClient::ShouldAllowOpenURL( 109358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) content::SiteInstance* site_instance, const GURL& url) { 109458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) GURL from_url = site_instance->GetSiteURL(); 109558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Do not allow pages from the web or other extensions navigate to 109658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // non-web-accessible extension resources. 109758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (url.SchemeIs(extensions::kExtensionScheme) && 109858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) (from_url.SchemeIsHTTPOrHTTPS() || 109958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) from_url.SchemeIs(extensions::kExtensionScheme))) { 110058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 110158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) site_instance->GetProcess()->GetBrowserContext()); 110258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ExtensionService* service = 110358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) extensions::ExtensionSystem::Get(profile)->extension_service(); 110458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (!service) 110558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return true; 110658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const Extension* extension = 110758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) service->extensions()->GetExtensionOrAppByURL(url); 110858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (!extension) 110958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return true; 111058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const Extension* from_extension = 111158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) service->extensions()->GetExtensionOrAppByURL( 111258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) site_instance->GetSiteURL()); 111358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (from_extension && from_extension->id() == extension->id()) 111458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return true; 111558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 111658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (!extensions::WebAccessibleResourcesInfo::IsResourceWebAccessible( 111758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) extension, url.path())) 111858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return false; 111958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 11205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 11215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Do not allow chrome://chrome-signin navigate to other chrome:// URLs, since 11225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // the signin page may host untrusted web content. 11235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (from_url.GetOrigin().spec() == chrome::kChromeUIChromeSigninURL && 11245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu url.SchemeIs(content::kChromeUIScheme) && 11255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu url.host() != chrome::kChromeUIChromeSigninHost) { 11265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu VLOG(1) << "Blocked navigation to " << url.spec() << " from " 11275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu << chrome::kChromeUIChromeSigninURL; 11285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return false; 11295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 11305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 113158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return true; 113258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 113358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 11345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::IsSuitableHost( 11355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderProcessHost* process_host, 11365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& site_url) { 11375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = 11385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile::FromBrowserContext(process_host->GetBrowserContext()); 11392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This may be NULL during tests. In that case, just assume any site can 11402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // share any host. 11412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!profile) 11422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 11432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Instant URLs should only be in the instant process and instant process 1145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // should only have Instant URLs. 11462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InstantService* instant_service = 11472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InstantServiceFactory::GetForProfile(profile); 1148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (instant_service) { 1149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool is_instant_process = instant_service->IsInstantProcess( 1150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) process_host->GetID()); 1151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool should_be_in_instant_process = 1152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chrome::ShouldAssignURLToInstantRenderer(site_url, profile); 1153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (is_instant_process || should_be_in_instant_process) 1154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return is_instant_process && should_be_in_instant_process; 1155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 11562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if !defined(OS_CHROMEOS) 1158cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) SigninClient* signin_client = 1159effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ChromeSigninClientFactory::GetForProfile(profile); 1160effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (signin_client && signin_client->IsSigninProcess(process_host->GetID())) 11612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return SigninManager::IsWebBasedSigninFlowURL(site_url); 1162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 11632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionService* service = 11652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::ExtensionSystem::Get(profile)->extension_service(); 11665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::ProcessMap* process_map = extensions::ProcessMap::Get(profile); 11675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // These may be NULL during tests. In that case, just assume any site can 11695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // share any host. 11705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!service || !process_map) 11715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 11725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Otherwise, just make sure the process privilege matches the privilege 11745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // required by the site. 11755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderProcessHostPrivilege privilege_required = 11765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetPrivilegeRequiredByUrl(site_url, service); 11775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetProcessPrivilege(process_host, process_map, service) == 11785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) privilege_required; 11795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1181cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool ChromeContentBrowserClient::MayReuseHost( 1182cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::RenderProcessHost* process_host) { 1183cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // If there is currently a prerender in progress for the host provided, 1184cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // it may not be shared. We require prerenders to be by themselves in a 1185cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // separate process, so that we can monitor their resource usage, and so that 1186cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // we can track the cookies that they change. 1187cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 1188cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) process_host->GetBrowserContext()); 1189cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) prerender::PrerenderManager* prerender_manager = 1190cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) prerender::PrerenderManagerFactory::GetForProfile(profile); 1191cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (prerender_manager && 1192cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) !prerender_manager->MayReuseProcessHost(process_host)) { 1193cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return false; 1194cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 1195cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1196cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return true; 1197cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 1198cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 11995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This function is trying to limit the amount of processes used by extensions 12005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// with background pages. It uses a globally set percentage of processes to 12015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// run such extensions and if the limit is exceeded, it returns true, to 12025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// indicate to the content module to group extensions together. 12035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::ShouldTryToUseExistingProcessHost( 12045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserContext* browser_context, const GURL& url) { 12055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // It has to be a valid URL for us to check for an extension. 12065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!url.is_valid()) 12075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 12085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext(browser_context); 12102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionService* service = !profile ? NULL : 12112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::ExtensionSystem::Get(profile)->extension_service(); 12125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!service) 12135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 12145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We have to have a valid extension with background page to proceed. 12165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* extension = 1217ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch service->extensions()->GetExtensionOrAppByURL(url); 12185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!extension) 12195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 12202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!extensions::BackgroundInfo::HasBackgroundPage(extension)) 12215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 12225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<int> process_ids; 12245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t max_process_count = 12255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderProcessHost::GetMaxRendererProcessCount(); 12265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Go through all profiles to ensure we have total count of extension 12285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // processes containing background pages, otherwise one profile can 12295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // starve the other. 12305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<Profile*> profiles = g_browser_process->profile_manager()-> 12315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetLoadedProfiles(); 12325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < profiles.size(); ++i) { 1233f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) extensions::ProcessManager* epm = 12345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::ExtensionSystem::Get(profiles[i])->process_manager(); 1235f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) for (extensions::ProcessManager::const_iterator iter = 12365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) epm->background_hosts().begin(); 12375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iter != epm->background_hosts().end(); ++iter) { 12385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const extensions::ExtensionHost* host = *iter; 12395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) process_ids.insert(host->render_process_host()->GetID()); 12405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (process_ids.size() > 12445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (max_process_count * chrome::kMaxShareOfExtensionProcesses)) { 12455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 12465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 12495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::SiteInstanceGotProcess( 12525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SiteInstance* site_instance) { 12535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(site_instance->HasProcess()); 12545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 12565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) site_instance->GetBrowserContext()); 12572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!profile) 12582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 12592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Remember the ID of the Instant process to signal the renderer process 12612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // on startup in |AppendExtraCommandLineSwitches| below. 1262c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (chrome::ShouldAssignURLToInstantRenderer( 12632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) site_instance->GetSiteURL(), profile)) { 12642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InstantService* instant_service = 12652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InstantServiceFactory::GetForProfile(profile); 12662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (instant_service) 12672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) instant_service->AddInstantProcess(site_instance->GetProcess()->GetID()); 12682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 12692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1270c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if !defined(OS_CHROMEOS) 12712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // We only expect there to be one signin process as we use process-per-site 12722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // for signin URLs. The signin process will be cleared from SigninManager 12732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // when the renderer is destroyed. 12742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (SigninManager::IsWebBasedSigninFlowURL(site_instance->GetSiteURL())) { 1275cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) SigninClient* signin_client = 1276effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ChromeSigninClientFactory::GetForProfile(profile); 1277effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (signin_client) 1278effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch signin_client->SetSigninProcess(site_instance->GetProcess()->GetID()); 127990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) BrowserThread::PostTask( 1280f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) BrowserThread::IO, 1281f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FROM_HERE, 1282f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Bind(&InfoMap::SetSigninProcess, 128390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) extensions::ExtensionSystem::Get(profile)->info_map(), 128490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) site_instance->GetProcess()->GetID())); 12852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1286c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 12872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionService* service = 12892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::ExtensionSystem::Get(profile)->extension_service(); 12905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!service) 12915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 12925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1293ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const Extension* extension = service->extensions()->GetExtensionOrAppByURL( 1294ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch site_instance->GetSiteURL()); 12955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!extension) 12965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 12975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::ProcessMap::Get(profile) 12995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ->Insert(extension->id(), 13005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) site_instance->GetProcess()->GetID(), 13015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) site_instance->GetId()); 13025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 13035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 1304f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) BrowserThread::IO, 1305f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FROM_HERE, 1306f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Bind(&InfoMap::RegisterExtensionProcess, 13075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::ExtensionSystem::Get(profile)->info_map(), 13085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension->id(), 13095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) site_instance->GetProcess()->GetID(), 13105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) site_instance->GetId())); 13115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::SiteInstanceDeleting( 13145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SiteInstance* site_instance) { 13155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!site_instance->HasProcess()) 13165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 13175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 13195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) site_instance->GetBrowserContext()); 13202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionService* service = 13212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::ExtensionSystem::Get(profile)->extension_service(); 13225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!service) 13235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 13245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1325ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const Extension* extension = service->extensions()->GetExtensionOrAppByURL( 1326ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch site_instance->GetSiteURL()); 13275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!extension) 13285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 13295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::ProcessMap::Get(profile) 13315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ->Remove(extension->id(), 13325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) site_instance->GetProcess()->GetID(), 13335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) site_instance->GetId()); 13345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 13355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 1336f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) BrowserThread::IO, 1337f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FROM_HERE, 1338f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Bind(&InfoMap::UnregisterExtensionProcess, 13395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::ExtensionSystem::Get(profile)->info_map(), 13405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension->id(), 13415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) site_instance->GetProcess()->GetID(), 13425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) site_instance->GetId())); 13435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void ChromeContentBrowserClient::WorkerProcessCreated( 13465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SiteInstance* site_instance, 13475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int worker_process_id) { 13485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::ExtensionRegistry* extension_registry = 13495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::ExtensionRegistry::Get(site_instance->GetBrowserContext()); 13505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!extension_registry) 13515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return; 13525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const Extension* extension = 13535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extension_registry->enabled_extensions().GetExtensionOrAppByURL( 13545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) site_instance->GetSiteURL()); 13555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!extension) 13565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return; 13575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::ExtensionSystem* extension_system = 13585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::ExtensionSystem::Get(site_instance->GetBrowserContext()); 13595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extension_system->info_map()->RegisterExtensionWorkerProcess( 13605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extension->id(), 13615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) worker_process_id, 13625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) site_instance->GetId()); 13635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 13645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 13655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void ChromeContentBrowserClient::WorkerProcessTerminated( 13665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SiteInstance* site_instance, 13675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int worker_process_id) { 13685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::ExtensionSystem* extension_system = 13695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::ExtensionSystem::Get(site_instance->GetBrowserContext()); 13705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extension_system->info_map()->UnregisterExtensionWorkerProcess( 13715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) worker_process_id); 13725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 13735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1374f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool ChromeContentBrowserClient::ShouldSwapBrowsingInstancesForNavigation( 13752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SiteInstance* site_instance, 13765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& current_url, 13775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& new_url) { 1378a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // If we don't have an ExtensionService, then rely on the SiteInstance logic 1379a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // in RenderFrameHostManager to decide when to swap. 13802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile* profile = 13812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile::FromBrowserContext(site_instance->GetBrowserContext()); 13822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionService* service = 13832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::ExtensionSystem::Get(profile)->extension_service(); 13842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!service) 13852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 13862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1387a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // We must use a new BrowsingInstance (forcing a process swap and disabling 1388a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // scripting by existing tabs) if one of the URLs is an extension and the 1389a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // other is not the exact same extension. 1390a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // 1391a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // We ignore hosted apps here so that other tabs in their BrowsingInstance can 1392a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // use postMessage with them. (The exception is the Chrome Web Store, which 1393a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // is a hosted app that requires its own BrowsingInstance.) Navigations 1394a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // to/from a hosted app will still trigger a SiteInstance swap in 1395a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // RenderFrameHostManager. 1396a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const Extension* current_extension = 1397a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) service->extensions()->GetExtensionOrAppByURL(current_url); 1398a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (current_extension && 1399a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) current_extension->is_hosted_app() && 1400a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) current_extension->id() != extension_misc::kWebStoreAppId) 1401a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) current_extension = NULL; 1402a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 14032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const Extension* new_extension = 1404ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch service->extensions()->GetExtensionOrAppByURL(new_url); 14052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (new_extension && 14062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new_extension->is_hosted_app() && 14072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new_extension->id() != extension_misc::kWebStoreAppId) 14082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new_extension = NULL; 1409a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 1410a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // First do a process check. We should force a BrowsingInstance swap if the 1411a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // current process doesn't know about new_extension, even if current_extension 1412a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // is somehow the same as new_extension. 14135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::ProcessMap* process_map = extensions::ProcessMap::Get(profile); 14142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (new_extension && 14152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) site_instance->HasProcess() && 14165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) !process_map->Contains( 14175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) new_extension->id(), site_instance->GetProcess()->GetID())) 14182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 14192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1420a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Otherwise, swap BrowsingInstances if current_extension and new_extension 1421a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // differ. 1422a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return current_extension != new_extension; 14235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::ShouldSwapProcessesForRedirect( 14265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ResourceContext* resource_context, const GURL& current_url, 14275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& new_url) { 1428116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(ENABLE_EXTENSIONS) 14295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileIOData* io_data = ProfileIOData::FromResourceContext(resource_context); 14305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return extensions::CrossesExtensionProcessBoundary( 14315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) io_data->GetExtensionInfoMap()->extensions(), 1432ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch current_url, new_url, false); 1433116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 1434116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return false; 1435116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 14365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochbool ChromeContentBrowserClient::ShouldAssignSiteForURL(const GURL& url) { 14397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return !url.SchemeIs(chrome::kChromeNativeScheme); 14407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 14417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 14425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string ChromeContentBrowserClient::GetCanonicalEncodingNameByAliasName( 14435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& alias_name) { 14445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return CharacterEncoding::GetCanonicalEncodingNameByAliasName(alias_name); 14455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1447f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)namespace { 1448f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 1449f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)bool IsAutoReloadEnabled() { 1450f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string group = base::FieldTrialList::FindFullName( 1451f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "AutoReloadExperiment"); 1452f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const CommandLine& browser_command_line = *CommandLine::ForCurrentProcess(); 1453f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (browser_command_line.HasSwitch(switches::kEnableOfflineAutoReload)) 1454f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return true; 1455f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (browser_command_line.HasSwitch(switches::kDisableOfflineAutoReload)) 1456f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return false; 1457f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#if !defined(OS_ANDROID) && !defined(OS_IOS) 1458f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel(); 1459f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) chrome::VersionInfo::Channel kForceChannel = 1460f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) chrome::VersionInfo::CHANNEL_CANARY; 1461f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return (channel <= kForceChannel || group == "Enabled"); 1462f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#else 1463f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return group == "Enabled"; 1464f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif 1465f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 1466f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 1467f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)bool IsAutoReloadVisibleOnlyEnabled() { 1468f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string group = base::FieldTrialList::FindFullName( 1469f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "AutoReloadVisibleOnlyExperiment"); 1470f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const CommandLine& browser_command_line = *CommandLine::ForCurrentProcess(); 1471f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (browser_command_line.HasSwitch( 1472f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) switches::kEnableOfflineAutoReloadVisibleOnly)) { 1473f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return true; 1474f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 1475f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (browser_command_line.HasSwitch( 1476f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) switches::kDisableOfflineAutoReloadVisibleOnly)) { 1477f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return false; 1478f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 1479f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return group == "Enabled"; 1480f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 1481f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 1482f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} // namespace 1483f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 14845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::AppendExtraCommandLineSwitches( 14855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine* command_line, int child_process_id) { 14864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(OS_POSIX) 14878bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (breakpad::IsCrashReporterEnabled()) { 14884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) std::string enable_crash_reporter; 1489116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch GoogleUpdateSettings::LoadMetricsClientId(&enable_crash_reporter); 14905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitchASCII(switches::kEnableCrashReporter, 1491cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) enable_crash_reporter); 14925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1493cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif // defined(OS_POSIX) 14945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (logging::DialogsAreSuppressed()) 14965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitch(switches::kNoErrorDialogs); 14975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string process_type = 14995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->GetSwitchValueASCII(switches::kProcessType); 15005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const CommandLine& browser_command_line = *CommandLine::ForCurrentProcess(); 15012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 150258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) static const char* const kCommonSwitchNames[] = { 1503a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) switches::kUserAgent, 150458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches::kUserDataDir, // Make logs go to the right file. 150558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) }; 150658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) command_line->CopySwitchesFrom(browser_command_line, kCommonSwitchNames, 150758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) arraysize(kCommonSwitchNames)); 15082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1509a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(ENABLE_IPC_FUZZER) 1510a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) static const char* const kIpcFuzzerSwitches[] = { 1511a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) switches::kIpcFuzzerTestcase, 1512a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) }; 1513a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) command_line->CopySwitchesFrom(browser_command_line, kIpcFuzzerSwitches, 1514a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) arraysize(kIpcFuzzerSwitches)); 1515a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif 1516a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 1517cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#if defined(OS_CHROMEOS) 1518cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // On Chrome OS need to pass primary user homedir (in multi-profiles session). 1519cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::FilePath homedir; 1520cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PathService::Get(base::DIR_HOME, &homedir); 1521cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) command_line->AppendSwitchASCII(chromeos::switches::kHomedir, 1522cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) homedir.value().c_str()); 1523cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif 1524cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 15255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (process_type == switches::kRendererProcess) { 15265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 15275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& login_profile = 1528c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) browser_command_line.GetSwitchValueASCII( 1529c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chromeos::switches::kLoginProfile); 15305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!login_profile.empty()) 1531c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) command_line->AppendSwitchASCII( 1532c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chromeos::switches::kLoginProfile, login_profile); 15335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 15345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15350f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#if defined(ENABLE_WEBRTC) 1536a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) MaybeCopyDisableWebRtcEncryptionSwitch(command_line, 1537a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) browser_command_line, 1538a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) VersionInfo::GetChannel()); 15390f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#endif 15400f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 15415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderProcessHost* process = 15425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderProcessHost::FromID(child_process_id); 15435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (process) { 15445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 15455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) process->GetBrowserContext()); 15465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 15475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (extensions::ProcessMap::Get(profile)->Contains(process->GetID())) 15485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) command_line->AppendSwitch(extensions::switches::kExtensionProcess); 15495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefService* prefs = profile->GetPrefs(); 15515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Currently this pref is only registered if applied via a policy. 15525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (prefs->HasPrefPath(prefs::kDisable3DAPIs) && 15535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kDisable3DAPIs)) { 15545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Turn this policy into a command line switch. 15555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitch(switches::kDisable3DAPIs); 15565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15586d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const base::ListValue* switches = 15596d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) prefs->GetList(prefs::kEnableDeprecatedWebPlatformFeatures); 15606d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) if (switches) { 15616d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Enable any deprecated features that have been re-enabled by policy. 15626d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) for (base::ListValue::const_iterator it = switches->begin(); 15636d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) it != switches->end(); ++it) { 15646d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) std::string switch_to_enable; 15656d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) if ((*it)->GetAsString(&switch_to_enable)) 15666d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) command_line->AppendSwitch(switch_to_enable); 15676d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) } 15686d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) } 15696d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 15705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Disable client-side phishing detection in the renderer if it is 15715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // disabled in the Profile preferences or the browser process. 15725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!prefs->GetBoolean(prefs::kSafeBrowsingEnabled) || 15735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !g_browser_process->safe_browsing_detection_service()) { 15745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitch( 15755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kDisableClientSidePhishingDetection); 15765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!prefs->GetBoolean(prefs::kPrintPreviewDisabled)) 15795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitch(switches::kRendererPrintPreview); 15802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InstantService* instant_service = 15822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InstantServiceFactory::GetForProfile(profile); 15832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (instant_service && 15842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) instant_service->IsInstantProcess(process->GetID())) 15852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) command_line->AppendSwitch(switches::kInstantProcess); 15862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1587c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if !defined(OS_CHROMEOS) 1588cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) SigninClient* signin_client = 1589effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ChromeSigninClientFactory::GetForProfile(profile); 1590effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (signin_client && signin_client->IsSigninProcess(process->GetID())) 15912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) command_line->AppendSwitch(switches::kSigninProcess); 1592c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 15935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1595f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (IsAutoReloadEnabled()) 1596f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) command_line->AppendSwitch(switches::kEnableOfflineAutoReload); 1597f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (IsAutoReloadVisibleOnlyEnabled()) { 1598f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) command_line->AppendSwitch( 1599f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) switches::kEnableOfflineAutoReloadVisibleOnly); 1600010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 1601010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 1602010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) { 1603010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Enable load stale cache if this session is in the field trial, one 1604010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // of the forced on channels, or the user explicitly enabled it. 1605010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Note that as far as the renderer is concerned, the feature is 1606010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // enabled if-and-only-if the kEnableOfflineLoadStaleCache flag 1607010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // is on the command line; the yes/no/default behavior is only 1608010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // at the browser command line level. 1609010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 1610010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Command line switches override 1611010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (browser_command_line.HasSwitch( 1612010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) switches::kEnableOfflineLoadStaleCache)) { 1613010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) command_line->AppendSwitch(switches::kEnableOfflineLoadStaleCache); 1614010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } else if (!browser_command_line.HasSwitch( 1615010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) switches::kDisableOfflineLoadStaleCache)) { 1616010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) std::string group = 1617010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::FieldTrialList::FindFullName("LoadStaleCacheExperiment"); 1618010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) chrome::VersionInfo::Channel channel = 1619010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) chrome::VersionInfo::GetChannel(); 1620010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#if defined(OS_ANDROID) || defined(OS_IOS) 1621116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch chrome::VersionInfo::Channel force_channel = 1622010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) chrome::VersionInfo::CHANNEL_DEV; 1623010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#else 1624116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch chrome::VersionInfo::Channel force_channel = 1625010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) chrome::VersionInfo::CHANNEL_CANARY; 1626010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 1627010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 1628116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (channel <= force_channel || group == "Enabled") 1629010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) command_line->AppendSwitch(switches::kEnableOfflineLoadStaleCache); 1630effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 1631effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 1632effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 16335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Please keep this in alphabetical order. 16345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const char* const kSwitchNames[] = { 16355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) autofill::switches::kDisableIgnoreAutocompleteOff, 16364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) autofill::switches::kDisablePasswordGeneration, 16374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) autofill::switches::kEnablePasswordGeneration, 16385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) autofill::switches::kLocalHeuristicsOnlyForPasswordGeneration, 1639f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) extensions::switches::kAllowHTTPBackgroundPage, 1640ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch extensions::switches::kAllowLegacyExtensionManifests, 1641116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extensions::switches::kEnableEmbeddedExtensionOptions, 1642a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) extensions::switches::kEnableExperimentalExtensionApis, 1643cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) extensions::switches::kEnableScriptsRequireAction, 1644ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch extensions::switches::kExtensionsOnChromeURLs, 1645e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch extensions::switches::kWhitelistedExtensionID, 16467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // TODO(victorhsieh): remove the following flag once we move PPAPI FileIO 16477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // to browser. 16487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) switches::kAllowNaClFileHandleAPI, 16495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kAppsCheckoutURL, 16505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kAppsGalleryURL, 16510529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch switches::kCloudPrintURL, 16520529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch switches::kCloudPrintXmppEndpoint, 16535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kDisableBundledPpapiFlash, 16543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) switches::kDisablePnacl, 16555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kDisableScriptedPrintThrottling, 1656116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch switches::kEnableAppView, 1657eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch switches::kEnableAppWindowControls, 16585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kEnableBenchmarking, 16595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kEnableNaCl, 1660116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if !defined(DISABLE_NACL) 1661a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) switches::kEnableNaClDebug, 1662a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) switches::kEnableNaClNonSfiMode, 1663116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 16642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switches::kEnableNetBenchmarking, 1665f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) switches::kEnableShowModalDialog, 16665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) switches::kEnableStreamlinedHostedApps, 16675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kEnableWatchdog, 1668010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) switches::kEnableWebBasedSignin, 16695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kMessageLoopHistogrammer, 1670f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) switches::kOutOfProcessPdf, 16715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kPlaybackMode, 16725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kPpapiFlashArgs, 16735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kPpapiFlashPath, 16745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kPpapiFlashVersion, 16755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kProfilingAtStart, 16765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kProfilingFile, 16775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kProfilingFlush, 16785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kRecordMode, 16794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) translate::switches::kTranslateSecurityOrigin, 16805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 16815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->CopySwitchesFrom(browser_command_line, kSwitchNames, 16835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arraysize(kSwitchNames)); 16845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (process_type == switches::kUtilityProcess) { 16855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const char* const kSwitchNames[] = { 1686f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) extensions::switches::kAllowHTTPBackgroundPage, 1687a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) extensions::switches::kEnableExperimentalExtensionApis, 1688ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch extensions::switches::kExtensionsOnChromeURLs, 1689e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch extensions::switches::kWhitelistedExtensionID, 16905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 16915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->CopySwitchesFrom(browser_command_line, kSwitchNames, 16935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arraysize(kSwitchNames)); 16945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (process_type == switches::kPluginProcess) { 1695c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_CHROMEOS) 16966d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) static const char* const kSwitchNames[] = { 1697c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chromeos::switches::kLoginProfile, 16985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 16995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->CopySwitchesFrom(browser_command_line, kSwitchNames, 17015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arraysize(kSwitchNames)); 17026d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#endif 17035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (process_type == switches::kZygoteProcess) { 17045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const char* const kSwitchNames[] = { 17055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Load (in-process) Pepper plugins in-process in the zygote pre-sandbox. 17065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kDisableBundledPpapiFlash, 1707116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if !defined(DISABLE_NACL) 1708cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) switches::kEnableNaClNonSfiMode, 1709a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch switches::kNaClDangerousNoSandboxNonSfi, 1710116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 17115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kPpapiFlashPath, 17125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kPpapiFlashVersion, 17135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 17145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->CopySwitchesFrom(browser_command_line, kSwitchNames, 17165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arraysize(kSwitchNames)); 17175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (process_type == switches::kGpuProcess) { 17185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If --ignore-gpu-blacklist is passed in, don't send in crash reports 17195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // because GPU is expected to be unreliable. 17205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (browser_command_line.HasSwitch(switches::kIgnoreGpuBlacklist) && 17215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !command_line->HasSwitch(switches::kDisableBreakpad)) 17225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitch(switches::kDisableBreakpad); 17235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The command line switch kEnableBenchmarking needs to be specified along 17265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // with the kEnableStatsTable switch to ensure that the stats table global 17275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is initialized correctly. 17285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (command_line->HasSwitch(switches::kEnableBenchmarking)) 17295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(command_line->HasSwitch(switches::kEnableStatsTable)); 17305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string ChromeContentBrowserClient::GetApplicationLocale() { 17335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (BrowserThread::CurrentlyOn(BrowserThread::IO)) 1734c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return g_io_thread_application_locale.Get(); 17355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return g_browser_process->GetApplicationLocale(); 17365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string ChromeContentBrowserClient::GetAcceptLangs( 17395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserContext* context) { 17405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext(context); 17415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return profile->GetPrefs()->GetString(prefs::kAcceptLanguages); 17425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1744f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)const gfx::ImageSkia* ChromeContentBrowserClient::GetDefaultFavicon() { 17455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResourceBundle& rb = ResourceBundle::GetSharedInstance(); 1746f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return rb.GetNativeImageNamed(IDR_DEFAULT_FAVICON).ToImageSkia(); 17475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::AllowAppCache( 17505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& manifest_url, 17515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& first_party, 17525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ResourceContext* context) { 17535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 17545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); 17555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return io_data->GetCookieSettings()-> 17565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IsSettingCookieAllowed(manifest_url, first_party); 17575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::AllowGetCookie( 17605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 17615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& first_party, 17625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const net::CookieList& cookie_list, 17635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ResourceContext* context, 17645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_process_id, 17655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int render_frame_id) { 17665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 17675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); 17685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool allow = io_data->GetCookieSettings()-> 17695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IsReadingCookieAllowed(url, first_party); 17705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 17725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 17735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&TabSpecificContentSettings::CookiesRead, render_process_id, 177423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) render_frame_id, url, first_party, cookie_list, !allow, true)); 17755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return allow; 17765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::AllowSetCookie( 17795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 17805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& first_party, 17815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& cookie_line, 17825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ResourceContext* context, 17835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_process_id, 17845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int render_frame_id, 17855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::CookieOptions* options) { 17865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 17875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); 17885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieSettings* cookie_settings = io_data->GetCookieSettings(); 17895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool allow = cookie_settings->IsSettingCookieAllowed(url, first_party); 17905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1791cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (prerender_tracker_) { 1792cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) prerender_tracker_->OnCookieChangedForURL( 1793cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) render_process_id, 1794cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) context->GetRequestContext()->cookie_store()->GetCookieMonster(), 1795cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) url); 1796cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 1797cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 17985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 17995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 18005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&TabSpecificContentSettings::CookieChanged, render_process_id, 18015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) render_frame_id, url, first_party, cookie_line, *options, 18025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !allow)); 18035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return allow; 18045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 18055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::AllowSaveLocalState( 18075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ResourceContext* context) { 18085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 18095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); 18105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieSettings* cookie_settings = io_data->GetCookieSettings(); 18115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSetting setting = cookie_settings->GetDefaultCookieSetting(NULL); 18125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(bauerb): Should we also disallow local state if the default is BLOCK? 18145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Could we even support per-origin settings? 18155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return setting != CONTENT_SETTING_SESSION_ONLY; 18165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 18175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::AllowWorkerDatabase( 18195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 1820a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& name, 1821a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& display_name, 18225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned long estimated_size, 18235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ResourceContext* context, 18245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::vector<std::pair<int, int> >& render_frames) { 18255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 18265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); 18275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieSettings* cookie_settings = io_data->GetCookieSettings(); 18285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool allow = cookie_settings->IsSettingCookieAllowed(url, url); 18295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Record access to database for potential display in UI. 18315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::pair<int, int> >::const_iterator i; 18325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (i = render_frames.begin(); i != render_frames.end(); ++i) { 18335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 18345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 18355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&TabSpecificContentSettings::WebDatabaseAccessed, 18365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i->first, i->second, url, name, display_name, !allow)); 18375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return allow; 18405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 18415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1842116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid ChromeContentBrowserClient::AllowWorkerFileSystem( 18435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 18445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ResourceContext* context, 1845116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::vector<std::pair<int, int> >& render_frames, 1846116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Callback<void(bool)> callback) { 18475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 18485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); 18495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieSettings* cookie_settings = io_data->GetCookieSettings(); 18505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool allow = cookie_settings->IsSettingCookieAllowed(url, url); 18515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1852116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(ENABLE_EXTENSIONS) 1853116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch GuestPermissionRequestHelper(url, render_frames, callback, allow); 1854116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 1855116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch FileSystemAccessed(url, render_frames, callback, allow); 1856116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1857116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 1858116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1859116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(ENABLE_EXTENSIONS) 1860116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid ChromeContentBrowserClient::GuestPermissionRequestHelper( 1861116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const GURL& url, 1862116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::vector<std::pair<int, int> >& render_frames, 1863116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Callback<void(bool)> callback, 1864116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool allow) { 1865116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DCHECK(BrowserThread:: CurrentlyOn(BrowserThread::IO)); 1866116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::vector<std::pair<int, int> >::const_iterator i; 1867116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::map<int, int> process_map; 1868116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::map<int, int>::const_iterator it; 1869116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool has_web_view_guest = false; 1870116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Record access to file system for potential display in UI. 1871116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch for (i = render_frames.begin(); i != render_frames.end(); ++i) { 1872116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (process_map.find(i->first) != process_map.end()) 1873116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch continue; 1874116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1875116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch process_map.insert(std::pair<int, int>(i->first, i->second)); 1876116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1877116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (WebViewRendererState::GetInstance()->IsGuest(i->first)) 1878116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch has_web_view_guest = true; 1879116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 1880116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (!has_web_view_guest) { 1881116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch FileSystemAccessed(url, render_frames, callback, allow); 1882116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return; 1883116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 1884116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DCHECK_EQ(1U, process_map.size()); 1885116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch it = process_map.begin(); 1886116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch BrowserThread::PostTask( 1887116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch BrowserThread::UI, 1888116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch FROM_HERE, 1889116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Bind(&ChromeContentBrowserClient:: 1890116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch RequestFileSystemPermissionOnUIThread, 1891116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch it->first, 1892116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch it->second, 1893116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch url, 1894116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch allow, 1895116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Bind(&ChromeContentBrowserClient::FileSystemAccessed, 1896116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch weak_factory_.GetWeakPtr(), 1897116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch url, 1898116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch render_frames, 1899116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch callback))); 1900116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 1901116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1902116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid ChromeContentBrowserClient::RequestFileSystemPermissionOnUIThread( 1903116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int render_process_id, 1904116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int render_frame_id, 1905116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const GURL& url, 1906116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool allowed_by_default, 1907116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::Callback<void(bool)>& callback) { 1908116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DCHECK(BrowserThread:: CurrentlyOn(BrowserThread::UI)); 1909116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch WebViewPermissionHelper* web_view_permission_helper = 1910116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch WebViewPermissionHelper::FromFrameID(render_process_id, 1911116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch render_frame_id); 1912116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch web_view_permission_helper->RequestFileSystemPermission(url, 1913116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch allowed_by_default, 1914116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch callback); 1915116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 1916116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1917116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1918116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid ChromeContentBrowserClient::FileSystemAccessed( 1919116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const GURL& url, 1920116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::vector<std::pair<int, int> >& render_frames, 1921116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Callback<void(bool)> callback, 1922116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool allow) { 19235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Record access to file system for potential display in UI. 19245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::pair<int, int> >::const_iterator i; 19255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (i = render_frames.begin(); i != render_frames.end(); ++i) { 19265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 1927116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch BrowserThread::UI, 1928116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch FROM_HERE, 19295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&TabSpecificContentSettings::FileSystemAccessed, 19305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i->first, i->second, url, !allow)); 19315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1932116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch callback.Run(allow); 19335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::AllowWorkerIndexedDB( 19365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 1937a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& name, 19385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ResourceContext* context, 19395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::vector<std::pair<int, int> >& render_frames) { 19405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 19415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); 19425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieSettings* cookie_settings = io_data->GetCookieSettings(); 19435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool allow = cookie_settings->IsSettingCookieAllowed(url, url); 19445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Record access to IndexedDB for potential display in UI. 19465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::pair<int, int> >::const_iterator i; 19475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (i = render_frames.begin(); i != render_frames.end(); ++i) { 19485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 19495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 19505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&TabSpecificContentSettings::IndexedDBAccessed, 19515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i->first, i->second, url, name, !allow)); 19525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return allow; 19555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)net::URLRequestContext* 19585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ChromeContentBrowserClient::OverrideRequestContextForURL( 19595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, content::ResourceContext* context) { 19605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 1961116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(ENABLE_EXTENSIONS) 19622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (url.SchemeIs(extensions::kExtensionScheme)) { 19635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); 19645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return io_data->extensions_request_context(); 19655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1966116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 19675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 19695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)QuotaPermissionContext* 19725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ChromeContentBrowserClient::CreateQuotaPermissionContext() { 19735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new ChromeQuotaPermissionContext(); 19745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::AllowCertificateError( 19775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_process_id, 19785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int render_frame_id, 19795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int cert_error, 19805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const net::SSLInfo& ssl_info, 19815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& request_url, 19822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ResourceType::Type resource_type, 19835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool overridable, 19845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool strict_enforcement, 19855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Callback<void(bool)>& callback, 198690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) content::CertificateRequestResultType* result) { 19872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (resource_type != ResourceType::MAIN_FRAME) { 19882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // A sub-resource has a certificate error. The user doesn't really 19892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // have a context for making the right decision, so block the 19902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // request hard, without an info bar to allow showing the insecure 19912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // content. 199290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) *result = content::CERTIFICATE_REQUEST_RESULT_TYPE_DENY; 19932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 19942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 19952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If the tab is being prerendered, cancel the prerender and the request. 19975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::RenderFrameHost* render_frame_host = 19985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::RenderFrameHost::FromID(render_process_id, render_frame_id); 19995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WebContents* tab = WebContents::FromRenderFrameHost(render_frame_host); 20005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!tab) { 20015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 20025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 20035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 20055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prerender::PrerenderContents* prerender_contents = 20065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prerender::PrerenderContents::FromWebContents(tab); 20075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (prerender_contents) { 20085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prerender_contents->Destroy(prerender::FINAL_STATUS_SSL_ERROR); 20095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *result = content::CERTIFICATE_REQUEST_RESULT_TYPE_CANCEL; 20105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return; 20115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(ENABLE_CAPTIVE_PORTAL_DETECTION) 20145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu CaptivePortalTabHelper* captive_portal_tab_helper = 20155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu CaptivePortalTabHelper::FromWebContents(tab); 20165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (captive_portal_tab_helper) 20175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) captive_portal_tab_helper->OnSSLCertError(ssl_info); 20185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 20195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Otherwise, display an SSL blocking page. 20215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new SSLBlockingPage(tab, cert_error, ssl_info, request_url, overridable, 20225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) strict_enforcement, callback); 20235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::SelectClientCertificate( 20265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_process_id, 20275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int render_frame_id, 20285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const net::HttpNetworkSession* network_session, 20295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::SSLCertRequestInfo* cert_request_info, 20305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Callback<void(net::X509Certificate*)>& callback) { 20315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::RenderFrameHost* rfh = content::RenderFrameHost::FromID( 20325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) render_process_id, render_frame_id); 20335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WebContents* tab = WebContents::FromRenderFrameHost(rfh); 20345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!tab) { 20355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 20365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 20375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prerender::PrerenderContents* prerender_contents = 20405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prerender::PrerenderContents::FromWebContents(tab); 20415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (prerender_contents) { 20425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prerender_contents->Destroy( 20435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prerender::FINAL_STATUS_SSL_CLIENT_CERTIFICATE_REQUESTED); 20445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return; 20455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 20465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 20475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GURL requesting_url("https://" + cert_request_info->host_and_port.ToString()); 20485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DCHECK(requesting_url.is_valid()) 20495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) << "Invalid URL string: https://" 20505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) << cert_request_info->host_and_port.ToString(); 20515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext(tab->GetBrowserContext()); 20535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::Value> filter( 20545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile->GetHostContentSettingsMap()->GetWebsiteSetting( 20555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) requesting_url, 20565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) requesting_url, 20575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTINGS_TYPE_AUTO_SELECT_CERTIFICATE, 20585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string(), NULL)); 20595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (filter.get()) { 20615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Try to automatically select a client certificate. 20625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (filter->IsType(base::Value::TYPE_DICTIONARY)) { 20635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue* filter_dict = 20645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) static_cast<base::DictionaryValue*>(filter.get()); 20655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<scoped_refptr<net::X509Certificate> >& 20675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) all_client_certs = cert_request_info->client_certs; 20685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < all_client_certs.size(); ++i) { 2069868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (CertMatchesFilter(*all_client_certs[i].get(), *filter_dict)) { 20705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Use the first certificate that is matched by the filter. 2071868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) callback.Run(all_client_certs[i].get()); 20725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 20735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 20765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 20775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 208046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) chrome::ShowSSLClientCertificateSelector(tab, network_session, 208146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) cert_request_info, callback); 20825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ChromeContentBrowserClient::AddCertificate( 20852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::CertificateMimeType cert_type, 20862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const void* cert_data, 20872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t cert_size, 20885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_process_id, 208946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) int render_frame_id) { 209046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) chrome::SSLAddCertificate(cert_type, cert_data, cert_size, 209146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) render_process_id, render_frame_id); 20925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)content::MediaObserver* ChromeContentBrowserClient::GetMediaObserver() { 20952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return MediaCaptureDevicesDispatcher::GetInstance(); 20965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::RequestDesktopNotificationPermission( 20995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& source_origin, 21000529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch content::RenderFrameHost* render_frame_host, 2101cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const base::Closure& callback) { 21025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(ENABLE_NOTIFICATIONS) 21035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Skip showing the infobar if the request comes from an extension, and that 21045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // extension has the 'notify' permission. (If the extension does not have the 21055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // permission, the user will still be prompted.) 21060529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch Profile* profile = Profile::FromBrowserContext( 21070529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch render_frame_host->GetSiteInstance()->GetBrowserContext()); 2108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) InfoMap* extension_info_map = 2109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) extensions::ExtensionSystem::Get(profile)->info_map(); 2110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DesktopNotificationService* notification_service = 2111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DesktopNotificationServiceFactory::GetForProfile(profile); 2112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const Extension* extension = NULL; 2113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (extension_info_map) { 21145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::ExtensionSet extensions; 2115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) extension_info_map->GetExtensionsWithAPIPermissionForSecurityOrigin( 21160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch source_origin, render_frame_host->GetProcess()->GetID(), 2117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) extensions::APIPermission::kNotification, &extensions); 21185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (extensions::ExtensionSet::const_iterator iter = extensions.begin(); 2119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) iter != extensions.end(); ++iter) { 2120558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch if (notification_service->IsNotifierEnabled(NotifierId( 2121558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch NotifierId::APPLICATION, (*iter)->id()))) { 21227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) extension = iter->get(); 2123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) break; 2124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 2125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 2126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 21272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (IsExtensionWithPermissionOrSuggestInConsole( 21280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch APIPermission::kNotification, extension, 21290529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch render_frame_host->GetRenderViewHost())) { 21300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch callback.Run(); 21315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 21325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 21335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21340529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch notification_service->RequestPermission( 21350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch source_origin, render_frame_host, callback); 21365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 21375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTIMPLEMENTED(); 21385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 21395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2141f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)blink::WebNotificationPresenter::Permission 21425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeContentBrowserClient::CheckDesktopNotificationPermission( 21435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& source_origin, 21445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ResourceContext* context, 21455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_process_id) { 21465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(ENABLE_NOTIFICATIONS) 21475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 21487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 21495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); 2150f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) InfoMap* extension_info_map = io_data->GetExtensionInfoMap(); 2151f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 2152f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // We want to see if there is an extension that hasn't been manually disabled 2153f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // that has the notifications permission and applies to this security origin. 2154f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // First, get the list of extensions with permission for the origin. 21555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::ExtensionSet extensions; 2156f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) extension_info_map->GetExtensionsWithAPIPermissionForSecurityOrigin( 2157f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) source_origin, render_process_id, 2158f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) extensions::APIPermission::kNotification, &extensions); 21595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (extensions::ExtensionSet::const_iterator iter = extensions.begin(); 2160f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) iter != extensions.end(); ++iter) { 2161f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Then, check to see if it's been disabled by the user. 2162f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!extension_info_map->AreNotificationsDisabled((*iter)->id())) 2163f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return blink::WebNotificationPresenter::PermissionAllowed; 2164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 2165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2166f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // No enabled extensions exist, so check the normal host content settings. 2167f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) HostContentSettingsMap* host_content_settings_map = 2168f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) io_data->GetHostContentSettingsMap(); 2169f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ContentSetting setting = host_content_settings_map->GetContentSetting( 2170f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) source_origin, 2171f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) source_origin, 2172f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CONTENT_SETTINGS_TYPE_NOTIFICATIONS, 2173f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) NO_RESOURCE_IDENTIFIER); 2174f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 2175f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (setting == CONTENT_SETTING_ALLOW) 2176f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return blink::WebNotificationPresenter::PermissionAllowed; 2177f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (setting == CONTENT_SETTING_BLOCK) 2178f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return blink::WebNotificationPresenter::PermissionDenied; 2179f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return blink::WebNotificationPresenter::PermissionNotAllowed; 21805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 2181f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return blink::WebNotificationPresenter::PermissionAllowed; 21825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 21835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::ShowDesktopNotification( 21865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::ShowDesktopNotificationHostMsgParams& params, 21870529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch RenderFrameHost* render_frame_host, 21880529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch content::DesktopNotificationDelegate* delegate, 21890529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch base::Closure* cancel_callback) { 21905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(ENABLE_NOTIFICATIONS) 21910529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch content::RenderProcessHost* process = render_frame_host->GetProcess(); 21925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext(process->GetBrowserContext()); 21935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DesktopNotificationService* service = 21945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DesktopNotificationServiceFactory::GetForProfile(profile); 21955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service->ShowDesktopNotification( 21960529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch params, render_frame_host, delegate, cancel_callback); 2197116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2198116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch profile->GetHostContentSettingsMap()->UpdateLastUsage( 2199116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch params.origin, params.origin, CONTENT_SETTINGS_TYPE_NOTIFICATIONS); 22005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 22015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTIMPLEMENTED(); 22025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 22035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2205f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void ChromeContentBrowserClient::RequestGeolocationPermission( 2206f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) content::WebContents* web_contents, 2207f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) int bridge_id, 2208f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const GURL& requesting_frame, 2209f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool user_gesture, 2210f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Callback<void(bool)> result_callback, 2211f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Closure* cancel_callback) { 2212f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GeolocationPermissionContextFactory::GetForProfile( 2213f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Profile::FromBrowserContext(web_contents->GetBrowserContext()))-> 2214f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) RequestGeolocationPermission(web_contents, bridge_id, 2215f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) requesting_frame, user_gesture, 2216f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) result_callback, cancel_callback); 2217f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 2218f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 2219f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void ChromeContentBrowserClient::RequestMidiSysExPermission( 2220f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) content::WebContents* web_contents, 2221f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) int bridge_id, 2222f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const GURL& requesting_frame, 2223f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool user_gesture, 2224f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Callback<void(bool)> result_callback, 2225f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Closure* cancel_callback) { 2226f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) MidiPermissionContext* context = 2227f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) MidiPermissionContextFactory::GetForProfile( 2228f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Profile::FromBrowserContext(web_contents->GetBrowserContext())); 2229116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int renderer_id = web_contents->GetRenderProcessHost()->GetID(); 2230116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int render_view_id = web_contents->GetRenderViewHost()->GetRoutingID(); 2231116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const PermissionRequestID id(renderer_id, render_view_id, bridge_id, GURL()); 2232116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2233116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch context->RequestPermission(web_contents, id, requesting_frame, 2234116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch user_gesture, result_callback); 2235116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 2236116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2237116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid ChromeContentBrowserClient::DidUseGeolocationPermission( 2238116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::WebContents* web_contents, 2239116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const GURL& frame_url, 2240116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const GURL& main_frame_url) { 2241116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch Profile::FromBrowserContext(web_contents->GetBrowserContext()) 2242116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ->GetHostContentSettingsMap() 2243116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ->UpdateLastUsage( 2244116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch frame_url, main_frame_url, CONTENT_SETTINGS_TYPE_GEOLOCATION); 2245f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 2246f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 2247f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void ChromeContentBrowserClient::RequestProtectedMediaIdentifierPermission( 2248f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) content::WebContents* web_contents, 2249f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const GURL& origin, 2250f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Callback<void(bool)> result_callback, 2251f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Closure* cancel_callback) { 2252f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#if defined(OS_ANDROID) 2253f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ProtectedMediaIdentifierPermissionContext* context = 2254f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ProtectedMediaIdentifierPermissionContextFactory::GetForProfile( 2255f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Profile::FromBrowserContext(web_contents->GetBrowserContext())); 2256f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) context->RequestProtectedMediaIdentifierPermission(web_contents, 2257f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) origin, 2258f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) result_callback, 2259f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) cancel_callback); 2260f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#else 2261f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) NOTIMPLEMENTED(); 2262f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) result_callback.Run(false); 2263f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif // defined(OS_ANDROID) 2264f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 2265f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 22665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::CanCreateWindow( 22675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& opener_url, 226858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const GURL& opener_top_level_frame_url, 22695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& source_origin, 22705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowContainerType container_type, 2271558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch const GURL& target_url, 2272558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch const content::Referrer& referrer, 2273558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch WindowOpenDisposition disposition, 2274558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch const WebWindowFeatures& features, 2275558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch bool user_gesture, 2276558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch bool opener_suppressed, 22775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ResourceContext* context, 22785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_process_id, 2279558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch int opener_id, 22805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool* no_javascript_access) { 22815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 22825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *no_javascript_access = false; 22845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If the opener is trying to create a background window but doesn't have 22865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the appropriate permission, fail the attempt. 22875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (container_type == WINDOW_CONTAINER_TYPE_BACKGROUND) { 2288116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(ENABLE_EXTENSIONS) 2289116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); 2290116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch InfoMap* map = io_data->GetExtensionInfoMap(); 22915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!map->SecurityOriginHasAPIPermission( 22925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) source_origin, 22935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) render_process_id, 22945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) APIPermission::kBackground)) { 22955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 22965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Note: this use of GetExtensionOrAppByURL is safe but imperfect. It may 22995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // return a recently installed Extension even if this CanCreateWindow call 23005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // was made by an old copy of the page in a normal web process. That's ok, 23015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // because the permission check above would have caused an early return 23025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // already. We must use the full URL to find hosted apps, though, and not 23035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // just the origin. 2304ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const Extension* extension = 2305ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch map->extensions().GetExtensionOrAppByURL(opener_url); 23062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (extension && !extensions::BackgroundInfo::AllowJSAccess(extension)) 23075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *no_javascript_access = true; 2308116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 2309558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 2310558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch return true; 23115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2312c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2313116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(ENABLE_EXTENSIONS) 2314116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (WebViewRendererState::GetInstance()->IsGuest(render_process_id)) 2315558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch return true; 2316116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 2317558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 2318558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch HostContentSettingsMap* content_settings = 2319558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch ProfileIOData::FromResourceContext(context)->GetHostContentSettingsMap(); 232058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) BlockedWindowParams blocked_params(target_url, 2321116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch referrer, 2322116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch disposition, 2323116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch features, 2324116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch user_gesture, 2325116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch opener_suppressed, 2326116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch render_process_id, 2327116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch opener_id); 2328558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 23292385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch if (!user_gesture && !CommandLine::ForCurrentProcess()->HasSwitch( 23302385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch switches::kDisablePopupBlocking)) { 233158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (content_settings->GetContentSetting(opener_top_level_frame_url, 233258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) opener_top_level_frame_url, 2333558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch CONTENT_SETTINGS_TYPE_POPUPS, 233458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) std::string()) != 2335558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch CONTENT_SETTING_ALLOW) { 233658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) BrowserThread::PostTask(BrowserThread::UI, 233758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) FROM_HERE, 233858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Bind(&HandleBlockedPopupOnUIThread, 233958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) blocked_params)); 234058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return false; 2341558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch } 234258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 2343558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 234458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(OS_ANDROID) 234558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (SingleTabModeTabHelper::IsRegistered(render_process_id, opener_id)) { 2346558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch BrowserThread::PostTask(BrowserThread::UI, 2347558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch FROM_HERE, 234858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Bind(&HandleSingleTabModeBlockOnUIThread, 234958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) blocked_params)); 2350558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch return false; 2351558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch } 235258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif 2353558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 23545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 23555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 23565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string ChromeContentBrowserClient::GetWorkerProcessTitle( 23585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, content::ResourceContext* context) { 23595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 2360116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(ENABLE_EXTENSIONS) 23615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check if it's an extension-created worker, in which case we want to use 23625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the name of the extension. 23635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); 23645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* extension = 23655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) io_data->GetExtensionInfoMap()->extensions().GetByID(url.host()); 23665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return extension ? extension->name() : std::string(); 2367116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 2368116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return std::string(); 2369116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 23705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 23715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::ResourceDispatcherHostCreated() { 2373cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 2374cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) prerender_tracker_ = g_browser_process->prerender_tracker(); 23755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return g_browser_process->ResourceDispatcherHostCreated(); 23765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 23775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2378c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// TODO(tommi): Rename from Get to Create. 23795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)content::SpeechRecognitionManagerDelegate* 23805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeContentBrowserClient::GetSpeechRecognitionManagerDelegate() { 23817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return new speech::ChromeSpeechRecognitionManagerDelegate(); 23825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 23835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)net::NetLog* ChromeContentBrowserClient::GetNetLog() { 23855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return g_browser_process->net_log(); 23865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 23875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AccessTokenStore* ChromeContentBrowserClient::CreateAccessTokenStore() { 23895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new ChromeAccessTokenStore(); 23905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 23915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::IsFastShutdownPossible() { 23932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 23945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 23955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::OverrideWebkitPrefs( 23975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewHost* rvh, const GURL& url, WebPreferences* web_prefs) { 23985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 23995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rvh->GetProcess()->GetBrowserContext()); 24005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefService* prefs = profile->GetPrefs(); 24015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24028bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // Fill per-script font preferences. These are not registered on Android 24038bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // - http://crbug.com/308033. 24048bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#if !defined(OS_ANDROID) 24055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FillFontFamilyMap(prefs, prefs::kWebKitStandardFontFamilyMap, 24065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &web_prefs->standard_font_family_map); 24075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FillFontFamilyMap(prefs, prefs::kWebKitFixedFontFamilyMap, 24085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &web_prefs->fixed_font_family_map); 24095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FillFontFamilyMap(prefs, prefs::kWebKitSerifFontFamilyMap, 24105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &web_prefs->serif_font_family_map); 24115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FillFontFamilyMap(prefs, prefs::kWebKitSansSerifFontFamilyMap, 24125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &web_prefs->sans_serif_font_family_map); 24135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FillFontFamilyMap(prefs, prefs::kWebKitCursiveFontFamilyMap, 24145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &web_prefs->cursive_font_family_map); 24155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FillFontFamilyMap(prefs, prefs::kWebKitFantasyFontFamilyMap, 24165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &web_prefs->fantasy_font_family_map); 24175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FillFontFamilyMap(prefs, prefs::kWebKitPictographFontFamilyMap, 24185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &web_prefs->pictograph_font_family_map); 24198bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#endif 24205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->default_font_size = 24225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetInteger(prefs::kWebKitDefaultFontSize); 24235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->default_fixed_font_size = 24245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetInteger(prefs::kWebKitDefaultFixedFontSize); 24255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->minimum_font_size = 24265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetInteger(prefs::kWebKitMinimumFontSize); 24275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->minimum_logical_font_size = 24285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetInteger(prefs::kWebKitMinimumLogicalFontSize); 24295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->default_encoding = prefs->GetString(prefs::kDefaultCharset); 24315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->javascript_can_open_windows_automatically = 24335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kWebKitJavascriptCanOpenWindowsAutomatically); 24345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->dom_paste_enabled = 24355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kWebKitDomPasteEnabled); 24365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->shrinks_standalone_images_to_fit = 24375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kWebKitShrinksStandaloneImagesToFit); 24385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::DictionaryValue* inspector_settings = 24395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetDictionary(prefs::kWebKitInspectorSettings); 24405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (inspector_settings) { 24415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (base::DictionaryValue::Iterator iter(*inspector_settings); 24425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) !iter.IsAtEnd(); 24432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) iter.Advance()) { 24445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string value; 24452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (iter.value().GetAsString(&value)) { 24465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->inspector_settings.push_back( 24472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::make_pair(iter.key(), value)); 24482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 24495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 24505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 24515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->tabs_to_links = prefs->GetBoolean(prefs::kWebkitTabsToLinks); 24525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!prefs->GetBoolean(prefs::kWebKitJavascriptEnabled)) 24545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->javascript_enabled = false; 24555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!prefs->GetBoolean(prefs::kWebKitWebSecurityEnabled)) 24565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->web_security_enabled = false; 24575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!prefs->GetBoolean(prefs::kWebKitPluginsEnabled)) 24585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->plugins_enabled = false; 24595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!prefs->GetBoolean(prefs::kWebKitJavaEnabled)) 24605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->java_enabled = false; 24615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->loads_images_automatically = 24625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kWebKitLoadsImagesAutomatically); 24635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (prefs->GetBoolean(prefs::kDisable3DAPIs)) 24655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->experimental_webgl_enabled = false; 24665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->allow_displaying_insecure_content = 24685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kWebKitAllowDisplayingInsecureContent); 24695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->allow_running_insecure_content = 24705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kWebKitAllowRunningInsecureContent); 24715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 24720f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) web_prefs->font_scale_factor = 24730f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) static_cast<float>(prefs->GetDouble(prefs::kWebKitFontScaleFactor)); 24740f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) web_prefs->device_scale_adjustment = GetDeviceScaleAdjustment(); 24755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->force_enable_zoom = 24765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kWebKitForceEnableZoom); 24775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2478b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 2479868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#if defined(OS_ANDROID) 2480868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) web_prefs->password_echo_enabled = 2481868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) prefs->GetBoolean(prefs::kWebKitPasswordEchoEnabled); 2482868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#else 24835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->password_echo_enabled = browser_defaults::kPasswordEchoEnabled; 2484868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif 2485868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 2486c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) web_prefs->asynchronous_spell_checking_enabled = true; 2487c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) web_prefs->unified_textchecker_enabled = true; 24885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->uses_universal_detector = 24905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kWebKitUsesUniversalDetector); 24915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->text_areas_are_resizable = 24925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kWebKitTextAreasAreResizable); 24935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->hyperlink_auditing_enabled = 24945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kEnableHyperlinkAuditing); 24955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure we will set the default_encoding with canonical encoding name. 24975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->default_encoding = 24985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CharacterEncoding::GetCanonicalEncodingNameByAliasName( 24995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->default_encoding); 25005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (web_prefs->default_encoding.empty()) { 25015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->ClearPref(prefs::kDefaultCharset); 25025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_prefs->default_encoding = prefs->GetString(prefs::kDefaultCharset); 25035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 25045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(!web_prefs->default_encoding.empty()); 25055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents = WebContents::FromRenderViewHost(rvh); 2507c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) extensions::ViewType view_type = extensions::GetViewType(web_contents); 25082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionService* service = 25092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::ExtensionSystem::Get(profile)->extension_service(); 25105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (service) { 25115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const GURL& site_url = rvh->GetSiteInstance()->GetSiteURL(); 25125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const Extension* extension = 25135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) service->extensions()->GetByID(site_url.host()); 25145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure that we are only granting extension preferences to URLs with 25155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the correct scheme. Without this check, chrome-guest:// schemes used by 25165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // webview tags as well as hosts that happen to match the id of an 25175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // installed extension would get the wrong preferences. 25185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (site_url.SchemeIs(extensions::kExtensionScheme)) { 25195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_webkit_preferences::SetPreferences( 25205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension, view_type, web_prefs); 25215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 25225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 25235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 25245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::UpdateInspectorSetting( 25265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewHost* rvh, const std::string& key, const std::string& value) { 25275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserContext* browser_context = 25285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rvh->GetProcess()->GetBrowserContext(); 25295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DictionaryPrefUpdate update( 25305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile::FromBrowserContext(browser_context)->GetPrefs(), 25315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kWebKitInspectorSettings); 25325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue* inspector_settings = update.Get(); 2533116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch inspector_settings->SetWithoutPathExpansion(key, 2534116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch new base::StringValue(value)); 25355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 25365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::BrowserURLHandlerCreated( 25385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserURLHandler* handler) { 25395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add the default URL handlers. 25405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handler->AddHandlerPair(&ExtensionWebUI::HandleChromeURLOverride, 25415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserURLHandler::null_handler()); 25425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handler->AddHandlerPair(BrowserURLHandler::null_handler(), 25435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &ExtensionWebUI::HandleChromeURLOverrideReverse); 25445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // about: handler. Must come before chrome: handler, since it will 25465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // rewrite about: urls to chrome: URLs and then expect chrome: to 25475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // actually handle them. 25485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handler->AddHandlerPair(&WillHandleBrowserAboutURL, 25495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserURLHandler::null_handler()); 255058e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch 2551effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#if defined(OS_ANDROID) 2552effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Handler to rewrite chrome://newtab on Android. 2553effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch handler->AddHandlerPair(&chrome::android::HandleAndroidNewTabURL, 2554effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch BrowserURLHandler::null_handler()); 2555effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#else 255658e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch // Handler to rewrite chrome://newtab for InstantExtended. 255758e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch handler->AddHandlerPair(&chrome::HandleNewTabURLRewrite, 255858e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch &chrome::HandleNewTabURLReverseRewrite); 2559effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif 256058e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch 25615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // chrome: & friends. 25625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handler->AddHandlerPair(&HandleWebUI, &HandleWebUIReverse); 25635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 25645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::ClearCache(RenderViewHost* rvh) { 25665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 25675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rvh->GetSiteInstance()->GetProcess()->GetBrowserContext()); 25685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowsingDataRemover* remover = 25695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowsingDataRemover::CreateForUnboundedRange(profile); 25705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) remover->Remove(BrowsingDataRemover::REMOVE_CACHE, 25715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowsingDataHelper::UNPROTECTED_WEB); 25725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // BrowsingDataRemover takes care of deleting itself when done. 25735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 25745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::ClearCookies(RenderViewHost* rvh) { 25765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 25775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rvh->GetSiteInstance()->GetProcess()->GetBrowserContext()); 25785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowsingDataRemover* remover = 25795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowsingDataRemover::CreateForUnboundedRange(profile); 25805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int remove_mask = BrowsingDataRemover::REMOVE_SITE_DATA; 25815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) remover->Remove(remove_mask, BrowsingDataHelper::UNPROTECTED_WEB); 25825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // BrowsingDataRemover takes care of deleting itself when done. 25835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 25845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::FilePath ChromeContentBrowserClient::GetDefaultDownloadDirectory() { 25863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return DownloadPrefs::GetDefaultDownloadDirectory(); 25875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 25885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string ChromeContentBrowserClient::GetDefaultDownloadName() { 25905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return l10n_util::GetStringUTF8(IDS_DEFAULT_DOWNLOAD_FILENAME); 25915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 25925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::DidCreatePpapiPlugin( 25945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserPpapiHost* browser_host) { 25952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(ENABLE_PLUGINS) 25965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser_host->GetPpapiHost()->AddHostFactoryFilter( 25975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ppapi::host::HostFactory>( 25985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new ChromeBrowserPepperHostFactory(browser_host))); 25992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 26005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 26015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)content::BrowserPpapiHost* 26035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeContentBrowserClient::GetExternalBrowserPpapiHost( 26045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int plugin_process_id) { 2605116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if !defined(DISABLE_NACL) 2606116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::BrowserChildProcessHostIterator iter(PROCESS_TYPE_NACL_LOADER); 26075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (!iter.Done()) { 2608f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) nacl::NaClProcessHost* host = static_cast<nacl::NaClProcessHost*>( 2609f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) iter.GetDelegate()); 26105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (host->process() && 26115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host->process()->GetData().id == plugin_process_id) { 26125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Found the plugin. 26135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return host->browser_ppapi_host(); 26145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 26155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++iter; 26165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2617116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 26185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 26195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 26205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeContentBrowserClient::AllowPepperSocketAPI( 26225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserContext* browser_context, 26235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 26247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool private_api, 262568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const content::SocketPermissionRequest* params) { 2626868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#if defined(ENABLE_PLUGINS) 26277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext(browser_context); 26285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const extensions::ExtensionSet* extension_set = NULL; 26297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (profile) { 2630116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const ExtensionService* ext_service = 2631116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extensions::ExtensionSystem::Get(profile)->extension_service(); 2632116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (ext_service) { 2633116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extension_set = ext_service->extensions(); 2634116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 26357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 26367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 26377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (private_api) { 26387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Access to private socket APIs is controlled by the whitelist. 26397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (IsExtensionOrSharedModuleWhitelisted(url, extension_set, 26407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) allowed_socket_origins_)) { 26417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return true; 26427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 26437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } else { 26447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Access to public socket APIs is controlled by extension permissions. 26457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (url.is_valid() && url.SchemeIs(extensions::kExtensionScheme) && 26467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) extension_set) { 26477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const Extension* extension = extension_set->GetByID(url.host()); 26487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (extension) { 264946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const extensions::PermissionsData* permissions_data = 265046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) extension->permissions_data(); 265168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (params) { 265268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) extensions::SocketPermission::CheckParam check_params( 265368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) params->type, params->host, params->port); 265446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (permissions_data->CheckAPIPermissionWithParam( 265546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) extensions::APIPermission::kSocket, &check_params)) { 265668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return true; 265768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 265846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } else if (permissions_data->HasAPIPermission( 265946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) extensions::APIPermission::kSocket)) { 266046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return true; 26617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 26627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 26637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 26647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 26657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 26667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Allow both public and private APIs if the command line says so. 26677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return IsHostAllowedByCommandLine(url, extension_set, 26687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) switches::kAllowNaClSocketAPI); 2669868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#else 26705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 2671868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif 26725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 26735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ui::SelectFilePolicy* ChromeContentBrowserClient::CreateSelectFilePolicy( 26752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* web_contents) { 26762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return new ChromeSelectFilePolicy(web_contents); 26772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 26782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2679c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void ChromeContentBrowserClient::GetAdditionalAllowedSchemesForFileSystem( 2680c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<std::string>* additional_allowed_schemes) { 2681c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ContentBrowserClient::GetAdditionalAllowedSchemesForFileSystem( 2682c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) additional_allowed_schemes); 26835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) additional_allowed_schemes->push_back(content::kChromeDevToolsScheme); 26845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) additional_allowed_schemes->push_back(content::kChromeUIScheme); 2685c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) additional_allowed_schemes->push_back(extensions::kExtensionScheme); 2686c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 2687c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 268823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)void ChromeContentBrowserClient::GetURLRequestAutoMountHandlers( 268923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) std::vector<fileapi::URLRequestAutoMountHandler>* handlers) { 2690116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(ENABLE_EXTENSIONS) 2691effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch handlers->push_back( 2692effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch base::Bind(MediaFileSystemBackend::AttemptAutoMountForURLRequest)); 2693116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 269423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 269523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 26967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid ChromeContentBrowserClient::GetAdditionalFileSystemBackends( 26977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch content::BrowserContext* browser_context, 2698c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& storage_partition_path, 26997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ScopedVector<fileapi::FileSystemBackend>* additional_backends) { 2700116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(ENABLE_EXTENSIONS) 2701868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::SequencedWorkerPool* pool = content::BrowserThread::GetBlockingPool(); 27027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch additional_backends->push_back(new MediaFileSystemBackend( 2703868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) storage_partition_path, 2704868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) pool->GetSequencedTaskRunner(pool->GetNamedSequenceToken( 27057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch MediaFileSystemBackend::kMediaTaskRunnerName)).get())); 2706c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 2707eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#if defined(OS_CHROMEOS) 27087dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch fileapi::ExternalMountPoints* external_mount_points = 27097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch content::BrowserContext::GetMountPoints(browser_context); 2710eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DCHECK(external_mount_points); 27110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch chromeos::FileSystemBackend* backend = new chromeos::FileSystemBackend( 27120529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch new drive::FileSystemBackendDelegate, 27130529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch new chromeos::file_system_provider::BackendDelegate, 27145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu new chromeos::MTPFileSystemBackendDelegate(storage_partition_path), 27150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch browser_context->GetSpecialStoragePolicy(), 27160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch external_mount_points, 27170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch fileapi::ExternalMountPoints::GetSystemInstance()); 27187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch backend->AddSystemMountPoints(); 27197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DCHECK(backend->CanHandleType(fileapi::kFileSystemTypeExternal)); 27207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch additional_backends->push_back(backend); 2721eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif 2722a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 2723116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(ENABLE_EXTENSIONS) 272458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) additional_backends->push_back( 272558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) new sync_file_system::SyncFileSystemBackend( 272658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Profile::FromBrowserContext(browser_context))); 2727116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 27285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 272923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#if defined(ENABLE_SERVICE_DISCOVERY) 27305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (CommandLine::ForCurrentProcess()->HasSwitch( 27315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) switches::kEnablePrivetStorage)) { 27325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) additional_backends->push_back( 27335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) new local_discovery::PrivetFileSystemBackend( 2734a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) fileapi::ExternalMountPoints::GetSystemInstance(), 2735a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) browser_context)); 27365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 2737a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif 2738c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 2739c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 27405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_POSIX) && !defined(OS_MACOSX) 27415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeContentBrowserClient::GetAdditionalMappedFilesForChildProcess( 27425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const CommandLine& command_line, 27435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int child_process_id, 27445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FileDescriptorInfo>* mappings) { 27455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 27462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath data_path; 27475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PathService::Get(ui::DIR_RESOURCE_PAKS_ANDROID, &data_path); 27485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(!data_path.empty()); 27495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2750a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int flags = base::File::FLAG_OPEN | base::File::FLAG_READ; 27512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath chrome_resources_pak = 27525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data_path.AppendASCII("chrome_100_percent.pak"); 2753a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::File file(chrome_resources_pak, flags); 2754a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DCHECK(file.IsValid()); 27552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mappings->push_back(FileDescriptorInfo(kAndroidChrome100PercentPakDescriptor, 2756a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) FileDescriptor(file.Pass()))); 27575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 27585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string locale = GetApplicationLocale(); 27592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath locale_pak = ResourceBundle::GetSharedInstance(). 27605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetLocaleFilePath(locale, false); 2761a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) file.Initialize(locale_pak, flags); 2762a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DCHECK(file.IsValid()); 27635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mappings->push_back(FileDescriptorInfo(kAndroidLocalePakDescriptor, 2764a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) FileDescriptor(file.Pass()))); 27655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 27662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath resources_pack_path; 27672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PathService::Get(chrome::FILE_RESOURCES_PACK, &resources_pack_path); 2768a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) file.Initialize(resources_pack_path, flags); 2769a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DCHECK(file.IsValid()); 27702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mappings->push_back(FileDescriptorInfo(kAndroidUIResourcesPakDescriptor, 2771a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) FileDescriptor(file.Pass()))); 27722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 27738bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (breakpad::IsCrashReporterEnabled()) { 2774a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) file = breakpad::CrashDumpManager::GetInstance()->CreateMinidumpFile( 2775a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) child_process_id); 2776a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (file.IsValid()) { 2777a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) mappings->push_back(FileDescriptorInfo(kAndroidMinidumpDescriptor, 2778a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) FileDescriptor(file.Pass()))); 2779a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } else { 27802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOG(ERROR) << "Failed to create file for minidump, crash reporting will " 27812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "be disabled for this process."; 27822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 27835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 27845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2785f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::FilePath app_data_path; 2786f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PathService::Get(base::DIR_ANDROID_APP_DATA, &app_data_path); 2787f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) DCHECK(!app_data_path.empty()); 2788f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 2789f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) flags = base::File::FLAG_OPEN | base::File::FLAG_READ; 2790f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::FilePath icudata_path = 2791f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) app_data_path.AppendASCII("icudtl.dat"); 2792f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::File icudata_file(icudata_path, flags); 2793f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) DCHECK(icudata_file.IsValid()); 2794f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) mappings->push_back(FileDescriptorInfo(kAndroidICUDataDescriptor, 2795f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) FileDescriptor(icudata_file.Pass()))); 2796f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 27975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 27985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int crash_signal_fd = GetCrashSignalFD(command_line); 27995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (crash_signal_fd >= 0) { 28005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mappings->push_back(FileDescriptorInfo(kCrashDumpSignal, 28015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FileDescriptor(crash_signal_fd, 28025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false))); 28035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 28045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_ANDROID) 28055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 28065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_POSIX) && !defined(OS_MACOSX) 28075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 28095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t* ChromeContentBrowserClient::GetResourceDllName() { 28105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return chrome::kBrowserResourcesDll; 28115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 28125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ChromeContentBrowserClient::PreSpawnRenderer( 28142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sandbox::TargetPolicy* policy, 28152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool* success) { 28162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This code is duplicated in nacl_exe_win_64.cc. 28172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Allow the server side of a pipe restricted to the "chrome.nacl." 28182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // namespace so that it cannot impersonate other system or other chrome 28192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // service pipes. 28202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sandbox::ResultCode result = policy->AddRule( 28212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sandbox::TargetPolicy::SUBSYS_NAMED_PIPES, 28222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sandbox::TargetPolicy::NAMEDPIPES_ALLOW_ANY, 28232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) L"\\\\.\\pipe\\chrome.nacl.*"); 28242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (result != sandbox::SBOX_ALL_OK) { 28252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *success = false; 28262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 28272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 28282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 28292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Renderers need to send named pipe handles and shared memory 28302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // segment handles to NaCl loader processes. 28312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result = policy->AddRule(sandbox::TargetPolicy::SUBSYS_HANDLES, 28322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sandbox::TargetPolicy::HANDLES_DUP_ANY, 28332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) L"File"); 28342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (result != sandbox::SBOX_ALL_OK) { 28352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *success = false; 28362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 28372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 28385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 28395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 28405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2841f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)content::DevToolsManagerDelegate* 2842f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)ChromeContentBrowserClient::GetDevToolsManagerDelegate() { 2843f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return new ChromeDevToolsManagerDelegate(); 2844f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 2845f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 28464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)bool ChromeContentBrowserClient::IsPluginAllowedToCallRequestOSFileHandle( 28474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) content::BrowserContext* browser_context, 28484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const GURL& url) { 28494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(ENABLE_PLUGINS) 28504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) Profile* profile = Profile::FromBrowserContext(browser_context); 28515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const extensions::ExtensionSet* extension_set = NULL; 28524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (profile) { 2853116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const ExtensionService* ext_service = 2854116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extensions::ExtensionSystem::Get(profile)->extension_service(); 2855116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (ext_service) { 2856116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extension_set = ext_service->extensions(); 2857116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 28584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 28594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return IsExtensionOrSharedModuleWhitelisted(url, extension_set, 28604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) allowed_file_handle_origins_) || 28614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) IsHostAllowedByCommandLine(url, extension_set, 28624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) switches::kAllowNaClFileHandleAPI); 28634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#else 28644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return false; 28654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif 28664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 28674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 28686d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)bool ChromeContentBrowserClient::IsPluginAllowedToUseDevChannelAPIs( 28696d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) content::BrowserContext* browser_context, 28706d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const GURL& url) { 28715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(ENABLE_PLUGINS) 28725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Allow access for tests. 28735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (CommandLine::ForCurrentProcess()->HasSwitch( 28745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) switches::kEnablePepperTesting)) { 28755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return true; 28765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 28775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 28786d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext(browser_context); 28796d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const extensions::ExtensionSet* extension_set = NULL; 28806d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) if (profile) { 2881116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const ExtensionService* ext_service = 2882116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extensions::ExtensionSystem::Get(profile)->extension_service(); 2883116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (ext_service) { 2884116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extension_set = ext_service->extensions(); 2885116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 28866d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) } 28876d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 28886d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Allow access for whitelisted applications. 28896d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) if (IsExtensionOrSharedModuleWhitelisted(url, 28906d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) extension_set, 28916d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) allowed_dev_channel_origins_)) { 28926d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) return true; 28936d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) } 28946d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 28955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel(); 28965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Allow dev channel APIs to be used on "Canary", "Dev", and "Unknown" 28975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // releases of Chrome. Permitting "Unknown" allows these APIs to be used on 28985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Chromium builds as well. 28995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return channel <= chrome::VersionInfo::CHANNEL_DEV; 29005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#else 29015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return false; 29025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif 29035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 29045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2905cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)net::CookieStore* 2906cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)ChromeContentBrowserClient::OverrideCookieStoreForRenderProcess( 2907cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) int render_process_id) { 2908cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 2909cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!prerender_tracker_) 2910cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return NULL; 2911cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return prerender_tracker_-> 2912cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) GetPrerenderCookieStoreForRenderProcess(render_process_id); 2913cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 2914cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 2915a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if defined(ENABLE_WEBRTC) 2916a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void ChromeContentBrowserClient::MaybeCopyDisableWebRtcEncryptionSwitch( 2917a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) CommandLine* to_command_line, 2918a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const CommandLine& from_command_line, 2919a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) VersionInfo::Channel channel) { 2920a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if defined(OS_ANDROID) 2921a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const VersionInfo::Channel kMaxDisableEncryptionChannel = 2922a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) VersionInfo::CHANNEL_BETA; 2923a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#else 2924a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const VersionInfo::Channel kMaxDisableEncryptionChannel = 2925a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) VersionInfo::CHANNEL_DEV; 2926a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif 2927a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (channel <= kMaxDisableEncryptionChannel) { 2928a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) static const char* const kWebRtcDevSwitchNames[] = { 2929a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) switches::kDisableWebRtcEncryption, 2930a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) }; 2931a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) to_command_line->CopySwitchesFrom(from_command_line, 2932a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) kWebRtcDevSwitchNames, 2933a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) arraysize(kWebRtcDevSwitchNames)); 2934a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 2935a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 2936a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif // defined(ENABLE_WEBRTC) 29375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 29385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace chrome 2939