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