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

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

Issue 616133002: Make RenderFrame(Host) own a RenderWidget(Host). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 6 years, 2 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
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 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 void RenderFrameHostManager::Init(BrowserContext* browser_context, 79 void RenderFrameHostManager::Init(BrowserContext* browser_context,
80 SiteInstance* site_instance, 80 SiteInstance* site_instance,
81 int view_routing_id, 81 int view_routing_id,
82 int frame_routing_id) { 82 int frame_routing_id) {
83 // Create a RenderViewHost and RenderFrameHost, once we have an instance. It 83 // Create a RenderViewHost and RenderFrameHost, once we have an instance. It
84 // is important to immediately give this SiteInstance to a RenderViewHost so 84 // is important to immediately give this SiteInstance to a RenderViewHost so
85 // that the SiteInstance is ref counted. 85 // that the SiteInstance is ref counted.
86 if (!site_instance) 86 if (!site_instance)
87 site_instance = SiteInstance::Create(browser_context); 87 site_instance = SiteInstance::Create(browser_context);
88 88
89 int flags = delegate_->IsHidden() ? HIDDEN : 0;
89 SetRenderFrameHost(CreateRenderFrameHost(site_instance, 90 SetRenderFrameHost(CreateRenderFrameHost(site_instance,
90 view_routing_id, 91 view_routing_id,
91 frame_routing_id, 92 frame_routing_id,
92 false, 93 flags));
93 delegate_->IsHidden()));
94 94
95 // Keep track of renderer processes as they start to shut down or are 95 // Keep track of renderer processes as they start to shut down or are
96 // crashed/killed. 96 // crashed/killed.
97 registrar_.Add(this, NOTIFICATION_RENDERER_PROCESS_CLOSED, 97 registrar_.Add(this, NOTIFICATION_RENDERER_PROCESS_CLOSED,
98 NotificationService::AllSources()); 98 NotificationService::AllSources());
99 registrar_.Add(this, NOTIFICATION_RENDERER_PROCESS_CLOSING, 99 registrar_.Add(this, NOTIFICATION_RENDERER_PROCESS_CLOSING,
100 NotificationService::AllSources()); 100 NotificationService::AllSources());
101 } 101 }
102 102
103 RenderViewHostImpl* RenderFrameHostManager::current_host() const { 103 RenderViewHostImpl* RenderFrameHostManager::current_host() const {
104 if (!render_frame_host_) 104 if (!render_frame_host_)
105 return NULL; 105 return NULL;
106 return render_frame_host_->render_view_host(); 106 return render_frame_host_->render_view_host();
107 } 107 }
108 108
109 RenderViewHostImpl* RenderFrameHostManager::pending_render_view_host() const { 109 RenderViewHostImpl* RenderFrameHostManager::pending_render_view_host() const {
110 if (!pending_render_frame_host_) 110 if (!pending_render_frame_host_)
111 return NULL; 111 return NULL;
112 return pending_render_frame_host_->render_view_host(); 112 return pending_render_frame_host_->render_view_host();
113 } 113 }
114 114
115 RenderWidgetHostView* RenderFrameHostManager::GetRenderWidgetHostView() const { 115 RenderWidgetHostView* RenderFrameHostManager::GetRenderWidgetHostView() const {
116 if (interstitial_page_) 116 if (interstitial_page_)
117 return interstitial_page_->GetView(); 117 return interstitial_page_->GetView();
118 if (!render_frame_host_) 118 if (!render_frame_host_)
119 return NULL; 119 return NULL;
120 return render_frame_host_->render_view_host()->GetView(); 120 return static_cast<RenderFrameHostImpl*>(render_frame_host_->
121 render_view_host()->GetMainFrame())->GetView();
121 } 122 }
122 123
123 RenderFrameProxyHost* RenderFrameHostManager::GetProxyToParent() { 124 RenderFrameProxyHost* RenderFrameHostManager::GetProxyToParent() {
124 if (frame_tree_node_->IsMainFrame()) 125 if (frame_tree_node_->IsMainFrame())
125 return NULL; 126 return NULL;
126 127
127 RenderFrameProxyHostMap::iterator iter = 128 RenderFrameProxyHostMap::iterator iter =
128 proxy_hosts_.find(frame_tree_node_->parent() 129 proxy_hosts_.find(frame_tree_node_->parent()
129 ->render_manager() 130 ->render_manager()
130 ->current_frame_host() 131 ->current_frame_host()
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
192 if (!InitRenderView(dest_render_frame_host->render_view_host(), 193 if (!InitRenderView(dest_render_frame_host->render_view_host(),
193 opener_route_id, 194 opener_route_id,
194 MSG_ROUTING_NONE, 195 MSG_ROUTING_NONE,
195 frame_tree_node_->IsMainFrame())) 196 frame_tree_node_->IsMainFrame()))
196 return NULL; 197 return NULL;
197 198
198 // Now that we've created a new renderer, be sure to hide it if it isn't 199 // Now that we've created a new renderer, be sure to hide it if it isn't
199 // our primary one. Otherwise, we might crash if we try to call Show() 200 // our primary one. Otherwise, we might crash if we try to call Show()
200 // on it later. 201 // on it later.
201 if (dest_render_frame_host != render_frame_host_ && 202 if (dest_render_frame_host != render_frame_host_ &&
202 dest_render_frame_host->render_view_host()->GetView()) { 203 dest_render_frame_host->GetView()) {
203 dest_render_frame_host->render_view_host()->GetView()->Hide(); 204 dest_render_frame_host->GetView()->Hide();
204 } else { 205 } else {
205 // Notify here as we won't be calling CommitPending (which does the 206 // Notify here as we won't be calling CommitPending (which does the
206 // notify). 207 // notify).
207 delegate_->NotifySwappedFromRenderManager( 208 delegate_->NotifySwappedFromRenderManager(
208 NULL, render_frame_host_.get(), frame_tree_node_->IsMainFrame()); 209 NULL, render_frame_host_.get(), frame_tree_node_->IsMainFrame());
209 } 210 }
210 } 211 }
211 212
212 // If entry includes the request ID of a request that is being transferred, 213 // If entry includes the request ID of a request that is being transferred,
213 // the destination render frame will take ownership, so release ownership of 214 // the destination render frame will take ownership, so release ownership of
(...skipping 737 matching lines...) Expand 10 before | Expand all | Expand 10 after
951 // SiteInstance to a RenderViewHost (if it is different than our current 952 // SiteInstance to a RenderViewHost (if it is different than our current
952 // SiteInstance), so that it is ref counted. This will happen in 953 // SiteInstance), so that it is ref counted. This will happen in
953 // CreateRenderView. 954 // CreateRenderView.
954 return current_instance->GetRelatedSiteInstance(dest_url); 955 return current_instance->GetRelatedSiteInstance(dest_url);
955 } 956 }
956 957
957 void RenderFrameHostManager::CreateRenderFrameHostForNewSiteInstance( 958 void RenderFrameHostManager::CreateRenderFrameHostForNewSiteInstance(
958 SiteInstance* old_instance, 959 SiteInstance* old_instance,
959 SiteInstance* new_instance, 960 SiteInstance* new_instance,
960 bool is_main_frame) { 961 bool is_main_frame) {
962 int create_render_frame_flags = is_main_frame ? FOR_MAIN_FRAME_NAVIGATION : 0;
961 // Ensure that we have created RFHs for the new RFH's opener chain if 963 // Ensure that we have created RFHs for the new RFH's opener chain if
962 // we are staying in the same BrowsingInstance. This allows the new RFH 964 // we are staying in the same BrowsingInstance. This allows the new RFH
963 // to send cross-process script calls to its opener(s). 965 // to send cross-process script calls to its opener(s).
964 int opener_route_id = MSG_ROUTING_NONE; 966 int opener_route_id = MSG_ROUTING_NONE;
965 if (new_instance->IsRelatedSiteInstance(old_instance)) { 967 if (new_instance->IsRelatedSiteInstance(old_instance)) {
966 opener_route_id = 968 opener_route_id =
967 delegate_->CreateOpenerRenderViewsForRenderManager(new_instance); 969 delegate_->CreateOpenerRenderViewsForRenderManager(new_instance);
968 if (CommandLine::ForCurrentProcess()->HasSwitch( 970 if (CommandLine::ForCurrentProcess()->HasSwitch(
969 switches::kSitePerProcess)) { 971 switches::kSitePerProcess)) {
970 // Ensure that the frame tree has RenderFrameProxyHosts for the new 972 // Ensure that the frame tree has RenderFrameProxyHosts for the new
971 // SiteInstance in all nodes except the current one. 973 // SiteInstance in all nodes except the current one.
972 frame_tree_node_->frame_tree()->CreateProxiesForSiteInstance( 974 frame_tree_node_->frame_tree()->CreateProxiesForSiteInstance(
973 frame_tree_node_, new_instance); 975 frame_tree_node_, new_instance);
976 // RenderFrames in different processes from their parent RenderFrames
977 // in the frame tree require RenderWidgets for rendering and processing
978 // input events.
979 if (frame_tree_node_->parent() &&
980 frame_tree_node_->parent()->render_manager()->
981 current_frame_host()->GetSiteInstance() != new_instance)
982 create_render_frame_flags |= CREATE_RENDER_WIDGET_HOST;
974 } 983 }
975 } 984 }
976 985
986 create_render_frame_flags |= delegate_->IsHidden() ? HIDDEN : 0;
987
977 // Create a non-swapped-out RFH with the given opener. 988 // Create a non-swapped-out RFH with the given opener.
978 int route_id = CreateRenderFrame( 989 int route_id = CreateRenderFrame(
979 new_instance, opener_route_id, false, is_main_frame, 990 new_instance, opener_route_id, create_render_frame_flags);
980 delegate_->IsHidden());
981 if (route_id == MSG_ROUTING_NONE) { 991 if (route_id == MSG_ROUTING_NONE) {
982 pending_render_frame_host_.reset(); 992 pending_render_frame_host_.reset();
983 return; 993 return;
984 } 994 }
985 } 995 }
986 996
987 scoped_ptr<RenderFrameHostImpl> RenderFrameHostManager::CreateRenderFrameHost( 997 scoped_ptr<RenderFrameHostImpl> RenderFrameHostManager::CreateRenderFrameHost(
988 SiteInstance* site_instance, 998 SiteInstance* site_instance,
989 int view_routing_id, 999 int view_routing_id,
990 int frame_routing_id, 1000 int frame_routing_id,
991 bool swapped_out, 1001 int flags) {
992 bool hidden) {
993 if (frame_routing_id == MSG_ROUTING_NONE) 1002 if (frame_routing_id == MSG_ROUTING_NONE)
994 frame_routing_id = site_instance->GetProcess()->GetNextRoutingID(); 1003 frame_routing_id = site_instance->GetProcess()->GetNextRoutingID();
995 1004
1005 bool swapped_out = flags & SWAPPED_OUT;
1006 bool hidden = flags & HIDDEN;
1007
996 // Create a RVH for main frames, or find the existing one for subframes. 1008 // Create a RVH for main frames, or find the existing one for subframes.
997 FrameTree* frame_tree = frame_tree_node_->frame_tree(); 1009 FrameTree* frame_tree = frame_tree_node_->frame_tree();
998 RenderViewHostImpl* render_view_host = NULL; 1010 RenderViewHostImpl* render_view_host = NULL;
999 if (frame_tree_node_->IsMainFrame()) { 1011 if (frame_tree_node_->IsMainFrame()) {
1000 render_view_host = frame_tree->CreateRenderViewHost( 1012 render_view_host = frame_tree->CreateRenderViewHost(
1001 site_instance, view_routing_id, frame_routing_id, swapped_out, hidden); 1013 site_instance,
1014 view_routing_id,
1015 frame_routing_id,
1016 swapped_out,
1017 hidden);
1002 } else { 1018 } else {
1003 render_view_host = frame_tree->GetRenderViewHost(site_instance); 1019 render_view_host = frame_tree->GetRenderViewHost(site_instance);
1004 1020
1005 CHECK(render_view_host); 1021 CHECK(render_view_host);
1006 } 1022 }
1007 1023
1008 // TODO(creis): Pass hidden to RFH. 1024 // TODO(creis): Pass hidden to RFH.
1009 scoped_ptr<RenderFrameHostImpl> render_frame_host = 1025 scoped_ptr<RenderFrameHostImpl> render_frame_host =
1010 make_scoped_ptr(RenderFrameHostFactory::Create(render_view_host, 1026 make_scoped_ptr(RenderFrameHostFactory::Create(render_view_host,
1011 render_frame_delegate_, 1027 render_frame_delegate_,
1028 render_widget_delegate_,
1012 frame_tree, 1029 frame_tree,
1013 frame_tree_node_, 1030 frame_tree_node_,
1014 frame_routing_id, 1031 frame_routing_id,
1015 swapped_out).release()); 1032 flags).release());
1016 return render_frame_host.Pass(); 1033 return render_frame_host.Pass();
1017 } 1034 }
1018 1035
1019 int RenderFrameHostManager::CreateRenderFrame(SiteInstance* instance, 1036 int RenderFrameHostManager::CreateRenderFrame(SiteInstance* instance,
1020 int opener_route_id, 1037 int opener_route_id,
1021 bool swapped_out, 1038 int flags) {
1022 bool for_main_frame_navigation, 1039 bool swapped_out = flags & SWAPPED_OUT;
1023 bool hidden) {
1024 CHECK(instance); 1040 CHECK(instance);
1025 DCHECK(!swapped_out || hidden); // Swapped out views should always be hidden. 1041 // Swapped out views should always be hidden.
1042 DCHECK(!swapped_out || (flags & HIDDEN));
1026 1043
1027 // TODO(nasko): Remove the following CHECK once cross-site navigation no 1044 // TODO(nasko): Remove the following CHECK once cross-site navigation no
1028 // longer relies on swapped out RFH for the top-level frame. 1045 // longer relies on swapped out RFH for the top-level frame.
1029 if (!frame_tree_node_->IsMainFrame()) { 1046 if (!frame_tree_node_->IsMainFrame()) {
1030 CHECK(!swapped_out); 1047 CHECK(!swapped_out);
1031 } 1048 }
1032 1049
1033 scoped_ptr<RenderFrameHostImpl> new_render_frame_host; 1050 scoped_ptr<RenderFrameHostImpl> new_render_frame_host;
1034 RenderFrameHostImpl* frame_to_announce = NULL; 1051 RenderFrameHostImpl* frame_to_announce = NULL;
1035 int routing_id = MSG_ROUTING_NONE; 1052 int routing_id = MSG_ROUTING_NONE;
(...skipping 27 matching lines...) Expand all
1063 int required_bindings = pending_web_ui()->GetBindings(); 1080 int required_bindings = pending_web_ui()->GetBindings();
1064 RenderViewHost* rvh = new_render_frame_host->render_view_host(); 1081 RenderViewHost* rvh = new_render_frame_host->render_view_host();
1065 if ((rvh->GetEnabledBindings() & required_bindings) != 1082 if ((rvh->GetEnabledBindings() & required_bindings) !=
1066 required_bindings) { 1083 required_bindings) {
1067 rvh->AllowBindings(required_bindings); 1084 rvh->AllowBindings(required_bindings);
1068 } 1085 }
1069 } 1086 }
1070 } 1087 }
1071 } else { 1088 } else {
1072 // Create a new RenderFrameHost if we don't find an existing one. 1089 // Create a new RenderFrameHost if we don't find an existing one.
1073 new_render_frame_host = CreateRenderFrameHost( 1090 new_render_frame_host = CreateRenderFrameHost(instance,
1074 instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE, swapped_out, hidden); 1091 MSG_ROUTING_NONE,
1092 MSG_ROUTING_NONE,
1093 flags);
1075 RenderViewHostImpl* render_view_host = 1094 RenderViewHostImpl* render_view_host =
1076 new_render_frame_host->render_view_host(); 1095 new_render_frame_host->render_view_host();
1077 int proxy_routing_id = MSG_ROUTING_NONE; 1096 int proxy_routing_id = MSG_ROUTING_NONE;
1078 1097
1079 // Prevent the process from exiting while we're trying to navigate in it. 1098 // Prevent the process from exiting while we're trying to navigate in it.
1080 // Otherwise, if the new RFH is swapped out already, store it. 1099 // Otherwise, if the new RFH is swapped out already, store it.
1081 if (!swapped_out) { 1100 if (!swapped_out) {
1082 new_render_frame_host->GetProcess()->AddPendingView(); 1101 new_render_frame_host->GetProcess()->AddPendingView();
1083 } else { 1102 } else {
1084 proxy = new RenderFrameProxyHost( 1103 proxy = new RenderFrameProxyHost(
1085 new_render_frame_host->GetSiteInstance(), frame_tree_node_); 1104 new_render_frame_host->GetSiteInstance(), frame_tree_node_);
1086 proxy_hosts_[instance->GetId()] = proxy; 1105 proxy_hosts_[instance->GetId()] = proxy;
1087 proxy_routing_id = proxy->GetRoutingID(); 1106 proxy_routing_id = proxy->GetRoutingID();
1088 if (frame_tree_node_->IsMainFrame()) 1107 if (frame_tree_node_->IsMainFrame())
1089 proxy->TakeFrameHostOwnership(new_render_frame_host.Pass()); 1108 proxy->TakeFrameHostOwnership(new_render_frame_host.Pass());
1090 } 1109 }
1091 1110
1092 bool success = InitRenderView(render_view_host, 1111 bool success = InitRenderView(render_view_host,
1093 opener_route_id, 1112 opener_route_id,
1094 proxy_routing_id, 1113 proxy_routing_id,
1095 for_main_frame_navigation); 1114 flags & FOR_MAIN_FRAME_NAVIGATION);
1096 if (success) { 1115 if (success) {
1097 if (frame_tree_node_->IsMainFrame()) { 1116 if (frame_tree_node_->IsMainFrame()) {
1098 // Don't show the main frame's view until we get a DidNavigate from it. 1117 // Don't show the main frame's view until we get a DidNavigate from it.
1099 render_view_host->GetView()->Hide(); 1118 // Only top-level RenderViewHosts have RenderWidgetHostViews;
1119 // RenderWidgetHosts for out-of-process iframes will be created
1120 // later and hidden.
1121 if (render_view_host->GetView())
1122 render_view_host->GetView()->Hide();
1100 } else if (!swapped_out) { 1123 } else if (!swapped_out) {
1101 // Init the RFH, so a RenderFrame is created in the renderer. 1124 // Init the RFH, so a RenderFrame is created in the renderer.
1102 DCHECK(new_render_frame_host.get()); 1125 DCHECK(new_render_frame_host.get());
1103 success = InitRenderFrame(new_render_frame_host.get()); 1126 success = InitRenderFrame(new_render_frame_host.get());
1104 } 1127 }
1105 if (swapped_out) { 1128 if (swapped_out) {
1106 proxy_hosts_[instance->GetId()]->InitRenderFrameProxy(); 1129 proxy_hosts_[instance->GetId()]->InitRenderFrameProxy();
1107 } 1130 }
1108 } else if (!swapped_out && pending_render_frame_host_) { 1131 } else if (!swapped_out && pending_render_frame_host_) {
1109 CancelPending(); 1132 CancelPending();
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
1223 // committing above and we're done. 1246 // committing above and we're done.
1224 if (!pending_render_frame_host_) { 1247 if (!pending_render_frame_host_) {
1225 if (will_focus_location_bar) 1248 if (will_focus_location_bar)
1226 delegate_->SetFocusToLocationBar(false); 1249 delegate_->SetFocusToLocationBar(false);
1227 return; 1250 return;
1228 } 1251 }
1229 1252
1230 // Remember if the page was focused so we can focus the new renderer in 1253 // Remember if the page was focused so we can focus the new renderer in
1231 // that case. 1254 // that case.
1232 bool focus_render_view = !will_focus_location_bar && 1255 bool focus_render_view = !will_focus_location_bar &&
1233 render_frame_host_->render_view_host()->GetView() && 1256 render_frame_host_->GetView() &&
1234 render_frame_host_->render_view_host()->GetView()->HasFocus(); 1257 render_frame_host_->GetView()->HasFocus();
1235 1258
1236 bool is_main_frame = frame_tree_node_->IsMainFrame(); 1259 bool is_main_frame = frame_tree_node_->IsMainFrame();
1237 1260
1238 // Swap in the pending frame and make it active. Also ensure the FrameTree 1261 // Swap in the pending frame and make it active. Also ensure the FrameTree
1239 // stays in sync. 1262 // stays in sync.
1240 scoped_ptr<RenderFrameHostImpl> old_render_frame_host = 1263 scoped_ptr<RenderFrameHostImpl> old_render_frame_host =
1241 SetRenderFrameHost(pending_render_frame_host_.Pass()); 1264 SetRenderFrameHost(pending_render_frame_host_.Pass());
1242 if (is_main_frame) 1265 if (is_main_frame)
1243 render_frame_host_->render_view_host()->AttachToFrameTree(); 1266 render_frame_host_->render_view_host()->AttachToFrameTree();
1244 1267
1245 // The process will no longer try to exit, so we can decrement the count. 1268 // The process will no longer try to exit, so we can decrement the count.
1246 render_frame_host_->GetProcess()->RemovePendingView(); 1269 render_frame_host_->GetProcess()->RemovePendingView();
1247 1270
1248 // Show the new view (or a sad tab) if necessary. 1271 // Show the new view (or a sad tab) if necessary.
1249 bool new_rfh_has_view = !!render_frame_host_->render_view_host()->GetView(); 1272 bool new_rfh_has_view = !!render_frame_host_->GetView();
1250 if (!delegate_->IsHidden() && new_rfh_has_view) { 1273 if (!delegate_->IsHidden() && new_rfh_has_view) {
1251 // In most cases, we need to show the new view. 1274 // In most cases, we need to show the new view.
1252 render_frame_host_->render_view_host()->GetView()->Show(); 1275 render_frame_host_->GetView()->Show();
1253 } 1276 }
1254 if (!new_rfh_has_view) { 1277 if (!new_rfh_has_view) {
1255 // If the view is gone, then this RenderViewHost died while it was hidden. 1278 // If the view is gone, then this RenderViewHost died while it was hidden.
1256 // We ignored the RenderProcessGone call at the time, so we should send it 1279 // We ignored the RenderProcessGone call at the time, so we should send it
1257 // now to make sure the sad tab shows up, etc. 1280 // now to make sure the sad tab shows up, etc.
1258 DCHECK(!render_frame_host_->IsRenderFrameLive()); 1281 DCHECK(!render_frame_host_->IsRenderFrameLive());
1259 DCHECK(!render_frame_host_->render_view_host()->IsRenderViewLive()); 1282 DCHECK(!render_frame_host_->render_view_host()->IsRenderViewLive());
1260 delegate_->RenderProcessGoneFromRenderManager( 1283 delegate_->RenderProcessGoneFromRenderManager(
1261 render_frame_host_->render_view_host()); 1284 render_frame_host_->render_view_host());
1262 } 1285 }
1263 1286
1264 // For top-level frames, also hide the old RenderViewHost's view. 1287 // For top-level frames, also hide the old RenderViewHost's view.
1265 // TODO(creis): As long as show/hide are on RVH, we don't want to hide on 1288 // TODO(creis): As long as show/hide are on RVH, we don't want to hide on
1266 // subframe navigations or we will interfere with the top-level frame. 1289 // subframe navigations or we will interfere with the top-level frame.
1267 if (is_main_frame && old_render_frame_host->render_view_host()->GetView()) 1290 if (is_main_frame && old_render_frame_host->render_view_host()->GetView())
1268 old_render_frame_host->render_view_host()->GetView()->Hide(); 1291 old_render_frame_host->render_view_host()->GetView()->Hide();
1269 1292
1270 // Make sure the size is up to date. (Fix for bug 1079768.) 1293 // Make sure the size is up to date. (Fix for bug 1079768.)
1271 delegate_->UpdateRenderViewSizeForRenderManager(); 1294 delegate_->UpdateRenderViewSizeForRenderManager();
1272 1295
1273 if (will_focus_location_bar) { 1296 if (will_focus_location_bar) {
1274 delegate_->SetFocusToLocationBar(false); 1297 delegate_->SetFocusToLocationBar(false);
1275 } else if (focus_render_view && 1298 } else if (focus_render_view &&
1276 render_frame_host_->render_view_host()->GetView()) { 1299 render_frame_host_->GetView()) {
1277 render_frame_host_->render_view_host()->GetView()->Focus(); 1300 render_frame_host_->GetView()->Focus();
1278 } 1301 }
1279 1302
1280 // Notify that we've swapped RenderFrameHosts. We do this before shutting down 1303 // Notify that we've swapped RenderFrameHosts. We do this before shutting down
1281 // the RFH so that we can clean up RendererResources related to the RFH first. 1304 // the RFH so that we can clean up RendererResources related to the RFH first.
1282 delegate_->NotifySwappedFromRenderManager( 1305 delegate_->NotifySwappedFromRenderManager(
1283 old_render_frame_host.get(), render_frame_host_.get(), is_main_frame); 1306 old_render_frame_host.get(), render_frame_host_.get(), is_main_frame);
1284 1307
1285 // Swap out the old frame now that the new one is visible. 1308 // Swap out the old frame now that the new one is visible.
1286 // This will swap it out and then put it on the proxy list (if there are other 1309 // This will swap it out and then put it on the proxy list (if there are other
1287 // active views in its SiteInstance) or schedule it for deletion when the swap 1310 // active views in its SiteInstance) or schedule it for deletion when the swap
1288 // out ack arrives (or immediately if the process isn't live). 1311 // out ack arrives (or immediately if the process isn't live).
1289 // In the --site-per-process case, old subframe RHFs are not kept alive inside 1312 // In the --site-per-process case, old subframe RHFs are not kept alive inside
1290 // the proxy. 1313 // the proxy.
1291 SwapOutOldFrame(old_render_frame_host.Pass()); 1314 SwapOutOldFrame(old_render_frame_host.Pass());
1292 1315
1293 // If this is a subframe, it should have a CrossProcessFrameConnector 1316 // If this is a subframe, it should have a CrossProcessFrameConnector
1294 // created already. Use it to link the new RFH's view to the proxy that 1317 // created already. Use it to link the new RFH's view to the proxy that
1295 // belongs to the parent frame's SiteInstance. 1318 // belongs to the parent frame's SiteInstance.
1296 // Note: We do this after swapping out the old RFH because that may create the 1319 // Note: We do this after swapping out the old RFH because that may create the
1297 // proxy we're looking for. 1320 // proxy we're looking for.
1298 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kSitePerProcess) && 1321 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kSitePerProcess) &&
1299 !is_main_frame) { 1322 !is_main_frame) {
1300 RenderFrameProxyHost* proxy_to_parent = GetProxyToParent(); 1323 RenderFrameProxyHost* proxy_to_parent = GetProxyToParent();
1301 if (proxy_to_parent) { 1324 if (proxy_to_parent) {
1302 proxy_to_parent->SetChildRWHView( 1325 proxy_to_parent->SetChildRWHView(
1303 render_frame_host_->render_view_host()->GetView()); 1326 render_frame_host_->GetView());
1304 } 1327 }
1305 } 1328 }
1306 } 1329 }
1307 1330
1308 void RenderFrameHostManager::ShutdownRenderFrameProxyHostsInSiteInstance( 1331 void RenderFrameHostManager::ShutdownRenderFrameProxyHostsInSiteInstance(
1309 int32 site_instance_id) { 1332 int32 site_instance_id) {
1310 // First remove any swapped out RFH for this SiteInstance from our own list. 1333 // First remove any swapped out RFH for this SiteInstance from our own list.
1311 ClearProxiesInSiteInstance(site_instance_id, frame_tree_node_); 1334 ClearProxiesInSiteInstance(site_instance_id, frame_tree_node_);
1312 1335
1313 // Use the safe RenderWidgetHost iterator for now to find all RenderViewHosts 1336 // Use the safe RenderWidgetHost iterator for now to find all RenderViewHosts
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after
1588 void RenderFrameHostManager::DeleteRenderFrameProxyHost( 1611 void RenderFrameHostManager::DeleteRenderFrameProxyHost(
1589 SiteInstance* instance) { 1612 SiteInstance* instance) {
1590 RenderFrameProxyHostMap::iterator iter = proxy_hosts_.find(instance->GetId()); 1613 RenderFrameProxyHostMap::iterator iter = proxy_hosts_.find(instance->GetId());
1591 if (iter != proxy_hosts_.end()) { 1614 if (iter != proxy_hosts_.end()) {
1592 delete iter->second; 1615 delete iter->second;
1593 proxy_hosts_.erase(iter); 1616 proxy_hosts_.erase(iter);
1594 } 1617 }
1595 } 1618 }
1596 1619
1597 } // namespace content 1620 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698