14e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 24e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 34e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// found in the LICENSE file. 44e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 51e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "content/browser/frame_host/render_frame_message_filter.h" 64e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 71e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "content/browser/frame_host/render_frame_host_impl.h" 84e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "content/browser/renderer_host/render_widget_helper.h" 94e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "content/common/frame_messages.h" 104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "content/public/browser/browser_thread.h" 114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace content { 134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace { 154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void CreateChildFrameOnUI(int process_id, 17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int parent_routing_id, 184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& frame_name, 19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int new_routing_id) { 204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) RenderFrameHostImpl* render_frame_host = 22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RenderFrameHostImpl::FromID(process_id, parent_routing_id); 234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Handles the RenderFrameHost being deleted on the UI thread while 244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // processing a subframe creation message. 25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (render_frame_host) 26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) render_frame_host->OnCreateChildFrame(new_routing_id, frame_name); 274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} // namespace 304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)RenderFrameMessageFilter::RenderFrameMessageFilter( 324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int render_process_id, 334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) RenderWidgetHelper* render_widget_helper) 345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : BrowserMessageFilter(FrameMsgStart), 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) render_process_id_(render_process_id), 364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) render_widget_helper_(render_widget_helper) { 374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)RenderFrameMessageFilter::~RenderFrameMessageFilter() { 404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool RenderFrameMessageFilter::OnMessageReceived(const IPC::Message& message) { 434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bool handled = true; 44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IPC_BEGIN_MESSAGE_MAP(RenderFrameMessageFilter, message) 454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) IPC_MESSAGE_HANDLER(FrameHostMsg_CreateChildFrame, OnCreateChildFrame) 464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) IPC_MESSAGE_UNHANDLED(handled = false) 47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IPC_END_MESSAGE_MAP() 484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return handled; 504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void RenderFrameMessageFilter::OnCreateChildFrame( 53a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int parent_routing_id, 544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& frame_name, 55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int* new_routing_id) { 56a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) *new_routing_id = render_widget_helper_->GetNextRoutingID(); 574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) BrowserThread::PostTask( 584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) BrowserThread::UI, FROM_HERE, 594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::Bind(&CreateChildFrameOnUI, render_process_id_, 60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) parent_routing_id, frame_name, *new_routing_id)); 614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} // namespace content 64