| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/renderer_host/render_message_filter.h" | 5 #include "content/browser/renderer_host/render_message_filter.h" |
| 6 | 6 |
| 7 #include <errno.h> | 7 #include <errno.h> |
| 8 #include <string.h> | 8 #include <string.h> |
| 9 #include <map> | 9 #include <map> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 26 matching lines...) Expand all Loading... |
| 37 #include "content/browser/renderer_host/pepper/pepper_security_helper.h" | 37 #include "content/browser/renderer_host/pepper/pepper_security_helper.h" |
| 38 #include "content/browser/renderer_host/render_process_host_impl.h" | 38 #include "content/browser/renderer_host/render_process_host_impl.h" |
| 39 #include "content/browser/renderer_host/render_view_host_delegate.h" | 39 #include "content/browser/renderer_host/render_view_host_delegate.h" |
| 40 #include "content/browser/renderer_host/render_widget_helper.h" | 40 #include "content/browser/renderer_host/render_widget_helper.h" |
| 41 #include "content/browser/resource_context_impl.h" | 41 #include "content/browser/resource_context_impl.h" |
| 42 #include "content/common/cache_storage/cache_storage_types.h" | 42 #include "content/common/cache_storage/cache_storage_types.h" |
| 43 #include "content/common/child_process_host_impl.h" | 43 #include "content/common/child_process_host_impl.h" |
| 44 #include "content/common/child_process_messages.h" | 44 #include "content/common/child_process_messages.h" |
| 45 #include "content/common/content_constants_internal.h" | 45 #include "content/common/content_constants_internal.h" |
| 46 #include "content/common/host_shared_bitmap_manager.h" | 46 #include "content/common/host_shared_bitmap_manager.h" |
| 47 #include "content/common/render_message_filter.mojom.h" |
| 47 #include "content/common/render_process_messages.h" | 48 #include "content/common/render_process_messages.h" |
| 48 #include "content/common/view_messages.h" | 49 #include "content/common/view_messages.h" |
| 49 #include "content/public/browser/browser_child_process_host.h" | 50 #include "content/public/browser/browser_child_process_host.h" |
| 50 #include "content/public/browser/browser_context.h" | 51 #include "content/public/browser/browser_context.h" |
| 51 #include "content/public/browser/browser_thread.h" | 52 #include "content/public/browser/browser_thread.h" |
| 52 #include "content/public/browser/content_browser_client.h" | 53 #include "content/public/browser/content_browser_client.h" |
| 53 #include "content/public/browser/resource_context.h" | 54 #include "content/public/browser/resource_context.h" |
| 54 #include "content/public/browser/user_metrics.h" | 55 #include "content/public/browser/user_metrics.h" |
| 55 #include "content/public/common/content_switches.h" | 56 #include "content/public/common/content_switches.h" |
| 56 #include "content/public/common/context_menu_params.h" | 57 #include "content/public/common/context_menu_params.h" |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 159 BrowserGpuMemoryBufferManager::current(); | 160 BrowserGpuMemoryBufferManager::current(); |
| 160 if (gpu_memory_buffer_manager) | 161 if (gpu_memory_buffer_manager) |
| 161 gpu_memory_buffer_manager->ProcessRemoved(PeerHandle(), render_process_id_); | 162 gpu_memory_buffer_manager->ProcessRemoved(PeerHandle(), render_process_id_); |
| 162 HostDiscardableSharedMemoryManager::current()->ProcessRemoved( | 163 HostDiscardableSharedMemoryManager::current()->ProcessRemoved( |
| 163 render_process_id_); | 164 render_process_id_); |
| 164 } | 165 } |
| 165 | 166 |
| 166 bool RenderMessageFilter::OnMessageReceived(const IPC::Message& message) { | 167 bool RenderMessageFilter::OnMessageReceived(const IPC::Message& message) { |
| 167 bool handled = true; | 168 bool handled = true; |
| 168 IPC_BEGIN_MESSAGE_MAP(RenderMessageFilter, message) | 169 IPC_BEGIN_MESSAGE_MAP(RenderMessageFilter, message) |
| 169 IPC_MESSAGE_HANDLER(ViewHostMsg_CreateWindow, OnCreateWindow) | |
| 170 IPC_MESSAGE_HANDLER(ViewHostMsg_CreateWidget, OnCreateWidget) | 170 IPC_MESSAGE_HANDLER(ViewHostMsg_CreateWidget, OnCreateWidget) |
| 171 IPC_MESSAGE_HANDLER(ViewHostMsg_CreateFullscreenWidget, | 171 IPC_MESSAGE_HANDLER(ViewHostMsg_CreateFullscreenWidget, |
| 172 OnCreateFullscreenWidget) | 172 OnCreateFullscreenWidget) |
| 173 #if defined(OS_MACOSX) | 173 #if defined(OS_MACOSX) |
| 174 // On Mac, the IPCs ViewHostMsg_SwapCompositorFrame, ViewHostMsg_UpdateRect, | 174 // On Mac, the IPCs ViewHostMsg_SwapCompositorFrame, ViewHostMsg_UpdateRect, |
| 175 // and GpuCommandBufferMsg_SwapBuffersCompleted need to be handled in a | 175 // and GpuCommandBufferMsg_SwapBuffersCompleted need to be handled in a |
| 176 // nested message loop during resize. | 176 // nested message loop during resize. |
| 177 IPC_MESSAGE_HANDLER_GENERIC( | 177 IPC_MESSAGE_HANDLER_GENERIC( |
| 178 ViewHostMsg_SwapCompositorFrame, | 178 ViewHostMsg_SwapCompositorFrame, |
| 179 ResizeHelperPostMsgToUIThread(render_process_id_, message)) | 179 ResizeHelperPostMsgToUIThread(render_process_id_, message)) |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 233 const_cast<RenderMessageFilter*>(this)->resource_context_ = nullptr; | 233 const_cast<RenderMessageFilter*>(this)->resource_context_ = nullptr; |
| 234 BrowserThread::DeleteOnIOThread::Destruct(this); | 234 BrowserThread::DeleteOnIOThread::Destruct(this); |
| 235 } | 235 } |
| 236 | 236 |
| 237 void RenderMessageFilter::OverrideThreadForMessage(const IPC::Message& message, | 237 void RenderMessageFilter::OverrideThreadForMessage(const IPC::Message& message, |
| 238 BrowserThread::ID* thread) { | 238 BrowserThread::ID* thread) { |
| 239 if (message.type() == ViewHostMsg_MediaLogEvents::ID) | 239 if (message.type() == ViewHostMsg_MediaLogEvents::ID) |
| 240 *thread = BrowserThread::UI; | 240 *thread = BrowserThread::UI; |
| 241 } | 241 } |
| 242 | 242 |
| 243 void RenderMessageFilter::OnCreateWindow( | |
| 244 const ViewHostMsg_CreateWindow_Params& params, | |
| 245 ViewHostMsg_CreateWindow_Reply* reply) { | |
| 246 bool no_javascript_access; | |
| 247 | |
| 248 bool can_create_window = | |
| 249 GetContentClient()->browser()->CanCreateWindow( | |
| 250 params.opener_url, | |
| 251 params.opener_top_level_frame_url, | |
| 252 params.opener_security_origin, | |
| 253 params.window_container_type, | |
| 254 params.target_url, | |
| 255 params.referrer, | |
| 256 params.frame_name, | |
| 257 params.disposition, | |
| 258 params.features, | |
| 259 params.user_gesture, | |
| 260 params.opener_suppressed, | |
| 261 resource_context_, | |
| 262 render_process_id_, | |
| 263 params.opener_id, | |
| 264 params.opener_render_frame_id, | |
| 265 &no_javascript_access); | |
| 266 | |
| 267 if (!can_create_window) { | |
| 268 reply->route_id = MSG_ROUTING_NONE; | |
| 269 reply->main_frame_route_id = MSG_ROUTING_NONE; | |
| 270 reply->main_frame_widget_route_id = MSG_ROUTING_NONE; | |
| 271 reply->cloned_session_storage_namespace_id = 0; | |
| 272 return; | |
| 273 } | |
| 274 | |
| 275 // This will clone the sessionStorage for namespace_id_to_clone. | |
| 276 scoped_refptr<SessionStorageNamespaceImpl> cloned_namespace = | |
| 277 new SessionStorageNamespaceImpl(dom_storage_context_.get(), | |
| 278 params.session_storage_namespace_id); | |
| 279 reply->cloned_session_storage_namespace_id = cloned_namespace->id(); | |
| 280 | |
| 281 render_widget_helper_->CreateNewWindow( | |
| 282 params, no_javascript_access, PeerHandle(), &reply->route_id, | |
| 283 &reply->main_frame_route_id, &reply->main_frame_widget_route_id, | |
| 284 cloned_namespace.get()); | |
| 285 } | |
| 286 | |
| 287 void RenderMessageFilter::OnCreateWidget(int opener_id, | 243 void RenderMessageFilter::OnCreateWidget(int opener_id, |
| 288 blink::WebPopupType popup_type, | 244 blink::WebPopupType popup_type, |
| 289 int* route_id) { | 245 int* route_id) { |
| 290 render_widget_helper_->CreateNewWidget(opener_id, popup_type, route_id); | 246 render_widget_helper_->CreateNewWidget(opener_id, popup_type, route_id); |
| 291 } | 247 } |
| 292 | 248 |
| 293 void RenderMessageFilter::OnCreateFullscreenWidget(int opener_id, | 249 void RenderMessageFilter::OnCreateFullscreenWidget(int opener_id, |
| 294 int* route_id) { | 250 int* route_id) { |
| 295 render_widget_helper_->CreateNewFullscreenWidget(opener_id, route_id); | 251 render_widget_helper_->CreateNewFullscreenWidget(opener_id, route_id); |
| 296 } | 252 } |
| 297 | 253 |
| 298 void RenderMessageFilter::GenerateRoutingID( | 254 void RenderMessageFilter::GenerateRoutingID( |
| 299 const GenerateRoutingIDCallback& callback) { | 255 const GenerateRoutingIDCallback& callback) { |
| 300 callback.Run(render_widget_helper_->GetNextRoutingID()); | 256 callback.Run(render_widget_helper_->GetNextRoutingID()); |
| 301 } | 257 } |
| 302 | 258 |
| 259 void RenderMessageFilter::CreateWindow(mojom::CreateWindowParamsPtr params, |
| 260 const CreateWindowCallback& callback) { |
| 261 bool no_javascript_access; |
| 262 bool can_create_window = |
| 263 GetContentClient()->browser()->CanCreateWindow( |
| 264 params->opener_url, |
| 265 params->opener_top_level_frame_url, |
| 266 params->opener_security_origin, |
| 267 params->window_container_type, |
| 268 params->target_url, |
| 269 params->referrer, |
| 270 params->frame_name, |
| 271 params->disposition, |
| 272 params->features, |
| 273 params->user_gesture, |
| 274 params->opener_suppressed, |
| 275 resource_context_, |
| 276 render_process_id_, |
| 277 params->opener_id, |
| 278 params->opener_render_frame_id, |
| 279 &no_javascript_access); |
| 280 |
| 281 mojom::CreateWindowReplyPtr reply = mojom::CreateWindowReply::New(); |
| 282 if (!can_create_window) { |
| 283 reply->route_id = MSG_ROUTING_NONE; |
| 284 reply->main_frame_route_id = MSG_ROUTING_NONE; |
| 285 reply->main_frame_widget_route_id = MSG_ROUTING_NONE; |
| 286 reply->cloned_session_storage_namespace_id = 0; |
| 287 return callback.Run(std::move(reply)); |
| 288 } |
| 289 |
| 290 // This will clone the sessionStorage for namespace_id_to_clone. |
| 291 scoped_refptr<SessionStorageNamespaceImpl> cloned_namespace = |
| 292 new SessionStorageNamespaceImpl(dom_storage_context_.get(), |
| 293 params->session_storage_namespace_id); |
| 294 reply->cloned_session_storage_namespace_id = cloned_namespace->id(); |
| 295 |
| 296 render_widget_helper_->CreateNewWindow( |
| 297 std::move(params), no_javascript_access, PeerHandle(), &reply->route_id, |
| 298 &reply->main_frame_route_id, &reply->main_frame_widget_route_id, |
| 299 cloned_namespace.get()); |
| 300 callback.Run(std::move(reply)); |
| 301 } |
| 302 |
| 303 #if defined(OS_MACOSX) | 303 #if defined(OS_MACOSX) |
| 304 | 304 |
| 305 void RenderMessageFilter::OnLoadFont(const FontDescriptor& font, | 305 void RenderMessageFilter::OnLoadFont(const FontDescriptor& font, |
| 306 IPC::Message* reply_msg) { | 306 IPC::Message* reply_msg) { |
| 307 FontLoader::Result* result = new FontLoader::Result; | 307 FontLoader::Result* result = new FontLoader::Result; |
| 308 | 308 |
| 309 BrowserThread::PostTaskAndReply( | 309 BrowserThread::PostTaskAndReply( |
| 310 BrowserThread::FILE, FROM_HERE, | 310 BrowserThread::FILE, FROM_HERE, |
| 311 base::Bind(&FontLoader::LoadFont, font, result), | 311 base::Bind(&FontLoader::LoadFont, font, result), |
| 312 base::Bind(&RenderMessageFilter::SendLoadFontReply, this, reply_msg, | 312 base::Bind(&RenderMessageFilter::SendLoadFontReply, this, reply_msg, |
| (...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 679 void RenderMessageFilter::OnDeletedGpuMemoryBuffer( | 679 void RenderMessageFilter::OnDeletedGpuMemoryBuffer( |
| 680 gfx::GpuMemoryBufferId id, | 680 gfx::GpuMemoryBufferId id, |
| 681 const gpu::SyncToken& sync_token) { | 681 const gpu::SyncToken& sync_token) { |
| 682 DCHECK(BrowserGpuMemoryBufferManager::current()); | 682 DCHECK(BrowserGpuMemoryBufferManager::current()); |
| 683 | 683 |
| 684 BrowserGpuMemoryBufferManager::current()->ChildProcessDeletedGpuMemoryBuffer( | 684 BrowserGpuMemoryBufferManager::current()->ChildProcessDeletedGpuMemoryBuffer( |
| 685 id, PeerHandle(), render_process_id_, sync_token); | 685 id, PeerHandle(), render_process_id_, sync_token); |
| 686 } | 686 } |
| 687 | 687 |
| 688 } // namespace content | 688 } // namespace content |
| OLD | NEW |