render_frame_proxy_host.cc revision cedac228d2dd51db4b79ea1e72c7f249408ee061
1// Copyright 2014 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_proxy_host.h"
6
7#include "content/browser/frame_host/frame_tree_node.h"
8#include "content/browser/frame_host/render_frame_host_impl.h"
9#include "content/browser/site_instance_impl.h"
10#include "content/common/frame_messages.h"
11#include "ipc/ipc_message.h"
12
13namespace content {
14
15RenderFrameProxyHost::RenderFrameProxyHost(SiteInstance* site_instance,
16                                           FrameTreeNode* frame_tree_node)
17    : routing_id_(site_instance->GetProcess()->GetNextRoutingID()),
18      site_instance_(site_instance),
19      frame_tree_node_(frame_tree_node) {
20  GetProcess()->AddRoute(routing_id_, this);
21}
22
23RenderFrameProxyHost::~RenderFrameProxyHost() {
24  if (GetProcess()->HasConnection())
25    Send(new FrameMsg_DeleteProxy(routing_id_));
26
27  GetProcess()->RemoveRoute(routing_id_);
28}
29
30RenderViewHostImpl* RenderFrameProxyHost::GetRenderViewHost() {
31  if (render_frame_host_.get())
32    return render_frame_host_->render_view_host();
33  return NULL;
34}
35
36scoped_ptr<RenderFrameHostImpl> RenderFrameProxyHost::PassFrameHostOwnership() {
37  render_frame_host_->set_render_frame_proxy_host(NULL);
38  return render_frame_host_.Pass();
39}
40
41bool RenderFrameProxyHost::Send(IPC::Message *msg) {
42  // TODO(nasko): For now, RenderFrameHost uses this object to send IPC messages
43  // while swapped out. This can be removed once we don't have a swapped out
44  // state on RenderFrameHosts. See https://crbug.com/357747.
45  msg->set_routing_id(routing_id_);
46  return GetProcess()->Send(msg);
47}
48
49bool RenderFrameProxyHost::OnMessageReceived(const IPC::Message& msg) {
50  // TODO(nasko): This can be removed once we don't have a swapped out state on
51  // RenderFrameHosts. See https://crbug.com/357747.
52  if (render_frame_host_.get())
53    return render_frame_host_->OnMessageReceived(msg);
54
55  return false;
56}
57
58}  // namespace content
59