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 "content/browser/renderer_host/render_message_filter.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <map> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind_helpers.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/debug/alias.h" 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/numerics/safe_math.h" 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/strings/sys_string_conversions.h" 15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/threading/thread.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/threading/worker_pool.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/browser/browser_main_loop.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/child_process_security_policy_impl.h" 20bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#include "content/browser/dom_storage/dom_storage_context_wrapper.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/dom_storage/session_storage_namespace_impl.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/download/download_stats.h" 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/browser/gpu/gpu_data_manager_impl.h" 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/browser/loader/resource_dispatcher_host_impl.h" 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/browser/media/media_internals.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/plugin_process_host.h" 27a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "content/browser/renderer_host/pepper/pepper_security_helper.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/renderer_host/render_process_host_impl.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/renderer_host/render_view_host_delegate.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/renderer_host/render_widget_helper.h" 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/browser/renderer_host/render_widget_resize_helper.h" 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/browser/transition_request_manager.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/child_process_host_impl.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/child_process_messages.h" 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/common/content_constants_internal.h" 36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/common/cookie_data.h" 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/desktop_notification_messages.h" 38a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "content/common/frame_messages.h" 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/common/gpu/client/gpu_memory_buffer_impl.h" 40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "content/common/host_shared_bitmap_manager.h" 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/common/media/media_param_traits.h" 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/view_messages.h" 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/browser_child_process_host.h" 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_context.h" 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_thread.h" 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/content_browser_client.h" 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/download_save_info.h" 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/plugin_service_filter.h" 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/resource_context.h" 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/user_metrics.h" 51ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "content/public/common/content_constants.h" 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/content_switches.h" 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/context_menu_params.h" 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/url_constants.h" 55ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "content/public/common/webplugininfo.h" 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ipc/ipc_channel_handle.h" 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ipc/ipc_platform_file.h" 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "media/audio/audio_manager.h" 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "media/audio/audio_manager_base.h" 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "media/audio/audio_parameters.h" 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "media/base/media_log_event.h" 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/io_buffer.h" 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/keygen_handler.h" 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/mime_util.h" 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/base/request_priority.h" 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/cookies/canonical_cookie.h" 67effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "net/cookies/cookie_store.h" 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/http/http_cache.h" 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request_context.h" 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request_context_getter.h" 71a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "ppapi/shared_impl/file_type_conversion.h" 727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebNotificationPresenter.h" 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/color_profile.h" 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/mac/font_descriptor.h" 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "gpu/GLES2/gl2extchromium.h" 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "third_party/khronos/GLES2/gl2.h" 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "third_party/khronos/GLES2/gl2ext.h" 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_POSIX) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/file_descriptor_posix.h" 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/common/font_cache_dispatcher_win.h" 87effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "content/common/sandbox_win.h" 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_ANDROID) 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/browser/renderer_host/compositor_impl_android.h" 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/common/gpu/client/gpu_memory_buffer_impl_surface_texture.h" 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "media/base/android/webaudio_media_codec_bridge.h" 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(ENABLE_PLUGINS) 961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/browser/plugin_service_impl.h" 971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/browser/ppapi_plugin_process_host.h" 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using net::CookieStore; 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if defined(ENABLE_PLUGINS) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kPluginsRefreshThresholdInSeconds = 3; 107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const uint32 kFilteredMessageClasses[] = { 1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ChildProcessMsgStart, 1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DesktopNotificationMsgStart, 1125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) FrameMsgStart, 1135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ViewMsgStart, 1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}; 1155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(OS_WIN) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// On Windows, |g_color_profile| can run on an arbitrary background thread. 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// We avoid races by using LazyInstance's constructor lock to initialize the 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// object. 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)base::LazyInstance<gfx::ColorProfile>::Leaky g_color_profile = 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LAZY_INSTANCE_INITIALIZER; 1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Common functionality for converting a sync renderer message to a callback 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// function in the browser. Derive from this, create it on the heap when 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// issuing your callback. When done, write your reply parameters into 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// reply_msg(), and then call SendReplyAndDeleteThis(). 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RenderMessageCompletionCallback { 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderMessageCompletionCallback(RenderMessageFilter* filter, 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC::Message* reply_msg) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : filter_(filter), 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reply_msg_(reply_msg) { 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~RenderMessageCompletionCallback() { 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderMessageFilter* filter() { return filter_.get(); } 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC::Message* reply_msg() { return reply_msg_; } 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SendReplyAndDeleteThis() { 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filter_->Send(reply_msg_); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete this; 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<RenderMessageFilter> filter_; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC::Message* reply_msg_; 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(ENABLE_PLUGINS) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class OpenChannelToPpapiPluginCallback 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public RenderMessageCompletionCallback, 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public PpapiPluginProcessHost::PluginClient { 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OpenChannelToPpapiPluginCallback(RenderMessageFilter* filter, 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResourceContext* context, 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC::Message* reply_msg) 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : RenderMessageCompletionCallback(filter, reply_msg), 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) context_(context) { 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void GetPpapiChannelInfo(base::ProcessHandle* renderer_handle, 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int* renderer_id) OVERRIDE { 1667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch *renderer_handle = filter()->PeerHandle(); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *renderer_id = filter()->render_process_id(); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnPpapiChannelOpened(const IPC::ChannelHandle& channel_handle, 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ProcessId plugin_pid, 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int plugin_child_id) OVERRIDE { 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ViewHostMsg_OpenChannelToPepperPlugin::WriteReplyParams( 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) reply_msg(), channel_handle, plugin_pid, plugin_child_id); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SendReplyAndDeleteThis(); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool OffTheRecord() OVERRIDE { 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return filter()->OffTheRecord(); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ResourceContext* GetResourceContext() OVERRIDE { 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return context_; 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResourceContext* context_; 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class OpenChannelToPpapiBrokerCallback 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public PpapiPluginProcessHost::BrokerClient { 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OpenChannelToPpapiBrokerCallback(RenderMessageFilter* filter, 1943240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch int routing_id) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : filter_(filter), 1963240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch routing_id_(routing_id) { 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~OpenChannelToPpapiBrokerCallback() {} 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void GetPpapiChannelInfo(base::ProcessHandle* renderer_handle, 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int* renderer_id) OVERRIDE { 2037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch *renderer_handle = filter_->PeerHandle(); 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *renderer_id = filter_->render_process_id(); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnPpapiChannelOpened(const IPC::ChannelHandle& channel_handle, 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ProcessId plugin_pid, 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int /* plugin_child_id */) OVERRIDE { 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filter_->Send(new ViewMsg_PpapiBrokerChannelCreated(routing_id_, 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) plugin_pid, 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) channel_handle)); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete this; 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool OffTheRecord() OVERRIDE { 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return filter_->OffTheRecord(); 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<RenderMessageFilter> filter_; 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int routing_id_; 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif // defined(ENABLE_PLUGINS) 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RenderMessageFilter::OpenChannelToNpapiPluginCallback 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public RenderMessageCompletionCallback, 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public PluginProcessHost::Client { 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OpenChannelToNpapiPluginCallback(RenderMessageFilter* filter, 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResourceContext* context, 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC::Message* reply_msg) 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : RenderMessageCompletionCallback(filter, reply_msg), 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) context_(context), 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_(NULL), 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sent_plugin_channel_request_(false) { 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual int ID() OVERRIDE { 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return filter()->render_process_id(); 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ResourceContext* GetResourceContext() OVERRIDE { 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return context_; 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool OffTheRecord() OVERRIDE { 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (filter()->OffTheRecord()) 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (GetContentClient()->browser()->AllowSaveLocalState(context_)) 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // For now, only disallow storing data for Flash <http://crbug.com/97319>. 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < info_.mime_types.size(); ++i) { 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (info_.mime_types[i].mime_type == kFlashPluginSwfMimeType) 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 263ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch virtual void SetPluginInfo(const WebPluginInfo& info) OVERRIDE { 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) info_ = info; 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnFoundPluginProcessHost(PluginProcessHost* host) OVERRIDE { 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(host); 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_ = host; 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnSentPluginChannelRequest() OVERRIDE { 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sent_plugin_channel_request_ = true; 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnChannelOpened(const IPC::ChannelHandle& handle) OVERRIDE { 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WriteReplyAndDeleteThis(handle); 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnError() OVERRIDE { 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WriteReplyAndDeleteThis(IPC::ChannelHandle()); 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PluginProcessHost* host() const { 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return host_; 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool sent_plugin_channel_request() const { 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return sent_plugin_channel_request_; 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Cancel() { 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete this; 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void WriteReplyAndDeleteThis(const IPC::ChannelHandle& handle) { 298a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) FrameHostMsg_OpenChannelToPlugin::WriteReplyParams(reply_msg(), 299a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) handle, info_); 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filter()->OnCompletedOpenChannelToNpapiPlugin(this); 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SendReplyAndDeleteThis(); 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResourceContext* context_; 305ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch WebPluginInfo info_; 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PluginProcessHost* host_; 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool sent_plugin_channel_request_; 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RenderMessageFilter::RenderMessageFilter( 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_process_id, 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PluginServiceImpl* plugin_service, 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserContext* browser_context, 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::URLRequestContextGetter* request_context, 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderWidgetHelper* render_widget_helper, 316eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch media::AudioManager* audio_manager, 3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaInternals* media_internals, 318bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch DOMStorageContextWrapper* dom_storage_context) 3195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : BrowserMessageFilter( 3205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) kFilteredMessageClasses, arraysize(kFilteredMessageClasses)), 3215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) resource_dispatcher_host_(ResourceDispatcherHostImpl::Get()), 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_service_(plugin_service), 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_data_directory_(browser_context->GetPath()), 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_context_(request_context), 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resource_context_(browser_context->GetResourceContext()), 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) render_widget_helper_(render_widget_helper), 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) incognito_(browser_context->IsOffTheRecord()), 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dom_storage_context_(dom_storage_context), 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) render_process_id_(render_process_id), 330eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch audio_manager_(audio_manager), 3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_internals_(media_internals) { 332868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DCHECK(request_context_.get()); 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (render_widget_helper) 3351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci render_widget_helper_->Init(render_process_id_, resource_dispatcher_host_); 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RenderMessageFilter::~RenderMessageFilter() { 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This function should be called on the IO thread. 340effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DCHECK_CURRENTLY_ON(BrowserThread::IO); 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(plugin_host_clients_.empty()); 342f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) HostSharedBitmapManager::current()->ProcessRemoved(PeerHandle()); 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderMessageFilter::OnChannelClosing() { 3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(ENABLE_PLUGINS) 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (std::set<OpenChannelToNpapiPluginCallback*>::iterator it = 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_host_clients_.begin(); it != plugin_host_clients_.end(); ++it) { 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OpenChannelToNpapiPluginCallback* client = *it; 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (client->host()) { 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (client->sent_plugin_channel_request()) { 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client->host()->CancelSentRequest(client); 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client->host()->CancelPendingRequest(client); 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_service_->CancelOpenChannelToNpapiPlugin(client); 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client->Cancel(); 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // defined(ENABLE_PLUGINS) 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_host_clients_.clear(); 3631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(OS_ANDROID) 3641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CompositorImpl::DestroyAllSurfaceTextures(render_process_id_); 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 368cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool RenderMessageFilter::OnMessageReceived(const IPC::Message& message) { 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool handled = true; 370cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IPC_BEGIN_MESSAGE_MAP(RenderMessageFilter, message) 3712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_WIN) 3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_PreCacheFontCharacters, 3732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnPreCacheFontCharacters) 3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_GetProcessMemorySizes, 3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnGetProcessMemorySizes) 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_GenerateRoutingID, OnGenerateRoutingID) 3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_CreateWindow, OnCreateWindow) 3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_CreateWidget, OnCreateWidget) 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_CreateFullscreenWidget, 3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnCreateFullscreenWidget) 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_SetCookie, OnSetCookie) 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_GetCookies, OnGetCookies) 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_GetRawCookies, OnGetRawCookies) 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_DeleteCookie, OnDeleteCookie) 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_CookiesEnabled, OnCookiesEnabled) 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_LoadFont, OnLoadFont) 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_DownloadUrl, OnDownloadUrl) 3911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci IPC_MESSAGE_HANDLER(ViewHostMsg_SaveImageFromDataURL, 3921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci OnSaveImageFromDataURL) 3932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(ENABLE_PLUGINS) 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_GetPlugins, OnGetPlugins) 395a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) IPC_MESSAGE_HANDLER(FrameHostMsg_GetPluginInfo, OnGetPluginInfo) 396a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) IPC_MESSAGE_HANDLER_DELAY_REPLY(FrameHostMsg_OpenChannelToPlugin, 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnOpenChannelToPlugin) 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_OpenChannelToPepperPlugin, 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnOpenChannelToPepperPlugin) 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_DidCreateOutOfProcessPepperInstance, 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnDidCreateOutOfProcessPepperInstance) 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_DidDeleteOutOfProcessPepperInstance, 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnDidDeleteOutOfProcessPepperInstance) 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_OpenChannelToPpapiBroker, 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnOpenChannelToPpapiBroker) 4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 407116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(OS_MACOSX) 408cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IPC_MESSAGE_HANDLER_GENERIC(ViewHostMsg_SwapCompositorFrame, 409116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch RenderWidgetResizeHelper::Get()->PostRendererProcessMsg( 410116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch render_process_id_, message)) 411f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) IPC_MESSAGE_HANDLER_GENERIC(ViewHostMsg_UpdateRect, 412116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch RenderWidgetResizeHelper::Get()->PostRendererProcessMsg( 413116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch render_process_id_, message)) 414116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(DesktopNotificationHostMsg_CheckPermission, 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnCheckNotificationPermission) 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ChildProcessHostMsg_SyncAllocateSharedMemory, 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnAllocateSharedMemory) 419f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) IPC_MESSAGE_HANDLER_DELAY_REPLY( 420f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ChildProcessHostMsg_SyncAllocateSharedBitmap, OnAllocateSharedBitmap) 4211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci IPC_MESSAGE_HANDLER_DELAY_REPLY( 4221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ChildProcessHostMsg_SyncAllocateGpuMemoryBuffer, 4231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci OnAllocateGpuMemoryBuffer) 4241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci IPC_MESSAGE_HANDLER(ChildProcessHostMsg_DeletedGpuMemoryBuffer, 4251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci OnDeletedGpuMemoryBuffer) 426a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) IPC_MESSAGE_HANDLER(ChildProcessHostMsg_AllocatedSharedBitmap, 427a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) OnAllocatedSharedBitmap) 428a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) IPC_MESSAGE_HANDLER(ChildProcessHostMsg_DeletedSharedBitmap, 429a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) OnDeletedSharedBitmap) 430a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#if defined(OS_POSIX) && !defined(OS_ANDROID) 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_AllocTransportDIB, OnAllocTransportDIB) 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_FreeTransportDIB, OnFreeTransportDIB) 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_DidGenerateCacheableMetadata, 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnCacheableMetadataAvailable) 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_Keygen, OnKeygen) 4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_GetAudioHardwareConfig, 4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnGetAudioHardwareConfig) 4395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(OS_WIN) 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_GetMonitorColorProfile, 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnGetMonitorColorProfile) 4425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif 443c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_MediaLogEvents, OnMediaLogEvents) 4442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_Are3DAPIsBlocked, OnAre3DAPIsBlocked) 4452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_DidLose3DContext, OnDidLose3DContext) 446c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_ANDROID) 447c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_RunWebAudioMediaCodec, OnWebAudioMediaCodec) 448c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 4496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) IPC_MESSAGE_HANDLER(FrameHostMsg_AddNavigationTransitionData, 4506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) OnAddNavigationTransitionData) 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_UNHANDLED(handled = false) 452cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IPC_END_MESSAGE_MAP() 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return handled; 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderMessageFilter::OnDestruct() const { 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::DeleteOnIOThread::Destruct(this); 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)base::TaskRunner* RenderMessageFilter::OverrideTaskRunnerForMessage( 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const IPC::Message& message) { 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Windows monitor profile must be read from a file. 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (message.type() == ViewHostMsg_GetMonitorColorProfile::ID) 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return BrowserThread::GetBlockingPool(); 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 468a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Always query audio device parameters on the audio thread. 4697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (message.type() == ViewHostMsg_GetAudioHardwareConfig::ID) 4705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return audio_manager_->GetTaskRunner().get(); 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RenderMessageFilter::OffTheRecord() const { 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return incognito_; 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderMessageFilter::OnCreateWindow( 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ViewHostMsg_CreateWindow_Params& params, 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int* route_id, 481868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) int* main_frame_route_id, 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int* surface_id, 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64* cloned_session_storage_namespace_id) { 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool no_javascript_access; 485f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 486f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Merge the additional features into the WebWindowFeatures struct before we 487f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // pass it on. 488f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebVector<blink::WebString> additional_features( 489f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) params.additional_features.size()); 490f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 491f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) for (size_t i = 0; i < params.additional_features.size(); ++i) 492f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) additional_features[i] = blink::WebString(params.additional_features[i]); 493f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 494f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebWindowFeatures features = params.features; 495f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) features.additionalFeatures.swap(additional_features); 496f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool can_create_window = 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetContentClient()->browser()->CanCreateWindow( 4992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.opener_url, 50058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) params.opener_top_level_frame_url, 5012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.opener_security_origin, 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.window_container_type, 503558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch params.target_url, 504558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch params.referrer, 505558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch params.disposition, 506f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) features, 507558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch params.user_gesture, 508558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch params.opener_suppressed, 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resource_context_, 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) render_process_id_, 511558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch params.opener_id, 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &no_javascript_access); 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!can_create_window) { 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *route_id = MSG_ROUTING_NONE; 516868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) *main_frame_route_id = MSG_ROUTING_NONE; 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *surface_id = 0; 518116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch *cloned_session_storage_namespace_id = 0; 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This will clone the sessionStorage for namespace_id_to_clone. 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<SessionStorageNamespaceImpl> cloned_namespace = 524868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) new SessionStorageNamespaceImpl(dom_storage_context_.get(), 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.session_storage_namespace_id); 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *cloned_session_storage_namespace_id = cloned_namespace->id(); 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) render_widget_helper_->CreateNewWindow(params, 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) no_javascript_access, 5307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch PeerHandle(), 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) route_id, 532868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) main_frame_route_id, 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) surface_id, 534868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) cloned_namespace.get()); 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderMessageFilter::OnCreateWidget(int opener_id, 538f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebPopupType popup_type, 5392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int* route_id, 5402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int* surface_id) { 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) render_widget_helper_->CreateNewWidget( 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) opener_id, popup_type, route_id, surface_id); 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderMessageFilter::OnCreateFullscreenWidget(int opener_id, 5462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int* route_id, 5472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int* surface_id) { 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) render_widget_helper_->CreateNewFullscreenWidget( 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) opener_id, route_id, surface_id); 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderMessageFilter::OnGetProcessMemorySizes(size_t* private_bytes, 5532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t* shared_bytes) { 554effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DCHECK_CURRENTLY_ON(BrowserThread::IO); 5552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) using base::ProcessMetrics; 5562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if !defined(OS_MACOSX) || defined(OS_IOS) 5572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<ProcessMetrics> metrics(ProcessMetrics::CreateProcessMetrics( 5587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch PeerHandle())); 5592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 5602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<ProcessMetrics> metrics(ProcessMetrics::CreateProcessMetrics( 5611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PeerHandle(), BrowserChildProcessHost::GetPortProvider())); 5622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 5632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!metrics->GetMemoryBytes(private_bytes, shared_bytes)) { 5642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *private_bytes = 0; 5652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *shared_bytes = 0; 5662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void RenderMessageFilter::OnSetCookie(int render_frame_id, 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& first_party_for_cookies, 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& cookie) { 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChildProcessSecurityPolicyImpl* policy = 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChildProcessSecurityPolicyImpl::GetInstance(); 5752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!policy->CanAccessCookiesForOrigin(render_process_id_, url)) 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::CookieOptions options; 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (GetContentClient()->browser()->AllowSetCookie( 5805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) url, first_party_for_cookies, cookie, resource_context_, 5815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) render_process_id_, render_frame_id, &options)) { 582a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) net::CookieStore* cookie_store = GetCookieStoreForURL(url); 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Pass a null callback since we don't care about when the 'set' completes. 584a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) cookie_store->SetCookieWithOptionsAsync( 585effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch url, cookie, options, net::CookieStore::SetCookiesCallback()); 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void RenderMessageFilter::OnGetCookies(int render_frame_id, 5905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const GURL& url, 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& first_party_for_cookies, 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC::Message* reply_msg) { 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChildProcessSecurityPolicyImpl* policy = 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChildProcessSecurityPolicyImpl::GetInstance(); 5952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!policy->CanAccessCookiesForOrigin(render_process_id_, url)) { 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SendGetCookiesResponse(reply_msg, std::string()); 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If we crash here, figure out what URL the renderer was requesting. 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // http://crbug.com/99242 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char url_buf[128]; 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::strlcpy(url_buf, url.spec().c_str(), arraysize(url_buf)); 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::debug::Alias(url_buf); 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 606a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) net::CookieStore* cookie_store = GetCookieStoreForURL(url); 607effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch cookie_store->GetAllCookiesForURLAsync( 6085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) url, base::Bind(&RenderMessageFilter::CheckPolicyForCookies, this, 6095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) render_frame_id, url, first_party_for_cookies, 6105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) reply_msg)); 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderMessageFilter::OnGetRawCookies( 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& first_party_for_cookies, 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC::Message* reply_msg) { 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChildProcessSecurityPolicyImpl* policy = 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChildProcessSecurityPolicyImpl::GetInstance(); 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Only return raw cookies to trusted renderers or if this request is 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // not targeted to an an external host like ChromeFrame. 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(ananta) We need to support retreiving raw cookies from external 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // hosts. 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!policy->CanReadRawCookies(render_process_id_) || 6242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !policy->CanAccessCookiesForOrigin(render_process_id_, url)) { 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SendGetRawCookiesResponse(reply_msg, net::CookieList()); 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We check policy here to avoid sending back cookies that would not normally 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // be applied to outbound requests for the given URL. Since this cookie info 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is visible in the developer tools, it is helpful to make it match reality. 632a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) net::CookieStore* cookie_store = GetCookieStoreForURL(url); 633effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch cookie_store->GetAllCookiesForURLAsync( 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url, base::Bind(&RenderMessageFilter::SendGetRawCookiesResponse, 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this, reply_msg)); 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderMessageFilter::OnDeleteCookie(const GURL& url, 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& cookie_name) { 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChildProcessSecurityPolicyImpl* policy = 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChildProcessSecurityPolicyImpl::GetInstance(); 6422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!policy->CanAccessCookiesForOrigin(render_process_id_, url)) 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) net::CookieStore* cookie_store = GetCookieStoreForURL(url); 646a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) cookie_store->DeleteCookieAsync(url, cookie_name, base::Closure()); 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderMessageFilter::OnCookiesEnabled( 650cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) int render_frame_id, 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& first_party_for_cookies, 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool* cookies_enabled) { 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(ananta): If this render view is associated with an automation channel, 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // aka ChromeFrame then we need to retrieve cookie settings from the external 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // host. 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *cookies_enabled = GetContentClient()->browser()->AllowGetCookie( 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url, first_party_for_cookies, net::CookieList(), resource_context_, 659cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) render_process_id_, render_frame_id); 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderMessageFilter::OnLoadFont(const FontDescriptor& font, 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC::Message* reply_msg) { 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FontLoader::Result* result = new FontLoader::Result; 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTaskAndReply( 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::FILE, FROM_HERE, 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&FontLoader::LoadFont, font, result), 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&RenderMessageFilter::SendLoadFontReply, this, reply_msg, 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Owned(result))); 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderMessageFilter::SendLoadFontReply(IPC::Message* reply, 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FontLoader::Result* result) { 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::SharedMemoryHandle handle; 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (result->font_data_size == 0 || result->font_id == 0) { 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result->font_data_size = 0; 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result->font_id = 0; 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handle = base::SharedMemory::NULLHandle(); 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result->font_data.GiveToProcess(base::GetCurrentProcessHandle(), &handle); 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ViewHostMsg_LoadFont::WriteReplyParams( 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reply, result->font_data_size, handle, result->font_id); 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(reply); 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // OS_MACOSX 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 690f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if defined(ENABLE_PLUGINS) 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderMessageFilter::OnGetPlugins( 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool refresh, 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC::Message* reply_msg) { 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Don't refresh if the specified threshold has not been passed. Note that 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // this check is performed before off-loading to the file thread. The reason 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // we do this is that some pages tend to request that the list of plugins be 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // refreshed at an excessive rate. This instigates disk scanning, as the list 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is accumulated by doing multiple reads from disk. This effect is 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // multiplied when we have several pages requesting this operation. 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (refresh) { 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::TimeDelta threshold = base::TimeDelta::FromSeconds( 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kPluginsRefreshThresholdInSeconds); 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::TimeTicks now = base::TimeTicks::Now(); 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (now - last_plugin_refresh_time_ >= threshold) { 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Only refresh if the threshold hasn't been exceeded yet. 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PluginServiceImpl::GetInstance()->RefreshPlugins(); 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_plugin_refresh_time_ = now; 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PluginServiceImpl::GetInstance()->GetPlugins( 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&RenderMessageFilter::GetPluginsCallback, this, reply_msg)); 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderMessageFilter::GetPluginsCallback( 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC::Message* reply_msg, 717ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const std::vector<WebPluginInfo>& all_plugins) { 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Filter the plugin list. 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PluginServiceFilter* filter = PluginServiceImpl::GetInstance()->GetFilter(); 720ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::vector<WebPluginInfo> plugins; 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int child_process_id = -1; 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int routing_id = MSG_ROUTING_NONE; 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < all_plugins.size(); ++i) { 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Copy because the filter can mutate. 726ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch WebPluginInfo plugin(all_plugins[i]); 7272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!filter || filter->IsPluginAvailable(child_process_id, 7282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) routing_id, 7292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) resource_context_, 7302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL(), 7312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL(), 7322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &plugin)) { 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugins.push_back(plugin); 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ViewHostMsg_GetPlugins::WriteReplyParams(reply_msg, plugins); 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(reply_msg); 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderMessageFilter::OnGetPluginInfo( 742a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) int render_frame_id, 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& page_url, 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& mime_type, 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool* found, 747ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch WebPluginInfo* info, 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string* actual_mime_type) { 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool allow_wildcard = true; 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *found = plugin_service_->GetPluginInfo( 751a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) render_process_id_, render_frame_id, resource_context_, 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url, page_url, mime_type, allow_wildcard, 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, info, actual_mime_type); 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 756a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void RenderMessageFilter::OnOpenChannelToPlugin(int render_frame_id, 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& policy_url, 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& mime_type, 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC::Message* reply_msg) { 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OpenChannelToNpapiPluginCallback* client = 7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new OpenChannelToNpapiPluginCallback(this, resource_context_, reply_msg); 7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(!ContainsKey(plugin_host_clients_, client)); 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_host_clients_.insert(client); 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_service_->OpenChannelToNpapiPlugin( 766a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) render_process_id_, render_frame_id, 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url, policy_url, mime_type, client); 7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderMessageFilter::OnOpenChannelToPepperPlugin( 7712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& path, 7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC::Message* reply_msg) { 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_service_->OpenChannelToPpapiPlugin( 7742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) render_process_id_, 7752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) path, 7762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile_data_directory_, 7772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new OpenChannelToPpapiPluginCallback(this, resource_context_, reply_msg)); 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderMessageFilter::OnDidCreateOutOfProcessPepperInstance( 7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int plugin_child_id, 7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 pp_instance, 7832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PepperRendererInstanceData instance_data, 7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_external) { 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // It's important that we supply the render process ID ourselves based on the 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // channel the message arrived on. We use the 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // PP_Instance -> (process id, view id) 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // mapping to decide how to handle messages received from the (untrusted) 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // plugin, so an exploited renderer must not be able to insert fake mappings 7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // that may allow it access to other render processes. 791a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) DCHECK_EQ(0, instance_data.render_process_id); 7922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) instance_data.render_process_id = render_process_id_; 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (is_external) { 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We provide the BrowserPpapiHost to the embedder, so it's safe to cast. 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserPpapiHostImpl* host = static_cast<BrowserPpapiHostImpl*>( 7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetContentClient()->browser()->GetExternalBrowserPpapiHost( 7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_child_id)); 7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (host) 7992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) host->AddInstance(pp_instance, instance_data); 8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PpapiPluginProcessHost::DidCreateOutOfProcessInstance( 8022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) plugin_child_id, pp_instance, instance_data); 8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderMessageFilter::OnDidDeleteOutOfProcessPepperInstance( 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int plugin_child_id, 8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 pp_instance, 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_external) { 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (is_external) { 8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We provide the BrowserPpapiHost to the embedder, so it's safe to cast. 8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserPpapiHostImpl* host = static_cast<BrowserPpapiHostImpl*>( 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetContentClient()->browser()->GetExternalBrowserPpapiHost( 8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_child_id)); 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (host) 8162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) host->DeleteInstance(pp_instance); 8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PpapiPluginProcessHost::DidDeleteOutOfProcessInstance( 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_child_id, pp_instance); 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderMessageFilter::OnOpenChannelToPpapiBroker( 8242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int routing_id, 8252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& path) { 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_service_->OpenChannelToPpapiBroker( 8272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) render_process_id_, 8282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) path, 8293240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch new OpenChannelToPpapiBrokerCallback(this, routing_id)); 8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 831f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif // defined(ENABLE_PLUGINS) 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderMessageFilter::OnGenerateRoutingID(int* route_id) { 8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *route_id = render_widget_helper_->GetNextRoutingID(); 8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderMessageFilter::OnGetAudioHardwareConfig( 8382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media::AudioParameters* input_params, 8392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media::AudioParameters* output_params) { 8402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(input_params); 8412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(output_params); 842eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch *output_params = audio_manager_->GetDefaultOutputStreamParameters(); 8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(henrika): add support for all available input devices. 845eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch *input_params = audio_manager_->GetInputStreamParameters( 846eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch media::AudioManagerBase::kDefaultDeviceId); 8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 8505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void RenderMessageFilter::OnGetMonitorColorProfile(std::vector<char>* profile) { 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::IO)); 8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *profile = g_color_profile.Get().profile(); 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif 8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid RenderMessageFilter::DownloadUrl(int render_view_id, 8571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const GURL& url, 8581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const Referrer& referrer, 8591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const base::string16& suggested_name, 8601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const bool use_prompt) const { 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<DownloadSaveInfo> save_info(new DownloadSaveInfo()); 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) save_info->suggested_name = suggested_name; 863010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) save_info->prompt_for_save_location = use_prompt; 864a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 865a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // There may be a special cookie store that we could use for this download, 866a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // rather than the default one. Since this feature is generally only used for 867a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // proper render views, and not downloads, we do not need to retrieve the 868a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // special cookie store here, but just initialize the request to use the 869a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // default cookie store. 870a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // TODO(tburkard): retrieve the appropriate special cookie store, if this 871a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // is ever to be used for downloads as well. 8721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<net::URLRequest> request( 8740f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) resource_context_->GetRequestContext()->CreateRequest( 875a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) url, net::DEFAULT_PRIORITY, NULL, NULL)); 8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RecordDownloadSource(INITIATED_BY_RENDERER); 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resource_dispatcher_host_->BeginDownload( 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request.Pass(), 879eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch referrer, 8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) true, // is_content_initiated 8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resource_context_, 8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) render_process_id_, 883cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) render_view_id, 8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false, 8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) save_info.Pass(), 8861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DownloadItem::kInvalidId, 8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResourceDispatcherHostImpl::DownloadStartedCallback()); 8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid RenderMessageFilter::OnDownloadUrl(int render_view_id, 8911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const GURL& url, 8921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const Referrer& referrer, 8931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const base::string16& suggested_name) { 8941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DownloadUrl(render_view_id, url, referrer, suggested_name, false); 8951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 8961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 8971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid RenderMessageFilter::OnSaveImageFromDataURL(int render_view_id, 8981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& url_str) { 8991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Please refer to RenderViewImpl::saveImageFromDataURL(). 9001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (url_str.length() >= kMaxLengthOfDataURLString) 9011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return; 9021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 9031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GURL data_url(url_str); 9041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!data_url.SchemeIs(url::kDataScheme)) 9051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return; 9061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 9071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DownloadUrl(render_view_id, data_url, Referrer(), base::string16(), true); 9081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 9091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderMessageFilter::OnCheckNotificationPermission( 9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& source_origin, int* result) { 9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(ENABLE_NOTIFICATIONS) 9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *result = GetContentClient()->browser()-> 9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckDesktopNotificationPermission(source_origin, resource_context_, 9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) render_process_id_); 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 917f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *result = blink::WebNotificationPresenter::PermissionAllowed; 9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderMessageFilter::OnAllocateSharedMemory( 9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 buffer_size, 9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::SharedMemoryHandle* handle) { 9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChildProcessHostImpl::AllocateSharedMemory( 9257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch buffer_size, PeerHandle(), handle); 9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 928f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void RenderMessageFilter::AllocateSharedBitmapOnFileThread( 929a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) uint32 buffer_size, 930a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const cc::SharedBitmapId& id, 931f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) IPC::Message* reply_msg) { 932f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::SharedMemoryHandle handle; 933a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) HostSharedBitmapManager::current()->AllocateSharedBitmapForChild( 934f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PeerHandle(), buffer_size, id, &handle); 935f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ChildProcessHostMsg_SyncAllocateSharedBitmap::WriteReplyParams(reply_msg, 936f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) handle); 937f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Send(reply_msg); 938f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 939f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 940f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void RenderMessageFilter::OnAllocateSharedBitmap(uint32 buffer_size, 941f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const cc::SharedBitmapId& id, 942f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) IPC::Message* reply_msg) { 943f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) BrowserThread::PostTask( 944f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) BrowserThread::FILE_USER_BLOCKING, 945f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) FROM_HERE, 946f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Bind(&RenderMessageFilter::AllocateSharedBitmapOnFileThread, 947f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this, 948f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) buffer_size, 949f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) id, 950f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) reply_msg)); 951a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 952a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 953a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void RenderMessageFilter::OnAllocatedSharedBitmap( 954a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) size_t buffer_size, 955a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const base::SharedMemoryHandle& handle, 956a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const cc::SharedBitmapId& id) { 957a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) HostSharedBitmapManager::current()->ChildAllocatedSharedBitmap( 958a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) buffer_size, handle, PeerHandle(), id); 959a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 960a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 961a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void RenderMessageFilter::OnDeletedSharedBitmap(const cc::SharedBitmapId& id) { 962a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) HostSharedBitmapManager::current()->ChildDeletedSharedBitmap(id); 963a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 964a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 965a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)net::CookieStore* RenderMessageFilter::GetCookieStoreForURL( 9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url) { 967effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DCHECK_CURRENTLY_ON(BrowserThread::IO); 9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::URLRequestContext* context = 9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetContentClient()->browser()->OverrideRequestContextForURL( 9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url, resource_context_); 9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 973a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // If we should use a special URLRequestContext rather than the default one, 974a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // return the cookie store of that special URLRequestContext. 975a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (context) 976a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return context->cookie_store(); 977a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 978a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Otherwise, if there is a special cookie store to be used for this process, 979a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // return that cookie store. 980a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) net::CookieStore* cookie_store = 981a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetContentClient()->browser()->OverrideCookieStoreForRenderProcess( 982a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) render_process_id_); 983a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (cookie_store) 984a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return cookie_store; 985a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 986a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Otherwise, return the cookie store of the default request context used 987a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // for this renderer. 988a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return request_context_->GetURLRequestContext()->cookie_store(); 9895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 991a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#if defined(OS_POSIX) && !defined(OS_ANDROID) 9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderMessageFilter::OnAllocTransportDIB( 993868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) uint32 size, bool cache_in_browser, TransportDIB::Handle* handle) { 9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) render_widget_helper_->AllocTransportDIB(size, cache_in_browser, handle); 9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderMessageFilter::OnFreeTransportDIB( 9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TransportDIB::Id dib_id) { 9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) render_widget_helper_->FreeTransportDIB(dib_id); 10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderMessageFilter::OnCacheableMetadataAvailable( 10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) double expected_response_time, 10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<char>& data) { 10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::HttpCache* cache = request_context_->GetURLRequestContext()-> 10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) http_transaction_factory()->GetCache(); 10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(cache); 10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Use the same priority for the metadata write as for script 10122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // resources (see defaultPriorityForResourceType() in WebKit's 10132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // CachedResource.cpp). Note that WebURLRequest::PriorityMedium 10142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // corresponds to net::LOW (see ConvertWebKitPriorityToNetPriority() 10152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // in weburlloader_impl.cc). 10162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const net::RequestPriority kPriority = net::LOW; 10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(data.size())); 10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) memcpy(buf->data(), &data.front(), data.size()); 1019868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) cache->WriteMetadata(url, 1020868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) kPriority, 1021868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::Time::FromDoubleT(expected_response_time), 1022868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) buf.get(), 1023868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) data.size()); 10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderMessageFilter::OnKeygen(uint32 key_size_index, 10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& challenge_string, 10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC::Message* reply_msg) { 10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Map displayed strings indicating level of keysecurity in the <keygen> 10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // menu to the key size in bits. (See SSLKeyGeneratorChromium.cpp in WebCore.) 10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int key_size_in_bits; 10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (key_size_index) { 10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 0: 10355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) key_size_in_bits = 2048; 10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 1: 10385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) key_size_in_bits = 1024; 10395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 10405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 10415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(false) << "Illegal key_size_index " << key_size_index; 10425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ViewHostMsg_Keygen::WriteReplyParams(reply_msg, std::string()); 10435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(reply_msg); 10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) resource_context_->CreateKeygenHandler( 10485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) key_size_in_bits, 10495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) challenge_string, 10505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) url, 10515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Bind( 10525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &RenderMessageFilter::PostKeygenToWorkerThread, this, reply_msg)); 10535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 10545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 10555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void RenderMessageFilter::PostKeygenToWorkerThread( 10565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IPC::Message* reply_msg, 10575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<net::KeygenHandler> keygen_handler) { 10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VLOG(1) << "Dispatching keygen task to worker pool."; 10595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Dispatch to worker pool, so we do not block the IO thread. 10605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!base::WorkerPool::PostTask( 10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FROM_HERE, 10625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Bind(&RenderMessageFilter::OnKeygenOnWorkerThread, 10635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this, 10645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Passed(&keygen_handler), 10655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) reply_msg), 10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) true)) { 10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED() << "Failed to dispatch keygen task to worker pool"; 10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ViewHostMsg_Keygen::WriteReplyParams(reply_msg, std::string()); 10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(reply_msg); 10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderMessageFilter::OnKeygenOnWorkerThread( 10745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<net::KeygenHandler> keygen_handler, 10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC::Message* reply_msg) { 10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(reply_msg); 10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Generate a signed public key and challenge, then send it back. 10795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ViewHostMsg_Keygen::WriteReplyParams( 10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reply_msg, 10815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) keygen_handler->GenKeyAndSignChallenge()); 10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(reply_msg); 10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void RenderMessageFilter::OnMediaLogEvents( 1086c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::vector<media::MediaLogEvent>& events) { 10872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (media_internals_) 1088c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) media_internals_->OnMediaEvents(render_process_id_, events); 10895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderMessageFilter::CheckPolicyForCookies( 10925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int render_frame_id, 10935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 10945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& first_party_for_cookies, 10955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC::Message* reply_msg, 10965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const net::CookieList& cookie_list) { 1097a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) net::CookieStore* cookie_store = GetCookieStoreForURL(url); 10985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check the policy for get cookies, and pass cookie_list to the 10995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TabSpecificContentSetting for logging purpose. 11005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (GetContentClient()->browser()->AllowGetCookie( 11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url, first_party_for_cookies, cookie_list, resource_context_, 11025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) render_process_id_, render_frame_id)) { 11035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets the cookies from cookie store if allowed. 1104a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) cookie_store->GetCookiesWithOptionsAsync( 11055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url, net::CookieOptions(), 11065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&RenderMessageFilter::SendGetCookiesResponse, 11075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this, reply_msg)); 11085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 11095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SendGetCookiesResponse(reply_msg, std::string()); 11105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderMessageFilter::SendGetCookiesResponse(IPC::Message* reply_msg, 11145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& cookies) { 11155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ViewHostMsg_GetCookies::WriteReplyParams(reply_msg, cookies); 11165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(reply_msg); 11175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderMessageFilter::SendGetRawCookiesResponse( 11205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC::Message* reply_msg, 11215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const net::CookieList& cookie_list) { 1122eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::vector<CookieData> cookies; 11235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < cookie_list.size(); ++i) 1124eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch cookies.push_back(CookieData(cookie_list[i])); 11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ViewHostMsg_GetRawCookies::WriteReplyParams(reply_msg, cookies); 11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(reply_msg); 11275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderMessageFilter::OnCompletedOpenChannelToNpapiPlugin( 11305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OpenChannelToNpapiPluginCallback* client) { 1131effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DCHECK_CURRENTLY_ON(BrowserThread::IO); 11325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(ContainsKey(plugin_host_clients_, client)); 11335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_host_clients_.erase(client); 11345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderMessageFilter::OnAre3DAPIsBlocked(int render_view_id, 11372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL& top_origin_url, 11382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ThreeDAPIType requester, 11392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool* blocked) { 11402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *blocked = GpuDataManagerImpl::GetInstance()->Are3DAPIsBlocked( 11412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) top_origin_url, render_process_id_, render_view_id, requester); 11422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 11432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderMessageFilter::OnDidLose3DContext( 11452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL& top_origin_url, 11462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ThreeDAPIType /* unused */, 11472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int arb_robustness_status_code) { 11482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_MACOSX) 11492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO(kbr): this file indirectly includes npapi.h, which on Mac 11502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // OS pulls in the system OpenGL headers. For some 11512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // not-yet-investigated reason this breaks the build with the 10.6 11522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // SDK but not 10.7. For now work around this in a way compatible 11532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // with the Khronos headers. 11542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef GL_GUILTY_CONTEXT_RESET_ARB 11552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define GL_GUILTY_CONTEXT_RESET_ARB 0x8253 11562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 11572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef GL_INNOCENT_CONTEXT_RESET_ARB 11582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define GL_INNOCENT_CONTEXT_RESET_ARB 0x8254 11592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 11602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef GL_UNKNOWN_CONTEXT_RESET_ARB 11612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define GL_UNKNOWN_CONTEXT_RESET_ARB 0x8255 11622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 11632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 11652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GpuDataManagerImpl::DomainGuilt guilt; 11662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switch (arb_robustness_status_code) { 11672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case GL_GUILTY_CONTEXT_RESET_ARB: 11682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) guilt = GpuDataManagerImpl::DOMAIN_GUILT_KNOWN; 11692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 11702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case GL_UNKNOWN_CONTEXT_RESET_ARB: 11712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) guilt = GpuDataManagerImpl::DOMAIN_GUILT_UNKNOWN; 11722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 11732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default: 11742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Ignore lost contexts known to be innocent. 11752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 11762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 11772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GpuDataManagerImpl::GetInstance()->BlockDomainFrom3DAPIs( 11792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) top_origin_url, guilt); 11802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 11812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_WIN) 11832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderMessageFilter::OnPreCacheFontCharacters(const LOGFONT& font, 1184a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& str) { 1185f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // TODO(scottmg): pdf/ppapi still require the renderer to be able to precache 1186f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // GDI fonts (http://crbug.com/383227), even when using DirectWrite. 1187f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Eventually this shouldn't be added and should be moved to 1188f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // FontCacheDispatcher too. http://crbug.com/356346. 1189f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 11902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // First, comments from FontCacheDispatcher::OnPreCacheFont do apply here too. 11912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Except that for True Type fonts, 11922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // GetTextMetrics will not load the font in memory. 11932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The only way windows seem to load properly, it is to create a similar 11942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // device (like the one in which we print), then do an ExtTextOut, 11952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // as we do in the printing thread, which is sandboxed. 11962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HDC hdc = CreateEnhMetaFile(NULL, NULL, NULL, NULL); 11972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HFONT font_handle = CreateFontIndirect(&font); 11982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(NULL != font_handle); 11992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HGDIOBJ old_font = SelectObject(hdc, font_handle); 12012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(NULL != old_font); 12022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtTextOut(hdc, 0, 0, ETO_GLYPH_INDEX, 0, str.c_str(), str.length(), NULL); 12042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SelectObject(hdc, old_font); 12062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DeleteObject(font_handle); 12072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HENHMETAFILE metafile = CloseEnhMetaFile(hdc); 12092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (metafile) { 12112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DeleteEnhMetaFile(metafile); 12122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 12132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 12142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 12152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_ANDROID) 1217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void RenderMessageFilter::OnWebAudioMediaCodec( 1218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::SharedMemoryHandle encoded_data_handle, 1219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FileDescriptor pcm_output, 1220868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) uint32_t data_size) { 1221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Let a WorkerPool handle this request since the WebAudio 1222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // MediaCodec bridge is slow and can block while sending the data to 1223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // the renderer. 1224c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::WorkerPool::PostTask( 1225c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FROM_HERE, 1226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Bind(&media::WebAudioMediaCodecBridge::RunWebAudioMediaCodec, 1227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) encoded_data_handle, pcm_output, data_size), 1228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) true); 1229c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 1230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 12311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 12326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void RenderMessageFilter::OnAddNavigationTransitionData( 12336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int render_frame_id, 12346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const std::string& allowed_destination_host_pattern, 12356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const std::string& selector, 12366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const std::string& markup) { 12376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) TransitionRequestManager::GetInstance()->AddPendingTransitionRequestData( 12386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) render_process_id_, render_frame_id, allowed_destination_host_pattern, 12396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) selector, markup); 1240116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 1241116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 12421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid RenderMessageFilter::OnAllocateGpuMemoryBuffer(uint32 width, 12431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci uint32 height, 12441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci uint32 internalformat, 12451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci uint32 usage, 12461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci IPC::Message* reply) { 12471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!GpuMemoryBufferImpl::IsFormatValid(internalformat) || 12481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci !GpuMemoryBufferImpl::IsUsageValid(usage)) { 12491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GpuMemoryBufferAllocated(reply, gfx::GpuMemoryBufferHandle()); 12501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return; 12511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 12521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::CheckedNumeric<int> size = width; 12531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci size *= height; 12541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!size.IsValid()) { 12551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GpuMemoryBufferAllocated(reply, gfx::GpuMemoryBufferHandle()); 12561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return; 12571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 12581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 12591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(OS_ANDROID) 12601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // TODO(reveman): This should be moved to 12611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // GpuMemoryBufferImpl::AllocateForChildProcess and 12621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // GpuMemoryBufferImplSurfaceTexture when adding support for out-of-process 12631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // GPU service. crbug.com/368716 12641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (GpuMemoryBufferImplSurfaceTexture::IsConfigurationSupported( 12651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci internalformat, usage)) { 12661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Each surface texture is associated with a render process id. This allows 12671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // the GPU service and Java Binder IPC to verify that a renderer is not 12681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // trying to use a surface texture it doesn't own. 12691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int surface_texture_id = 12701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CompositorImpl::CreateSurfaceTexture(render_process_id_); 12711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (surface_texture_id != -1) { 12721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci gfx::GpuMemoryBufferHandle handle; 12731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci handle.type = gfx::SURFACE_TEXTURE_BUFFER; 12741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci handle.surface_texture_id = 12751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci gfx::SurfaceTextureId(surface_texture_id, render_process_id_); 12761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GpuMemoryBufferAllocated(reply, handle); 12771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return; 12781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 12791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 12801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif 12811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 12821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GpuMemoryBufferImpl::AllocateForChildProcess( 12831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci gfx::Size(width, height), 12841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci internalformat, 12851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci usage, 12861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PeerHandle(), 12871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci render_process_id_, 12881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind(&RenderMessageFilter::GpuMemoryBufferAllocated, this, reply)); 12891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 12901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 12911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid RenderMessageFilter::GpuMemoryBufferAllocated( 12921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci IPC::Message* reply, 12931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gfx::GpuMemoryBufferHandle& handle) { 12941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DCHECK_CURRENTLY_ON(BrowserThread::IO); 12951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ChildProcessHostMsg_SyncAllocateGpuMemoryBuffer::WriteReplyParams(reply, 12961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci handle); 12971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Send(reply); 12981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 12991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 13001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid RenderMessageFilter::OnDeletedGpuMemoryBuffer( 13011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci gfx::GpuMemoryBufferType type, 13021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gfx::GpuMemoryBufferId& id) { 13031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GpuMemoryBufferImpl::DeletedByChildProcess(type, id, PeerHandle()); 13041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 13051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 13065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 1307