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 480 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
491 // static | 491 // static |
492 RenderFrameImpl* RenderFrameImpl::FromRoutingID(int32 routing_id) { | 492 RenderFrameImpl* RenderFrameImpl::FromRoutingID(int32 routing_id) { |
493 RoutingIDFrameMap::iterator iter = | 493 RoutingIDFrameMap::iterator iter = |
494 g_routing_id_frame_map.Get().find(routing_id); | 494 g_routing_id_frame_map.Get().find(routing_id); |
495 if (iter != g_routing_id_frame_map.Get().end()) | 495 if (iter != g_routing_id_frame_map.Get().end()) |
496 return iter->second; | 496 return iter->second; |
497 return NULL; | 497 return NULL; |
498 } | 498 } |
499 | 499 |
500 // static | 500 // static |
501 void RenderFrameImpl::CreateFrame(int routing_id, int parent_routing_id) { | 501 void RenderFrameImpl::CreateFrame(int routing_id, |
| 502 int parent_routing_id, |
| 503 int proxy_routing_id) { |
502 // TODO(nasko): For now, this message is only sent for subframes, as the | 504 // TODO(nasko): For now, this message is only sent for subframes, as the |
503 // top level frame is created when the RenderView is created through the | 505 // top level frame is created when the RenderView is created through the |
504 // ViewMsg_New IPC. | 506 // ViewMsg_New IPC. |
505 CHECK_NE(MSG_ROUTING_NONE, parent_routing_id); | 507 CHECK_NE(MSG_ROUTING_NONE, parent_routing_id); |
506 | 508 |
507 RenderFrameProxy* proxy = RenderFrameProxy::FromRoutingID(parent_routing_id); | 509 blink::WebLocalFrame* web_frame; |
| 510 RenderFrameImpl* render_frame; |
| 511 if (proxy_routing_id == MSG_ROUTING_NONE) { |
| 512 RenderFrameProxy* parent_proxy = |
| 513 RenderFrameProxy::FromRoutingID(parent_routing_id); |
| 514 // If the browser is sending a valid parent routing id, it should already |
| 515 // be created and registered. |
| 516 CHECK(parent_proxy); |
| 517 blink::WebRemoteFrame* parent_web_frame = parent_proxy->web_frame(); |
508 | 518 |
509 // If the browser is sending a valid parent routing id, it should already be | 519 // Create the RenderFrame and WebLocalFrame, linking the two. |
510 // created and registered. | 520 render_frame = |
511 CHECK(proxy); | 521 RenderFrameImpl::Create(parent_proxy->render_view(), routing_id); |
512 blink::WebRemoteFrame* parent_web_frame = proxy->web_frame(); | 522 web_frame = parent_web_frame->createLocalChild("", render_frame); |
513 | 523 } else { |
514 // Create the RenderFrame and WebLocalFrame, linking the two. | 524 RenderFrameProxy* proxy = |
515 RenderFrameImpl* render_frame = | 525 RenderFrameProxy::FromRoutingID(proxy_routing_id); |
516 RenderFrameImpl::Create(proxy->render_view(), routing_id); | 526 CHECK(proxy); |
517 blink::WebLocalFrame* web_frame = | 527 render_frame = RenderFrameImpl::Create(proxy->render_view(), routing_id); |
518 parent_web_frame->createLocalChild("", render_frame); | 528 web_frame = blink::WebLocalFrame::create(render_frame); |
| 529 render_frame->proxy_routing_id_ = proxy_routing_id; |
| 530 web_frame->initializeToReplaceRemoteFrame(proxy->web_frame()); |
| 531 } |
519 render_frame->SetWebFrame(web_frame); | 532 render_frame->SetWebFrame(web_frame); |
520 render_frame->Initialize(); | 533 render_frame->Initialize(); |
521 } | 534 } |
522 | 535 |
523 // static | 536 // static |
524 RenderFrame* RenderFrame::FromWebFrame(blink::WebFrame* web_frame) { | 537 RenderFrame* RenderFrame::FromWebFrame(blink::WebFrame* web_frame) { |
525 return RenderFrameImpl::FromWebFrame(web_frame); | 538 return RenderFrameImpl::FromWebFrame(web_frame); |
526 } | 539 } |
527 | 540 |
528 // static | 541 // static |
(...skipping 12 matching lines...) Expand all Loading... |
541 } | 554 } |
542 | 555 |
543 // RenderFrameImpl ---------------------------------------------------------- | 556 // RenderFrameImpl ---------------------------------------------------------- |
544 RenderFrameImpl::RenderFrameImpl(RenderViewImpl* render_view, int routing_id) | 557 RenderFrameImpl::RenderFrameImpl(RenderViewImpl* render_view, int routing_id) |
545 : frame_(NULL), | 558 : frame_(NULL), |
546 render_view_(render_view->AsWeakPtr()), | 559 render_view_(render_view->AsWeakPtr()), |
547 routing_id_(routing_id), | 560 routing_id_(routing_id), |
548 is_swapped_out_(false), | 561 is_swapped_out_(false), |
549 render_frame_proxy_(NULL), | 562 render_frame_proxy_(NULL), |
550 is_detaching_(false), | 563 is_detaching_(false), |
| 564 proxy_routing_id_(MSG_ROUTING_NONE), |
551 cookie_jar_(this), | 565 cookie_jar_(this), |
552 selection_text_offset_(0), | 566 selection_text_offset_(0), |
553 selection_range_(gfx::Range::InvalidRange()), | 567 selection_range_(gfx::Range::InvalidRange()), |
554 handling_select_range_(false), | 568 handling_select_range_(false), |
555 notification_permission_dispatcher_(NULL), | 569 notification_permission_dispatcher_(NULL), |
556 notification_provider_(NULL), | 570 notification_provider_(NULL), |
557 web_user_media_client_(NULL), | 571 web_user_media_client_(NULL), |
558 midi_dispatcher_(NULL), | 572 midi_dispatcher_(NULL), |
559 #if defined(OS_ANDROID) | 573 #if defined(OS_ANDROID) |
560 media_player_manager_(NULL), | 574 media_player_manager_(NULL), |
(...skipping 1663 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2224 const blink::WebHistoryItem& item, | 2238 const blink::WebHistoryItem& item, |
2225 blink::WebHistoryCommitType commit_type) { | 2239 blink::WebHistoryCommitType commit_type) { |
2226 TRACE_EVENT2("navigation", "RenderFrameImpl::didCommitProvisionalLoad", | 2240 TRACE_EVENT2("navigation", "RenderFrameImpl::didCommitProvisionalLoad", |
2227 "id", routing_id_, | 2241 "id", routing_id_, |
2228 "url", GetLoadingUrl().possibly_invalid_spec()); | 2242 "url", GetLoadingUrl().possibly_invalid_spec()); |
2229 DCHECK(!frame_ || frame_ == frame); | 2243 DCHECK(!frame_ || frame_ == frame); |
2230 DocumentState* document_state = | 2244 DocumentState* document_state = |
2231 DocumentState::FromDataSource(frame->dataSource()); | 2245 DocumentState::FromDataSource(frame->dataSource()); |
2232 NavigationState* navigation_state = document_state->navigation_state(); | 2246 NavigationState* navigation_state = document_state->navigation_state(); |
2233 | 2247 |
| 2248 if (proxy_routing_id_ != MSG_ROUTING_NONE) { |
| 2249 RenderFrameProxy* proxy = |
| 2250 RenderFrameProxy::FromRoutingID(proxy_routing_id_); |
| 2251 CHECK(proxy); |
| 2252 proxy->web_frame()->swap(frame_); |
| 2253 proxy_routing_id_ = MSG_ROUTING_NONE; |
| 2254 } |
| 2255 |
2234 // When we perform a new navigation, we need to update the last committed | 2256 // When we perform a new navigation, we need to update the last committed |
2235 // session history entry with state for the page we are leaving. Do this | 2257 // session history entry with state for the page we are leaving. Do this |
2236 // before updating the HistoryController state. | 2258 // before updating the HistoryController state. |
2237 render_view_->UpdateSessionHistory(frame); | 2259 render_view_->UpdateSessionHistory(frame); |
2238 | 2260 |
2239 render_view_->history_controller()->UpdateForCommit(this, item, commit_type, | 2261 render_view_->history_controller()->UpdateForCommit(this, item, commit_type, |
2240 navigation_state->was_within_same_page()); | 2262 navigation_state->was_within_same_page()); |
2241 | 2263 |
2242 InternalDocumentStateData* internal_data = | 2264 InternalDocumentStateData* internal_data = |
2243 InternalDocumentStateData::FromDocumentState(document_state); | 2265 InternalDocumentStateData::FromDocumentState(document_state); |
(...skipping 1884 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4128 | 4150 |
4129 #if defined(ENABLE_BROWSER_CDMS) | 4151 #if defined(ENABLE_BROWSER_CDMS) |
4130 RendererCdmManager* RenderFrameImpl::GetCdmManager() { | 4152 RendererCdmManager* RenderFrameImpl::GetCdmManager() { |
4131 if (!cdm_manager_) | 4153 if (!cdm_manager_) |
4132 cdm_manager_ = new RendererCdmManager(this); | 4154 cdm_manager_ = new RendererCdmManager(this); |
4133 return cdm_manager_; | 4155 return cdm_manager_; |
4134 } | 4156 } |
4135 #endif // defined(ENABLE_BROWSER_CDMS) | 4157 #endif // defined(ENABLE_BROWSER_CDMS) |
4136 | 4158 |
4137 } // namespace content | 4159 } // namespace content |
OLD | NEW |