OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 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_impl.h" | 5 #include "content/renderer/render_frame_impl.h" |
6 | 6 |
7 #include <map> | 7 #include <map> |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
108 RenderFrameImpl* RenderFrameImpl::Create(RenderViewImpl* render_view, | 108 RenderFrameImpl* RenderFrameImpl::Create(RenderViewImpl* render_view, |
109 int32 routing_id) { | 109 int32 routing_id) { |
110 DCHECK(routing_id != MSG_ROUTING_NONE); | 110 DCHECK(routing_id != MSG_ROUTING_NONE); |
111 | 111 |
112 if (g_create_render_frame_impl) | 112 if (g_create_render_frame_impl) |
113 return g_create_render_frame_impl(render_view, routing_id); | 113 return g_create_render_frame_impl(render_view, routing_id); |
114 else | 114 else |
115 return new RenderFrameImpl(render_view, routing_id); | 115 return new RenderFrameImpl(render_view, routing_id); |
116 } | 116 } |
117 | 117 |
118 RenderFrameImpl* RenderFrameImpl::FindByWebFrame(blink::WebFrame* web_frame) { | 118 // static |
119 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kSitePerProcess)) { | 119 RenderFrame* RenderFrame::FromWebFrame(blink::WebFrame* web_frame) { |
120 FrameMap::iterator iter = g_frame_map.Get().find(web_frame); | 120 return RenderFrameImpl::FromWebFrame(web_frame); |
121 if (iter != g_frame_map.Get().end()) | 121 } |
122 return iter->second; | |
123 } | |
124 | 122 |
| 123 RenderFrameImpl* RenderFrameImpl::FromWebFrame(blink::WebFrame* web_frame) { |
| 124 FrameMap::iterator iter = g_frame_map.Get().find(web_frame); |
| 125 if (iter != g_frame_map.Get().end()) |
| 126 return iter->second; |
125 return NULL; | 127 return NULL; |
126 } | 128 } |
127 | 129 |
128 // static | 130 // static |
129 void RenderFrameImpl::InstallCreateHook( | 131 void RenderFrameImpl::InstallCreateHook( |
130 RenderFrameImpl* (*create_render_frame_impl)(RenderViewImpl*, int32)) { | 132 RenderFrameImpl* (*create_render_frame_impl)(RenderViewImpl*, int32)) { |
131 CHECK(!g_create_render_frame_impl); | 133 CHECK(!g_create_render_frame_impl); |
132 g_create_render_frame_impl = create_render_frame_impl; | 134 g_create_render_frame_impl = create_render_frame_impl; |
133 } | 135 } |
134 | 136 |
135 // RenderFrameImpl ---------------------------------------------------------- | 137 // RenderFrameImpl ---------------------------------------------------------- |
136 RenderFrameImpl::RenderFrameImpl(RenderViewImpl* render_view, int routing_id) | 138 RenderFrameImpl::RenderFrameImpl(RenderViewImpl* render_view, int routing_id) |
137 : frame_(NULL), | 139 : frame_(NULL), |
138 render_view_(render_view), | 140 render_view_(render_view), |
139 routing_id_(routing_id), | 141 routing_id_(routing_id), |
140 is_swapped_out_(false), | 142 is_swapped_out_(false), |
141 is_detaching_(false), | 143 is_detaching_(false), |
142 cookie_jar_(this) { | 144 cookie_jar_(this) { |
143 RenderThread::Get()->AddRoute(routing_id_, this); | 145 RenderThread::Get()->AddRoute(routing_id_, this); |
144 #if defined(ENABLE_PLUGINS) | |
145 new PepperBrowserConnection(this); | |
146 #endif | |
147 new SharedWorkerRepository(this); | |
148 | |
149 GetContentClient()->renderer()->RenderFrameCreated(this); | |
150 } | 146 } |
151 | 147 |
152 RenderFrameImpl::~RenderFrameImpl() { | 148 RenderFrameImpl::~RenderFrameImpl() { |
153 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, RenderFrameGone()); | 149 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, RenderFrameGone()); |
154 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, OnDestruct()); | 150 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, OnDestruct()); |
155 RenderThread::Get()->RemoveRoute(routing_id_); | 151 RenderThread::Get()->RemoveRoute(routing_id_); |
156 } | 152 } |
157 | 153 |
158 // TODO(nasko): Overload the delete operator to overwrite the freed | 154 // TODO(nasko): Overload the delete operator to overwrite the freed |
159 // RenderFrameImpl object and help detect potential use-after-free bug. | 155 // RenderFrameImpl object and help detect potential use-after-free bug. |
160 // See https://crbug.com/245126#c34. | 156 // See https://crbug.com/245126#c34. |
161 void RenderFrameImpl::operator delete(void* ptr) { | 157 void RenderFrameImpl::operator delete(void* ptr) { |
162 memset(ptr, 0xAF, sizeof(RenderFrameImpl)); | 158 memset(ptr, 0xAF, sizeof(RenderFrameImpl)); |
163 } | 159 } |
164 | 160 |
165 void RenderFrameImpl::MainWebFrameCreated(blink::WebFrame* frame) { | |
166 std::pair<FrameMap::iterator, bool> result = g_frame_map.Get().insert( | |
167 std::make_pair(frame, this)); | |
168 CHECK(result.second) << "Inserting a duplicate item."; | |
169 | |
170 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, | |
171 WebFrameCreated(frame)); | |
172 } | |
173 | |
174 void RenderFrameImpl::SetWebFrame(blink::WebFrame* web_frame) { | 161 void RenderFrameImpl::SetWebFrame(blink::WebFrame* web_frame) { |
175 DCHECK(!frame_); | 162 DCHECK(!frame_); |
176 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kSitePerProcess)) | 163 |
177 frame_ = web_frame; | 164 std::pair<FrameMap::iterator, bool> result = g_frame_map.Get().insert( |
| 165 std::make_pair(web_frame, this)); |
| 166 CHECK(result.second) << "Inserting a duplicate item."; |
| 167 |
| 168 frame_ = web_frame; |
| 169 |
| 170 #if defined(ENABLE_PLUGINS) |
| 171 new PepperBrowserConnection(this); |
| 172 #endif |
| 173 new SharedWorkerRepository(this); |
| 174 |
| 175 // We delay calling this until we have the WebFrame so that any observer or |
| 176 // embedder can call GetWebFrame on any RenderFrame. |
| 177 GetContentClient()->renderer()->RenderFrameCreated(this); |
178 } | 178 } |
179 | 179 |
180 RenderWidget* RenderFrameImpl::GetRenderWidget() { | 180 RenderWidget* RenderFrameImpl::GetRenderWidget() { |
181 return render_view_; | 181 return render_view_; |
182 } | 182 } |
183 | 183 |
184 #if defined(ENABLE_PLUGINS) | 184 #if defined(ENABLE_PLUGINS) |
185 void RenderFrameImpl::PepperPluginCreated(RendererPpapiHost* host) { | 185 void RenderFrameImpl::PepperPluginCreated(RendererPpapiHost* host) { |
186 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, | 186 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, |
187 DidCreatePepperPlugin(host)); | 187 DidCreatePepperPlugin(host)); |
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
433 } | 433 } |
434 | 434 |
435 RenderView* RenderFrameImpl::GetRenderView() { | 435 RenderView* RenderFrameImpl::GetRenderView() { |
436 return render_view_; | 436 return render_view_; |
437 } | 437 } |
438 | 438 |
439 int RenderFrameImpl::GetRoutingID() { | 439 int RenderFrameImpl::GetRoutingID() { |
440 return routing_id_; | 440 return routing_id_; |
441 } | 441 } |
442 | 442 |
| 443 blink::WebFrame* RenderFrameImpl::GetWebFrame() { |
| 444 DCHECK(frame_); |
| 445 return frame_; |
| 446 } |
| 447 |
443 WebPreferences& RenderFrameImpl::GetWebkitPreferences() { | 448 WebPreferences& RenderFrameImpl::GetWebkitPreferences() { |
444 return render_view_->GetWebkitPreferences(); | 449 return render_view_->GetWebkitPreferences(); |
445 } | 450 } |
446 | 451 |
447 int RenderFrameImpl::ShowContextMenu(ContextMenuClient* client, | 452 int RenderFrameImpl::ShowContextMenu(ContextMenuClient* client, |
448 const ContextMenuParams& params) { | 453 const ContextMenuParams& params) { |
449 return render_view_->ShowContextMenu(client, params); | 454 return render_view_->ShowContextMenu(client, params); |
450 } | 455 } |
451 | 456 |
452 void RenderFrameImpl::CancelContextMenu(int request_id) { | 457 void RenderFrameImpl::CancelContextMenu(int request_id) { |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
580 RenderFrameImpl* child_render_frame = RenderFrameImpl::Create(render_view_, | 585 RenderFrameImpl* child_render_frame = RenderFrameImpl::Create(render_view_, |
581 routing_id); | 586 routing_id); |
582 // TODO(nasko): Over-conservative check for debugging. | 587 // TODO(nasko): Over-conservative check for debugging. |
583 CHECK(child_render_frame); | 588 CHECK(child_render_frame); |
584 blink::WebFrame* web_frame = WebFrame::create(child_render_frame, | 589 blink::WebFrame* web_frame = WebFrame::create(child_render_frame, |
585 child_frame_identifier); | 590 child_frame_identifier); |
586 // TODO(nasko): Over-conservative check for debugging. | 591 // TODO(nasko): Over-conservative check for debugging. |
587 CHECK(web_frame); | 592 CHECK(web_frame); |
588 child_render_frame->SetWebFrame(web_frame); | 593 child_render_frame->SetWebFrame(web_frame); |
589 | 594 |
590 std::pair<FrameMap::iterator, bool> result = g_frame_map.Get().insert( | |
591 std::make_pair(web_frame, child_render_frame)); | |
592 CHECK(result.second) << "Inserting a duplicate item."; | |
593 | |
594 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, | |
595 WebFrameCreated(web_frame)); | |
596 return web_frame; | 595 return web_frame; |
597 } | 596 } |
598 | 597 |
599 void RenderFrameImpl::didDisownOpener(blink::WebFrame* frame) { | 598 void RenderFrameImpl::didDisownOpener(blink::WebFrame* frame) { |
600 render_view_->didDisownOpener(frame); | 599 render_view_->didDisownOpener(frame); |
601 } | 600 } |
602 | 601 |
603 void RenderFrameImpl::frameDetached(blink::WebFrame* frame) { | 602 void RenderFrameImpl::frameDetached(blink::WebFrame* frame) { |
604 // NOTE: This function is called on the frame that is being detached and not | 603 // NOTE: This function is called on the frame that is being detached and not |
605 // the parent frame. This is different from createChildFrame() which is | 604 // the parent frame. This is different from createChildFrame() which is |
(...skipping 828 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1434 void RenderFrameImpl::AddObserver(RenderFrameObserver* observer) { | 1433 void RenderFrameImpl::AddObserver(RenderFrameObserver* observer) { |
1435 observers_.AddObserver(observer); | 1434 observers_.AddObserver(observer); |
1436 } | 1435 } |
1437 | 1436 |
1438 void RenderFrameImpl::RemoveObserver(RenderFrameObserver* observer) { | 1437 void RenderFrameImpl::RemoveObserver(RenderFrameObserver* observer) { |
1439 observer->RenderFrameGone(); | 1438 observer->RenderFrameGone(); |
1440 observers_.RemoveObserver(observer); | 1439 observers_.RemoveObserver(observer); |
1441 } | 1440 } |
1442 | 1441 |
1443 } // namespace content | 1442 } // namespace content |
OLD | NEW |