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