Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(132)

Side by Side Diff: content/renderer/render_frame_impl.cc

Issue 600553003: Enable swapping a frame back in to its parent process (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@remoteToLocal
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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* parent_proxy =
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(parent_proxy);
515 blink::WebRemoteFrame* parent_web_frame = parent_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 =
509 CHECK(proxy); 519 RenderFrameImpl::Create(parent_proxy->render_view(), routing_id);
510 blink::WebRemoteFrame* parent_web_frame = proxy->web_frame(); 520 web_frame = parent_web_frame->createLocalChild("", render_frame);
511 521 } else {
512 // Create the RenderFrame and WebLocalFrame, linking the two. 522 RenderFrameProxy* proxy =
513 RenderFrameImpl* render_frame = 523 RenderFrameProxy::FromRoutingID(proxy_routing_id);
514 RenderFrameImpl::Create(proxy->render_view(), routing_id); 524 CHECK(proxy);
515 blink::WebLocalFrame* web_frame = 525 render_frame = RenderFrameImpl::Create(proxy->render_view(), routing_id);
516 parent_web_frame->createLocalChild("", render_frame); 526 web_frame = blink::WebLocalFrame::create(render_frame);
527 render_frame->proxy_routing_id_ = proxy_routing_id;
528 web_frame->initializeToReplaceRemoteFrame(proxy->web_frame());
529 }
517 render_frame->SetWebFrame(web_frame); 530 render_frame->SetWebFrame(web_frame);
518 render_frame->Initialize(); 531 render_frame->Initialize();
519 } 532 }
520 533
521 // static 534 // static
522 RenderFrame* RenderFrame::FromWebFrame(blink::WebFrame* web_frame) { 535 RenderFrame* RenderFrame::FromWebFrame(blink::WebFrame* web_frame) {
523 return RenderFrameImpl::FromWebFrame(web_frame); 536 return RenderFrameImpl::FromWebFrame(web_frame);
524 } 537 }
525 538
526 // static 539 // static
(...skipping 12 matching lines...) Expand all
539 } 552 }
540 553
541 // RenderFrameImpl ---------------------------------------------------------- 554 // RenderFrameImpl ----------------------------------------------------------
542 RenderFrameImpl::RenderFrameImpl(RenderViewImpl* render_view, int routing_id) 555 RenderFrameImpl::RenderFrameImpl(RenderViewImpl* render_view, int routing_id)
543 : frame_(NULL), 556 : frame_(NULL),
544 render_view_(render_view->AsWeakPtr()), 557 render_view_(render_view->AsWeakPtr()),
545 routing_id_(routing_id), 558 routing_id_(routing_id),
546 is_swapped_out_(false), 559 is_swapped_out_(false),
547 render_frame_proxy_(NULL), 560 render_frame_proxy_(NULL),
548 is_detaching_(false), 561 is_detaching_(false),
562 proxy_routing_id_(MSG_ROUTING_NONE),
549 cookie_jar_(this), 563 cookie_jar_(this),
550 selection_text_offset_(0), 564 selection_text_offset_(0),
551 selection_range_(gfx::Range::InvalidRange()), 565 selection_range_(gfx::Range::InvalidRange()),
552 handling_select_range_(false), 566 handling_select_range_(false),
553 notification_permission_dispatcher_(NULL), 567 notification_permission_dispatcher_(NULL),
554 notification_provider_(NULL), 568 notification_provider_(NULL),
555 web_user_media_client_(NULL), 569 web_user_media_client_(NULL),
556 midi_dispatcher_(NULL), 570 midi_dispatcher_(NULL),
557 #if defined(OS_ANDROID) 571 #if defined(OS_ANDROID)
558 media_player_manager_(NULL), 572 media_player_manager_(NULL),
(...skipping 1653 matching lines...) Expand 10 before | Expand all | Expand 10 after
2212 const blink::WebHistoryItem& item, 2226 const blink::WebHistoryItem& item,
2213 blink::WebHistoryCommitType commit_type) { 2227 blink::WebHistoryCommitType commit_type) {
2214 TRACE_EVENT2("navigation", "RenderFrameImpl::didCommitProvisionalLoad", 2228 TRACE_EVENT2("navigation", "RenderFrameImpl::didCommitProvisionalLoad",
2215 "id", routing_id_, 2229 "id", routing_id_,
2216 "url", GetLoadingUrl().possibly_invalid_spec()); 2230 "url", GetLoadingUrl().possibly_invalid_spec());
2217 DCHECK(!frame_ || frame_ == frame); 2231 DCHECK(!frame_ || frame_ == frame);
2218 DocumentState* document_state = 2232 DocumentState* document_state =
2219 DocumentState::FromDataSource(frame->dataSource()); 2233 DocumentState::FromDataSource(frame->dataSource());
2220 NavigationState* navigation_state = document_state->navigation_state(); 2234 NavigationState* navigation_state = document_state->navigation_state();
2221 2235
2236 if (proxy_routing_id_ != MSG_ROUTING_NONE) {
2237 RenderFrameProxy* proxy =
2238 RenderFrameProxy::FromRoutingID(proxy_routing_id_);
2239 CHECK(proxy);
2240 proxy->web_frame()->swap(frame_);
2241 proxy_routing_id_ = MSG_ROUTING_NONE;
2242 }
2243
2222 // When we perform a new navigation, we need to update the last committed 2244 // 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 2245 // session history entry with state for the page we are leaving. Do this
2224 // before updating the HistoryController state. 2246 // before updating the HistoryController state.
2225 render_view_->UpdateSessionHistory(frame); 2247 render_view_->UpdateSessionHistory(frame);
2226 2248
2227 render_view_->history_controller()->UpdateForCommit(this, item, commit_type, 2249 render_view_->history_controller()->UpdateForCommit(this, item, commit_type,
2228 navigation_state->was_within_same_page()); 2250 navigation_state->was_within_same_page());
2229 2251
2230 InternalDocumentStateData* internal_data = 2252 InternalDocumentStateData* internal_data =
2231 InternalDocumentStateData::FromDocumentState(document_state); 2253 InternalDocumentStateData::FromDocumentState(document_state);
(...skipping 1875 matching lines...) Expand 10 before | Expand all | Expand 10 after
4107 4129
4108 #if defined(ENABLE_BROWSER_CDMS) 4130 #if defined(ENABLE_BROWSER_CDMS)
4109 RendererCdmManager* RenderFrameImpl::GetCdmManager() { 4131 RendererCdmManager* RenderFrameImpl::GetCdmManager() {
4110 if (!cdm_manager_) 4132 if (!cdm_manager_)
4111 cdm_manager_ = new RendererCdmManager(this); 4133 cdm_manager_ = new RendererCdmManager(this);
4112 return cdm_manager_; 4134 return cdm_manager_;
4113 } 4135 }
4114 #endif // defined(ENABLE_BROWSER_CDMS) 4136 #endif // defined(ENABLE_BROWSER_CDMS)
4115 4137
4116 } // namespace content 4138 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698