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

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
« no previous file with comments | « content/renderer/render_frame_impl.h ('k') | content/renderer/render_thread_impl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 480 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
OLDNEW
« no previous file with comments | « content/renderer/render_frame_impl.h ('k') | content/renderer/render_thread_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698