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 |