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

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* proxy =
nasko 2014/10/27 22:52:55 nit: I'd rename this to proxy_parent or something
Nate Chapin 2014/10/28 19:59:20 parent_proxy to better match the existing parent_w
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(proxy);
515 blink::WebRemoteFrame* parent_web_frame = 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 = RenderFrameImpl::Create(proxy->render_view(), routing_id);
509 CHECK(proxy); 519 web_frame = parent_web_frame->createLocalChild("", render_frame);
510 blink::WebRemoteFrame* parent_web_frame = proxy->web_frame(); 520 } else {
Charlie Reis 2014/10/28 16:38:29 Why do we ignore parent_routing_id in this case?
Nate Chapin 2014/10/28 19:59:20 The existing RemoteFrame that we're replacing alre
511 521 RenderFrameProxy* proxy =
512 // Create the RenderFrame and WebLocalFrame, linking the two. 522 RenderFrameProxy::FromRoutingID(proxy_routing_id);
513 RenderFrameImpl* render_frame = 523 CHECK(proxy);
514 RenderFrameImpl::Create(proxy->render_view(), routing_id); 524 render_frame = RenderFrameImpl::Create(proxy->render_view(), routing_id);
515 blink::WebLocalFrame* web_frame = 525 web_frame = blink::WebLocalFrame::create(render_frame);
516 parent_web_frame->createLocalChild("", render_frame); 526 render_frame->proxy_routing_id_ = proxy_routing_id;
527 web_frame->initializeToReplaceRemoteFrame(proxy->web_frame());
528 }
517 render_frame->SetWebFrame(web_frame); 529 render_frame->SetWebFrame(web_frame);
518 render_frame->Initialize(); 530 render_frame->Initialize();
519 } 531 }
520 532
521 // static 533 // static
522 RenderFrame* RenderFrame::FromWebFrame(blink::WebFrame* web_frame) { 534 RenderFrame* RenderFrame::FromWebFrame(blink::WebFrame* web_frame) {
523 return RenderFrameImpl::FromWebFrame(web_frame); 535 return RenderFrameImpl::FromWebFrame(web_frame);
524 } 536 }
525 537
526 // static 538 // static
(...skipping 12 matching lines...) Expand all
539 } 551 }
540 552
541 // RenderFrameImpl ---------------------------------------------------------- 553 // RenderFrameImpl ----------------------------------------------------------
542 RenderFrameImpl::RenderFrameImpl(RenderViewImpl* render_view, int routing_id) 554 RenderFrameImpl::RenderFrameImpl(RenderViewImpl* render_view, int routing_id)
543 : frame_(NULL), 555 : frame_(NULL),
544 render_view_(render_view->AsWeakPtr()), 556 render_view_(render_view->AsWeakPtr()),
545 routing_id_(routing_id), 557 routing_id_(routing_id),
546 is_swapped_out_(false), 558 is_swapped_out_(false),
547 render_frame_proxy_(NULL), 559 render_frame_proxy_(NULL),
548 is_detaching_(false), 560 is_detaching_(false),
561 proxy_routing_id_(MSG_ROUTING_NONE),
549 cookie_jar_(this), 562 cookie_jar_(this),
550 selection_text_offset_(0), 563 selection_text_offset_(0),
551 selection_range_(gfx::Range::InvalidRange()), 564 selection_range_(gfx::Range::InvalidRange()),
552 handling_select_range_(false), 565 handling_select_range_(false),
553 notification_permission_dispatcher_(NULL), 566 notification_permission_dispatcher_(NULL),
554 notification_provider_(NULL), 567 notification_provider_(NULL),
555 web_user_media_client_(NULL), 568 web_user_media_client_(NULL),
556 midi_dispatcher_(NULL), 569 midi_dispatcher_(NULL),
557 #if defined(OS_ANDROID) 570 #if defined(OS_ANDROID)
558 media_player_manager_(NULL), 571 media_player_manager_(NULL),
(...skipping 1653 matching lines...) Expand 10 before | Expand all | Expand 10 after
2212 const blink::WebHistoryItem& item, 2225 const blink::WebHistoryItem& item,
2213 blink::WebHistoryCommitType commit_type) { 2226 blink::WebHistoryCommitType commit_type) {
2214 TRACE_EVENT2("navigation", "RenderFrameImpl::didCommitProvisionalLoad", 2227 TRACE_EVENT2("navigation", "RenderFrameImpl::didCommitProvisionalLoad",
2215 "id", routing_id_, 2228 "id", routing_id_,
2216 "url", GetLoadingUrl().possibly_invalid_spec()); 2229 "url", GetLoadingUrl().possibly_invalid_spec());
2217 DCHECK(!frame_ || frame_ == frame); 2230 DCHECK(!frame_ || frame_ == frame);
2218 DocumentState* document_state = 2231 DocumentState* document_state =
2219 DocumentState::FromDataSource(frame->dataSource()); 2232 DocumentState::FromDataSource(frame->dataSource());
2220 NavigationState* navigation_state = document_state->navigation_state(); 2233 NavigationState* navigation_state = document_state->navigation_state();
2221 2234
2235 if (proxy_routing_id_ != MSG_ROUTING_NONE) {
2236 RenderFrameProxy* proxy =
2237 RenderFrameProxy::FromRoutingID(proxy_routing_id_);
2238 CHECK(proxy);
2239 proxy->web_frame()->swap(frame_);
2240 proxy_routing_id_ = MSG_ROUTING_NONE;
2241 }
2242
2222 // When we perform a new navigation, we need to update the last committed 2243 // 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 2244 // session history entry with state for the page we are leaving. Do this
2224 // before updating the HistoryController state. 2245 // before updating the HistoryController state.
2225 render_view_->UpdateSessionHistory(frame); 2246 render_view_->UpdateSessionHistory(frame);
2226 2247
2227 render_view_->history_controller()->UpdateForCommit(this, item, commit_type, 2248 render_view_->history_controller()->UpdateForCommit(this, item, commit_type,
2228 navigation_state->was_within_same_page()); 2249 navigation_state->was_within_same_page());
2229 2250
2230 InternalDocumentStateData* internal_data = 2251 InternalDocumentStateData* internal_data =
2231 InternalDocumentStateData::FromDocumentState(document_state); 2252 InternalDocumentStateData::FromDocumentState(document_state);
(...skipping 1870 matching lines...) Expand 10 before | Expand all | Expand 10 after
4102 4123
4103 #if defined(ENABLE_BROWSER_CDMS) 4124 #if defined(ENABLE_BROWSER_CDMS)
4104 RendererCdmManager* RenderFrameImpl::GetCdmManager() { 4125 RendererCdmManager* RenderFrameImpl::GetCdmManager() {
4105 if (!cdm_manager_) 4126 if (!cdm_manager_)
4106 cdm_manager_ = new RendererCdmManager(this); 4127 cdm_manager_ = new RendererCdmManager(this);
4107 return cdm_manager_; 4128 return cdm_manager_;
4108 } 4129 }
4109 #endif // defined(ENABLE_BROWSER_CDMS) 4130 #endif // defined(ENABLE_BROWSER_CDMS)
4110 4131
4111 } // namespace content 4132 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698