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

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 479 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698