Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(390)

Side by Side Diff: content/renderer/render_frame_proxy.cc

Issue 241223002: Start using RenderFrameProxyHost objects. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Moar fixes. Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « content/renderer/render_frame_proxy.h ('k') | content/renderer/render_thread_impl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/render_frame_proxy.h" 5 #include "content/renderer/render_frame_proxy.h"
6 6
7 #include <map> 7 #include <map>
8 8
9 #include "base/lazy_instance.h" 9 #include "base/lazy_instance.h"
10 #include "content/common/frame_messages.h" 10 #include "content/common/frame_messages.h"
11 #include "content/common/swapped_out_messages.h" 11 #include "content/common/swapped_out_messages.h"
12 #include "content/renderer/child_frame_compositing_helper.h" 12 #include "content/renderer/child_frame_compositing_helper.h"
13 #include "content/renderer/render_frame_impl.h" 13 #include "content/renderer/render_frame_impl.h"
14 #include "content/renderer/render_thread_impl.h" 14 #include "content/renderer/render_thread_impl.h"
15 #include "content/renderer/render_view_impl.h" 15 #include "content/renderer/render_view_impl.h"
16 #include "third_party/WebKit/public/web/WebView.h" 16 #include "third_party/WebKit/public/web/WebView.h"
17 17
18 #include "ipc/ipc_logging.h"
19 #include "ipc/ipc_message_utils.h"
20
18 namespace content { 21 namespace content {
19 22
20 namespace { 23 namespace {
21 24
22 typedef std::map<int, RenderFrameProxy*> RoutingIDProxyMap; 25 typedef std::map<int, RenderFrameProxy*> RoutingIDProxyMap;
23 static base::LazyInstance<RoutingIDProxyMap> g_routing_id_proxy_map = 26 static base::LazyInstance<RoutingIDProxyMap> g_routing_id_proxy_map =
24 LAZY_INSTANCE_INITIALIZER; 27 LAZY_INSTANCE_INITIALIZER;
25 28
29 typedef std::map<blink::WebFrame*, RenderFrameProxy*> FrameMap;
30 base::LazyInstance<FrameMap> g_frame_map = LAZY_INSTANCE_INITIALIZER;
31
26 } // namespace 32 } // namespace
27 33
28 // static 34 // static
29 RenderFrameProxy* RenderFrameProxy::CreateFrameProxy(int routing_id, 35 RenderFrameProxy* RenderFrameProxy::CreateProxyForFrame(int routing_id,
30 int frame_routing_id) { 36 int frame_routing_id) {
31 DCHECK_NE(routing_id, MSG_ROUTING_NONE); 37 CHECK_NE(routing_id, MSG_ROUTING_NONE);
38 CHECK_NE(frame_routing_id, MSG_ROUTING_NONE);
39
40 LOG(ERROR) << "RFP::CreateProxyForFrame: 2 param version: "
41 << " routing_id:" << routing_id << ", frame:" << frame_routing_id;
42
32 RenderFrameProxy* proxy = new RenderFrameProxy(routing_id, frame_routing_id); 43 RenderFrameProxy* proxy = new RenderFrameProxy(routing_id, frame_routing_id);
44
45 RenderFrameImpl* rf = RenderFrameImpl::FromRoutingID(frame_routing_id);
46 CHECK(rf);
47 LOG(ERROR) << "RFP::CreateProxyForFrame: rf: " << rf;
48 proxy->set_render_view(rf->render_view());
49
50 if (rf->GetWebFrame()->parent() &&
51 rf->GetWebFrame()->parent()->isWebRemoteFrame()) {
52 proxy->frame_ =
53 rf->GetWebFrame()->parent()->toWebRemoteFrame()->createRemoteChild(
54 "", NULL);
55 } else {
56 proxy->frame_ = blink::WebRemoteFrame::create(NULL);
57 }
58
59 std::pair<FrameMap::iterator, bool> result = g_frame_map.Get().insert(
60 std::make_pair(proxy->frame_, proxy));
61 CHECK(result.second) << "Inserting a duplicate item.";
62
33 return proxy; 63 return proxy;
34 } 64 }
35 65
66 RenderFrameProxy* RenderFrameProxy::CreateFrameProxy(
67 int routing_id,
68 int parent_routing_id,
69 int render_view_routing_id) {
70 LOG(ERROR) << "RFP::CreateFrameProxy: "
71 << routing_id << ":" << parent_routing_id << ":" << render_view_routing_id;
72
73 RenderViewImpl* rv = NULL;
74 RenderFrameProxy* proxy = new RenderFrameProxy(routing_id, MSG_ROUTING_NONE);
75
76 if (parent_routing_id == MSG_ROUTING_NONE) {
77 rv = RenderViewImpl::FromRoutingID(render_view_routing_id);
78 proxy->frame_ = blink::WebRemoteFrame::create(NULL);
79 LOG(ERROR) << "RFP::CreateFrameProxy: top frame";
80 rv->webview()->setMainFrame(proxy->frame_);
81 } else {
82 RenderFrameProxy* parent = RenderFrameProxy::FromRoutingID(
83 parent_routing_id);
84 CHECK(parent);
85 LOG(ERROR) << "RFP::CreateFrameProxy: RFP: " << parent;
86 proxy->frame_ = parent->GetWebFrame()->createRemoteChild("", NULL);
87 rv = parent->render_view();
88 }
89
90 std::pair<FrameMap::iterator, bool> result = g_frame_map.Get().insert(
91 std::make_pair(proxy->frame_, proxy));
92 CHECK(result.second) << "Inserting a duplicate item.";
93
94 CHECK(rv);
95 proxy->set_render_view(rv);
96
97 return proxy;
98 }
99
36 // static 100 // static
37 RenderFrameProxy* RenderFrameProxy::FromRoutingID(int32 routing_id) { 101 RenderFrameProxy* RenderFrameProxy::FromRoutingID(int32 routing_id) {
38 RoutingIDProxyMap* proxies = g_routing_id_proxy_map.Pointer(); 102 RoutingIDProxyMap* proxies = g_routing_id_proxy_map.Pointer();
39 RoutingIDProxyMap::iterator it = proxies->find(routing_id); 103 RoutingIDProxyMap::iterator it = proxies->find(routing_id);
40 return it == proxies->end() ? NULL : it->second; 104 return it == proxies->end() ? NULL : it->second;
41 } 105 }
42 106
107 // static
108 RenderFrameProxy* RenderFrameProxy::FromWebFrame(blink::WebFrame* web_frame) {
109 FrameMap::iterator iter = g_frame_map.Get().find(web_frame);
110 if (iter != g_frame_map.Get().end())
111 return iter->second;
112 return NULL;
113 }
114
43 RenderFrameProxy::RenderFrameProxy(int routing_id, int frame_routing_id) 115 RenderFrameProxy::RenderFrameProxy(int routing_id, int frame_routing_id)
44 : routing_id_(routing_id), 116 : routing_id_(routing_id),
45 frame_routing_id_(frame_routing_id) { 117 frame_routing_id_(frame_routing_id) {
46 std::pair<RoutingIDProxyMap::iterator, bool> result = 118 std::pair<RoutingIDProxyMap::iterator, bool> result =
47 g_routing_id_proxy_map.Get().insert(std::make_pair(routing_id_, this)); 119 g_routing_id_proxy_map.Get().insert(std::make_pair(routing_id_, this));
48 CHECK(result.second) << "Inserting a duplicate item."; 120 CHECK(result.second) << "Inserting a duplicate item.";
49 RenderThread::Get()->AddRoute(routing_id_, this); 121 RenderThread::Get()->AddRoute(routing_id_, this);
50 122
51 render_frame_ = RenderFrameImpl::FromRoutingID(frame_routing_id); 123 LOG(ERROR) << "RFP::RFP[" << this << "]:"
52 CHECK(render_frame_); 124 << " routing_id:" << routing_id_ << ", for frame:" << frame_routing_id;
53 render_frame_->render_view()->RegisterRenderFrameProxy(this); 125
126 if (frame_routing_id_ != MSG_ROUTING_NONE) {
127 render_frame_ = RenderFrameImpl::FromRoutingID(frame_routing_id);
128 CHECK(render_frame_);
129 render_frame_->render_view()->RegisterRenderFrameProxy(this);
130 }
54 } 131 }
55 132
56 RenderFrameProxy::~RenderFrameProxy() { 133 RenderFrameProxy::~RenderFrameProxy() {
57 render_frame_->render_view()->UnregisterRenderFrameProxy(this); 134 LOG(ERROR) << "RFP::~RFP[" << this << "]:"
135 << " routing_id:" << routing_id_;
136 if (render_frame_)
137 render_frame_->render_view()->UnregisterRenderFrameProxy(this);
138
139 FrameMap::iterator it = g_frame_map.Get().find(frame_);
140 CHECK(it != g_frame_map.Get().end());
141 CHECK_EQ(it->second, this);
142 g_frame_map.Get().erase(it);
143
58 RenderThread::Get()->RemoveRoute(routing_id_); 144 RenderThread::Get()->RemoveRoute(routing_id_);
59 g_routing_id_proxy_map.Get().erase(routing_id_); 145 g_routing_id_proxy_map.Get().erase(routing_id_);
60 } 146 }
61 147
62 blink::WebFrame* RenderFrameProxy::GetWebFrame() {
63 return render_frame_->GetWebFrame();
64 }
65
66 void RenderFrameProxy::DidCommitCompositorFrame() { 148 void RenderFrameProxy::DidCommitCompositorFrame() {
67 if (compositing_helper_) 149 if (compositing_helper_)
68 compositing_helper_->DidCommitCompositorFrame(); 150 compositing_helper_->DidCommitCompositorFrame();
69 } 151 }
70 152
71 bool RenderFrameProxy::OnMessageReceived(const IPC::Message& msg) { 153 bool RenderFrameProxy::OnMessageReceived(const IPC::Message& msg) {
154 IPC::LogData data;
155 IPC::GenerateLogData("", msg, &data, true);
156
157 LOG(ERROR) << "RFP[" << this << "]::OnMessageReceived:"
158 << " msg:" << data.message_name
159 << " render_frame_:" << render_frame_;
160 //<< " parent:" << frame_->parent();
161
72 bool handled = true; 162 bool handled = true;
73 IPC_BEGIN_MESSAGE_MAP(RenderFrameProxy, msg) 163 IPC_BEGIN_MESSAGE_MAP(RenderFrameProxy, msg)
74 IPC_MESSAGE_HANDLER(FrameMsg_DeleteProxy, OnDeleteProxy) 164 IPC_MESSAGE_HANDLER(FrameMsg_DeleteProxy, OnDeleteProxy)
75 IPC_MESSAGE_HANDLER(FrameMsg_ChildFrameProcessGone, OnChildFrameProcessGone) 165 IPC_MESSAGE_HANDLER(FrameMsg_ChildFrameProcessGone, OnChildFrameProcessGone)
76 IPC_MESSAGE_HANDLER(FrameMsg_BuffersSwapped, OnBuffersSwapped) 166 IPC_MESSAGE_HANDLER(FrameMsg_BuffersSwapped, OnBuffersSwapped)
77 IPC_MESSAGE_HANDLER_GENERIC(FrameMsg_CompositorFrameSwapped, 167 IPC_MESSAGE_HANDLER_GENERIC(FrameMsg_CompositorFrameSwapped,
78 OnCompositorFrameSwapped(msg)) 168 OnCompositorFrameSwapped(msg))
79 IPC_MESSAGE_UNHANDLED(handled = false) 169 IPC_MESSAGE_UNHANDLED(handled = false)
80 IPC_END_MESSAGE_MAP() 170 IPC_END_MESSAGE_MAP()
81 171
82 if (!handled) 172 if (!handled && render_frame_)
83 return render_frame_->OnMessageReceived(msg); 173 return render_frame_->OnMessageReceived(msg);
84 174
85 return handled; 175 return handled;
86 } 176 }
87 177
88 bool RenderFrameProxy::Send(IPC::Message* message) { 178 bool RenderFrameProxy::Send(IPC::Message* message) {
89 if (!SwappedOutMessages::CanSendWhileSwappedOut(message)) { 179 if (!SwappedOutMessages::CanSendWhileSwappedOut(message)) {
90 delete message; 180 delete message;
91 return false; 181 return false;
92 } 182 }
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 compositing_helper_->EnableCompositing(true); 229 compositing_helper_->EnableCompositing(true);
140 } 230 }
141 compositing_helper_->OnCompositorFrameSwapped(frame.Pass(), 231 compositing_helper_->OnCompositorFrameSwapped(frame.Pass(),
142 param.a.producing_route_id, 232 param.a.producing_route_id,
143 param.a.output_surface_id, 233 param.a.output_surface_id,
144 param.a.producing_host_id, 234 param.a.producing_host_id,
145 param.a.shared_memory_handle); 235 param.a.shared_memory_handle);
146 } 236 }
147 237
148 } // namespace 238 } // namespace
OLDNEW
« no previous file with comments | « content/renderer/render_frame_proxy.h ('k') | content/renderer/render_thread_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698