• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "content/browser/frame_host/render_frame_message_filter.h"
6 
7 #include "content/browser/frame_host/render_frame_host_impl.h"
8 #include "content/browser/renderer_host/render_widget_helper.h"
9 #include "content/common/frame_messages.h"
10 #include "content/public/browser/browser_thread.h"
11 
12 namespace content {
13 
14 namespace {
15 
CreateChildFrameOnUI(int process_id,int parent_routing_id,const std::string & frame_name,int new_routing_id)16 void CreateChildFrameOnUI(int process_id,
17                           int parent_routing_id,
18                           const std::string& frame_name,
19                           int new_routing_id) {
20   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
21   RenderFrameHostImpl* render_frame_host =
22       RenderFrameHostImpl::FromID(process_id, parent_routing_id);
23   // Handles the RenderFrameHost being deleted on the UI thread while
24   // processing a subframe creation message.
25   if (render_frame_host)
26     render_frame_host->OnCreateChildFrame(new_routing_id, frame_name);
27 }
28 
29 }  // namespace
30 
RenderFrameMessageFilter(int render_process_id,RenderWidgetHelper * render_widget_helper)31 RenderFrameMessageFilter::RenderFrameMessageFilter(
32     int render_process_id,
33     RenderWidgetHelper* render_widget_helper)
34     : BrowserMessageFilter(FrameMsgStart),
35       render_process_id_(render_process_id),
36       render_widget_helper_(render_widget_helper) {
37 }
38 
~RenderFrameMessageFilter()39 RenderFrameMessageFilter::~RenderFrameMessageFilter() {
40 }
41 
OnMessageReceived(const IPC::Message & message)42 bool RenderFrameMessageFilter::OnMessageReceived(const IPC::Message& message) {
43   bool handled = true;
44   IPC_BEGIN_MESSAGE_MAP(RenderFrameMessageFilter, message)
45     IPC_MESSAGE_HANDLER(FrameHostMsg_CreateChildFrame, OnCreateChildFrame)
46     IPC_MESSAGE_UNHANDLED(handled = false)
47   IPC_END_MESSAGE_MAP()
48 
49   return handled;
50 }
51 
OnCreateChildFrame(int parent_routing_id,const std::string & frame_name,int * new_routing_id)52 void RenderFrameMessageFilter::OnCreateChildFrame(
53     int parent_routing_id,
54     const std::string& frame_name,
55     int* new_routing_id) {
56   *new_routing_id = render_widget_helper_->GetNextRoutingID();
57   BrowserThread::PostTask(
58       BrowserThread::UI, FROM_HERE,
59       base::Bind(&CreateChildFrameOnUI, render_process_id_,
60                  parent_routing_id, frame_name, *new_routing_id));
61 }
62 
63 }  // namespace content
64