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 "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/strings/utf_string_conversions.h" | 8 #include "base/strings/utf_string_conversions.h" |
9 #include "base/time/time.h" | 9 #include "base/time/time.h" |
10 #include "content/child/appcache/appcache_dispatcher.h" | 10 #include "content/child/appcache/appcache_dispatcher.h" |
11 #include "content/child/quota_dispatcher.h" | 11 #include "content/child/quota_dispatcher.h" |
12 #include "content/child/request_extra_data.h" | 12 #include "content/child/request_extra_data.h" |
13 #include "content/common/frame_messages.h" | |
13 #include "content/common/socket_stream_handle_data.h" | 14 #include "content/common/socket_stream_handle_data.h" |
14 #include "content/common/swapped_out_messages.h" | 15 #include "content/common/swapped_out_messages.h" |
15 #include "content/common/view_messages.h" | 16 #include "content/common/view_messages.h" |
16 #include "content/public/common/content_constants.h" | 17 #include "content/public/common/content_constants.h" |
17 #include "content/public/common/content_switches.h" | 18 #include "content/public/common/content_switches.h" |
18 #include "content/public/common/url_constants.h" | 19 #include "content/public/common/url_constants.h" |
19 #include "content/public/renderer/content_renderer_client.h" | 20 #include "content/public/renderer/content_renderer_client.h" |
20 #include "content/public/renderer/document_state.h" | 21 #include "content/public/renderer/document_state.h" |
21 #include "content/public/renderer/navigation_state.h" | 22 #include "content/public/renderer/navigation_state.h" |
22 #include "content/renderer/browser_plugin/browser_plugin.h" | 23 #include "content/renderer/browser_plugin/browser_plugin.h" |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
65 using WebKit::WebURLResponse; | 66 using WebKit::WebURLResponse; |
66 using WebKit::WebUserGestureIndicator; | 67 using WebKit::WebUserGestureIndicator; |
67 using WebKit::WebVector; | 68 using WebKit::WebVector; |
68 using WebKit::WebView; | 69 using WebKit::WebView; |
69 using base::Time; | 70 using base::Time; |
70 using base::TimeDelta; | 71 using base::TimeDelta; |
71 using webkit_glue::WebURLResponseExtraDataImpl; | 72 using webkit_glue::WebURLResponseExtraDataImpl; |
72 | 73 |
73 namespace content { | 74 namespace content { |
74 | 75 |
76 namespace { | |
77 | |
78 // NOTE: -1 is used by content::FrameTreeNode as an invalid ID. | |
79 long long GenerateFrameIdentifier() { | |
80 static long long next = 0; | |
81 return ++next; | |
82 } | |
83 | |
84 typedef std::map<WebKit::WebFrame*, RenderFrameImpl*> FrameMap; | |
85 base::LazyInstance<FrameMap> g_child_frame_map = LAZY_INSTANCE_INITIALIZER; | |
86 | |
87 } // namespace | |
88 | |
75 static RenderFrameImpl* (*g_create_render_frame_impl)(RenderViewImpl*, int32) = | 89 static RenderFrameImpl* (*g_create_render_frame_impl)(RenderViewImpl*, int32) = |
76 NULL; | 90 NULL; |
77 | 91 |
78 // static | 92 // static |
79 RenderFrameImpl* RenderFrameImpl::Create(RenderViewImpl* render_view, | 93 RenderFrameImpl* RenderFrameImpl::Create(RenderViewImpl* render_view, |
80 int32 routing_id) { | 94 int32 routing_id) { |
81 DCHECK(routing_id != MSG_ROUTING_NONE); | 95 DCHECK(routing_id != MSG_ROUTING_NONE); |
82 | 96 |
83 RenderFrameImpl* render_frame = NULL; | 97 RenderFrameImpl* render_frame = NULL; |
84 if (g_create_render_frame_impl) | 98 if (g_create_render_frame_impl) |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
210 } | 224 } |
211 | 225 |
212 WebKit::WebCookieJar* RenderFrameImpl::cookieJar(WebKit::WebFrame* frame) { | 226 WebKit::WebCookieJar* RenderFrameImpl::cookieJar(WebKit::WebFrame* frame) { |
213 return render_view_->cookieJar(frame); | 227 return render_view_->cookieJar(frame); |
214 } | 228 } |
215 | 229 |
216 void RenderFrameImpl::didAccessInitialDocument(WebKit::WebFrame* frame) { | 230 void RenderFrameImpl::didAccessInitialDocument(WebKit::WebFrame* frame) { |
217 render_view_->didAccessInitialDocument(frame); | 231 render_view_->didAccessInitialDocument(frame); |
218 } | 232 } |
219 | 233 |
220 void RenderFrameImpl::didCreateFrame(WebKit::WebFrame* parent, | 234 WebKit::WebFrame* RenderFrameImpl::createMainFrame() { |
221 WebKit::WebFrame* child) { | 235 return WebFrame::create(this, GenerateFrameIdentifier()); |
222 render_view_->Send(new ViewHostMsg_FrameAttached( | 236 } |
223 render_view_->GetRoutingID(), parent->identifier(), child->identifier(), | 237 |
224 UTF16ToUTF8(child->assignedName()))); | 238 WebKit::WebFrame* RenderFrameImpl::createChildFrame(WebKit::WebFrame* parent, |
239 WebKit::WebString name) { | |
240 RenderFrameImpl* child_render_frame = this; | |
241 long long child_frame_identifier = GenerateFrameIdentifier(); | |
242 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kSitePerProcess)) { | |
243 int routing_id; | |
244 Send(new FrameHostMsg_CreateChildFrame(GetRoutingID(), | |
Charlie Reis
2013/09/11 22:25:04
Maybe emphasize that this is sync?
awong
2013/09/21 01:19:56
We don't seem to do this in other spots that have
| |
245 parent->identifier(), | |
246 child_frame_identifier, | |
247 UTF16ToUTF8(name), | |
248 &routing_id)); | |
249 child_render_frame = RenderFrameImpl::Create(render_view_, routing_id); | |
250 } | |
251 | |
252 WebKit::WebFrame* web_frame = WebFrame::create(child_render_frame, | |
253 child_frame_identifier); | |
254 g_child_frame_map.Get().insert(std::make_pair(web_frame, child_render_frame)); | |
255 | |
256 return web_frame; | |
225 } | 257 } |
226 | 258 |
227 void RenderFrameImpl::didDisownOpener(WebKit::WebFrame* frame) { | 259 void RenderFrameImpl::didDisownOpener(WebKit::WebFrame* frame) { |
228 render_view_->didDisownOpener(frame); | 260 render_view_->didDisownOpener(frame); |
229 } | 261 } |
230 | 262 |
231 void RenderFrameImpl::frameDetached(WebKit::WebFrame* frame) { | 263 void RenderFrameImpl::frameDetached(WebKit::WebFrame* frame) { |
232 // Currently multiple WebCore::Frames can send frameDetached to a single | 264 // Currently multiple WebCore::Frames can send frameDetached to a single |
233 // RenderFrameImpl. This is legacy behavior from when RenderViewImpl served | 265 // RenderFrameImpl. This is legacy behavior from when RenderViewImpl served |
234 // as a shared WebFrameClient for multiple Webcore::Frame objects. It also | 266 // as a shared WebFrameClient for multiple Webcore::Frame objects. It also |
235 // prevents this class from entering the |is_detaching_| state because | 267 // prevents this class from entering the |is_detaching_| state because |
236 // even though one WebCore::Frame may have detached itself, others will | 268 // even though one WebCore::Frame may have detached itself, others will |
237 // still need to use this object. | 269 // still need to use this object. |
238 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kSitePerProcess)) { | 270 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kSitePerProcess)) { |
239 // TODO(ajwong): Add CHECK(!is_detaching_) once we guarantee each | 271 // TODO(ajwong): Add CHECK(!is_detaching_) once we guarantee each |
240 // RenderFrameImpl is only used by one WebCore::Frame. | 272 // RenderFrameImpl is only used by one WebCore::Frame. |
241 is_detaching_ = true; | 273 is_detaching_ = true; |
242 } | 274 } |
243 | 275 |
244 int64 parent_frame_id = -1; | 276 int64 parent_frame_id = -1; |
245 if (frame->parent()) | 277 if (frame->parent()) |
246 parent_frame_id = frame->parent()->identifier(); | 278 parent_frame_id = frame->parent()->identifier(); |
247 | 279 |
248 render_view_->Send(new ViewHostMsg_FrameDetached(render_view_->GetRoutingID(), | 280 render_view_->Send(new FrameHostMsg_Detach(GetRoutingID(), parent_frame_id, |
249 parent_frame_id, | 281 frame->identifier())); |
250 frame->identifier())); | |
251 | 282 |
252 // Call back to RenderViewImpl for observers to be notified. | 283 // Call back to RenderViewImpl for observers to be notified. |
253 // TODO(nasko): Remove once we have RenderFrameObserver. | 284 // TODO(nasko): Remove once we have RenderFrameObserver. |
254 render_view_->frameDetached(frame); | 285 render_view_->frameDetached(frame); |
286 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kSitePerProcess)) { | |
287 FrameMap::iterator it = g_child_frame_map.Get().find(frame); | |
288 DCHECK(it != g_child_frame_map.Get().end()); | |
289 DCHECK_EQ(it->second, this); | |
290 delete it->second; | |
291 g_child_frame_map.Get().erase(it); | |
292 } | |
255 } | 293 } |
256 | 294 |
257 void RenderFrameImpl::willClose(WebKit::WebFrame* frame) { | 295 void RenderFrameImpl::willClose(WebKit::WebFrame* frame) { |
258 // Call back to RenderViewImpl for observers to be notified. | 296 // Call back to RenderViewImpl for observers to be notified. |
259 // TODO(nasko): Remove once we have RenderFrameObserver. | 297 // TODO(nasko): Remove once we have RenderFrameObserver. |
260 render_view_->willClose(frame); | 298 render_view_->willClose(frame); |
261 } | 299 } |
262 | 300 |
263 void RenderFrameImpl::didChangeName(WebKit::WebFrame* frame, | 301 void RenderFrameImpl::didChangeName(WebKit::WebFrame* frame, |
264 const WebKit::WebString& name) { | 302 const WebKit::WebString& name) { |
(...skipping 595 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
860 | 898 |
861 void RenderFrameImpl::didLoseWebGLContext(WebKit::WebFrame* frame, | 899 void RenderFrameImpl::didLoseWebGLContext(WebKit::WebFrame* frame, |
862 int arb_robustness_status_code) { | 900 int arb_robustness_status_code) { |
863 render_view_->Send(new ViewHostMsg_DidLose3DContext( | 901 render_view_->Send(new ViewHostMsg_DidLose3DContext( |
864 GURL(frame->top()->document().securityOrigin().toString()), | 902 GURL(frame->top()->document().securityOrigin().toString()), |
865 THREE_D_API_TYPE_WEBGL, | 903 THREE_D_API_TYPE_WEBGL, |
866 arb_robustness_status_code)); | 904 arb_robustness_status_code)); |
867 } | 905 } |
868 | 906 |
869 } // namespace content | 907 } // namespace content |
OLD | NEW |