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/auto_reset.h" | 10 #include "base/auto_reset.h" |
(...skipping 478 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
489 // static | 489 // static |
490 RenderFrameImpl* RenderFrameImpl::FromRoutingID(int32 routing_id) { | 490 RenderFrameImpl* RenderFrameImpl::FromRoutingID(int32 routing_id) { |
491 RoutingIDFrameMap::iterator iter = | 491 RoutingIDFrameMap::iterator iter = |
492 g_routing_id_frame_map.Get().find(routing_id); | 492 g_routing_id_frame_map.Get().find(routing_id); |
493 if (iter != g_routing_id_frame_map.Get().end()) | 493 if (iter != g_routing_id_frame_map.Get().end()) |
494 return iter->second; | 494 return iter->second; |
495 return NULL; | 495 return NULL; |
496 } | 496 } |
497 | 497 |
498 // static | 498 // static |
499 void RenderFrameImpl::CreateFrame(int routing_id, int parent_routing_id) { | 499 void RenderFrameImpl::CreateFrame(int routing_id, |
500 int parent_routing_id, | |
501 int proxy_routing_id) { | |
500 // TODO(nasko): For now, this message is only sent for subframes, as the | 502 // TODO(nasko): For now, this message is only sent for subframes, as the |
501 // top level frame is created when the RenderView is created through the | 503 // top level frame is created when the RenderView is created through the |
502 // ViewMsg_New IPC. | 504 // ViewMsg_New IPC. |
503 CHECK_NE(MSG_ROUTING_NONE, parent_routing_id); | 505 CHECK_NE(MSG_ROUTING_NONE, parent_routing_id); |
504 | 506 |
505 RenderFrameProxy* proxy = RenderFrameProxy::FromRoutingID(parent_routing_id); | 507 blink::WebLocalFrame* web_frame; |
508 RenderFrameImpl* render_frame; | |
509 if (proxy_routing_id == MSG_ROUTING_NONE) { | |
510 RenderFrameProxy* proxy = | |
nasko
2014/10/27 22:52:55
nit: I'd rename this to proxy_parent or something
Nate Chapin
2014/10/28 19:59:20
parent_proxy to better match the existing parent_w
| |
511 RenderFrameProxy::FromRoutingID(parent_routing_id); | |
512 // If the browser is sending a valid parent routing id, it should already | |
513 // be created and registered. | |
514 CHECK(proxy); | |
515 blink::WebRemoteFrame* parent_web_frame = proxy->web_frame(); | |
506 | 516 |
507 // If the browser is sending a valid parent routing id, it should already be | 517 // Create the RenderFrame and WebLocalFrame, linking the two. |
508 // created and registered. | 518 render_frame = RenderFrameImpl::Create(proxy->render_view(), routing_id); |
509 CHECK(proxy); | 519 web_frame = parent_web_frame->createLocalChild("", render_frame); |
510 blink::WebRemoteFrame* parent_web_frame = proxy->web_frame(); | 520 } else { |
Charlie Reis
2014/10/28 16:38:29
Why do we ignore parent_routing_id in this case?
Nate Chapin
2014/10/28 19:59:20
The existing RemoteFrame that we're replacing alre
| |
511 | 521 RenderFrameProxy* proxy = |
512 // Create the RenderFrame and WebLocalFrame, linking the two. | 522 RenderFrameProxy::FromRoutingID(proxy_routing_id); |
513 RenderFrameImpl* render_frame = | 523 CHECK(proxy); |
514 RenderFrameImpl::Create(proxy->render_view(), routing_id); | 524 render_frame = RenderFrameImpl::Create(proxy->render_view(), routing_id); |
515 blink::WebLocalFrame* web_frame = | 525 web_frame = blink::WebLocalFrame::create(render_frame); |
516 parent_web_frame->createLocalChild("", render_frame); | 526 render_frame->proxy_routing_id_ = proxy_routing_id; |
527 web_frame->initializeToReplaceRemoteFrame(proxy->web_frame()); | |
528 } | |
517 render_frame->SetWebFrame(web_frame); | 529 render_frame->SetWebFrame(web_frame); |
518 render_frame->Initialize(); | 530 render_frame->Initialize(); |
519 } | 531 } |
520 | 532 |
521 // static | 533 // static |
522 RenderFrame* RenderFrame::FromWebFrame(blink::WebFrame* web_frame) { | 534 RenderFrame* RenderFrame::FromWebFrame(blink::WebFrame* web_frame) { |
523 return RenderFrameImpl::FromWebFrame(web_frame); | 535 return RenderFrameImpl::FromWebFrame(web_frame); |
524 } | 536 } |
525 | 537 |
526 // static | 538 // static |
(...skipping 12 matching lines...) Expand all Loading... | |
539 } | 551 } |
540 | 552 |
541 // RenderFrameImpl ---------------------------------------------------------- | 553 // RenderFrameImpl ---------------------------------------------------------- |
542 RenderFrameImpl::RenderFrameImpl(RenderViewImpl* render_view, int routing_id) | 554 RenderFrameImpl::RenderFrameImpl(RenderViewImpl* render_view, int routing_id) |
543 : frame_(NULL), | 555 : frame_(NULL), |
544 render_view_(render_view->AsWeakPtr()), | 556 render_view_(render_view->AsWeakPtr()), |
545 routing_id_(routing_id), | 557 routing_id_(routing_id), |
546 is_swapped_out_(false), | 558 is_swapped_out_(false), |
547 render_frame_proxy_(NULL), | 559 render_frame_proxy_(NULL), |
548 is_detaching_(false), | 560 is_detaching_(false), |
561 proxy_routing_id_(MSG_ROUTING_NONE), | |
549 cookie_jar_(this), | 562 cookie_jar_(this), |
550 selection_text_offset_(0), | 563 selection_text_offset_(0), |
551 selection_range_(gfx::Range::InvalidRange()), | 564 selection_range_(gfx::Range::InvalidRange()), |
552 handling_select_range_(false), | 565 handling_select_range_(false), |
553 notification_permission_dispatcher_(NULL), | 566 notification_permission_dispatcher_(NULL), |
554 notification_provider_(NULL), | 567 notification_provider_(NULL), |
555 web_user_media_client_(NULL), | 568 web_user_media_client_(NULL), |
556 midi_dispatcher_(NULL), | 569 midi_dispatcher_(NULL), |
557 #if defined(OS_ANDROID) | 570 #if defined(OS_ANDROID) |
558 media_player_manager_(NULL), | 571 media_player_manager_(NULL), |
(...skipping 1653 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2212 const blink::WebHistoryItem& item, | 2225 const blink::WebHistoryItem& item, |
2213 blink::WebHistoryCommitType commit_type) { | 2226 blink::WebHistoryCommitType commit_type) { |
2214 TRACE_EVENT2("navigation", "RenderFrameImpl::didCommitProvisionalLoad", | 2227 TRACE_EVENT2("navigation", "RenderFrameImpl::didCommitProvisionalLoad", |
2215 "id", routing_id_, | 2228 "id", routing_id_, |
2216 "url", GetLoadingUrl().possibly_invalid_spec()); | 2229 "url", GetLoadingUrl().possibly_invalid_spec()); |
2217 DCHECK(!frame_ || frame_ == frame); | 2230 DCHECK(!frame_ || frame_ == frame); |
2218 DocumentState* document_state = | 2231 DocumentState* document_state = |
2219 DocumentState::FromDataSource(frame->dataSource()); | 2232 DocumentState::FromDataSource(frame->dataSource()); |
2220 NavigationState* navigation_state = document_state->navigation_state(); | 2233 NavigationState* navigation_state = document_state->navigation_state(); |
2221 | 2234 |
2235 if (proxy_routing_id_ != MSG_ROUTING_NONE) { | |
2236 RenderFrameProxy* proxy = | |
2237 RenderFrameProxy::FromRoutingID(proxy_routing_id_); | |
2238 CHECK(proxy); | |
2239 proxy->web_frame()->swap(frame_); | |
2240 proxy_routing_id_ = MSG_ROUTING_NONE; | |
2241 } | |
2242 | |
2222 // When we perform a new navigation, we need to update the last committed | 2243 // When we perform a new navigation, we need to update the last committed |
2223 // session history entry with state for the page we are leaving. Do this | 2244 // session history entry with state for the page we are leaving. Do this |
2224 // before updating the HistoryController state. | 2245 // before updating the HistoryController state. |
2225 render_view_->UpdateSessionHistory(frame); | 2246 render_view_->UpdateSessionHistory(frame); |
2226 | 2247 |
2227 render_view_->history_controller()->UpdateForCommit(this, item, commit_type, | 2248 render_view_->history_controller()->UpdateForCommit(this, item, commit_type, |
2228 navigation_state->was_within_same_page()); | 2249 navigation_state->was_within_same_page()); |
2229 | 2250 |
2230 InternalDocumentStateData* internal_data = | 2251 InternalDocumentStateData* internal_data = |
2231 InternalDocumentStateData::FromDocumentState(document_state); | 2252 InternalDocumentStateData::FromDocumentState(document_state); |
(...skipping 1870 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4102 | 4123 |
4103 #if defined(ENABLE_BROWSER_CDMS) | 4124 #if defined(ENABLE_BROWSER_CDMS) |
4104 RendererCdmManager* RenderFrameImpl::GetCdmManager() { | 4125 RendererCdmManager* RenderFrameImpl::GetCdmManager() { |
4105 if (!cdm_manager_) | 4126 if (!cdm_manager_) |
4106 cdm_manager_ = new RendererCdmManager(this); | 4127 cdm_manager_ = new RendererCdmManager(this); |
4107 return cdm_manager_; | 4128 return cdm_manager_; |
4108 } | 4129 } |
4109 #endif // defined(ENABLE_BROWSER_CDMS) | 4130 #endif // defined(ENABLE_BROWSER_CDMS) |
4110 | 4131 |
4111 } // namespace content | 4132 } // namespace content |
OLD | NEW |