[go: nahoru, domu]

blob: 8e414307b40a5827f879ee74e3ab2e141084cb5c [file] [log] [blame]
nasko@chromium.org9b159a52013-10-03 17:24:551// 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
nasko@chromium.orgd4a8ca482013-10-30 21:06:405#include "content/browser/frame_host/render_frame_message_filter.h"
nasko@chromium.org9b159a52013-10-03 17:24:556
nasko@chromium.orgd4a8ca482013-10-30 21:06:407#include "content/browser/frame_host/render_frame_host_impl.h"
nasko@chromium.org9b159a52013-10-03 17:24:558#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,
creis@chromium.org58faf942014-02-20 21:03:5817 int parent_routing_id,
nasko@chromium.org9b159a52013-10-03 17:24:5518 const std::string& frame_name,
creis@chromium.org58faf942014-02-20 21:03:5819 int new_routing_id) {
nasko@chromium.org9b159a52013-10-03 17:24:5520 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
21 RenderFrameHostImpl* render_frame_host =
creis@chromium.org58faf942014-02-20 21:03:5822 RenderFrameHostImpl::FromID(process_id, parent_routing_id);
nasko@chromium.org9b159a52013-10-03 17:24:5523 // Handles the RenderFrameHost being deleted on the UI thread while
24 // processing a subframe creation message.
creis@chromium.org58faf942014-02-20 21:03:5825 if (render_frame_host)
26 render_frame_host->OnCreateChildFrame(new_routing_id, frame_name);
nasko@chromium.org9b159a52013-10-03 17:24:5527}
28
29} // namespace
30
31RenderFrameMessageFilter::RenderFrameMessageFilter(
32 int render_process_id,
33 RenderWidgetHelper* render_widget_helper)
jdduke@chromium.orgb51352a2014-02-26 05:18:0434 : BrowserMessageFilter(FrameMsgStart),
35 render_process_id_(render_process_id),
nasko@chromium.org9b159a52013-10-03 17:24:5536 render_widget_helper_(render_widget_helper) {
37}
38
39RenderFrameMessageFilter::~RenderFrameMessageFilter() {
40}
41
jam@chromium.orge44d1342014-05-16 21:29:3342bool RenderFrameMessageFilter::OnMessageReceived(const IPC::Message& message) {
nasko@chromium.org9b159a52013-10-03 17:24:5543 bool handled = true;
jam@chromium.orge44d1342014-05-16 21:29:3344 IPC_BEGIN_MESSAGE_MAP(RenderFrameMessageFilter, message)
nasko@chromium.org9b159a52013-10-03 17:24:5545 IPC_MESSAGE_HANDLER(FrameHostMsg_CreateChildFrame, OnCreateChildFrame)
46 IPC_MESSAGE_UNHANDLED(handled = false)
jam@chromium.orge44d1342014-05-16 21:29:3347 IPC_END_MESSAGE_MAP()
nasko@chromium.org9b159a52013-10-03 17:24:5548
49 return handled;
50}
51
52void RenderFrameMessageFilter::OnCreateChildFrame(
creis@chromium.org58faf942014-02-20 21:03:5853 int parent_routing_id,
nasko@chromium.org9b159a52013-10-03 17:24:5554 const std::string& frame_name,
creis@chromium.org58faf942014-02-20 21:03:5855 int* new_routing_id) {
56 *new_routing_id = render_widget_helper_->GetNextRoutingID();
nasko@chromium.org9b159a52013-10-03 17:24:5557 BrowserThread::PostTask(
58 BrowserThread::UI, FROM_HERE,
59 base::Bind(&CreateChildFrameOnUI, render_process_id_,
creis@chromium.org58faf942014-02-20 21:03:5860 parent_routing_id, frame_name, *new_routing_id));
nasko@chromium.org9b159a52013-10-03 17:24:5561}
62
63} // namespace content