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

Side by Side Diff: content/browser/frame_host/render_frame_host_manager.cc

Issue 292363003: Always call WCO::RenderFrameCreated and WCO::RenderFrameDeleted (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Formatting fix Created 6 years, 7 months 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 | Annotate | Revision Log
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/browser/frame_host/render_frame_host_manager.h" 5 #include "content/browser/frame_host/render_frame_host_manager.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
(...skipping 528 matching lines...) Expand 10 before | Expand all | Expand 10 after
539 539
540 void RenderFrameHostManager::ClearPendingShutdownRFHForSiteInstance( 540 void RenderFrameHostManager::ClearPendingShutdownRFHForSiteInstance(
541 int32 site_instance_id, 541 int32 site_instance_id,
542 RenderFrameHostImpl* rfh) { 542 RenderFrameHostImpl* rfh) {
543 RFHPendingDeleteMap::iterator iter = 543 RFHPendingDeleteMap::iterator iter =
544 pending_delete_hosts_.find(site_instance_id); 544 pending_delete_hosts_.find(site_instance_id);
545 if (iter != pending_delete_hosts_.end() && iter->second.get() == rfh) 545 if (iter != pending_delete_hosts_.end() && iter->second.get() == rfh)
546 pending_delete_hosts_.erase(site_instance_id); 546 pending_delete_hosts_.erase(site_instance_id);
547 } 547 }
548 548
549 void RenderFrameHostManager::ResetProxyHosts() {
550 STLDeleteValues(&proxy_hosts_);
551 }
552
549 void RenderFrameHostManager::Observe( 553 void RenderFrameHostManager::Observe(
550 int type, 554 int type,
551 const NotificationSource& source, 555 const NotificationSource& source,
552 const NotificationDetails& details) { 556 const NotificationDetails& details) {
553 switch (type) { 557 switch (type) {
554 case NOTIFICATION_RENDERER_PROCESS_CLOSED: 558 case NOTIFICATION_RENDERER_PROCESS_CLOSED:
555 case NOTIFICATION_RENDERER_PROCESS_CLOSING: 559 case NOTIFICATION_RENDERER_PROCESS_CLOSING:
556 RendererProcessClosing( 560 RendererProcessClosing(
557 Source<RenderProcessHost>(source).ptr()); 561 Source<RenderProcessHost>(source).ptr());
558 break; 562 break;
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after
891 895
892 int RenderFrameHostManager::CreateRenderFrame( 896 int RenderFrameHostManager::CreateRenderFrame(
893 SiteInstance* instance, 897 SiteInstance* instance,
894 int opener_route_id, 898 int opener_route_id,
895 bool swapped_out, 899 bool swapped_out,
896 bool hidden) { 900 bool hidden) {
897 CHECK(instance); 901 CHECK(instance);
898 DCHECK(!swapped_out || hidden); // Swapped out views should always be hidden. 902 DCHECK(!swapped_out || hidden); // Swapped out views should always be hidden.
899 903
900 scoped_ptr<RenderFrameHostImpl> new_render_frame_host; 904 scoped_ptr<RenderFrameHostImpl> new_render_frame_host;
905 RenderFrameHostImpl* frame_to_announce = NULL;
901 int routing_id = MSG_ROUTING_NONE; 906 int routing_id = MSG_ROUTING_NONE;
902 907
903 // We are creating a pending or swapped out RFH here. We should never create 908 // We are creating a pending or swapped out RFH here. We should never create
904 // it in the same SiteInstance as our current RFH. 909 // it in the same SiteInstance as our current RFH.
905 CHECK_NE(render_frame_host_->GetSiteInstance(), instance); 910 CHECK_NE(render_frame_host_->GetSiteInstance(), instance);
906 911
907 // Check if we've already created an RFH for this SiteInstance. If so, try 912 // Check if we've already created an RFH for this SiteInstance. If so, try
908 // to re-use the existing one, which has already been initialized. We'll 913 // to re-use the existing one, which has already been initialized. We'll
909 // remove it from the list of swapped out hosts if it commits. 914 // remove it from the list of swapped out hosts if it commits.
910 RenderFrameProxyHost* proxy = GetRenderFrameProxyHost(instance); 915 RenderFrameProxyHost* proxy = GetRenderFrameProxyHost(instance);
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
944 cross_process_frame_connector_ = NULL; 949 cross_process_frame_connector_ = NULL;
945 } 950 }
946 } 951 }
947 } else { 952 } else {
948 // Create a new RenderFrameHost if we don't find an existing one. 953 // Create a new RenderFrameHost if we don't find an existing one.
949 new_render_frame_host = CreateRenderFrameHost( 954 new_render_frame_host = CreateRenderFrameHost(
950 instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE, swapped_out, hidden); 955 instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE, swapped_out, hidden);
951 RenderViewHostImpl* render_view_host = 956 RenderViewHostImpl* render_view_host =
952 new_render_frame_host->render_view_host(); 957 new_render_frame_host->render_view_host();
953 int proxy_routing_id = MSG_ROUTING_NONE; 958 int proxy_routing_id = MSG_ROUTING_NONE;
959 frame_to_announce = new_render_frame_host.get();
954 960
955 // Prevent the process from exiting while we're trying to navigate in it. 961 // Prevent the process from exiting while we're trying to navigate in it.
956 // Otherwise, if the new RFH is swapped out already, store it. 962 // Otherwise, if the new RFH is swapped out already, store it.
957 if (!swapped_out) { 963 if (!swapped_out) {
958 new_render_frame_host->GetProcess()->AddPendingView(); 964 new_render_frame_host->GetProcess()->AddPendingView();
959 } else { 965 } else {
960 proxy = new RenderFrameProxyHost( 966 proxy = new RenderFrameProxyHost(
961 new_render_frame_host->GetSiteInstance(), frame_tree_node_); 967 new_render_frame_host->GetSiteInstance(), frame_tree_node_);
962 proxy_hosts_[instance->GetId()] = proxy; 968 proxy_hosts_[instance->GetId()] = proxy;
963 proxy->TakeFrameHostOwnership(new_render_frame_host.Pass()); 969 proxy->TakeFrameHostOwnership(new_render_frame_host.Pass());
964 proxy_routing_id = proxy->GetRoutingID(); 970 proxy_routing_id = proxy->GetRoutingID();
965 } 971 }
966 972
967 bool success = InitRenderView( 973 bool success = InitRenderView(
968 render_view_host, opener_route_id, proxy_routing_id); 974 render_view_host, opener_route_id, proxy_routing_id);
969 if (success && frame_tree_node_->IsMainFrame()) { 975 if (success && frame_tree_node_->IsMainFrame()) {
970 // Don't show the main frame's view until we get a DidNavigate from it. 976 // Don't show the main frame's view until we get a DidNavigate from it.
971 render_view_host->GetView()->Hide(); 977 render_view_host->GetView()->Hide();
972 } else if (!swapped_out && pending_render_frame_host_) { 978 } else if (!swapped_out && pending_render_frame_host_) {
973 CancelPending(); 979 CancelPending();
974 } 980 }
975 routing_id = render_view_host->GetRoutingID(); 981 routing_id = render_view_host->GetRoutingID();
976 } 982 }
977 983
978 // Use this as our new pending RFH if it isn't swapped out. 984 // Use this as our new pending RFH if it isn't swapped out.
979 if (!swapped_out) 985 if (!swapped_out)
980 pending_render_frame_host_ = new_render_frame_host.Pass(); 986 pending_render_frame_host_ = new_render_frame_host.Pass();
981 987
988 // If a brand new RFH was created, announce it to observers.
989 if (frame_to_announce)
990 render_frame_delegate_->RenderFrameCreated(frame_to_announce);
991
982 return routing_id; 992 return routing_id;
983 } 993 }
984 994
985 bool RenderFrameHostManager::InitRenderView(RenderViewHost* render_view_host, 995 bool RenderFrameHostManager::InitRenderView(RenderViewHost* render_view_host,
986 int opener_route_id, 996 int opener_route_id,
987 int proxy_routing_id) { 997 int proxy_routing_id) {
988 // We may have initialized this RenderViewHost for another RenderFrameHost. 998 // We may have initialized this RenderViewHost for another RenderFrameHost.
989 if (render_view_host->IsRenderViewLive()) 999 if (render_view_host->IsRenderViewLive())
990 return true; 1000 return true;
991 1001
(...skipping 458 matching lines...) Expand 10 before | Expand all | Expand 10 after
1450 SiteInstance* instance) const { 1460 SiteInstance* instance) const {
1451 RenderFrameProxyHostMap::const_iterator iter = 1461 RenderFrameProxyHostMap::const_iterator iter =
1452 proxy_hosts_.find(instance->GetId()); 1462 proxy_hosts_.find(instance->GetId());
1453 if (iter != proxy_hosts_.end()) 1463 if (iter != proxy_hosts_.end())
1454 return iter->second; 1464 return iter->second;
1455 1465
1456 return NULL; 1466 return NULL;
1457 } 1467 }
1458 1468
1459 } // namespace content 1469 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698