render_frame_message_filter.cc revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
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 12namespace content { 13 14namespace { 15 16void CreateChildFrameOnUI(int process_id, 17 int parent_render_frame_id, 18 int64 parent_frame_id, 19 int64 frame_id, 20 const std::string& frame_name, 21 int new_render_frame_id) { 22 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 23 RenderFrameHostImpl* render_frame_host = 24 RenderFrameHostImpl::FromID(process_id, parent_render_frame_id); 25 // Handles the RenderFrameHost being deleted on the UI thread while 26 // processing a subframe creation message. 27 if (render_frame_host) { 28 render_frame_host->OnCreateChildFrame(new_render_frame_id, 29 parent_frame_id, frame_id, 30 frame_name); 31 } 32} 33 34} // namespace 35 36RenderFrameMessageFilter::RenderFrameMessageFilter( 37 int render_process_id, 38 RenderWidgetHelper* render_widget_helper) 39 : BrowserMessageFilter(FrameMsgStart), 40 render_process_id_(render_process_id), 41 render_widget_helper_(render_widget_helper) { 42} 43 44RenderFrameMessageFilter::~RenderFrameMessageFilter() { 45} 46 47bool RenderFrameMessageFilter::OnMessageReceived(const IPC::Message& message, 48 bool* message_was_ok) { 49 bool handled = true; 50 IPC_BEGIN_MESSAGE_MAP_EX(RenderFrameMessageFilter, message, *message_was_ok) 51 IPC_MESSAGE_HANDLER(FrameHostMsg_CreateChildFrame, OnCreateChildFrame) 52 IPC_MESSAGE_UNHANDLED(handled = false) 53 IPC_END_MESSAGE_MAP_EX() 54 55 return handled; 56} 57 58void RenderFrameMessageFilter::OnCreateChildFrame( 59 int parent_render_frame_id, 60 int64 parent_frame_id, 61 int64 frame_id, 62 const std::string& frame_name, 63 int* new_render_frame_id) { 64 *new_render_frame_id = render_widget_helper_->GetNextRoutingID(); 65 BrowserThread::PostTask( 66 BrowserThread::UI, FROM_HERE, 67 base::Bind(&CreateChildFrameOnUI, render_process_id_, 68 parent_render_frame_id, parent_frame_id, frame_id, frame_name, 69 *new_render_frame_id)); 70} 71 72} // namespace content 73